diff --git a/404.html b/404.html index b003f71..1bc1753 100644 --- a/404.html +++ b/404.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -92,7 +92,7 @@
@@ -120,7 +120,7 @@ @@ -130,7 +130,7 @@ @@ -140,7 +140,7 @@ @@ -148,14 +148,14 @@ - +
\n )\n }\n\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nexport default class Schemes extends React.Component {\n\n static propTypes = {\n specActions: PropTypes.object.isRequired,\n schemes: PropTypes.object.isRequired,\n currentScheme: PropTypes.string.isRequired,\n path: PropTypes.string,\n method: PropTypes.string,\n }\n\n UNSAFE_componentWillMount() {\n let { schemes } = this.props\n\n //fire 'change' event to set default 'value' of select\n this.setScheme(schemes.first())\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if ( !this.props.currentScheme || !nextProps.schemes.includes(this.props.currentScheme) ) {\n // if we don't have a selected currentScheme or if our selected scheme is no longer an option,\n // then fire 'change' event and select the first scheme in the list of options\n this.setScheme(nextProps.schemes.first())\n }\n }\n\n onChange =( e ) => {\n this.setScheme( e.target.value )\n }\n\n setScheme = ( value ) => {\n let { path, method, specActions } = this.props\n\n specActions.setScheme( value, path, method )\n }\n\n render() {\n let { schemes, currentScheme } = this.props\n\n return (\n \n )\n }\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nexport default class SchemesContainer extends React.Component {\n\n static propTypes = {\n specActions: PropTypes.object.isRequired,\n specSelectors: PropTypes.object.isRequired,\n getComponent: PropTypes.func.isRequired\n }\n\n render () {\n const {specActions, specSelectors, getComponent} = this.props\n\n const currentScheme = specSelectors.operationScheme()\n const schemes = specSelectors.schemes()\n\n const Schemes = getComponent(\"schemes\")\n\n const schemesArePresent = schemes && schemes.size\n\n return schemesArePresent ? (\n \n ) : null\n }\n}\n","import React, { Component } from \"react\"\nimport PropTypes from \"prop-types\"\nimport ImPropTypes from \"react-immutable-proptypes\"\nimport Im from \"immutable\"\n\nexport default class ModelCollapse extends Component {\n static propTypes = {\n collapsedContent: PropTypes.any,\n expanded: PropTypes.bool,\n children: PropTypes.any,\n title: PropTypes.element,\n modelName: PropTypes.string,\n classes: PropTypes.string,\n onToggle: PropTypes.func,\n hideSelfOnExpand: PropTypes.bool,\n layoutActions: PropTypes.object,\n layoutSelectors: PropTypes.object.isRequired,\n specPath: ImPropTypes.list.isRequired,\n }\n\n static defaultProps = {\n collapsedContent: \"{...}\",\n expanded: false,\n title: null,\n onToggle: () => {},\n hideSelfOnExpand: false,\n specPath: Im.List([]),\n }\n\n constructor(props, context) {\n super(props, context)\n\n let { expanded, collapsedContent } = this.props\n\n this.state = {\n expanded : expanded,\n collapsedContent: collapsedContent || ModelCollapse.defaultProps.collapsedContent\n }\n }\n\n componentDidMount() {\n const { hideSelfOnExpand, expanded, modelName } = this.props\n if(hideSelfOnExpand && expanded) {\n // We just mounted pre-expanded, and we won't be going back..\n // So let's give our parent an `onToggle` call..\n // Since otherwise it will never be called.\n this.props.onToggle(modelName, expanded)\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps){\n if(this.props.expanded !== nextProps.expanded){\n this.setState({expanded: nextProps.expanded})\n }\n }\n\n toggleCollapsed=()=>{\n if(this.props.onToggle){\n this.props.onToggle(this.props.modelName,!this.state.expanded)\n }\n\n this.setState({\n expanded: !this.state.expanded\n })\n }\n\n onLoad = (ref) => {\n if (ref && this.props.layoutSelectors) {\n const scrollToKey = this.props.layoutSelectors.getScrollToKey()\n\n if( Im.is(scrollToKey, this.props.specPath) ) this.toggleCollapsed()\n this.props.layoutActions.readyToScroll(this.props.specPath, ref.parentElement)\n }\n }\n\n render () {\n const { title, classes } = this.props\n\n if(this.state.expanded ) {\n if(this.props.hideSelfOnExpand) {\n return \n {this.props.children}\n \n }\n }\n\n return (\n \n \n\n { this.state.expanded && this.props.children }\n \n )\n }\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport ImPropTypes from \"react-immutable-proptypes\"\nimport cx from \"classnames\"\nimport randomBytes from \"randombytes\"\n\nexport default class ModelExample extends React.Component {\n static propTypes = {\n getComponent: PropTypes.func.isRequired,\n specSelectors: PropTypes.object.isRequired,\n schema: PropTypes.object.isRequired,\n example: PropTypes.any.isRequired,\n isExecute: PropTypes.bool,\n getConfigs: PropTypes.func.isRequired,\n specPath: ImPropTypes.list.isRequired,\n includeReadOnly: PropTypes.bool,\n includeWriteOnly: PropTypes.bool,\n }\n\n constructor(props, context) {\n super(props, context)\n let { getConfigs, isExecute } = this.props\n let { defaultModelRendering } = getConfigs()\n\n let activeTab = defaultModelRendering\n\n if (defaultModelRendering !== \"example\" && defaultModelRendering !== \"model\") {\n activeTab = \"example\"\n }\n\n if(isExecute) {\n activeTab = \"example\"\n }\n\n this.state = {\n activeTab,\n }\n }\n\n activeTab = ( e ) => {\n let { target : { dataset : { name } } } = e\n\n this.setState({\n activeTab: name\n })\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (\n nextProps.isExecute &&\n !this.props.isExecute &&\n this.props.example\n ) {\n this.setState({ activeTab: \"example\" })\n }\n }\n\n render() {\n let { getComponent, specSelectors, schema, example, isExecute, getConfigs, specPath, includeReadOnly, includeWriteOnly } = this.props\n let { defaultModelExpandDepth } = getConfigs()\n const ModelWrapper = getComponent(\"ModelWrapper\")\n const HighlightCode = getComponent(\"highlightCode\")\n const exampleTabId = randomBytes(5).toString(\"base64\")\n const examplePanelId = randomBytes(5).toString(\"base64\")\n const modelTabId = randomBytes(5).toString(\"base64\")\n const modelPanelId = randomBytes(5).toString(\"base64\")\n\n let isOAS3 = specSelectors.isOAS3()\n\n return (\n
\n
    \n
  • \n \n {isExecute ? \"Edit Value\" : \"Example Value\"}\n \n
  • \n { schema && (\n
  • \n \n {isOAS3 ? \"Schema\" : \"Model\" }\n \n
  • \n )}\n
\n {this.state.activeTab === \"example\" && (\n \n {example ? example : (\n \n )}\n
\n )}\n\n {this.state.activeTab === \"model\" && (\n \n \n
\n )}\n
\n )\n }\n\n}\n","import React, { Component, } from \"react\"\nimport PropTypes from \"prop-types\"\nimport ImPropTypes from \"react-immutable-proptypes\"\n\nexport default class ModelWrapper extends Component {\n\n static propTypes = {\n schema: PropTypes.object.isRequired,\n name: PropTypes.string,\n displayName: PropTypes.string,\n fullPath: PropTypes.array.isRequired,\n specPath: ImPropTypes.list.isRequired,\n getComponent: PropTypes.func.isRequired,\n getConfigs: PropTypes.func.isRequired,\n specSelectors: PropTypes.object.isRequired,\n expandDepth: PropTypes.number,\n layoutActions: PropTypes.object,\n layoutSelectors: PropTypes.object.isRequired,\n includeReadOnly: PropTypes.bool,\n includeWriteOnly: PropTypes.bool,\n }\n\n onToggle = (name,isShown) => {\n // If this prop is present, we'll have deepLinking for it\n if(this.props.layoutActions) {\n this.props.layoutActions.show(this.props.fullPath, isShown)\n }\n }\n\n render(){\n let { getComponent, getConfigs } = this.props\n const Model = getComponent(\"Model\")\n\n let expanded\n if(this.props.layoutSelectors) {\n // If this is prop is present, we'll have deepLinking for it\n expanded = this.props.layoutSelectors.isShown(this.props.fullPath)\n }\n\n return
\n \n
\n }\n}\n","import React, { Component } from \"react\"\nimport Im, { Map } from \"immutable\"\nimport PropTypes from \"prop-types\"\n\nexport default class Models extends Component {\n static propTypes = {\n getComponent: PropTypes.func,\n specSelectors: PropTypes.object,\n specActions: PropTypes.object.isRequired,\n layoutSelectors: PropTypes.object,\n layoutActions: PropTypes.object,\n getConfigs: PropTypes.func.isRequired\n }\n\n getSchemaBasePath = () => {\n const isOAS3 = this.props.specSelectors.isOAS3()\n return isOAS3 ? [\"components\", \"schemas\"] : [\"definitions\"]\n }\n\n getCollapsedContent = () => {\n return \" \"\n }\n\n handleToggle = (name, isExpanded) => {\n const { layoutActions } = this.props\n layoutActions.show([...this.getSchemaBasePath(), name], isExpanded)\n if(isExpanded) {\n this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(), name])\n }\n }\n\n onLoadModels = (ref) => {\n if (ref) {\n this.props.layoutActions.readyToScroll(this.getSchemaBasePath(), ref)\n }\n }\n\n onLoadModel = (ref) => {\n if (ref) {\n const name = ref.getAttribute(\"data-name\")\n this.props.layoutActions.readyToScroll([...this.getSchemaBasePath(), name], ref)\n }\n }\n\n render(){\n let { specSelectors, getComponent, layoutSelectors, layoutActions, getConfigs } = this.props\n let definitions = specSelectors.definitions()\n let { docExpansion, defaultModelsExpandDepth } = getConfigs()\n if (!definitions.size || defaultModelsExpandDepth < 0) return null\n\n const specPathBase = this.getSchemaBasePath()\n let showModels = layoutSelectors.isShown(specPathBase, defaultModelsExpandDepth > 0 && docExpansion !== \"none\")\n const isOAS3 = specSelectors.isOAS3()\n\n const ModelWrapper = getComponent(\"ModelWrapper\")\n const Collapse = getComponent(\"Collapse\")\n const ModelCollapse = getComponent(\"ModelCollapse\")\n const JumpToPath = getComponent(\"JumpToPath\", true)\n\n return
\n

\n layoutActions.show(specPathBase, !showModels)}\n >\n {isOAS3 ? \"Schemas\" : \"Models\"}\n \n \n \n \n

\n \n {\n definitions.entrySeq().map(([name])=>{\n\n const fullPath = [...specPathBase, name]\n const specPath = Im.List(fullPath)\n\n const schemaValue = specSelectors.specResolvedSubtree(fullPath)\n const rawSchemaValue = specSelectors.specJson().getIn(fullPath)\n\n const schema = Map.isMap(schemaValue) ? schemaValue : Im.Map()\n const rawSchema = Map.isMap(rawSchemaValue) ? rawSchemaValue : Im.Map()\n\n const displayName = schema.get(\"title\") || rawSchema.get(\"title\") || name\n const isShown = layoutSelectors.isShown(fullPath, false)\n\n if( isShown && (schema.size === 0 && rawSchema.size > 0) ) {\n // Firing an action in a container render is not great,\n // but it works for now.\n this.props.specActions.requestResolvedSubtree(fullPath)\n }\n\n const content = \n\n const title = \n \n {displayName}\n \n \n\n return
\n \n 0 && isShown }\n >{content}\n
\n }).toArray()\n }\n
\n
\n }\n}\n","import React from \"react\"\nimport ImPropTypes from \"react-immutable-proptypes\"\n\nconst EnumModel = ({ value, getComponent }) => {\n let ModelCollapse = getComponent(\"ModelCollapse\")\n let collapsedContent = Array [ { value.count() } ]\n return \n Enum:
\n \n [ { value.join(\", \") } ]\n \n
\n}\nEnumModel.propTypes = {\n value: ImPropTypes.iterable,\n getComponent: ImPropTypes.func\n}\n\nexport default EnumModel","import React, { Component, } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { List } from \"immutable\"\nimport ImPropTypes from \"react-immutable-proptypes\"\n\nconst braceOpen = \"{\"\nconst braceClose = \"}\"\nconst propClass = \"property\"\n\nexport default class ObjectModel extends Component {\n static propTypes = {\n schema: PropTypes.object.isRequired,\n getComponent: PropTypes.func.isRequired,\n getConfigs: PropTypes.func.isRequired,\n expanded: PropTypes.bool,\n onToggle: PropTypes.func,\n specSelectors: PropTypes.object.isRequired,\n name: PropTypes.string,\n displayName: PropTypes.string,\n isRef: PropTypes.bool,\n expandDepth: PropTypes.number,\n depth: PropTypes.number,\n specPath: ImPropTypes.list.isRequired,\n includeReadOnly: PropTypes.bool,\n includeWriteOnly: PropTypes.bool,\n }\n\n render(){\n let { schema, name, displayName, isRef, getComponent, getConfigs, depth, onToggle, expanded, specPath, ...otherProps } = this.props\n let { specSelectors,expandDepth, includeReadOnly, includeWriteOnly} = otherProps\n const { isOAS3 } = specSelectors\n\n if(!schema) {\n return null\n }\n\n const { showExtensions } = getConfigs()\n\n let description = schema.get(\"description\")\n let properties = schema.get(\"properties\")\n let additionalProperties = schema.get(\"additionalProperties\")\n let title = schema.get(\"title\") || displayName || name\n let requiredProperties = schema.get(\"required\")\n let infoProperties = schema\n .filter( ( v, key) => [\"maxProperties\", \"minProperties\", \"nullable\", \"example\"].indexOf(key) !== -1 )\n let deprecated = schema.get(\"deprecated\")\n\n const JumpToPath = getComponent(\"JumpToPath\", true)\n const Markdown = getComponent(\"Markdown\", true)\n const Model = getComponent(\"Model\")\n const ModelCollapse = getComponent(\"ModelCollapse\")\n const Property = getComponent(\"Property\")\n\n const JumpToPathSection = () => {\n return \n }\n const collapsedContent = (\n { braceOpen }...{ braceClose }\n {\n isRef ? : \"\"\n }\n )\n\n const anyOf = specSelectors.isOAS3() ? schema.get(\"anyOf\") : null\n const oneOf = specSelectors.isOAS3() ? schema.get(\"oneOf\") : null\n const not = specSelectors.isOAS3() ? schema.get(\"not\") : null\n\n const titleEl = title && \n { isRef && schema.get(\"$$ref\") && { schema.get(\"$$ref\") } }\n { title }\n \n\n return \n \n\n { braceOpen }\n {\n !isRef ? null : \n }\n \n {\n \n {\n !description ? null : \n \n \n \n }\n {\n !deprecated ? null :\n \n \n \n \n \n }\n {\n !(properties && properties.size) ? null : properties.entrySeq().filter(\n ([, value]) => {\n return (!value.get(\"readOnly\") || includeReadOnly) &&\n (!value.get(\"writeOnly\") || includeWriteOnly)\n }\n ).map(\n ([key, value]) => {\n let isDeprecated = isOAS3() && value.get(\"deprecated\")\n let isRequired = List.isList(requiredProperties) && requiredProperties.contains(key)\n\n let classNames = [\"property-row\"]\n\n if (isDeprecated) {\n classNames.push(\"deprecated\")\n }\n\n if (isRequired) {\n classNames.push(\"required\")\n }\n\n return (\n \n \n )\n }).toArray()\n }\n {\n // empty row befor extensions...\n !showExtensions ? null : \n }\n {\n !showExtensions ? null :\n schema.entrySeq().map(\n ([key, value]) => {\n if(key.slice(0,2) !== \"x-\") {\n return\n }\n\n const normalizedValue = !value ? null : value.toJS ? value.toJS() : value\n\n return (\n \n \n )\n }).toArray()\n }\n {\n !additionalProperties || !additionalProperties.size ? null\n : \n \n \n \n }\n {\n !anyOf ? null\n : \n \n \n \n }\n {\n !oneOf ? null\n : \n \n \n \n }\n {\n !not ? null\n : \n \n \n \n }\n
description:\n \n
\n deprecated:\n \n true\n
\n { key }{ isRequired && * }\n \n \n
 
\n { key }\n \n { JSON.stringify(normalizedValue) }\n
{ \"< * >:\" }\n \n
{ \"anyOf ->\" }\n {anyOf.map((schema, k) => {\n return
\n })}\n
{ \"oneOf ->\" }\n {oneOf.map((schema, k) => {\n return
\n })}\n
{ \"not ->\" }\n
\n \n
\n
\n }\n
\n { braceClose }\n \n {\n infoProperties.size ? infoProperties.entrySeq().map( ( [ key, v ] ) => ) : null\n }\n
\n }\n}\n","import React, { Component } from \"react\"\nimport PropTypes from \"prop-types\"\nimport ImPropTypes from \"react-immutable-proptypes\"\n\nconst propClass = \"property\"\n\nexport default class ArrayModel extends Component {\n static propTypes = {\n schema: PropTypes.object.isRequired,\n getComponent: PropTypes.func.isRequired,\n getConfigs: PropTypes.func.isRequired,\n specSelectors: PropTypes.object.isRequired,\n name: PropTypes.string,\n displayName: PropTypes.string,\n required: PropTypes.bool,\n expandDepth: PropTypes.number,\n specPath: ImPropTypes.list.isRequired,\n depth: PropTypes.number,\n includeReadOnly: PropTypes.bool,\n includeWriteOnly: PropTypes.bool,\n }\n\n render(){\n let { getComponent, getConfigs, schema, depth, expandDepth, name, displayName, specPath } = this.props\n let description = schema.get(\"description\")\n let items = schema.get(\"items\")\n let title = schema.get(\"title\") || displayName || name\n let properties = schema.filter( ( v, key) => [\"type\", \"items\", \"description\", \"$$ref\"].indexOf(key) === -1 )\n\n const Markdown = getComponent(\"Markdown\", true)\n const ModelCollapse = getComponent(\"ModelCollapse\")\n const Model = getComponent(\"Model\")\n const Property = getComponent(\"Property\")\n\n const titleEl = title &&\n \n { title }\n \n\n /*\n Note: we set `name={null}` in below because we don't want\n the name of the current Model passed (and displayed) as the name of the array element Model\n */\n\n return \n \n [\n {\n properties.size ? properties.entrySeq().map( ( [ key, v ] ) => ) : null\n }\n {\n !description ? (properties.size ?
: null) :\n \n }\n \n \n \n ]\n
\n
\n }\n}\n","import React, { Component } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { getExtensions } from \"core/utils\"\n\nconst propClass = \"property primitive\"\n\nexport default class Primitive extends Component {\n static propTypes = {\n schema: PropTypes.object.isRequired,\n getComponent: PropTypes.func.isRequired,\n getConfigs: PropTypes.func.isRequired,\n name: PropTypes.string,\n displayName: PropTypes.string,\n depth: PropTypes.number,\n expandDepth: PropTypes.number\n }\n\n render() {\n let { schema, getComponent, getConfigs, name, displayName, depth, expandDepth } = this.props\n\n const { showExtensions } = getConfigs()\n\n if (!schema || !schema.get) {\n // don't render if schema isn't correctly formed\n return
\n }\n\n let type = schema.get(\"type\")\n let format = schema.get(\"format\")\n let xml = schema.get(\"xml\")\n let enumArray = schema.get(\"enum\")\n let title = schema.get(\"title\") || displayName || name\n let description = schema.get(\"description\")\n let extensions = getExtensions(schema)\n let properties = schema\n .filter((_, key) => [\"enum\", \"type\", \"format\", \"description\", \"$$ref\"].indexOf(key) === -1)\n .filterNot((_, key) => extensions.has(key))\n const Markdown = getComponent(\"Markdown\", true)\n const EnumModel = getComponent(\"EnumModel\")\n const Property = getComponent(\"Property\")\n const ModelCollapse = getComponent(\"ModelCollapse\")\n const titleEl = title &&\n \n {title}\n \n\n return \n = expandDepth} collapsedContent=\" \" hideSelfOnExpand={expandDepth !== depth}>\n \n {name && depth > 1 && {title}}\n {type}\n {format && (${format})}\n {\n properties.size ? properties.entrySeq().map(([key, v]) => ) : null\n }\n {\n showExtensions && extensions.size ? extensions.entrySeq().map(([key, v]) => ) : null\n }\n {\n !description ? null :\n \n }\n {\n xml && xml.size ? (
xml:\n {\n xml.entrySeq().map(([key, v]) =>
   {key}: {String(v)}
).toArray()\n }\n
) : null\n }\n {\n enumArray && \n }\n
\n
\n
\n }\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nexport const Property = ({ propKey, propVal, propClass }) => {\n return (\n \n
{ propKey }: { String(propVal) }
\n )\n}\nProperty.propTypes = {\n propKey: PropTypes.string,\n propVal: PropTypes.any,\n propClass: PropTypes.string\n}\n\nexport default Property\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nexport default class TryItOutButton extends React.Component {\n\n static propTypes = {\n onTryoutClick: PropTypes.func,\n onResetClick: PropTypes.func,\n onCancelClick: PropTypes.func,\n enabled: PropTypes.bool, // Try it out is enabled, ie: the user has access to the form\n hasUserEditedBody: PropTypes.bool, // Try it out is enabled, ie: the user has access to the form\n isOAS3: PropTypes.bool, // Try it out is enabled, ie: the user has access to the form\n };\n\n static defaultProps = {\n onTryoutClick: Function.prototype,\n onCancelClick: Function.prototype,\n onResetClick: Function.prototype,\n enabled: false,\n hasUserEditedBody: false,\n isOAS3: false,\n };\n\n render() {\n const { onTryoutClick, onCancelClick, onResetClick, enabled, hasUserEditedBody, isOAS3 } = this.props\n\n const showReset = isOAS3 && hasUserEditedBody\n return (\n
\n {\n enabled ? \n : \n\n }\n {\n showReset && \n }\n
\n )\n }\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nexport default class VersionPragmaFilter extends React.PureComponent {\n static propTypes = {\n isSwagger2: PropTypes.bool.isRequired,\n isOAS3: PropTypes.bool.isRequired,\n bypass: PropTypes.bool,\n alsoShow: PropTypes.element,\n children: PropTypes.any,\n }\n\n static defaultProps = {\n alsoShow: null,\n children: null,\n bypass: false,\n }\n\n render() {\n const { bypass, isSwagger2, isOAS3, alsoShow } = this.props\n\n if(bypass) {\n return
{ this.props.children }
\n }\n\n if(isSwagger2 && isOAS3) {\n return
\n {alsoShow}\n
\n
\n

Unable to render this definition

\n

swagger and openapi fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.

\n

Supported version fields are swagger: {\"\\\"2.0\\\"\"} and those that match openapi: 3.0.n (for example, openapi: 3.0.0).

\n
\n
\n
\n }\n\n if(!isSwagger2 && !isOAS3) {\n return
\n {alsoShow}\n
\n
\n

Unable to render this definition

\n

The provided definition does not specify a valid version field.

\n

Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: {\"\\\"2.0\\\"\"} and those that match openapi: 3.0.n (for example, openapi: 3.0.0).

\n
\n
\n
\n }\n\n return
{ this.props.children }
\n }\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nconst VersionStamp = ({ version }) => {\n return
 { version } 
\n}\n\nVersionStamp.propTypes = {\n version: PropTypes.string.isRequired\n}\n\nexport default VersionStamp\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nexport const DeepLink = ({ enabled, path, text }) => {\n return (\n e.preventDefault() : null}\n href={enabled ? `#/${path}` : null}>\n {text}\n \n )\n}\nDeepLink.propTypes = {\n enabled: PropTypes.bool,\n isShown: PropTypes.bool,\n path: PropTypes.string,\n text: PropTypes.node\n}\n\nexport default DeepLink\n","import React from \"react\"\nconst SvgAssets = () =>\n
\n \n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n
\n\nexport default SvgAssets\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nexport default class BaseLayout extends React.Component {\n\n static propTypes = {\n errSelectors: PropTypes.object.isRequired,\n errActions: PropTypes.object.isRequired,\n specSelectors: PropTypes.object.isRequired,\n oas3Selectors: PropTypes.object.isRequired,\n oas3Actions: PropTypes.object.isRequired,\n getComponent: PropTypes.func.isRequired\n }\n\n render() {\n let {errSelectors, specSelectors, getComponent} = this.props\n\n let SvgAssets = getComponent(\"SvgAssets\")\n let InfoContainer = getComponent(\"InfoContainer\", true)\n let VersionPragmaFilter = getComponent(\"VersionPragmaFilter\")\n let Operations = getComponent(\"operations\", true)\n let Models = getComponent(\"Models\", true)\n let Row = getComponent(\"Row\")\n let Col = getComponent(\"Col\")\n let Errors = getComponent(\"errors\", true)\n\n const ServersContainer = getComponent(\"ServersContainer\", true)\n const SchemesContainer = getComponent(\"SchemesContainer\", true)\n const AuthorizeBtnContainer = getComponent(\"AuthorizeBtnContainer\", true)\n const FilterContainer = getComponent(\"FilterContainer\", true)\n let isSwagger2 = specSelectors.isSwagger2()\n let isOAS3 = specSelectors.isOAS3()\n\n const isSpecEmpty = !specSelectors.specStr()\n\n const loadingStatus = specSelectors.loadingStatus()\n\n let loadingMessage = null\n\n if(loadingStatus === \"loading\") {\n loadingMessage =
\n
\n
\n
\n
\n }\n\n if(loadingStatus === \"failed\") {\n loadingMessage =
\n
\n

Failed to load API definition.

\n \n
\n
\n }\n\n if (loadingStatus === \"failedConfig\") {\n const lastErr = errSelectors.lastError()\n const lastErrMsg = lastErr ? lastErr.get(\"message\") : \"\"\n loadingMessage =
\n
\n

Failed to load remote configuration.

\n

{lastErrMsg}

\n
\n
\n }\n\n if(!loadingMessage && isSpecEmpty) {\n loadingMessage =

No API definition provided.

\n }\n\n if(loadingMessage) {\n return
\n
\n {loadingMessage}\n
\n
\n }\n\n const servers = specSelectors.servers()\n const schemes = specSelectors.schemes()\n\n const hasServers = servers && servers.size\n const hasSchemes = schemes && schemes.size\n const hasSecurityDefinitions = !!specSelectors.securityDefinitions()\n\n return (\n
\n \n }>\n \n \n \n \n \n \n\n {hasServers || hasSchemes || hasSecurityDefinitions ? (\n
\n \n {hasServers ? () : null}\n {hasSchemes ? () : null}\n {hasSecurityDefinitions ? () : null}\n \n
\n ) : null}\n\n \n\n \n \n \n \n \n \n \n \n \n \n
\n
\n )\n }\n}\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_react_debounce_input_7ed3e068__[\"default\"] });","import React, { PureComponent, Component } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { List, fromJS } from \"immutable\"\nimport cx from \"classnames\"\nimport ImPropTypes from \"react-immutable-proptypes\"\nimport DebounceInput from \"react-debounce-input\"\nimport { stringify, getSampleSchema } from \"core/utils\"\n//import \"less/json-schema-form\"\n\nconst noop = ()=> {}\nconst JsonSchemaPropShape = {\n getComponent: PropTypes.func.isRequired,\n value: PropTypes.any,\n onChange: PropTypes.func,\n keyName: PropTypes.any,\n fn: PropTypes.object.isRequired,\n schema: PropTypes.object,\n errors: ImPropTypes.list,\n required: PropTypes.bool,\n dispatchInitialValue: PropTypes.bool,\n description: PropTypes.any,\n disabled: PropTypes.bool,\n}\n\nconst JsonSchemaDefaultProps = {\n value: \"\",\n onChange: noop,\n schema: {},\n keyName: \"\",\n required: false,\n errors: List()\n}\n\nexport class JsonSchemaForm extends Component {\n\n static propTypes = JsonSchemaPropShape\n static defaultProps = JsonSchemaDefaultProps\n\n componentDidMount() {\n const { dispatchInitialValue, value, onChange } = this.props\n if(dispatchInitialValue) {\n onChange(value)\n } else if(dispatchInitialValue === false) {\n onChange(\"\")\n }\n }\n\n render() {\n let { schema, errors, value, onChange, getComponent, fn, disabled } = this.props\n const format = schema && schema.get ? schema.get(\"format\") : null\n const type = schema && schema.get ? schema.get(\"type\") : null\n\n let getComponentSilently = (name) => getComponent(name, false, { failSilently: true })\n let Comp = type ? format ?\n getComponentSilently(`JsonSchema_${type}_${format}`) :\n getComponentSilently(`JsonSchema_${type}`) :\n getComponent(\"JsonSchema_string\")\n if (!Comp) {\n Comp = getComponent(\"JsonSchema_string\")\n }\n return \n }\n}\n\nexport class JsonSchema_string extends Component {\n static propTypes = JsonSchemaPropShape\n static defaultProps = JsonSchemaDefaultProps\n onChange = (e) => {\n const value = this.props.schema && this.props.schema.get(\"type\") === \"file\" ? e.target.files[0] : e.target.value\n this.props.onChange(value, this.props.keyName)\n }\n onEnumChange = (val) => this.props.onChange(val)\n render() {\n let { getComponent, value, schema, errors, required, description, disabled } = this.props\n const enumValue = schema && schema.get ? schema.get(\"enum\") : null\n const format = schema && schema.get ? schema.get(\"format\") : null\n const type = schema && schema.get ? schema.get(\"type\") : null\n const schemaIn = schema && schema.get ? schema.get(\"in\") : null\n if (!value) {\n value = \"\" // value should not be null; this fixes a Debounce error\n }\n errors = errors.toJS ? errors.toJS() : []\n\n if ( enumValue ) {\n const Select = getComponent(\"Select\")\n return (\n )\n }\n else {\n return (\n \n )\n }\n }\n}\n\nexport class JsonSchema_array extends PureComponent {\n\n static propTypes = JsonSchemaPropShape\n static defaultProps = JsonSchemaDefaultProps\n\n constructor(props, context) {\n super(props, context)\n this.state = { value: valueOrEmptyList(props.value), schema: props.schema}\n }\n\n UNSAFE_componentWillReceiveProps(props) {\n const value = valueOrEmptyList(props.value)\n if(value !== this.state.value)\n this.setState({ value })\n\n if(props.schema !== this.state.schema)\n this.setState({ schema: props.schema })\n }\n\n onChange = () => {\n this.props.onChange(this.state.value)\n }\n\n onItemChange = (itemVal, i) => {\n this.setState(({ value }) => ({\n value: value.set(i, itemVal)\n }), this.onChange)\n }\n\n removeItem = (i) => {\n this.setState(({ value }) => ({\n value: value.delete(i)\n }), this.onChange)\n }\n\n addItem = () => {\n let newValue = valueOrEmptyList(this.state.value)\n this.setState(() => ({\n value: newValue.push(getSampleSchema(this.state.schema.get(\"items\"), false, {\n includeWriteOnly: true\n }))\n }), this.onChange)\n }\n\n onEnumChange = (value) => {\n this.setState(() => ({\n value: value\n }), this.onChange)\n }\n\n render() {\n let { getComponent, required, schema, errors, fn, disabled } = this.props\n\n errors = errors.toJS ? errors.toJS() : Array.isArray(errors) ? errors : []\n const arrayErrors = errors.filter(e => typeof e === \"string\")\n const needsRemoveError = errors.filter(e => e.needRemove !== undefined)\n .map(e => e.error)\n const value = this.state.value // expect Im List\n const shouldRenderValue =\n value && value.count && value.count() > 0 ? true : false\n const schemaItemsEnum = schema.getIn([\"items\", \"enum\"])\n const schemaItemsType = schema.getIn([\"items\", \"type\"])\n const schemaItemsFormat = schema.getIn([\"items\", \"format\"])\n const schemaItemsSchema = schema.get(\"items\")\n let ArrayItemsComponent\n let isArrayItemText = false\n let isArrayItemFile = (schemaItemsType === \"file\" || (schemaItemsType === \"string\" && schemaItemsFormat === \"binary\")) ? true : false\n if (schemaItemsType && schemaItemsFormat) {\n ArrayItemsComponent = getComponent(`JsonSchema_${schemaItemsType}_${schemaItemsFormat}`)\n } else if (schemaItemsType === \"boolean\" || schemaItemsType === \"array\" || schemaItemsType === \"object\") {\n ArrayItemsComponent = getComponent(`JsonSchema_${schemaItemsType}`)\n }\n // if ArrayItemsComponent not assigned or does not exist,\n // use default schemaItemsType === \"string\" & JsonSchemaArrayItemText component\n if (!ArrayItemsComponent && !isArrayItemFile) {\n isArrayItemText = true\n }\n\n if ( schemaItemsEnum ) {\n const Select = getComponent(\"Select\")\n return ()\n }\n}\n\nexport class JsonSchema_boolean extends Component {\n static propTypes = JsonSchemaPropShape\n static defaultProps = JsonSchemaDefaultProps\n\n onEnumChange = (val) => this.props.onChange(val)\n render() {\n let { getComponent, value, errors, schema, required, disabled } = this.props\n errors = errors.toJS ? errors.toJS() : []\n let enumValue = schema && schema.get ? schema.get(\"enum\") : null\n let allowEmptyValue = !enumValue || !required\n let booleanValue = !enumValue && fromJS([\"true\", \"false\"])\n const Select = getComponent(\"Select\")\n\n return ( - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

数据集列表

-

AI Lab 提供模型开发、训练以及推理过程所有需要的数据集管理功能。目前支持将多种数据源统一接入能力。

-

通过简单配置即可将数据源接入到 AI Lab 中,实现数据的统一纳管、预热、数据集管理等功能。

-

创建数据集

-
    -
  1. -

    在左侧导航栏中点击 数据管理 -> 数据集列表 ,点击右侧的 创建 按钮。

    -

    点击创建

    -
  2. -
  3. -

    选择数据集归属的工作集群、命名空间 下一步

    -

    填写参数

    -
  4. -
  5. -

    配置目标数据的数据源类型,然后点击 确定

    -

    任务资源配置

    -

    目前支持这几种数据源:

    -
      -
    • GIT:支持 GitHub、GitLab、Gitee 等仓库
    • -
    • S3:支持 Amazon 云等对象存储
    • -
    • HTTP:直接输入一个有效的 HTTP 网址
    • -
    • PVC:支持预先创建的 Kubernetes PersistentVolumeClaim
    • -
    • NFS:支持 NFS 共享存储
    • -
    -
  6. -
  7. -

    数据集创建成功将返回数据集列表。你可以通过右侧的 执行更多操作。

    -

    数据集列表

    -
  8. -
-
-

Info

-

系统自动会在数据集创建成功后,立即进行一次性的数据预加载;在预加载完成之前,数据集不可以使用。

-
-

数据集使用

-

数据集创建成功后,可以在模型训练、推理等任务中使用。

-

在 Notebook 中使用

-

在创建 Notebook 中,可以直接使用数据集;使用方式如下:

-
    -
  • 使用数据集做训练数据挂载
  • -
  • 使用数据集做代码挂载
  • -
-

数据集列表

-

在 训练任务 中使用

-
    -
  • 使用数据集指定任务输出
  • -
  • 使用数据集指定任务输入
  • -
  • 使用数据集指定 TensorBoard 输出
  • -
-

任务管理

-

在推理服务 中使用

-
    -
  • 使用数据集挂载模型
  • -
-

推理服务

-

删除数据集

-

如果发现数据集冗余、过期或因其他缘故不再需要,可以从数据集列表中删除。

-
    -
  1. -

    在数据集列表右侧点击 ,在弹出菜单中选择 删除

    -

    删除

    -
  2. -
  3. -

    在弹窗中确认要删除的数据集,输入数据集名称后点击 删除

    -

    确认删除

    -
  4. -
  5. -

    屏幕提示删除成功,该数据集从列表中消失。

    -
  6. -
-
-

Caution

-

数据集一旦删除将不可恢复,请谨慎操作。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/dataset/environments.html b/site/end-user/baize/dataset/environments.html deleted file mode 100644 index 55aea28..0000000 --- a/site/end-user/baize/dataset/environments.html +++ /dev/null @@ -1,797 +0,0 @@ - - - - - - - - - - - - - - -环境管理 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

管理环境

-

本文说明如何在 AI Lab 中管理你的环境依赖库,以下是具体操作步骤和注意事项。

-
    -
  1. 环境管理概述
  2. -
  3. 创建新环境
  4. -
  5. 配置环境
  6. -
  7. 故障排除
  8. -
-

环境管理概述

-

传统方式,一般会将 Python 环境依赖在镜像中构建,镜像带有 Python 版本和依赖包的镜像,维护成本较高且更新不方便,往往需要重新构建镜像。

-

而在 AI Lab 中,用户可以通过 环境管理 模块来管理纯粹的环境依赖,将这部分从镜像中解耦,带来的优势有:

-
    -
  • 一份环境多处使用,同时可以在 Notebook、分布式训练任务、乃至推理服务中使用。
  • -
  • 更新依赖包更加方便,只需要更新环境依赖即可,无需重新构建镜像。
  • -
-

以下为环境管理的主要组成部分:

-
    -
  • 集群 :选择需要操作的集群。
  • -
  • 命名空间 :选择命名空间以限定操作范围。
  • -
  • 环境列表 :展示当前集群和命名空间下的所有环境及其状态。
  • -
-

环境管理概述

- - - - - - - - - - - - - - - - - - - - - - - - - -
字段描述举例值
名称环境的名称my-environment
状态环境当前的状态(正常或失败),新创建环境有一个预热过程,预热成功后即可在其他任务中使用正常
创建时间环境创建的时间2023-10-01 10:00:00
-

创建新环境

-

环境管理 界面,点击右上角的 创建 按钮,进入创建环境的流程。

-

创建新环境

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
字段描述举例值
名称输入环境的名称,长度为 2-63 个字符,必须以小写字母、数字开头和结尾。my-environment
部署位置集群 :选择需要部署的集群gpu-cluster
命名空间 :选择命名空间default
备注填写备注信息。这是一个测试环境
标签为环境添加标签。env:test
注解为环境添加注解。填写完成后,点击 下一步 进入环境配置。注解示例
-

配置环境

-

在环境配置步骤中,用户需要配置 Python 版本和依赖包管理工具。

-

配置环境

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
字段描述举例值
Python 版本选择所需的 Python 版本3.12.3
包管理器选择包管理工具,可选 PIPCONDAPIP
Environment Data如果选择 PIP:在下方编辑器中输入 requirements.txt 格式的依赖包列表。numpy==1.21.0
如果选择 CONDA:在下方编辑器中输入 environment.yaml 格式的依赖包列表。
其他选项pip 额外索引地址 :配置 pip 额外的索引地址;适用于企业内部有自己的私有仓库或者 PIP 加速站点。https://pypi.example.com
GPU 配置 :启用或禁用 GPU 配置;部分涉及到 GPU 的依赖包需要在预加载时配置 GPU 资源。启用
关联存储 :选择关联的存储配置;环境依赖包会存储在关联存储中。注意:需要使用支持 ReadWriteMany 的存储。my-storage-config
-

配置完成后,点击 创建 按钮,系统会自动创建并配置新的 Python 环境。

-

故障排除

-
    -
  • -

    如果环境创建失败:

    -
      -
    • 检查网络连接是否正常。
    • -
    • 确认填写的 Python 版本和包管理器配置无误。
    • -
    • 确保所选集群和命名空间可用。
    • -
    -
  • -
  • -

    如果依赖预热失败:

    -
      -
    • 检查 requirements.txtenvironment.yaml 文件格式是否正确。
    • -
    • 确认依赖包名称和版本是否正确无误。如遇到其他问题,请联系平台管理员或查看平台帮助文档获取更多支持。
    • -
    -
  • -
-
-

以上即为在 AI Lab 中管理 Python 依赖库的基本操作步骤和注意事项。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/images/agent-helm.png b/site/end-user/baize/images/agent-helm.png deleted file mode 100644 index 30fb946..0000000 Binary files a/site/end-user/baize/images/agent-helm.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-01.png b/site/end-user/baize/images/baize-01.png deleted file mode 100644 index b515142..0000000 Binary files a/site/end-user/baize/images/baize-01.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-02.png b/site/end-user/baize/images/baize-02.png deleted file mode 100644 index de75df4..0000000 Binary files a/site/end-user/baize/images/baize-02.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-03.png b/site/end-user/baize/images/baize-03.png deleted file mode 100644 index bae2181..0000000 Binary files a/site/end-user/baize/images/baize-03.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-04.png b/site/end-user/baize/images/baize-04.png deleted file mode 100644 index 8e31919..0000000 Binary files a/site/end-user/baize/images/baize-04.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-05.png b/site/end-user/baize/images/baize-05.png deleted file mode 100644 index b360c85..0000000 Binary files a/site/end-user/baize/images/baize-05.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-06.png b/site/end-user/baize/images/baize-06.png deleted file mode 100644 index 50dd98f..0000000 Binary files a/site/end-user/baize/images/baize-06.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-07.png b/site/end-user/baize/images/baize-07.png deleted file mode 100644 index 2d9c1a4..0000000 Binary files a/site/end-user/baize/images/baize-07.png and /dev/null differ diff --git a/site/end-user/baize/images/baize-08.png b/site/end-user/baize/images/baize-08.png deleted file mode 100644 index b2c9b88..0000000 Binary files a/site/end-user/baize/images/baize-08.png and /dev/null differ diff --git a/site/end-user/baize/images/bind01.png b/site/end-user/baize/images/bind01.png deleted file mode 100644 index e4b8d90..0000000 Binary files a/site/end-user/baize/images/bind01.png and /dev/null differ diff --git a/site/end-user/baize/images/bind02.png b/site/end-user/baize/images/bind02.png deleted file mode 100644 index c8273ea..0000000 Binary files a/site/end-user/baize/images/bind02.png and /dev/null differ diff --git a/site/end-user/baize/images/bind03.png b/site/end-user/baize/images/bind03.png deleted file mode 100644 index 5b2f0f7..0000000 Binary files a/site/end-user/baize/images/bind03.png and /dev/null differ diff --git a/site/end-user/baize/images/bind04.png b/site/end-user/baize/images/bind04.png deleted file mode 100644 index 29db3cb..0000000 Binary files a/site/end-user/baize/images/bind04.png and /dev/null differ diff --git a/site/end-user/baize/images/change-ws.png b/site/end-user/baize/images/change-ws.png deleted file mode 100644 index 8299ea2..0000000 Binary files a/site/end-user/baize/images/change-ws.png and /dev/null differ diff --git a/site/end-user/baize/images/cluster.png b/site/end-user/baize/images/cluster.png deleted file mode 100644 index 3ea2aa8..0000000 Binary files a/site/end-user/baize/images/cluster.png and /dev/null differ diff --git a/site/end-user/baize/images/conda01.png b/site/end-user/baize/images/conda01.png deleted file mode 100644 index f8e6f09..0000000 Binary files a/site/end-user/baize/images/conda01.png and /dev/null differ diff --git a/site/end-user/baize/images/conda02.png b/site/end-user/baize/images/conda02.png deleted file mode 100644 index 1af809e..0000000 Binary files a/site/end-user/baize/images/conda02.png and /dev/null differ diff --git a/site/end-user/baize/images/conda03.png b/site/end-user/baize/images/conda03.png deleted file mode 100644 index e2d196c..0000000 Binary files a/site/end-user/baize/images/conda03.png and /dev/null differ diff --git a/site/end-user/baize/images/dataset01.png b/site/end-user/baize/images/dataset01.png deleted file mode 100644 index 5f585de..0000000 Binary files a/site/end-user/baize/images/dataset01.png and /dev/null differ diff --git a/site/end-user/baize/images/dataset02.png b/site/end-user/baize/images/dataset02.png deleted file mode 100644 index 187d157..0000000 Binary files a/site/end-user/baize/images/dataset02.png and /dev/null differ diff --git a/site/end-user/baize/images/dataset03.png b/site/end-user/baize/images/dataset03.png deleted file mode 100644 index 1087fe5..0000000 Binary files a/site/end-user/baize/images/dataset03.png and /dev/null differ diff --git a/site/end-user/baize/images/dataset04.png b/site/end-user/baize/images/dataset04.png deleted file mode 100644 index eb44eb2..0000000 Binary files a/site/end-user/baize/images/dataset04.png and /dev/null differ diff --git a/site/end-user/baize/images/dataset05.png b/site/end-user/baize/images/dataset05.png deleted file mode 100644 index cea3afb..0000000 Binary files a/site/end-user/baize/images/dataset05.png and /dev/null differ diff --git a/site/end-user/baize/images/dataset06.png b/site/end-user/baize/images/dataset06.png deleted file mode 100644 index bfb04b8..0000000 Binary files a/site/end-user/baize/images/dataset06.png and /dev/null differ diff --git a/site/end-user/baize/images/dataset07.png b/site/end-user/baize/images/dataset07.png deleted file mode 100644 index 69e04a0..0000000 Binary files a/site/end-user/baize/images/dataset07.png and /dev/null differ diff --git a/site/end-user/baize/images/delete01.png b/site/end-user/baize/images/delete01.png deleted file mode 100644 index 5602ed4..0000000 Binary files a/site/end-user/baize/images/delete01.png and /dev/null differ diff --git a/site/end-user/baize/images/delete02.png b/site/end-user/baize/images/delete02.png deleted file mode 100644 index c661e2d..0000000 Binary files a/site/end-user/baize/images/delete02.png and /dev/null differ diff --git a/site/end-user/baize/images/delete03.png b/site/end-user/baize/images/delete03.png deleted file mode 100644 index 655a640..0000000 Binary files a/site/end-user/baize/images/delete03.png and /dev/null differ diff --git a/site/end-user/baize/images/dev-view.png b/site/end-user/baize/images/dev-view.png deleted file mode 100644 index 5ab7ca0..0000000 Binary files a/site/end-user/baize/images/dev-view.png and /dev/null differ diff --git a/site/end-user/baize/images/ds-delete01.png b/site/end-user/baize/images/ds-delete01.png deleted file mode 100644 index 38a3896..0000000 Binary files a/site/end-user/baize/images/ds-delete01.png and /dev/null differ diff --git a/site/end-user/baize/images/ds-delete02.png b/site/end-user/baize/images/ds-delete02.png deleted file mode 100644 index 63f8426..0000000 Binary files a/site/end-user/baize/images/ds-delete02.png and /dev/null differ diff --git a/site/end-user/baize/images/ds-delete03.png b/site/end-user/baize/images/ds-delete03.png deleted file mode 100644 index fcca8ac..0000000 Binary files a/site/end-user/baize/images/ds-delete03.png and /dev/null differ diff --git a/site/end-user/baize/images/enable-analy.png b/site/end-user/baize/images/enable-analy.png deleted file mode 100644 index aba5c22..0000000 Binary files a/site/end-user/baize/images/enable-analy.png and /dev/null differ diff --git a/site/end-user/baize/images/image01.png b/site/end-user/baize/images/image01.png deleted file mode 100644 index ac52a69..0000000 Binary files a/site/end-user/baize/images/image01.png and /dev/null differ diff --git a/site/end-user/baize/images/inference-interface.png b/site/end-user/baize/images/inference-interface.png deleted file mode 100644 index 199f08e..0000000 Binary files a/site/end-user/baize/images/inference-interface.png and /dev/null differ diff --git a/site/end-user/baize/images/job-mpi01.png b/site/end-user/baize/images/job-mpi01.png deleted file mode 100644 index 77335a8..0000000 Binary files a/site/end-user/baize/images/job-mpi01.png and /dev/null differ diff --git a/site/end-user/baize/images/job01.png b/site/end-user/baize/images/job01.png deleted file mode 100644 index 7660646..0000000 Binary files a/site/end-user/baize/images/job01.png and /dev/null differ diff --git a/site/end-user/baize/images/job02.png b/site/end-user/baize/images/job02.png deleted file mode 100644 index 3eb3eba..0000000 Binary files a/site/end-user/baize/images/job02.png and /dev/null differ diff --git a/site/end-user/baize/images/job03.png b/site/end-user/baize/images/job03.png deleted file mode 100644 index be5ba4b..0000000 Binary files a/site/end-user/baize/images/job03.png and /dev/null differ diff --git a/site/end-user/baize/images/job04.png b/site/end-user/baize/images/job04.png deleted file mode 100644 index a5e8651..0000000 Binary files a/site/end-user/baize/images/job04.png and /dev/null differ diff --git a/site/end-user/baize/images/job05.png b/site/end-user/baize/images/job05.png deleted file mode 100644 index f98d434..0000000 Binary files a/site/end-user/baize/images/job05.png and /dev/null differ diff --git a/site/end-user/baize/images/job06.png b/site/end-user/baize/images/job06.png deleted file mode 100644 index ec230d0..0000000 Binary files a/site/end-user/baize/images/job06.png and /dev/null differ diff --git a/site/end-user/baize/images/job07.png b/site/end-user/baize/images/job07.png deleted file mode 100644 index a038540..0000000 Binary files a/site/end-user/baize/images/job07.png and /dev/null differ diff --git a/site/end-user/baize/images/mxnet_job.png b/site/end-user/baize/images/mxnet_job.png deleted file mode 100644 index e431c2e..0000000 Binary files a/site/end-user/baize/images/mxnet_job.png and /dev/null differ diff --git a/site/end-user/baize/images/nb-delete01.png b/site/end-user/baize/images/nb-delete01.png deleted file mode 100644 index ac097be..0000000 Binary files a/site/end-user/baize/images/nb-delete01.png and /dev/null differ diff --git a/site/end-user/baize/images/nb-delete02.png b/site/end-user/baize/images/nb-delete02.png deleted file mode 100644 index 4aa5ac2..0000000 Binary files a/site/end-user/baize/images/nb-delete02.png and /dev/null differ diff --git a/site/end-user/baize/images/nb-delete03.png b/site/end-user/baize/images/nb-delete03.png deleted file mode 100644 index 44c5b74..0000000 Binary files a/site/end-user/baize/images/nb-delete03.png and /dev/null differ diff --git a/site/end-user/baize/images/nb-start01.png b/site/end-user/baize/images/nb-start01.png deleted file mode 100644 index c0b2995..0000000 Binary files a/site/end-user/baize/images/nb-start01.png and /dev/null differ diff --git a/site/end-user/baize/images/nb-workload01.png b/site/end-user/baize/images/nb-workload01.png deleted file mode 100644 index 08e11a2..0000000 Binary files a/site/end-user/baize/images/nb-workload01.png and /dev/null differ diff --git a/site/end-user/baize/images/nb-workload02.png b/site/end-user/baize/images/nb-workload02.png deleted file mode 100644 index a3be64e..0000000 Binary files a/site/end-user/baize/images/nb-workload02.png and /dev/null differ diff --git a/site/end-user/baize/images/nb-workload03.png b/site/end-user/baize/images/nb-workload03.png deleted file mode 100644 index 97e4447..0000000 Binary files a/site/end-user/baize/images/nb-workload03.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook-idle.png b/site/end-user/baize/images/notebook-idle.png deleted file mode 100644 index 91e9e6e..0000000 Binary files a/site/end-user/baize/images/notebook-idle.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook-idle02.png b/site/end-user/baize/images/notebook-idle02.png deleted file mode 100644 index 722d870..0000000 Binary files a/site/end-user/baize/images/notebook-idle02.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook-images.png b/site/end-user/baize/images/notebook-images.png deleted file mode 100644 index e96841e..0000000 Binary files a/site/end-user/baize/images/notebook-images.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook01.png b/site/end-user/baize/images/notebook01.png deleted file mode 100644 index 99855ae..0000000 Binary files a/site/end-user/baize/images/notebook01.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook02.png b/site/end-user/baize/images/notebook02.png deleted file mode 100644 index 951a289..0000000 Binary files a/site/end-user/baize/images/notebook02.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook03.png b/site/end-user/baize/images/notebook03.png deleted file mode 100644 index 8500c0c..0000000 Binary files a/site/end-user/baize/images/notebook03.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook04.png b/site/end-user/baize/images/notebook04.png deleted file mode 100644 index 1545522..0000000 Binary files a/site/end-user/baize/images/notebook04.png and /dev/null differ diff --git a/site/end-user/baize/images/notebook05.png b/site/end-user/baize/images/notebook05.png deleted file mode 100644 index d34f8e7..0000000 Binary files a/site/end-user/baize/images/notebook05.png and /dev/null differ diff --git a/site/end-user/baize/images/oam-overview.png b/site/end-user/baize/images/oam-overview.png deleted file mode 100644 index 03a6dab..0000000 Binary files a/site/end-user/baize/images/oam-overview.png and /dev/null differ diff --git a/site/end-user/baize/images/othera.png b/site/end-user/baize/images/othera.png deleted file mode 100644 index a70eb7f..0000000 Binary files a/site/end-user/baize/images/othera.png and /dev/null differ diff --git a/site/end-user/baize/images/paddle_job.png b/site/end-user/baize/images/paddle_job.png deleted file mode 100644 index 6c88c66..0000000 Binary files a/site/end-user/baize/images/paddle_job.png and /dev/null differ diff --git a/site/end-user/baize/images/q-delete01.png b/site/end-user/baize/images/q-delete01.png deleted file mode 100644 index cca9c84..0000000 Binary files a/site/end-user/baize/images/q-delete01.png and /dev/null differ diff --git a/site/end-user/baize/images/q-delete02.png b/site/end-user/baize/images/q-delete02.png deleted file mode 100644 index 5abd4c1..0000000 Binary files a/site/end-user/baize/images/q-delete02.png and /dev/null differ diff --git a/site/end-user/baize/images/queue01.png b/site/end-user/baize/images/queue01.png deleted file mode 100644 index 8bb910b..0000000 Binary files a/site/end-user/baize/images/queue01.png and /dev/null differ diff --git a/site/end-user/baize/images/queue02.png b/site/end-user/baize/images/queue02.png deleted file mode 100644 index 2822456..0000000 Binary files a/site/end-user/baize/images/queue02.png and /dev/null differ diff --git a/site/end-user/baize/images/queue03.png b/site/end-user/baize/images/queue03.png deleted file mode 100644 index a42b286..0000000 Binary files a/site/end-user/baize/images/queue03.png and /dev/null differ diff --git a/site/end-user/baize/images/resource.png b/site/end-user/baize/images/resource.png deleted file mode 100644 index f648647..0000000 Binary files a/site/end-user/baize/images/resource.png and /dev/null differ diff --git a/site/end-user/baize/images/tensorboard-01.png b/site/end-user/baize/images/tensorboard-01.png deleted file mode 100644 index 2679fac..0000000 Binary files a/site/end-user/baize/images/tensorboard-01.png and /dev/null differ diff --git a/site/end-user/baize/images/tensorboard-02.png b/site/end-user/baize/images/tensorboard-02.png deleted file mode 100644 index 29b0488..0000000 Binary files a/site/end-user/baize/images/tensorboard-02.png and /dev/null differ diff --git a/site/end-user/baize/images/tensorboard-03.png b/site/end-user/baize/images/tensorboard-03.png deleted file mode 100644 index 3ba9d9e..0000000 Binary files a/site/end-user/baize/images/tensorboard-03.png and /dev/null differ diff --git a/site/end-user/baize/images/tensorboard.png b/site/end-user/baize/images/tensorboard.png deleted file mode 100644 index ae63654..0000000 Binary files a/site/end-user/baize/images/tensorboard.png and /dev/null differ diff --git a/site/end-user/baize/images/triton-infer-0.png b/site/end-user/baize/images/triton-infer-0.png deleted file mode 100644 index 6d77950..0000000 Binary files a/site/end-user/baize/images/triton-infer-0.png and /dev/null differ diff --git a/site/end-user/baize/images/triton-infer-1.png b/site/end-user/baize/images/triton-infer-1.png deleted file mode 100644 index e1298e4..0000000 Binary files a/site/end-user/baize/images/triton-infer-1.png and /dev/null differ diff --git a/site/end-user/baize/images/triton-infer-2.png b/site/end-user/baize/images/triton-infer-2.png deleted file mode 100644 index df4bdde..0000000 Binary files a/site/end-user/baize/images/triton-infer-2.png and /dev/null differ diff --git a/site/end-user/baize/images/triton-infer-3.png b/site/end-user/baize/images/triton-infer-3.png deleted file mode 100644 index 937cdfb..0000000 Binary files a/site/end-user/baize/images/triton-infer-3.png and /dev/null differ diff --git a/site/end-user/baize/images/update-baize.png b/site/end-user/baize/images/update-baize.png deleted file mode 100644 index d22c9f5..0000000 Binary files a/site/end-user/baize/images/update-baize.png and /dev/null differ diff --git a/site/end-user/baize/images/view-wl01.png b/site/end-user/baize/images/view-wl01.png deleted file mode 100644 index ba30542..0000000 Binary files a/site/end-user/baize/images/view-wl01.png and /dev/null differ diff --git a/site/end-user/baize/images/view-wl02.png b/site/end-user/baize/images/view-wl02.png deleted file mode 100644 index d5ddbe3..0000000 Binary files a/site/end-user/baize/images/view-wl02.png and /dev/null differ diff --git a/site/end-user/baize/images/view-wl03.png b/site/end-user/baize/images/view-wl03.png deleted file mode 100644 index c6a21d4..0000000 Binary files a/site/end-user/baize/images/view-wl03.png and /dev/null differ diff --git a/site/end-user/baize/images/view-wl04.png b/site/end-user/baize/images/view-wl04.png deleted file mode 100644 index d8b783b..0000000 Binary files a/site/end-user/baize/images/view-wl04.png and /dev/null differ diff --git a/site/end-user/baize/images/vllm-infer-0.png b/site/end-user/baize/images/vllm-infer-0.png deleted file mode 100644 index 142b965..0000000 Binary files a/site/end-user/baize/images/vllm-infer-0.png and /dev/null differ diff --git a/site/end-user/baize/images/vllm-infer-1.png b/site/end-user/baize/images/vllm-infer-1.png deleted file mode 100644 index 8aaa198..0000000 Binary files a/site/end-user/baize/images/vllm-infer-1.png and /dev/null differ diff --git a/site/end-user/baize/images/vllm-infer-2.png b/site/end-user/baize/images/vllm-infer-2.png deleted file mode 100644 index ac22933..0000000 Binary files a/site/end-user/baize/images/vllm-infer-2.png and /dev/null differ diff --git a/site/end-user/baize/images/workspace.png b/site/end-user/baize/images/workspace.png deleted file mode 100644 index 019a1b3..0000000 Binary files a/site/end-user/baize/images/workspace.png and /dev/null differ diff --git a/site/end-user/baize/inference/models.html b/site/end-user/baize/inference/models.html deleted file mode 100644 index 88ee0be..0000000 --- a/site/end-user/baize/inference/models.html +++ /dev/null @@ -1,709 +0,0 @@ - - - - - - - - - - - - - - -模型支持情况 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-

了解模型支持情况

-

随着 AI Lab 的快速迭代,我们已经支持了多种模型的推理服务,您可以在这里看到所支持的模型信息。

-
    -
  • AI Lab v0.3.0 上线了模型推理服务,针对传统的深度学习模型,方便用户可以直接使用AI Lab 的推理服务,无需关心模型的部署和维护。
  • -
  • AI Lab v0.6.0 支持了完整版本的 vLLM 推理能力,支持诸多大语言模型,如 LLamaQwenChatGLM 等。
  • -
-

您可以在 AI Lab 中使用经过算丰 AI 算力平台验证过的 GPU 类型; -更多细节参阅 GPU 支持矩阵

-

点击创建

-

Triton Inference Server

-

通过 Triton Inference Server 可以很好的支持传统的深度学习模型,我们目前支持主流的推理后端服务:

- - - - - - - - - - - - - - - - - - - - - - - - - -
Backend支持模型格式介绍
pytorchTorchScript、PyTorch 2.0 格式的模型triton-inference-server/pytorch_backend
tensorflowTensorFlow 2.xtriton-inference-server/tensorflow_backend
vLLM(Deprecated)与 vLLM 一致支持的模型和 vLLM support Model 一致
-
-

Danger

-

使用 Triton 的 Backend vLLM 的方式已被弃用,推荐使用最新支持 vLLM 来部署您的大语言模型。

-
-

vLLM

-

通过 vLLM 我们可以很快的使用大语言模型,您可以在这里看到我们支持的模型列表,这通常和 vLLM Support Models 保持一致。

-
    -
  • HuggingFace 模型:我们支持了 HuggingFace 的大部分模型,您可以在 HuggingFace Model Hub 查看更多模型。
  • -
  • vLLM 支持模型列出了支持的大语言模型和视觉语言模型。
  • -
  • 使用 vLLM 支持框架的模型进行微调后的模型。
  • -
-

vLLM 新特性

-

目前,AI Lab 还支持在使用 vLLM 作为推理工具时的一些新特性:

-
    -
  • 在推理模型时,启用 Lora Adapter 来优化模型推理服务
  • -
  • 提供兼容 OpenAIOpenAPI 接口,方便用户切换到本地推理服务时,可以低成本的快速切换
  • -
-

下一步

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/inference/triton-inference.html b/site/end-user/baize/inference/triton-inference.html deleted file mode 100644 index b8dca67..0000000 --- a/site/end-user/baize/inference/triton-inference.html +++ /dev/null @@ -1,876 +0,0 @@ - - - - - - - - - - - - - - -创建 Triton 推理服务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建 Triton 推理服务

-

AI Lab 目前提供以 Triton、vLLM 作为推理框架,用户只需简单配置即可快速启动一个高性能的推理服务。

-
-

Danger

-

使用 Triton 的 Backend vLLM 的方式已被弃用,推荐使用最新支持 vLLM 来部署您的大语言模型。

-
-

Triton介绍

-

Triton 是由 NVIDIA 开发的一个开源推理服务器,旨在简化机器学习模型的部署和推理服务。它支持多种深度学习框架,包括 TensorFlow、PyTorch 等,使得用户能够轻松管理和部署不同类型的模型。

-

前提条件

-

准备模型数据:在数据集管理中纳管模型代码,并保证数据成功预加载,下面以 mnist 手写数字识别的 PyTorch 模型为例。

-
-

Note

-

待推理的模型在数据集中需要遵以下目录格式:

-
  <model-repository-name>
-  └── <model-name>
-     └── <version>
-        └── <model-definition-file>
-
-
-

本例中的目录格式为:

-
    model-repo
-    └── mnist-cnn
-        └── 1
-            └── model.pt
-
-

创建推理服务

-

目前已经支持表单创建,可以界面字段提示,进行服务创建。

-

点击创建

-

配置模型路径

-

模型路径 model-repo/mnist-cnn/1/model.pt 需要和数据集中的模型目录格式一致。

-

模型配置

-

点击创建

-

配置输入和输出参数

-
-

Note

-

输入和输出参数的第一个维度默认为 batchsize 的大小,设置为 -1 可以根据输入的推理数据自动计算 batchsize。参数其余维度和数据类型需要与模型输入匹配。

-
-

配置环境

-

可以导入 环境管理 中创建的环境作为推理时的运行环境。

-

高级配置

-

点击创建

-

配置认证策略

-

支持 API key 的请求方式认证,用户可以自定义增加认证参数。

-

亲和性调度

-

支持 根据 GPU 资源等节点配置实现自动化的亲和性调度,同时也方便用户自定义调度策略。

-

访问

-

点击创建

-

API 访问

-
    -
  • Triton 提供了一个基于 REST 的 API,允许客户端通过 HTTP POST 请求进行模型推理。
  • -
  • 客户端可以发送 JSON 格式的请求体,其中包含输入数据和相关的元数据。
  • -
-

HTTP 访问

-
    -
  1. -

    发送 HTTP POST 请求:使用工具如 curl 或 HTTP 客户端库(如 Python 的 requests 库)向 Triton Server 发送 POST 请求。

    -
  2. -
  3. -

    设置 HTTP 头:根据用户配置项自动生成的配置,包含模型输入和输出的元数据。

    -
  4. -
  5. -

    构建请求体:请求体通常包含要进行推理的输入数据,以及模型特定的元数据。

    -
  6. -
-
示例 curl 命令
-
  curl -X POST "http://<ip>:<port>/v2/models/<inference-name>/infer" \
-  -H "Content-Type: application/json" \
-  -d '{
-    "inputs": [
-      {
-        "name": "model_input",            
-        "shape": [1, 1, 32, 32],          
-        "datatype": "FP32",               
-        "data": [
-          [0.1234, 0.5678, 0.9101, ... ]  
-        ]
-      }
-    ]
-  }'
-
-
    -
  • <ip> 是 Triton Inference Server 运行的主机地址。
  • -
  • <port> 是 Triton Inference Server 运行的主机端口号。
  • -
  • <inference-name> 是所创建的推理服务的名称。
  • -
  • "name" 要与模型配置中的输入参数的 name 一致。
  • -
  • "shape" 要与模型配置中的输入参数的 dims 一致。
  • -
  • "datatype" 要与模型配置中的输入参数的 Data Type 一致。
  • -
  • "data" 替换为实际的推理数据。
  • -
-

请注意,上述示例代码需要根据你的具体模型和环境进行调整,输入数据的格式和内容也需要符合模型的要求。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/inference/vllm-inference.html b/site/end-user/baize/inference/vllm-inference.html deleted file mode 100644 index 905bf2f..0000000 --- a/site/end-user/baize/inference/vllm-inference.html +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - - - - - - - - - -创建 vLLM 推理服务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建 vLLM 推理服务

-

AI Lab 支持以 vLLM 作为推理服务,提供全部 vLLM 的能力,同时提供了完全适配 OpenAI 接口定义。

-

vLLM 介绍

-

vLLM 是一个快速且易于使用的用于推理和服务的库,vLLM 旨在极大地提升实时场景下的语言模型服务的吞吐与内存使用效率。vLLM 在速度、灵活性方面具有以下部分特点:

-
    -
  • 连续批处理传入请求;
  • -
  • 使用 PagedAttention 高效管理注意力键和值内存;
  • -
  • 与流行的 HuggingFace 型号无缝集成;
  • -
  • 兼容 OpenAI 的 API 服务器。
  • -
-

前提条件

-

准备模型数据:在数据集管理中纳管模型代码,并保证数据成功预加载。

-

创建推理服务

-
    -
  1. -

    选择 vLLM 推理框架,并在选择模型模块选择提前创建好的模型数据集 hdd-models 并填写数据集中模型所在的路径信息。

    -

    本文推理服务的创建使用 ChatGLM3 模型。

    -

    模型选择

    -
  2. -
  3. -

    配置推理服务的资源,并调整推理服务运行的参数。

    -

    数据选择

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    参数名描述
    GPU 资源根据模型规模以及集群资源可以为推理配置 GPU 资源。
    允许远程代码控制 vLLM 是否信任并执行来自远程源的代码
    LoRALoRA 是一种针对深度学习模型的参数高效调整技术。它通过将原始模型参数矩阵分解为低秩矩阵,从而减少参数数量和计算复杂度。 1. --lora-modules:用来指定特定模块或层进行低秩近似 2. max_loras_rank:用来指定 LoRA 模型中每个适配层的最大秩,对于简单的任务,可以选择较小的秩值,而对于复杂任务,可能需要较大的秩值来保证模型性能。 3. max_loras:表示模型中可以包含的 LoRA 层的最大数量,根据模型大小、推理复杂度等因素自定 4. max_cpu_loras:用于指定在 CPU 环境中可以处理的 LoRA 层的最大数。
    关联环境通过选择环境预定义推理时所需的环境依赖。
    -
    -

    Info

    -

    支持配置 LoRA 参数的模型可参考 vLLM 支持的模型

    -
    -
  4. -
  5. -

    高级配置 中,支持根据 GPU 资源等节点配置实现自动化的亲和性调度,同时也方便用户自定义调度策略。

    -
  6. -
-

验证推理服务

-

推理服务创建完成之后,点击推理服务名称进入详情,查看 API 调用方法。通过使用 Curl、Python、Nodejs 等方式验证执行结果。

-

拷贝详情中的 curl 命令,并在终端中执行命令发送一条模型推理请求,预期输出:

-

推理接口

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/create.html b/site/end-user/baize/jobs/create.html deleted file mode 100644 index 6bcd2d4..0000000 --- a/site/end-user/baize/jobs/create.html +++ /dev/null @@ -1,696 +0,0 @@ - - - - - - - - - - - - - - -创建训练任务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

创建任务(Job)

-

任务管理是指通过作业调度和管控组件来创建和管理任务生命周期的功能。

-

AI Lab 采用 Kubernetes 的 Job 机制来调度各项 AI 推理、训练任务。

-

通用步骤

-
    -
  1. -

    在左侧导航栏中点击 任务中心 -> 训练任务 ,点击右侧的 创建 按钮。

    -

    点击创建

    -
  2. -
  3. -

    系统会预先填充基础配置数据,包括要部署的集群、命名空间、任务类型、队列、优先级等。 - 调整这些参数后点击 下一步

    -

    填写参数

    -
  4. -
  5. -

    配置镜像地址、运行参数以及关联的数据集、环境和资源后,点击 下一步

    -

    任务资源配置

    -
  6. -
  7. -

    按需添加标签、注解、环境变量等任务参数,选择调度策略后点击 确定

    -

    高级配置

    -
  8. -
  9. -

    任务创建成功后,会有几种运行状态:

    -
      -
    • 运行中
    • -
    • 排队中
    • -
    • 提交成功、提交失败
    • -
    • 任务成功、任务失败
    • -
    -
  10. -
-

创建特定任务

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/delete.html b/site/end-user/baize/jobs/delete.html deleted file mode 100644 index 791bb81..0000000 --- a/site/end-user/baize/jobs/delete.html +++ /dev/null @@ -1,628 +0,0 @@ - - - - - - - - - - - - - - -删除任务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

删除任务(Job)

-

如果发现任务冗余、过期或因其他缘故不再需要,可以从训练任务列表中删除。

-
    -
  1. -

    在训练任务列表右侧点击 ,在弹出菜单中选择 删除

    -

    删除

    -
  2. -
  3. -

    在弹窗中确认要删除的任务,输入任务名称后点击 删除

    -

    确认删除

    -
  4. -
  5. -

    屏幕提示删除成功,该任务从列表中消失。

    -

    已删除

    -
  6. -
-
-

Caution

-

任务一旦删除将不可恢复,请谨慎操作。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/mpi.html b/site/end-user/baize/jobs/mpi.html deleted file mode 100644 index e982d3f..0000000 --- a/site/end-user/baize/jobs/mpi.html +++ /dev/null @@ -1,933 +0,0 @@ - - - - - - - - - - - - - - -创建 MPI 任务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

MPI 任务

-

MPI(Message Passing Interface)是一种用于并行计算的通信协议,它允许多个计算节点之间进行消息传递和协作。 -MPI 任务是使用 MPI 协议进行并行计算的任务,适用于需要大规模并行处理的应用场景,例如分布式训练、科学计算等。

-

在 AI Lab 中,我们提供了 MPI 任务的支持,您可以通过界面化操作,快速创建 MPI 任务,进行高性能的并行计算。 -本教程将指导您如何在 AI Lab 中创建和运行一个 MPI 任务。

-

任务配置介绍

-
    -
  • 任务类型MPI,用于运行并行计算任务。
  • -
  • 运行环境 :选用预装了 MPI 环境的镜像,或者在任务中指定安装必要的依赖。
  • -
  • MPIJob 配置 :理解并配置 MPIJob 的各项参数,如副本数、资源请求等。
  • -
-

任务运行环境

-

在这里我们使用 baize-notebook 基础镜像和 关联环境 的方式来作为任务的基础运行环境。 -确保运行环境中包含 MPI 及相关库,如 OpenMPI、mpi4py 等。

-
-

注意 :了解如何创建环境,请参考环境列表

-
-

创建 MPI 任务

-

MPI 任务创建步骤

-

MPI 任务

-
    -
  1. 登录平台 :登录 AI Lab 平台,点击左侧导航栏中的 任务中心,进入 训练任务 页面。
  2. -
  3. 创建任务 :点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型 :在弹出的窗口中,选择任务类型为 MPI,然后点击 下一步
  6. -
  7. 填写任务信息 :填写任务名称和描述,例如 “benchmarks-mpi”,然后点击 下一步
  8. -
  9. 配置任务参数 :根据您的需求,配置任务的运行参数、镜像、资源等信息。
  10. -
-

运行参数

-
    -
  • 启动命令 :使用 mpirun,这是运行 MPI 程序的命令。
  • -
  • 命令参数 :输入您要运行的 MPI 程序的参数。
  • -
-

示例:运行 TensorFlow Benchmarks

-

在本示例中,我们将运行一个 TensorFlow 的基准测试程序,使用 Horovod 进行分布式训练。 -首先,确保您使用的镜像中包含所需的依赖项,例如 TensorFlow、Horovod、Open MPI 等。

-

镜像选择 :使用包含 TensorFlow 和 MPI 的镜像,例如 mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest

-

命令参数

-
mpirun --allow-run-as-root -np 2 -bind-to none -map-by slot \
-  -x NCCL_DEBUG=INFO -x LD_LIBRARY_PATH -x PATH \
-  -mca pml ob1 -mca btl ^openib \
-  python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \
-  --model=resnet101 --batch_size=64 --variable_update=horovod
-
-

说明

-
    -
  • mpirun:MPI 的启动命令。
  • -
  • --allow-run-as-root:允许以 root 用户运行(在容器中通常是 root 用户)。
  • -
  • -np 2:指定运行的进程数为 2。
  • -
  • -bind-to none-map-by slot:MPI 进程绑定和映射的配置。
  • -
  • -x NCCL_DEBUG=INFO:设置 NCCL(NVIDIA Collective Communication Library)的调试信息级别。
  • -
  • -x LD_LIBRARY_PATH-x PATH:在 MPI 环境中传递必要的环境变量。
  • -
  • -mca pml ob1 -mca btl ^openib:MPI 的配置参数,指定传输层和消息层协议。
  • -
  • python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py:运行 TensorFlow 基准测试脚本。
  • -
  • --model=resnet101--batch_size=64--variable_update=horovod:TensorFlow 脚本的参数,指定模型、批量大小和使用 Horovod 进行参数更新。
  • -
-

资源配置

-

在任务配置中,需要为每个节点(Launcher 和 Worker)分配适当的资源,例如 CPU、内存和 GPU。

-

资源示例

-
    -
  • -

    Launcher(启动器)

    -
      -
    • 副本数 :1
    • -
    • 资源请求
        -
      • CPU:2 核
      • -
      • 内存:4 GiB
      • -
      -
    • -
    -
  • -
  • -

    Worker(工作节点)

    -
      -
    • 副本数 :2
    • -
    • 资源请求
        -
      • CPU:2 核
      • -
      • 内存:4 GiB
      • -
      • GPU:根据需求分配
      • -
      -
    • -
    -
  • -
-

完整的 MPIJob 配置示例

-

以下是完整的 MPIJob 配置示例,供您参考。

-
apiVersion: kubeflow.org/v1
-kind: MPIJob
-metadata:
-  name: tensorflow-benchmarks
-spec:
-  slotsPerWorker: 1
-  runPolicy:
-    cleanPodPolicy: Running
-  mpiReplicaSpecs:
-    Launcher:
-      replicas: 1
-      template:
-        spec:
-          containers:
-            - name: tensorflow-benchmarks
-              image: mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest
-              command:
-                - mpirun
-                - --allow-run-as-root
-                - -np
-                - "2"
-                - -bind-to
-                - none
-                - -map-by
-                - slot
-                - -x
-                - NCCL_DEBUG=INFO
-                - -x
-                - LD_LIBRARY_PATH
-                - -x
-                - PATH
-                - -mca
-                - pml
-                - ob1
-                - -mca
-                - btl
-                - ^openib
-                - python
-                - scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py
-                - --model=resnet101
-                - --batch_size=64
-                - --variable_update=horovod
-              resources:
-                limits:
-                  cpu: "2"
-                  memory: 4Gi
-                requests:
-                  cpu: "2"
-                  memory: 4Gi
-    Worker:
-      replicas: 2
-      template:
-        spec:
-          containers:
-            - name: tensorflow-benchmarks
-              image: mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest
-              resources:
-                limits:
-                  cpu: "2"
-                  memory: 4Gi
-                  nvidia.com/gpumem: 1k
-                  nvidia.com/vgpu: "1"
-                requests:
-                  cpu: "2"
-                  memory: 4Gi
-
-

配置解析

-
    -
  • apiVersionkind:表示资源的 API 版本和类型,MPIJob 是 Kubeflow 定义的自定义资源,用于创建 MPI 类型的任务。
  • -
  • metadata:元数据,包含任务的名称等信息。
  • -
  • spec:任务的详细配置。
      -
    • slotsPerWorker:每个 Worker 节点的槽位数量,通常设置为 1。
    • -
    • runPolicy:运行策略,例如任务完成后是否清理 Pod。
    • -
    • mpiReplicaSpecs:MPI 任务的副本配置。
        -
      • Launcher:启动器,负责启动 MPI 任务。
          -
        • replicas:副本数,通常为 1。
        • -
        • template:Pod 模板,定义容器运行的镜像、命令、资源等。
        • -
        -
      • -
      • Worker:工作节点,实际执行任务的计算节点。
          -
        • replicas:副本数,根据并行需求设置,这里设置为 2。
        • -
        • template:Pod 模板,同样定义容器的运行环境和资源。
        • -
        -
      • -
      -
    • -
    -
  • -
-

设置任务副本数

-

在创建 MPI 任务时,需要根据 mpiReplicaSpecs 中配置的副本数,正确设置 任务副本数

-
    -
  • 总副本数 = Launcher 副本数 + Worker 副本数
  • -
  • -

    本示例中:

    -
      -
    • Launcher 副本数:1
    • -
    • Worker 副本数:2
    • -
    • 总副本数 :1 + 2 = 3
    • -
    -
  • -
-

因此,在任务配置中,您需要将 任务副本数 设置为 3

-

提交任务

-

配置完成后,点击 提交 按钮,开始运行 MPI 任务。

-

查看运行结果

-

任务提交成功后,您可以进入 任务详情 页面,查看资源的使用情况和任务的运行状态。 -从右上角进入 工作负载详情,可以查看运行过程中每个节点的日志输出。

-

示例输出

-
TensorFlow:  1.13
-Model:       resnet101
-Mode:        training
-Batch size:  64
-...
-
-Total images/sec: 125.67
-
-

这表示 MPI 任务成功运行,TensorFlow 基准测试程序完成了分布式训练。

-
-

小结

-

通过本教程,您学习了如何在 AI Lab 平台上创建和运行一个 MPI 任务。我们详细介绍了 MPIJob 的配置方式, -以及如何在任务中指定运行的命令和资源需求。希望本教程对您有所帮助,如有任何问题,请参考平台提供的其他文档或联系技术支持。

-
-

附录

-
    -
  • 如果您的运行环境未预装所需的库(如 mpi4py、Horovod 等),请在任务中添加安装命令,或者使用预装了相关依赖的镜像。
  • -
  • 在实际应用中,您可以根据需求修改 MPIJob 的配置,例如更改镜像、命令参数、资源请求等。
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/mxnet.html b/site/end-user/baize/jobs/mxnet.html deleted file mode 100644 index bf6d229..0000000 --- a/site/end-user/baize/jobs/mxnet.html +++ /dev/null @@ -1,1064 +0,0 @@ - - - - - - - - - - - - - - -创建 MXNet 任务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

MXNet 任务

-
-

Warning

-

由于 Apache MXNet 项目已存档,因此 Kubeflow MXJob 将在未来的 Training Operator 1.9 版本中弃用和删除。

-
-

Apache MXNet 是一个高性能的深度学习框架,支持多种编程语言。MXNet 任务可以使用多种方式进行训练,包括单机模式和分布式模式。在 AI Lab 中,我们提供了对 MXNet 任务的支持,您可以通过界面化操作,快速创建 MXNet 任务,进行模型训练。

-

本教程将指导您如何在 AI Lab 平台上创建和运行 MXNet 的单机和分布式任务。

-

任务配置介绍

-
    -
  • 任务类型MXNet,支持单机和分布式两种模式。
  • -
  • 运行环境:选择包含 MXNet 框架的镜像,或在任务中安装必要的依赖。
  • -
-

任务运行环境

-

我们使用 release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest 镜像作为任务的基础运行环境。该镜像预装了 MXNet 及其相关依赖,支持 GPU 加速。

-
-

注意:了解如何创建和管理环境,请参考 环境列表

-
-

创建 MXNet 任务

-

mxnet

-

MXNet 单机任务

-

创建步骤

-
    -
  1. 登录平台:登录 AI Lab 平台,点击左侧导航栏中的 任务中心,进入 训练任务 页面。
  2. -
  3. 创建任务:点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型:在弹出的窗口中,选择任务类型为 MXNet,然后点击 下一步
  6. -
  7. 填写任务信息:填写任务名称和描述,例如 “MXNet 单机训练任务”,然后点击 确定
  8. -
  9. 配置任务参数:根据您的需求,配置任务的运行参数、镜像、资源等信息。
  10. -
-

运行参数

-
    -
  • 启动命令python3
  • -
  • -

    命令参数

    -
    /mxnet/mxnet/example/gluon/mnist/mnist.py --epochs 10 --cuda
    -
    -

    说明

    -
      -
    • /mxnet/mxnet/example/gluon/mnist/mnist.py:MXNet 提供的 MNIST 手写数字识别示例脚本。
    • -
    • --epochs 10:设置训练轮数为 10。
    • -
    • --cuda:使用 CUDA 进行 GPU 加速。
    • -
    -
  • -
-

资源配置

-
    -
  • 副本数:1(单机任务)
  • -
  • 资源请求
      -
    • CPU:2 核
    • -
    • 内存:4 GiB
    • -
    • GPU:1 块
    • -
    -
  • -
-

完整的 MXJob 配置示例

-

以下是单机 MXJob 的 YAML 配置:

-
apiVersion: "kubeflow.org/v1"
-kind: "MXJob"
-metadata:
-  name: "mxnet-single-job"
-spec:
-  jobMode: MXTrain
-  mxReplicaSpecs:
-    Worker:
-      replicas: 1
-      restartPolicy: Never
-      template:
-        spec:
-          containers:
-            - name: mxnet
-              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest
-              command: ["python3"]
-              args:
-                [
-                  "/mxnet/mxnet/example/gluon/mnist/mnist.py",
-                  "--epochs",
-                  "10",
-                  "--cuda",
-                ]
-              ports:
-                - containerPort: 9991
-                  name: mxjob-port
-              resources:
-                limits:
-                  cpu: "2"
-                  memory: 4Gi
-                  nvidia.com/gpu: 1
-                requests:
-                  cpu: "2"
-                  memory: 4Gi
-                  nvidia.com/gpu: 1
-
-

配置解析

-
    -
  • apiVersionkind:指定资源的 API 版本和类型,这里是 MXJob
  • -
  • metadata:元数据,包括任务名称等信息。
  • -
  • spec:任务的详细配置。
      -
    • jobMode:设置为 MXTrain,表示训练任务。
    • -
    • mxReplicaSpecs:MXNet 任务的副本配置。
        -
      • Worker:指定工作节点的配置。
          -
        • replicas:副本数,这里为 1。
        • -
        • restartPolicy:重启策略,设为 Never,表示任务失败时不重启。
        • -
        • template:Pod 模板,定义容器的运行环境和资源。
            -
          • containers:容器列表。
              -
            • name:容器名称。
            • -
            • image:使用的镜像。
            • -
            • commandargs:启动命令和参数。
            • -
            • ports:容器端口配置。
            • -
            • resources:资源请求和限制。
            • -
            -
          • -
          -
        • -
        -
      • -
      -
    • -
    -
  • -
-

提交任务

-

配置完成后,点击 提交 按钮,开始运行 MXNet 单机任务。

-

查看运行结果

-

任务提交成功后,您可以进入 任务详情 页面,查看资源的使用情况和任务的运行状态。从右上角进入 工作负载详情,可以查看运行过程中的日志输出。

-

示例输出

-
Epoch 1: accuracy=0.95
-Epoch 2: accuracy=0.97
-...
-Epoch 10: accuracy=0.98
-Training completed.
-
-

这表示 MXNet 单机任务成功运行,模型训练完成。

-
-

MXNet 分布式任务

-

在分布式模式下,MXNet 任务可以使用多台计算节点共同完成训练,提高训练效率。

-

创建步骤

-
    -
  1. 登录平台:同上。
  2. -
  3. 创建任务:点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型:选择任务类型为 MXNet,然后点击 下一步
  6. -
  7. 填写任务信息:填写任务名称和描述,例如 “MXNet 分布式训练任务”,然后点击 确定
  8. -
  9. 配置任务参数:根据需求,配置运行参数、镜像、资源等。
  10. -
-

运行参数

-
    -
  • 启动命令python3
  • -
  • -

    命令参数

    -
    /mxnet/mxnet/example/image-classification/train_mnist.py --num-epochs 10 --num-layers 2 --kv-store dist_device_sync --gpus 0
    -
    -

    说明

    -
      -
    • /mxnet/mxnet/example/image-classification/train_mnist.py:MXNet 提供的图像分类示例脚本。
    • -
    • --num-epochs 10:训练轮数为 10。
    • -
    • --num-layers 2:模型的层数为 2。
    • -
    • --kv-store dist_device_sync:使用分布式设备同步模式。
    • -
    • --gpus 0:使用 GPU 进行加速。
    • -
    -
  • -
-

资源配置

-
    -
  • 任务副本数:3(包括 Scheduler、Server 和 Worker)
  • -
  • 各角色资源请求
      -
    • Scheduler(调度器):
        -
      • 副本数:1
      • -
      • 资源请求
          -
        • CPU:2 核
        • -
        • 内存:4 GiB
        • -
        • GPU:1 块
        • -
        -
      • -
      -
    • -
    • Server(参数服务器):
        -
      • 副本数:1
      • -
      • 资源请求
          -
        • CPU:2 核
        • -
        • 内存:4 GiB
        • -
        • GPU:1 块
        • -
        -
      • -
      -
    • -
    • Worker(工作节点):
        -
      • 副本数:1
      • -
      • 资源请求
          -
        • CPU:2 核
        • -
        • 内存:4 GiB
        • -
        • GPU:1 块
        • -
        -
      • -
      -
    • -
    -
  • -
-

完整的 MXJob 配置示例

-

以下是分布式 MXJob 的 YAML 配置:

-
apiVersion: "kubeflow.org/v1"
-kind: "MXJob"
-metadata:
-  name: "mxnet-job"
-spec:
-  jobMode: MXTrain
-  mxReplicaSpecs:
-    Scheduler:
-      replicas: 1
-      restartPolicy: Never
-      template:
-        spec:
-          containers:
-            - name: mxnet
-              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest
-              ports:
-                - containerPort: 9991
-                  name: mxjob-port
-              resources:
-                limits:
-                  cpu: "2"
-                  memory: 4Gi
-                  nvidia.com/gpu: 1
-                requests:
-                  cpu: "2"
-                  memory: 4Gi
-    Server:
-      replicas: 1
-      restartPolicy: Never
-      template:
-        spec:
-          containers:
-            - name: mxnet
-              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest
-              ports:
-                - containerPort: 9991
-                  name: mxjob-port
-              resources:
-                limits:
-                  cpu: "2"
-                  memory: 4Gi
-                  nvidia.com/gpu: 1
-                requests:
-                  cpu: "2"
-                  memory: 4Gi
-    Worker:
-      replicas: 1
-      restartPolicy: Never
-      template:
-        spec:
-          containers:
-            - name: mxnet
-              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest
-              command: ["python3"]
-              args:
-                [
-                  "/mxnet/mxnet/example/image-classification/train_mnist.py",
-                  "--num-epochs",
-                  "10",
-                  "--num-layers",
-                  "2",
-                  "--kv-store",
-                  "dist_device_sync",
-                  "--gpus",
-                  "0",
-                ]
-              ports:
-                - containerPort: 9991
-                  name: mxjob-port
-              resources:
-                limits:
-                  cpu: "2"
-                  memory: 4Gi
-                  nvidia.com/gpu: 1
-                requests:
-                  cpu: "2"
-                  memory: 4Gi
-
-

配置解析

-
    -
  • Scheduler(调度器):负责协调集群中各节点的任务调度。
  • -
  • Server(参数服务器):用于存储和更新模型参数,实现分布式参数同步。
  • -
  • Worker(工作节点):实际执行训练任务。
  • -
  • 资源配置:为各角色分配适当的资源,确保任务顺利运行。
  • -
-

设置任务副本数

-

在创建 MXNet 分布式任务时,需要根据 mxReplicaSpecs 中配置的副本数,正确设置 任务副本数

-
    -
  • 总副本数 = Scheduler 副本数 + Server 副本数 + Worker 副本数
  • -
  • 本示例中:
      -
    • Scheduler 副本数:1
    • -
    • Server 副本数:1
    • -
    • Worker 副本数:1
    • -
    • 总副本数:1 + 1 + 1 = 3
    • -
    -
  • -
-

因此,在任务配置中,需要将 任务副本数 设置为 3

-

提交任务

-

配置完成后,点击 提交 按钮,开始运行 MXNet 分布式任务。

-

查看运行结果

-

进入 任务详情 页面,查看任务的运行状态和资源使用情况。您可以查看每个角色(Scheduler、Server、Worker)的日志输出。

-

示例输出

-
INFO:root:Epoch[0] Batch [50]     Speed: 1000 samples/sec   accuracy=0.85
-INFO:root:Epoch[0] Batch [100]    Speed: 1200 samples/sec   accuracy=0.87
-...
-INFO:root:Epoch[9] Batch [100]    Speed: 1300 samples/sec   accuracy=0.98
-Training completed.
-
-

这表示 MXNet 分布式任务成功运行,模型训练完成。

-
-

小结

-

通过本教程,您学习了如何在 AI Lab 平台上创建和运行 MXNet 的单机和分布式任务。我们详细介绍了 MXJob 的配置方式,以及如何在任务中指定运行的命令和资源需求。希望本教程对您有所帮助,如有任何问题,请参考平台提供的其他文档或联系技术支持。

-
-

附录

-
    -
  • -

    注意事项

    -
      -
    • 确保您使用的镜像包含所需的 MXNet 版本和依赖。
    • -
    • 根据实际需求调整资源配置,避免资源不足或浪费。
    • -
    • 如需使用自定义的训练脚本,请修改启动命令和参数。
    • -
    -
  • -
  • -

    参考文档

    - -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/paddle.html b/site/end-user/baize/jobs/paddle.html deleted file mode 100644 index d0dbef3..0000000 --- a/site/end-user/baize/jobs/paddle.html +++ /dev/null @@ -1,955 +0,0 @@ - - - - - - - - - - - - - - -创建 PaddlePaddle 任务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

PaddlePaddle 任务

-

PaddlePaddle(飞桨)是百度开源的深度学习平台,支持丰富的神经网络模型和分布式训练方式。PaddlePaddle 任务可以通过单机或分布式模式进行训练。在 AI Lab 平台中,我们提供了对 PaddlePaddle 任务的支持,您可以通过界面化操作,快速创建 PaddlePaddle 任务,进行模型训练。

-

本教程将指导您如何在 AI Lab 平台上创建和运行 PaddlePaddle 的单机和分布式任务。

-

任务配置介绍

-
    -
  • 任务类型PaddlePaddle,支持单机和分布式两种模式。
  • -
  • 运行环境:选择包含 PaddlePaddle 框架的镜像,或在任务中安装必要的依赖。
  • -
-

任务运行环境

-

我们使用 registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu 镜像作为任务的基础运行环境。该镜像预装了 PaddlePaddle 框架,适用于 CPU 计算。如果需要使用 GPU,请选择对应的 GPU 版本镜像。

-
-

注意:了解如何创建和管理环境,请参考 环境列表

-
-

创建 PaddlePaddle 任务

-

paddle

-

PaddlePaddle 单机训练任务

-

创建步骤

-
    -
  1. 登录平台:登录 AI Lab 平台,点击左侧导航栏中的 任务中心,进入 训练任务 页面。
  2. -
  3. 创建任务:点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型:在弹出的窗口中,选择任务类型为 PaddlePaddle,然后点击 下一步
  6. -
  7. 填写任务信息:填写任务名称和描述,例如 “PaddlePaddle 单机训练任务”,然后点击 确定
  8. -
  9. 配置任务参数:根据您的需求,配置任务的运行参数、镜像、资源等信息。
  10. -
-

运行参数

-
    -
  • 启动命令python
  • -
  • -

    命令参数

    -
    -m paddle.distributed.launch run_check
    -
    -

    说明

    -
      -
    • -m paddle.distributed.launch:使用 PaddlePaddle 提供的分布式启动模块,即使在单机模式下也可以使用,方便将来迁移到分布式。
    • -
    • run_check:PaddlePaddle 提供的测试脚本,用于检查分布式环境是否正常。
    • -
    -
  • -
-

资源配置

-
    -
  • 副本数:1(单机任务)
  • -
  • 资源请求
      -
    • CPU:根据需求设置,建议至少 1 核
    • -
    • 内存:根据需求设置,建议至少 2 GiB
    • -
    • GPU:如果需要使用 GPU,选择 GPU 版本的镜像,并分配相应的 GPU 资源
    • -
    -
  • -
-

完整的 PaddleJob 配置示例

-

以下是单机 PaddleJob 的 YAML 配置:

-
apiVersion: kubeflow.org/v1
-kind: PaddleJob
-metadata:
-    name: paddle-simple-cpu
-    namespace: kubeflow
-spec:
-    paddleReplicaSpecs:
-        Worker:
-            replicas: 1
-            restartPolicy: OnFailure
-            template:
-                spec:
-                    containers:
-                        - name: paddle
-                          image: registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu
-                          command:
-                              [
-                                  'python',
-                                  '-m',
-                                  'paddle.distributed.launch',
-                                  'run_check',
-                              ]
-
-

配置解析

-
    -
  • apiVersionkind:指定资源的 API 版本和类型,这里是 PaddleJob
  • -
  • metadata:元数据,包括任务名称和命名空间。
  • -
  • spec:任务的详细配置。
      -
    • paddleReplicaSpecs:PaddlePaddle 任务的副本配置。
        -
      • Worker:指定工作节点的配置。
          -
        • replicas:副本数,这里为 1,表示单机训练。
        • -
        • restartPolicy:重启策略,设为 OnFailure,表示任务失败时自动重启。
        • -
        • template:Pod 模板,定义容器的运行环境和资源。
            -
          • containers:容器列表。
              -
            • name:容器名称。
            • -
            • image:使用的镜像。
            • -
            • command:启动命令和参数。
            • -
            -
          • -
          -
        • -
        -
      • -
      -
    • -
    -
  • -
-

提交任务

-

配置完成后,点击 提交 按钮,开始运行 PaddlePaddle 单机任务。

-

查看运行结果

-

任务提交成功后,您可以进入 任务详情 页面,查看资源的使用情况和任务的运行状态。从右上角进入 工作负载详情,可以查看运行过程中的日志输出。

-

示例输出

-
run check success, PaddlePaddle is installed correctly on this node :)
-
-

这表示 PaddlePaddle 单机任务成功运行,环境配置正常。

-
-

PaddlePaddle 分布式训练任务

-

在分布式模式下,PaddlePaddle 任务可以使用多台计算节点共同完成训练,提高训练效率。

-

创建步骤

-
    -
  1. 登录平台:同上。
  2. -
  3. 创建任务:点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型:选择任务类型为 PaddlePaddle,然后点击 下一步
  6. -
  7. 填写任务信息:填写任务名称和描述,例如 “PaddlePaddle 分布式训练任务”,然后点击 确定
  8. -
  9. 配置任务参数:根据需求,配置运行参数、镜像、资源等。
  10. -
-

运行参数

-
    -
  • 启动命令python
  • -
  • -

    命令参数

    -
    -m paddle.distributed.launch train.py --epochs=10
    -
    -

    说明

    -
      -
    • -m paddle.distributed.launch:使用 PaddlePaddle 提供的分布式启动模块。
    • -
    • train.py:您的训练脚本,需要放在镜像中或挂载到容器内。
    • -
    • --epochs=10:训练的轮数,这里设置为 10。
    • -
    -
  • -
-

资源配置

-
    -
  • 任务副本数:根据 Worker 副本数设置,这里为 2。
  • -
  • 资源请求
      -
    • CPU:根据需求设置,建议至少 1 核
    • -
    • 内存:根据需求设置,建议至少 2 GiB
    • -
    • GPU:如果需要使用 GPU,选择 GPU 版本的镜像,并分配相应的 GPU 资源
    • -
    -
  • -
-

完整的 PaddleJob 配置示例

-

以下是分布式 PaddleJob 的 YAML 配置:

-
apiVersion: kubeflow.org/v1
-kind: PaddleJob
-metadata:
-    name: paddle-distributed-job
-    namespace: kubeflow
-spec:
-    paddleReplicaSpecs:
-        Worker:
-            replicas: 2
-            restartPolicy: OnFailure
-            template:
-                spec:
-                    containers:
-                        - name: paddle
-                          image: registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu
-                          command:
-                              [
-                                  'python',
-                                  '-m',
-                                  'paddle.distributed.launch',
-                                  'train.py',
-                              ]
-                          args:
-                              - '--epochs=10'
-
-

配置解析

-
    -
  • Worker
      -
    • replicas:副本数,设置为 2,表示使用 2 个工作节点进行分布式训练。
    • -
    • 其他配置与单机模式类似。
    • -
    -
  • -
-

设置任务副本数

-

在创建 PaddlePaddle 分布式任务时,需要根据 paddleReplicaSpecs 中配置的副本数,正确设置 任务副本数

-
    -
  • 总副本数 = Worker 副本数
  • -
  • 本示例中:
      -
    • Worker 副本数:2
    • -
    • 总副本数:2
    • -
    -
  • -
-

因此,在任务配置中,需要将 任务副本数 设置为 2

-

提交任务

-

配置完成后,点击 提交 按钮,开始运行 PaddlePaddle 分布式任务。

-

查看运行结果

-

进入 任务详情 页面,查看任务的运行状态和资源使用情况。您可以查看每个工作节点的日志输出,确认分布式训练是否正常运行。

-

示例输出

-
Worker 0: Epoch 1, Batch 100, Loss 0.5
-Worker 1: Epoch 1, Batch 100, Loss 0.6
-...
-Training completed.
-
-

这表示 PaddlePaddle 分布式任务成功运行,模型训练完成。

-
-

小结

-

通过本教程,您学习了如何在 AI Lab 平台上创建和运行 PaddlePaddle 的单机和分布式任务。我们详细介绍了 PaddleJob 的配置方式,以及如何在任务中指定运行的命令和资源需求。希望本教程对您有所帮助,如有任何问题,请参考平台提供的其他文档或联系技术支持。

-
-

附录

-
    -
  • -

    注意事项

    -
      -
    • 训练脚本:确保 train.py(或其他训练脚本)在容器内存在。您可以通过自定义镜像、挂载持久化存储等方式将脚本放入容器。
    • -
    • 镜像选择:根据您的需求选择合适的镜像,例如使用 GPU 时选择 paddle:2.4.0rc0-gpu 等。
    • -
    • 参数调整:可以通过修改 commandargs 来传递不同的训练参数。
    • -
    -
  • -
  • -

    参考文档

    - -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/pytorch.html b/site/end-user/baize/jobs/pytorch.html deleted file mode 100644 index 5aa91f4..0000000 --- a/site/end-user/baize/jobs/pytorch.html +++ /dev/null @@ -1,916 +0,0 @@ - - - - - - - - - - - - - - -创建 Pytorch 任务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

Pytorch 任务

-

Pytorch 是一个开源的深度学习框架,它提供了一个灵活的训练和部署环境。 -Pytorch 任务是一个使用 Pytorch 框架的任务。

-

在 AI Lab 中,我们提供了 Pytorch 任务支持和适配,您可以通过界面化操作, -快速创建 Pytorch 任务,进行模型训练。

-

任务配置介绍

-
    -
  • 任务类型同时支持 Pytorch 单机Pytorch 分布式 两种模式。
  • -
  • 运行镜像内已经默认支持 Pytorch 框架,无需额外安装。
  • -
-

任务运行环境

-

在这里我们使用 baize-notebook 基础镜像 和 关联环境 的方式来作为任务基础运行环境。

-
-

了解如何创建环境,请参考环境列表

-
-

创建任务

-

Pytorch 单机任务

-

Pytorch 单机任务

-
    -
  1. 登录 AI Lab 平台,点击左侧导航栏中的 任务中心 ,进入 训练任务 页面。
  2. -
  3. 点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型为 Pytorch 单机,点击 下一步
  6. -
  7. 填写任务名称、描述后点击 确定
  8. -
-

运行参数

-
    -
  • 启动命令 使用 bash
  • -
  • 命令参数使用
  • -
-
import torch
-import torch.nn as nn
-import torch.optim as optim
-
-# 定义一个简单的神经网络
-class SimpleNet(nn.Module):
-    def __init__(self):
-        super(SimpleNet, self).__init__()
-        self.fc = nn.Linear(10, 1)
-
-    def forward(self, x):
-        return self.fc(x)
-
-# 创建模型、损失函数和优化器
-model = SimpleNet()
-criterion = nn.MSELoss()
-optimizer = optim.SGD(model.parameters(), lr=0.01)
-
-# 生成一些随机数据
-x = torch.randn(100, 10)
-y = torch.randn(100, 1)
-
-# 训练模型
-for epoch in range(100):
-    # 前向传播
-    outputs = model(x)
-    loss = criterion(outputs, y)
-
-    # 反向传播和优化
-    optimizer.zero_grad()
-    loss.backward()
-    optimizer.step()
-
-    if (epoch + 1) % 10 == 0:
-        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')
-
-print('Training finished.')
-
-

运行结果

-

任务提交成功,我们可以进入任务详情查看到资源的使用情况,从右上角去往 工作负载详情 ,可以查看训练过程中的日志输出

-
[HAMI-core Warn(1:140244541377408:utils.c:183)]: get default cuda from (null)
-[HAMI-core Msg(1:140244541377408:libvgpu.c:855)]: Initialized
-Epoch [10/100], Loss: 1.1248
-Epoch [20/100], Loss: 1.0486
-Epoch [30/100], Loss: 0.9969
-Epoch [40/100], Loss: 0.9611
-Epoch [50/100], Loss: 0.9360
-Epoch [60/100], Loss: 0.9182
-Epoch [70/100], Loss: 0.9053
-Epoch [80/100], Loss: 0.8960
-Epoch [90/100], Loss: 0.8891
-Epoch [100/100], Loss: 0.8841
-Training finished.
-[HAMI-core Msg(1:140244541377408:multiprocess_memory_limit.c:468)]: Calling exit handler 1
-
-

Pytorch 分布式任务

-
    -
  1. 登录 AI Lab 平台,点击左侧导航栏中的 任务中心 ,进入 任务列表 页面。
  2. -
  3. 点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型为 Pytorch 分布式,点击 下一步
  6. -
  7. 填写任务名称、描述后点击 确定
  8. -
-

运行参数

-
    -
  • 启动命令 使用 bash
  • -
  • 命令参数使用
  • -
-
import os
-import torch
-import torch.distributed as dist
-import torch.nn as nn
-import torch.optim as optim
-from torch.nn.parallel import DistributedDataParallel as DDP
-
-class SimpleModel(nn.Module):
-    def __init__(self):
-        super(SimpleModel, self).__init__()
-        self.fc = nn.Linear(10, 1)
-
-    def forward(self, x):
-        return self.fc(x)
-
-def train():
-    # 打印环境信息
-    print(f'PyTorch version: {torch.__version__}')
-    print(f'CUDA available: {torch.cuda.is_available()}')
-    if torch.cuda.is_available():
-        print(f'CUDA version: {torch.version.cuda}')
-        print(f'CUDA device count: {torch.cuda.device_count()}')
-
-    rank = int(os.environ.get('RANK', '0'))
-    world_size = int(os.environ.get('WORLD_SIZE', '1'))
-
-    print(f'Rank: {rank}, World Size: {world_size}')
-
-    # 初始化分布式环境
-    try:
-        if world_size > 1:
-            dist.init_process_group('nccl')
-            print('Distributed process group initialized successfully')
-        else:
-            print('Running in non-distributed mode')
-    except Exception as e:
-        print(f'Error initializing process group: {e}')
-        return
-
-    # 设置设备
-    try:
-        if torch.cuda.is_available():
-            device = torch.device(f'cuda:{rank % torch.cuda.device_count()}')
-            print(f'Using CUDA device: {device}')
-        else:
-            device = torch.device('cpu')
-            print('CUDA not available, using CPU')
-    except Exception as e:
-        print(f'Error setting device: {e}')
-        device = torch.device('cpu')
-        print('Falling back to CPU')
-
-    try:
-        model = SimpleModel().to(device)
-        print('Model moved to device successfully')
-    except Exception as e:
-        print(f'Error moving model to device: {e}')
-        return
-
-    try:
-        if world_size > 1:
-            ddp_model = DDP(model, device_ids=[rank % torch.cuda.device_count()] if torch.cuda.is_available() else None)
-            print('DDP model created successfully')
-        else:
-            ddp_model = model
-            print('Using non-distributed model')
-    except Exception as e:
-        print(f'Error creating DDP model: {e}')
-        return
-
-    loss_fn = nn.MSELoss()
-    optimizer = optim.SGD(ddp_model.parameters(), lr=0.001)
-
-    # 生成一些随机数据
-    try:
-        data = torch.randn(100, 10, device=device)
-        labels = torch.randn(100, 1, device=device)
-        print('Data generated and moved to device successfully')
-    except Exception as e:
-        print(f'Error generating or moving data to device: {e}')
-        return
-
-    for epoch in range(10):
-        try:
-            ddp_model.train()
-            outputs = ddp_model(data)
-            loss = loss_fn(outputs, labels)
-            optimizer.zero_grad()
-            loss.backward()
-            optimizer.step()
-
-            if rank == 0:
-                print(f'Epoch {epoch}, Loss: {loss.item():.4f}')
-        except Exception as e:
-            print(f'Error during training epoch {epoch}: {e}')
-            break
-
-    if world_size > 1:
-        dist.destroy_process_group()
-
-if __name__ == '__main__':
-    train()
-
-

任务副本数

-

注意 Pytorch 分布式 训练任务会创建一组 MasterWorker 的训练 Pod, -Master 负责协调训练任务,Worker 负责实际的训练工作。

-
-

Note

-

本次演示中:Master 副本数为 1,Worker 副本数为 2; -所以我们需要在 任务配置 中设置副本数为 3,即 Master 副本数 + Worker 副本数。 -Pytorch 会自动调谐 MasterWorker 的角色。

-
-

运行结果

-

同样,我们可以进入任务详情,查看资源的使用情况,以及每个 Pod 的日志输出。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/tensorboard.html b/site/end-user/baize/jobs/tensorboard.html deleted file mode 100644 index 7cfff86..0000000 --- a/site/end-user/baize/jobs/tensorboard.html +++ /dev/null @@ -1,858 +0,0 @@ - - - - - - - - - - - - - - -任务分析 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

任务分析介绍

-

在 AI Lab 模块中,提供了模型开发过程重要的可视化分析工具,用于展示机器学习模型的训练过程和结果。 -本文将介绍 任务分析(Tensorboard)的基本概念、在 AI Lab 系统中的使用方法,以及如何配置数据集的日志内容。

-
-

Note

-

Tensorboard 是 TensorFlow 提供的一个可视化工具,用于展示机器学习模型的训练过程和结果。 -它可以帮助开发者更直观地理解模型的训练动态,分析模型性能,调试模型问题等。

-
-

Tensorboard

-

Tensorboard 在模型开发过程中的作用及优势:

-
    -
  • 可视化训练过程:通过图表展示训练和验证的损失、精度等指标,帮助开发者直观地观察模型的训练效果。
  • -
  • 调试和优化模型:通过查看不同层的权重、梯度分布等,帮助开发者发现和修正模型中的问题。
  • -
  • 对比不同实验:可以同时展示多个实验的结果,方便开发者对比不同模型和超参数配置的效果。
  • -
  • 追踪训练数据:记录训练过程中使用的数据集和参数,确保实验的可复现性。
  • -
-

如何创建 Tensorboard

-

在 AI Lab 系统中,我们提供了便捷的方式来创建和管理 Tensorboard。以下是具体步骤:

-

在创建时 Notebook 启用 Tensorboard

-
    -
  1. 创建 Notebook:在 AI Lab 平台上创建一个新的 Notebook。
  2. -
  3. -

    启用 Tensorboard:在创建 Notebook 的页面中,启用 Tensorboard 选项,并指定数据集和日志路径。

    -

    Tensorboard

    -
  4. -
-

在分布式任务创建及完成后启用 Tensorboard

-
    -
  1. 创建分布式任务:在 AI Lab 平台上创建一个新的分布式训练任务。
  2. -
  3. 配置 Tensorboard:在任务配置页面中,启用 Tensorboard 选项,并指定数据集和日志路径。
  4. -
  5. -

    任务完成后查看 Tensorboard:任务完成后,可以在任务详情页面中查看 Tensorboard 的链接,点击链接即可查看训练过程的可视化结果。

    -

    Tensorboard

    -
  6. -
-

在 Notebook 中直接引用 Tensorboard

-

在 Notebook 中,可以通过代码直接启动 Tensorboard。以下是一个示例代码:

-
# 导入必要的库
-import tensorflow as tf
-import datetime
-
-# 定义日志目录
-log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
-
-# 创建 Tensorboard 回调
-tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
-
-# 构建并编译模型
-model = tf.keras.models.Sequential([
-    tf.keras.layers.Flatten(input_shape=(28, 28)),
-    tf.keras.layers.Dense(512, activation='relu'),
-    tf.keras.layers.Dropout(0.2),
-    tf.keras.layers.Dense(10, activation='softmax')
-])
-
-model.compile(optimizer='adam',
-              loss='sparse_categorical_crossentropy',
-              metrics=['accuracy'])
-
-# 训练模型并启用 Tensorboard 回调
-model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), callbacks=[tensorboard_callback])
-
-

如何配置数据集的日志内容

-

在使用 Tensorboard 时,可以记录和配置不同的数据集和日志内容。以下是一些常见的配置方式:

-

配置训练和验证数据集的日志

-

在训练模型时,可以通过 TensorFlow 的 tf.summary API 来记录训练和验证数据集的日志。以下是一个示例代码:

-
# 导入必要的库
-import tensorflow as tf
-
-# 创建日志目录
-train_log_dir = 'logs/gradient_tape/train'
-val_log_dir = 'logs/gradient_tape/val'
-train_summary_writer = tf.summary.create_file_writer(train_log_dir)
-val_summary_writer = tf.summary.create_file_writer(val_log_dir)
-
-# 训练模型并记录日志
-for epoch in range(EPOCHS):
-    for (x_train, y_train) in train_dataset:
-        # 训练步骤
-        train_step(x_train, y_train)
-        with train_summary_writer.as_default():
-            tf.summary.scalar('loss', train_loss.result(), step=epoch)
-            tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)
-
-    for (x_val, y_val) in val_dataset:
-        # 验证步骤
-        val_step(x_val, y_val)
-        with val_summary_writer.as_default():
-            tf.summary.scalar('loss', val_loss.result(), step=epoch)
-            tf.summary.scalar('accuracy', val_accuracy.result(), step=epoch)
-
-

配置自定义日志

-

除了训练和验证数据集的日志外,还可以记录其他自定义的日志内容,例如学习率、梯度分布等。以下是一个示例代码:

-
# 记录自定义日志
-with train_summary_writer.as_default():
-    tf.summary.scalar('learning_rate', learning_rate, step=epoch)
-    tf.summary.histogram('gradients', gradients, step=epoch)
-
-

Tensorboard 管理

-

在 AI Lab 中,通过各种方式创建出来的 Tensorboard 会统一展示在任务分析的页面中,方便用户查看和管理。

-

Tensorboard

-

用户可以在任务分析页面中查看 Tensorboard 的链接、状态、创建时间等信息,并通过链接直接访问 Tensorboard 的可视化结果。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/tensorflow.html b/site/end-user/baize/jobs/tensorflow.html deleted file mode 100644 index 12031da..0000000 --- a/site/end-user/baize/jobs/tensorflow.html +++ /dev/null @@ -1,847 +0,0 @@ - - - - - - - - - - - - - - -创建 Tensorflow 任务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

Tensorflow 任务

-

Tensorflow 是除了 Pytorch 另外一个非常活跃的开源的深度学习框架,它提供了一个灵活的训练和部署环境。

-

在 AI Lab 中,我们同样提供了 Tensorflow 框架的支持和适配,您可以通过界面化操作,快速创建 Tensorflow 任务,进行模型训练。

-

任务配置介绍

-
    -
  • 任务类型同时支持 Tensorflow 单机Tensorflow 分布式 两种模式。
  • -
  • 运行镜像内已经默认支持 Tensorflow 框架,无需额外安装。
  • -
-

任务运行环境

-

在这里我们使用 baize-notebook 基础镜像 和 关联环境 的方式来作为任务基础运行环境。

-
-

了解如何创建环境,请参考环境列表

-
-

创建任务

-

示例 TFJob 单机任务

-

Tensorflow 单机任务

-
    -
  1. 登录 AI Lab 平台,点击左侧导航栏中的 任务中心 ,进入 训练任务 页面。
  2. -
  3. 点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型为 Tensorflow 单机,点击 下一步
  6. -
  7. 填写任务名称、描述后点击 确定
  8. -
-

提前预热代码仓库

-

使用 AI Lab -> 数据集列表 ,创建一个数据集,并将远端 Github 的代码拉取到数据集中, -这样在创建任务时,可以直接选择数据集,将代码挂载到任务中。

-

演示代码仓库地址:https://github.com/d-run/training-sample-code/

-

运行参数

-
    -
  • 启动命令 使用 bash
  • -
  • 命令参数使用 python /code/tensorflow/tf-single.py
  • -
-
"""
-  pip install tensorflow numpy
-"""
-
-import tensorflow as tf
-import numpy as np
-
-# 创建一些随机数据
-x = np.random.rand(100, 1)
-y = 2 * x + 1 + np.random.rand(100, 1) * 0.1
-
-# 创建一个简单的模型
-model = tf.keras.Sequential([
-    tf.keras.layers.Dense(1, input_shape=(1,))
-])
-
-# 编译模型
-model.compile(optimizer='adam', loss='mse')
-
-# 训练模型,将 epochs 改为 10
-history = model.fit(x, y, epochs=10, verbose=1)
-
-# 打印最终损失
-print('Final loss: {' + str(history.history['loss'][-1]) +'}')
-
-# 使用模型进行预测
-test_x = np.array([[0.5]])
-prediction = model.predict(test_x)
-print(f'Prediction for x=0.5: {prediction[0][0]}')
-
-

运行结果

-

任务提交成功后,可以进入任务详情查看到资源的使用情况,从右上角去往 工作负载详情 ,可以查看训练过程中的日志输出。

-

TFJob 分布式任务

-
    -
  1. 登录 AI Lab ,点击左侧导航栏中的 任务中心 ,进入 任务列表 页面。
  2. -
  3. 点击右上角的 创建 按钮,进入任务创建页面。
  4. -
  5. 选择任务类型为 Tensorflow 分布式,点击 下一步
  6. -
  7. 填写任务名称、描述后点击 确定
  8. -
-

示例任务介绍

-

Tensorflow 单机任务

-

本次包含了三种角色:ChiefWorkerParameter Server (PS)

-
    -
  • Chief: 主要负责协调训练过程和模型检查点的保存。
  • -
  • Worker: 执行实际的模型训练。
  • -
  • PS: 在异步训练中用于存储和更新模型参数。
  • -
-

为不同的角色分配了不同的资源。ChiefWorker 使用 GPU,而 PS 使用 CPU 和较大的内存。

-

运行参数

-
    -
  • 启动命令 使用 bash
  • -
  • 命令参数使用 python /code/tensorflow/tensorflow-distributed.py
  • -
-
import os
-import json
-import tensorflow as tf
-
-class SimpleModel(tf.keras.Model):
-    def __init__(self):
-        super(SimpleModel, self).__init__()
-        self.fc = tf.keras.layers.Dense(1, input_shape=(10,))
-
-    def call(self, x):
-        return self.fc(x)
-
-def train():
-    # 打印环境信息
-    print(f"TensorFlow version: {tf.__version__}")
-    print(f"GPU available: {tf.test.is_gpu_available()}")
-    if tf.test.is_gpu_available():
-        print(f"GPU device count: {len(tf.config.list_physical_devices('GPU'))}")
-
-    # 获取分布式训练信息
-    tf_config = json.loads(os.environ.get('TF_CONFIG') or '{}')
-    task_type = tf_config.get('task', {}).get('type')
-    task_id = tf_config.get('task', {}).get('index')
-
-    print(f"Task type: {task_type}, Task ID: {task_id}")
-
-    # 设置分布式策略
-    strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()
-
-    with strategy.scope():
-        model = SimpleModel()
-        loss_fn = tf.keras.losses.MeanSquaredError()
-        optimizer = tf.keras.optimizers.SGD(learning_rate=0.001)
-
-    # 生成一些随机数据
-    data = tf.random.normal((100, 10))
-    labels = tf.random.normal((100, 1))
-
-    @tf.function
-    def train_step(inputs, labels):
-        with tf.GradientTape() as tape:
-            predictions = model(inputs)
-            loss = loss_fn(labels, predictions)
-        gradients = tape.gradient(loss, model.trainable_variables)
-        optimizer.apply_gradients(zip(gradients, model.trainable_variables))
-        return loss
-
-    for epoch in range(10):
-        loss = train_step(data, labels)
-        if task_type == 'chief':
-            print(f'Epoch {epoch}, Loss: {loss.numpy():.4f}')
-
-if __name__ == '__main__':
-    train()
-
-

运行结果

-

同样,我们可以进入任务详情,查看资源的使用情况,以及每个 Pod 的日志输出。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/baize/jobs/view.html b/site/end-user/baize/jobs/view.html deleted file mode 100644 index 2cebbf5..0000000 --- a/site/end-user/baize/jobs/view.html +++ /dev/null @@ -1,815 +0,0 @@ - - - - - - - - - - - - - - -查看任务负载 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

查看任务(Job)工作负载

-

任务创建好后,都会显示在训练任务列表中。

-
    -
  1. -

    在训练训练任务列表中,点击某个任务右侧的 -> 任务负载详情

    -

    点击菜单项

    -
  2. -
  3. -

    出现一个弹窗选择要查看哪个 Pod 后,点击 进入

    -

    弹窗进入

    -
  4. -
  5. -

    跳转到容器管理界面,可以查看容器的工作状态、标签与注解以及发生的事件。

    -

    查看详情

    -
  6. -
  7. -

    你还可以查看当前 Pod 最近一段时间的详细日志。 - 此处默认展示 100 行日志,如果要查看更详细的日志活下载日志,请点击顶部的蓝色 可观测性 文字。

    -

    日志

    -
  8. -
  9. -

    当然你还可以通过右上角的 ... ,查看当前 Pod 的 YAML、上传和下载文件。 - 以下是一个 Pod 的 YAML 示例。

    -
  10. -
-
kind: Pod
-apiVersion: v1
-metadata:
-  name: neko-tensorboard-job-test-202404181843-skxivllb-worker-0
-  namespace: default
-  uid: ddedb6ff-c278-47eb-ae1e-0de9b7c62f8c
-  resourceVersion: '41092552'
-  creationTimestamp: '2024-04-18T10:43:36Z'
-  labels:
-    training.kubeflow.org/job-name: neko-tensorboard-job-test-202404181843-skxivllb
-    training.kubeflow.org/operator-name: pytorchjob-controller
-    training.kubeflow.org/replica-index: '0'
-    training.kubeflow.org/replica-type: worker
-  annotations:
-    cni.projectcalico.org/containerID: 0cfbb9af257d5e69027c603c6cb2d3890a17c4ae1a145748d5aef73a10d7fbe1
-    cni.projectcalico.org/podIP: ''
-    cni.projectcalico.org/podIPs: ''
-    hami.io/bind-phase: success
-    hami.io/bind-time: '1713437016'
-    hami.io/vgpu-devices-allocated: GPU-29d5fa0d-935b-2966-aff8-483a174d61d1,NVIDIA,1024,20:;
-    hami.io/vgpu-devices-to-allocate: ;
-    hami.io/vgpu-node: worker-a800-1
-    hami.io/vgpu-time: '1713437016'
-    k8s.v1.cni.cncf.io/network-status: |-
-      [{
-          "name": "kube-system/calico",
-          "ips": [
-              "10.233.97.184"
-          ],
-          "default": true,
-          "dns": {}
-      }]
-    k8s.v1.cni.cncf.io/networks-status: |-
-      [{
-          "name": "kube-system/calico",
-          "ips": [
-              "10.233.97.184"
-          ],
-          "default": true,
-          "dns": {}
-      }]
-  ownerReferences:
-    - apiVersion: kubeflow.org/v1
-      kind: PyTorchJob
-      name: neko-tensorboard-job-test-202404181843-skxivllb
-      uid: e5a8b05d-1f03-4717-8e1c-4ec928014b7b
-      controller: true
-      blockOwnerDeletion: true
-spec:
-  volumes:
-    - name: 0-dataset-pytorch-examples
-      persistentVolumeClaim:
-        claimName: pytorch-examples
-    - name: kube-api-access-wh9rh
-      projected:
-        sources:
-          - serviceAccountToken:
-              expirationSeconds: 3607
-              path: token
-          - configMap:
-              name: kube-root-ca.crt
-              items:
-                - key: ca.crt
-                  path: ca.crt
-          - downwardAPI:
-              items:
-                - path: namespace
-                  fieldRef:
-                    apiVersion: v1
-                    fieldPath: metadata.namespace
-        defaultMode: 420
-  containers:
-    - name: pytorch
-      image: m.daocloud.io/docker.io/pytorch/pytorch
-      command:
-        - bash
-      args:
-        - '-c'
-        - >-
-          ls -la /root && which pip && pip install pytorch_lightning tensorboard
-          && python /root/Git/pytorch/examples/mnist/main.py
-      ports:
-        - name: pytorchjob-port
-          containerPort: 23456
-          protocol: TCP
-      env:
-        - name: PYTHONUNBUFFERED
-          value: '1'
-        - name: PET_NNODES
-          value: '1'
-      resources:
-        limits:
-          cpu: '4'
-          memory: 8Gi
-          nvidia.com/gpucores: '20'
-          nvidia.com/gpumem: '1024'
-          nvidia.com/vgpu: '1'
-        requests:
-          cpu: '4'
-          memory: 8Gi
-          nvidia.com/gpucores: '20'
-          nvidia.com/gpumem: '1024'
-          nvidia.com/vgpu: '1'
-      volumeMounts:
-        - name: 0-dataset-pytorch-examples
-          mountPath: /root/Git/pytorch/examples
-        - name: kube-api-access-wh9rh
-          readOnly: true
-          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
-      terminationMessagePath: /dev/termination-log
-      terminationMessagePolicy: File
-      imagePullPolicy: Always
-  restartPolicy: Never
-  terminationGracePeriodSeconds: 30
-  dnsPolicy: ClusterFirst
-  serviceAccountName: default
-  serviceAccount: default
-  nodeName: worker-a800-1
-  securityContext: {}
-  affinity: {}
-  schedulerName: hami-scheduler
-  tolerations:
-    - key: node.kubernetes.io/not-ready
-      operator: Exists
-      effect: NoExecute
-      tolerationSeconds: 300
-    - key: node.kubernetes.io/unreachable
-      operator: Exists
-      effect: NoExecute
-      tolerationSeconds: 300
-  priorityClassName: baize-high-priority
-  priority: 100000
-  enableServiceLinks: true
-  preemptionPolicy: PreemptLowerPriority
-status:
-  phase: Succeeded
-  conditions:
-    - type: Initialized
-      status: 'True'
-      lastProbeTime: null
-      lastTransitionTime: '2024-04-18T10:43:36Z'
-      reason: PodCompleted
-    - type: Ready
-      status: 'False'
-      lastProbeTime: null
-      lastTransitionTime: '2024-04-18T10:46:34Z'
-      reason: PodCompleted
-    - type: ContainersReady
-      status: 'False'
-      lastProbeTime: null
-      lastTransitionTime: '2024-04-18T10:46:34Z'
-      reason: PodCompleted
-    - type: PodScheduled
-      status: 'True'
-      lastProbeTime: null
-      lastTransitionTime: '2024-04-18T10:43:36Z'
-  hostIP: 10.20.100.211
-  podIP: 10.233.97.184
-  podIPs:
-    - ip: 10.233.97.184
-  startTime: '2024-04-18T10:43:36Z'
-  containerStatuses:
-    - name: pytorch
-      state:
-        terminated:
-          exitCode: 0
-          reason: Completed
-          startedAt: '2024-04-18T10:43:39Z'
-          finishedAt: '2024-04-18T10:46:34Z'
-          containerID: >-
-            containerd://09010214bcf3315e81d38fba50de3943c9d2b48f50a6cc2e83f8ef0e5c6eeec1
-      lastState: {}
-      ready: false
-      restartCount: 0
-      image: m.daocloud.io/docker.io/pytorch/pytorch:latest
-      imageID: >-
-        m.daocloud.io/docker.io/pytorch/pytorch@sha256:11691e035a3651d25a87116b4f6adc113a27a29d8f5a6a583f8569e0ee5ff897
-      containerID: >-
-        containerd://09010214bcf3315e81d38fba50de3943c9d2b48f50a6cc2e83f8ef0e5c6eeec1
-      started: false
-  qosClass: Guaranteed
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/images/1.png b/site/end-user/ghippo/images/1.png deleted file mode 100644 index 39a59ce..0000000 Binary files a/site/end-user/ghippo/images/1.png and /dev/null differ diff --git a/site/end-user/ghippo/images/10.png b/site/end-user/ghippo/images/10.png deleted file mode 100644 index 338b014..0000000 Binary files a/site/end-user/ghippo/images/10.png and /dev/null differ diff --git a/site/end-user/ghippo/images/11.png b/site/end-user/ghippo/images/11.png deleted file mode 100644 index 974a513..0000000 Binary files a/site/end-user/ghippo/images/11.png and /dev/null differ diff --git a/site/end-user/ghippo/images/12.png b/site/end-user/ghippo/images/12.png deleted file mode 100644 index 11dcdf5..0000000 Binary files a/site/end-user/ghippo/images/12.png and /dev/null differ diff --git a/site/end-user/ghippo/images/13.png b/site/end-user/ghippo/images/13.png deleted file mode 100644 index 7224083..0000000 Binary files a/site/end-user/ghippo/images/13.png and /dev/null differ diff --git a/site/end-user/ghippo/images/14.png b/site/end-user/ghippo/images/14.png deleted file mode 100644 index ce16822..0000000 Binary files a/site/end-user/ghippo/images/14.png and /dev/null differ diff --git a/site/end-user/ghippo/images/2.png b/site/end-user/ghippo/images/2.png deleted file mode 100644 index 947221b..0000000 Binary files a/site/end-user/ghippo/images/2.png and /dev/null differ diff --git a/site/end-user/ghippo/images/3.png b/site/end-user/ghippo/images/3.png deleted file mode 100644 index 002d4a2..0000000 Binary files a/site/end-user/ghippo/images/3.png and /dev/null differ diff --git a/site/end-user/ghippo/images/4.png b/site/end-user/ghippo/images/4.png deleted file mode 100644 index d1d95f4..0000000 Binary files a/site/end-user/ghippo/images/4.png and /dev/null differ diff --git a/site/end-user/ghippo/images/5.png b/site/end-user/ghippo/images/5.png deleted file mode 100644 index b9e64dc..0000000 Binary files a/site/end-user/ghippo/images/5.png and /dev/null differ diff --git a/site/end-user/ghippo/images/6.png b/site/end-user/ghippo/images/6.png deleted file mode 100644 index 29c39fa..0000000 Binary files a/site/end-user/ghippo/images/6.png and /dev/null differ diff --git a/site/end-user/ghippo/images/7.png b/site/end-user/ghippo/images/7.png deleted file mode 100644 index 2935252..0000000 Binary files a/site/end-user/ghippo/images/7.png and /dev/null differ diff --git a/site/end-user/ghippo/images/8.png b/site/end-user/ghippo/images/8.png deleted file mode 100644 index 82a3839..0000000 Binary files a/site/end-user/ghippo/images/8.png and /dev/null differ diff --git a/site/end-user/ghippo/images/9.png b/site/end-user/ghippo/images/9.png deleted file mode 100644 index b87c349..0000000 Binary files a/site/end-user/ghippo/images/9.png and /dev/null differ diff --git a/site/end-user/ghippo/images/about05.png b/site/end-user/ghippo/images/about05.png deleted file mode 100644 index abb5865..0000000 Binary files a/site/end-user/ghippo/images/about05.png and /dev/null differ diff --git a/site/end-user/ghippo/images/access.png b/site/end-user/ghippo/images/access.png deleted file mode 100644 index 990f48f..0000000 Binary files a/site/end-user/ghippo/images/access.png and /dev/null differ diff --git a/site/end-user/ghippo/images/beian.png b/site/end-user/ghippo/images/beian.png deleted file mode 100644 index c0b882c..0000000 Binary files a/site/end-user/ghippo/images/beian.png and /dev/null differ diff --git a/site/end-user/ghippo/images/gmagpiereport.png b/site/end-user/ghippo/images/gmagpiereport.png deleted file mode 100644 index 0d2e271..0000000 Binary files a/site/end-user/ghippo/images/gmagpiereport.png and /dev/null differ diff --git a/site/end-user/ghippo/images/ldap00.png b/site/end-user/ghippo/images/ldap00.png deleted file mode 100644 index c70395e..0000000 Binary files a/site/end-user/ghippo/images/ldap00.png and /dev/null differ diff --git a/site/end-user/ghippo/images/ldap01.png b/site/end-user/ghippo/images/ldap01.png deleted file mode 100644 index 4a3d198..0000000 Binary files a/site/end-user/ghippo/images/ldap01.png and /dev/null differ diff --git a/site/end-user/ghippo/images/logindesign.png b/site/end-user/ghippo/images/logindesign.png deleted file mode 100644 index c5ee0f0..0000000 Binary files a/site/end-user/ghippo/images/logindesign.png and /dev/null differ diff --git a/site/end-user/ghippo/images/menu1.png b/site/end-user/ghippo/images/menu1.png deleted file mode 100644 index 87fb42d..0000000 Binary files a/site/end-user/ghippo/images/menu1.png and /dev/null differ diff --git a/site/end-user/ghippo/images/menu2.png b/site/end-user/ghippo/images/menu2.png deleted file mode 100644 index 6f8ebd4..0000000 Binary files a/site/end-user/ghippo/images/menu2.png and /dev/null differ diff --git a/site/end-user/ghippo/images/menu3.png b/site/end-user/ghippo/images/menu3.png deleted file mode 100644 index 043fe92..0000000 Binary files a/site/end-user/ghippo/images/menu3.png and /dev/null differ diff --git a/site/end-user/ghippo/images/menu4.png b/site/end-user/ghippo/images/menu4.png deleted file mode 100644 index 4e4a9a3..0000000 Binary files a/site/end-user/ghippo/images/menu4.png and /dev/null differ diff --git a/site/end-user/ghippo/images/mybusiness.png b/site/end-user/ghippo/images/mybusiness.png deleted file mode 100644 index ff2cfd3..0000000 Binary files a/site/end-user/ghippo/images/mybusiness.png and /dev/null differ diff --git a/site/end-user/ghippo/images/note.svg b/site/end-user/ghippo/images/note.svg deleted file mode 100644 index 5e473ae..0000000 --- a/site/end-user/ghippo/images/note.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - Icon/16/Prompt备份@0.5x - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/images/oauth2.png b/site/end-user/ghippo/images/oauth2.png deleted file mode 100644 index 916499d..0000000 Binary files a/site/end-user/ghippo/images/oauth2.png and /dev/null differ diff --git a/site/end-user/ghippo/images/oidc-button.png b/site/end-user/ghippo/images/oidc-button.png deleted file mode 100644 index a45f90e..0000000 Binary files a/site/end-user/ghippo/images/oidc-button.png and /dev/null differ diff --git a/site/end-user/ghippo/images/oidc02.png b/site/end-user/ghippo/images/oidc02.png deleted file mode 100644 index 8be9dff..0000000 Binary files a/site/end-user/ghippo/images/oidc02.png and /dev/null differ diff --git a/site/end-user/ghippo/images/password01zh.png b/site/end-user/ghippo/images/password01zh.png deleted file mode 100644 index 696dd14..0000000 Binary files a/site/end-user/ghippo/images/password01zh.png and /dev/null differ diff --git a/site/end-user/ghippo/images/password02zh.png b/site/end-user/ghippo/images/password02zh.png deleted file mode 100644 index 887ea43..0000000 Binary files a/site/end-user/ghippo/images/password02zh.png and /dev/null differ diff --git a/site/end-user/ghippo/images/password03zh-en.png b/site/end-user/ghippo/images/password03zh-en.png deleted file mode 100644 index 96ebb54..0000000 Binary files a/site/end-user/ghippo/images/password03zh-en.png and /dev/null differ diff --git a/site/end-user/ghippo/images/password04zh.png b/site/end-user/ghippo/images/password04zh.png deleted file mode 100644 index 5d3b380..0000000 Binary files a/site/end-user/ghippo/images/password04zh.png and /dev/null differ diff --git a/site/end-user/ghippo/images/password05zh.png b/site/end-user/ghippo/images/password05zh.png deleted file mode 100644 index a9acea4..0000000 Binary files a/site/end-user/ghippo/images/password05zh.png and /dev/null differ diff --git a/site/end-user/ghippo/images/report01.png b/site/end-user/ghippo/images/report01.png deleted file mode 100644 index b0a1cf1..0000000 Binary files a/site/end-user/ghippo/images/report01.png and /dev/null differ diff --git a/site/end-user/ghippo/images/security-policy.png b/site/end-user/ghippo/images/security-policy.png deleted file mode 100644 index 375eb0e..0000000 Binary files a/site/end-user/ghippo/images/security-policy.png and /dev/null differ diff --git a/site/end-user/ghippo/images/selfapplication.png b/site/end-user/ghippo/images/selfapplication.png deleted file mode 100644 index 62cb8ee..0000000 Binary files a/site/end-user/ghippo/images/selfapplication.png and /dev/null differ diff --git a/site/end-user/ghippo/images/sso2.png b/site/end-user/ghippo/images/sso2.png deleted file mode 100644 index ff81e45..0000000 Binary files a/site/end-user/ghippo/images/sso2.png and /dev/null differ diff --git a/site/end-user/ghippo/images/system-message1.png b/site/end-user/ghippo/images/system-message1.png deleted file mode 100644 index 7e1b4b3..0000000 Binary files a/site/end-user/ghippo/images/system-message1.png and /dev/null differ diff --git a/site/end-user/ghippo/images/system-message2.png b/site/end-user/ghippo/images/system-message2.png deleted file mode 100644 index 3a363e4..0000000 Binary files a/site/end-user/ghippo/images/system-message2.png and /dev/null differ diff --git a/site/end-user/ghippo/images/system-message3.png b/site/end-user/ghippo/images/system-message3.png deleted file mode 100644 index 146c506..0000000 Binary files a/site/end-user/ghippo/images/system-message3.png and /dev/null differ diff --git a/site/end-user/ghippo/images/system-message4.png b/site/end-user/ghippo/images/system-message4.png deleted file mode 100644 index 7a0126e..0000000 Binary files a/site/end-user/ghippo/images/system-message4.png and /dev/null differ diff --git a/site/end-user/ghippo/images/ws01.png b/site/end-user/ghippo/images/ws01.png deleted file mode 100644 index 8691d56..0000000 Binary files a/site/end-user/ghippo/images/ws01.png and /dev/null differ diff --git a/site/end-user/ghippo/images/wsbind1.png b/site/end-user/ghippo/images/wsbind1.png deleted file mode 100644 index de5ddb5..0000000 Binary files a/site/end-user/ghippo/images/wsbind1.png and /dev/null differ diff --git a/site/end-user/ghippo/images/wsbind2.png b/site/end-user/ghippo/images/wsbind2.png deleted file mode 100644 index 26fe126..0000000 Binary files a/site/end-user/ghippo/images/wsbind2.png and /dev/null differ diff --git a/site/end-user/ghippo/images/wsbind3.png b/site/end-user/ghippo/images/wsbind3.png deleted file mode 100644 index 3f78166..0000000 Binary files a/site/end-user/ghippo/images/wsbind3.png and /dev/null differ diff --git a/site/end-user/ghippo/images/wsbind4.png b/site/end-user/ghippo/images/wsbind4.png deleted file mode 100644 index 591d786..0000000 Binary files a/site/end-user/ghippo/images/wsbind4.png and /dev/null differ diff --git a/site/end-user/ghippo/images/wsbind5.png b/site/end-user/ghippo/images/wsbind5.png deleted file mode 100644 index 6b0f556..0000000 Binary files a/site/end-user/ghippo/images/wsbind5.png and /dev/null differ diff --git a/site/end-user/ghippo/personal-center/accesstoken.html b/site/end-user/ghippo/personal-center/accesstoken.html deleted file mode 100644 index b60381a..0000000 --- a/site/end-user/ghippo/personal-center/accesstoken.html +++ /dev/null @@ -1,577 +0,0 @@ - - - - - - - - - - - - - - -访问密钥 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

访问密钥

-

访问密钥(Access Key)可用于访问开放 API 和持续发布,用户可在个人中心参照以下步骤获取密钥并访问 API。

-

获取密钥

-

登录 AI 算力平台,在右上角的下拉菜单中找到 个人中心 ,可以在 访问密钥 页面管理账号的访问密钥。

-

ak list

-

created a key

-
-

Info

-

访问密钥信息仅显示一次。如果您忘记了访问密钥信息,您需要重新创建新的访问密钥。

-
-

使用密钥访问 API

-

在访问算丰 AI 算力平台openAPI 时,在请求中加上请求头 Authorization:Bearer ${token} 以标识访问者的身份, -其中 ${token} 是上一步中获取到的密钥,具体接口信息参见 OpenAPI 接口文档

-

请求示例

-
curl -X GET -H 'Authorization:Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkRKVjlBTHRBLXZ4MmtQUC1TQnVGS0dCSWc1cnBfdkxiQVVqM2U3RVByWnMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NjE0MTU5NjksImlhdCI6MTY2MDgxMTE2OSwiaXNzIjoiZ2hpcHBvLmlvIiwic3ViIjoiZjdjOGIxZjUtMTc2MS00NjYwLTg2MWQtOWI3MmI0MzJmNGViIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4iLCJncm91cHMiOltdfQ.RsUcrAYkQQ7C6BxMOrdD3qbBRUt0VVxynIGeq4wyIgye6R8Ma4cjxG5CbU1WyiHKpvIKJDJbeFQHro2euQyVde3ygA672ozkwLTnx3Tu-_mB1BubvWCBsDdUjIhCQfT39rk6EQozMjb-1X1sbLwzkfzKMls-oxkjagI_RFrYlTVPwT3Oaw-qOyulRSw7Dxd7jb0vINPq84vmlQIsI3UuTZSNO5BCgHpubcWwBss-Aon_DmYA-Et_-QtmPBA3k8E2hzDSzc7eqK0I68P25r9rwQ3DeKwD1dbRyndqWORRnz8TLEXSiCFXdZT2oiMrcJtO188Ph4eLGut1-4PzKhwgrQ' https://demo-dev.daocloud.io/apis/ghippo.io/v1alpha1/users?page=1&pageSize=10 -k
-
-

请求结果

-
{
-    "items": [
-        {
-            "id": "a7cfd010-ebbe-4601-987f-d098d9ef766e",
-            "name": "a",
-            "email": "",
-            "description": "",
-            "firstname": "",
-            "lastname": "",
-            "source": "locale",
-            "enabled": true,
-            "createdAt": "1660632794800",
-            "updatedAt": "0",
-            "lastLoginAt": ""
-        }
-    ],
-    "pagination": {
-        "page": 1,
-        "pageSize": 10,
-        "total": 1
-    }
-}
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/personal-center/language.html b/site/end-user/ghippo/personal-center/language.html deleted file mode 100644 index 5b3cf67..0000000 --- a/site/end-user/ghippo/personal-center/language.html +++ /dev/null @@ -1,513 +0,0 @@ - - - - - - - - - - - - - - -语言设置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

语言设置

-

本节说明如何设置界面语言。目前支持中文、English 两个语言。

-

语言设置是平台提供多语言服务的入口,平台默认显示为中文,用户可根据需要选择英语或自动检测浏览器语言首选项的方式来切换平台语言。 -每个用户的多语言服务是相互独立的,切换后不会影响其他用户。

-

平台提供三种切换语言方式:中文、英语-English、自动检测您的浏览器语言首选项。

-

操作步骤如下。

-
    -
  1. -

    使用您的用户名/密码登录 AI 算力平台。点击左侧导航栏底部的 全局管理

    -

    全局管理

    -
  2. -
  3. -

    点击右上角的用户名位置,选择 个人中心

    -

    个人中心

    -
  4. -
  5. -

    点击 语言设置 页签。

    -

    语言设置

    -
  6. -
  7. -

    切换语言选项。

    -

    切换语言

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/personal-center/security-setting.html b/site/end-user/ghippo/personal-center/security-setting.html deleted file mode 100644 index 5f6b7b1..0000000 --- a/site/end-user/ghippo/personal-center/security-setting.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - - - - - - - - - - -安全设置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

安全设置

-

功能说明:用于填写邮箱地址和修改登录密码。

-
    -
  • 邮箱:当管理员配置邮箱服务器地址之后,用户能够通过登录页的忘记密码按钮,填写该处的邮箱地址以找回密码。
  • -
  • 密码:用于登录平台的密码,建议定期修改密码。
  • -
-

具体操作步骤如下:

-
    -
  1. -

    点击右上角的用户名位置,选择 个人中心

    -

    个人中心

    -
  2. -
  3. -

    点击 安全设置 页签。填写您的邮箱地址或修改登录密码。

    -

    安全设置

    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/personal-center/ssh-key.html b/site/end-user/ghippo/personal-center/ssh-key.html deleted file mode 100644 index d0fe89e..0000000 --- a/site/end-user/ghippo/personal-center/ssh-key.html +++ /dev/null @@ -1,666 +0,0 @@ - - - - - - - - - - - - - - -SSH 公钥 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

配置 SSH 公钥

-

本文说明如何配置 SSH 公钥。

-

步骤 1:查看已存在的 SSH 密钥

-

在生成新的 SSH 密钥前,请先确认是否需要使用本地已生成的 SSH 密钥,SSH 密钥对一般存放在本地用户的根目录下。 -Linux、Mac 请直接使用以下命令查看已存在的公钥,Windows 用户在 WSL(需要 Windows 10 或以上)或 Git Bash 下使用以下命令查看已生成的公钥。

-
    -
  • -

    ED25519 算法:

    -
    cat ~/.ssh/id_ed25519.pub
    -
    -
  • -
  • -

    RSA 算法:

    -
    cat ~/.ssh/id_rsa.pub
    -
    -
  • -
-

如果返回一长串以 ssh-ed25519 或 ssh-rsa 开头的字符串,说明已存在本地公钥, -您可以跳过步骤 2 生成 SSH 密钥,直接操作步骤 3

-

步骤 2:生成 SSH 密钥

-

步骤 1 未返回指定的内容字符串,表示本地暂无可用 SSH 密钥,需要生成新的 SSH 密钥,请按如下步骤操作:

-
    -
  1. -

    访问终端(Windows 请使用 WSLGit Bash), - 运行 ssh-keygen -t

    -
  2. -
  3. -

    输入密钥算法类型和可选的注释。

    -

    注释会出现在 .pub 文件中,一般可使用邮箱作为注释内容。

    -
      -
    • -

      基于 ED25519 算法,生成密钥对命令如下:

      -
      ssh-keygen -t ed25519 -C "<注释内容>"
      -
      -
    • -
    • -

      基于 RSA 算法,生成密钥对命令如下:

      -
      ssh-keygen -t rsa -C "<注释内容>"
      -
      -
    • -
    -
  4. -
  5. -

    点击回车,选择 SSH 密钥生成路径。

    -

    以 ED25519 算法为例,默认路径如下:

    -
    Generating public/private ed25519 key pair.
    -Enter file in which to save the key (/home/user/.ssh/id_ed25519):
    -
    -

    密钥默认生成路径:/home/user/.ssh/id_ed25519,公钥与之对应为:/home/user/.ssh/id_ed25519.pub

    -
  6. -
  7. -

    设置一个密钥口令。

    -
    Enter passphrase (empty for no passphrase):
    -Enter same passphrase again:
    -
    -

    口令默认为空,您可以选择使用口令保护私钥文件。 -如果您不想在每次使用 SSH 协议访问仓库时,都要输入用于保护私钥文件的口令,可以在创建密钥时,输入空口令。

    -
  8. -
  9. -

    点击回车,完成密钥对创建。

    -
  10. -
-

步骤 3:拷贝公钥

-

除了在命令行打印出已生成的公钥信息手动复制外,可以使用命令拷贝公钥到粘贴板下,请参考操作系统使用以下命令进行拷贝。

-
    -
  • -

    Windows(在 WSLGit Bash 下):

    -
    cat ~/.ssh/id_ed25519.pub | clip
    -
    -
  • -
  • -

    Mac:

    -
    tr -d '\n'< ~/.ssh/id_ed25519.pub | pbcopy
    -
    -
  • -
  • -

    GNU/Linux (requires xclip):

    -
    xclip -sel clip < ~/.ssh/id_ed25519.pub
    -
    -
  • -
-

步骤 4:在算丰 AI 算力平台上设置公钥

-
    -
  1. -

    登录算丰 AI 算力平台UI 页面,在页面右上角选择 个人中心 -> SSH 公钥

    -
  2. -
  3. -

    添加生成的 SSH 公钥信息。

    -
      -
    1. -

      SSH 公钥内容。

      -
    2. -
    3. -

      公钥标题:支持自定义公钥名称,用于区分管理。

      -
    4. -
    5. -

      过期时间:设置公钥过期时间,到期后公钥将自动失效,不可使用;如果不设置,则永久有效。

      -
    6. -
    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/folder-permission.html b/site/end-user/ghippo/workspace/folder-permission.html deleted file mode 100644 index a43665a..0000000 --- a/site/end-user/ghippo/workspace/folder-permission.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - - - - - - - -文件夹权限说明 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

文件夹权限说明

-

文件夹具有权限映射能力,能够将用户/用户组在本文件夹的权限映射到其下的子文件夹、工作空间以及资源上。

-

若用户/用户组在本文件夹是 Folder Admin 角色,映射到子文件夹仍为 Folder Admin 角色,映射到其下的工作空间则为 Workspace Admin; -若在 工作空间与层级 -> 资源组 中绑定了 Namespace,则映射后该用户/用户组同时还是 Namespace Admin。

-
-

Note

-

文件夹的权限映射能力不会作用到共享资源上,因为共享是将集群的使用权限共享给多个工作空间,而不是将管理权限受让给工作空间,因此不会实现权限继承和角色映射。

-
-

应用场景

-

文件夹具有层级能力,因此将文件夹对应于企业中的部门/供应商/项目等层级时,

-
    -
  • 若用户/用户组在一级部门具有管理权限(Admin),其下的二级、三级、四级部门或项目同样具有管理权限;
  • -
  • 若用户/用户组在一级部门具有使用权限(Editor),其下的二级、三级、四级部门或项目同样具有使用权限;
  • -
  • 若用户/用户组在一级部门具有只读权限(Viewer),其下的二级、三级、四级部门或项目同样具有只读权限。
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
对象操作Folder AdminFolder EditorFolder Viewer
对文件夹本身查看
授权
修改别名
对子文件夹创建
查看
授权
修改别名
对其下的工作空间创建
查看
授权
修改别名
对其下的工作空间 - 资源组查看
资源绑定
解除绑定
对其下的工作空间 - 共享资源查看
新增共享
解除共享
资源限额
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/folders.html b/site/end-user/ghippo/workspace/folders.html deleted file mode 100644 index 7e9421b..0000000 --- a/site/end-user/ghippo/workspace/folders.html +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - - - - - - -创建/删除文件夹 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

创建/删除文件夹

-

文件夹具有权限映射能力,能够将用户/用户组在本文件夹的权限映射到其下的子文件夹、工作空间以及资源上。

-

参照以下步骤创建一个文件夹。

-
    -
  1. -

    使用 admin/folder admin 角色的用户登录 AI 算力平台,点击左侧导航栏底部的 全局管理 -> 工作空间与层级

    -

    全局管理

    -
  2. -
  3. -

    点击右上角的 创建文件夹 按钮。

    -

    创建文件夹

    -
  4. -
  5. -

    填写文件夹名称、上一级文件夹等信息后,点击 确定 ,完成创建文件夹。

    -

    确定

    -
  6. -
-
-

Tip

-

创建成功后文件夹名称将显示在左侧的树状结构中,以不同的图标表示工作空间和文件夹。

-

工作空间和文件夹

-
-
-

Note

-

选中某一个文件夹或文件夹,点击右侧的 可以进行编辑或删除。

-
    -
  • -

    当该文件夹下资源组、共享资源中存在资源时,该文件夹无法被删除,需要将所有资源解绑后再删除。

    -
  • -
  • -

    当微服务引擎模块在该文件夹下存在接入注册中心资源时,该文件夹无法被删除,需要将所有接入注册中心移除后再删除文件夹。

    -
  • -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/quota.html b/site/end-user/ghippo/workspace/quota.html deleted file mode 100644 index 5994593..0000000 --- a/site/end-user/ghippo/workspace/quota.html +++ /dev/null @@ -1,711 +0,0 @@ - - - - - - - - - - - - - - -资源配额 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

资源配额(Quota)

-

共享资源并非意味着被共享者可以无限制地使用被共享的资源。 -Admin、Kpanda Owner 和 Workspace Admin 可以通过共享资源中的 资源配额 功能限制某个用户的最大使用额度。 -若不限制,则表示可以无限制使用。

-
    -
  • CPU 请求(Core)
  • -
  • CPU 限制(Core)
  • -
  • 内存请求(MB)
  • -
  • 内存限制(MB)
  • -
  • 存储请求总量(GB)
  • -
  • 存储卷声明(个)
  • -
  • GPU 类型、规格、数量(包括但不限于 Nvidia、Ascend、lluvatar等GPU卡类型)
  • -
-

一个资源(集群)可以被多个工作空间共享,一个工作空间也可以同时使用多个共享集群中的资源。

-

资源组和共享资源

-

共享资源和资源组中的集群资源均来自容器管理,但是集群绑定和共享给同一个工作空间将会产生两种截然不同的效果。

-
    -
  1. -

    绑定资源

    -

    使工作空间中的用户/用户组具有该集群的全部管理和使用权限,Workspace Admin 将被映射为 Cluster Admin。 -Workspace Admin 能够进入容器管理模块管理该集群。

    -

    资源组

    -
    -

    Note

    -

    当前容器管理模块暂无 Cluster Editor 和 Cluster Viewer 角色,因此 Workspace Editor、Workspace Viewer 还无法映射。

    -
    -
  2. -
  3. -

    新增共享资源

    -

    使工作空间中的用户/用户组具有该集群资源的使用权限,这些资源可以在创建命名空间(Namespace)时使用。

    -

    共享资源

    -

    与资源组不同,将集群共享到工作空间时,用户在工作空间的角色不会映射到资源上,因此 Workspace Admin 不会被映射为 Cluster admin。

    -
  4. -
-

本节展示 3 个与资源配额有关的场景。

-

创建命名空间

-

创建命名空间时会涉及到资源配额。

-
    -
  1. -

    在工作空间 ws01 新增一个共享集群。

    -

    新增共享集群

    -
  2. -
  3. -

    在应用工作台选择工作空间 ws01 和共享集群,创建命名空间 ns01。

    -

    创建命名空间

    -
      -
    • 若在共享集群中未设置资源配额,则创建命名空间时可不设置资源配额。
    • -
    • 若在共享集群中已设置资源配额(例如 CPU 请求 = 100 core),则创建命名空间时 CPU 请求 ≤ 100 core
    • -
    -
  4. -
-

命名空间绑定到工作空间

-

前提:工作空间 ws01 已新增共享集群,操作者为 Workspace Admin + Kpanda Owner 或 Admin 角色。

-

以下两种绑定方式的效果相同。

-
    -
  • -

    在容器管理中将创建的命名空间 ns01 绑定到 ws01

    -

    绑定到工作空间

    -
      -
    • 若在共享集群未设置资源配额,则命名空间 ns01 无论是否已设置资源配额,均可成功绑定。
    • -
    • 若在共享集群已设置资源配额 CPU 请求 = 100 core ,则命名空间 ns01 必须满足 CPU 请求 ≤ 100 core 才能绑定成功。
    • -
    -
  • -
  • -

    在全局管理中,将命名空间 ns01 绑定到 ws01

    -

    绑定到工作空间

    -
      -
    • 若在共享集群未设置资源配额,则命名空间 ns01 无论是否已设置资源配额,均可成功绑定。
    • -
    • 若在共享集群已设置资源配额 CPU 请求 = 100 core ,则命名空间 ns01 必须满足 CPU 请求 ≤ 100 core 才能绑定成功。
    • -
    -
  • -
-

从工作空间解绑命名空间

-

以下两种解绑方式的效果相同。

-
    -
  • -

    在容器管理中将命名空间 ns01 从工作空间 ws01 解绑

    -

    绑定到工作空间

    -
      -
    • 若在共享集群中未设置资源配额,则命名空间 ns01 无论是否已设置资源配额,解绑后均不会对资源配额产生影响。
    • -
    • 若在共享集群已设置资源配额 CPU 请求 = 100 core ,命名空间 ns01 也设置了资源配额,则解绑后将释放相应的资源额度。
    • -
    -
  • -
  • -

    在全局管理中将命名空间 ns01 从工作空间 ws01 解绑

    -

    绑定到工作空间

    -
      -
    • 若在共享集群未设置资源配额,则命名空间 ns01 无论是否已设置资源配额,解绑后均不会对资源配额产生影响。
    • -
    • 若在共享集群已设置资源配额 CPU 请求 = 100 core ,命名空间 ns01 也设置了资源配额,则解绑后将释放相应的资源额度。
    • -
    -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/res-gp-and-shared-res.html b/site/end-user/ghippo/workspace/res-gp-and-shared-res.html deleted file mode 100644 index ed0c3cb..0000000 --- a/site/end-user/ghippo/workspace/res-gp-and-shared-res.html +++ /dev/null @@ -1,644 +0,0 @@ - - - - - - - - - - - - - - -资源组与共享资源的区别 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

资源组与共享资源的区别

-

资源组与共享资源均支持绑定集群,但使用上存在很大区别。

-

使用场景区别

-
    -
  • 资源组绑定集群:资源组绑定集群通常被用来批量授权。资源组绑定集群后, - 工作空间管理员将被映射为集群管理员,能够管理并使用集群资源。
  • -
  • 共享资源绑定集群:资源共享绑定集群通常被用来做资源限额。 - 典型的场景是平台管理员将集群分配给一级供应商后,再由一级供应商分配给二级供应商并对二级供应商进行资源限额。
  • -
-

diff

-

说明:在该场景中,需要平台管理员对二级供应商进行资源限制,暂时还不支持一级供应商限制二级供应商的集群额度。

-

集群额度的使用区别

-
    -
  • 资源组绑定集群:工作空间的管理员将被映射为该集群的管理员,相当于在容器管理-权限管理中被授予 Cluster Admin 角色, - 能够无限制支配该集群资源,管理节点等重要内容,且资源组不能够被资源限额。
  • -
  • 共享资源绑定资源:工作空间管理员仅能够使用集群中的额度在应用工作台创建命名空间,不具备集群的管理权限。 - 若对该工作空间限制额度,则工作空间管理仅能够在额度范围内创建并使用命名空间。
  • -
-

资源类型的区别

-
    -
  • 资源组:能够绑定集群、集群-命名空间、多云、多云-命名空间、网格、网格-命名空间
  • -
  • 共享资源:仅能够绑定集群
  • -
-

资源组与共享资源的相同点

-

在资源组/共享资源绑定集群后都可以前往应用工作台创建命名空间,创建后命名空间将自动绑定到工作空间。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/workspace.html b/site/end-user/ghippo/workspace/workspace.html deleted file mode 100644 index 86b25ae..0000000 --- a/site/end-user/ghippo/workspace/workspace.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - - - - - - - - - -创建/删除工作空间 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

创建/删除工作空间

-

工作空间是一种资源范畴,代表一种资源层级关系。 -工作空间可以包含集群、命名空间、注册中心等资源。 -通常一个工作空间对应一个项目,可以为每个工作空间分配不同的资源,指派不同的用户和用户组。

-

参照以下步骤创建一个工作空间。

-
    -
  1. -

    使用 admin/folder admin 角色的用户登录 AI 算力平台,点击左侧导航栏底部的 全局管理 -> 工作空间与层级

    -

    全局管理

    -
  2. -
  3. -

    点击右上角的 创建工作空间 按钮。

    -

    创建工作空间

    -
  4. -
  5. -

    填写工作空间名称、所属文件夹等信息后,点击 确定 ,完成创建工作空间。

    -

    确定

    -
  6. -
-
-

Tip

-

创建成功后工作空间名称将显示在左侧的树状结构中,以不同的图标表示文件夹和工作空间。

-

文件夹与工作空间

-
-
-

Note

-

选中某一个工作空间或文件夹,点击右侧的 ... 可以进行编辑或删除。

-
    -
  • 当该工作空间下资源组、共享资源中存在资源时,该工作空间无法被删除,需要将所有资源解绑后再删除。
  • -
  • 当微服务引擎模块在该工作空间下存在接入注册中心资源时,该工作空间无法被删除,需要将所有接入注册中心移除后再删除工作空间。
  • -
  • 当镜像仓库模块在该工作空间下存在镜像空间或集成仓库时,该工作空间无法被删除,需要将镜像空间解绑,将仓库集成删除后再删除工作空间。
  • -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/ws-folder.html b/site/end-user/ghippo/workspace/ws-folder.html deleted file mode 100644 index 3319761..0000000 --- a/site/end-user/ghippo/workspace/ws-folder.html +++ /dev/null @@ -1,646 +0,0 @@ - - - - - - - - - - - - - - -工作空间与层级 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

工作空间与层级

-

工作空间与层级 是一个具有层级的资源隔离和资源分组特性,主要解决资源统一授权、资源分组以及资源限额问题。

-

层级结构

-

工作空间与层级 有两个概念:工作空间和文件夹。

-

工作空间

-

工作空间可通过 授权资源组共享资源 来管理资源,使用户(用户组)之间能够共享工作空间中的资源。

-

工作空间

-
    -
  • -

    资源

    -

    资源处于资源管理模块层级结构的最低层级,资源包括 Cluster、Namespace、Pipeline、网关等。 -所有这些资源的父级只能是工作空间,而工作空间作为资源容器是一种资源分组单位。

    -
  • -
  • -

    工作空间

    -

    工作空间通常代指一个项目或环境,每个工作空间的资源相对于其他工作空间中的资源时逻辑隔离的。 -您可以通过工作空间中的授权,授予用户(用户组)同一组资源的不同访问权限。

    -

    从层次结构的底层算起,工作空间位于第一层,且包含资源。 -除共享资源外,所有资源有且仅有一个父项。所有工作空间也有且仅有一个父级文件夹。

    -

    资源通过工作空间进行分组,而工作空间中存在两种分组模式,分别是 资源组共享资源

    -
  • -
  • -

    资源组

    -

    一个资源只能加入一个资源组,资源组与工作空间一一对应。 -资源被加入到资源组后,Workspace Admin 将获得资源的管理权限,相当于该资源的所有者。

    -
  • -
  • -

    共享资源

    -

    而对于共享资源来说,多个工作空间可以共享同一个或者多个资源。 -资源的所有者,可以选择将自己拥有的资源共享给工作空间使用,一般共享时资源所有者会限制被共享工作空间能够使用的资源额度。 -资源被共享后,Workspace Admin 仅具有资源限额下的资源使用权限,无法管理资源或者调整工作空间能够使用的资源量。

    -

    同时共享资源对于资源本身也具有一定的要求,只有 Cluster(集群)资源可以被共享。 -Cluster Admin 能够将 Cluster 资源分享给不同的工作空间使用,并且限制工作空间在此 Cluster 上的使用额度。

    -

    Workspace Admin 在资源限额内能够创建多个 Namespace,但是 Namespace 的资源额度总和不能超过 Cluster 在该工作空间的资源限额。 -对于 Kubernetes 资源,当前能够分享的资源类型仅有 Cluster。

    -
  • -
-

文件夹

-

文件夹可用于构建企业业务层级关系。

-
    -
  • -

    文件夹是在工作空间基础之上的进一步分组机制,具有层级结构。 - 一个文件夹可以包含工作空间、其他文件夹或两者的组合,能够形成树状的组织关系。

    -
  • -
  • -

    借助文件夹您可以映射企业业务层级关系,按照部门对工作空间进行分组。 - 文件夹不直接与资源挂钩,而是通过工作空间间接实现资源分组。

    -
  • -
  • -

    文件夹有且仅有一个父级文件夹,而根文件夹是层次结构的最高层级。 - 根文件夹没有父级,文件夹和工作空间均挂靠到根文件夹下。

    -
  • -
-

另外,用户(用户组)在文件夹中能够通过层级结构继承来自父项的权限。 -用户在层次结构中的权限来自当前层级的权限以及继承其父项权限的组合结果,权限之间是加合关系不存在互斥。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/ws-permission.html b/site/end-user/ghippo/workspace/ws-permission.html deleted file mode 100644 index 434df11..0000000 --- a/site/end-user/ghippo/workspace/ws-permission.html +++ /dev/null @@ -1,536 +0,0 @@ - - - - - - - - - - - - -工作空间权限说明 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

工作空间权限说明

-

工作空间具有权限映射和资源隔离能力,能够将用户/用户组在工作空间的权限映射到其下的资源上。 -若用户/用户组在工作空间是 Workspace Admin 角色,同时工作空间-资源组中绑定了资源 Namespace,则映射后该用户/用户组将成为 Namespace Admin。

-
-

Note

-

工作空间的权限映射能力不会作用到共享资源上,因为共享是将集群的使用权限共享给多个工作空间,而不是将管理权限受让给工作空间,因此不会实现权限继承和角色映射。

-
-

应用场景

-

通过将资源绑定到不同的工作空间能够实现资源隔离。 -因此借助权限映射、资源隔离和共享资源能力能够将资源灵活分配给各个工作空间(租户)。

-

通常适用于以下两个场景:

-
    -
  • -

    集群一对一

    - - - - - - - - - - - - - - - - - - - - -
    普通集群部门/租户(工作空间)用途
    集群 01A管理和使用
    集群 02B管理和使用
    -
  • -
  • -

    集群一对多

    - - - - - - - - - - - - - - - - - - - - -
    集群部门/租户(工作空间)资源限额
    集群 01A100 核 CPU
    B50 核 CPU
    -
  • -
-

权限说明

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
操作对象操作Workspace AdminWorkspace EditorWorkspace Viewer
本身查看
-授权
-修改别名
资源组查看
-资源绑定
-解除绑定
共享资源查看
-新增共享
-解除共享
-资源限额
-使用共享资源 1
-
-
-
    -
  1. -

    授权用户可前往应用工作台、微服务引擎、中间件、多云编排、服务网格等模块使用工作空间中的资源。 -有关 Workspace Admin、Workspace Editor、Workspace Viewer 角色在各产品模块的操作范围,请查阅各模块的权限说明:

    - -

    -
  2. -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/ghippo/workspace/wsbind-permission.html b/site/end-user/ghippo/workspace/wsbind-permission.html deleted file mode 100644 index d5fd6f2..0000000 --- a/site/end-user/ghippo/workspace/wsbind-permission.html +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - - - - - - - - - -资源绑定权限说明 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

资源绑定权限说明

-

假如用户小明(“小明”代表任何有资源绑定需求的用户)已经具备了 -Workspace Admin 角色或已通过自定义角色授权, -同时自定义角色中包含工作空间的“资源绑定”权限,希望将某个集群或者某个命名空间绑定到其所在的工作空间中。

-

要将集群/命名空间资源绑定到工作空间,不仅需要该工作空间的“资源绑定”权限,还需要 -Cluster Admin 的资源权限。

-

给小明授权

-
    -
  1. -

    使用平台 Admin 角色, - 在 工作空间 -> 授权 页面给小明授予 Workspace Admin 角色。

    -

    资源绑定

    -
  2. -
  3. -

    然后在 容器管理 -> 权限管理 页面,通过 添加授权 将小明授权为 Cluster Admin。

    -

    集群授权1

    -

    集群授权2

    -
  4. -
-

绑定到工作空间

-

使用小明的账号登录 AI 算力平台,在 容器管理 -> 集群列表 页面,通过 绑定工作空间 功能, -小明可以将指定集群绑定到自己的工作空间中。

-
-

Note

-

小明能且只能在容器管理模块将集群或者该集群下的命名空间绑定到某个工作空间,无法在全局管理模块完成此操作。

-
-

cluster绑定

-

绑定命名空间到工作空间也至少需要 Workspace Admin + Cluster Admin 权限。

-

ns绑定

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/host/createhost.html b/site/end-user/host/createhost.html deleted file mode 100644 index cdeb685..0000000 --- a/site/end-user/host/createhost.html +++ /dev/null @@ -1,602 +0,0 @@ - - - - - - - - - - - - - - -创建云主机 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

创建和启动云主机

-

用户完成注册,为其分配了工作空间、命名空间和资源后,即可以创建并启动云主机。

-

前置条件

-
    -
  • 已安装 AI 算力平台
  • -
  • 用户已成功注册
  • -
  • 管理员为用户绑定了工作空间
  • -
  • 管理员为工作空间分配了资源
  • -
-

操作步骤

-
    -
  1. 用户登录 AI 算力平台
  2. -
  3. -

    点击 创建云主机 -> 通过模板创建

    -

    create

    -
  4. -
  5. -

    定义的云主机各项配置后点击 下一步

    -
    -
    -
    -

    basic

    -
    -
    -

    template

    -
    -
    -

    storage

    -
    -
    -
    -
  6. -
  7. -

    配置 root 密码或 ssh 密钥后点击 确定

    -

    pass

    -
  8. -
  9. -

    返回主机列表,等待状态变为 运行中 之后,可以通过右侧的 启动主机。

    -

    pass

    -
  10. -
-

下一步:使用云主机

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/host/usehost.html b/site/end-user/host/usehost.html deleted file mode 100644 index 4e71b43..0000000 --- a/site/end-user/host/usehost.html +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - - - - - - -使用云主机 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

使用云主机

-

创建并启动云主机之后,用户就可以开始使用云主机。

-

前置条件

- -

操作步骤

-
    -
  1. 以管理员身份登录 AI 算力平台
  2. -
  3. -

    导航到 容器管理 -> 容器网络 -> 服务 ,点击服务的名称,进入服务详情页,在右上角点击 更新

    -

    service

    -
  4. -
  5. -

    更改端口范围为 30900-30999,但不能冲突。

    -

    port

    -
  6. -
  7. -

    以终端用户登录 AI 算力平台,导航到对应的服务,查看访问端口。

    -

    port

    -
  8. -
  9. -

    在外网使用 SSH 客户端登录云主机

    -

    ssh

    -
  10. -
  11. -

    至此,你可以在云主机上执行各项操作。

    -
  12. -
-

下一步:使用 Notebook

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/images/add01.png b/site/end-user/images/add01.png deleted file mode 100644 index 9abedc0..0000000 Binary files a/site/end-user/images/add01.png and /dev/null differ diff --git a/site/end-user/images/add02.png b/site/end-user/images/add02.png deleted file mode 100644 index ff6dca8..0000000 Binary files a/site/end-user/images/add02.png and /dev/null differ diff --git a/site/end-user/images/add03.png b/site/end-user/images/add03.png deleted file mode 100644 index 4e6172f..0000000 Binary files a/site/end-user/images/add03.png and /dev/null differ diff --git a/site/end-user/images/add04.png b/site/end-user/images/add04.png deleted file mode 100644 index 03e968d..0000000 Binary files a/site/end-user/images/add04.png and /dev/null differ diff --git a/site/end-user/images/add05.png b/site/end-user/images/add05.png deleted file mode 100644 index b5018eb..0000000 Binary files a/site/end-user/images/add05.png and /dev/null differ diff --git a/site/end-user/images/bindws01.png b/site/end-user/images/bindws01.png deleted file mode 100644 index 52c64ac..0000000 Binary files a/site/end-user/images/bindws01.png and /dev/null differ diff --git a/site/end-user/images/bindws02.png b/site/end-user/images/bindws02.png deleted file mode 100644 index cc53748..0000000 Binary files a/site/end-user/images/bindws02.png and /dev/null differ diff --git a/site/end-user/images/bindws03.png b/site/end-user/images/bindws03.png deleted file mode 100644 index 78d2bf4..0000000 Binary files a/site/end-user/images/bindws03.png and /dev/null differ diff --git a/site/end-user/images/bindws04.png b/site/end-user/images/bindws04.png deleted file mode 100644 index 91fc55f..0000000 Binary files a/site/end-user/images/bindws04.png and /dev/null differ diff --git a/site/end-user/images/bindws05.png b/site/end-user/images/bindws05.png deleted file mode 100644 index a1bbe21..0000000 Binary files a/site/end-user/images/bindws05.png and /dev/null differ diff --git a/site/end-user/images/bindws06.png b/site/end-user/images/bindws06.png deleted file mode 100644 index c157644..0000000 Binary files a/site/end-user/images/bindws06.png and /dev/null differ diff --git a/site/end-user/images/bindws07.png b/site/end-user/images/bindws07.png deleted file mode 100644 index 0239d61..0000000 Binary files a/site/end-user/images/bindws07.png and /dev/null differ diff --git a/site/end-user/images/bindws08.png b/site/end-user/images/bindws08.png deleted file mode 100644 index bc5881f..0000000 Binary files a/site/end-user/images/bindws08.png and /dev/null differ diff --git a/site/end-user/images/bindws09.png b/site/end-user/images/bindws09.png deleted file mode 100644 index ee587b0..0000000 Binary files a/site/end-user/images/bindws09.png and /dev/null differ diff --git a/site/end-user/images/bindws10.png b/site/end-user/images/bindws10.png deleted file mode 100644 index 1e99f7e..0000000 Binary files a/site/end-user/images/bindws10.png and /dev/null differ diff --git a/site/end-user/images/bindws11.png b/site/end-user/images/bindws11.png deleted file mode 100644 index 53fa67d..0000000 Binary files a/site/end-user/images/bindws11.png and /dev/null differ diff --git a/site/end-user/images/home.png b/site/end-user/images/home.png deleted file mode 100644 index 139dcdf..0000000 Binary files a/site/end-user/images/home.png and /dev/null differ diff --git a/site/end-user/images/host01.png b/site/end-user/images/host01.png deleted file mode 100644 index 692e221..0000000 Binary files a/site/end-user/images/host01.png and /dev/null differ diff --git a/site/end-user/images/host02.png b/site/end-user/images/host02.png deleted file mode 100644 index 6091415..0000000 Binary files a/site/end-user/images/host02.png and /dev/null differ diff --git a/site/end-user/images/host03.png b/site/end-user/images/host03.png deleted file mode 100644 index 2eecbed..0000000 Binary files a/site/end-user/images/host03.png and /dev/null differ diff --git a/site/end-user/images/host04.png b/site/end-user/images/host04.png deleted file mode 100644 index b1d0c2e..0000000 Binary files a/site/end-user/images/host04.png and /dev/null differ diff --git a/site/end-user/images/host05.png b/site/end-user/images/host05.png deleted file mode 100644 index 67806a5..0000000 Binary files a/site/end-user/images/host05.png and /dev/null differ diff --git a/site/end-user/images/host06.png b/site/end-user/images/host06.png deleted file mode 100644 index dae145f..0000000 Binary files a/site/end-user/images/host06.png and /dev/null differ diff --git a/site/end-user/images/host07.png b/site/end-user/images/host07.png deleted file mode 100644 index e94e450..0000000 Binary files a/site/end-user/images/host07.png and /dev/null differ diff --git a/site/end-user/images/k8s01.png b/site/end-user/images/k8s01.png deleted file mode 100644 index a06d26a..0000000 Binary files a/site/end-user/images/k8s01.png and /dev/null differ diff --git a/site/end-user/images/k8s02.png b/site/end-user/images/k8s02.png deleted file mode 100644 index 4ae0a2d..0000000 Binary files a/site/end-user/images/k8s02.png and /dev/null differ diff --git a/site/end-user/images/k8s03.png b/site/end-user/images/k8s03.png deleted file mode 100644 index f6e2fc5..0000000 Binary files a/site/end-user/images/k8s03.png and /dev/null differ diff --git a/site/end-user/images/k8s04.png b/site/end-user/images/k8s04.png deleted file mode 100644 index 579e978..0000000 Binary files a/site/end-user/images/k8s04.png and /dev/null differ diff --git a/site/end-user/images/k8s05.png b/site/end-user/images/k8s05.png deleted file mode 100644 index 54e89ee..0000000 Binary files a/site/end-user/images/k8s05.png and /dev/null differ diff --git a/site/end-user/images/k8s06.png b/site/end-user/images/k8s06.png deleted file mode 100644 index 87a9478..0000000 Binary files a/site/end-user/images/k8s06.png and /dev/null differ diff --git a/site/end-user/images/k8s07.png b/site/end-user/images/k8s07.png deleted file mode 100644 index 512762b..0000000 Binary files a/site/end-user/images/k8s07.png and /dev/null differ diff --git a/site/end-user/images/k8s08.png b/site/end-user/images/k8s08.png deleted file mode 100644 index 8407336..0000000 Binary files a/site/end-user/images/k8s08.png and /dev/null differ diff --git a/site/end-user/images/k8s09.png b/site/end-user/images/k8s09.png deleted file mode 100644 index a27d8fd..0000000 Binary files a/site/end-user/images/k8s09.png and /dev/null differ diff --git a/site/end-user/images/k8s10.png b/site/end-user/images/k8s10.png deleted file mode 100644 index d6e5c78..0000000 Binary files a/site/end-user/images/k8s10.png and /dev/null differ diff --git a/site/end-user/images/k8s11.png b/site/end-user/images/k8s11.png deleted file mode 100644 index 0965c31..0000000 Binary files a/site/end-user/images/k8s11.png and /dev/null differ diff --git a/site/end-user/images/k8s12.png b/site/end-user/images/k8s12.png deleted file mode 100644 index 63592d1..0000000 Binary files a/site/end-user/images/k8s12.png and /dev/null differ diff --git a/site/end-user/images/k8s13.png b/site/end-user/images/k8s13.png deleted file mode 100644 index da71956..0000000 Binary files a/site/end-user/images/k8s13.png and /dev/null differ diff --git a/site/end-user/images/k8s14.png b/site/end-user/images/k8s14.png deleted file mode 100644 index ef07530..0000000 Binary files a/site/end-user/images/k8s14.png and /dev/null differ diff --git a/site/end-user/images/notebook01.png b/site/end-user/images/notebook01.png deleted file mode 100644 index 4888a93..0000000 Binary files a/site/end-user/images/notebook01.png and /dev/null differ diff --git a/site/end-user/images/notebook02.png b/site/end-user/images/notebook02.png deleted file mode 100644 index 79699cb..0000000 Binary files a/site/end-user/images/notebook02.png and /dev/null differ diff --git a/site/end-user/images/notebook03.png b/site/end-user/images/notebook03.png deleted file mode 100644 index 3098322..0000000 Binary files a/site/end-user/images/notebook03.png and /dev/null differ diff --git a/site/end-user/images/notebook04.png b/site/end-user/images/notebook04.png deleted file mode 100644 index b34a57e..0000000 Binary files a/site/end-user/images/notebook04.png and /dev/null differ diff --git a/site/end-user/images/notebook05.png b/site/end-user/images/notebook05.png deleted file mode 100644 index 07329e4..0000000 Binary files a/site/end-user/images/notebook05.png and /dev/null differ diff --git a/site/end-user/images/notebook06.png b/site/end-user/images/notebook06.png deleted file mode 100644 index 50d43ff..0000000 Binary files a/site/end-user/images/notebook06.png and /dev/null differ diff --git a/site/end-user/images/notebook07.png b/site/end-user/images/notebook07.png deleted file mode 100644 index 18c9e6d..0000000 Binary files a/site/end-user/images/notebook07.png and /dev/null differ diff --git a/site/end-user/images/notebook08.png b/site/end-user/images/notebook08.png deleted file mode 100644 index 015c025..0000000 Binary files a/site/end-user/images/notebook08.png and /dev/null differ diff --git a/site/end-user/images/notebook09.png b/site/end-user/images/notebook09.png deleted file mode 100644 index bb7fcc5..0000000 Binary files a/site/end-user/images/notebook09.png and /dev/null differ diff --git a/site/end-user/images/quota01.png b/site/end-user/images/quota01.png deleted file mode 100644 index 389b47d..0000000 Binary files a/site/end-user/images/quota01.png and /dev/null differ diff --git a/site/end-user/images/quota02.png b/site/end-user/images/quota02.png deleted file mode 100644 index ac37f40..0000000 Binary files a/site/end-user/images/quota02.png and /dev/null differ diff --git a/site/end-user/images/quota03.png b/site/end-user/images/quota03.png deleted file mode 100644 index 2635d7c..0000000 Binary files a/site/end-user/images/quota03.png and /dev/null differ diff --git a/site/end-user/images/remove01.png b/site/end-user/images/remove01.png deleted file mode 100644 index f3491b2..0000000 Binary files a/site/end-user/images/remove01.png and /dev/null differ diff --git a/site/end-user/images/remove02.png b/site/end-user/images/remove02.png deleted file mode 100644 index 8160244..0000000 Binary files a/site/end-user/images/remove02.png and /dev/null differ diff --git a/site/end-user/images/remove03.png b/site/end-user/images/remove03.png deleted file mode 100644 index 1a80f89..0000000 Binary files a/site/end-user/images/remove03.png and /dev/null differ diff --git a/site/end-user/images/remove04.png b/site/end-user/images/remove04.png deleted file mode 100644 index 8cf2feb..0000000 Binary files a/site/end-user/images/remove04.png and /dev/null differ diff --git a/site/end-user/images/remove05.png b/site/end-user/images/remove05.png deleted file mode 100644 index a7b59fa..0000000 Binary files a/site/end-user/images/remove05.png and /dev/null differ diff --git a/site/end-user/images/ssh01.png b/site/end-user/images/ssh01.png deleted file mode 100644 index 7384554..0000000 Binary files a/site/end-user/images/ssh01.png and /dev/null differ diff --git a/site/end-user/images/ssh02.png b/site/end-user/images/ssh02.png deleted file mode 100644 index 293ceff..0000000 Binary files a/site/end-user/images/ssh02.png and /dev/null differ diff --git a/site/end-user/images/ssh03.png b/site/end-user/images/ssh03.png deleted file mode 100644 index 268c245..0000000 Binary files a/site/end-user/images/ssh03.png and /dev/null differ diff --git a/site/end-user/images/ssh04.png b/site/end-user/images/ssh04.png deleted file mode 100644 index 2f9ebd9..0000000 Binary files a/site/end-user/images/ssh04.png and /dev/null differ diff --git a/site/end-user/images/ssh05.png b/site/end-user/images/ssh05.png deleted file mode 100644 index b34d72a..0000000 Binary files a/site/end-user/images/ssh05.png and /dev/null differ diff --git a/site/end-user/images/usehost01.png b/site/end-user/images/usehost01.png deleted file mode 100644 index c4a5a39..0000000 Binary files a/site/end-user/images/usehost01.png and /dev/null differ diff --git a/site/end-user/images/usehost02.png b/site/end-user/images/usehost02.png deleted file mode 100644 index a8f46c6..0000000 Binary files a/site/end-user/images/usehost02.png and /dev/null differ diff --git a/site/end-user/images/usehost03.png b/site/end-user/images/usehost03.png deleted file mode 100644 index cc36100..0000000 Binary files a/site/end-user/images/usehost03.png and /dev/null differ diff --git a/site/end-user/images/usehost04.png b/site/end-user/images/usehost04.png deleted file mode 100644 index caa09c2..0000000 Binary files a/site/end-user/images/usehost04.png and /dev/null differ diff --git a/site/end-user/images/workload01.png b/site/end-user/images/workload01.png deleted file mode 100644 index 1db6174..0000000 Binary files a/site/end-user/images/workload01.png and /dev/null differ diff --git a/site/end-user/images/workload02.png b/site/end-user/images/workload02.png deleted file mode 100644 index 27ab3af..0000000 Binary files a/site/end-user/images/workload02.png and /dev/null differ diff --git a/site/end-user/images/workload03.png b/site/end-user/images/workload03.png deleted file mode 100644 index e517c14..0000000 Binary files a/site/end-user/images/workload03.png and /dev/null differ diff --git a/site/end-user/images/workload04.png b/site/end-user/images/workload04.png deleted file mode 100644 index 5abe7a4..0000000 Binary files a/site/end-user/images/workload04.png and /dev/null differ diff --git a/site/end-user/images/workload05.png b/site/end-user/images/workload05.png deleted file mode 100644 index 26efad6..0000000 Binary files a/site/end-user/images/workload05.png and /dev/null differ diff --git a/site/end-user/images/workload06.png b/site/end-user/images/workload06.png deleted file mode 100644 index 9c3bd86..0000000 Binary files a/site/end-user/images/workload06.png and /dev/null differ diff --git a/site/end-user/images/wsres01.png b/site/end-user/images/wsres01.png deleted file mode 100644 index 779e2e2..0000000 Binary files a/site/end-user/images/wsres01.png and /dev/null differ diff --git a/site/end-user/images/wsres02.png b/site/end-user/images/wsres02.png deleted file mode 100644 index bc2094c..0000000 Binary files a/site/end-user/images/wsres02.png and /dev/null differ diff --git a/site/end-user/images/wsres03.png b/site/end-user/images/wsres03.png deleted file mode 100644 index 563cd3a..0000000 Binary files a/site/end-user/images/wsres03.png and /dev/null differ diff --git a/site/end-user/index.html b/site/end-user/index.html deleted file mode 100644 index 356badd..0000000 --- a/site/end-user/index.html +++ /dev/null @@ -1,554 +0,0 @@ - - - - - - - - - - - - - - -什么是 AI 算力平台 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

算丰 AI 算力平台 - 终端用户

-

这是算丰 AI 算力平台面向终端用户的使用文档。

-
- -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/alert-policy.html b/site/end-user/insight/alert-center/alert-policy.html deleted file mode 100644 index 9e3a932..0000000 --- a/site/end-user/insight/alert-center/alert-policy.html +++ /dev/null @@ -1,845 +0,0 @@ - - - - - - - - - - - - - - -告警策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

告警策略

-

告警策略是在可观测性系统中定义的一组规则和条件,用于检测和触发警报,以便在系统出现异常或达到预定的阈值时及时通知相关人员或系统。

-

每条告警策略是一组告警规则的集合,支持对集群、节点、工作负载等资源、日志、事件设置告警规则。当告警对象达到策略下任一规则设定的阈值,则会自动触发告警并发送通知。

-

查看告警策略

-
    -
  1. 点击一级导航栏进入 可观测性
  2. -
  3. -

    左侧导航栏中,选择 告警中心 -> 告警策略

    -
      -
    • 集群:单击集群下拉框可切换集群;
    • -
    • 命名空间:单击命名空间切换下拉框。
    • -
    -

    告警策略

    -
  4. -
  5. -

    点击告警策略名称可查看策略的基本信息、规则以及通知配置。

    -
      -
    1. 在规则列表中可查看规则类型、规则的表达式、级别、状态等信息。
    2. -
    3. 进入策略详情,可以添加、编辑、删除其下的告警规则。
    4. -
    -

    告警策略

    -
  6. -
-

创建告警策略

-
    -
  1. -

    填写基本信息,选择一个或多个集群、节点或工作负载为告警对象后点击 下一步

    -

    基本信息

    -
    -

    Note

    -
      -
    • 选择全部集群、节点或工作负载:创建的告警规则对所有已安装 insight-agent 的集群生效。
    • -
    • 选择单个或多个集群集群、节点或工作负载:创建的告警规则仅对所选的资源对象生效。
    • -
    • 同时,用户只能对已权限的集群、命名空间设置告警规则。
    • -
    -
    -
  2. -
-

手动添加规则

-
    -
  1. -

    在创建告警策略的第二部中,点击列表右上角的添加规则

    -

    添加规则

    -
  2. -
  3. -

    在弹窗中创建告警规则,填写各项参数后点击 确定

    -

    创建规则

    -
      -
    • 模板规则:预定义了基础指标,可以按 CPU、内存、磁盘、网络设定要监控的指标。
    • -
    • PromQL 规则:输入一个 PromQL 表达式,具体请查询 Prometheus 表达式
    • -
    • 持续时长:告警被触发且持续时间达到该设定值后,告警策略将变为触发中状态。
    • -
    • 告警级别:包含紧急、警告、信息三种级别。
    • -
    • 高级设置:可以自定义标签和注解。
    • -
    -
    -

    Info

    -

    系统定义了内置标签,若自定义标签与内置标签的值相同,则自定义标签不生效。 -内置标签有:severityrule_idsourcecluster_namegroup_idtarget_typetarget

    -
    -
  4. -
-

创建日志规则

-

完成基本信息的填写后,点击 添加规则,规则类型选择 日志规则

-
-

Note

-

仅当资源对象选择节点或工作负载时,支持创建日志规则。

-
-

通知配置

-

字段说明:

-
    -
  • 过滤条件:查询日志内容的字段,支持与、或、正则匹配、模糊匹配四种过滤条件。
  • -
  • 判断条件:根据 过滤条件,输入关键字或匹配条件。
  • -
  • 时间范围:日志查询的时间范围。
  • -
  • 阈值条件:在输入框中输入告警阈值。当达到设置的阈值时,则触发告警。支持的比较运算符有: >、≥、=、≤、<。
  • -
  • 告警级别:选择告警级别,用于表示告警的严重程度。
  • -
-

创建事件规则

-

完成基本信息的填写后,点击 添加规则,规则类型选择 事件规则

-
-

Note

-

仅当资源对象选择工作负载时,支持创建事件规则。

-
-

通知配置

-

字段说明:

-
    -
  • 事件规则:仅支持资源对象选择工作负载
  • -
  • 事件原因:不同的工作负载类型的事件原因不同,事件原因之间是“和”的关系。
  • -
  • 时间范围:检测该时间范围内产生数据,若达到设置的阈值条件,则触发告警事件。
  • -
  • 阈值条件:当产生的事件达到设置的阈值时,则触发告警事件。
  • -
  • 趋势图:默认查询 10 分钟内的事件变化趋势,每个点的数值统计的是当前时间点到之前的某段时间(时间范围)内发生的总次数。
  • -
-

导入规则模板

-
    -
  1. -

    可点击 模板导入,选择平台管理员已创建好的告警模板批量导入告警规则。

    -

    告警模板

    -
  2. -
  3. -

    点击 下一步 后配置通知。

    -

    通知配置

    -
  4. -
  5. -

    配置完成后,点击 确定 按钮,返回告警策略列表。

    -
  6. -
-
-

Tip

-

新建的告警策略为 未触发 状态。一旦满足规则中的阈值条件和持续时间后,将变为 触发中 状态。

-
-
-

Warning

-

删除后的告警策略将完全消失,请谨慎操作。

-
-

通过 YAML 导入告警策略

-
    -
  1. -

    进入告警策略列表,点击 YAML 创建

    -
  2. -
  3. -

    集群、命名空间的选择是为了告警策略的管理权限。

    -
  4. -
  5. YAML 编辑器中请填写 spec 及其中的内容,仅支持导入一个 group。
  6. -
  7. 告警规则名称 需要符合规范:名称只能包含大小写字母、数字、下划线(_)和连字符(-),必须以字母开头,最长 63 个字符。
  8. -
  9. 必填 severity 且符合规范:critical、warning、info。
  10. -
  11. -

    必填表达式 expr

    -

    yaml 创建

    -
  12. -
  13. -

    导入 YAML 文件后,点击 预览,可以对导入的 YAML 格式进行验证,并快速确认导入的告警规则。

    -

    yaml 创建

    -
  14. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/alert-template.html b/site/end-user/insight/alert-center/alert-template.html deleted file mode 100644 index 49e4fe9..0000000 --- a/site/end-user/insight/alert-center/alert-template.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - - - - - - - - - - - -告警模板 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

告警模板

-

告警模板可支持平台管理员创建告警模板及规则,业务侧可以直接使用告警模板创建告警策略。 -这个功能可以减少业务人员对告警规则的管理,且可以根据环境实际情况自行修改告警阈值。

-

创建告警模板

-
    -
  1. -

    左侧导航栏中,选择 告警中心 -> 告警策略,单击顶部的 告警模板

    -

    告警模板

    -
  2. -
  3. -

    点击 创建告警模板 ,设置告警模板的名称、描述等信息。

    -

    设置名称

    -

    添加规则

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    参数说明
    模板名称名称只能包含小写字母、数字和连字符(-),必须以小写字母或数字开头和结尾,最长 63 个字符。
    描述描述可包含任意字符,最长 256 个字符。
    资源类型用于指定告警模板的匹配类型。
    告警规则支持预定义多个告警规则,可添加模板规则、PromQL 规则。
    -
  4. -
  5. -

    点击 确定 完成创建后返回告警模板列表,点击模板名称后可查看模板详情。

    -
  6. -
-

编辑告警模板

-

点击目标规则后的 ,点击 编辑,进入抑制规则的编辑页。

-

告警模板

-

删除告警模板

-

点击目标模板后侧的 ,点击 删除,在输入框中输入告警模板的名称即可删除。

-

告警模板

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/index.html b/site/end-user/insight/alert-center/index.html deleted file mode 100644 index cac6e0b..0000000 --- a/site/end-user/insight/alert-center/index.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - - - - - - - - - - -告警中心 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

告警中心

-

告警中心是 AI 算力平台 提供的一个重要功能,它让用户可以通过图形界面方便地按照集群和命名空间查看所有活动和历史告警, -并根据告警级别(紧急、警告、提示)来搜索告警。

-

alert list

-

所有告警都是基于预设的告警规则设定的阈值条件触发的。在 AI 算力平台中,内置了一些全局告警策略,同时您也可以随时创建、删除告警策略,对以下指标进行设置:

-
    -
  • CPU 使用量
  • -
  • 内存使用量
  • -
  • 磁盘使用量
  • -
  • 磁盘每秒读次数
  • -
  • 磁盘每秒写次数
  • -
  • 集群磁盘读取吞吐量
  • -
  • 集群磁盘写入吞吐量
  • -
  • 网络发送速率
  • -
  • 网络接收速率
  • -
-

还可以为告警规则添加标签和注解。告警规则分为活跃和过期规则,支持启用/禁用某些规则来实现告警静默。

-

当达到阈值条件后,可以配置告警通知方式,包括邮件、钉钉、企业微信、Webhook 和短信通知。 -所有通知的消息模板都可以自定义,同时还支持按设定的间隔时间发送通知。

-

此外,告警中心还支持通过阿里云、腾讯云等提供的短信服务将告警消息发送给指定用户,实现多种方式的告警通知。

-

AI 算力平台 告警中心是一个功能强大的告警管理平台,可帮助用户及时发现和解决集群中出现的问题, -提高业务稳定性和可用性,便于集群巡检和故障排查。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/inhibition.html b/site/end-user/insight/alert-center/inhibition.html deleted file mode 100644 index 4ca967d..0000000 --- a/site/end-user/insight/alert-center/inhibition.html +++ /dev/null @@ -1,808 +0,0 @@ - - - - - - - - - - - - - - -告警抑制 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

告警抑制

-

告警抑制主要是对于某些不需要立即关注的告警进行临时隐藏或者降低其优先级的一种机制。这个功能的目的是为了减少不必要的告警信息对运维人员的干扰,使他们能够集中精力处理更重要的问题。

-

告警抑制通过定义一组规则来识别和忽略某些告警,当它们在特定条件下发生时。主要有以下几种情况:

-
    -
  • 父子关系抑制:当一个父告警(例如某个节点的崩溃)触发时,可以抑制所有由此引起的子告警(例如该节点上运行的容器崩溃)。
  • -
  • 相似告警抑制:当多个告警具有相同的特征(例如同一实例上的相同问题)时,可以抑制重复的告警通知。
  • -
-

创建抑制规则

-
    -
  1. -

    左侧导航栏中,选择 告警中心 -> 告警降噪,单击顶部的 告警抑制

    -

    告警抑制

    -
  2. -
  3. -

    点击 新建抑制规则 ,设置抑制规则的名称、规则等。

    -
    -

    Note

    -

    通过规则标签告警标签定义一组规则来识别和忽略某些告警,达到避免同一问题可能会触发多个相似或相关的告警的问题。

    -
    -

    新建规则

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    参数时间说明
    抑制规则名称抑制规则名称只能包含小写字母、数字和连字符(-),必须以小写字母或数字开头和结尾,最长 63 个字符。
    描述描述可包含任意字符,最长 256 个字符。
    集群该抑制规则作用的集群。
    命名空间该抑制规则作用的命名空间。
    根源告警通过填写的标签条件匹配告警,会将符合所有标签条件的告警与符合抑制条件的进行对比,不符合抑制条件的告警将照常发送消息给用户。

    取值范围说明:
    - 告警级别:指标或事件告警的级别,可以设置为:紧急、重要、提示。
    - 资源类型:告警对象所对应的资源类型,可以设置为:集群、节点、无状态负载、有状容负载、守护进程、容器组。
    - 标签:告警标识属性,由标签名和标签值构成,支持用户自定义。
    抑制告警用于指定目标警报(将被抑制的警报)的匹配条件,符合所有标签条件的告警将不会再发送消息给用户。
    匹配标签用于指定应该比较的标签列表,以确定源警报和目标警报是否匹配。只有在 equal 中指定的标签在源和目标警报中的值完全相同的情况下,才会触发抑制。equal 字段是可选的。如果省略 equal 字段,则会将所有标签用于匹配
    -
  4. -
  5. -

    点击**确定**完成创建后返回告警抑制列表,点击告警抑制名称后可查看抑制规则详情。

    -
  6. -
-

查看规则标签

-
    -
  1. 点击右侧导航栏选择 告警中心 -> 告警策略 ,点击规则所在的策略详情。
  2. -
  3. -

    点击目标规则名称,查看规则详情,查看对应告警规则的标签。

    -

    查看规则标签

    -
    -

    Note

    -

    添加规则时可添加自定义标签

    -
    -
  4. -
-

查看告警标签

-
    -
  1. -

    点击右侧导航栏选择 告警中心 -> 告警列表 ,点击告警所在行查看告警详情。

    -

    查看告警标签

    -
    -

    Note

    -

    告警标签用于描述告警的详细信息和属性,可以用来创建抑制规则。

    -
    -
  2. -
-

编辑抑制规则

-
    -
  1. -

    点击目标规则后侧的 ,点击 编辑,进入抑制规则的编辑页。

    -

    编辑抑制规则

    -
  2. -
-

删除抑制规则

-

点击目标规则后侧的 ,点击 删除,在输入框中输入抑制规则的名称即可删除。

-

删除抑制规则

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/message.html b/site/end-user/insight/alert-center/message.html deleted file mode 100644 index b6aeff1..0000000 --- a/site/end-user/insight/alert-center/message.html +++ /dev/null @@ -1,846 +0,0 @@ - - - - - - - - - - - - - - -通知配置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

通知配置

-

通知配置 页面,可以配置通过邮件、企业微信、钉钉、Webhook 和短信等方式向用户发送消息。

-

邮件组

-
    -
  1. -

    进入 可观测性 后,在左侧导航栏中点击 告警中心 -> 通知配置,默认位于邮件通知对象。

    -

    邮件

    -
  2. -
  3. -

    点击 添加邮箱组,添加一个或多个邮件地址。

    -

    添加邮箱组

    -
  4. -
  5. -

    配置完成后自动返回通知列表,点击列表右侧的 ,可以编辑或删除邮箱组。

    -
  6. -
-

企业微信

-
    -
  1. -

    在左侧导航栏中点击 告警中心 -> 通知配置 -> 企业微信

    -

    企业微信

    -

    有关企业微信群机器人的 URL,请参阅企业微信官方文档:如何使用群机器人

    -
  2. -
  3. -

    点击 添加群机器人,添加一个或多个群机器人。

    -

    企业微信

    -
  4. -
  5. -

    配置完成后自动返回通知列表,点击列表右侧的 ,选择 发送测试信息,还可以编辑或删除群机器人。

    -
  6. -
-

钉钉

-
    -
  1. -

    在左侧导航栏中点击 告警中心 -> 通知配置 -> 钉钉,点击 添加群机器人,添加一个或多个群机器人。

    -

    钉钉

    -

    有关钉钉群机器人的 URL,请参阅钉钉官方文档:自定义机器人接入

    -
    -

    Note

    -

    加签的方式是钉钉机器人与开发者双向进行安全认证,若在创建钉钉机器人时开启了加签,则需要在此处输入钉钉生成的密钥。 -可参考钉钉自定义机器人安全设置

    -
    -
  2. -
  3. -

    配置完成后自动返回通知列表,点击列表右侧的 ,选择 发送测试信息,还可以编辑或删除群机器人。

    -
  4. -
-

飞书

-
    -
  1. -

    在左侧导航栏中点击 告警中心 -> 通知配置 -> 飞书,点击 添加群机器人,添加一个或多个群机器人。

    -

    飞书

    -
    -

    Note

    -

    当飞书的群机器人开启签名校验时,添加飞书通知时需要填写对应的签名密钥。请查阅 自定义机器人使用指南

    -
    -
  2. -
  3. -

    配置完成后自动返回通知列表,点击列表右侧的 ,选择 发送测试信息,还可以编辑或删除群机器人。

    -
  4. -
-

Webhook

-
    -
  1. -

    在左侧导航栏中点击 告警中心 -> 通知配置 -> Webhook

    -

    webhook

    -

    有关 Webhook URL 及更多配置方式,请参阅 webhook 文档

    -
  2. -
  3. -

    点击 新建 Webhook,添加一个或多个 Webhook。

    -

    alt text

    -

    HTTP Headers:非必填,设置请求头。可以添加多个 Headers。

    -
    -

    Note

    -

    有关 Webhook URL 及更多配置方式,请参阅 webhook 文档

    -
    -
  4. -
  5. -

    配置完成后自动返回通知列表,点击列表右侧的 ,选择 发送测试信息,还可以编辑或删除 Webhook。

    -
  6. -
-

站内信

-
-

Note

-

告警消息发送至用户个人的站内信,点击顶部的 🔔 符号可以查看通知消息。

-
-
    -
  1. -

    在左侧导航栏中点击 告警中心 -> 通知配置 -> 站内信,点击创建。

    -
      -
    • 站内信通知允许添加多个用户。
    • -
    -

    message

    -
  2. -
  3. -

    配置完成后自动返回 站内信通知列表,点击列表右侧的 ,选择 发送测试信息

    -
  4. -
-

短信组

-
    -
  1. -

    在左侧导航栏中点击 告警中心 -> 通知配置 -> 短信,点击 添加短信组,添加一个或多个短信组。

    -

    messsage

    -
  2. -
  3. -

    在弹窗中输入名称、接收短信的对象、手机号以及通知服务器。

    -

    mobile

    -

    通知服务器需要预先在 通知配置 -> 通知服务器 中添加创建。目前支持阿里云、腾讯云两种云服务器,具体配置的参数请参阅自己的云服务器信息。

    -

    cloud-notify

    -
  4. -
  5. -

    短信组添加成功后,自动返回通知列表,点击列表右侧的 ,可以编辑或删除短信组。

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/msg-template.html b/site/end-user/insight/alert-center/msg-template.html deleted file mode 100644 index 4d013c4..0000000 --- a/site/end-user/insight/alert-center/msg-template.html +++ /dev/null @@ -1,779 +0,0 @@ - - - - - - - - - - - - - - -消息模板 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

消息模板

-

可观测性提供自定义消息模板内容的能力,支持邮件、企业微信、钉钉、Webhook、飞书、站内信等不同的通知对象定义不同的消息通知内容。

-

创建消息模板

-
    -
  1. -

    在左侧导航栏中,选择 告警中心 -> 消息模板

    -

    Insight 默认内置中英文两个模板,以便用户使用。

    -

    点击按钮

    -
  2. -
  3. -

    点击 新建消息模板 按钮,填写模板内容。

    -

    点击按钮

    -
  4. -
-
-

Info

-

可观测性预置了消息模板。若需要定义模板的内容,请参考配置通知模板

-
-

消息模板详情

-

点击某一消息模板的名称,右侧滑块可查看消息模板的详情。

-

消息模板

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数变量描述
规则名称{{ .Labels.alertname }}触发告警的规则名称
策略名称{{ .Labels.alertgroup }}触发告警规则所属的告警策略名称
告警级别{{ .Labels.severity }}触发告警的级别
集群{{ .Labels.cluster }}触发告警的资源所在的集群
命名空间{{ .Labels.namespace }}触发告警的资源所在的命名空间
节点{{ .Labels.node }}触发告警的资源所在的节点
资源类型{{ .Labels.target_type }}告警对象的资源类型
资源名称{{ .Labels.target }}触发告警的对象名称
触发值{{ .Annotations.value }}触发告警通知时的指标值
发生时间{{ .StartsAt }}告警开始发生的时间
结束时间{{ .EndsAT }}告警结束的时间
描述{{ .Annotations.description }}告警的详细描述
标签{{ for .labels}} {{end}}告警的所有标签,使用 for 函数遍历 labels 列表,获取告警的所有标签内容。
-

编辑或删除消息模板

-

在列表右侧点击 ,在弹出菜单中选择 编辑删除,可以修改或删除消息模板。

-
-

Warning

-

请注意,删除模板后无法恢复,请谨慎操作。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/silent.html b/site/end-user/insight/alert-center/silent.html deleted file mode 100644 index a93f2a9..0000000 --- a/site/end-user/insight/alert-center/silent.html +++ /dev/null @@ -1,667 +0,0 @@ - - - - - - - - - - - - - - -告警静默 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

告警静默

-

告警静默是指在特定的时间范围内,根据定义好的规则对符合条件的告警不再发送告警通知。该功能可以帮助运维人员避免在某些操作或事件期间接收到过多的噪声告警,同时便于更加精确地处理真正需要解决的问题。

-

在告警静默页面上,用户可以看到两个页签:活跃规则和过期规则。 -其中,活跃规则表示目前正在生效的规则,而过期规则则是以前定义过但已经过期(或者用户主动删除)的规则。

-

操作步骤

-
    -
  1. -

    在左侧导航栏中,选择 告警中心 -> 告警静默 ,点击 新建静默规则 按钮。

    -

    点击按钮

    -
  2. -
  3. -

    填写静默规则的各项参数,如集群、命名空间、标签、时间等,以定义这条规则的作用范围和生效时间。

    -

    静默规则

    -
  4. -
  5. -

    返回规则列表,在列表右侧点击 ,可以编辑或删除静默规则。

    -
  6. -
-

通过告警静默功能,您可以灵活地控制哪些告警需要被忽略,在什么时间段内生效,从而提高运维效率,减少误报的可能性。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/alert-center/sms-provider.html b/site/end-user/insight/alert-center/sms-provider.html deleted file mode 100644 index decec41..0000000 --- a/site/end-user/insight/alert-center/sms-provider.html +++ /dev/null @@ -1,705 +0,0 @@ - - - - - - - - - - - - - - -配置通知服务器 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

配置通知服务器

-

可观测性 Insight 支持短信通知,目前通过集成阿里云、腾讯云的短信服务发送告警消息。本文介绍了如何在 insight 中配置短信通知的服务器。短信签名中支持的变量为消息模板中的默认变量,同时由于短信字数有限,建议选择较为明确的变量。

-
-

如何配置短信接收人可参考文档:配置短信通知组

-
-

操作步骤

-
    -
  1. -

    进入 告警中心 -> 通知配置 -> 通知服务器

    -

    通知服务器

    -
  2. -
  3. -

    点击 添加通知服务器

    -
      -
    1. -

      配置阿里云服务器。

      -
      -

      申请阿里云短信服务,请参考阿里云短信服务

      -
      -

      字段说明:

      -
        -
      • AccessKey ID :阿里云用于标识用户的参数。
      • -
      • AccessKey Secret :阿里云用于验证用户的密钥。AccessKey Secret 必须保密。
      • -
      • 短信签名 :短信服务支持根据用户需求创建符合要求的签名。发送短信时,短信平台会将已审核通过的短信签名添加到短信内容中,再发送给短信接收方。
      • -
      • 模板 CODE :短信模板是发送短信的具体内容。
      • -
      • 参数模板 :短信正文模板可以包含变量,用户可通过变量实现自定义短信内容。
      • -
      -

      请参考阿里云变量规范

      -

      通知服务器

      -
      -

      Note

      -

      举例:在阿里云定义的模板内容为:\({severity}:\) 被触发。参数模板中的配置参考上图。} 在 ${startat

      -
      -
    2. -
    3. -

      配置腾讯云服务器。

      -
      -

      申请腾讯云短信服务,请参考腾讯云短信

      -
      -

      字段说明:

      -
        -
      • Secret ID :腾讯云用于标识 API 调用者身份参数。
      • -
      • SecretKey :腾讯云用于验证 API 调用者的身份的参数。
      • -
      • 短信模板 ID :短信模板 ID,由腾讯云系统自动生成。
      • -
      • 签名内容 :短信签名内容,即在腾讯云短信签名中定义的实际网站名的全称或简称。
      • -
      • SdkAppId :短信 SdkAppId,在腾讯云短信控制台添加应用后生成的实际 SdkAppId。
      • -
      • 参数模板 :短信正文模板可以包含变量,用户可通过变量实现自定义短信内容。请参考:腾讯云变量规范
      • -
      -

      通知服务器

      -
      -

      Note

      -

      举例:在腾讯云定义的模板内容为:{1}:{2} 在 {3} 被触发。参数模板中的配置参考上图。

      -
      -
    4. -
    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/collection-manag/agent-status.html b/site/end-user/insight/collection-manag/agent-status.html deleted file mode 100644 index 4d27283..0000000 --- a/site/end-user/insight/collection-manag/agent-status.html +++ /dev/null @@ -1,667 +0,0 @@ - - - - - - - - - - - - - - -采集组件insight-agent状态 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

insight-agent 组件状态说明

-

在 AI 算力平台中可观测性 Insight 作为多集群观测产品,为了实现多集群观测数据的统一采集,需要用户安装 Helm 应用 insight-agent -(默认安装在 insight-system 命名空间)。参阅如何安装 insight-agent

-

状态说明

-

可观测性 -> 采集管理 部分可查看各集群安装 insight-agent 的情况。

-
    -
  • 未安装 :该集群中未在 insight-system 命名空间下安装 insight-agent
  • -
  • 运行中 :该集群中成功安装 insight-agent ,且部署的所有组件均处于运行中状态
  • -
  • 异常 :若 insight-agent 处于此状态,说明 helm 部署失败或存在部署的组件处于非运行中状态
  • -
-

可通过以下方式排查:

-
    -
  1. -

    执行以下命令,若状态为 deployed ,则执行下一步。若为 failed ,由于会影响应用的升级,建议在 容器管理 -> helm 应用 卸载后重新安装 :

    -
    helm list -n insight-system
    -
    -
  2. -
  3. -

    执行以下命令或在 可观测性 -> 采集管理 中查看该集群部署的组件的状态,若存在非 运行中 状态的容器组,请重启异常的容器组。

    -
    kubectl get pods -n insight-system
    -
    -
  4. -
-

补充说明

-
    -
  1. -

    insight-agent 中指标采集组件 Prometheus 的资源消耗与集群中运行的容器组数量存在正比关系, - 请根据集群规模调整 Prometheus 的资源,请参考:Prometheus 资源规划

    -
  2. -
  3. -

    由于全局服务集群中指标存储组件 vmstorage 的存储容量与各个集群容器组数量总和存在正比关系。

    - -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/collection-manag/collection-manag.html b/site/end-user/insight/collection-manag/collection-manag.html deleted file mode 100644 index e6fb76f..0000000 --- a/site/end-user/insight/collection-manag/collection-manag.html +++ /dev/null @@ -1,603 +0,0 @@ - - - - - - - - - - - - - - -采集管理 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

采集管理

-

采集管理 主要是集中管理、展示集群安装采集插件 insight-agent 的入口,帮助用户快速的查看集群采集插件的健康状态,并提供了快捷入口配置采集规则。

-

具体操作步骤如下:

-
    -
  1. -

    点击左上角的,选择 可观测性

    -

    一级导航

    -
  2. -
  3. -

    选择左侧导航栏的 采集管理 ,查看全部集群采集插件的状态。

    -

    集群列表

    -
  4. -
  5. -

    集群接入 insight-agent 且处于运行中状态时,点击某个集群名称进入详情。

    -

    集群列表

    -
  6. -
  7. -

    服务监控 页签中,点击快捷链接跳转到 容器管理 -> 自定义资源 添加服务发现规则。

    -

    集群列表

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/collection-manag/metric-collect.html b/site/end-user/insight/collection-manag/metric-collect.html deleted file mode 100644 index 44debcc..0000000 --- a/site/end-user/insight/collection-manag/metric-collect.html +++ /dev/null @@ -1,729 +0,0 @@ - - - - - - - - - - - - -指标抓取方式 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

指标抓取方式

-

Prometheus 主要通过 Pull 的方式来抓取目标服务暴露出来的监控接口,因此需要配置对应的抓取任务来请求监控数据并写入到 Prometheus 提供的存储中,目前 Prometheus 服务提供了如下几个任务的配置:

-
    -
  • 原生 Job 配置:提供 Prometheus 原生抓取 Job 的配置。
  • -
  • Pod Monitor:在 K8S 生态下,基于 Prometheus Operator 来抓取 Pod 上对应的监控数据。
  • -
  • Service Monitor:在 K8S 生态下,基于 Prometheus Operator 来抓取 Service 对应 Endpoints 上的监控数据。
  • -
-
-

Note

-

[ ] 中的配置项为可选。

-
-

原生 Job 配置

-

相应配置项说明如下:

-
# 抓取任务名称,同时会在对应抓取的指标中加了一个 label(job=job_name)
-job_name: <job_name>
-
-# 抓取任务时间间隔
-[ scrape_interval: <duration> | default = <global_config.scrape_interval> ]
-
-# 抓取请求超时时间
-[ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ]
-
-# 抓取任务请求 URI 路径
-[ metrics_path: <path> | default = /metrics ]
-
-# 解决当抓取的 label 与后端 Prometheus 添加 label 冲突时的处理。
-# true: 保留抓取到的 label,忽略与后端 Prometheus 冲突的 label;
-# false: 对冲突的 label,把抓取的 label 前加上 exported_<original-label>,添加后端 Prometheus 增加的 label;
-[ honor_labels: <boolean> | default = false ]
-
-# 是否使用抓取到 target 上产生的时间。
-# true: 如果 target 中有时间,使用 target 上的时间;
-# false: 直接忽略 target 上的时间;
-[ honor_timestamps: <boolean> | default = true ]
-
-# 抓取协议: http 或者 https
-[ scheme: <scheme> | default = http ]
-
-# 抓取请求对应 URL 参数
-params:
-  [ <string>: [<string>, ...] ]
-
-# 通过 basic auth 设置抓取请求头中 `Authorization` 的值,password/password_file 互斥,优先取 password_file 里面的值。
-basic_auth:
-  [ username: <string> ]
-  [ password: <secret> ]
-  [ password_file: <string> ]
-
-# 通过 bearer token 设置抓取请求头中 `Authorization` bearer_token/bearer_token_file 互斥,优先取 bearer_token 里面的值。
-[ bearer_token: <secret> ]
-
-# 通过 bearer token 设置抓取请求头中 `Authorization` bearer_token/bearer_token_file 互斥,优先取 bearer_token 里面的值。
-[ bearer_token_file: <filename> ]
-
-# 抓取连接是否通过 TLS 安全通道,配置对应的 TLS 参数
-tls_config:
-  [ <tls_config> ]
-
-# 通过代理服务来抓取 target 上的指标,填写对应的代理服务地址。
-[ proxy_url: <string> ]
-
-# 通过静态配置来指定 target,详见下面的说明。
-static_configs:
-  [ - <static_config> ... ]
-
-# CVM 服务发现配置,详见下面的说明。
-cvm_sd_configs:
-  [ - <cvm_sd_config> ... ]
-
-# 在抓取数据之后,把 target 上对应的 label 通过 relabel 的机制进行改写,按顺序执行多个 relabel 规则。
-# relabel_config 详见下文说明。
-relabel_configs:
-  [ - <relabel_config> ... ]
-
-# 数据抓取完成写入之前,通过 relabel 机制进行改写 label 对应的值,按顺序执行多个 relabel 规则。
-# relabel_config 详见下文说明。
-metric_relabel_configs:
-  [ - <relabel_config> ... ]
-
-# 一次抓取数据点限制,0:不作限制,默认为 0
-[ sample_limit: <int> | default = 0 ]
-
-# 一次抓取 Target 限制,0:不作限制,默认为 0
-[ target_limit: <int> | default = 0 ]
-
-

Pod Monitor

-

相应配置项说明如下:

-
# Prometheus Operator CRD 版本
-apiVersion: monitoring.coreos.com/v1
-# 对应 K8S 的资源类型,这里面 Pod Monitor
-kind: PodMonitor
-# 对应 K8S 的 Metadata,这里只用关心 name,如果没有指定 jobLabel,对应抓取指标 label 中 job 的值为 <namespace>/<name>
-metadata:
-  name: redis-exporter # 填写一个唯一名称
-  namespace: cm-prometheus  # namespace 固定,不需要修改
-# 描述抓取目标 Pod 的选取及抓取任务的配置
-  label:
-    operator.insight.io/managed-by: insight # Insight 管理的标签标识
-spec:
-  # 填写对应 Pod 的 label,pod monitor 会取对应的值作为 job label 的值。
-  # 如果查看的是 Pod Yaml,取 pod.metadata.labels 中的值。
-  # 如果查看的是 Deployment/Daemonset/Statefulset,取 spec.template.metadata.labels。
-  [ jobLabel: string ]
-  # 把对应 Pod 上的 Label 添加到 Target 的 Label 中
-  [ podTargetLabels: []string ]
-  # 一次抓取数据点限制,0:不作限制,默认为 0
-  [ sampleLimit: uint64 ]
-  # 一次抓取 Target 限制,0:不作限制,默认为 0
-  [ targetLimit: uint64 ]
-  # 配置需要抓取暴露的 Prometheus HTTP 接口,可以配置多个 Endpoint
-  podMetricsEndpoints:
-  [ - <endpoint_config> ... ] # 详见下面 endpoint 说明
-  # 选择要监控 Pod 所在的 namespace,不填为选取所有 namespace
-  [ namespaceSelector: ]
-    # 是否选取所有 namespace
-    [ any: bool ]
-    # 需要选取 namespace 列表
-    [ matchNames: []string ]
-  # 填写要监控 Pod 的 Label 值,以定位目标 Pod [K8S metav1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#labelselector-v1-meta)
-  selector:
-    [ matchExpressions: array ]
-      [ example: - {key: tier, operator: In, values: [cache]} ]
-    [ matchLabels: object ]
-      [ example: k8s-app: redis-exporter ]
-
-

举例 1

-
apiVersion: monitoring.coreos.com/v1
-kind: PodMonitor
-metadata:
-  name: redis-exporter # 填写一个唯一名称
-  namespace: cm-prometheus # namespace 固定,不要修改
-  label:
-    operator.insight.io/managed-by: insight  # Insight 管理的标签标识,必填。
-spec:
-  podMetricsEndpoints:
-    - interval: 30s
-      port: metric-port # 填写 pod yaml 中 Prometheus Exporter 对应的 Port 的 Name
-      path: /metrics # 填写 Prometheus Exporter 对应的 Path 的值,不填默认 /metrics
-      relabelings:
-        - action: replace
-          sourceLabels:
-            - instance
-          regex: (.*)
-          targetLabel: instance
-          replacement: "crs-xxxxxx" # 调整成对应的 Redis 实例 ID
-        - action: replace
-          sourceLabels:
-            - instance
-          regex: (.*)
-          targetLabel: ip
-          replacement: "1.x.x.x" # 调整成对应的 Redis 实例 IP
-  namespaceSelector: # 选择要监控 Pod 所在的 namespace
-    matchNames:
-      - redis-test
-  selector: # 填写要监控 Pod 的 Label 值,以定位目标 pod
-    matchLabels:
-      k8s-app: redis-exporter
-
-

举例 2

-
job_name: prometheus
-scrape_interval: 30s
-static_configs:
-- targets:
-  - 127.0.0.1:9090
-
-

Service Monitor

-

相应配置项说明如下:

-
# Prometheus Operator CRD 版本
-apiVersion: monitoring.coreos.com/v1
-# 对应 K8S 的资源类型,这里面 Service Monitor
-kind: ServiceMonitor
-# 对应 K8S 的 Metadata,这里只用关心 name,如果没有指定 jobLabel,对应抓取指标 label 中 job 的值为 Service 的名称。
-metadata:
-  name: redis-exporter # 填写一个唯一名称
-  namespace: cm-prometheus  # namespace 固定,不需要修改
-# 描述抓取目标 Pod 的选取及抓取任务的配置
-  label:
-    operator.insight.io/managed-by: insight  # Insight 管理的标签标识,必填。
-spec:
-  # 填写对应 Pod 的 label(metadata/labels),service monitor 会取对应的值作为 job label 的值
-  [ jobLabel: string ]
-  # 把对应 service 上的 Label 添加到 Target 的 Label 中
-  [ targetLabels: []string ]
-  # 把对应 Pod 上的 Label 添加到 Target 的 Label 中
-  [ podTargetLabels: []string ]
-  # 一次抓取数据点限制,0:不作限制,默认为 0
-  [ sampleLimit: uint64 ]
-  # 一次抓取 Target 限制,0:不作限制,默认为 0
-  [ targetLimit: uint64 ]
-  # 配置需要抓取暴露的 Prometheus HTTP 接口,可以配置多个 Endpoint
-  endpoints:
-  [ - <endpoint_config> ... ] # 详见下面 endpoint 说明
-  # 选择要监控 Pod 所在的 namespace,不填为选取所有 namespace
-  [ namespaceSelector: ]
-    # 是否选取所有 namespace
-    [ any: bool ]
-    # 需要选取 namespace 列表
-    [ matchNames: []string ]
-  # 填写要监控 Pod 的 Label 值,以定位目标 Pod [K8S metav1.LabelSelector](https://v1-17.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#labelselector-v1-meta)
-  selector:
-    [ matchExpressions: array ]
-      [ example: - {key: tier, operator: In, values: [cache]} ]
-    [ matchLabels: object ]
-      [ example: k8s-app: redis-exporter ]
-
-

举例

-
apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
-  name: go-demo # 填写一个唯一名称
-  namespace: cm-prometheus # namespace 固定,不要修改
-  label:
-    operator.insight.io/managed-by: insight  # Insight 管理的标签标识,必填。
-spec:
-  endpoints:
-    - interval: 30s
-      # 填写 service yaml 中 Prometheus Exporter 对应的 Port 的 Name
-      port: 8080-8080-tcp
-      # 填写 Prometheus Exporter 对应的 Path 的值,不填默认 /metrics
-      path: /metrics
-      relabelings:
-        # ** 必须要有一个 label 为 application,这里假设 k8s 有一个 label 为 app,
-        # 我们通过 relabel 的 replace 动作把它替换成了 application
-        - action: replace
-          sourceLabels: [__meta_kubernetes_pod_label_app]
-          targetLabel: application
-  # 选择要监控 service 所在的 namespace
-  namespaceSelector:
-    matchNames:
-      - golang-demo
-  # 填写要监控 service 的 Label 值,以定位目标 service
-  selector:
-    matchLabels:
-      app: golang-app-demo
-
-

endpoint_config

-

相应配置项说明如下:

-
# 对应 port 的名称,这里需要注意不是对应的端口,默认:80,对应的取值如下:
-# ServiceMonitor: 对应 Service>spec/ports/name;
-# PodMonitor: 说明如下:
-#   如果查看的是 Pod Yaml,取 pod.spec.containers.ports.name 中的值。
-#   如果查看的是 Deployment/Daemonset/Statefulset,取值 spec.template.spec.containers.ports.name
-[ port: string | default = 80]
-# 抓取任务请求 URI 路径
-[ path: string | default = /metrics ]
-# 抓取协议: http 或者 https
-[ scheme: string | default = http]
-# 抓取请求对应 URL 参数
-[ params: map[string][]string]
-# 抓取任务间隔的时间
-[ interval: string | default = 30s ]
-# 抓取任务超时
-[ scrapeTimeout: string | default = 30s]
-# 抓取连接是否通过 TLS 安全通道,配置对应的 TLS 参数
-[ tlsConfig: TLSConfig ]
-# 通过对应的文件读取 bearer token 对应的值,放到抓取任务的 header 中
-[ bearerTokenFile: string ]
-# 通过对应的 K8S secret key 读取对应的 bearer token,注意 secret namespace 需要和 PodMonitor/ServiceMonitor 相同
-[ bearerTokenSecret: string ]
-# 解决当抓取的 label 与后端 Prometheus 添加 label 冲突时的处理。
-# true: 保留抓取到的 label,忽略与后端 Prometheus 冲突的 label;
-# false: 对冲突的 label,把抓取的 label 前加上 exported_<original-label>,添加后端 Prometheus 增加的 label;
-[ honorLabels: bool | default = false ]
-# 是否使用抓取到 target 上产生的时间。
-# true: 如果 target 中有时间,使用 target 上的时间;
-# false: 直接忽略 target 上的时间;
-[ honorTimestamps: bool | default = true ]
-# basic auth 的认证信息,username/password 填写对应 K8S secret key 的值,注意 secret namespace 需要和 PodMonitor/ServiceMonitor 相同。
-[ basicAuth: BasicAuth ]
-# 通过代理服务来抓取 target 上的指标,填写对应的代理服务地址
-[ proxyUrl: string ]
-# 在抓取数据之后,把 target 上对应的 label 通过 relabel 的机制进行改写,按顺序执行多个 relabel 规则。
-# relabel_config 详见下文说明
-relabelings:
-[ - <relabel_config> ...]
-# 数据抓取完成写入之前,通过 relabel 机制进行改写 label 对应的值,按顺序执行多个 relabel 规则。
-# relabel_config 详见下文说明
-metricRelabelings:
-[ - <relabel_config> ...]
-
-

relabel_config

-

相应配置项说明如下:

-
# 从原始 labels 中取哪些 label 的值进行 relabel,取出来的值通过 separator 中的定义进行字符拼接。
-# 如果是 PodMonitor/ServiceMonitor 对应的配置项为 sourceLabels
-[ source_labels: '[' <labelname> [, ...] ']' ]
-# 定义需要 relabel 的 label 值拼接的字符,默认为 ';'
-[ separator: <string> | default = ; ]
-
-# action 为 replace/hashmod 时,通过 target_label 来指定对应 label name。
-# 如果是 PodMonitor/ServiceMonitor 对应的配置项为 targetLabel
-[ target_label: <labelname> ]
-
-# 需要对 source labels 对应值进行正则匹配的表达式
-[ regex: <regex> | default = (.*) ]
-
-# action 为 hashmod 时用到,根据 source label 对应值 md5 取模值
-[ modulus: <int> ]
-
-# action 为 replace 的时候,通过 replacement 来定义当 regex 匹配之后需要替换的表达式,可以结合 regex 正规则表达式替换
-[ replacement: <string> | default = $1 ]
-
-# 基于 regex 匹配到的值进行相关的操作,对应的 action 如下,默认为 replace:
-# replace: 如果 regex 匹配到,通过 replacement 中定义的值替换相应的值,并通过 target_label 设值并添加相应的 label
-# keep: 如果 regex 没有匹配到,丢弃
-# drop: 如果 regex 匹配到,丢弃
-# hashmod: 通过 moduels 指定的值把 source label 对应的 md5 值取模
-# 并添加一个新的 label,label name 通过 target_label 指定
-# labelmap: 如果 regex 匹配到,使用 replacement 替换对就的 label name
-# labeldrop: 如果 regex 匹配到,删除对应的 label
-# labelkeep: 如果 regex 没有匹配到,删除对应的 label
-[ action: <relabel_action> | default = replace ]
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/collection-manag/probe-module.html b/site/end-user/insight/collection-manag/probe-module.html deleted file mode 100644 index 80c05e8..0000000 --- a/site/end-user/insight/collection-manag/probe-module.html +++ /dev/null @@ -1,672 +0,0 @@ - - - - - - - - - - - - -自定义探测方式 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

自定义探测方式

-

Insight 使用 Prometheus 官方提供的 Blackbox Exporter 作为黑盒监控解决方案,可以通过 HTTP、HTTPS、DNS、ICMP、TCP 和 gRPC 方式对目标实例进行检测。可用于以下使用场景:

-
    -
  • HTTP/HTTPS:URL/API可用性检测
  • -
  • ICMP:主机存活检测
  • -
  • TCP:端口存活检测
  • -
  • DNS:域名解析
  • -
-

在本文中,我们将介绍如何在已有的 Blackbox ConfigMap 中配置自定义的探测方式。

-

Insight 默认未开启 ICMP 探测方式,因为 ICMP 需要更高权限,因此,我们将以 ICMP 和 HTTP 探测方式作为示例,展示如何修改 ConfigMap 以实现自定义的 ICMP 和 HTTP 探测。

-

操作步骤

-
    -
  1. 进入 容器管理集群列表 ,点击进入目标集群的详情;
  2. -
  3. 点击左侧导航,选择 配置与密钥 -> 配置项
  4. -
  5. -

    找到名为 insight-agent-prometheus-blackbox-exporter 的配置项,点击 编辑 YAML

    -

    modules 下添加自定义探测方式:

    -
  6. -
-
-
-
-
module:
-  http_2xx:
-    prober: http
-    timeout: 5s
-    http:
-      valid_http_versions: [HTTP/1.1, HTTP/2]
-      valid_status_codes: []  # Defaults to 2xx
-      method: GET
-
-
-
-

module:
-  ICMP: # ICMP 探测配置的示例
-    prober: icmp
-    timeout: 5s
-    icmp:
-      preferred_ip_protocol: ip4
-icmp_example: # ICMP 探测配置的示例 2
-  prober: icmp
-  timeout: 5s
-  icmp:
-    preferred_ip_protocol: "ip4"
-    source_ip_address: "127.0.0.1"
-
-由于 ICMP 需要更高权限,因此,我们还需要提升 Pod 权限,否则会出现 operation not permitted 的错误。有以下两种方式提升权限:

-
    -
  • -

    方式一: 直接编辑 BlackBox Exporter 部署文件开启

    -
    apiVersion: apps/v1
    -kind: Deployment
    -metadata:
    -  name: insight-agent-prometheus-blackbox-exporter
    -  namespace: insight-system
    -spec:
    -  template:
    -    spec:
    -      containers:
    -        - name: blackbox-exporter
    -          image: # ... (image, args, ports 等保持不变)
    -          imagePullPolicy: IfNotPresent
    -          securityContext:
    -            allowPrivilegeEscalation: false
    -            capabilities:
    -              add:
    -              - NET_RAW
    -              drop:
    -              - ALL
    -            readOnlyRootFilesystem: true
    -            runAsGroup: 0
    -            runAsNonRoot: false
    -            runAsUser: 0
    -
    -
  • -
  • -

    方式二: 通过 Helm Upgrade 方式提权

    -
    prometheus-blackbox-exporter:
    -  enabled: true
    -  securityContext:
    -    runAsUser: 0
    -    runAsGroup: 0
    -    readOnlyRootFilesystem: true
    -    runAsNonRoot: false
    -    allowPrivilegeEscalation: false
    -    capabilities:
    -      add: ["NET_RAW"]
    -
    -
  • -
-
-
-
-
-

Info

-

更多探测方式可参考 blackbox_exporter Configuration

-
-

其他参考

-

以下 YAML 文件中包含了 HTTP、TCP、SMTP、ICMP、DNS 等多种探测方式,可根据需求自行修改 insight-agent-prometheus-blackbox-exporter 的配置文件。

-
-点击查看完整的 YAML 文件 -
kind: ConfigMap
-apiVersion: v1
-metadata:
-  name: insight-agent-prometheus-blackbox-exporter
-  namespace: insight-system
-  labels:
-    app.kubernetes.io/instance: insight-agent
-    app.kubernetes.io/managed-by: Helm
-    app.kubernetes.io/name: prometheus-blackbox-exporter
-    app.kubernetes.io/version: v0.24.0
-    helm.sh/chart: prometheus-blackbox-exporter-8.8.0
-  annotations:
-    meta.helm.sh/release-name: insight-agent
-    meta.helm.sh/release-namespace: insight-system
-data:
-  blackbox.yaml: |
-    modules:
-      HTTP_GET:
-        prober: http
-        timeout: 5s
-        http:
-          method: GET
-          valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
-          follow_redirects: true
-          preferred_ip_protocol: "ip4"
-      HTTP_POST:
-        prober: http
-        timeout: 5s
-        http:
-          method: POST
-          body_size_limit: 1MB
-      TCP:
-        prober: tcp
-        timeout: 5s
-      # 默认未开启:
-      # ICMP:
-      #   prober: icmp
-      #   timeout: 5s
-      #   icmp:
-      #     preferred_ip_protocol: ip4
-      SSH:
-        prober: tcp
-        timeout: 5s
-        tcp:
-          query_response:
-          - expect: "^SSH-2.0-"
-      POP3S:
-        prober: tcp
-        tcp:
-          query_response:
-          - expect: "^+OK"
-          tls: true
-          tls_config:
-            insecure_skip_verify: false
-      http_2xx_example:               # http 探测示例
-        prober: http
-        timeout: 5s                   # 探测的超时时间
-        http:
-          valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]                   # 返回信息中的 Version,一般默认即可
-          valid_status_codes: []  # Defaults to 2xx                       # 有效的返回码范围,如果请求的返回码在该范围内,视为探测成功
-          method: GET                 # 请求方法
-          headers:                    # 请求的头部
-            Host: vhost.example.com
-            Accept-Language: en-US
-            Origin: example.com
-          no_follow_redirects: false  # 是否允许重定向
-          fail_if_ssl: false   
-          fail_if_not_ssl: false
-          fail_if_body_matches_regexp:
-            - "Could not connect to database"
-          fail_if_body_not_matches_regexp:
-            - "Download the latest version here"
-          fail_if_header_matches: # Verifies that no cookies are set
-            - header: Set-Cookie
-              allow_missing: true
-              regexp: '.*'
-          fail_if_header_not_matches:
-            - header: Access-Control-Allow-Origin
-              regexp: '(\*|example\.com)'
-          tls_config:                  # 针对 https 请求的 tls 的配置
-            insecure_skip_verify: false
-          preferred_ip_protocol: "ip4" # defaults to "ip6"                 # 首选的 IP 协议版本
-          ip_protocol_fallback: false  # no fallback to "ip6"            
-      http_post_2xx:                   # 带 Body 的 http 探测的示例
-        prober: http
-        timeout: 5s
-        http:
-          method: POST                 # 探测的请求方法
-          headers:
-            Content-Type: application/json
-          body: '{"username":"admin","password":"123456"}'                   # 探测时携带的 body
-      http_basic_auth_example:         # 带用户名密码的探测的示例
-        prober: http
-        timeout: 5s
-        http:
-          method: POST
-          headers:
-            Host: "login.example.com"
-          basic_auth:                  # 探测时要加的用户名密码
-            username: "username"
-            password: "mysecret"
-      http_custom_ca_example:
-        prober: http
-        http:
-          method: GET
-          tls_config:                  # 指定探测时使用的根证书
-            ca_file: "/certs/my_cert.crt"
-      http_gzip:
-        prober: http
-        http:
-          method: GET
-          compression: gzip            # 探测时使用的压缩方法
-      http_gzip_with_accept_encoding:
-        prober: http
-        http:
-          method: GET
-          compression: gzip
-          headers:
-            Accept-Encoding: gzip
-      tls_connect:                     # TCP 探测的示例
-        prober: tcp
-        timeout: 5s
-        tcp:
-          tls: true                    # 是否使用 TLS
-      tcp_connect_example:
-        prober: tcp
-        timeout: 5s
-      imap_starttls:                   # 探测 IMAP 邮箱服务器的配置示例
-        prober: tcp
-        timeout: 5s
-        tcp:
-          query_response:
-            - expect: "OK.*STARTTLS"
-            - send: ". STARTTLS"
-            - expect: "OK"
-            - starttls: true
-            - send: ". capability"
-            - expect: "CAPABILITY IMAP4rev1"
-      smtp_starttls:                   # 探测 SMTP 邮箱服务器的配置示例
-        prober: tcp
-        timeout: 5s
-        tcp:
-          query_response:
-            - expect: "^220 ([^ ]+) ESMTP (.+)$"
-            - send: "EHLO prober\r"
-            - expect: "^250-STARTTLS"
-            - send: "STARTTLS\r"
-            - expect: "^220"
-            - starttls: true
-            - send: "EHLO prober\r"
-            - expect: "^250-AUTH"
-            - send: "QUIT\r"
-      irc_banner_example:
-        prober: tcp
-        timeout: 5s
-        tcp:
-          query_response:
-            - send: "NICK prober"
-            - send: "USER prober prober prober :prober"
-            - expect: "PING :([^ ]+)"
-              send: "PONG ${1}"
-            - expect: "^:[^ ]+ 001"
-      # icmp_example:                    # ICMP 探测配置的示例
-      #   prober: icmp
-      #   timeout: 5s
-      #   icmp:
-      #     preferred_ip_protocol: "ip4"
-      #     source_ip_address: "127.0.0.1"
-      dns_udp_example:                 # 使用 UDP 进行 DNS 查询的示例
-        prober: dns
-        timeout: 5s
-        dns:
-          query_name: "www.prometheus.io"                 # 要解析的域名
-          query_type: "A"              # 该域名对应的类型
-          valid_rcodes:
-          - NOERROR
-          validate_answer_rrs:
-            fail_if_matches_regexp:
-            - ".*127.0.0.1"
-            fail_if_all_match_regexp:
-            - ".*127.0.0.1"
-            fail_if_not_matches_regexp:
-            - "www.prometheus.io.\t300\tIN\tA\t127.0.0.1"
-            fail_if_none_matches_regexp:
-            - "127.0.0.1"
-          validate_authority_rrs:
-            fail_if_matches_regexp:
-            - ".*127.0.0.1"
-          validate_additional_rrs:
-            fail_if_matches_regexp:
-            - ".*127.0.0.1"
-      dns_soa:
-        prober: dns
-        dns:
-          query_name: "prometheus.io"
-          query_type: "SOA"
-      dns_tcp_example:               # 使用 TCP 进行 DNS 查询的示例
-        prober: dns
-        dns:
-          transport_protocol: "tcp" # defaults to "udp"
-          preferred_ip_protocol: "ip4" # defaults to "ip6"
-          query_name: "www.prometheus.io"
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/collection-manag/service-monitor.html b/site/end-user/insight/collection-manag/service-monitor.html deleted file mode 100644 index ec05e97..0000000 --- a/site/end-user/insight/collection-manag/service-monitor.html +++ /dev/null @@ -1,701 +0,0 @@ - - - - - - - - - - - - - - -服务监控 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

配置服务发现规则

-

可观测 Insight 支持通过 容器管理 创建 CRD ServiceMonitor 的方式来满足您自定义服务发现的采集需求。 -用户可以通过使用 ServiceMonitor 自行定义 Pod 发现的 Namespace 范围以及通过 matchLabel 来选择监听的 Service。

-

前提条件

-

集群已安装 Helm 应用 insight-agent 且处于 运行中 状态。

-

操作步骤

-
    -
  1. -

    选择左侧导航栏的 采集管理 ,查看全部集群采集插件的状态。

    -

    集群列表

    -
  2. -
  3. -

    点击列表中的某个集群名称进入采集配置详情。

    -

    集群列表

    -
  4. -
  5. -

    点击链接跳转到 容器管理 中创建 Service Monitor。

    -
    apiVersion: monitoring.coreos.com/v1
    -kind: ServiceMonitor
    -metadata:
    -  name: micrometer-demo # (1)
    -  namespace: insight-system # (2)
    -    labels: 
    -      operator.insight.io/managed-by: insight
    -spec:
    -  endpoints: # (3)
    -    - honorLabels: true
    -        interval: 15s
    -        path: /actuator/prometheus
    -        port: http
    -  namespaceSelector: # (4)
    -    matchNames:
    -      - insight-system  # (5)
    -  selector: # (6)
    -    matchLabels:
    -          micrometer-prometheus-discovery: "true"
    -
    -
      -
    1. 指定 ServiceMonitor 的名称
    2. -
    3. 指定 ServiceMonitor 的命名空间
    4. -
    5. -

      这是服务端点,代表 Prometheus 所需的采集 Metrics 的地址。 endpoints 为一个数组, - 同时可以创建多个 endpoints 。每个 endpoints 包含三个字段,每个字段的含义如下:

      -
        -
      • interval :指定 Prometheus 对当前 endpoints 采集的周期。单位为秒,在本次示例中设定为 15s
      • -
      • path :指定 Prometheus 的采集路径。在本次示例中,指定为 /actuator/prometheus
      • -
      • port :指定采集数据需要通过的端口,设置的端口为采集的 Service 端口所设置的 name
      • -
      -
    6. -
    7. -

      这是需要发现的 Service 的范围。 namespaceSelector 包含两个互斥字段,字段的含义如下:

      -
        -
      • any :有且仅有一个值 true ,当该字段被设置时,将监听所有符合 Selector 过滤条件的 Service 的变动。
      • -
      • -

        matchNames :数组值,指定需要监听的 namespace 的范围。例如,只想监听 default 和 insight-system - 两个命名空间中的 Service,那么 matchNames 设置如下:

        -
        namespaceSelector:
        -  matchNames:
        -    - default
        -    - insight-system
        -
        -
      • -
      -
    8. -
    9. -

      此处匹配的命名空间为需要暴露指标的应用所在的命名空间

      -
    10. -
    11. 用于选择 Service
    12. -
    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/dashboard/dashboard.html b/site/end-user/insight/dashboard/dashboard.html deleted file mode 100644 index c1bacbe..0000000 --- a/site/end-user/insight/dashboard/dashboard.html +++ /dev/null @@ -1,659 +0,0 @@ - - - - - - - - - - - - - - -仪表盘 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

仪表盘

-

Grafana 是一种开源的数据可视化和监控平台,它提供了丰富的图表和面板,用于实时监控、分析和可视化各种数据源的指标和日志。可观测性 Insight 使用开源 Grafana 提供监控服务,支持从集群、节点、命名空间等多维度查看资源消耗情况,

-

关于开源 Grafana 的详细信息,请参见 Grafana 官方文档

-

操作步骤

-
    -
  1. -

    在左侧导航栏选择 仪表盘

    -
      -
    • -

      Insight /概览 仪表盘中,可查看多选集群的资源使用情况,并以命名空间、容器组等多个维度分析了资源使用、网络、存储等情况。

      -
    • -
    • -

      点击仪表盘左上侧的下拉框可切换集群。

      -
    • -
    • -

      点击仪表盘右下侧可切换查询的时间范围。

      -
    • -
    -

    dashboard

    -
  2. -
  3. -

    Insight 精选多个社区推荐仪表盘,可从节点、命名空间、工作负载等多个维度进行监控。点击 insight-system / Insight /概览 区域切换仪表盘。

    -

    dashboard

    -
  4. -
-
-

Note

-
    -
  1. -

    访问 Grafana UI 请参考以管理员身份登录 Grafana

    -
  2. -
  3. -

    导入自定义仪表盘请参考导入自定义仪表盘

    -
  4. -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/dashboard/import-dashboard.html b/site/end-user/insight/dashboard/import-dashboard.html deleted file mode 100644 index a7aff80..0000000 --- a/site/end-user/insight/dashboard/import-dashboard.html +++ /dev/null @@ -1,690 +0,0 @@ - - - - - - - - - - - - - - -导入自定义仪表盘 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

导入自定义仪表盘

-

通过使用 Grafana CRD,可以将仪表板的管理和部署纳入到 Kubernetes 的生命周期管理中,实现仪表板的版本控制、自动化部署和集群级的管理。本页介绍如何通过 CRD 和 UI 界面导入自定义的仪表盘。

-

操作步骤

-
    -
  1. -

    登录 AI 算力平台 平台,进入 容器管理 ,在集群列表中选择 kpanda-global-cluster

    -
  2. -
  3. -

    选择左侧导航栏的 自定义资源 ,在列表中查找 grafanadashboards.integreatly.org 文件,进入详情。

    -

    导入仪表盘

    -
  4. -
  5. -

    点击 Yaml 创建 ,使用以下模板,在 Json 字段中替换仪表盘 JSON。

    -
      -
    • namespace :填写目标命名空间;
    • -
    • name :填写仪表盘的名称。
    • -
    • label :必填, operator.insight.io/managed-by: insight
    • -
    -
    apiVersion: integreatly.org/v1alpha1
    -kind: GrafanaDashboard
    -metadata:
    -  labels:
    -    app: insight-grafana-operator
    -    operator.insight.io/managed-by: insight
    -  name: sample-dashboard
    -  namespace: insight-system
    -spec:
    -  json: >
    -    {
    -      "id": null,
    -      "title": "Simple Dashboard",
    -      "tags": [],
    -      "style": "dark",
    -      "timezone": "browser",
    -      "editable": true,
    -      "hideControls": false,
    -      "graphTooltip": 1,
    -      "panels": [],
    -      "time": {
    -        "from": "now-6h",
    -        "to": "now"
    -      },
    -      "timepicker": {
    -        "time_options": [],
    -        "refresh_intervals": []
    -      },
    -      "templating": {
    -        "list": []
    -      },
    -      "annotations": {
    -        "list": []
    -      },
    -      "refresh": "5s",
    -      "schemaVersion": 17,
    -      "version": 0,
    -      "links": []
    -    }
    -
    -
  6. -
  7. -

    点击 确认 后,稍等片刻即可在 仪表盘 中查看刚刚导入的仪表盘。

    -
  8. -
-
-

Info

-

自定义设计仪表盘,请参考添加仪表盘面板

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/dashboard/login-grafana.html b/site/end-user/insight/dashboard/login-grafana.html deleted file mode 100644 index d1bb4a2..0000000 --- a/site/end-user/insight/dashboard/login-grafana.html +++ /dev/null @@ -1,641 +0,0 @@ - - - - - - - - - - - - - - -以管理员登录 Grafana - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

访问原生 Grafana

-

Insight 借助 Grafana 提供了丰富的可视化能力,同时保留了访问原生 Grafana 的入口。

-

操作步骤

-
    -
  1. -

    登录浏览器,在浏览器中输入 Grafana 地址。

    -

    访问地址: http://ip:访问端口/ui/insight-grafana/login

    -

    例如: http://10.6.10.233:30209/ui/insight-grafana/login

    -
  2. -
  3. -

    点击右下角的登录,使用默认用户名、密码(admin/admin)进行登录。

    -

    登录 grafana

    -
  4. -
  5. -

    点击 Log in 完成登录。

    -

    成功登录 grafana

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/dashboard/overview.html b/site/end-user/insight/dashboard/overview.html deleted file mode 100644 index a5219ac..0000000 --- a/site/end-user/insight/dashboard/overview.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - - - - - - - - - - -概览 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

概览

-

概率 仅统计已安装 insight-agent 且其运行状态为正常的集群数据。可在概览中多集群的资源概况:

-
    -
  • 告警统计:可查看所有集群的正在告警的统计数据。
  • -
  • 资源消耗:可按 CPU 使用率、内存使用率和磁盘使用率分别查看近一小时 TOP5 集群、节点的资源变化趋势。
  • -
  • 默认按照根据 CPU 使用率排序。您可切换指标切换集群、节点的排序方式。
  • -
  • 资源变化趋势:可查看近 15 天的节点个数趋势以及一小时 Pod 的运行趋势。
  • -
  • 服务请求排行:可查看多集群中请求延时、错误率排行 TOP5 的服务及所在集群和命名空间。
  • -
-

操作步骤

-

在左边导航栏选择 概览

-

概览

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/data-query/log.html b/site/end-user/insight/data-query/log.html deleted file mode 100644 index 8b59e62..0000000 --- a/site/end-user/insight/data-query/log.html +++ /dev/null @@ -1,667 +0,0 @@ - - - - - - - - - - - - - - -日志 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

日志查询

-

Insight 默认采集节点日志、容器日志以及 kubernetes 审计日志。在日志查询页面中,可查询登录账号权限内的标准输出 (stdout) 日志,包括节点日志、产品日志、Kubenetes 审计日志等,快速在大量日志中查询到所需的日志,同时结合日志的来源信息和上下文原始数据辅助定位问题。

-

操作步骤

-
    -
  1. 点击一级导航栏进入 可观测性
  2. -
  3. -

    左侧导航栏中,选择 日志

    -
      -
    • 默认查询最近 24 小时;
    • -
    • 第一次进入时,默认根据登录账号权限查询有权限的集群或命名空间的容器日志;
    • -
    -

    log

    -
  4. -
  5. -

    顶部 Tab 默认进入 普通查询

    -
      -
    1. 点击 筛选 展开过滤面板,可切换日志搜索条件和类型。
    2. -
    3. -

      日志类型:

      -
        -
      • 容器日志 :记录集群中容器内部的活动和事件,包括应用程序的输出、错误消息、警告和调试信息等。支持通过集群、命名空间、容器组、容器过滤日志。
      • -
      • 节点日志 :记录集群中每个节点的系统级别日志。这些日志包含节点的操作系统、内核、服务和组件的相关信息。支持通过集群、节点、文件路径过滤日志。
      • -
      -
    4. -
    5. -

      支持对单个关键字进行模糊搜索。

      -

      log

      -
    6. -
    -
  6. -
  7. -

    顶部切换 Tab 选择 Lucene 语法查询

    -

    第一次进入时,默认选择登录账号权限查询有权限的集群或命名空间的容器日志。

    -

    log

    -

    Lucene 语法说明:

    -
      -
    1. 使用 逻辑操作符(AND、OR、NOT、"" )符查询多个关键字,例如:keyword1 AND (keyword2 OR keyword3) NOT keyword4。
    2. -
    3. 使用波浪号 (~) 实现模糊查询,在 "~" 后可指定可选的参数,用于控制模糊查询的相似度,不指定则默认使用 0.5。例如:error~。
    4. -
    5. 使用通配符 (*、?) 用作单字符通配符,表示匹配任意一个字符。
    6. -
    7. 使用方括号 [ ] 或花括号 { } 来查询范围,方括号 [ ] 表示闭区间,包含边界值。花括号 { } 表示开区间,排除边界值。范围查询只适用于能够进行排序的字段类型,如数字、日期等。例如:timestamp:[2022-01-01 TO 2022-01-31]。
    8. -
    9. 更多用法请查看:Lucene 语法说明
    10. -
    -
  8. -
-

其他操作

-

查看日志上下文

-

点击日志后的按钮,在右侧划出面板中可查看该条日志的默认 100 条上下文。可切换 显示行数 查看更多上下文内容。

-

log

-

导出日志数据

-

点击列表右上侧的下载按钮。

-
    -
  • 支持配置导出的日志字段,根据日志类型可配置的字段不同,其中 日志内容 字段为必选。
  • -
  • 支持将日志查询结果导出为 .txt.csv 格式。
  • -
-

log

-
-

Note

-

若需指定不采集某一些容器组的日志,可参考:容器日志黑名单

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/data-query/metric.html b/site/end-user/insight/data-query/metric.html deleted file mode 100644 index 206b8d7..0000000 --- a/site/end-user/insight/data-query/metric.html +++ /dev/null @@ -1,630 +0,0 @@ - - - - - - - - - - - - - - -指标 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

指标查询

-

指标查询支持查询容器各资源的指标数据,可查看监控指标的趋势变化。同时,高级查询支持原生 PromQL 语句进行指标查询。

-

前提条件

- -

操作步骤

-
    -
  1. -

    点击一级导航栏进入 可观测性

    -
  2. -
  3. -

    左侧导航栏中,选择 指标

    -
  4. -
  5. -

    选择集群、类型、节点、指标名称查询条件后,点击 搜索 ,屏幕右侧将显示对应指标图表及数据详情。

    -
  6. -
  7. -

    支持自定义时间范围。可手动点击 刷新 图标或选择默认时间间隔进行刷新。

    -

    查询结果

    -
  8. -
  9. -

    点击 高级查询 页签通过原生的 PromQL 查询。

    -

    高级查询

    -
  10. -
-
-

Note

-

参阅 PromQL 语法

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/images/big-log01.png b/site/end-user/insight/images/big-log01.png deleted file mode 100644 index b178b19..0000000 Binary files a/site/end-user/insight/images/big-log01.png and /dev/null differ diff --git a/site/end-user/insight/images/big-log02.png b/site/end-user/insight/images/big-log02.png deleted file mode 100644 index a28c76a..0000000 Binary files a/site/end-user/insight/images/big-log02.png and /dev/null differ diff --git a/site/end-user/insight/images/big-log03.png b/site/end-user/insight/images/big-log03.png deleted file mode 100644 index f6616d8..0000000 Binary files a/site/end-user/insight/images/big-log03.png and /dev/null differ diff --git a/site/end-user/insight/images/big-log04.png b/site/end-user/insight/images/big-log04.png deleted file mode 100644 index bac3d72..0000000 Binary files a/site/end-user/insight/images/big-log04.png and /dev/null differ diff --git a/site/end-user/insight/images/big-log05.png b/site/end-user/insight/images/big-log05.png deleted file mode 100644 index db60fa0..0000000 Binary files a/site/end-user/insight/images/big-log05.png and /dev/null differ diff --git a/site/end-user/insight/images/big-log06.png b/site/end-user/insight/images/big-log06.png deleted file mode 100644 index 6e9b8be..0000000 Binary files a/site/end-user/insight/images/big-log06.png and /dev/null differ diff --git a/site/end-user/insight/images/cluster-1.png b/site/end-user/insight/images/cluster-1.png deleted file mode 100644 index 7d864a3..0000000 Binary files a/site/end-user/insight/images/cluster-1.png and /dev/null differ diff --git a/site/end-user/insight/images/cluster.png b/site/end-user/insight/images/cluster.png deleted file mode 100644 index 9f1b922..0000000 Binary files a/site/end-user/insight/images/cluster.png and /dev/null differ diff --git a/site/end-user/insight/images/container01.png b/site/end-user/insight/images/container01.png deleted file mode 100644 index 546b73c..0000000 Binary files a/site/end-user/insight/images/container01.png and /dev/null differ diff --git a/site/end-user/insight/images/dingding.png b/site/end-user/insight/images/dingding.png deleted file mode 100644 index 0e5f35d..0000000 Binary files a/site/end-user/insight/images/dingding.png and /dev/null differ diff --git a/site/end-user/insight/images/find_root_cause/10.png b/site/end-user/insight/images/find_root_cause/10.png deleted file mode 100644 index 7d83883..0000000 Binary files a/site/end-user/insight/images/find_root_cause/10.png and /dev/null differ diff --git a/site/end-user/insight/images/import-template.png b/site/end-user/insight/images/import-template.png deleted file mode 100644 index a56214b..0000000 Binary files a/site/end-user/insight/images/import-template.png and /dev/null differ diff --git a/site/end-user/insight/images/inhibition-1.png b/site/end-user/insight/images/inhibition-1.png deleted file mode 100644 index afcac8e..0000000 Binary files a/site/end-user/insight/images/inhibition-1.png and /dev/null differ diff --git a/site/end-user/insight/images/inhibition.png b/site/end-user/insight/images/inhibition.png deleted file mode 100644 index 2fc334d..0000000 Binary files a/site/end-user/insight/images/inhibition.png and /dev/null differ diff --git a/site/end-user/insight/images/inhibition01.png b/site/end-user/insight/images/inhibition01.png deleted file mode 100644 index 5653387..0000000 Binary files a/site/end-user/insight/images/inhibition01.png and /dev/null differ diff --git a/site/end-user/insight/images/inhibition02.png b/site/end-user/insight/images/inhibition02.png deleted file mode 100644 index 2ce4352..0000000 Binary files a/site/end-user/insight/images/inhibition02.png and /dev/null differ diff --git a/site/end-user/insight/images/inhibition03.png b/site/end-user/insight/images/inhibition03.png deleted file mode 100644 index e9c86a0..0000000 Binary files a/site/end-user/insight/images/inhibition03.png and /dev/null differ diff --git a/site/end-user/insight/images/inhibition04.png b/site/end-user/insight/images/inhibition04.png deleted file mode 100644 index 2d63479..0000000 Binary files a/site/end-user/insight/images/inhibition04.png and /dev/null differ diff --git a/site/end-user/insight/images/insight-agent.svg b/site/end-user/insight/images/insight-agent.svg deleted file mode 100644 index 97cbf4a..0000000 --- a/site/end-user/insight/images/insight-agent.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - Icon / Logo 20*20 / Insight Agent@green - - - - - - - - \ No newline at end of file diff --git a/site/end-user/insight/images/insight-ns-toleration.png b/site/end-user/insight/images/insight-ns-toleration.png deleted file mode 100644 index b2eaa81..0000000 Binary files a/site/end-user/insight/images/insight-ns-toleration.png and /dev/null differ diff --git a/site/end-user/insight/images/insight.svg b/site/end-user/insight/images/insight.svg deleted file mode 100644 index 1727286..0000000 --- a/site/end-user/insight/images/insight.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - insight - - - - - - \ No newline at end of file diff --git a/site/end-user/insight/images/installagent01.png b/site/end-user/insight/images/installagent01.png deleted file mode 100644 index edb3c27..0000000 Binary files a/site/end-user/insight/images/installagent01.png and /dev/null differ diff --git a/site/end-user/insight/images/installagent02.png b/site/end-user/insight/images/installagent02.png deleted file mode 100644 index b9f8e1f..0000000 Binary files a/site/end-user/insight/images/installagent02.png and /dev/null differ diff --git a/site/end-user/insight/images/installagent03.png b/site/end-user/insight/images/installagent03.png deleted file mode 100644 index cf298d0..0000000 Binary files a/site/end-user/insight/images/installagent03.png and /dev/null differ diff --git a/site/end-user/insight/images/ipavo.svg b/site/end-user/insight/images/ipavo.svg deleted file mode 100644 index d9476d1..0000000 --- a/site/end-user/insight/images/ipavo.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - Icon / 00_Action / bar-chart - - - - - - - \ No newline at end of file diff --git a/site/end-user/insight/images/kpandaservice.png b/site/end-user/insight/images/kpandaservice.png deleted file mode 100644 index 9f789fa..0000000 Binary files a/site/end-user/insight/images/kpandaservice.png and /dev/null differ diff --git a/site/end-user/insight/images/log04.png b/site/end-user/insight/images/log04.png deleted file mode 100644 index e72fd36..0000000 Binary files a/site/end-user/insight/images/log04.png and /dev/null differ diff --git a/site/end-user/insight/images/logfilter00.png b/site/end-user/insight/images/logfilter00.png deleted file mode 100644 index ade153c..0000000 Binary files a/site/end-user/insight/images/logfilter00.png and /dev/null differ diff --git a/site/end-user/insight/images/map-setting.png b/site/end-user/insight/images/map-setting.png deleted file mode 100644 index 9c9539c..0000000 Binary files a/site/end-user/insight/images/map-setting.png and /dev/null differ diff --git a/site/end-user/insight/images/msg-detail.png b/site/end-user/insight/images/msg-detail.png deleted file mode 100644 index 4fd4dab..0000000 Binary files a/site/end-user/insight/images/msg-detail.png and /dev/null differ diff --git a/site/end-user/insight/images/node.png b/site/end-user/insight/images/node.png deleted file mode 100644 index c8d1efe..0000000 Binary files a/site/end-user/insight/images/node.png and /dev/null differ diff --git a/site/end-user/insight/images/notify-01.png b/site/end-user/insight/images/notify-01.png deleted file mode 100644 index 5b80920..0000000 Binary files a/site/end-user/insight/images/notify-01.png and /dev/null differ diff --git a/site/end-user/insight/images/notify-02.png b/site/end-user/insight/images/notify-02.png deleted file mode 100644 index 70049ed..0000000 Binary files a/site/end-user/insight/images/notify-02.png and /dev/null differ diff --git a/site/end-user/insight/images/policy-builtin.png b/site/end-user/insight/images/policy-builtin.png deleted file mode 100644 index ab2d8a4..0000000 Binary files a/site/end-user/insight/images/policy-builtin.png and /dev/null differ diff --git a/site/end-user/insight/images/policy02.png b/site/end-user/insight/images/policy02.png deleted file mode 100644 index 2a4e13e..0000000 Binary files a/site/end-user/insight/images/policy02.png and /dev/null differ diff --git a/site/end-user/insight/images/policy03.png b/site/end-user/insight/images/policy03.png deleted file mode 100644 index a8aa01b..0000000 Binary files a/site/end-user/insight/images/policy03.png and /dev/null differ diff --git a/site/end-user/insight/images/policy07.png b/site/end-user/insight/images/policy07.png deleted file mode 100644 index 1302794..0000000 Binary files a/site/end-user/insight/images/policy07.png and /dev/null differ diff --git a/site/end-user/insight/images/policy08.png b/site/end-user/insight/images/policy08.png deleted file mode 100644 index 9758b47..0000000 Binary files a/site/end-user/insight/images/policy08.png and /dev/null differ diff --git a/site/end-user/insight/images/probe03.png b/site/end-user/insight/images/probe03.png deleted file mode 100644 index d3c5a11..0000000 Binary files a/site/end-user/insight/images/probe03.png and /dev/null differ diff --git a/site/end-user/insight/images/service-1.png b/site/end-user/insight/images/service-1.png deleted file mode 100644 index c815654..0000000 Binary files a/site/end-user/insight/images/service-1.png and /dev/null differ diff --git a/site/end-user/insight/images/service-map.png b/site/end-user/insight/images/service-map.png deleted file mode 100644 index 091169b..0000000 Binary files a/site/end-user/insight/images/service-map.png and /dev/null differ diff --git a/site/end-user/insight/images/service.png b/site/end-user/insight/images/service.png deleted file mode 100644 index c9e01fc..0000000 Binary files a/site/end-user/insight/images/service.png and /dev/null differ diff --git a/site/end-user/insight/images/service01.png b/site/end-user/insight/images/service01.png deleted file mode 100644 index 4a4f557..0000000 Binary files a/site/end-user/insight/images/service01.png and /dev/null differ diff --git a/site/end-user/insight/images/servicemap.png b/site/end-user/insight/images/servicemap.png deleted file mode 100644 index 8c6d448..0000000 Binary files a/site/end-user/insight/images/servicemap.png and /dev/null differ diff --git a/site/end-user/insight/images/servicemap01.png b/site/end-user/insight/images/servicemap01.png deleted file mode 100644 index 5abde06..0000000 Binary files a/site/end-user/insight/images/servicemap01.png and /dev/null differ diff --git a/site/end-user/insight/images/servicemap02.png b/site/end-user/insight/images/servicemap02.png deleted file mode 100644 index 857fa5f..0000000 Binary files a/site/end-user/insight/images/servicemap02.png and /dev/null differ diff --git a/site/end-user/insight/images/silence03.png b/site/end-user/insight/images/silence03.png deleted file mode 100644 index c7b2220..0000000 Binary files a/site/end-user/insight/images/silence03.png and /dev/null differ diff --git a/site/end-user/insight/images/sms00.png b/site/end-user/insight/images/sms00.png deleted file mode 100644 index 4e58ac4..0000000 Binary files a/site/end-user/insight/images/sms00.png and /dev/null differ diff --git a/site/end-user/insight/images/sms01.png b/site/end-user/insight/images/sms01.png deleted file mode 100644 index e4e18b8..0000000 Binary files a/site/end-user/insight/images/sms01.png and /dev/null differ diff --git a/site/end-user/insight/images/sms02.png b/site/end-user/insight/images/sms02.png deleted file mode 100644 index 3da97b3..0000000 Binary files a/site/end-user/insight/images/sms02.png and /dev/null differ diff --git a/site/end-user/insight/images/smsserver01.png b/site/end-user/insight/images/smsserver01.png deleted file mode 100644 index 22c5fce..0000000 Binary files a/site/end-user/insight/images/smsserver01.png and /dev/null differ diff --git a/site/end-user/insight/images/smsserver02.png b/site/end-user/insight/images/smsserver02.png deleted file mode 100644 index 3660ead..0000000 Binary files a/site/end-user/insight/images/smsserver02.png and /dev/null differ diff --git a/site/end-user/insight/images/template01.png b/site/end-user/insight/images/template01.png deleted file mode 100644 index d7f6144..0000000 Binary files a/site/end-user/insight/images/template01.png and /dev/null differ diff --git a/site/end-user/insight/images/template02.png b/site/end-user/insight/images/template02.png deleted file mode 100644 index 5e908b3..0000000 Binary files a/site/end-user/insight/images/template02.png and /dev/null differ diff --git a/site/end-user/insight/images/template03.png b/site/end-user/insight/images/template03.png deleted file mode 100644 index c516692..0000000 Binary files a/site/end-user/insight/images/template03.png and /dev/null differ diff --git a/site/end-user/insight/images/template04.png b/site/end-user/insight/images/template04.png deleted file mode 100644 index 86b1477..0000000 Binary files a/site/end-user/insight/images/template04.png and /dev/null differ diff --git a/site/end-user/insight/images/template05.png b/site/end-user/insight/images/template05.png deleted file mode 100644 index 1c2d870..0000000 Binary files a/site/end-user/insight/images/template05.png and /dev/null differ diff --git a/site/end-user/insight/images/trace02.png b/site/end-user/insight/images/trace02.png deleted file mode 100644 index bde1b94..0000000 Binary files a/site/end-user/insight/images/trace02.png and /dev/null differ diff --git a/site/end-user/insight/images/tracelog.png b/site/end-user/insight/images/tracelog.png deleted file mode 100644 index 3810728..0000000 Binary files a/site/end-user/insight/images/tracelog.png and /dev/null differ diff --git a/site/end-user/insight/images/vmdisk14.png b/site/end-user/insight/images/vmdisk14.png deleted file mode 100644 index ca100a8..0000000 Binary files a/site/end-user/insight/images/vmdisk14.png and /dev/null differ diff --git a/site/end-user/insight/images/webhook.png b/site/end-user/insight/images/webhook.png deleted file mode 100644 index 69ef57a..0000000 Binary files a/site/end-user/insight/images/webhook.png and /dev/null differ diff --git a/site/end-user/insight/images/workload-1.png b/site/end-user/insight/images/workload-1.png deleted file mode 100644 index 63f5a62..0000000 Binary files a/site/end-user/insight/images/workload-1.png and /dev/null differ diff --git a/site/end-user/insight/images/workload-2.png b/site/end-user/insight/images/workload-2.png deleted file mode 100644 index 525dd78..0000000 Binary files a/site/end-user/insight/images/workload-2.png and /dev/null differ diff --git a/site/end-user/insight/images/workload.png b/site/end-user/insight/images/workload.png deleted file mode 100644 index 90e5453..0000000 Binary files a/site/end-user/insight/images/workload.png and /dev/null differ diff --git a/site/end-user/insight/infra/cluster.html b/site/end-user/insight/infra/cluster.html deleted file mode 100644 index 03b8284..0000000 --- a/site/end-user/insight/infra/cluster.html +++ /dev/null @@ -1,716 +0,0 @@ - - - - - - - - - - - - - - -集群 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-

集群监控

-

通过集群监控,你可以查看集群的基本信息、该集群中的资源消耗以及一段时间的资源消耗变化趋势等。

-

前提条件

-

集群中已安装 insight-agent 且应用处于 运行中 状态。

-

操作步骤

-
    -
  1. -

    进入 可观测性 产品模块。

    -
  2. -
  3. -

    在左边导航栏选择 基础设施 -> 集群 。在该页面可查看以下信息:

    -
      -
    • 资源概览 :多选集群中的节点、工作负载的正常和全部的数量统计;
    • -
    • 故障 :统计当前集群产生的告警数量;
    • -
    • 资源消耗 :所选集群的 CPU、内存、磁盘的实际使用量和总量;
    • -
    • 指标说明 :所选集群的 CPU、内存、磁盘读写、网络接收发送的变化趋势。
    • -
    -

    集群监控

    -
  4. -
  5. -

    切换到 资源水位线监控 页签,可查看当前集群的更多监控数据。

    -

    集群监控

    -
  6. -
-

参考指标说明

- - - - - - - - - - - - - - - - - - - - - - - - - -
指标名说明
CPU 使用率该指标是指集群中所有 Pod 资源的实际 CPU 用量与所有节点的 CPU 总量的比率。
CPU 分配率该指标是指集群中所有 Pod 的 CPU 请求量的总和与所有节点的 CPU 总量的比率。
内存使用率该指标是指集群中所有 Pod 资源的实际内存用量与所有节点的内存总量的比率。
内存分配率该指标是指集群中所有 Pod 的内存请求量的总和与所有节点的内存总量的比率。
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/infra/container.html b/site/end-user/insight/infra/container.html deleted file mode 100644 index 805ec23..0000000 --- a/site/end-user/insight/infra/container.html +++ /dev/null @@ -1,754 +0,0 @@ - - - - - - - - - - - - - - -工作负载 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-

容器监控

-

容器监控是对集群管理中工作负载的监控,在列表中可查看工作负载的基本信息和状态。在工作负载详情页,可查看正在告警的数量以及 CPU、内存等资源消耗的变化趋势。

-

前提条件

-

集群已安装 insight-agent,且所有的容器组处于 运行中 状态。

- -

操作步骤

-

请按照以下步骤查看服务监控指标:

-
    -
  1. -

    进入 可观测性 产品模块。

    -
  2. -
  3. -

    在左边导航栏选择 基础设施 -> 工作负载

    -
  4. -
  5. -

    切换顶部 Tab,查看不同类型工作负载的数据。

    -

    容器监控

    -
  6. -
  7. -

    点击目标工作负载名称查看详情。

    -
      -
    1. 故障:在故障卡片中统计该工作负载当前正在告警的总数。
    2. -
    3. 资源消耗:在该卡片可查看工作负载的 CPU、内存、网络的使用情况。
    4. -
    5. 监控指标:可查看工作负载默认 1 小时的 CPU、内存、网络和磁盘的变化趋势。
    6. -
    -

    容器监控

    -
  8. -
  9. -

    切换 Tab 到 容器组列表 ,可查看工作负载的各个容器组状态、所在节点、重启次数等信息。

    -

    容器监控

    -
  10. -
  11. -

    切换 Tab 到 JVM 监控 ,可查看各个容器组的 JVM 指标。

    -

    JVM 监控

    -
    -

    Note

    -
      -
    1. JVM 监控功能仅支持 Java 语言。
    2. -
    3. 开启 JVM 监控功能,请参考开始监控 Java 应用
    4. -
    -
    -
  12. -
-

指标参考说明

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
指标名称说明
CPU 使用量工作负载下所有容器组的 CPU 使用量之和。
CPU 请求量工作负载下所有容器组的 CPU 请求量之和。
CPU 限制量工作负载下所有容器组的 CPU 限制量之和。
内存使用量工作负载下所有容器组的内存使用量之和。
内存请求量工作负载下所有容器组的内存使用量之和。
内存限制量工作负载下所有容器组的内存限制量之和。
磁盘读写速率指定时间范围内磁盘每秒连续读取和写入的总和,表示磁盘每秒读取和写入操作数的性能度量。
网络发送接收速率指定时间范围内,按工作负载统计的网络流量的流入、流出速率。
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/infra/event.html b/site/end-user/insight/infra/event.html deleted file mode 100644 index 372b913..0000000 --- a/site/end-user/insight/infra/event.html +++ /dev/null @@ -1,753 +0,0 @@ - - - - - - - - - - - - - - -事件查询 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

事件查询

-

AI 算力平台 Insight 支持按集群、命名空间查询事件,并提供了事件状态分布图,对重要事件进行统计。

-

操作步骤

-
    -
  1. 点击一级导航栏进入 可观测性
  2. -
  3. -

    左侧导航栏中,选择 基础设置 > 事件

    -

    事件

    -
  4. -
-

事件状态分布

-

默认显示最近 12 小时内发生的事件,您可以在右上角选择不同的时间范围来查看较长或较短的时间段。 -您还可以自定义采样间隔为 1 分钟至 5 小时。

-

通过事件状态分布图,您可以直观地了解事件的密集程度和分散情况。 -这有助于对后续的集群运维进行评估,并做好准备和安排工作。 -如果事件密集发生在特定时段,您可能需要调配更多的资源或采取相应措施来确保集群稳定性和高可用性。 -而如果事件较为分散,在此期间您可以合理安排其他运维工作,例如系统优化、升级或处理其他任务。

-

通过综合考虑事件状态分布图和时间范围,您能更好地规划和管理集群的运维工作,确保系统稳定性和可靠性。

-

事件总数和统计

-

通过重要事件统计,您可以方便地了解镜像拉取失败次数、健康检查失败次数、容器组(Pod)运行失败次数、 -Pod 调度失败次数、容器 OOM 内存耗尽次数、存储卷挂载失败次数以及所有事件的总数。这些事件通常分为「Warning」和「Normal」两类。

-

事件列表

-

事件列表以时间为轴,以流水的形式展示发生的事件。您可以根据「最近发生时间」和「级别」进行排序。

-

点击右侧的 ⚙️ 图标,您可以根据自己的喜好和需求来自定义显示的列。

-

在需要的时候,您还可以点击刷新图标来更新当前的事件列表。

-

其他操作

-
    -
  1. -

    在事件列表中操作列的图标,可查看某一事件的元数据信息。

    -

    history

    -
  2. -
  3. -

    点击顶部页签的 上下文 可查看该事件对应资源的历史事件记录。

    -

    history

    -
  4. -
-

参考

-

有关系统自带的 Event 事件的详细含义,请参阅 Kubenetest API 事件列表

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/infra/namespace.html b/site/end-user/insight/infra/namespace.html deleted file mode 100644 index e11ce23..0000000 --- a/site/end-user/insight/infra/namespace.html +++ /dev/null @@ -1,721 +0,0 @@ - - - - - - - - - - - - - - -命名空间 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

命名空间监控

-

以命名空间为维度,快速查询命名空间内的资源消耗和变化趋势。

-

前提条件

-

集群中已安装 insight-agent 且应用处于 运行中 状态。

-

操作步骤

-
    -
  1. -

    进入 可观测性 产品模块。

    -
  2. -
  3. -

    在左边导航栏选择 基础设施 > 命名空间 。在该页面可查看以下信息:

    -
      -
    1. 切换命名空间:在顶部切换集群或命名空间;
    2. -
    3. 资源概览:统计所选命名空间下的正常和全部工作负载的数量;
    4. -
    5. 故障:统计所选命名空间下产生的告警数量;
    6. -
    7. 事件:统计所选命名空间下 24 小时内 Warning 级别的事件数量;
    8. -
    9. 资源消耗:统计所选命名空间下容器组的 CPU、内存使用量之和 及 CPU、内存配额情况。
    10. -
    -

    命名空间

    -
  4. -
-

指标说明

- - - - - - - - - - - - - - - - - - - - - - - - - -
指标名说明
CPU 使用量所选命名空间中容器组的 CPU 使用量之和
内存使用量所选命名空间中容器组的内存使用量之和
容器组 CPU 使用量命名空间中各容器组的 CPU 使用量
容器组内存使用量命名空间中各容器组的内存使用量
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/infra/node.html b/site/end-user/insight/infra/node.html deleted file mode 100644 index 4cd0231..0000000 --- a/site/end-user/insight/infra/node.html +++ /dev/null @@ -1,677 +0,0 @@ - - - - - - - - - - - - - - -节点 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

节点监控

-

通过节点监控,你可以概览所选集群下节点的当前健康状态、对应容器组的异常数量; -在当前节点详情页,你可以查看正在告警的数量以及 CPU、内存、磁盘等资源消耗的变化趋势图。

-

前提条件

-

集群中已安装 insight-agent 且应用处于 运行中 状态。

-

操作步骤

-
    -
  1. -

    进入 可观测性 产品模块。

    -
  2. -
  3. -

    在左边导航栏选择 基础设施 -> 节点 。在该页面可查看以下信息:

    -
      -
    • 集群切换 :切换顶部的下拉框可切换集群;
    • -
    • 节点列表 :所选集群中的节点列表,单击切换节点。
    • -
    • 故障 :统计当前集群产生的告警数量;
    • -
    • 资源消耗 :所选节点的 CPU、内存、磁盘的实际使用量和总量;
    • -
    • 指标说明 :所选节点的 CPU、内存、磁盘读写、网络接收发送的变化趋势。
    • -
    -

    节点监控

    -
  4. -
  5. -

    切换到 资源水位线监控 页签,可查看当前节点的更多监控数据。

    -

    节点监控

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/infra/probe.html b/site/end-user/insight/infra/probe.html deleted file mode 100644 index 78ba078..0000000 --- a/site/end-user/insight/infra/probe.html +++ /dev/null @@ -1,815 +0,0 @@ - - - - - - - - - - - - - - -拨测 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

拨测

-

拨测(Probe)指的是基于黑盒监控,定期通过 HTTP、TCP 等方式对目标进行连通性测试,快速发现正在发生的故障。

-

Insight 基于 Prometheus Blackbox Exporter -工具通过 HTTP、HTTPS、DNS、TCP 和 ICMP 等协议,对网络进行探测并返回探测结果以便了解网络状态。

-

前提条件

-

目标集群中已成功部署 insight-agent,且处于 运行中 状态。

-

查看拨测任务

-
    -
  1. 进入 可观测性 产品模块;
  2. -
  3. -

    在左边导航栏选择 基础设施 -> 拨测

    -
      -
    • 点击表格中的集群或命名空间下拉框,可切换集群和命名空间
    • -
    • 你可以点击右侧的 ⚙️ 修改显示的列,默认为拨测名称、探测方式、探测目标、连通状态、创建时间
    • -
    • 连通状态有 3 种:
        -
      • 正常:Probe 成功连接到了目标,目标返回了预期的响应
      • -
      • 异常:Probe 无法连接到目标,或目标没有返回预期的响应
      • -
      • Pending:Probe 正在尝试连接目标
      • -
      -
    • -
    • 你可以在 🔍 搜索框中键入名称,模糊搜索某些拨测任务
    • -
    -

    probe

    -
  4. -
-

创建拨测任务

-
    -
  1. 点击 创建拨测任务
  2. -
  3. -

    填写基本信息后点击 下一步

    -
      -
    • 集群:选择需要拨测的集群
    • -
    • 命名空间:拨测所在的命名空间
    • -
    -

    probe

    -
  4. -
  5. -

    配置探测参数。

    -
      -
    • Blackbox 实例:选择负责探测的 blackbox 实例
    • -
    • 探测方式:
        -
      • HTTP:通过发送 HTTP 或 HTTPS 请求到目标 URL,检测其连通性和响应时间,这可以用于监测网站或 Web 应用的可用性和性能
      • -
      • TCP:通过建立到目标主机和端口的 TCP 连接,检测其连通性和响应时间。这可以用于监测基于 TCP 的服务,如 Web 服务器、数据库服务器等
      • -
      • 其他:支持通过配置 ConfigMap 自定义探测方式,可参考自定义拨测方式
      • -
      -
    • -
    • 探测目标:探测的目标地址,支持域名或 IP 地址等
    • -
    • 标签:自定义标签,该标签会自动添加到 Prometheus 的 Label 中
    • -
    • 探测间隔:探测间隔时间
    • -
    • 探测超时:探测目标时的最长等待时间
    • -
    -

    probe

    -
  6. -
  7. -

    配置完成后,点击 确定 即可完成创建。

    -
  8. -
-
-

Warning

-

拨测任务创建完成后,需要大概 3 分钟的时间来同步配置。在此期间,不会进行探测,无法查看探测结果。

-
-

编辑拨测任务

-

点击列表右侧的 -> 编辑,完成编辑后点击 确定

-

probe

-

查看监控面板

-

点击拨测名称 查看拨测任务中每个目标的监控状态,以图表方式显示针对网络状况的探测结果。

-

probe

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
指标名称描述
Current Status Response表示 HTTP 探测请求的响应状态码。
Ping Status表示探测请求是否成功。1 表示探测请求成功,0 表示探测请求失败。
IP Protocol表示探测请求使用的 IP 协议版本。
SSL Expiry表示 SSL/TLS 证书的最早到期时间。
DNS Response (Latency)表示整个探测过程的持续时间,单位是秒。
HTTP Duration表示从发送请求到接收到完整响应的整个过程的时间。
-

删除拨测任务

-

点击列表右侧的 -> 删除,确认无误后点击 确定

-

probe

-
-

Caution

-

删除操作不可恢复,请谨慎操作。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/big-log-and-trace.html b/site/end-user/insight/quickstart/install/big-log-and-trace.html deleted file mode 100644 index 85342d5..0000000 --- a/site/end-user/insight/quickstart/install/big-log-and-trace.html +++ /dev/null @@ -1,676 +0,0 @@ - - - - - - - - - - - - -开启大日志和大链路模式 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

开启大日志和大链路模式

-

可观测性模块为了提高大规模环境下的数据写入能力,支持将日志切换为 -大日志 模式、将链路切换为 大链路 模式。本文将介绍以下几种开启方式:

- -

日志

-

本节说明普通日志模式和大日志模式的区别。

-

日志模式

-

组件:Fluentbit + Elasticsearch

-

该模式简称为 ES 模式,数据流图如下所示:

-

日志模式

-

大日志模式

-

组件:Fluentbit + Kafka + Vector + Elasticsearch

-

该模式简称为 Kafka 模式,数据流图如下所示:

-

大日志模式

-

链路

-

本节说明普通链路模式和大链路模式的区别。

-

链路模式

-

组件:Agent opentelemetry-collector + Global opentelemetry-collector + Jaeger-collector + Elasticsearch

-

该模式简称为 OTlp 模式,数据流图如下所示:

-

链路模式

-

大链路模式

-

组件:Agent opentelemetry-collector + Kafka + Global opentelemetry-collector + Jaeger-collector + Elasticsearch

-

该模式简称为 Kafka 模式,数据流图如下所示:

-

大链路模式

-

通过安装器开启

-

通过安装器部署/升级 AI 算力中心 时使用的 manifest.yaml 中存在 infrastructures.kafka 字段, -如果想开启可观测的大日志和大链路模式,则需要启用 kafka:

-
manifest.yaml
apiVersion: manifest.daocloud.io/v1alpha1
-kind: DCEManifest
-...
-infrastructures:
-  ...
-  kafka:
-    enable: true # 默认为 false
-    cpuLimit: 1
-    memLimit: 2Gi
-    pvcSize: 15Gi
-
-

开启

-

安装时使用启用 kafka 的 manifest.yaml,则会默认安装 kafka 中间件, -并在安装 Insight 时默认开启大日志和大链路模式。安装命令为:

-
./dce5-installer cluster-create -c clusterConfig.yaml -m manifest.yaml
-
-

升级

-

升级同样是修改 kafka 字段。但需要注意的是,因为老环境安装时使用的是 kafka: false, -所以环境中无 kafka。此时升级需要指定升级 middleware,才会同时安装 kafka 中间件。升级命令为:

-
./dce5-installer cluster-create -c clusterConfig.yaml -m manifest.yaml -u gproduct,middleware
-
-
-

Note

-

在升级完成后,需要手动重启以下组件:

-
    -
  • insight-agent-fluent-bit
  • -
  • insight-agent-opentelemetry-collector
  • -
  • insight-opentelemetry-collector
  • -
-
-

通过 Helm 命令开启

-

前提条件:需要保证存在 可用的 kafka 且地址可正常访问。

-

根据以下命令获取老版本 insight 和 insight-agent 的 values(建议做好备份):

-
helm get values insight -n insight-system -o yaml > insight.yaml
-helm get values insight-agent -n insight-system -o yaml > insight-agent.yaml
-
-

开启大日志

-

有以下几种方式开启或升级至大日志模式:

-
-
-
-

先运行以下 insight 升级命令,注意 kafka brokers 地址需正确:

-
helm upgrade insight insight-release/insight \
-  -n insight-system \
-  -f ./insight.yaml \
-  --set global.kafka.brokers="10.6.216.111:30592" \
-  --set global.kafka.enabled=true \
-  --set vector.enabled=true \
-  --version 0.30.1
-
-

然后运行以下 insight-agent 升级命令,注意 kafka brokers 地址需正确:

-
helm upgrade insight-agent insight-release/insight-agent \
-  -n insight-system \
-  -f ./insight-agent.yaml \
-  --set global.exporters.logging.kafka.brokers="10.6.216.111:30592" \
-  --set global.exporters.logging.output=kafka \
-  --version 0.30.1
-
-
-
-

参照以下步骤修改 YAMl 后运行 helm upgrade 命令:

-
    -
  1. -

    修改 insight.yaml

    -
    insight.yaml
    global:
    -  ...
    -  kafka:
    -    brokers: 10.6.216.111:30592
    -    enabled: true
    -...
    -vector:
    -  enabled: true
    -
    -
  2. -
  3. -

    升级 insight 组件:

    -
    helm upgrade insight insight-release/insight \
    -  -n insight-system \
    -  -f ./insight.yaml \
    -  --version 0.30.1
    -
    -
  4. -
  5. -

    修改 insight-agent.yaml

    -
    insight-agent.yaml
    global:
    -  ...
    -  exporters:
    -    ...
    -    logging:
    -      ...
    -      kafka:
    -        brokers: 10.6.216.111:30592
    -      output: kafka
    -
    -
  6. -
  7. -

    升级 insight-agent:

    -
    helm upgrade insight-agent insight-release/insight-agent \
    -  -n insight-system \
    -  -f ./insight-agent.yaml \
    -  --version 0.30.1
    -
    -
  8. -
-
-
-

在容器管理模块中,找到对应的集群,从左侧导航栏选择 Helm 应用 ,找到并更新 insight-agent。

-

Logging Settings 中,为 output 选择 kafka,并填写正确的 brokers 地址。

-

kpanda

-

需要注意的是,在升级完成后,需手动重启 insight-agent-fluent-bit 组件。

-
-
-
-

开启大链路

-

有以下几种方式开启或升级至大链路模式:

-
-
-
-

先运行以下 insight 升级命令,注意 kafka brokers 地址需正确:

-
helm upgrade insight insight-release/insight \
-  -n insight-system \
-  -f ./insight.yaml \
-  --set global.kafka.brokers="10.6.216.111:30592" \
-  --set global.kafka.enabled=true \
-  --set global.tracing.kafkaReceiver.enabled=true \
-  --version 0.30.1
-
-

然后运行以下 insight-agent 升级命令,注意 kafka brokers 地址需正确:

-
helm upgrade insight-agent insight-release/insight-agent \
-  -n insight-system \
-  -f ./insight-agent.yaml \
-  --set global.exporters.trace.kafka.brokers="10.6.216.111:30592" \
-  --set global.exporters.trace.output=kafka \
-  --version 0.30.1
-
-
-
-

参照以下步骤修改 YAMl 后运行 helm upgrade 命令:

-
    -
  1. -

    修改 insight.yaml

    -
    insight.yaml
    global:
    -  ...
    -  kafka:
    -    brokers: 10.6.216.111:30592
    -    enabled: true
    -...
    -tracing:
    -  ...
    -  kafkaReceiver:
    -    enabled: true
    -
    -
  2. -
  3. -

    升级 insight 组件:

    -
    helm upgrade insight insight-release/insight \
    -  -n insight-system \
    -  -f ./insight.yaml \
    -  --version 0.30.1
    -
    -
  4. -
  5. -

    修改 insight-agent.yaml

    -
    insight-agent.yaml
    global:
    -  ...
    -  exporters:
    -    ...
    -    trace:
    -      ...
    -      kafka:
    -        brokers: 10.6.216.111:30592
    -      output: kafka
    -
    -
  6. -
  7. -

    升级 insight-agent:

    -
    helm upgrade insight-agent insight-release/insight-agent \
    -  -n insight-system \
    -  -f ./insight-agent.yaml \
    -  --version 0.30.1
    -
    -
  8. -
-
-
-

在容器管理模块中,找到对应的集群,从左侧导航栏选择 Helm 应用 ,找到并更新 insight-agent。

-

Trace Settings 中,为 output 选择 kafka,并填写正确的 brokers 地址。

-

UI 上升级

-

需要注意的是,在升级完成后,需手动 -重启 insight-agent-opentelemetry-collectorinsight-opentelemetry-collector 组件。

-
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/component-scheduling.html b/site/end-user/insight/quickstart/install/component-scheduling.html deleted file mode 100644 index 337244f..0000000 --- a/site/end-user/insight/quickstart/install/component-scheduling.html +++ /dev/null @@ -1,711 +0,0 @@ - - - - - - - - - - - - -自定义 Insight 组件调度策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

自定义 Insight 组件调度策略

-

当部署可观测平台 Insight 到 Kubernetes 环境时,正确的资源管理和优化至关重要。 -Insight 包含多个核心组件,如 Prometheus、OpenTelemetry、FluentBit、Vector、Elasticsearch 等, -这些组件在运行过程中可能因为资源占用问题对集群内其他 Pod 的性能产生负面影响。 -为了有效地管理资源并优化集群的运行,节点亲和性成为一项重要的配置选项。

-

本文将重点探讨如何通过污点节点亲和性的配置策略,使得每个组件能够在适当的节点上运行, -并避免资源竞争或争用,从而确保整个 Kubernetes 集群的稳定性和高效性。

-

通过污点为 Insight 配置专有节点

-

由于 Insight Agent 包含了 DaemonSet 组件,所以本节所述的配置方式是让除了 Insight DameonSet 之外的其余组件均运行在专有节点上。

-

该方式是通过为专有节点添加污点(taint),并配合污点容忍度(tolerations)来实现的。 -更多细节可以参考 Kubernetes 官方文档

-

可以参考如下命令为节点添加及移除污点:

-
# 添加污点
-kubectl taint nodes worker1 node.daocloud.io=insight-only:NoSchedule
-
-# 移除污点
-kubectl taint nodes worker1 node.daocloud.io:NoSchedule-
-
-

有以下两种途径让 Insight 组件调度至专有节点:

-

1. 为每个组件添加污点容忍度

-

针对 insight-serverinsight-agent 两个 Chart 分别进行配置:

-
-
-
-
server:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-ui:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-runbook:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-# mysql:
-victoria-metrics-k8s-stack:
-  victoria-metrics-operator:
-    tolerations:
-      - key: "node.daocloud.io"
-        operator: "Equal"
-        value: "insight-only"
-        effect: "NoSchedule"
-  vmcluster:
-    spec:
-      vmstorage:
-        tolerations:
-          - key: "node.daocloud.io"
-            operator: "Equal"
-            value: "insight-only"
-            effect: "NoSchedule"
-      vmselect:
-        tolerations:
-          - key: "node.daocloud.io"
-            operator: "Equal"
-            value: "insight-only"
-            effect: "NoSchedule"
-      vminsert:
-        tolerations:
-          - key: "node.daocloud.io"
-            operator: "Equal"
-            value: "insight-only"
-            effect: "NoSchedule"
-  vmalert:
-    spec:
-      tolerations:
-        - key: "node.daocloud.io"
-          operator: "Equal"
-          value: "insight-only"
-          effect: "NoSchedule"
-  alertmanager:
-    spec:
-      tolerations:
-        - key: "node.daocloud.io"
-          operator: "Equal"
-          value: "insight-only"
-          effect: "NoSchedule"
-
-jaeger:
-  collector:
-    tolerations:
-      - key: "node.daocloud.io"
-        operator: "Equal"
-        value: "insight-only"
-        effect: "NoSchedule"
-  query:
-    tolerations:
-      - key: "node.daocloud.io"
-        operator: "Equal"
-        value: "insight-only"
-        effect: "NoSchedule"
-
-opentelemetry-collector-aggregator:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-opentelemetry-collector:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-grafana-operator:
-  operator:
-    tolerations:
-      - key: "node.daocloud.io"
-        operator: "Equal"
-        value: "insight-only"
-        effect: "NoSchedule"
-  grafana:
-    tolerations:
-      - key: "node.daocloud.io"
-        operator: "Equal"
-        value: "insight-only"
-        effect: "NoSchedule"
-kibana:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-elastic-alert:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-vector:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-
-
-
-
kube-prometheus-stack:
-  prometheus:
-    prometheusSpec:
-      tolerations:
-        - key: "node.daocloud.io"
-          operator: "Equal"
-          value: "insight-only"
-          effect: "NoSchedule"
-  prometheus-node-exporter:
-    tolerations:
-      - effect: NoSchedule
-        operator: Exists
-  prometheusOperator:
-    tolerations:
-      - key: "node.daocloud.io"
-        operator: "Equal"
-        value: "insight-only"
-        effect: "NoSchedule"
-
-kube-state-metrics:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-opentelemetry-operator:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-opentelemetry-collector:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-tailing-sidecar-operator:
-  operator:
-    tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-opentelemetry-kubernetes-collector:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-prometheus-blackbox-exporter:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule"
-etcd-exporter:
-  tolerations:
-    - key: "node.daocloud.io"
-      operator: "Equal"
-      value: "insight-only"
-      effect: "NoSchedule" 
-
-
-
-
-

2. 通过命名空间级别配置

-

insight-system 命名空间的 Pod 都容忍 node.daocloud.io=insight-only 污点。

-
    -
  1. -

    调整 apiserver 的配置文件 /etc/kubernetes/manifests/kube-apiserver.yaml,放开 PodTolerationRestriction,PodNodeSelector, 参考下图:

    -

    insight-ns-toleration

    -
  2. -
  3. -

    insight-system 命名空间增加注解:

    -
    apiVersion: v1
    -kind: Namespace
    -metadata:
    -  name: insight-system
    -  annotations:
    -    scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Equal", "effect": "NoSchedule", "key": "node.daocloud.io", "value": "insight-only"}]'
    -
    -
  4. -
-

重启 insight-system 命名空间下面的组件即可正常容忍 insight-system 下的 Pod 调度。

-

为节点添加 Label 和节点亲和性来管理组件调度

-
-

Info

-

节点亲和性概念上类似于 nodeSelector,它使你可以根据节点上的 标签(label) 来约束 Pod 可以调度到哪些节点上。 -节点亲和性有两种:

-
    -
  1. requiredDuringSchedulingIgnoredDuringExecution:调度器只有在规则被满足的时候才能执行调度。此功能类似于 nodeSelector, 但其语法表达能力更强。
  2. -
  3. preferredDuringSchedulingIgnoredDuringExecution:调度器会尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。
  4. -
-

更过细节请参考 kubernetes 官方文档

-
-

为了实现不同用户对 Insight 组件调度的灵活需求,Insight 分别提供了较为细粒度的 Label 来实现不同组件的调度策略,以下是标签与组件的关系说明:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
标签 Key标签 Value说明
node.daocloud.io/insight-any任意值,推荐用 true代表 Insight 所有组件优先考虑带了该标签的节点
node.daocloud.io/insight-prometheus任意值,推荐用 true特指 Prometheus 组件
node.daocloud.io/insight-vmstorage任意值,推荐用 true特指 VictoriaMetrics vmstorage 组件
node.daocloud.io/insight-vector任意值,推荐用 true特指 Vector 组件
node.daocloud.io/insight-otel-col任意值,推荐用 true特指 OpenTelemetry 组件
-

可以参考如下命令为节点添加及移除标签:

-
# 为 node8 添加标签,先将 insight-prometheus 调度到 node8 
-kubectl label nodes node8 node.daocloud.io/insight-prometheus=true
-
-# 移除 node8 的 node.daocloud.io/insight-prometheus 标签
-kubectl label nodes node8 node.daocloud.io/insight-prometheus-
-
-

以下是 insight-prometheus 组件在部署时默认的亲和性偏好:

-
affinity:
-  nodeAffinity:
-    preferredDuringSchedulingIgnoredDuringExecution:
-    - preference:
-        matchExpressions:
-        - key: node-role.kubernetes.io/control-plane
-          operator: DoesNotExist
-      weight: 1
-    - preference:
-        matchExpressions:
-        - key: node.daocloud.io/insight-prometheus # (1)!
-          operator: Exists
-      weight: 2
-    - preference:
-        matchExpressions:
-        - key: node.daocloud.io/insight-any
-          operator: Exists
-      weight: 3
-    podAntiAffinity:
-      preferredDuringSchedulingIgnoredDuringExecution:
-        - weight: 1
-          podAffinityTerm:
-            topologyKey: kubernetes.io/hostname
-            labelSelector:
-              matchExpressions:
-                - key: app.kubernetes.io/instance
-                  operator: In
-                  values:
-                    - insight-agent-kube-prometh-prometheus
-
-
    -
  1. 先将 insight-prometheus 调度到带有 node.daocloud.io/insight-prometheus 标签的节点
  2. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/gethosturl.html b/site/end-user/insight/quickstart/install/gethosturl.html deleted file mode 100644 index 7fdd07a..0000000 --- a/site/end-user/insight/quickstart/install/gethosturl.html +++ /dev/null @@ -1,550 +0,0 @@ - - - - - - - - - - - - -获取全局服务集群的数据存储地址 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

获取全局服务集群的数据存储地址

-

可观测性是多集群统一观测的产品,为实现对多集群观测数据的统一存储、查询, -子集群需要将采集的观测数据上报给全局服务集群进行统一存储。 -本文提供了在安装采集组件 insight-agent 时必填的存储组件的地址。

-

在全局服务集群安装 insight-agent

-

如果在全局服务集群安装 insight-agent,推荐通过域名来访问集群:

-
export vminsert_host="vminsert-insight-victoria-metrics-k8s-stack.insight-system.svc.cluster.local" # (1)!
-export es_host="insight-es-master.insight-system.svc.cluster.local" # (2)!
-export otel_col_host="insight-opentelemetry-collector.insight-system.svc.cluster.local" # (3)!
-
-

在其他集群安装 insight-agent

-

通过 Insight Server 提供的接口获取地址

-
    -
  1. -

    管理集群使用默认的 LoadBalancer 方式暴露

    -

    登录全局服务集群的控制台,执行以下命令:

    -
    export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})
    -curl --location --request POST 'http://'"${INSIGHT_SERVER_IP}"'/apis/insight.io/v1alpha1/agentinstallparam'
    -
    -
    -

    Note

    -

    请替换命令中的 ${INSIGHT_SERVER_IP} 参数。

    -
    -

    获得如下返回值:

    -
    {
    -  "values": {
    -    "global": {
    -      "exporters": {
    -        "logging": {
    -          "host": "10.6.182.32"
    -        },
    -        "metric": {
    -          "host": "10.6.182.32"
    -        },
    -        "auditLog": {
    -          "host": "10.6.182.32"
    -        },
    -        "trace": {
    -          "host": "10.6.182.32"
    -        }
    -      }
    -    },
    -    "opentelemetry-operator": {
    -      "enabled": true
    -    },
    -    "opentelemetry-collector": {
    -      "enabled": true
    -    }
    -  }
    -}
    -
    -
      -
    • global.exporters.logging.host 是日志服务地址,不需要再设置对应服务的端口,都会使用相应默认值
    • -
    • global.exporters.metric.host 是指标服务地址
    • -
    • global.exporters.trace.host 是链路服务地址
    • -
    • global.exporters.auditLog.host 是审计日志服务地址(和链路使用的同一个服务不同端口)
    • -
    -
  2. -
  3. -

    管理集群禁用 LoadBalancer

    -

    调用接口时需要额外传递集群中任意外部可访问的节点 IP,会使用该 IP 拼接出对应服务的完整访问地址。

    -
    export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})
    -curl --location --request POST 'http://'"${INSIGHT_SERVER_IP}"'/apis/insight.io/v1alpha1/agentinstallparam' --data '{"extra": {"EXPORTER_EXTERNAL_IP": "10.5.14.51"}}'
    -
    -

    将获得如下的返回值:

    -
    {
    -  "values": {
    -    "global": {
    -      "exporters": {
    -        "logging": {
    -          "scheme": "https",
    -          "host": "10.5.14.51",
    -          "port": 32007,
    -          "user": "elastic",
    -          "password": "j8V1oVoM1184HvQ1F3C8Pom2"
    -        },
    -        "metric": {
    -          "host": "10.5.14.51",
    -          "port": 30683
    -        },
    -        "auditLog": {
    -          "host": "10.5.14.51",
    -          "port": 30884
    -        },
    -        "trace": {
    -          "host": "10.5.14.51",
    -          "port": 30274
    -        }
    -      }
    -    },
    -    "opentelemetry-operator": {
    -      "enabled": true
    -    },
    -    "opentelemetry-collector": {
    -      "enabled": true
    -    }
    -  }
    -}
    -
    -
      -
    • global.exporters.logging.host 是日志服务地址
    • -
    • global.exporters.logging.port 是日志服务暴露的 NodePort
    • -
    • global.exporters.metric.host 是指标服务地址
    • -
    • global.exporters.metric.port 是指标服务暴露的 NodePort
    • -
    • global.exporters.trace.host 是链路服务地址
    • -
    • global.exporters.trace.port 是链路服务暴露的 NodePort
    • -
    • global.exporters.auditLog.host 是审计日志服务地址(和链路使用的同一个服务不同端口)
    • -
    • global.exporters.auditLog.host 是审计日志服务暴露的 NodePort
    • -
    -
  4. -
-

通过 LoadBalancer 连接

-
    -
  1. -

    若集群中开启 LoadBalancer 且为 Insight 设置了 VIP 时,您也可以手动执行以下命令获取 vminsert 以及 opentelemetry-collector 的地址信息:

    -
    $ kubectl get service -n insight-system | grep lb
    -lb-insight-opentelemetry-collector               LoadBalancer   10.233.23.12    <pending>     4317:31286/TCP,8006:31351/TCP  24d
    -lb-vminsert-insight-victoria-metrics-k8s-stack   LoadBalancer   10.233.63.67    <pending>     8480:31629/TCP                 24d
    -
    -
      -
    • lb-vminsert-insight-victoria-metrics-k8s-stack 是指标服务的地址
    • -
    • lb-insight-opentelemetry-collector 是链路服务的地址
    • -
    -
  2. -
  3. -

    执行以下命令获取 elasticsearch 地址信息:

    -
    $ kubectl get service -n mcamel-system | grep es
    -mcamel-common-es-cluster-masters-es-http               NodePort    10.233.16.120   <none>        9200:30465/TCP               47d
    -
    -

    mcamel-common-es-cluster-masters-es-http 是日志服务的地址

    -
  4. -
-

通过 NodePort 连接

-

全局服务集群禁用 LB 特性

-

在该情况下,默认不会创建上述的 LoadBalancer 资源,对应服务名为:

-
    -
  • vminsert-insight-victoria-metrics-k8s-stack(指标服务)
  • -
  • common-es(日志服务)
  • -
  • insight-opentelemetry-collector(链路服务)
  • -
-

上面两种情况获取到对应服务的对应端口信息后,进行如下设置:

-
--set global.exporters.logging.host=  # (1)!
---set global.exporters.logging.port=  # (2)!
---set global.exporters.metric.host=   # (3)!
---set global.exporters.metric.port=   # (4)!
---set global.exporters.trace.host=    # (5)!
---set global.exporters.trace.port=    # (6)!
---set global.exporters.auditLog.host= # (7)!
-
-
    -
  1. 外部可访问的管理集群 NodeIP
  2. -
  3. 日志服务 9200 端口对应的 NodePort
  4. -
  5. 外部可访问的管理集群 NodeIP
  6. -
  7. 指标服务 8480 端口对应的 NodePort
  8. -
  9. 外部可访问的管理集群 NodeIP
  10. -
  11. 链路服务 4317 端口对应的 NodePort
  12. -
  13. 外部可访问的管理集群 NodeIP
  14. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/helm-installagent.html b/site/end-user/insight/quickstart/install/helm-installagent.html deleted file mode 100644 index cddb963..0000000 --- a/site/end-user/insight/quickstart/install/helm-installagent.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - - - - - - - - - -通过 Helm 部署 Insight Agent - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

通过 Helm 部署 Insight Agent

-

本文描述了在命令行中通过 Helm 命令安装 Insight Agent 社区版的操作步骤。

-

安装 Insight Agent

-
    -
  1. -

    使用以下命令添加镜像仓库的地址

    -
    helm repo add insight https://release.daocloud.io/chartrepo/insight
    -helm repo upgrade
    -helm search repo  insight/insight-agent --versions
    -
    -
  2. -
  3. -

    安装 Insight Agent 需要确保全局服务集群中的 Insight Server 正常运行,执行以下安装命令安装 Insight Agent 社区版,该配置不启用 Tracing 功能:

    -
    helm upgrade --install --create-namespace --cleanup-on-fail \
    -    --version ${version} \      # 请指定部署版本
    -    insight-agent  insight/insight-agent \
    -    --set global.exporters.logging.elasticsearch.host=10.10.10.x \    # 请替换“10.10.10.x" 为全局服务集群或外置的 Elasticsearch 的地址
    -    --set global.exporters.logging.elasticsearch.port=32517 \     # 请替换“32517" 为全局服务集群或外置的 Elasticsearch 暴露的端口
    -    --set global.exporters.logging.elasticsearch.user=elastic \     # 请替换“elastic" 为全局服务集群或外置的 Elasticsearch 的用户名
    -    --set global.exporters.logging.elasticsearch.password=dangerous \  # 请替换“dangerous" 为全局服务集群或外置的 Elasticsearch 的密码
    -    --set global.exporters.metric.host=${vminsert_address} \    # 请替换“10.10.10.x" 为全局服务集群中 vminsert 的地址
    -    --set global.exporters.metric.port=${vminsert_port} \    # 请替换“32517" 为全局服务集群中 vminsert 的地址
    -    --set global.exporters.auditLog.host=${opentelemetry-collector address} \     # 请替换“32517" 为全局服务集群中 opentelemetry-collector 的端口
    -    --set global.exporters.auditLog.port=${otel_col_auditlog_port}\   # 请替换“32517" 为全局服务集群中 opentelemetry-collector 容器端口为 8006 的 service 对外访问的地址
    -    -n insight-system
    -
    -
    -

    Info

    -

    可参考 如何获取连接地址 获取地址信息。

    -
    -
  4. -
  5. -

    执行以下命令确认安装状态:

    -
    helm list -A
    -kubectl get pods -n insight-system
    -
    -
  6. -
-

如何获取连接地址

-

在全局服务集群安装 Insight Agent

-

如果 Agent 是安装在管理集群,推荐通过域名来访问集群:

-
export vminsert_host="vminsert-insight-victoria-metrics-k8s-stack.insight-system.svc.cluster.local" # 指标
-export es_host="insight-es-master.insight-system.svc.cluster.local" # 日志
-export otel_col_host="insight-opentelemetry-collector.insight-system.svc.cluster.local" # 链路
-
-

在工作集群安装 Insight Agent

-
-
-
-

全局服务集群使用默认的 LoadBalancer 方式暴露服务时,登录全局服务集群的控制台,执行以下命令:

-
export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})
-curl --location --request POST 'http://'"${INSIGHT_SERVER_IP}"'/apis/insight.io/v1alpha1/agentinstallparam'
-
-

将获得如下的返回值:

-
{"global":{"exporters":{"logging":{"output":"elasticsearch","elasticsearch":{"host":"10.6.182.32"},"kafka":{},"host":"10.6.182.32"},"metric":{"host":"10.6.182.32"},"auditLog":    {"host":"10.6.182.32"}}},"opentelemetry-operator":{"enabled":true},"opentelemetry-collector":{"enabled":true}}
-
-

其中:

-
    -
  • global.exporters.logging.elasticsearch.host 是日志服务地址【不需要再设置对应服务的端口,都会使用相应默认值】;
  • -
  • global.exporters.metric.host 是指标服务地址;
  • -
  • global.exporters.trace.host 是链路服务地址;
  • -
  • global.exporters.auditLog.host 是审计日志服务地址 (和链路使用的同一个服务不同端口);
  • -
-
-
-

登录全局服务集群的控制台,执行以下命令:

-
kubectl get service -n insight-system | grep lb
-kubectl get service -n mcamel-system | grep es
-
-

其中:

-
    -
  • lb-vminsert-insight-victoria-metrics-k8s-stack 是指标服务的地址;
  • -
  • lb-insight-opentelemetry-collector 是链路服务的地址;
  • -
  • mcamel-common-es-cluster-masters-es-http 是日志服务的地址;
  • -
-
-
-

全局服务集群使用 Nodeport 方式暴露服务时,登录全局服务集群的控制台,执行以下命令:

-
kubectl get service -n insight-system
-kubectl get service -n mcamel-system
-
-

其中:

-
    -
  • vminsert-insight-victoria-metrics-k8s-stack 是指标服务的地址;
  • -
  • insight-opentelemetry-collector 是链路服务的地址;
  • -
  • mcamel-common-es-cluster-masters-es-http 是日志服务的地址;
  • -
-
-
-
-

升级 Insight Agent

-
    -
  1. -

    登录目标集群的控制台,执行以下命令备份 --set 参数。

    -
    helm get values insight-agent -n insight-system -o yaml > insight-agent.yaml
    -
    -
  2. -
  3. -

    执行以下命令更新仓库。

    -
    helm repo upgrade
    -
    -
  4. -
  5. -

    执行以下命令进行升级。

    -
    helm upgrade insight-agent insight/insight-agent \
    --n insight-system \
    --f ./insight-agent.yaml \
    ---version ${version}   # 指定升级版本
    -
    -
  6. -
  7. -

    执行以下命令确认安装状态:

    -
    kubectl get pods -n insight-system
    -
    -
  8. -
-

卸载 Insight Agent

-
helm uninstall insight-agent -n insight-system --timeout 10m
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/index.html b/site/end-user/insight/quickstart/install/index.html deleted file mode 100644 index c875261..0000000 --- a/site/end-user/insight/quickstart/install/index.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - - - - - -开始观测 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

开始观测

-

AI 算力中心 平台实现了对多云多集群的纳管,并支持创建集群。在此基础上,可观测性 Insight 作为多集群统一观测方案,通过部署 insight-agent 插件实现对多集群观测数据的采集,并支持通过 AI 算力中心 可观测性产品实现对指标、日志、链路数据的查询。

-

insight-agent 是可观测性实现对多集群数据采集的工具,安装后无需任何修改,即可实现对指标、日志以及链路数据的自动化采集。

-

通过 容器管理 创建的集群默认会安装 insight-agent,故在此仅针对接入的集群如何开启观测能力提供指导。

- -

可观测性 Insight 作为多集群的统一观测平台,其部分组件的资源消耗与创建集群的数据、接入集群的数量息息相关,在安装 insight-agent 时,需要根据集群规模对相应组件的资源进行调整。

-
    -
  1. -

    根据创建集群的规模或接入集群的规模,调整 insight-agent 中采集组件 Prometheus 的 CPU 和内存,请参考: Prometheus 资源规划

    -
  2. -
  3. -

    由于多集群的指标数据会统一存储,则需要 AI 算力中心 平台管理员根据创建集群的规模、接入集群的规模对应调整 vmstorage 的磁盘,请参考:vmstorage 磁盘容量规划

    -
  4. -
  5. -

    如何调整 vmstorage 的磁盘,请参考:vmstorge 磁盘扩容

    -
  6. -
-

由于 AI 算力中心 支持对多云多集群的纳管,insight-agent 目前也完成了部分验证,由于监控组件冲突问题导致在 AI 算力中心4.0 集群和 Openshift 4.x 集群中安装 insight-agent 会出现问题,若您遇到同样问题,请参考以下文档:

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/install-agent.html b/site/end-user/insight/quickstart/install/install-agent.html deleted file mode 100644 index 4a0c35b..0000000 --- a/site/end-user/insight/quickstart/install/install-agent.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - - - - - - - -在线安装 insight-agent - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

在线安装 insight-agent

-

insight-agent 是集群观测数据采集的插件,支持对指标、链路、日志数据的统一观测。本文描述了如何在在线环境中为接入集群安装 insight-agent。

-

前提条件

-
    -
  • 集群已成功接入 容器管理 模块。如何接入集群,请参考:接入集群
  • -
-

操作步骤

-
    -
  1. -

    进入 容器管理 模块,在 集群列表 中找到要安装 insight-agent 的集群名称。

    -

    确定集群

    -
  2. -
  3. -

    选择 立即安装 跳转,或点击集群,在左侧导航栏内点击 Helm 应用 -> Helm 模板 ,搜索框查询 insight-agent ,点击该卡片进入详情。

    -

    查询 insight-agent

    -
  4. -
  5. -

    查看 insight-agent 的安装页面,点击 安装 进入下一步。

    -

    安装

    -
  6. -
  7. -

    选择安装的版本并在下方表单分别填写全局服务集群中对应数据存储组件的地址,确认填写的信息无误后,点击 确定

    -
      -
    • insight-agent 默认部署在集群的 insight-system 命名空间下。
    • -
    • 建议安装最新版本的 insight-agent。
    • -
    • 系统默认已填写数据上报的组件的地址,仍请您检查无误后再点击 确定 进行安装。 如需修改数据上报地址,请参考:获取数据上报地址
    • -
    -

    填写表单

    -
  8. -
  9. -

    系统将自动返回  Helm 应用 列表,当应用 insight-agent 的状态从  未就绪 变为 已部署 ,且所有的组件状态为 运行中 时,则安装成功。等待一段时间后,可在 可观测性 模块查看该集群的数据。

    -

    结束界面

    -
  10. -
-
-

Note

-
    -
  • 点击最右侧的 ,您可以在弹出菜单中执行更多操作,如 更新查看 YAML删除
  • -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/knownissues.html b/site/end-user/insight/quickstart/install/knownissues.html deleted file mode 100644 index 0d2cc02..0000000 --- a/site/end-user/insight/quickstart/install/knownissues.html +++ /dev/null @@ -1,465 +0,0 @@ - - - - - - - - - - - - -已知问题 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

已知问题

-

本页列出一些 Insight Agent 安装和卸载有关的问题及其解决办法。

-

v0.23.0

-

Insight Agent

-

Insight Agent 卸载失败

-

当你运行以下命令卸载 Insight Agent 时。

-
helm uninstall insight-agent -n insight-system
-
-

otel-oprator 所使用的 tls secret 未被卸载掉。

-

otel-operator 定义的“重复利用 tls secret”的逻辑中,会去判断 otel-opratorMutationConfiguration -是否存在并重复利用 MutationConfiguration 中绑定的 CA cert。但是由于 helm uninstall 已卸载 MutationConfiguration,导致出现空值。

-

综上请手动删除对应的 secret,以下两种方式任选一种即可:

-
    -
  • -

    通过命令行删除:登录目标集群的控制台,执行以下命令:

    -
    kubectl -n insight-system delete secret insight-agent-opentelemetry-operator-controller-manager-service-cert
    -
    -
  • -
  • -

    通过 UI 删除:登录 AI 算力中心 容器管理,选择目标集群,从左侧导航进入密钥,输入 - insight-agent-opentelemetry-operator-controller-manager-service-cert,选择删除

    -
  • -
-

v0.22.0

-

Insight Agent

-

升级 Insight Agent 时更新日志收集端,未生效

-

更新 insight-agent 日志配置从 elasticsearch 改为 kafka 或者从 kafka 改为 elasticsearch,实际上都未生效,还是使用更新前配置。

-

解决方案

-

手动重启集群中的 fluentbit。

-

v0.21.0

-

Insight Agent

-

PodMonitor 采集多份 JVM 指标数据

-
    -
  1. -

    这个版本的 PodMonitor/insight-kubernetes-pod 存在缺陷:会错误地创建 Job 去采集标记了 - insight.opentelemetry.io/metric-scrape=true 的 Pod 的所有 container;而实际上只需采集 - insight.opentelemetry.io/metric-port 所对应 container 的端口。

    -
  2. -
  3. -

    因为 PodMonitor 声明之后,PromethuesOperator 会预设置一些服务发现配置。 - 再考虑到 CRD 的兼容性的问题。因此,放弃通过 PodMonitor 来配置通过 annotation 创建采集任务的机制。

    -
  4. -
  5. -

    通过 Prometheus 自带的 additional scrape config 机制,将服务发现规则配置在 secret 中,在引入 Prometheus 里。

    -
  6. -
-

综上:

-
    -
  1. 删除这个 PodMonitor 的当前 insight-kubernetes-pod
  2. -
  3. 使用新的规则
  4. -
-

新的规则里通过 action: keepequal 来比较 source_labelstarget_label 的一致性, -来判断是否要给某个 container 的 port 创建采集任务。需要注意,这个是 Prometheus 2.41.0(2022-12-20)和更高版本才具备的功能。

-
+    - source_labels: [__meta_kubernetes_pod_annotation_insight_opentelemetry_io_metric_port]
-+      separator: ;
-+      target_label: __meta_kubernetes_pod_container_port_number
-+      action: keepequal
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/install/upgrade-note.html b/site/end-user/insight/quickstart/install/upgrade-note.html deleted file mode 100644 index c46ecfc..0000000 --- a/site/end-user/insight/quickstart/install/upgrade-note.html +++ /dev/null @@ -1,559 +0,0 @@ - - - - - - - - - - - - -升级注意事项 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

升级注意事项

-

本页介绍一些升级 insight-server 和 insight-agent 的注意事项。

-

insight-agent

-

从 v0.28.x(或更低版本)升级到 v0.29.x

-

由于 v0.29.0 升级了 Opentelemetry 社区的 operator chart 版本,values 中的 featureGates 的支持的值有所变化,因此,在 upgrade 之前,需要将 featureGates 的值设置为空, 即:

-
-  --set opentelemetry-operator.manager.featureGates="+operator.autoinstrumentation.go,+operator.autoinstrumentation.multi-instrumentation,+operator.autoinstrumentation.nginx" \
-+  --set opentelemetry-operator.manager.featureGates=""
-
-

insight-server

-

从 v0.26.x(或更低版本)升级到 v0.27.x 或更高版本

-

在 v0.27.x 版本中将 vector 组件的开关单独抽出。故原有环境开启了 vector,那在升级 insight-server 时,需要指定 --set vector.enabled=true

-

从 v0.19.x(或更低版本)升级到 0.20.x

-

在升级 Insight 之前,您需要执行以下命令手动删除 jaeger-collectorjaeger-query 部署:

-
kubectl -n insight-system delete deployment insight-jaeger-collector
-kubectl -n insight-system delete deployment insight-jaeger-query
-
-

从 v0.17.x(或更低版本)升级到 v0.18.x

-

由于 0.18.x 中更新了 Jaeger 相关部署文件,因此需要在升级 insight-server 前手动执行如下命令:

-
kubectl -n insight-system delete deployment insight-jaeger-collector
-kubectl -n insight-system delete deployment insight-jaeger-query
-
-

由于 0.18.x 中指标名产生了变动,因此,需要在升级 insight-server 之后,insight-agent 也应该做升级。

-

此外,调整了开启链路模块的参数,以及 ElasticSearch 连接调整。具体参考以下参数:

-
+  --set global.tracing.enable=true \
--  --set jaeger.collector.enabled=true \
--  --set jaeger.query.enabled=true \
-+  --set global.elasticsearch.scheme=${your-external-elasticsearch-scheme} \
-+  --set global.elasticsearch.host=${your-external-elasticsearch-host} \
-+  --set global.elasticsearch.port=${your-external-elasticsearch-port} \
-+  --set global.elasticsearch.user=${your-external-elasticsearch-username} \
-+  --set global.elasticsearch.password=${your-external-elasticsearch-password} \
--  --set jaeger.storage.elasticsearch.scheme=${your-external-elasticsearch-scheme} \
--  --set jaeger.storage.elasticsearch.host=${your-external-elasticsearch-host} \
--  --set jaeger.storage.elasticsearch.port=${your-external-elasticsearch-port} \
--  --set jaeger.storage.elasticsearch.user=${your-external-elasticsearch-username} \
--  --set jaeger.storage.elasticsearch.password=${your-external-elasticsearch-password} \
-
-

从 v0.15.x(或更低版本)升级到 v0.16.x

-

由于 0.16.x 中使用了 vmalertmanagers CRD 的新特性参数 disableRouteContinueEnforce, -因此需要在升级 insight-server 前手动执行如下命令。

-
kubectl apply --server-side -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.33.0/config/crd/bases/operator.victoriametrics.com_vmalertmanagers.yaml --force-conflicts
-
-
-

Note

-

如您是离线安装,可以在解压 Insight 离线包后,请执行以下命令更新 CRD。

-
kubectl apply --server-side -f insight/dependency-crds --force-conflicts 
-
-
-

insight-agent

-

从 v0.23.x(或更低版本)升级到 v0.24.x

-

由于 0.24.x 版本中 OTEL operator chart 中新增了 CRD,但由于 Helm Upgrade 时并不会更新 CRD,因此,需要手动执行以下命令:

-
kubectl apply -f https://raw.githubusercontent.com/open-telemetry/opentelemetry-helm-charts/main/charts/opentelemetry-operator/crds/crd-opentelemetry.io_opampbridges.yaml
-
-

如您是离线安装,可以在解压 insight-agent 离线包后可找到上述 CRD 的 yaml,解压 Insight-Agent Chart 之后手动执行以下命令:

-
kubectl apply -f charts/agent/crds/crd-opentelemetry.io_opampbridges.yaml
-
-

从 v0.19.x(或更低版本)升级到 v0.20.x

-

由于 0.20.x 中增加了 Kafka 日志导出配置,日志导出配置做了一些调整。升级 insight-agent 之前需要注意参数变化, -即原来 logging 的配置已经移到了配置中 logging.elasticsearch:

-
-  --set global.exporters.logging.host \
--  --set global.exporters.logging.port \
-+  --set global.exporters.logging.elasticsearch.host \
-+  --set global.exporters.logging.elasticsearch.port \
-
-

从 v0.17.x(或更低版本)升级到 v0.18.x

-

由于 0.18.x 中更新了 Jaeger 相关部署文件,因此需要在升级 insight-agent 前需要注意参数的改动。

-
+  --set global.exporters.trace.enable=true \
--  --set opentelemetry-collector.enabled=true \
--  --set opentelemetry-operator.enabled=true \
-
-

从 v0.16.x(或更低版本)升级到 v0.17.x

-

在 v0.17.x 版本中将 kube-prometheus-stack chart 版本从 41.9.1 升级至 45.28.1, 其中使用的 CRD 也存在一些字段的升级,如 servicemonitor 的 attachMetadata 字段,因此需要在升级 insight-agent 前执行如下命令:

-
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.65.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --force-conflicts
-
-

如您是离线安装,可以在解压 insight-agent 离线包后,在 insight-agent/dependency-crds 中找到上述 CRD 的 yaml。

-

从 v0.11.x(或更低版本)升级到 v0.12.x

-

在 v0.12.x 将 kube-prometheus-stack chart 从 39.6.0 升级到 41.9.1,其中包括 prometheus-operator 升级到 v0.60.1, prometheus-node-exporter chart 升级到 4.3.0 等。 -prometheus-node-exporter 升级后使用了 Kubernetes 推荐 label,因此需要在升级前删除 node-exporter 的 DaemonSet。 -prometheus-operator 更新了 CRD,因此需要在升级 insight-agent 前执行如下命令:

-
1
-2
-3
-4
-5
-6
-7
-8
-9
kubectl delete daemonset insight-agent-prometheus-node-exporter -n insight-system
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml --force-conflicts
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml --force-conflicts
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml --force-conflicts
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml --force-conflicts
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml --force-conflicts
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml --force-conflicts
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --force-conflicts
-kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml --force-conflicts
-
-
-

Note

-

如您是离线安装,可以在解压 insight-agent 离线包后,执行以下命令更新 CRD。

-
kubectl apply --server-side -f insight-agent/dependency-crds --force-conflicts
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/golang/golang.html b/site/end-user/insight/quickstart/otel/golang/golang.html deleted file mode 100644 index bff8345..0000000 --- a/site/end-user/insight/quickstart/otel/golang/golang.html +++ /dev/null @@ -1,793 +0,0 @@ - - - - - - - - - - - - -使用 OTel SDK 增强 Go 应用程序 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

使用 OTel SDK 增强 Go 应用程序

-

Golang 无侵入式接入链路请参考 通过 Operator 实现应用程序无侵入增强 文档,通过注解实现自动接入链路。

-

OpenTelemetry 也简称为 OTel,是一个开源的可观测性框架,可以帮助在 Go 应用程序中生成和收集遥测数据:链路、指标和日志。

-

本文主要讲解如何在 Go 应用程序中通过 OpenTelemetry Go SDK 增强并接入链路监控。

-

使用 OTel SDK 增强 Go 应用

-

安装相关依赖

-

必须先安装与 OpenTelemetry exporter 和 SDK 相关的依赖项。如果您正在使用其他请求路由器,请参考请求路由。 -切换/进入到应用程序源文件夹后运行以下命令:

-
go get go.opentelemetry.io/otel@v1.19.0 \
-  go.opentelemetry.io/otel/trace@v1.19.0 \
-  go.opentelemetry.io/otel/sdk@v1.19.0 \
-  go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin@v0.46.1 \
-  go.opentelemetry.io/otel/exporters/otlp/otlptrace@v1.19.0 \
-  go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@v1.19.0
-
-

使用 OTel SDK 创建初始化函数

-

为了让应用程序能够发送数据,需要一个函数来初始化 OpenTelemetry。在 main.go 文件中添加以下代码片段:

-
import (
-    "context"
-    "os"
-    "time"
-
-    "go.opentelemetry.io/otel"
-    "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
-    "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
-    "go.opentelemetry.io/otel/propagation"
-    "go.opentelemetry.io/otel/sdk/resource"
-    sdktrace "go.opentelemetry.io/otel/sdk/trace"
-    semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
-    "go.uber.org/zap"
-    "google.golang.org/grpc"
-)
-
-var tracerExp *otlptrace.Exporter
-
-func retryInitTracer() func() {
-    var shutdown func()
-    go func() {
-        for {
-            // otel will reconnected and re-send spans when otel col recover. so, we don't need to re-init tracer exporter.
-            if tracerExp == nil {
-                shutdown = initTracer()
-            } else {
-                break
-            }
-            time.Sleep(time.Minute * 5)
-        }
-    }()
-    return shutdown
-}
-
-func initTracer() func() {
-    // temporarily set timeout to 10s
-    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
-    defer cancel()
-
-    serviceName, ok := os.LookupEnv("OTEL_SERVICE_NAME")
-    if !ok {
-        serviceName = "server_name"
-        os.Setenv("OTEL_SERVICE_NAME", serviceName)
-    }
-    otelAgentAddr, ok := os.LookupEnv("OTEL_EXPORTER_OTLP_ENDPOINT")
-    if !ok {
-        otelAgentAddr = "http://localhost:4317"
-        os.Setenv("OTEL_EXPORTER_OTLP_ENDPOINT", otelAgentAddr)
-    }
-    zap.S().Infof("OTLP Trace connect to: %s with service name: %s", otelAgentAddr, serviceName)
-
-    traceExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithInsecure(), otlptracegrpc.WithDialOption(grpc.WithBlock()))
-    if err != nil {
-        handleErr(err, "OTLP Trace gRPC Creation")
-        return nil
-    }
-
-    tracerProvider := sdktrace.NewTracerProvider(
-        sdktrace.WithBatcher(traceExporter),
-        sdktrace.WithSampler(sdktrace.AlwaysSample()),
-    sdktrace.WithResource(resource.NewWithAttributes(semconv.SchemaURL)))
-
-    otel.SetTracerProvider(tracerProvider)
-    otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
-
-    tracerExp = traceExporter
-    return func() {
-        // Shutdown will flush any remaining spans and shut down the exporter.
-        handleErr(tracerProvider.Shutdown(ctx), "failed to shutdown TracerProvider")
-    }
-}
-
-func handleErr(err error, message string) {
-    if err != nil {
-        zap.S().Errorf("%s: %v", message, err)
-    }
-}
-
-

在 main.go 中初始化跟踪器

-

修改 main 函数以在 main.go 中初始化跟踪器。另外当您的服务关闭时,应该调用 TracerProvider.Shutdown() 确保导出所有 Span。该服务将该调用作为主函数中的延迟函数:

-
func main() {
-    // start otel tracing
-    if shutdown := retryInitTracer(); shutdown != nil {
-            defer shutdown()
-        }
-    ......
-}
-
-

为应用添加 OTel Gin 中间件

-

通过在 main.go 中添加以下行来配置 Gin 以使用中间件:

-
import (
-    ....
-  "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
-)
-
-func main() {
-    ......
-    r := gin.Default()
-    r.Use(otelgin.Middleware("my-app"))
-    ......
-}
-
-

运行应用程序

-
    -
  • -

    本地调试运行

    -
    -

    注意: 此步骤仅用于本地开发调试,生产环境中 Operator 会自动完成以下环境变量的注入。

    -
    -

    以上步骤已经完成了初始化 SDK 的工作,现在如果需要在本地开发进行调试,需要提前获取到 insight-system 命名空间下 insight-agent-opentelemerty-collector 的地址,假设为: insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317

    -

    因此,可以在你本地启动应用程序的时候添加如下环境变量:

    -
    OTEL_SERVICE_NAME=my-golang-app OTEL_EXPORTER_OTLP_ENDPOINT=http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317 go run main.go...
    -
    -
  • -
  • -

    生产环境运行

    -

    请参考通过 Operator 实现应用程序无侵入增强只注入环境变量注解 相关介绍,为 deployment yaml 添加注解:

    -
    instrumentation.opentelemetry.io/inject-sdk: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -

    如果无法使用注解的方式,您可以手动在 deployment yaml 添加如下环境变量:

    -
  • -
-
······
-env:
-  - name: OTEL_EXPORTER_OTLP_ENDPOINT
-    value: 'http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317'
-  - name: OTEL_SERVICE_NAME
-    value: "your depolyment name" # (1)!
-  - name: OTEL_K8S_NAMESPACE
-    valueFrom:
-      fieldRef:
-        apiVersion: v1
-        fieldPath: metadata.namespace
-  - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
-    valueFrom:
-      fieldRef:
-        apiVersion: v1
-        fieldPath: spec.nodeName
-  - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME
-    valueFrom:
-      fieldRef:
-        apiVersion: v1
-        fieldPath: metadata.name
-  - name: OTEL_RESOURCE_ATTRIBUTES
-    value: 'k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)'
-······
-
-
    -
  1. 修改此值
  2. -
-

请求路由

-

OpenTelemetry gin/gonic 增强

-
# Add one line to your import() stanza depending upon your request router:
-middleware "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
-
-

然后注入 OpenTelemetry 中间件:

-
router.Use(middleware.Middleware("my-app"))
-
-

OpenTelemetry gorillamux 增强

-
# Add one line to your import() stanza depending upon your request router:
-middleware "go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux"
-
-

然后注入 OpenTelemetry 中间件:

-
router.Use(middleware.Middleware("my-app"))
-
-

gRPC 增强

-

同样,OpenTelemetry 也可以帮助您自动检测 gRPC 请求。要检测您拥有的任何 gRPC 服务器,请将拦截器添加到服务器的实例化中。

-
import (
-  grpcotel "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
-)
-func main() {
-  [...]
-
-    s := grpc.NewServer(
-        grpc.UnaryInterceptor(grpcotel.UnaryServerInterceptor()),
-        grpc.StreamInterceptor(grpcotel.StreamServerInterceptor()),
-    )
-}
-
-

需要注意的是,如果你的程序里面使用到了 Grpc Client 调用第三方服务,你还需要对 Grpc Client 添加拦截器:

-
    [...]
-
-    conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()),
-        grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor()),
-        grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor()),
-    )
-
-

如果不使用请求路由

-
import (
-  "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
-)
-
-

在将 http.Handler 传递给 ServeMux 的每个地方,您都将包装处理程序函数。例如,将进行以下替换:

-
- mux.Handle("/path", h)
-+ mux.Handle("/path", otelhttp.NewHandler(h, "description of path"))
----
-- mux.Handle("/path", http.HandlerFunc(f))
-+ mux.Handle("/path", otelhttp.NewHandler(http.HandlerFunc(f), "description of path"))
-
-

通过这种方式,您可以确保使用 othttp 包装的每个函数都会自动收集其元数据并启动相应的跟踪。

-

数据库访问增强

-

Golang Gorm

-

OpenTelemetry 社区也开发了数据库访问库的中间件,比如 Gorm: -

import (
-    "github.com/uptrace/opentelemetry-go-extra/otelgorm"
-    "gorm.io/driver/sqlite"
-    "gorm.io/gorm"
-)
-
-db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
-if err != nil {
-    panic(err)
-}
-
-otelPlugin := otelgorm.NewPlugin(otelgorm.WithDBName("mydb"), # 缺失会导致数据库相关拓扑展示不完整
-    otelgorm.WithAttributes(semconv.ServerAddress("memory"))) # 缺失会导致数据库相关拓扑展示不完整
-if err := db.Use(otelPlugin); err != nil {
-    panic(err)
-}
-

-

自定义 Span

-

很多时候,OpenTelemetry 提供的中间件不能帮助我们记录更多内部调用的函数,需要我们自定义 Span 来记录

-
 ······
-    _, span := otel.Tracer("GetServiceDetail").Start(ctx,
-        "spanMetricDao.GetServiceDetail",
-        trace.WithSpanKind(trace.SpanKindInternal))
-    defer span.End()
-  ······
-
-

向 span 添加自定义属性和事件

-

也可以将自定义属性或标签设置为 Span。要添加自定义属性和事件,请按照以下步骤操作:

-

导入跟踪和属性库

-
import (
-    ...
-    "go.opentelemetry.io/otel/attribute"
-    "go.opentelemetry.io/otel/trace"
-)
-
-

从上下文中获取当前 Span

-
span := trace.SpanFromContext(c.Request.Context())
-
-

在当前 Span 中设置属性

-
span.SetAttributes(attribute.String("controller", "books"))
-
-

为当前 Span 添加 Event

-

添加 span 事件是使用 span 对象上的 AddEvent 完成的。

-
span.AddEvent(msg)
-
-

记录错误和异常

-
import "go.opentelemetry.io/otel/codes"
-
-// 获取当前 span
-span := trace.SpanFromContext(ctx)
-
-// RecordError 会自动将一个错误转换成 span even
-span.RecordError(err)
-
-// 标记这个 span 错误
-span.SetStatus(codes.Error, "internal error")
-
-

参考

-

有关 Demo 演示请参考: -- opentelemetry-demo/productcatalogservice -- opentelemetry-collector-contrib/demo

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/golang/meter.html b/site/end-user/insight/quickstart/otel/golang/meter.html deleted file mode 100644 index 998e5f3..0000000 --- a/site/end-user/insight/quickstart/otel/golang/meter.html +++ /dev/null @@ -1,622 +0,0 @@ - - - - - - - - - - - - -使用 OTel SDK 为应用程序暴露指标 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

使用 OTel SDK 为应用程序暴露指标

-
-

本文仅供希望评估或探索正在开发的 OTLP 指标的用户参考。

-
-

OpenTelemetry 项目要求以必须在 OpenTelemetry 协议 (OTLP) 中发出数据的语言提供 API 和 SDK。

-

针对 Golang 应用程序

-

Golang 可以通过 sdk 暴露 runtime 指标,具体来说,在应用中添加以下方法开启 metrics 暴露器:

-

安装相关依赖

-

切换/进入到应用程序源文件夹后运行以下命令:

-
go get go.opentelemetry.io/otel \
-  go.opentelemetry.io/otel/attribute \
-  go.opentelemetry.io/otel/exporters/prometheus \
-  go.opentelemetry.io/otel/metric/global \
-  go.opentelemetry.io/otel/metric/instrument \
-  go.opentelemetry.io/otel/sdk/metric
-
-

使用 OTel SDK 创建初始化函数

-
import (
-    .....
-
-    "go.opentelemetry.io/otel/attribute"
-    otelPrometheus "go.opentelemetry.io/otel/exporters/prometheus"
-    "go.opentelemetry.io/otel/metric/global"
-    "go.opentelemetry.io/otel/metric/instrument"
-    "go.opentelemetry.io/otel/sdk/metric/aggregator/histogram"
-    controller "go.opentelemetry.io/otel/sdk/metric/controller/basic"
-    "go.opentelemetry.io/otel/sdk/metric/export/aggregation"
-    processor "go.opentelemetry.io/otel/sdk/metric/processor/basic"
-    selector "go.opentelemetry.io/otel/sdk/metric/selector/simple"
-)
-func (s *insightServer) initMeter() *otelPrometheus.Exporter {
-    s.meter = global.Meter("xxx")
-
-    config := otelPrometheus.Config{
-        DefaultHistogramBoundaries: []float64{1, 2, 5, 10, 20, 50},
-        Gatherer:                   prometheus.DefaultGatherer,
-        Registry:                   prometheus.NewRegistry(),
-        Registerer:                 prometheus.DefaultRegisterer,
-    }
-
-    c := controller.New(
-        processor.NewFactory(
-            selector.NewWithHistogramDistribution(
-                histogram.WithExplicitBoundaries(config.DefaultHistogramBoundaries),
-            ),
-            aggregation.CumulativeTemporalitySelector(),
-            processor.WithMemory(true),
-        ),
-    )
-
-    exporter, err := otelPrometheus.New(config, c)
-    if err != nil {
-        zap.S().Panicf("failed to initialize prometheus exporter %v", err)
-    }
-
-    global.SetMeterProvider(exporter.MeterProvider())
-
-    http.HandleFunc("/metrics", exporter.ServeHTTP)
-
-    go func() {
-        _ = http.ListenAndServe(fmt.Sprintf(":%d", 8888), nil)
-    }()
-
-    zap.S().Info("Prometheus server running on ", fmt.Sprintf(":%d", port))
-    return exporter
-}
-
-

以上方法会为您的应用暴露一个指标接口: http://localhost:8888/metrics

-

随后,在 main.go 中对其进行初始化:

-
func main() {
-······
-    tp := initMeter()
-······
-}
-
-

此外,如果想添加自定义指标,可以参考:

-
// exposeClusterMetric expose metric like "insight_logging_count{} 1"
-func (s *insightServer) exposeLoggingMetric(lserver *log.LogService) {
-    s.meter = global.Meter("insight.io/basic")
-
-    var lock sync.Mutex
-    logCounter, err := s.meter.AsyncFloat64().Counter("insight_log_total")
-    if err != nil {
-        zap.S().Panicf("failed to initialize instrument: %v", err)
-    }
-
-    _ = s.meter.RegisterCallback([]instrument.Asynchronous{logCounter}, func(ctx context.Context) {
-        lock.Lock()
-        defer lock.Unlock()
-        count, err := lserver.Count(ctx)
-        if err == nil || count != -1 {
-            logCounter.Observe(ctx, float64(count))
-        }
-    })
-}
-
-

随后,在 main.go 调用该方法:

-
······
-s.exposeLoggingMetric(lservice)
-······
-
-

您可以通过访问 http://localhost:8888/metrics 来检查您的指标是否正常工作。

-

针对 Java 应用程序

-

Java 在使用 otel agent 在完成链路的自动接入的基础上,通过添加环境变量:

-
OTEL_METRICS_EXPORTER=prometheus
-
-

就可以直接暴露 JVM 相关指标,您可以通过访问 http://localhost:8888/metrics 来检查您的指标是否正常工作。

-

随后,再配合 prometheus serviceMonitor 即可完成指标的接入。 -如果想暴露自定义指标请参阅 opentelemetry-java-docs/prometheus

-

主要分以下两步:

-
    -
  • -

    创建 meter provider,并指定 prometheus 作为 exporter。

    -
    /*
    -* Copyright The OpenTelemetry Authors
    -* SPDX-License-Identifier: Apache-2.0
    -*/
    -
    -package io.opentelemetry.example.prometheus;
    -
    -import io.opentelemetry.api.metrics.MeterProvider;
    -import io.opentelemetry.exporter.prometheus.PrometheusHttpServer;
    -import io.opentelemetry.sdk.metrics.SdkMeterProvider;
    -import io.opentelemetry.sdk.metrics.export.MetricReader;
    -
    -public final class ExampleConfiguration {
    -
    -  /**
    -  * Initializes the Meter SDK and configures the prometheus collector with all default settings.
    -  *
    -  * @param prometheusPort the port to open up for scraping.
    -  * @return A MeterProvider for use in instrumentation.
    -  */
    -  static MeterProvider initializeOpenTelemetry(int prometheusPort) {
    -    MetricReader prometheusReader = PrometheusHttpServer.builder().setPort(prometheusPort).build();
    -
    -    return SdkMeterProvider.builder().registerMetricReader(prometheusReader).build();
    -  }
    -}
    -
    -
  • -
  • -

    自定义 meter 并开启 http server

    -
    package io.opentelemetry.example.prometheus;
    -
    -import io.opentelemetry.api.common.Attributes;
    -import io.opentelemetry.api.metrics.Meter;
    -import io.opentelemetry.api.metrics.MeterProvider;
    -import java.util.concurrent.ThreadLocalRandom;
    -
    -/**
    -* Example of using the PrometheusHttpServer to convert OTel metrics to Prometheus format and expose
    -* these to a Prometheus instance via a HttpServer exporter.
    -*
    -* <p>A Gauge is used to periodically measure how many incoming messages are awaiting processing.
    -* The Gauge callback gets executed every collection interval.
    -*/
    -public final class PrometheusExample {
    -  private long incomingMessageCount;
    -
    -  public PrometheusExample(MeterProvider meterProvider) {
    -    Meter meter = meterProvider.get("PrometheusExample");
    -    meter
    -        .gaugeBuilder("incoming.messages")
    -        .setDescription("No of incoming messages awaiting processing")
    -        .setUnit("message")
    -        .buildWithCallback(result -> result.record(incomingMessageCount, Attributes.empty()));
    -  }
    -
    -  void simulate() {
    -    for (int i = 500; i > 0; i--) {
    -      try {
    -        System.out.println(
    -            i + " Iterations to go, current incomingMessageCount is:  " + incomingMessageCount);
    -        incomingMessageCount = ThreadLocalRandom.current().nextLong(100);
    -        Thread.sleep(1000);
    -      } catch (InterruptedException e) {
    -        // ignored here
    -      }
    -    }
    -  }
    -
    -  public static void main(String[] args) {
    -    int prometheusPort = 8888;
    -
    -    // it is important to initialize the OpenTelemetry SDK as early as possible in your process.
    -    MeterProvider meterProvider = ExampleConfiguration.initializeOpenTelemetry(prometheusPort);
    -
    -    PrometheusExample prometheusExample = new PrometheusExample(meterProvider);
    -
    -    prometheusExample.simulate();
    -
    -    System.out.println("Exiting");
    -  }
    -}
    -
    -
  • -
-

随后,待 java 应用程序运行之后,您可以通过访问 http://localhost:8888/metrics 来检查您的指标是否正常工作。

-

Insight 采集指标

-

最后重要的是,您已经在应用程序中暴露出了指标,现在需要 Insight 来采集指标。

-

推荐的指标暴露方式是通过 servicemonitor 或者 podmonitor。

-

创建 servicemonitor/podmonitor

-

添加的 servicemonitor/podmonitor 需要打上 label:"operator.insight.io/managed-by": "insight" 才会被 Operator 识别:

-
apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
-  name: example-app
-  labels:
-    operator.insight.io/managed-by: insight
-spec:
-  selector:
-    matchLabels:
-      app: example-app
-  endpoints:
-  - port: web
-  namespaceSelector:
-    any: true
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/java/index.html b/site/end-user/insight/quickstart/otel/java/index.html deleted file mode 100644 index 2fac0d0..0000000 --- a/site/end-user/insight/quickstart/otel/java/index.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - - - - - - -开始监控 Java 应用 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

开始监控 Java 应用

-
    -
  1. -

    Java 应用链路接入与监控请参考通过 Operator 实现应用程序无侵入增强 文档,通过注解实现自动接入链路。

    -
  2. -
  3. -

    Java 应用的 JVM 进行监控:已经暴露 JVM 指标和仍未暴露 JVM 指标的 Java 应用如何与可观测性 Insight 对接。

    - -
  4. -
  5. -

    将 TraceId 和 SpanId 写入 Java 应用日志, 实现链路数据与日志数据关联

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html b/site/end-user/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html deleted file mode 100644 index e1c1b16..0000000 --- a/site/end-user/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - - - - - - - - -使用 JMX Exporter 暴露 JVM 监控指标 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

使用 JMX Exporter 暴露 JVM 监控指标

-

JMX-Exporter 提供了两种用法:

-
    -
  1. 启动独立进程。JVM 启动时指定参数,暴露 JMX 的 RMI 接口,JMX Exporter 调用 RMI 获取 JVM 运行时状态数据, - 转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
  2. -
  3. JVM 进程内启动(in-process)。JVM 启动时指定参数,通过 javaagent 的形式运行 JMX-Exporter 的 jar 包, - 进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
  4. -
-
-

Note

-

官方不推荐使用第一种方式,一方面配置复杂,另一方面因为它需要一个单独的进程,而这个进程本身的监控又成了新的问题, -所以本文重点围绕第二种用法讲如何在 Kubernetes 环境下使用 JMX Exporter 暴露 JVM 监控指标。

-
-

这里使用第二种用法,启动 JVM 时需要指定 JMX Exporter 的 jar 包文件和配置文件。 -jar 包是二进制文件,不好通过 configmap 挂载,配置文件我们几乎不需要修改, -所以建议是直接将 JMX Exporter 的 jar 包和配置文件都打包到业务容器镜像中。

-

其中,第二种方式我们可以选择将 JMX Exporter 的 jar 文件放在业务应用镜像中, -也可以选择在部署的时候挂载进去。这里分别对两种方式做一个介绍:

-

方式一:将 JMX Exporter JAR 文件构建至业务镜像中

-

prometheus-jmx-config.yaml 内容如下:

-
prometheus-jmx-config.yaml
...
-ssl: false
-lowercaseOutputName: false
-lowercaseOutputLabelNames: false
-rules:
-- pattern: ".*"
-
-
-

Note

-

更多配置项请参考底部介绍或Prometheus 官方文档

-
-

然后准备 jar 包文件,可以在 jmx_exporter 的 Github 页面找到最新的 jar 包下载地址并参考如下 Dockerfile:

-
FROM openjdk:11.0.15-jre
-WORKDIR /app/
-COPY target/my-app.jar ./
-COPY prometheus-jmx-config.yaml ./
-RUN set -ex; \
-    curl -L -O https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar;
-ENV JAVA_TOOL_OPTIONS=-javaagent:/app/jmx_prometheus_javaagent-0.17.2.jar=8088:/app/prometheus-jmx-config.yaml
-EXPOSE 8081 8999 8080 8888
-ENTRYPOINT java $JAVA_OPTS -jar my-app.jar
-
-

注意:

-
    -
  • 启动参数格式:-javaagent:=:
  • -
  • 这里使用了 8088 端口暴露 JVM 的监控指标,如果和 Java 应用冲突,可自行更改
  • -
-

方式二:通过 init container 容器挂载

-

我们需要先将 JMX exporter 做成 Docker 镜像, 以下 Dockerfile 仅供参考:

-
FROM alpine/curl:3.14
-WORKDIR /app/
-# 将前面创建的 config 文件拷贝至镜像
-COPY prometheus-jmx-config.yaml ./
-# 在线下载 jmx prometheus javaagent jar
-RUN set -ex; \
-    curl -L -O https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar;
-
-

根据上面 Dockerfile 构建镜像: docker build -t my-jmx-exporter .

-

在 Java 应用部署 Yaml 中加入如下 init container:

-
-点击展开 YAML 文件 -
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: my-demo-app
-  labels:
-    app: my-demo-app
-spec:
-  selector:
-    matchLabels:
-      app: my-demo-app
-  template:
-    metadata:
-      labels:
-        app: my-demo-app
-    spec:
-      imagePullSecrets:
-      - name: registry-pull
-      initContainers:
-      - name: jmx-sidecar
-        image: my-jmx-exporter
-        command: ["cp", "-r", "/app/jmx_prometheus_javaagent-0.17.2.jar", "/target/jmx_prometheus_javaagent-0.17.2.jar"]  
-        volumeMounts:
-        - name: sidecar
-          mountPath: /target
-      containers:
-      - image: my-demo-app-image
-        name: my-demo-app
-        resources:
-          requests:
-            memory: "1000Mi"
-            cpu: "500m"
-          limits:
-            memory: "1000Mi"
-            cpu: "500m"
-        ports:
-        - containerPort: 18083
-        env:
-        - name: JAVA_TOOL_OPTIONS
-          value: "-javaagent:/app/jmx_prometheus_javaagent-0.17.2.jar=8088:/app/prometheus-jmx-config.yaml" 
-        volumeMounts:
-        - name: host-time
-          mountPath: /etc/localtime
-          readOnly: true
-        - name: sidecar
-          mountPath: /sidecar
-      volumes:
-      - name: host-time
-        hostPath:
-          path: /etc/localtime
-      - name: sidecar  #共享 agent 文件夹
-        emptyDir: {}
-      restartPolicy: Always
-
-
-

经过如上的改造之后,示例应用 my-demo-app 具备了暴露 JVM 指标的能力。 -运行服务之后,我们可以通过 http://lcoalhost:8088 访问服务暴露出来的 prometheus 格式的指标。

-

接着,您可以参考 已有 JVM 指标的 Java 应用对接可观测性

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/java/jvm-monitor/legacy-jvm.html b/site/end-user/insight/quickstart/otel/java/jvm-monitor/legacy-jvm.html deleted file mode 100644 index 0813f65..0000000 --- a/site/end-user/insight/quickstart/otel/java/jvm-monitor/legacy-jvm.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - - - - - - -已有 JVM 指标的 Java 应用对接可观测性 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

已有 JVM 指标的 Java 应用对接可观测性

-

如果您的 Java 应用通过其他方式(比如 Spring Boot Actuator)暴露了 JVM 的监控指标, -我们需要让监控数据被采集到。您可以通过在工作负载中添加注解(Kubernetes Annotations)的方式让 Insight 来采集已有的 JVM 指标:

-
annatation: 
-  insight.opentelemetry.io/metric-scrape: "true" # 是否采集
-  insight.opentelemetry.io/metric-path: "/"      # 采集指标的路径
-  insight.opentelemetry.io/metric-port: "9464"   # 采集指标的端口
-
-

例如为 my-deployment-app 添加注解:

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: my-deployment-app
-spec:
-  selector:
-    matchLabels:
-      app: my-deployment-app
-      app.kubernetes.io/name: my-deployment-app
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: my-deployment-app
-        app.kubernetes.io/name: my-deployment-app
-      annotations:
-        insight.opentelemetry.io/metric-scrape: "true" # 是否采集
-        insight.opentelemetry.io/metric-path: "/"      # 采集指标的路径
-        insight.opentelemetry.io/metric-port: "9464"   # 采集指标的端口
-
-

以下是完整示例:

-
---
-apiVersion: v1
-kind: Service
-metadata:
-  name: spring-boot-actuator-prometheus-metrics-demo
-spec:
-  type: NodePort
-  selector:
-    #app: my-deployment-with-aotu-instrumentation-app
-    app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo
-  ports:
-    - name: http
-      port: 8080
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: spring-boot-actuator-prometheus-metrics-demo
-spec:
-  selector:
-    matchLabels:
-      #app: my-deployment-with-aotu-instrumentation-app
-      app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo
-      annotations:
-        insight.opentelemetry.io/metric-scrape: "true" # 是否采集
-        insight.opentelemetry.io/metric-path: "/actuator/prometheus"      # 采集指标的路径
-        insight.opentelemetry.io/metric-port: "8080"   # 采集指标的端口
-    spec:
-      containers:
-        - name: myapp
-          image: docker.m.daocloud.io/wutang/spring-boot-actuator-prometheus-metrics-demo
-          ports:
-            - name: http
-              containerPort: 8080
-          resources:
-            limits:
-              cpu: 500m
-              memory: 800Mi
-            requests:
-              cpu: 200m
-              memory: 400Mi
-
-

以上示例中,Insight 会通过 :8080//actuator/prometheus 抓取通过 Spring Boot Actuator 暴露出来的 Prometheus 指标。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html b/site/end-user/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html deleted file mode 100644 index bb8870f..0000000 --- a/site/end-user/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - - - - - - - -使用 OpenTelemetry Java Agent 暴露 JVM 监控指标 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

使用 OpenTelemetry Java Agent 暴露 JVM 监控指标

-

在 Opentelemetry Agent v1.20.0 及以上版本中,Opentelemetry Agent 新增了 JMX Metric Insight 模块,如果你的应用已经集成了 Opentelemetry Agent 去采集应用链路,那么你不再需要另外引入其他 Agent 去为我们的应用暴露 JMX 指标。Opentelemetry Agent 也是通过检测应用程序中本地可用的 MBean 公开的指标,对其进行收集并暴露指标。

-

Opentelemetry Agent 也针对常见的 Java Server 或框架内置了一些监控的样例,请参考预定义的指标

-

使用 OpenTelemetry Java Agent 同样需要考虑如何将 JAR 挂载进容器,除了可以参考上面 JMX Exporter 挂载 JAR 文件的方式外,我们还可以借助 Opentelemetry 提供的 Operator 的能力来实现自动为我们的应用开启 JVM 指标暴露:

-

如果你的应用已经集成了 Opentelemetry Agent 去采集应用链路,那么你不再需要另外引入其他 Agent 去为我们的应用暴露 JMX 指标。Opentelemetry Agent 通过检测应用程序中本地可用的 MBean 公开的指标,现在可以本地收集并暴露指标接口。

-

但是,截至目前版本,你仍然需要手动为应用加上相应注解之后,JVM 数据才会被 Insight 采集到,具体注解内容请参考 已有 JVM 指标的 Java 应用对接可观测性

-

为 Java 中间件暴露指标

-

Opentelemetry Agent 也内置了一些中间件监控的样例,请参考 预定义指标

-

默认没有指定任何类型,需要通过 -Dotel.jmx.target.system JVM Options 指定,比如 -Dotel.jmx.target.system=jetty,kafka-broker

-

参考

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/java/mdc.html b/site/end-user/insight/quickstart/otel/java/mdc.html deleted file mode 100644 index c1d8b18..0000000 --- a/site/end-user/insight/quickstart/otel/java/mdc.html +++ /dev/null @@ -1,491 +0,0 @@ - - - - - - - - - - - - -将 TraceId 和 SpanId 写入 Java 应用日志 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

将 TraceId 和 SpanId 写入 Java 应用日志

-

本文介绍如何使用 OpenTelemetry 将 TraceId 和 SpanId 自动写入 Java 应用日志。 -TraceId 与 SpanId 写入日志后,您可以将分布式链路数据与日志数据关联起来,实现更高效的故障诊断和性能分析。

-

支持的日志库

-

更多信息,请参见 Logger MDC auto-instrumentation

- - - - - - - - - - - - - - - - - - - - - - - - - -
日志框架支持自动埋点的版本手动埋点需要引入的依赖
Log4j 11.2+
Log4j 22.7+opentelemetry-log4j-context-data-2.17-autoconfigure
Logback1.0+opentelemetry-logback-mdc-1.0
-

使用 Logback(SpringBoot 项目)

-

Spring Boot 项目内置了日志框架,并且默认使用 Logback 作为其日志实现。如果您的 Java 项目为 SpringBoot 项目,只需少量配置即可将 TraceId 写入日志。

-

application.properties 中设置 logging.pattern.level,添加 %mdc{trace_id}%mdc{span_id} 到日志中。

-
logging.pattern.level=trace_id=%mdc{trace_id} span_id=%mdc{span_id} %5p ....省略...
-
-

以下为日志示例:

-
2024-06-26 10:56:31.200 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2024-06-26 10:56:31.201 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
-2024-06-26 10:56:31.209 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms
-2024-06-26 10:56:31.296 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=5743699405074f4e  INFO 53724 --- [nio-8081-exec-1] com.example.httpserver.ot.OTServer       : hello world
-
-

使用 Log4j2

-
    -
  1. -

    pom.xml 中添加 OpenTelemetry Log4j2 依赖:

    -
    -

    Tip

    -

    请将 OPENTELEMETRY_VERSION 替换为最新版本

    -
    -
    <dependencies>
    -  <dependency>
    -    <groupId>io.opentelemetry.instrumentation</groupId>
    -    <artifactId>opentelemetry-log4j-context-data-2.17-autoconfigure</artifactId>
    -    <version>OPENTELEMETRY_VERSION</version>
    -    <scope>runtime</scope>
    -  </dependency>
    -</dependencies>
    -
    -
  2. -
  3. -

    修改 log4j2.xml 配置,在 pattern 中添加 %X{trace_id}%X{span_id},可以将 TraceIdSpanId 自动写入日志:

    -
    <?xml version="1.0" encoding="UTF-8"?>
    -<Configuration>
    -  <Appenders>
    -    <Console name="Console" target="SYSTEM_OUT">
    -      <PatternLayout
    -          pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} - %msg%n"/>
    -    </Console>
    -  </Appenders>
    -  <Loggers>
    -    <Root>
    -      <AppenderRef ref="Console" level="All"/>
    -    </Root>
    -  </Loggers>
    -</Configuration>
    -
    -
  4. -
  5. -

    使用 Logback 在 pom.xml 中添加 OpenTelemetry Logback 依赖。

    -
    -

    Tip

    -

    请将 OPENTELEMETRY_VERSION 替换为最新版本

    -
    -
    <dependencies>
    -  <dependency>
    -    <groupId>io.opentelemetry.instrumentation</groupId>
    -    <artifactId>opentelemetry-logback-mdc-1.0</artifactId>
    -    <version>OPENTELEMETRY_VERSION</version>
    -  </dependency>
    -</dependencies>
    -
    -
  6. -
  7. -

    修改 log4j2.xml 配置,在 pattern 中添加 %X{trace_id}%X{span_id},可以将 TraceIdSpanId 自动写入日志:

    -
    <?xml version="1.0" encoding="UTF-8"?>
    -<configuration>
    -  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    -    <encoder>
    -      <pattern>%d{HH:mm:ss.SSS} trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} %msg%n</pattern>
    -    </encoder>
    -  </appender>
    -
    -  <!-- Just wrap your logging appender, for example ConsoleAppender, with OpenTelemetryAppender -->
    -  <appender name="OTEL" class="io.opentelemetry.instrumentation.logback.mdc.v1_0.OpenTelemetryAppender">
    -    <appender-ref ref="CONSOLE"/>
    -  </appender>
    -
    -  <!-- Use the wrapped "OTEL" appender instead of the original "CONSOLE" one -->
    -  <root level="INFO">
    -    <appender-ref ref="OTEL"/>
    -  </root>
    -
    -</configuration>
    -
    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/operator.html b/site/end-user/insight/quickstart/otel/operator.html deleted file mode 100644 index cc3d530..0000000 --- a/site/end-user/insight/quickstart/otel/operator.html +++ /dev/null @@ -1,922 +0,0 @@ - - - - - - - - - - - - -通过 Operator 实现应用程序无侵入增强 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

通过 Operator 实现应用程序无侵入增强

-
-

目前只有 Java、NodeJs、Python、.Net、Golang 支持 Operator 的方式无侵入接入。

-
-

前提条件

-

请确保 insight-agent 已经就绪。如若没有,请参考安装 insight-agent 采集数据并确保以下三项就绪:

-
    -
  • 为 insight-agent 开启 trace 功能
  • -
  • trace 数据的地址以及端口是否填写正确
  • -
  • deployment/insight-agent-opentelemetry-operator 和 - deployment/insight-agent-opentelemetry-collector 对应的 Pod 已经准备就绪
  • -
-

安装 Instrumentation CR

-
-

Tip

-

从 Insight v0.22.0 开始,不再需要手动安装 Instrumentation CR。

-
-

insight-system 命名空间下安装,不同版本之间有一些细小的差别。

-
-
-
-
K8S_CLUSTER_UID=$(kubectl get namespace kube-system -o jsonpath='{.metadata.uid}')
-kubectl apply -f - <<EOF
-apiVersion: opentelemetry.io/v1alpha1
-kind: Instrumentation
-metadata:
-  name: insight-opentelemetry-autoinstrumentation
-  namespace: insight-system
-spec:
-  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource
-  resource:
-    addK8sUIDAttributes: true
-  env:
-    - name: OTEL_EXPORTER_OTLP_ENDPOINT
-      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317
-  sampler:
-    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray
-    type: always_on
-  java:
-    image: ghcr.m.daocloud.io/openinsight-proj/autoinstrumentation-java:1.31.0
-    env:
-      - name: OTEL_JAVAAGENT_DEBUG
-        value: "false"
-      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
-        value: "true"
-      - name: SPLUNK_PROFILER_ENABLED
-        value: "false"
-      - name: OTEL_METRICS_EXPORTER
-        value: "prometheus"
-      - name: OTEL_METRICS_EXPORTER_PORT
-        value: "9464"
-      - name: OTEL_K8S_CLUSTER_UID
-        value: $K8S_CLUSTER_UID
-  nodejs:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1
-  python:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0
-  dotnet:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0
-  go:
-    # Must set the default value manually for now.
-    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha
-EOF
-
-
-
-
kubectl apply -f - <<EOF
-apiVersion: opentelemetry.io/v1alpha1
-kind: Instrumentation
-metadata:
-  name: insight-opentelemetry-autoinstrumentation
-  namespace: insight-system
-spec:
-  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource
-  resource:
-    addK8sUIDAttributes: true
-  env:
-    - name: OTEL_EXPORTER_OTLP_ENDPOINT
-      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317
-  sampler:
-    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray
-    type: always_on
-  java:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.29.0
-    env:
-      - name: OTEL_JAVAAGENT_DEBUG
-        value: "false"
-      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
-        value: "true"
-      - name: SPLUNK_PROFILER_ENABLED
-        value: "false"
-      - name: OTEL_METRICS_EXPORTER
-        value: "prometheus"
-      - name: OTEL_METRICS_EXPORTER_PORT
-        value: "9464"
-  nodejs:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1
-  python:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0
-  dotnet:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0-rc.2
-  go:
-    # Must set the default value manually for now.
-    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha
-EOF
-
-
-
-
kubectl apply -f - <<EOF
-apiVersion: opentelemetry.io/v1alpha1
-kind: Instrumentation
-metadata:
-  name: insight-opentelemetry-autoinstrumentation
-  namespace: insight-system
-spec:
-  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource
-  resource:
-    addK8sUIDAttributes: true
-  env:
-    - name: OTEL_EXPORTER_OTLP_ENDPOINT
-      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317
-  sampler:
-    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray
-    type: always_on
-  java:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.25.0
-    env:
-      - name: OTEL_JAVAAGENT_DEBUG
-        value: "false"
-      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
-        value: "true"
-      - name: SPLUNK_PROFILER_ENABLED
-        value: "false"
-      - name: OTEL_METRICS_EXPORTER
-        value: "prometheus"
-      - name: OTEL_METRICS_EXPORTER_PORT
-        value: "9464"
-  nodejs:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.37.0
-  python:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.38b0
-  go:
-    # Must set the default value manually for now.
-    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.1-alpha
-EOF
-
-
-
-
kubectl apply -f - <<EOF
-apiVersion: opentelemetry.io/v1alpha1
-kind: Instrumentation
-metadata:
-  name: insight-opentelemetry-autoinstrumentation
-  namespace: insight-system
-spec:
-  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource
-  resource:
-    addK8sUIDAttributes: true
-  env:
-    - name: OTEL_EXPORTER_OTLP_ENDPOINT
-      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317
-  sampler:
-    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray
-    type: always_on
-  java:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.23.0
-    env:
-      - name: OTEL_JAVAAGENT_DEBUG
-        value: "false"
-      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
-        value: "true"
-      - name: SPLUNK_PROFILER_ENABLED
-        value: "false"
-      - name: OTEL_METRICS_EXPORTER
-        value: "prometheus"
-      - name: OTEL_METRICS_EXPORTER_PORT
-        value: "9464"
-  nodejs:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.34.0
-  python:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.33b0
-EOF
-
-
-
-
kubectl apply -f - <<EOF
-apiVersion: opentelemetry.io/v1alpha1
-kind: Instrumentation
-metadata:
-  name: insight-opentelemetry-autoinstrumentation
-  namespace: insight-system
-spec:
-  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource
-  resource:
-    addK8sUIDAttributes: true
-  env:
-    - name: OTEL_EXPORTER_OTLP_ENDPOINT
-      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317
-  sampler:
-    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray
-    type: always_on
-  java:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.23.0
-    env:
-      - name: OTEL_JAVAAGENT_DEBUG
-        value: "false"
-      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
-        value: "true"
-      - name: SPLUNK_PROFILER_ENABLED
-        value: "false"
-      - name: OTEL_METRICS_EXPORTER
-        value: "prometheus"
-      - name: OTEL_METRICS_EXPORTER_PORT
-        value: "9464"
-  nodejs:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.34.0
-  python:
-    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.33b0
-EOF
-
-
-
-
-

与服务网格链路串联场景

-

如果您开启了服务网格的链路追踪能力,需要额外增加一个环境变量注入的配置:

-

操作步骤如下

-
    -
  1. 登录 AI 算力中心.0,进入 容器管理 后选择进入目标集群,
  2. -
  3. 点击左侧导航栏选择 自定义资源 ,找到 instrumentations.opentelemetry.io 后进入详情页。
  4. -
  5. -

    选择 insight-system 命名空间后,编辑 insight-opentelemetry-autoinstrumentation ,在 spec:env: 下添加以下内容:

    -
        - name: OTEL_SERVICE_NAME
    -      valueFrom:
    -        fieldRef:
    -          fieldPath: metadata.labels['app'] 
    -
    -

    otel-mesh

    -

    完整的命令如下(For Insight v0.21.x):

    -
    K8S_CLUSTER_UID=$(kubectl get namespace kube-system -o jsonpath='{.metadata.uid}')
    -kubectl apply -f - <<EOF
    -apiVersion: opentelemetry.io/v1alpha1
    -kind: Instrumentation
    -metadata:
    -  name: insight-opentelemetry-autoinstrumentation
    -  namespace: insight-system
    -spec:
    -  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource
    -  resource:
    -    addK8sUIDAttributes: true
    -  env:
    -    - name: OTEL_EXPORTER_OTLP_ENDPOINT
    -      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317
    -    - name: OTEL_SERVICE_NAME
    -      valueFrom:
    -        fieldRef:
    -          fieldPath: metadata.labels['app'] 
    -  sampler:
    -    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray
    -    type: always_on
    -  java:
    -    image: ghcr.m.daocloud.io/openinsight-proj/autoinstrumentation-java:1.31.0
    -    env:
    -      - name: OTEL_JAVAAGENT_DEBUG
    -        value: "false"
    -      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
    -        value: "true"
    -      - name: SPLUNK_PROFILER_ENABLED
    -        value: "false"
    -      - name: OTEL_METRICS_EXPORTER
    -        value: "prometheus"
    -      - name: OTEL_METRICS_EXPORTER_PORT
    -        value: "9464"
    -      - name: OTEL_K8S_CLUSTER_UID
    -        value: $K8S_CLUSTER_UID
    -  nodejs:
    -    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1
    -  python:
    -    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0
    -  dotnet:
    -    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0
    -  go:
    -    # Must set the default value manually for now.
    -    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.
    -    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha
    -EOF
    -
    -
  6. -
-

添加注解,自动接入链路

-

以上就绪之后,您就可以通过注解(Annotation)方式为应用程序接入链路追踪了,OTel 目前支持通过注解的方式接入链路。 -根据服务语言,需要添加上不同的 pod annotations。每个服务可添加两类注解之一:

-
    -
  • -

    只注入环境变量注解

    -

    这类注解只有一个,用于添加 otel 相关的环境变量,比如链路上报地址、容器所在的集群 id、命名空间等(这个注解在应用不支持自动探针语言时十分有用)

    -
    instrumentation.opentelemetry.io/inject-sdk: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -

    其中 value 被 / 分成两部分,第一个值 (insight-system) 是上一步安装的 CR 的命名空间, -第二个值 (insight-opentelemetry-autoinstrumentation) 是这个 CR 的名字。

    -
  • -
  • -

    自动探针注入以及环境变量注入注解

    -

    这类注解目前有 4 个,分别对应 4 种不同的编程语言:java、nodejs、python、dotnet, -使用它后就会对 spec.pod 下的第一个容器注入自动探针以及 otel 默认环境变量:

    -
    -
    -
    -
    instrumentation.opentelemetry.io/inject-java: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -
    -
    -
    instrumentation.opentelemetry.io/inject-nodejs: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -
    -
    -
    instrumentation.opentelemetry.io/inject-python: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -
    -
    -
    instrumentation.opentelemetry.io/inject-dotnet: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -
    -
    -

    由于 Go 自动检测需要设置 OTEL_GO_AUTO_TARGET_EXE, -因此您必须通过注解或 Instrumentation 资源提供有效的可执行路径。未设置此值会导致 Go 自动检测注入中止,从而导致接入链路失败。

    -
    instrumentation.opentelemetry.io/inject-go: "insight-system/insight-opentelemetry-autoinstrumentation"
    -instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/path/to/container/executable"
    -
    -

    Go 自动检测也需要提升权限。以下权限是自动设置的并且是必需的。

    -
    securityContext:
    -  privileged: true
    -  runAsUser: 0
    -
    -
    -
    -
    -
  • -
-
-

Tip

-

OpenTelemetry Operator 在注入探针时会自动添加一些 OTel 相关环境变量,同时也支持这些环境变量的覆盖。这些环境变量的覆盖优先级:

-
original container env vars -> language specific env vars -> common env vars -> instrument spec configs' vars
-
-

但是需要避免手动覆盖 OTEL_RESOURCE_ATTRIBUTES_NODE_NAME,它在 Operator 内部作为一个 -Pod 是否已经注入探针的标识,如果手动添加了,探针可能无法注入。

-
-

自动注入示例 Demo

-

注意这个 annotations 是加在 spec.annotations 下的。

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: my-app
-  labels:
-    app: my-app
-spec:
-  selector:
-    matchLabels:
-      app: my-app
-  replicas: 1
-  template:
-    metadata:
-      labels:
-        app: my-app
-      annotations:
-        instrumentation.opentelemetry.io/inject-java: "insight-system/insight-opentelemetry-autoinstrumentation"
-    spec:
-      containers:
-      - name: myapp
-        image: jaegertracing/vertx-create-span:operator-e2e-tests
-        ports:
-          - containerPort: 8080
-            protocol: TCP
-
-

最终生成的 YAML 内容如下:

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: my-deployment-with-sidecar-565bd877dd-nqkk6
-  generateName: my-deployment-with-sidecar-565bd877dd-
-  namespace: default
-  uid: aa89ca0d-620c-4d20-8bc1-37d67bad4ea4
-  resourceVersion: '2668986'
-  creationTimestamp: '2022-04-08T05:58:48Z'
-  labels:
-    app: my-pod-with-sidecar
-    pod-template-hash: 565bd877dd
-  annotations:
-    cni.projectcalico.org/containerID: 234eae5e55ea53db2a4bc2c0384b9a1021ed3908f82a675e4a92a49a7e80dd61
-    cni.projectcalico.org/podIP: 192.168.134.133/32
-    cni.projectcalico.org/podIPs: 192.168.134.133/32
-    instrumentation.opentelemetry.io/inject-java: "insight-system/insight-opentelemetry-autoinstrumentation"
-spec:
-  volumes:
-    - name: kube-api-access-sp2mz
-      projected:
-        sources:
-          - serviceAccountToken:
-              expirationSeconds: 3607
-              path: token
-          - configMap:
-              name: kube-root-ca.crt
-              items:
-                - key: ca.crt
-                  path: ca.crt
-          - downwardAPI:
-              items:
-                - path: namespace
-                  fieldRef:
-                    apiVersion: v1
-                    fieldPath: metadata.namespace
-        defaultMode: 420
-    - name: opentelemetry-auto-instrumentation
-      emptyDir: {}
-  initContainers:
-    - name: opentelemetry-auto-instrumentation
-      image: >-
-        ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java
-      command:
-        - cp
-        - /javaagent.jar
-        - /otel-auto-instrumentation/javaagent.jar
-      resources: {}
-      volumeMounts:
-        - name: opentelemetry-auto-instrumentation
-          mountPath: /otel-auto-instrumentation
-        - name: kube-api-access-sp2mz
-          readOnly: true
-          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
-      terminationMessagePath: /dev/termination-log
-      terminationMessagePolicy: File
-      imagePullPolicy: Always
-  containers:
-    - name: myapp
-      image: ghcr.io/pavolloffay/spring-petclinic:latest
-      env:
-        - name: OTEL_JAVAAGENT_DEBUG
-          value: 'true'
-        - name: OTEL_INSTRUMENTATION_JDBC_ENABLED
-          value: 'true'
-        - name: SPLUNK_PROFILER_ENABLED
-          value: 'false'
-        - name: JAVA_TOOL_OPTIONS
-          value: ' -javaagent:/otel-auto-instrumentation/javaagent.jar'
-        - name: OTEL_TRACES_EXPORTER
-          value: otlp
-        - name: OTEL_EXPORTER_OTLP_ENDPOINT
-          value: http://insight-agent-opentelemetry-collector.svc.cluster.local:4317
-        - name: OTEL_EXPORTER_OTLP_TIMEOUT
-          value: '20'
-        - name: OTEL_TRACES_SAMPLER
-          value: parentbased_traceidratio
-        - name: OTEL_TRACES_SAMPLER_ARG
-          value: '0.85'
-        - name: SPLUNK_TRACE_RESPONSE_HEADER_ENABLED
-          value: 'true'
-        - name: OTEL_SERVICE_NAME
-          value: my-deployment-with-sidecar
-        - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME
-          valueFrom:
-            fieldRef:
-              apiVersion: v1
-              fieldPath: metadata.name
-        - name: OTEL_RESOURCE_ATTRIBUTES_POD_UID
-          valueFrom:
-            fieldRef:
-              apiVersion: v1
-              fieldPath: metadata.uid
-        - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
-          valueFrom:
-            fieldRef:
-              apiVersion: v1
-              fieldPath: spec.nodeName
-        - name: OTEL_RESOURCE_ATTRIBUTES
-          value: >-
-            k8s.container.name=myapp,k8s.deployment.name=my-deployment-with-sidecar,k8s.deployment.uid=8de6929d-dda0-436c-bca1-604e9ca7ea4e,k8s.namespace.name=default,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),k8s.pod.uid=$(OTEL_RESOURCE_ATTRIBUTES_POD_UID),k8s.replicaset.name=my-deployment-with-sidecar-565bd877dd,k8s.replicaset.uid=190d5f6e-ba7f-4794-b2e6-390b5879a6c4
-        - name: OTEL_PROPAGATORS
-          value: jaeger,b3
-      resources: {}
-      volumeMounts:
-        - name: kube-api-access-sp2mz
-          readOnly: true
-          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
-        - name: opentelemetry-auto-instrumentation
-          mountPath: /otel-auto-instrumentation
-      terminationMessagePath: /dev/termination-log
-      terminationMessagePolicy: File
-      imagePullPolicy: Always
-  restartPolicy: Always
-  terminationGracePeriodSeconds: 30
-  dnsPolicy: ClusterFirst
-  serviceAccountName: default
-  serviceAccount: default
-  nodeName: k8s-master3
-  securityContext:
-    runAsUser: 1000
-    runAsGroup: 3000
-    fsGroup: 2000
-  schedulerName: default-scheduler
-  tolerations:
-    - key: node.kubernetes.io/not-ready
-      operator: Exists
-      effect: NoExecute
-      tolerationSeconds: 300
-    - key: node.kubernetes.io/unreachable
-      operator: Exists
-      effect: NoExecute
-      tolerationSeconds: 300
-  priority: 0
-  enableServiceLinks: true
-  preemptionPolicy: PreemptLowerPriority
-
-

链路查询

-

如何查询已经接入的服务,参考链路查询

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/otel.html b/site/end-user/insight/quickstart/otel/otel.html deleted file mode 100644 index 0cc2057..0000000 --- a/site/end-user/insight/quickstart/otel/otel.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - - - - - - - -使用 OTel 赋予应用可观测性 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

使用 OTel 赋予应用可观测性

-
-

增强是使应用程序代码能够生成遥测数据的过程。即一些可以帮助您监视或测量应用程序的性能和状态的东西。

-
-

OpenTelemetry 是领先的开源项目,为主要编程语言和流行框架提供检测库。它是云原生计算基金会下的一个项目,得到了社区庞大资源的支持。 -它为采集的数据提供标准化的数据格式,无需集成特定的供应商。

-

Insight 支持用于检测应用程序的 OpenTelemetry 来增强您的应用程序。

-

本指南介绍了使用 OpenTelemetry 进行遥测增强的基本概念。 -OpenTelemetry 还有一个由库、插件、集成和其他有用工具组成的生态系统来扩展它。 -您可以在 Otel Registry 中找到这些资源。

-

您可以使用任何开放标准库进行遥测增强,并使用 Insight 作为可观察性后端来摄取、分析和可视化数据。

-

为了增强您的代码,您可以使用 OpenTelemetry 为特定语言提供的增强操作:

-

Insight 目前提供了使用 OpenTelemetry 增强 .Net NodeJS、Java、Python 和 Golang 应用程序的简单方法。请遵循以下指南。

-

链路增强

- - -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/otel/send_tracing_to_insight.html b/site/end-user/insight/quickstart/otel/send_tracing_to_insight.html deleted file mode 100644 index c18a776..0000000 --- a/site/end-user/insight/quickstart/otel/send_tracing_to_insight.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - - - - - - - -向 Insight 发送链路数据 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

向 Insight 发送链路数据

-

此文档主要描述客户应用如何自行将链路数据上报给 Insight。主要包含如下两种场景:

-
    -
  1. 客户应用通过 OTEL Agent/SDK 上报链路给 Insight
  2. -
  3. 通过 Opentelemtry Collector(简称 OTEL COL) 将链路转发给 Insight
  4. -
-

在每个已安装 Insight Agent 的集群中都有 insight-agent-otel-col 组件用于统一接收该集群的链路数据。 -因此,该组件作为用户接入侧的入口,需要先获取该地址。可以通过 AI 算力中心 界面获取该集群 Opentelemtry Collector 的地址, -比如 insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317

-

image

-

除此之外,针对不同上报方式,有一些细微差别:

-

客户应用通过 OTel Agent/SDK 上报链路给 Insight Agent Opentelemtry Collector

-

为了能够将链路数据正常上报至 Insight 并能够在 Insight 正常展示,需要并建议通过如下环境变量提供 OTLP 所需的元数据 (Resource Attribute),有两种方式可实现:

-
    -
  • -

    在部署文件 YAML 中手动添加,例如:

    -
    ...
    -- name: OTEL_EXPORTER_OTLP_ENDPOINT
    -  value: "http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317"
    -- name: "OTEL_SERVICE_NAME"
    -  value: my-java-app-name
    -- name: "OTEL_K8S_NAMESPACE"
    -  valueFrom:
    -    fieldRef:
    -      apiVersion: v1
    -      fieldPath: metadata.namespace
    -- name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
    -  valueFrom:
    -    fieldRef:
    -      apiVersion: v1
    -      fieldPath: spec.nodeName
    -- name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME
    -  valueFrom:
    -    fieldRef:
    -      apiVersion: v1
    -      fieldPath: metadata.name
    -- name: OTEL_RESOURCE_ATTRIBUTES
    -  value: "k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)"
    -
    -
  • -
  • -

    利用 Insight Agent 自动注入如上元数据 (Resource Attribute) 能力

    -

    确保 Insight Agent 正常工作并 安装 Instrumentation CR 之后, -只需要为 Pod 添加如下 Annotation 即可:

    -
    instrumentation.opentelemetry.io/inject-sdk: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -

    举例:

    -
    apiVersion: apps/v1
    -kind: Deployment
    -metadata:
    -  name: my-deployment-with-aotu-instrumentation
    -spec:
    -  selector:
    -    matchLabels:
    -      app.kubernetes.io/name: my-deployment-with-aotu-instrumentation-kuberntes
    -  replicas: 1
    -  template:
    -    metadata:
    -      labels:
    -        app.kubernetes.io/name: my-deployment-with-aotu-instrumentation-kuberntes
    -      annotations:
    -        sidecar.opentelemetry.io/inject: "false"
    -        instrumentation.opentelemetry.io/inject-sdk: "insight-system/insight-opentelemetry-autoinstrumentation"
    -
    -
  • -
-

通过 Opentelemtry Collector 将链路转发给 Insight Agent Opentelemtry Collector

-

在保证应用添加了如上元数据之后,只需在客户 Opentelemtry Collector 里面新增一个 OTLP Exporter 将链路数据转发给 -Insight Agent Opentelemtry Collector 即可,如下 Opentelemtry Collector 配置文件所示:

-
...
-exporters:
-  otlp/insight:
-    endpoint: insight-opentelemetry-collector.insight-system.svc.cluster.local:4317
-service:
-...
-pipelines:
-...
-traces:
-  exporters:
-    - otlp/insight
-
-

参考

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/other/install-agent-on-ocp.html b/site/end-user/insight/quickstart/other/install-agent-on-ocp.html deleted file mode 100644 index 19a7ff9..0000000 --- a/site/end-user/insight/quickstart/other/install-agent-on-ocp.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - - - - - - - -OpenShift 安装 Insight Agent - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

OpenShift 安装 Insight Agent

-

虽然 OpenShift 系统自带了一套监控系统,因为数据采集约定的一些规则,我们还是会安装 Insight Agent。

-

其中,安除了基础的安装配置之外,helm install 的时候还需要增加如下的参数:

-
## 针对 fluentbit 相关的参数;
---set fluent-bit.ocp.enabled=true \
---set fluent-bit.serviceAccount.create=false \
---set fluent-bit.securityContext.runAsUser=0 \
---set fluent-bit.securityContext.seLinuxOptions.type=spc_t \
---set fluent-bit.securityContext.readOnlyRootFilesystem=false \
---set fluent-bit.securityContext.allowPrivilegeEscalation=false \
-
-## 启用适配 OpenShift4.x 的 Prometheus(CR)
---set compatibility.openshift.prometheus.enabled=true \
-
-## 关闭高版本的 Prometheus 实例
---set kube-prometheus-stack.prometheus.enabled=false \
---set kube-prometheus-stack.kubeApiServer.enabled=false \
---set kube-prometheus-stack.kubelet.enabled=false \
---set kube-prometheus-stack.kubeControllerManager.enabled=false \
---set kube-prometheus-stack.coreDns.enabled=false \
---set kube-prometheus-stack.kubeDns.enabled=false \
---set kube-prometheus-stack.kubeEtcd.enabled=false \
---set kube-prometheus-stack.kubeEtcd.enabled=false \
---set kube-prometheus-stack.kubeScheduler.enabled=false \
---set kube-prometheus-stack.kubeStateMetrics.enabled=false \
---set kube-prometheus-stack.nodeExporter.enabled=false \
-
-## 限制 PrometheusOperator 处理的 namespace,避免与 OpenShift 自带的 PrometheusOperator 相互竞争
---set kube-prometheus-stack.prometheusOperator.kubeletService.namespace="insight-system" \
---set kube-prometheus-stack.prometheusOperator.prometheusInstanceNamespaces="insight-system" \
---set kube-prometheus-stack.prometheusOperator.denyNamespaces[0]="openshift-monitoring" \
---set kube-prometheus-stack.prometheusOperator.denyNamespaces[1]="openshift-user-workload-monitoring" \
---set kube-prometheus-stack.prometheusOperator.denyNamespaces[2]="openshift-customer-monitoring" \
---set kube-prometheus-stack.prometheusOperator.denyNamespaces[3]="openshift-route-monitor-operator" \
-
-

通过 OpenShift 自身机制,将系统监控数据写入 Prometheus 中

-
apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: cluster-monitoring-config
-  namespace: openshift-monitoring
-data:
-  config.yaml: |
-    prometheusK8s:
-      remoteWrite:
-        - queueConfig:
-            batchSendDeadline: 60s
-            maxBackoff: 5s
-            minBackoff: 30ms
-            minShards: 1
-            capacity: 5000
-            maxSamplesPerSend: 1000
-            maxShards: 100
-          remoteTimeout: 30s
-          url: http://insight-agent-prometheus.insight-system.svc.cluster.local:9090/api/v1/write
-          writeRelabelConfigs:
-            - action: keep
-              regex: etcd|kubelet|node-exporter|apiserver|kube-state-metrics
-              sourceLabels:
-                - job
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/res-plan/index.html b/site/end-user/insight/quickstart/res-plan/index.html deleted file mode 100644 index 9aef315..0000000 --- a/site/end-user/insight/quickstart/res-plan/index.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - - - - - - -部署容量规划 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

部署容量规划

-

默认情况下,可观测性模块为了避免消耗过多资源,已经设置了资源上线(resource limit),可观测系统需要处理大量的数据,如果容量规划不合理,可能会导致系统负载过高,影响稳定性和可靠性。

-

观测组件的资源规划

-

可观测性模块包含 Insight 和 Insight Agent。其中,Insight 主要负责观测数据的存储,分析与展示。而 Insight Agent 包含了数据采集、数据处理、数据上传等功能。

-

存储组件的容量规划

-

Insight 的存储组件主要包括 ElasticSearch 和 VictoriaMetrics. 其中,ElasticSearch 主要负责存储和查询日志与链路数据,VictoriaMetrics 主要负责存储和查询指标数据。

- -

采集器的资源规划

-

Insight Agent 的采集器中包含 Proemtheus,虽然 Prometheus 本身是一个独立的组件,但是在 Insight Agent 中,Prometheus 会被用于采集数据,因此需要对 Prometheus 的资源进行规划。

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/res-plan/modify-vms-disk.html b/site/end-user/insight/quickstart/res-plan/modify-vms-disk.html deleted file mode 100644 index 47f3579..0000000 --- a/site/end-user/insight/quickstart/res-plan/modify-vms-disk.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - - - - - - - - - -vmstorge 磁盘扩容 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

vmstorge 磁盘扩容

-

本文描述了 vmstorge 磁盘扩容的方法, -vmstorge 磁盘规范请参考 vmstorage 磁盘容量规划

-

操作步骤

-

开启存储池扩容

-
    -
  1. -

    以全局服务集群管理员权限登录 AI 算力中心 平台,点击 容器管理 -> 集群列表 ,点击 kpanda-global-cluster 集群。

    -
  2. -
  3. -

    选择左侧导航 容器存储 -> 数据卷声明(PVC) ,找到 vmstorage 绑定的数据卷声明。

    -

    找到vmstorage

    -
  4. -
  5. -

    点击某个 vmstorage PVC,进入 vmstorage 的数据卷声明详情,确认该 PVC 绑定的存储池。

    -

    修改磁盘

    -
  6. -
  7. -

    选择左侧导航 容器存储 -> 存储池(SC) ,找到 local-path ,点击目标右侧的 ,在弹出菜单中选择 编辑

    -

    编辑存储池

    -
  8. -
  9. -

    开启 扩容 后点击 确定

    -

    开启扩容

    -
  10. -
-

更改 vmstorage 的磁盘容量

-
    -
  1. -

    以全局服务集群管理员权限登录 AI 算力中心 平台,进入 kpanda-global-cluster 集群详情。

    -
  2. -
  3. -

    选择左侧导航 自定义资源 ,找到 vmcluster 的自定义资源。

    -

    vmcluster

    -
  4. -
  5. -

    点击该 vmcluster 自定义资源进入详情页,切换到 insight-system 命名空间下,从 insight-victoria-metrics-k8s-stack 右侧菜单选择 编辑 YAML

    -

    编辑 YAML

    -
  6. -
  7. -

    根据图例修改后点击 确定

    -

    修改 YAML

    -
  8. -
  9. -

    再次选择左侧导航 容器存储 -> 数据卷声明(PVC) ,找到 vmstorage 绑定的数据卷声明确认修改已生效。在某个 PVC 详情页,点击关联存储源 (PV)。

    -

    关联存储源

    -
  10. -
  11. -

    打开数据卷详情页,点击右上角 更新 按钮。

    -

    更新

    -
  12. -
  13. -

    修改 容量 后点击 确定 ,稍等片刻等到扩容成功。

    -

    修改容量

    -
  14. -
-

克隆存储卷

-

若存储卷扩容失败,可参考以下方法克隆存储卷。

-
    -
  1. -

    以全局服务集群管理员权限登录 AI 算力中心 平台,进入 kpanda-global-cluster 集群详情。

    -
  2. -
  3. -

    选择左侧导航 工作负载 -> 有状态负载 ,找到 vmstorage 的有状态负载,点击目标右侧的 ,在弹出菜单中选择 状态 -> 停止 -> 确定

    -

    状态停止

    -
  4. -
  5. -

    在命令行中登录 kpanda-global-cluster 集群的 master 节点后,执行以下命令复制 vmstorage 容器中的 vm-data 目录将指标信息存储在本地:

    -
    kubectl cp -n insight-system vmstorage-insight-victoria-metrics-k8s-stack-1:vm-data ./vm-data
    -
    -
  6. -
  7. -

    登录 AI 算力中心 平台进入 kpanda-global-cluster 集群详情,选择左侧导航 容器存储 -> 数据卷(PV) ,点击右上角的 克隆 ,并修改数据卷的容量。

    -

    克隆

    -

    修改容量

    -
  8. -
  9. -

    删除之前 vmstorage 的数据卷。

    -

    删除数据卷

    -
  10. -
  11. -

    稍等片刻,待存储卷声明跟克隆的数据卷绑定后,执行以下命令将第 3 步中导出的数据导入到对应的容器中,然后开启之前暂停的 vmstorage

    -
    kubectl cp -n insight-system ./vm-data vmstorage-insight-victoria-metrics-k8s-stack-1:vm-data
    -
    -
  12. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/res-plan/prometheus-res.html b/site/end-user/insight/quickstart/res-plan/prometheus-res.html deleted file mode 100644 index 1434eb5..0000000 --- a/site/end-user/insight/quickstart/res-plan/prometheus-res.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - - - - - - - - - -Prometheus 资源规划 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

Prometheus 资源规划

-

Prometheus 在实际使用过程中,受到集群容器数量以及开启 Istio 的影响,会导致 Prometheus 的 CPU、内存等资源使用量超出设定的资源。

-

为了保证不同规模集群下 Prometheus 的正常运行,需要根据集群的实际规模对 Prometheus 进行资源调整。

-

参考资源规划

-

在未开启网格情况下,测试情况统计出系统 Job 指标量与 Pod 的关系为 Series 数量 = 800 * Pod 数量

-

在开启服务网格时,开启功能后 Pod 产生的 Istio 相关指标数量级为 Series 数量 = 768 * Pod 数量

-

当未开启服务网格时

-

以下资源规划为 未开启服务网格 场景下,Prometheus 的资源规划推荐:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
集群规模(Pod 数)指标量(未开启服务网格)CPU(core)内存(GB)
1008wRequest: 0.5
Limit:1
Request:2GB
Limit:4GB
20016wRequest:1
Limit:1.5
Request:3GB
Limit:6GB
30024wRequest:1
Limit:2
Request:3GB
Limit:6GB
40032wRequest:1
Limit:2
Request:4GB
Limit:8GB
50040wRequest:1.5
Limit:3
Request:5GB
Limit:10GB
80064wRequest:2
Limit:4
Request:8GB
Limit:16GB
100080wRequest:2.5
Limit:5
Request:9GB
Limit:18GB
2000160wRequest:3.5
Limit:7
Request:20GB
Limit:40GB
3000240wRequest:4
Limit:8
Request:33GB
Limit:66GB
-

当开启服务网格功能时

-

以下资源规划为 开启服务网格 场景下,Prometheus 的资源规划推荐:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
集群规模(Pod 数)指标量(已开启服务网格)CPU(core)内存(GB)
10015wRequest: 1
Limit:2
Request:3GB
Limit:6GB
20031wRequest:2
Limit:3
Request:5GB
Limit:10GB
30046wRequest:2
Limit:4
Request:6GB
Limit:12GB
40062wRequest:2
Limit:4
Request:8GB
Limit:16GB
50078wRequest:3
Limit:6
Request:10GB
Limit:20GB
800125wRequest:4
Limit:8
Request:15GB
Limit:30GB
1000156wRequest:5
Limit:10
Request:18GB
Limit:36GB
2000312wRequest:7
Limit:14
Request:40GB
Limit:80GB
3000468wRequest:8
Limit:16
Request:65GB
Limit:130GB
-
-

Note

-
    -
  1. 表格中的 Pod 数量 指集群中基本稳定运行的 Pod 数量,如出现大量的 Pod 重启,则会造成短时间内指标量的陡增,此时资源需要进行相应上调。
  2. -
  3. Prometheus 内存中默认保存两小时数据,且集群中开启了 Remote Write 功能时,会占用一定内存,资源超配比建议配置为 2。
  4. -
  5. 表格中数据为推荐值,适用于通用情况。如环境有精确的资源要求,建议在集群运行一段时间后,查看对应 Prometheus 的资源占用量进行精确配置。
  6. -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/quickstart/res-plan/vms-res-plan.html b/site/end-user/insight/quickstart/res-plan/vms-res-plan.html deleted file mode 100644 index 2fcf972..0000000 --- a/site/end-user/insight/quickstart/res-plan/vms-res-plan.html +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - - - - - - - -vmstorage 磁盘容量规划 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

vmstorage 磁盘容量规划

-

vmstorage 是负责存储可观测性多集群指标。 -为保证 vmstorage 的稳定性,需要根据集群数量及集群规模调整 vmstorage 的磁盘容量。 -更多资料请参考 vmstorage 保留期与磁盘空间

-

测试结果

-

经过 14 天对不同规模的集群的 vmstorage 的磁盘观测, -我们发现 vmstorage 的磁盘用量与其存储的指标量和单个数据点占用磁盘正相关。

-
    -
  1. 瞬时存储的指标量 increase(vm_rows{ type != "indexdb"}[30s]) 以获取 30s 内增加的指标量
  2. -
  3. 单个数据点 (datapoint) 的占用磁盘: sum(vm_data_size_bytes{type!="indexdb"}) / sum(vm_rows{type != "indexdb"})
  4. -
-

计算方法

-

磁盘用量 = 瞬时指标量 x 2 x 单个数据点的占用磁盘 x 60 x 24 x 存储时间 (天)

-

参数说明:

-
    -
  1. 磁盘用量单位为 Byte
  2. -
  3. 存储时长(天) x 60 x 24 将时间(天)换算成分钟以便计算磁盘用量。
  4. -
  5. Insight Agent 中 Prometheus 默认采集时间为 30s ,故在 1 分钟内产生两倍的指标量。
  6. -
  7. vmstorage 中默认存储时长为 1 个月,修改配置请参考修改系统配置
  8. -
-
-

Warning

-

该公式为通用方案,建议在计算结果上预留冗余磁盘容量以保证 vmstorage 的正常运行。

-
-

参考容量

-

表格中数据是根据默认存储时间为一个月 (30 天),单个数据点 (datapoint) 的占用磁盘取 0.9 计算所得结果。 -多集群场景下,Pod 数量表示多集群 Pod 数量的总和。

-

当未开启服务网格时

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
集群规模 (Pod 数)指标量磁盘容量
1008w6 GiB
20016w12 GiB
30024w18 GiB
40032w24 GiB
50040w30 GiB
80064w48 GiB
100080w60 GiB
2000160w120 GiB
3000240w180 GiB
-

当开启服务网格时

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
集群规模 (Pod 数)指标量磁盘容量
10015w12 GiB
20031w24 GiB
30046w36 GiB
40062w48 GiB
50078w60 GiB
800125w94 GiB
1000156w120 GiB
2000312w235 GiB
3000468w350 GiB
-

举例说明

-

AI 算力中心 平台中有两个集群,其中全局服务集群(开启服务网格)中运行 500 个 Pod,工作集群(未开启服务网格)运行了 1000 个 Pod,预期指标存 30 天。

-
    -
  • 全局服务集群中指标量为 800x500 + 768x500 = 784000
  • -
  • 工作集群指标量为 800x1000 = 800000
  • -
-

则当前 vmstorage 磁盘用量应设置为 (784000+80000)x2x0.9x60x24x31 = 124384896000 byte = 116 GiB

-
-

Note

-

集群中指标量与 Pod 数量的关系可参考 Prometheus 资源规划

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/system-config/modify-config.html b/site/end-user/insight/system-config/modify-config.html deleted file mode 100644 index 1d40d1e..0000000 --- a/site/end-user/insight/system-config/modify-config.html +++ /dev/null @@ -1,594 +0,0 @@ - - - - - - - - - - - - -修改系统配置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

修改系统配置

-

可观测性会默认持久化保存指标、日志、链路的数据,您可参阅本文修改系统配置。该文档仅适用于内置部署的 Elasticsearch,若使用外部 Elasticsearch 可自行调整。

-

如何修改指标数据保留期限

-

先 ssh 登录到对应的节点,参考以下步骤修改指标数据保留期限。

-
    -
  1. -

    执行以下命令:

    -
    kubectl edit vmcluster insight-victoria-metrics-k8s-stack -n insight-system
    -
    -
  2. -
  3. -

    在 Yaml 文件中, retentionPeriod 的默认值为 14 ,单位为 。您可根据需求修改参数。

    -
    apiVersion: operator.victoriametrics.com/v1beta1
    -kind: VMCluster
    -metadata:
    -  annotations:
    -    meta.helm.sh/release-name: insight
    -    meta.helm.sh/release-namespace: insight-system
    -  creationTimestamp: "2022-08-25T04:31:02Z"
    -  finalizers:
    -  - apps.victoriametrics.com/finalizer
    -  generation: 2
    -  labels:
    -    app.kubernetes.io/instance: insight
    -    app.kubernetes.io/managed-by: Helm
    -    app.kubernetes.io/name: victoria-metrics-k8s-stack
    -    app.kubernetes.io/version: 1.77.2
    -    helm.sh/chart: victoria-metrics-k8s-stack-0.9.3
    -  name: insight-victoria-metrics-k8s-stack
    -  namespace: insight-system
    -  resourceVersion: "123007381"
    -  uid: 55cee8d6-c651-404b-b2c9-50603b405b54
    -spec:
    -  replicationFactor: 1
    -  retentionPeriod: "14"
    -  vminsert:
    -    extraArgs:
    -      maxLabelsPerTimeseries: "45"
    -    image:
    -      repository: docker.m.daocloud.io/victoriametrics/vminsert
    -      tag: v1.80.0-cluster
    -      replicaCount: 1
    -
    -
  4. -
  5. -

    保存修改后,负责存储指标的组件的容器组会自动重启,稍等片刻即可。

    -
  6. -
-

如何修改日志数据存储时长

-

先 ssh 登录到对应的节点,参考以下步骤修改日志数据保留期限:

-

方法一:修改 Json 文件

-
    -
  1. -

    修改以下文件中 rollover 字段中的 max_age 参数,并设置保留期限,默认存储时长为 7d 。注意需要修改第一行中的 Elastic 用户名和密码、IP 地址和索引。

    -
    curl  --insecure --location -u"elastic:amyVt4o826e322TUVi13Ezw6" -X PUT "https://172.30.47.112:30468/_ilm/policy/insight-es-k8s-logs-policy?pretty" -H 'Content-Type: application/json' -d'
    -{
    -    "policy": {
    -        "phases": {
    -            "hot": {
    -                "min_age": "0ms",
    -                "actions": {
    -                    "set_priority": {
    -                        "priority": 100
    -                    },
    -                    "rollover": {
    -                        "max_age": "8d",
    -                        "max_size": "10gb"
    -                    }
    -                }
    -            },
    -            "warm": {
    -                "min_age": "10d",
    -                "actions": {
    -                    "forcemerge": {
    -                        "max_num_segments": 1
    -                    }
    -                }
    -            },
    -            "delete": {
    -                "min_age": "30d",
    -                "actions": {
    -                    "delete": {}
    -                }
    -            }
    -        }
    -    }
    -}'
    -
    -
  2. -
  3. -

    修改完后,执行以上命令。它会打印出如下所示内容,则修改成功。

    -
    {
    -"acknowledged" : true
    -}
    -
    -
  4. -
-

方法二:从 UI 修改

-
    -
  1. -

    登录 kibana ,选择左侧导航栏 Stack Management

    -

    Stack Management

    -
  2. -
  3. -

    选择左侧导航 Index Lifecycle Polices ,并找到索引 insight-es-k8s-logs-policy ,点击进入详情。

    -

    索引

    -
  4. -
  5. -

    展开 Hot phase 配置面板,修改 Maximum age 参数,并设置保留期限,默认存储时长为 7d

    -

    保留期限

    -
  6. -
  7. -

    修改完后,点击页面底部的 Save policy 即修改成功。

    -

    保存

    -
  8. -
-

如何修改链路数据存储时长

-

先 ssh 登录到对应的节点,参考以下步骤修改链路数据保留期限:

-

方法一:修改 Json 文件

-
    -
  1. -

    修改以下文件中 rollover 字段中的 max_age 参数,并设置保留期限,默认存储时长为 7d 。注意需要修改第一行中的 Elastic 用户名和密码、IP 地址和索引。

    -
    curl --insecure --location -u"elastic:amyVt4o826e322TUVi13Ezw6" -X PUT "https://172.30.47.112:30468/_ilm/policy/jaeger-ilm-policy?pretty" -H 'Content-Type: application/json' -d'
    -{
    -    "policy": {
    -        "phases": {
    -            "hot": {
    -                "min_age": "0ms",
    -                "actions": {
    -                    "set_priority": {
    -                        "priority": 100
    -                    },
    -                    "rollover": {
    -                        "max_age": "6d",
    -                        "max_size": "10gb"
    -                    }
    -                }
    -            },
    -            "warm": {
    -                "min_age": "10d",
    -                "actions": {
    -                    "forcemerge": {
    -                        "max_num_segments": 1
    -                    }
    -                }
    -            },
    -            "delete": {
    -                "min_age": "30d",
    -                "actions": {
    -                    "delete": {}
    -                }
    -            }
    -        }
    -    }
    -}'
    -
    -
  2. -
  3. -

    修改完后,在控制台执行以上命令。它会打印出如下所示内容,则修改成功。

    -
    {
    -"acknowledged" : true
    -}
    -
    -
  4. -
-

方法二:从 UI 修改

-
    -
  1. -

    登录 kibana ,选择左侧导航栏 Stack Management

    -

    Stack Management

    -
  2. -
  3. -

    选择左侧导航 Index Lifecycle Polices ,并找到索引 jaeger-ilm-policy ,点击进入详情。

    -

    索引

    -
  4. -
  5. -

    展开 Hot phase 配置面板,修改 Maximum age 参数,并设置保留期限,默认存储时长为 7d

    -

    保留期限

    -
  6. -
  7. -

    修改完后,点击页面底部的 Save policy 即修改成功。

    -

    保存

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/system-config/system-component.html b/site/end-user/insight/system-config/system-component.html deleted file mode 100644 index d305462..0000000 --- a/site/end-user/insight/system-config/system-component.html +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - -系统组件 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

系统组件

-

在系统组件页面可快速的查看可观测性模块中系统组件的运行状态,当系用组件发生故障时,会导致可观测模块中的部分功能不可用。

-
    -
  1. 进入 可观测性 产品模块,
  2. -
  3. -

    在左边导航栏选择 系统管理 -> 系统组件

    -

    系统组件

    -
  4. -
-

组件说明

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
模块组件名称说明
指标vminsert-insight-victoria-metrics-k8s-stack负责将各集群中 Prometheus 采集到的指标数据写入存储组件。该组件异常会导致无法写入工作集群的指标数据。
指标vmalert-insight-victoria-metrics-k8s-stack负责生效 VM Rule 中配置的 recording 和 Alert 规则,并将触发的告警规则发送给 alertmanager。
指标vmalertmanager-insight-victoria-metrics-k8s-stack负责在告警触时发送消息。该组件异常会导致无法发送告警信息。
指标vmselect-insight-victoria-metrics-k8s-stack负责查询指标数据。该组件异常会导致无法查询指标。
指标vmstorage-insight-victoria-metrics-k8s-stack负责存储多集群的指标数据。
仪表盘grafana-deployment提供监控面板能力。该组件异常会导致无法查看内置的仪表盘。
链路insight-jaeger-collector负责接收 opentelemetry-collector 中链路数据并将其进行存储。
链路insight-jaeger-query负责查询各集群中采集到的链路数据。
链路insight-opentelemetry-collector负责接收各子集群转发的链路数据
日志elasticsearch负责存储各集群的日志数据。
-
-

Note

-

若使用外部 Elasticsearch 可能无法获取部分数据以致于 Elasticsearch 的信息为空。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/system-config/system-config.html b/site/end-user/insight/system-config/system-config.html deleted file mode 100644 index fc6d94f..0000000 --- a/site/end-user/insight/system-config/system-config.html +++ /dev/null @@ -1,369 +0,0 @@ - - - - - - - - - - - - -系统配置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

系统配置

-

系统配置 展示指标、日志、链路默认的保存时长以及默认的 Apdex 阈值。

-
    -
  1. -

    点击右侧导航栏,选择 系统配置

    -

    系统配置

    -
  2. -
  3. -

    修改历史告警存储时长,点击 编辑 输入目标时长。

    -

    当存储时长设置为 "0" 将不清除历史告警。

    -

    系统配置

    -
  4. -
  5. -

    修改拓扑图渲染默认配置,点击 编辑 根据需求定义系统中拓扑图阈值。

    -

    阈值设置必须大于 0,前面填写的阈值必须小于后面填写的。且填写的阈值必须在最大和最小的范围之间。

    -

    拓扑配置

    -
  6. -
-
-

Note

-

修改其他配置,请点击查看如何修改系统配置?

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/trace/service.html b/site/end-user/insight/trace/service.html deleted file mode 100644 index 0911faa..0000000 --- a/site/end-user/insight/trace/service.html +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - - - - - - - - - -服务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

服务监控

-

可观测性 Insight 中服务是指使用 Opentelemtry SDK 接入链路数据,服务监控能够辅助运维过程中观察应用程序的性能和状态。

-

如何使用 OpenTelemetry 请参考使用 OTel 赋予应用可观测性

-

名词解释

-
    -
  • 服务 :服务表示为传入请求提供相同行为的一组工作负载。您可以在使用 OpenTelemetry SDK 时定义服务名称或使用 Istio 中定义的名称。
  • -
  • 操作 :操作是指一个服务处理的特定请求或操作,每个 Span 都有一个操作名称。
  • -
  • 出口流量 :出口流量是指当前服务发起请求的所有流量。
  • -
  • 入口流量 :入口流量是指上游服务对当前服务发起请求的所有流量。
  • -
-

操作步骤

-

服务列表页面展示了集群中所有已接入链路数据的服务的吞吐率、错误率、请求延时等关键指标。 -您可以根据集群、命名空间对服务进行过滤,也可以按照吞吐率、错误率、请求延时对该列表进行排序。列表中的指标数据默认时间为 1 小时,您可以自定义时间范围。

-

请按照以下步骤查看服务监控指标:

-
    -
  1. -

    进入 可观测性 产品模块。

    -
  2. -
  3. -

    在左边导航栏选择 链路追踪 -> 服务

    -

    服务监控

    -
    -

    Attention

    -
      -
    1. 若列表中服务所在的命名空间为 unknown 时,则表示该服务未规范接入,建议重新接入。
    2. -
    3. 若接入的服务存在同名且均未正确填写环境变量中的 命名空间 时,列表及服务详情页中展示的监控数据为多个服务的汇总数据。
    4. -
    -
    -
  4. -
  5. -

    点击服务名 (以 insight-server 为例),点击进入服务详情页,查看服务的详细指标和该服务的操作指标。

    -
      -
    1. 在服务拓扑模块中,您可以查看当前所选服务的上下各一层的服务拓扑,鼠标悬浮在节点上时可以查看节点的信息。
    2. -
    3. 在流量指标模块,您可查看到该服务默认一小时内全部请求(包含入口流量和出口流量)的监控指标。
    4. -
    5. 支持通过右上角的时间选择器快速选择时间范围,或自定义时间范围。
    6. -
    7. 关联容器 模块点击容器组名称,可跳转至容器组详情页。
    8. -
    -

    服务监控

    -
  6. -
  7. -

    点击 Tab 切换到 操作指标 ,可查询多选服务相同操作的聚合起来的流量指标。

    -
      -
    1. 支持对操作指标中的吞吐率、错误率、请求延时等指标进行排序。
    2. -
    3. 点击单个操作后的图标,可跳转至 调用链 快速查询相关链路。
    4. -
    -

    服务监控

    -
  8. -
-

服务指标说明

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数说明
吞吐率单位时间内处理请求的数量。
错误率查询时间范围内错误请求与请求总数的比值。
P50 请求延时在所有的请求中,有 50% 的请求响应时间小于或等于该值。
P95 请求延时在所有的请求中,有 95% 的请求响应时间小于或等于该值。
P99 请求延时在所有的请求中,有 95% 的请求响应时间小于或等于该值。
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/trace/topology.html b/site/end-user/insight/trace/topology.html deleted file mode 100644 index 4bcc5fa..0000000 --- a/site/end-user/insight/trace/topology.html +++ /dev/null @@ -1,708 +0,0 @@ - - - - - - - - - - - - - - -服务拓扑 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

服务拓扑

-

服务拓扑图是对服务之间连接、通信和依赖关系的可视化表示。通过可视化拓扑了解服务间的调用关系, -查看服务在指定时间内的调用及其性能状况。拓扑图的节点之间的联系代表两个服务在查询时间范围内服务之间的存在调用关系。

-

前提条件

-
    -
  1. 集群中已安装 insight-agent 且应用处于 运行中 状态。
  2. -
  3. 服务已通过 Operator 或 - Opentelemetry SDK 的方式接入链路。
  4. -
-

操作步骤

-
    -
  1. 进入 可观测性 模块
  2. -
  3. 在左边导航栏选择 链路追踪 -> 服务拓扑
  4. -
  5. -

    在拓扑图中,您可按需执行以下操作:

    -
      -
    • 单击 节点,从右侧划出服务的详情,可查看服务的请求延时、吞吐率、错误率的指标。点击服务名称可跳转至对应服务的详情页。
    • -
    • 鼠标悬浮在连线上时,可查看两个服务之间请求的流量指标。
    • -
    • 显示设置 模块,可配置拓扑图中的显示元素。
    • -
    -

    服务拓扑

    -
  6. -
  7. -

    点击右下角 图例 ,可通过 临时配置 修改当前的拓扑图定义的渲染阈值,跳出或关闭该页面即会丢失该配置。

    -

    阈值设置必须大于 0,前面填写的阈值必须小于后面填写的。且填写的阈值必须在最大和最小的范围之间。

    -

    服务拓扑

    -

    服务拓扑

    -
  8. -
-

其他节点

-

在服务拓扑中会存在游离在集群之外的节点,这些游离在外的节点可分成三类:

-
    -
  • 数据库
  • -
  • 消息队列
  • -
  • -

    虚拟节点

    -
  • -
  • -

    若服务发起请求到数据库消息队列时,拓扑图中会默认展示这两类节点。 - 而虚拟服务表示集群内服务请求了集群外的节点或者未接入链路的服务,拓扑图中默认不会展示 虚拟服务

    -
  • -
  • -

    当服务请求到 MySQL、PostgreSQL、Oracle Database 这三种数据库时,在拓扑图中可以看到请求的详细数据库类型。

    -

    数据库细节

    -
  • -
-

开启虚拟节点

-
    -
  1. -

    更新 insight-server chart 的 values,找到下图所示参数,将 false 改为 true

    -

    拓扑图

    -
  2. -
  3. -

    在服务拓扑的显示设置中勾选 虚拟服务

    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/insight/trace/trace.html b/site/end-user/insight/trace/trace.html deleted file mode 100644 index b8e3548..0000000 --- a/site/end-user/insight/trace/trace.html +++ /dev/null @@ -1,741 +0,0 @@ - - - - - - - - - - - - - - -链路查询 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

链路查询

-

在链路查询页面,您可以过 TraceID 或精确查询调用链路详细情况或结合多种条件筛选查询调用链路。

-

名词解释

-
    -
  • TraceID:用于标识一个完整的请求调用链路。
  • -
  • 操作:描述 Span 所代表的具体操作或事件。
  • -
  • 入口 Span:入口 Span 代表了整个请求的第一个请求。
  • -
  • 延时:整个调用链从开始接收请求到完成响应的持续时间。
  • -
  • Span:整个链路中包含的 Span 个数。
  • -
  • 发生时间:当前链路开始的时间。
  • -
  • Tag:一组键值对构成的 Span 标签集合,Tag 是用来对 Span 进行简单的注解和补充,每个 Span 可以有多个简直对形式的 Tag。
  • -
-

操作步骤

-

请按照以下步骤查询链路:

-
    -
  1. 进入 可观测性 产品模块,
  2. -
  3. -

    在左边导航栏选择 链路追踪 -> 调用链

    -

    jaeger

    -
    -

    Note

    -

    列表中支持对 Span 数、延时、发生时间进行排序。

    -
    -
  4. -
  5. -

    点击筛选栏中的 TraceID 搜索 切换使用 TraceID 搜索链路。

    -
  6. -
  7. -

    使用 TraceID 搜索请输入完整的 TraceID。

    -

    jaeger

    -
  8. -
-

其他操作

-

查看链路详情

-
    -
  1. -

    点击链路列表中的某一链路的 TraceID,可查看该链路的详情调用情况。

    -

    jaeger

    -
  2. -
-

查看关联日志

-
    -
  1. -

    点击链路数据右侧的图标,可查询该链路的关联日志。

    -
      -
    • 默认查询该链路的持续时间及其结束之后一分钟内的日志数据。
    • -
    • 查询的日志内容为日志文本中包含该链路的 TraceID 的日志和链路调用过程中相关的容器日志。
    • -
    -
  2. -
  3. -

    点击 查看更多 后可带条件跳转到 日志查询 的页面。

    -
  4. -
  5. -

    默认搜索全部日志,但可下拉根据链路的 TraceID 或链路调用过程中相关的容器日志进行过滤。

    -

    tracelog

    -
    -

    Note

    -

    由于链路会跨集群或跨命名空间,若用户权限不足,则无法查询该链路的关联日志。

    -
    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/k8s/add-node.html b/site/end-user/k8s/add-node.html deleted file mode 100644 index e33069a..0000000 --- a/site/end-user/k8s/add-node.html +++ /dev/null @@ -1,413 +0,0 @@ - - - - - - - - - - - - -添加工作节点 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

添加工作节点

-

如果节点不够用了,可以添加更多节点到集群中。

-

前置条件

- -

添加步骤

-
    -
  1. 管理员身份 登录 AI 算力平台
  2. -
  3. -

    导航至 容器管理 -> 集群列表 ,点击目标集群的名称

    -

    clusters

    -
  4. -
  5. -

    进入集群概览页,点击 节点管理 ,点击右侧的 接入节点 按钮

    -

    add

    -
  6. -
  7. -

    按照向导,填写各项参数后点击 确定

    -
    -
    -
    -

    basic

    -
    -
    -

    arguments

    -
    -
    -
    -
  8. -
  9. -

    在弹窗中点击 确定

    -

    ok

    -
  10. -
  11. -

    返回节点列表,新接入的节点状态为 接入中 ,等待几分钟后状态变为 健康 则表示接入成功。

    -

    success

    -
  12. -
-
-

Tip

-

对于刚接入成功的节点,可能还要等 2-3 分钟才能识别出 GPU。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/k8s/create-k8s.html b/site/end-user/k8s/create-k8s.html deleted file mode 100644 index 361910c..0000000 --- a/site/end-user/k8s/create-k8s.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - - - - - - - - -创建云上 Kubernetes 集群 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

创建云上 Kubernetes 集群

-

部署 Kubernetes 集群是为了支持高效的 AI 算力调度和管理,实现弹性伸缩,提供高可用性,从而优化模型训练和推理过程。

-

前置条件

-
    -
  • 已安装 AI 算力平台已
  • -
  • 有一个管理员权限的账号
  • -
  • 准备一台带 GPU 的物理机
  • -
  • 分配两段 IP 地址(Pod CIDR 18 位、SVC CIDR 18 位,不能与现有网段冲突)
  • -
-

创建步骤

-
    -
  1. 管理员身份 登录 AI 算力平台
  2. -
  3. -

    创建并启动 3 台不带 GPU 的云主机用作集群的 Master 节点

    -
      -
    • 配置资源,CPU 16 核,内存 32 GB,系统盘 200 GB(ReadWriteOnce)
    • -
    • 网络模式选择 Bridge(桥接)
    • -
    • 设置 root 密码或添加 SSH 公钥,方便以 SSH 连接
    • -
    • 记录好 3 台主机的 IP
    • -
    -
  4. -
  5. -

    导航至 容器管理 -> 集群列表 ,点击右侧的 创建集群 按钮

    -
  6. -
  7. -

    按照向导,配置集群的各项参数

    -
    -
    -
    -

    basic

    -
    -
    -

    配置完节点信息后,点击 开始检查

    -

    node -node

    -
    -
    -

    network

    -
    -
    -

    addon

    -
    -
    -

    每个节点默认可运行 110 个 Pod(容器组),如果节点配置比较高,可以调整到 200 或 300 个 Pod。

    -

    basic

    -
    -
    -
    -
  8. -
  9. -

    等待集群创建完成。

    -

    done

    -
  10. -
  11. -

    在集群列表中,找到刚创建的集群,点击集群名称,导航到 Helm 应用 -> Helm 模板 ,在搜索框内搜索 metax-gpu-extensions,点击卡片

    -

    cluster

    -

    helm

    -
  12. -
  13. -

    点击右侧的 安装 按钮,开始安装 GPU 插件

    -
    -
    -
    -

    输入名称,选择命名空间,在 YAMl 中修改镜像地址:

    -

    app settings

    -
    -
    -

    confirm

    -
    -
    -
    -
  14. -
  15. -

    自动返回 Helm 应用列表,等待 metax-gpu-extensions 状态变为 已部署

    -

    deployed

    -
  16. -
  17. -

    到此集群创建成功,可以去查看集群所包含的节点。你可以去创建 AI 工作负载并使用 GPU 了

    -

    nodes

    -
  18. -
-

下一步:创建 AI 工作负载

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/k8s/remove-node.html b/site/end-user/k8s/remove-node.html deleted file mode 100644 index 570a93e..0000000 --- a/site/end-user/k8s/remove-node.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - - - - - - - -移除 GPU 工作节点 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

移除 GPU 工作节点

-

GPU 资源的成本相对较高,如果暂时用不到 GPU,可以将带 GPU 的工作节点移除。 -以下步骤也同样适用于移除普通工作节点。

-

前置条件

- -

移除步骤

-
    -
  1. 管理员身份 登录 AI 算力平台
  2. -
  3. -

    导航至 容器管理 -> 集群列表 ,点击目标集群的名称

    -

    clusters

    -
  4. -
  5. -

    进入集群概览页,点击 节点管理 ,找到要移除的节点,点击列表右侧的 ,在弹出菜单中选择 移除节点

    -

    remove

    -
  6. -
  7. -

    在弹框中输入节点名称,确认无误后点击 删除

    -

    confirm

    -
  8. -
  9. -

    自动返回节点列表,状态为 移除中 ,几分钟后刷新页面,节点不在了,说明节点被成功移除

    -

    removed

    -
  10. -
  11. -

    从 UI 列表移除节点后,通过 SSH 登录到已移除的节点主机,执行关机命令。

    -

    shutdown

    -
  12. -
-
-

Tip

-

在 UI 上移除节点并将其关机后,节点上的数据并未被立即删除,节点数据会被保留一段时间。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/backup/deployment.html b/site/end-user/kpanda/backup/deployment.html deleted file mode 100644 index db01cc5..0000000 --- a/site/end-user/kpanda/backup/deployment.html +++ /dev/null @@ -1,761 +0,0 @@ - - - - - - - - - - - - - - -应用备份 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

应用备份

-

本文介绍如何在算丰 AI 算力平台中为应用做备份,本教程中使用的演示应用名为 dao-2048 ,属于无状态工作负载。

-

前提条件

-

在对无状态工作负载进行备份前,需要满足以下前提条件:

- -

备份工作负载

-

参考以下步骤,备份无状态工作负载 dao-2048

-
    -
  1. -

    在左侧导航栏, 点击 容器管理 -> 备份恢复

    -

    集群列表

    -
  2. -
  3. -

    进入 应用备份 列表页面,从集群下拉列表中选择已安装了 velero 和 dao-2048 的集群。 - 点击右侧的 创建备份计划 按钮。

    -

    应用备份

    -
  4. -
  5. -

    参考下方说明填写备份配置。

    -

    操作菜单

    -
  6. -
  7. -

    参考下方说明设置备份执行频率,然后点击 下一步

    -
      -
    • 备份频率:基于分钟、小时、天、周、月设置任务执行的时间周期。支持用数字和 * 自定义 Cron 表达式,输入表达式后下方会提示当前表达式的含义 。有关详细的表达式语法规则,可参考 Cron 时间表语法
    • -
    • 留存时长(天):设置备份资源保存的时间,默认为 30 天,过期后将会被删除。
    • -
    • 备份数据卷(PV):是否备份数据卷(PV)中的数据,支持直接复制和使用 CSI 快照两种方式。
        -
      • 直接复制:直接复制数据卷(PV)中的数据用于备份;
      • -
      • 使用 CSI 快照:使用 CSI 快照来备份数据卷(PV)。需要集群中有可用于备份的 CSI 快照类型。
      • -
      -
    • -
    -

    操作菜单

    -
  8. -
  9. -

    点击 确定 ,页面会自动返回应用备份计划列表。您可以找到新建的 dao-2048 备份计划,在右侧点击 ,选择 立即执行 开始备份。

    -

    操作菜单

    -
  10. -
  11. -

    此时集群的 上一次执行状态 将转变为 备份中 。等待备份完成后可以点击备份计划的名称,查看备份计划详情。

    -

    操作菜单

    -
  12. -
-
-

Note

-

如果 Job 类型的工作负载状态为 执行完成 ,则不支持备份。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/backup/etcd-backup.html b/site/end-user/kpanda/backup/etcd-backup.html deleted file mode 100644 index b9a93c0..0000000 --- a/site/end-user/kpanda/backup/etcd-backup.html +++ /dev/null @@ -1,871 +0,0 @@ - - - - - - - - - - - - - - -ETCD 备份 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

etcd 备份

-

etcd 备份是以集群数据为核心的备份。在硬件设备损坏,开发测试配置错误等场景中,可以通过 etcd 备份恢复集群数据。

-

本文介绍如何为集群制作 etcd 备份。

-

前提条件

- -

创建 etcd 备份

-

参照以下步骤创建 etcd 备份。

-
    -
  1. -

    进入 容器管理 -> 备份恢复 -> etcd 备份 ,点击 备份策略 页签,然后在右侧点击 创建备份策略

    -

    备份策略列表

    -
  2. -
  3. -

    参考以下说明填写 基本信息 。填写完毕后点击 下一步 ,系统将自动校验 etcd 的联通性,校验通过之后可以进行下一步。

    -
      -
    • 备份集群:选择需要备份哪个集群的 etcd 数据,并在终端登录
    • -
    • -

      etcd 地址:格式为 https://${节点IP}:${端口号}

      -
        -
      • 在标准 Kubernetes 集群中,etcd 的默认端口号为 2379
      • -
      • 在公有云托管集群中,需要联系相关开发人员获取 etcd 的端口号。 - 这是因为公有云集群的控制面组件由云服务提供商维护和管理,用户无法直接访问或查看这些组件, - 也无法通过常规命令(如 kubectl)无法获取到控制面的端口等信息。
      • -
      -
      -获取端口号的方式 -
        -
      1. -

        kube-system 命名空间下查找 etcd Pod

        -
        kubectl get po -n kube-system | grep etcd
        -
        -
      2. -
      3. -

        获取 etcd Pod 的 listen-client-urls 中的端口号

        -
        kubectl get po -n kube-system ${etcd_pod_name} -oyaml | grep listen-client-urls # (1)!
        -
        -
          -
        1. etcd_pod_name 替换为实际的 Pod 名称
        2. -
        -

        预期输出结果如下,节点 IP 后的数字即为端口号:

        -
        - --listen-client-urls=https://127.0.0.1:2379,https://10.6.229.191:2379
        -
        -
      4. -
      -
      -
    • -
    • -

      CA 证书:可通过如下命令查看证书,然后将证书内容复制粘贴到对应位置:

      -
      cat /etc/kubernetes/ssl/etcd/ca.crt
      -
      -
    • -
    • -

      Cert 证书:可通过如下命令查看证书,然后将证书内容复制粘贴到对应位置:

      -
      cat /etc/kubernetes/ssl/apiserver-etcd-client.crt
      -
      -
    • -
    • -

      Key:可通过如下命令查看证书,然后将证书内容复制粘贴到对应位置:

      -
      cat /etc/kubernetes/ssl/apiserver-etcd-client.key
      -
      -

      创建基本信息

      -
    • -
    -
    -

    Note

    -

    点击输入框下方的 如何获取 可以在 UI 页面查看获取对应信息的方式。

    -
    -
  4. -
  5. -

    参考以下信息填写 备份策略

    -
      -
    • -

      备份方式:选择手动备份或定时备份

      -
        -
      • 手动备份:基于备份配置立即执行一次 etcd 全量数据的备份。
      • -
      • 定时备份:按照设置的备份频率对 etcd 数据进行周期性全量备份。
      • -
      -
    • -
    • -

      备份链长度:最多保留多少条备份数据。默认为 30 条。

      -
    • -
    • 备份频率:支持小时、日、周、月级别和自定义方式。
    • -
    -

    定时备份

    -
  6. -
  7. -

    参考以下信息填写 存储位置

    -
      -
    • 存储供应商:默认选择 S3 存储
    • -
    • 对象存储访问地址:MinIO 的访问地址
    • -
    • 存储桶:在 MinIO 中创建一个 Bucket,填写 Bucket 的名称
    • -
    • 用户名:MinIO 的登录用户名
    • -
    • 密码:MinIO 的登录密码
    • -
    -

    存储位置

    -
  8. -
  9. -

    点击 确定 后页面自动跳转到备份策略列表,可以查看目前创建好的所有策略。

    -
      -
    • 在策略右侧点击 操作按钮可以查看日志、查看 YAML、更新策略、停止策略、立即执行策略等。
    • -
    • 当备份方式为手动时,可以点击 立即执行 进行备份。
    • -
    • 当备份方式为定时备份时,则会根据配置的时间进行备份。
    • -
    -

    成功创建

    -
  10. -
-

查看备份策略日志

-

点击 日志 可以查看日志内容,默认展示 100 行。若想查看更多日志信息或者下载日志,可在日志上方根据提示前往可观测性模块。

-

查看日志

-

查看备份策略详情

-

进入 容器管理 -> 备份恢复 -> etcd 备份 ,点击 备份策略 页签,接着点击策略名称可以查看策略详情。

-

备份策略详情

-

查看备份点

-
    -
  1. 进入 容器管理 -> 备份恢复 -> etcd 备份 ,点击 备份点 页签。
  2. -
  3. -

    选择目标集群后,可以查看该集群下所有备份信息。

    -

    每执行一次备份,对应生成一个备份点,可通过成功状态的备份点快速恢复应用。

    -

    备份点

    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/backup/index.html b/site/end-user/kpanda/backup/index.html deleted file mode 100644 index db0d5f0..0000000 --- a/site/end-user/kpanda/backup/index.html +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - - - - - - - - - -介绍 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

备份恢复

-

备份恢复分为备份和恢复两方面,实际应用时需要先备份系统在某一时点的数据,然后安全存储地备份数据。后续如果出现数据损坏、丢失、误删等事故,就可以基于之前的数据备份快速还原系统,缩短故障时间,减少损失

-
    -
  • 在真实的生产环境中,服务可能分布式地部署在不同的云、不同区域或可用区,如果某一个基础设施自身出现故障,企业需要在其他可用环境中快速恢复应用。在这种情况下,跨云/跨集群的备份恢复显得非常重要。
  • -
  • 在大规模系统中往往有很多角色和用户,权限管理体系复杂,操作者众多,难免有人误操作导致系统故障。在这种情况下,也需要能够通过之前备份的数据快速回滚系统,否则如果依赖人为排查故障、修复故障、恢复系统就会耗费大量时间,系统不可用时间越长,企业的损失越大。
  • -
  • 此外,还有网络攻击、自然灾害、设备故障等各种因素也可能导致数据事故
  • -
-

因此,备份恢复非常重要,可以视之为维护系统稳定和数据安全的最后一道保险。

-

备份通常分为全量备份、增量备份、差异备份三种。算丰 AI 算力平台目前支持全量备份和增量备份。

-

算丰 AI 算力平台提供的备份恢复可以分为 应用备份ETCD 备份 两种,支持手动备份,或基于 CronJob 定时自动备份。

-
    -
  • -

    应用备份

    -

    应用备份指,备份集群中的某个工作负载的数据,然后将该工作负载的数据恢复到本集群或者其他集群。支持备份整个命名空间下的所有资源,也支持通过标签选择器过滤,仅备份带有特定标签的资源。

    -

    应用备份支持跨集群备份有状态应用,具体步骤可参考MySQL 应用及数据的跨集群备份恢复

    -
  • -
  • -

    ETCD 备份

    -

    etcd 是 Kubernetes 的数据存储组件,Kubernetes 将自身的组件数据和其中的应用数据都存储在 etcd 中。因此,备份 etcd 就相当于备份整个集群的数据,可以在故障时快速将集群恢复到之前某一时点的状态。

    -

    需要注意的是,目前仅支持将 etcd 备份数据恢复到同一集群(原集群)。

    -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/backup/install-velero.html b/site/end-user/kpanda/backup/install-velero.html deleted file mode 100644 index 5c8a9c5..0000000 --- a/site/end-user/kpanda/backup/install-velero.html +++ /dev/null @@ -1,819 +0,0 @@ - - - - - - - - - - - - - - -安装 Velero 插件 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

安装 velero 插件

-

velero 是一个备份和恢复 Kubernetes 集群资源的开源工具。它可以将 Kubernetes -集群中的资源备份到云存储服务、本地存储或其他位置,并且可以在需要时将这些资源恢复到同一或不同的集群中。

-

本节介绍如何在算丰 AI 算力平台中使用 Helm 应用 部署 velero 插件。

-

前提条件

-

安装 velero 插件前,需要满足以下前提条件:

- -

操作步骤

-

请执行如下步骤为集群安装 velero 插件。

-
    -
  1. -

    在集群列表页面找到需要安装 velero 插件的目标集群,点击集群名称,在左侧导航栏依次点击 Helm 应用 -> Helm 模板 ,在搜索栏输入 velero 进行搜索。

    -

    备份恢复

    -
  2. -
  3. -

    阅读 velero 插件相关介绍,选择版本后点击 安装 按钮。本文将以 4.0.2 版本为例进行安装,推荐安装 4.0.2 或更高版本。

    -

    备份恢复

    -
  4. -
  5. -

    填写和配置参数后点击 下一步

    -
    -
    -
    -

    备份恢复

    -
      -
    • 名称:必填参数,输入插件名称,请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 metrics-server-01。
    • -
    • 命名空间:插件安装的命名空间,默认为 velero 命名空间。
    • -
    • 版本:插件的版本,此处以 4.0.2 版本为例。
    • -
    • 就绪等待:可选参数,启用后,将等待应用下所有关联资源处于就绪状态,才会标记应用安装成功。
    • -
    • 失败删除:可选参数,开启后,将默认同步开启就绪等待。如果安装失败,将删除安装相关资源。
    • -
    • 详情日志:可选参数,开启后将输出安装过程的详细日志。
    • -
    -
    -

    Note

    -

    开启 就绪等待 和/或 失败删除 后,应用需要经过较长时间才会被标记为 运行中 状态。

    -
    -
    -
    -
      -
    • -

      S3 Credentials:

      -
        -
      • Use secret :保持默认配置 true
      • -
      • Secret name :保持默认配置 velero-s3-credential
      • -
      • SecretContents.aws_access_key_id = :配置访问对象存储的用户名,替换 为真实参数。
      • -
      • -

        SecretContents.aws_secret_access_key = :配置访问对象存储的密码,替换 为真实参数。

        -

        config "SecretContents 样例" -[default] -aws_access_key_id = minio -aws_secret_access_key = minio123

        -
      • -
      -
    • -
    • -

      Velero Configuration:

      -
        -
      • Backupstoragelocation :velero 备份数据存储的位置
      • -
      • S3 bucket :用于保存备份数据的存储桶名称(需为 minio 已经存在的真实存储桶)
      • -
      • Is default BackupStorage :保持默认配置 true
      • -
      • S3 access mode :velero 对数据的访问模式,可以选择
          -
        • ReadWrite :允许 velero 读写备份数据
        • -
        • ReadOnly :允许 velero 读取备份数据,不能修改备份数据
        • -
        • WriteOnly :只允许 velero 写入备份数据,不能读取备份数据
        • -
        -
      • -
      • S3 Configs :S3 存储(minio)的详细配置
      • -
      • S3 region :云存储的地理区域。默认使用 us-east-1 参数,由系统管理员提供
      • -
      • S3 force path style :保持默认配置 true
      • -
      • S3 server URL :对象存储(minio)的控制台访问地址,minio 一般提供了 UI 访问和控制台访问两个服务,此处请使用控制台访问的地址
      • -
      -
      -

      Note

      -

      请确保 s3 存储服务时间跟备份还原集群时间差在10分钟以内,最好是时间保持同步,否则将无法执行备份操作。

      -
      -
    • -
    • -

      migration plugin configuration:启用之后,将在下一步的 YAML 代码段中新增:

      -
      ...
      -initContainers:
      -  - image: 'release.daocloud.io/kcoral/velero-plugin-for-migration:v0.3.0'
      -    imagePullPolicy: IfNotPresent
      -    name: velero-plugin-for-migration
      -    volumeMounts:
      -      - mountPath: /target
      -        name: plugins
      -  - image: 'docker.m.daocloud.io/velero/velero-plugin-for-csi:v0.7.0'
      -    imagePullPolicy: IfNotPresent
      -    name: velero-plugin-for-csi
      -    volumeMounts:
      -      - mountPath: /target
      -        name: plugins
      -  - image: 'docker.m.daocloud.io/velero/velero-plugin-for-aws:v1.9.0'
      -    imagePullPolicy: IfNotPresent
      -    name: velero-plugin-for-aws
      -    volumeMounts:
      -      - mountPath: /target
      -        name: plugins
      -...
      -
      -
    • -
    -
    -
    -
    -
  6. -
  7. -

    确认 YAML 无误后点击 确定 ,完成 velero 插件的安装。 - 之后系统将自动跳转至 Helm 应用 列表页面,稍等几分钟后,为页面执行刷新操作,即可看到刚刚安装的应用。

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusterops/cluster-oversold.html b/site/end-user/kpanda/clusterops/cluster-oversold.html deleted file mode 100644 index 19d4060..0000000 --- a/site/end-user/kpanda/clusterops/cluster-oversold.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - - - - - - - -集群动态资源超卖 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
- -
-
-
-

集群动态资源超卖

-

目前,许多业务存在峰值和低谷的现象。为了确保服务的性能和稳定性,在部署服务时,通常会根据峰值需求来申请资源。 -然而,峰值期可能非常短暂,导致在非峰值期时资源被浪费。 -集群资源超卖 就是将这些申请了而未使用的资源(即申请量与使用量的差值)利用起来,从而提升集群资源利用率,减少资源浪费。

-

本文主要介绍如何使用集群动态资源超卖功能。

-

前提条件

- -

开启集群超卖

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面

    -

    集群列表

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 集群运维 -> 集群设置 ,然后选择 高级配置 页签

    -

    高级设置

    -
  4. -
  5. -

    打开集群超卖,设置超卖比

    -
      -
    • 若未安装 cro-operator 插件,点击 立即安装 按钮,安装流程参考管理 Helm 应用
    • -
    • 若已安装 cro-operator 插件,打开集群超卖开关,则可以开始使用集群超卖功能。
    • -
    -
    -

    Note

    -

    需要在集群下对应的 namespace 打上如下标签,集群超卖策略才能生效。

    -
    -
    clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: "true"
    -
    -

    集群超卖

    -
  6. -
-

使用集群超卖

-

设置好集群动态资源超卖比后,会在工作负载运行时生效。下文以 niginx 为例,验证使用资源超卖能力。

-
    -
  1. -

    创建工作负载 nginx 并设置对应的资源限制值,创建流程参考创建无状态负载(Deployment)

    -

    创建工作负载

    -
  2. -
  3. -

    查看工作负载的 Pod 资源申请值与限制值的比值是否符合超售比

    -

    查看 Pod 资源

    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusterops/cluster-settings.html b/site/end-user/kpanda/clusterops/cluster-settings.html deleted file mode 100644 index 7b42a87..0000000 --- a/site/end-user/kpanda/clusterops/cluster-settings.html +++ /dev/null @@ -1,652 +0,0 @@ - - - - - - - - - - - - - - -集群设置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

集群设置

-

集群设置用于为您的集群自定义高级特性设置,包括是否启用 GPU、Helm 仓库刷新周期、Helm 操作记录保留等。

-
    -
  • -

    启用 GPU:需要预先在集群上安装 GPU 卡及对应驱动插件。

    -

    点击目标集群的名称,在左侧导航栏点击 最近操作 -> 集群设置 -> Addon 插件

    -

    配置gpu

    -
  • -
  • -

    Helm 操作基础镜像、仓库刷新周期、操作记录保留条数、是否开启集群删除保护(开启后集群将不能直接卸载)

    -

    高级配置

    -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusterops/latest-operations.html b/site/end-user/kpanda/clusterops/latest-operations.html deleted file mode 100644 index bd27548..0000000 --- a/site/end-user/kpanda/clusterops/latest-operations.html +++ /dev/null @@ -1,654 +0,0 @@ - - - - - - - - - - - - - - -最近操作 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

最近操作

-

在该页面可以查看最近的集群操作记录和 Helm 操作记录,以及各项操作的 YAML 文件和日志,也可以删除某一条记录。

-

操作记录

-

设置 Helm 操作的保留条数:

-

系统默认保留最近 100 条 Helm 操作记录。若保留条数太多,可能会造成数据冗余,保留条数太少可能会造成您所需要的关键操作记录的缺失。需要根据实际情况设置合理的保留数量。具体步骤如下:

-
    -
  1. -

    点击目标集群的名称,在左侧导航栏点击 最近操作 -> Helm 操作 -> 设置保留条数

    -

    保留条数

    -
  2. -
  3. -

    设置需要保留多少条 Helm 操作记录,并点击 确定

    -

    保留条数

    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/access-cluster.html b/site/end-user/kpanda/clusters/access-cluster.html deleted file mode 100644 index 925458c..0000000 --- a/site/end-user/kpanda/clusters/access-cluster.html +++ /dev/null @@ -1,762 +0,0 @@ - - - - - - - - - - - - - - -访问集群 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-

访问集群

-

使用算丰 AI 算力平台容器管理平台接入或创建的集群,不仅可以通过 UI 界面直接访问,也可以通过其他两种方式进行访问控制:

-
    -
  • 通过 CloudShell 在线访问
  • -
  • 下载集群证书后通过 kubectl 进行访问
  • -
-
-

Note

-

访问集群时,用户应具有 Cluster Admin 权限或更高权限。

-
-

通过 CloudShell 访问

-
    -
  1. -

    集群列表 页选择需要通过 CloudShell 访问的集群,点击右侧的 操作图标并在下拉列表中点击 控制台

    -

    调用 CloudShell 控制台

    -
  2. -
  3. -

    在 CloudShell 控制台执行 kubectl get node 命令,验证 CloudShell 与集群的连通性。如图,控制台将返回集群下的节点信息。

    -

    验证连通性

    -
  4. -
-

现在,您可以通过 CloudShell 来访问并管理该集群了。

-

通过 kubectl 访问

-

通过本地节点访问并管理云端集群时,需要满足以下条件:

-
    -
  • 本地节点和云端集群的网络互联互通。
  • -
  • 已经将集群证书下载到了本地节点。
  • -
  • 本地节点已经安装了 kubectl 工具。关于详细的安装方式,请参阅安装 kubectl
  • -
-

满足上述条件后,按照下方步骤从本地访问云端集群:

-
    -
  1. -

    集群列表 页选择需要下载证书的集群,点击右侧的 ,并在弹出菜单中点击 证书获取

    -

    进入下载证书页面

    -
  2. -
  3. -

    选择证书有效期并点击 下载证书

    -

    下载证书

    -
  4. -
  5. -

    打开下载好的集群证书,将证书内容复制至本地节点的 config 文件。

    -

    kubectl 工具默认会从本地节点的 $HOME/.kube 目录下查找名为 config 的文件。该文件存储了相关集群的访问凭证,kubectl 可以凭该配置文件连接至集群。

    -
  6. -
  7. -

    在本地节点上执行如下命令验证集群的连通性:

    -
    kubectl get pod -n default
    -
    -

    预期的输出类似于:

    -
    NAME                            READY   STATUS      RESTARTS    AGE
    -dao-2048-2048-58c7f7fc5-mq7h4   1/1     Running     0           30h
    -
    -
  8. -
-

现在您可以在本地通过 kubectl 访问并管理该集群了。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/cluster-role.html b/site/end-user/kpanda/clusters/cluster-role.html deleted file mode 100644 index 464d5ea..0000000 --- a/site/end-user/kpanda/clusters/cluster-role.html +++ /dev/null @@ -1,907 +0,0 @@ - - - - - - - - - - - - - - -集群角色 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

集群角色

-

算丰 AI 算力平台基于集群的不同功能定位对集群进行了角色分类,帮助用户更好地管理 IT 基础设施。

-

全局服务集群

-

此集群用于运行算丰 AI 算力平台组件,例如容器管理、全局管理、可观测性、镜像仓库等。 -一般不承载业务负载。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
支持的功能描述
K8s 版本1.22+
操作系统RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86;
Ubuntu 18.04 x86, Ubuntu 20.04 x86;
CentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD
集群全生命周期管理支持
K8s 资源管理支持
云原生存储支持
云原生网络Calico、Cillium、Multus 和其它 CNI
策略管理支持网络策略、配额策略、资源限制、灾备策略、安全策略
-

管理集群

-

此集群用于管理工作集群,一般不承载业务负载。

-
    -
  • 经典模式将全局服务集群和管理集群部署在不同的集群,适用于企业多数据中心、多架构的场景。
  • -
  • 简约模式将管理集群和全局服务集群部署在同一个集群内。
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
支持的功能描述
K8s 版本1.22+
操作系统RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86;
Ubuntu 18.04 x86, Ubuntu 20.04 x86;
CentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD
集群全生命周期管理支持
K8s 资源管理支持
云原生存储支持
云原生网络Calico、Cillium、Multus 和其它 CNI
策略管理支持网络策略、配额策略、资源限制、灾备策略、安全策略
-

工作集群

-

这是使用容器管理创建的集群,主要用于承载业务负载。该集群由管理集群进行管理。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
支持的功能描述
K8s 版本支持 K8s 1.22 及以上版本
操作系统RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86;
Ubuntu 18.04 x86, Ubuntu 20.04 x86;
CentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD
集群全生命周期管理支持
K8s 资源管理支持
云原生存储支持
云原生网络Calico、Cillium、Multus 和其它 CNI
策略管理支持网络策略、配额策略、资源限制、灾备策略、安全策略
-

接入集群

-

此集群用于接入已有的标准 K8s 集群,包括但不限于本地数据中心自建集群、公有云厂商提供的集群、私有云厂商提供的集群、边缘集群、信创集群、异构集群。主要用于承担业务负载。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
支持的功能描述
K8s 版本1.18+
支持友商Vmware Tanzu、Amazon EKS、Redhat Openshift、SUSE Rancher、阿里 ACK、华为 CCE、腾讯 TKE、标准 K8s 集群、算丰 AI 算力平台
集群全生命周期管理不支持
K8s 资源管理支持
云原生存储支持
云原生网络依赖于接入集群发行版网络模式
策略管理支持网络策略、配额策略、资源限制、灾备策略、安全策略
-
-

Note

-

一个集群可以有多个集群角色,例如一个集群既可以是全局服务集群,也可以是管理集群或工作集群。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/cluster-scheduler-plugin.html b/site/end-user/kpanda/clusters/cluster-scheduler-plugin.html deleted file mode 100644 index 9d65838..0000000 --- a/site/end-user/kpanda/clusters/cluster-scheduler-plugin.html +++ /dev/null @@ -1,543 +0,0 @@ - - - - - - - - - - - - -如何在集群中部署第二调度器 scheduler-plugins - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

如何在集群中部署第二调度器 scheduler-plugins

-

本文介绍如何在集群中部署第二个调度器 scheduler-plugins。

-

为什么需要 scheduler-plugins?

-

通过平台创建的集群中会安装 K8s 原生的调度器,但是原生的调度器存在很多的局限性:

-
    -
  • 原生的调度器无法满足调度需求,你可以选择使用 - CoScheduling、 - CapacityScheduling - 等 scheduler-plugins 插件。
  • -
  • 在特殊的场景,需要新的调度器来完成调度任务而不影响原生调度器的流程。
  • -
  • 区分不同功能的调度器,通过切换调度器名称来实现不同的调度场景。
  • -
-

本文以使用 vgpu 调度器的同时,想结合 scheduler-plugins 的 coscheduling 插件能力的场景为示例,介绍如何安装并使用 scheduler-plugins。

-

安装 scheduler-plugins

-

前置条件

-
    -
  • kubean 是在 v0.13.0 版本推出的新功能,选择管理集群时请确保版本不低于此版本。
  • -
  • 安装 scheduler-plugins 版本为 v0.27.8,请确保集群版本是否与它兼容。 - 参考文档 Compatibility Matrix
  • -
-

安装流程

-
    -
  1. -

    创建集群 -> 高级配置 -> 自定义参数 中添加 scheduler-plugins 参数

    -
    scheduler_plugins_enabled:true
    -scheduler_plugins_plugin_config:
    -  - name: Coscheduling
    -    args:
    -      permitWaitingTimeSeconds: 10 # default is 60
    -
    -

    参数说明:

    -
      -
    • scheduler_plugins_enabled 设置为 true 时,开启 scheduler-plugins 插件能力。
    • -
    • 您可以通过设置 scheduler_plugins_enabled_pluginsscheduler_plugins_disabled_plugins 选项来启用或禁用某些插件。 - 参阅 K8s 官方插件名称
    • -
    • 如果需要设置自定义插件的参数请配置 scheduler_plugins_plugin_config,例如:设置 coscheduling 的 permitWaitingTimeoutSeconds 参数。 - 参阅 K8s 官方插件配置项
    • -
    -
  2. -
  3. -

    集群创建成功后系统会自动安装 scheduler-plugins 和 controller 组件负载,可以在对应集群的无状态负载中查看负载状态。

    -
  4. -
-

使用 scheduler-plugins

-

以下以使用 vgpu 调度器的同时,想结合 scheduler-plugins 的 coscheduling 插件能力场景为示例,介绍如何使用 scheduler-plugins。

-
    -
  1. -

    在 Helm 模板中安装 vgpu,设置 values.yaml 参数。

    -
      -
    • schedulerName: scheduler-plugins-scheduler,这是 kubean 默认安装的 scheduler-plugins 的 scheduler 名称,目前不能修改。
    • -
    • scheduler.kubeScheduler.enabled: false,不安装 kube-scheduler,将 vgpu-scheduler 作为单独的 extender。
    • -
    -
  2. -
  3. -

    在 scheduler-plugins 上扩展 vgpu-scheduler。

    -
    [root@master01 charts]# kubectl get cm -n scheduler-plugins scheduler-config -ojsonpath="{.data.scheduler-config\.yaml}"
    -
    -
    apiVersion: kubescheduler.config.k8s.io/v1
    -kind: KubeSchedulerConfiguration
    -leaderElection:
    -  leaderElect: false
    -profiles:
    -  # Compose all plugins in one profile
    -  - schedulerName: scheduler-plugins-scheduler
    -    plugins:
    -      multiPoint:
    -        enabled:
    -          - name: Coscheduling
    -          - name: CapacityScheduling
    -          - name: NodeResourceTopologyMatch
    -          - name: NodeResourcesAllocatable
    -        disabled:
    -          - name: PrioritySort
    -pluginConfig:
    -  - args:
    -      permitWaitingTimeSeconds: 10
    -    name: Coscheduling
    -
    -

    修改 scheduler-plugins 的 scheduler-config 的 configmap 参数,如下:

    -
    [root@master01 charts]# kubectl get cm -n scheduler-plugins scheduler-config -ojsonpath="{.data.scheduler-config\.yaml}"
    -
    -
    apiVersion: kubescheduler.config.k8s.io/v1
    -kind: KubeSchedulerConfiguration
    -leaderElection:
    -  leaderElect: false
    -profiles:
    -  # Compose all plugins in one profile
    -  - schedulerName: scheduler-plugins-scheduler
    -    plugins:
    -      multiPoint:
    -        enabled:
    -          - name: Coscheduling
    -          - name: CapacityScheduling
    -          - name: NodeResourceTopologyMatch
    -          - name: NodeResourcesAllocatable
    -        disabled:
    -          - name: PrioritySort
    -pluginConfig:
    -  - args:
    -      permitWaitingTimeSeconds: 10
    -    name: Coscheduling
    -extenders:
    -  - urlPrefix: "${urlPrefix}"
    -    filterVerb: filter
    -    bindVerb: bind
    -    nodeCacheCapable: true
    -    ignorable: true
    -    httpTimeout: 30s
    -    weight: 1
    -    enableHTTPS: true
    -    tlsConfig:
    -      insecure: true
    -    managedResources:
    -      - name: nvidia.com/vgpu
    -        ignoredByScheduler: true
    -      - name: nvidia.com/gpumem
    -        ignoredByScheduler: true
    -      - name: nvidia.com/gpucores
    -        ignoredByScheduler: true
    -      - name: nvidia.com/gpumem-percentage
    -        ignoredByScheduler: true
    -      - name: nvidia.com/priority
    -        ignoredByScheduler: true
    -      - name: cambricon.com/mlunum
    -        ignoredByScheduler: true
    -
    -
  4. -
  5. -

    安装完 vgpu-scheduler 后,系统会自动创建 svc,urlPrefix 指定 svc 的 URL。

    -
    -

    Note

    -
      -
    • -

      svc 指 pod 服务负载,您可以到安装了 nvidia-vgpu 插件的命名空间下通过以下命令拿到 443 端口对应的外部访问信息。

      -
      kubectl get svc -n ${namespace} 
      -
      -
    • -
    • -

      urlprifix 格式为 https://${ip 地址}:${端口}

      -
    • -
    -
    -
  6. -
  7. -

    将 scheduler-plugins 的 scheduler Pod 重启,加载新的配置文件。

    -
    -

    Note

    -

    在创建 vgpu 应用时不需要指定调度器名称,vgpu-scheduler 的 Webhook 会自动将 Scheduler 的名称修改为 scheduler-plugins-scheduler,不用手动指定。

    -
    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/cluster-status.html b/site/end-user/kpanda/clusters/cluster-status.html deleted file mode 100644 index 7b6bcb3..0000000 --- a/site/end-user/kpanda/clusters/cluster-status.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - - - - - - - - - - -集群状态 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

集群状态

-

容器管理模块支持纳管两种类型的集群:接入集群和自建集群。 -关于集群纳管类型的更多信息,请参见集群角色

-

这两种集群的状态如下所述。

-

接入集群

- - - - - - - - - - - - - - - - - - - - - - - - - -
状态描述
接入中(Joining)集群正在接入
解除接入中(Removing)集群正在解除接入
运行中(Running)集群正常运行
未知(Unknown)集群已失联,系统展示数据为失联前缓存数据,不代表真实数据,同时失联状态下执行的任何操作都将不生效,请检查集群网络连通性或主机状态。
-

自建集群

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
状态描述
创建中(Creating)集群正在创建
更新中(Updating)更新集群 Kubernetes 版本
删除中(Deleting)集群正在删除
运行中(Running)集群正常运行
未知(Unknown)集群已失联,系统展示数据为失联前缓存数据,不代表真实数据,同时失联状态下执行的任何操作都将不生效,请检查集群网络连通性或主机状态。
创建失败(Failed)集群创建失败,请查看日志以获取详细失败原因
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/cluster-version.html b/site/end-user/kpanda/clusters/cluster-version.html deleted file mode 100644 index f99ea93..0000000 --- a/site/end-user/kpanda/clusters/cluster-version.html +++ /dev/null @@ -1,401 +0,0 @@ - - - - - - - - - - - - -集群版本支持范围 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

集群版本支持范围

-

在算丰 AI 算力平台中,接入型集群自建集群采取不同的版本支持机制。

-

本文主要介绍自建集群的版本支持机制。

-

Kubernetes 社区支持 3 个版本范围,如 1.26、1.27、1.28。当社区新版本发布之后,支持的版本范围将会进行递增。 -如社区最新的 1.29 版本已经发布,此时社区支持的版本范围是 1.27、1.28、1.29。

-

例如,社区支持的版本范围是 1.25、1.26、1.27,则在算丰 AI 算力平台中使用界面创建工作集群的版本范围是 1.24、1.25、1.26,并且会为用户推荐一个稳定的版本,如 1.24.7。

-

除此之外,算丰 AI 算力平台中使用界面创建工作集群的版本范围与社区保持高度同步,当社区版本进行递增后,算丰 AI 算力平台中使用界面创建工作集群的版本范围也会同步递增一个版本。

-

Kubernetes 版本支持范围

- - - - - - - - - - - - - - - - - - - -
Kubernetes 社区版本范围自建工作集群版本范围自建工作集群推荐版本算丰 AI 算力平台安装器发布时间
-
    -
  • 1.26
  • -
  • 1.27
  • -
  • 1.28
  • -
-
-
    -
  • 1.25
  • -
  • 1.26
  • -
  • 1.27
  • -
-
1.27.5v0.13.02023.11.30
-

版本支持机制

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/create-cluster.html b/site/end-user/kpanda/clusters/create-cluster.html deleted file mode 100644 index dd12443..0000000 --- a/site/end-user/kpanda/clusters/create-cluster.html +++ /dev/null @@ -1,479 +0,0 @@ - - - - - - - - - - - - -创建工作集群 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

创建工作集群

-

在算丰 AI 算力平台容器管理模块中,集群角色分四类:全局服务集群、管理集群、工作集群、接入集群。 -其中,接入集群只能从第三方厂商接入,参见接入集群

-

本页介绍如何创建工作集群,默认情况下,新建工作集群的工作节点 OS 类型和 CPU 架构需要与全局服务集群保持一致。 -如需使用区别于全局服务集群 OS 或架构的节点创建集群,参阅在 centos 管理平台上创建 ubuntu 工作集群进行创建。

-

推荐使用 算丰 AI 算力平台支持的操作系统来创建集群。 -如您本地节点不在上述支持范围,可参考在非主流操作系统上创建集群进行创建。

-

前提条件

-

创建集群之前需要满足一定的前提条件:

-
    -
  • 根据业务需求准备一定数量的节点,且节点 OS 类型和 CPU 架构一致。
  • -
  • 推荐 Kubernetes 版本 1.29.5,具体版本范围,参阅 算丰 AI 算力平台集群版本支持体系, - 目前算丰 AI 算力平台支持自建工作集群版本范围在 v1.28.0-v1.30.2。如需创建低版本的集群,请参考集群版本支持范围部署与升级 Kubean 向下兼容版本
  • -
  • 目标主机需要允许 IPv4 转发。如果 Pod 和 Service 使用的是 IPv6,则目标服务器需要允许 IPv6 转发。
  • -
  • 算丰 AI 算力平台暂不提供对防火墙的管理功能,您需要预先自行定义目标主机防火墙规则。为了避免创建集群的过程中出现问题,建议禁用目标主机的防火墙。
  • -
  • 参阅节点可用性检查
  • -
-

操作步骤

-
    -
  1. -

    集群列表 页面中,点击 创建集群 按钮。

    -

    创建集群按钮

    -
  2. -
  3. -

    参考下列要求填写集群基本信息,并点击 下一步

    -
      -
    • 集群名称:名称只包含小写字母、数字和连字符("-"),必须以小写字母或者数字开头和结尾,最长 63 个字符。
    • -
    • 被纳管:选择由哪个集群来管理此集群,例如在集群生命周期中创建、升级、节点扩缩容、删除集群等。
    • -
    • 运行时:选择集群的运行时环境,目前支持 containerd 和 docker,如何选择容器运行时
    • -
    • Kubernetes 版本:支持 3 个版本跨度,具体取决于被纳管集群所支持的版本。
    • -
    -

    填写基本信息

    -
  4. -
  5. -

    填写节点配置信息,并点击 下一步

    -
      -
    • -

      高可用:开启后需要提供至少 3 个控制器节点。关闭后,只提供 1 个控制器节点即可。

      -
      -

      生产环境中建议使用高可用模式。

      -
      -
    • -
    • -

      认证方式:选择通过用户名/密码还是公私钥访问节点。

      -
      -

      如果使用公私钥方式访问节点,需要预先配置节点的 SSH 密钥。参阅使用 SSH 密钥认证节点

      -
      -
    • -
    • -

      使用统一的密码:开启后集群中所有节点的访问密码都相同,需要在下方输入访问所有节点的统一密码。如果关闭,则可以为每个节点设置单独的用户名和密码。

      -
    • -
    • -

      节点信息:填写节点名称和 IP 地址。

      -
    • -
    • 自定义参数:设置变量控制 Ansible 与远程主机交互。可设置变量参考连接到主机:行为清单参数
    • -
    • NTP 时间同步:开启后会自动同步各个节点上的时间,需要提供 NTP 服务器地址。
    • -
    -

    节点配置

    -
  6. -
  7. -

    在页面底部点击节点检查。如果检查通过则继续下一步操作。如果检查未通过,则更新 节点信息 并再次执行检查。

    -
  8. -
  9. -

    填写网络配置信息,并点击 下一步

    -
      -
    • -

      网络插件:负责为集群内的 Pod 提供网络服务,创建集群后不可更改网络插件。支持 cilium 和 calico。选择 none 表示暂不安装网络插件。

      -
    • -
    • -

      容器网段:集群下容器使用的网段,决定集群下容器的数量上限。创建后不可修改。

      -
    • -
    • 服务网段:同一集群下容器互相访问时使用的 Service 资源的网段,决定 Service 资源的上限。创建后不可修改。
    • -
    -

    网络配置1

    -

    网络配置2

    -
  10. -
  11. -

    填写插件配置信息,并点击 下一步

    -

    插件配置

    -
  12. -
  13. -

    填写高级配置信息,并点击 确定

    -
      -
    • kubelet_max_pods :设置每个节点的最大 Pod 数量,默认为 110 个。
    • -
    • hostname_overide :重置主机名,建议使用默认值,采用系统默认生成的名称作为主机名称。
    • -
    • kubernetes_audit :Kubernetes 的审计日志,默认开启。
    • -
    • auto_renew_certificate :在每月第一个星期一自动更新 Kubernetes 控制平面证书,默认开启。
    • -
    • disable_firewalld&ufw :禁用防火墙,避免节点在安装过程中无法被访问。
    • -
    • Insecure_registries :私有镜像仓库配置。使用私有镜像仓库创建集群时,为了避免证书问题导致容器引擎拒绝访问,需要在这里填写私有镜像仓库地址,以绕过容器引擎的证书认证而获取镜像。
    • -
    • yum_repos :填写 Yum 源仓库地址。离线环境下,默认给出的地址选项仅供参考,请根据实际情况填写。
    • -
    -

    高级配置

    -
  14. -
-
-

Success

-
    -
  • 填写正确信息并完成上述步骤后,页面会提示集群正在创建中。
  • -
  • 创建集群耗时较长,需要耐心等待。其间,可以点击 返回集群列表 按钮让安装过程后台运行。
  • -
  • 如需查看当前状态,可点击 实时日志
  • -
-

查看实时日志

-
-
-

Note

-
    -
  • 当集群出现未知状态时,表示当前集群已失联。
  • -
  • 系统展示数据为失联前缓存数据,不代表真实数据。
  • -
  • 同时失联状态下执行的任何操作都将不生效,请检查集群网络连通性或主机状态。
  • -
-

未知状态

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/delete-cluster.html b/site/end-user/kpanda/clusters/delete-cluster.html deleted file mode 100644 index 408d0c3..0000000 --- a/site/end-user/kpanda/clusters/delete-cluster.html +++ /dev/null @@ -1,777 +0,0 @@ - - - - - - - - - - - - - - -卸载/解除接入集群 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

卸载/解除接入集群

-

通过算丰 AI 算力平台容器管理平台 创建的集群 支持 卸载集群解除接入 操作,从其他环境直接 接入的集群 仅支持 解除接入 操作。

-
-

Info

-

如果想彻底删除一个接入的集群,需要前往创建该集群的原始平台操作。算丰 AI 算力平台不支持删除接入的集群。

-
-

在算丰 AI 算力平台中, 卸载集群解除接入 的区别在于:

-
    -
  • 卸载集群 操作会销毁该集群,并重置集群下所有节点的数据。所有数据都将被销毁,建议做好备份。后期需要时必须重新创建一个集群。
  • -
  • 解除接入 操作会将当前集群从平台中移除,不会摧毁集群,也不会销毁数据。
  • -
-

卸载集群

-
-

Note

-
    -
  • 当前操作用户应具备 Admin 或 Kpanda Owner 权限才能执行卸载集群的操作。
  • -
  • 卸载集群之前,应该先在集群列表中点击某个集群名称,在 集群运维 -> 集群设置 -> 高级配置 中关闭 集群删除保护 , - 否则不显示 卸载集群 的选项。
  • -
  • 全局服务集群 不支持卸载或移除操作。
  • -
-
-
    -
  1. -

    集群列表 页找到需要卸载集群,点击右侧的 并在下拉列表中点击 卸载集群

    -
  2. -
  3. -

    输入集群名称进行确认,然后点击 删除

    -

    如果提示集群中还有一些残留的资源,则需要按提示删除相关资源后才能执行卸载操作。

    -
  4. -
  5. -

    返回 集群列表 页可以看到该集群的状态已经变成 删除中 。卸载集群可能需要一段时间,请您耐心等候。

    -
  6. -
-

解除接入集群

-
-

Note

-
    -
  • 当前操作用户应具备 Admin 或 Kpanda Owner 权限才能执行解除接入的操作。
  • -
  • 全局服务集群 不支持解除接入。
  • -
-
-
    -
  1. -

    集群列表 页找到需要卸载集群,点击右侧的 并在下拉列表中点击 解除接入

    -
  2. -
  3. -

    输入集群名称进行确认,然后点击 解除接入

    -

    如果提示集群中还有一些残留的资源,则需要按提示删除相关资源后才能解除接入。

    -
  4. -
-

清理解除接入集群配置数据

-

集群被移除后,集群中原有的管理平台数据不会被自动清除,如需将集群接入至新管理平台则需要手动执行如下操作:

-

删除 kpanda-system、insight-system 命名空间

-
kubectl delete ns kpanda-system insight-system
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/integrate-cluster.html b/site/end-user/kpanda/clusters/integrate-cluster.html deleted file mode 100644 index 38abcfc..0000000 --- a/site/end-user/kpanda/clusters/integrate-cluster.html +++ /dev/null @@ -1,749 +0,0 @@ - - - - - - - - - - - - - - -接入集群 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

接入集群

-

通过接入集群操作,能够对众多云服务平台集群和本地私有物理集群进行统一纳管,形成统一治理平台,有效避免了被厂商锁定风险,助力企业业务安全上云。

-

容器管理模块支持接入多种主流的容器集群,例如 Redhat Openshift, SUSE Rancher, VMware Tanzu, Amazon EKS, Aliyun ACK, Huawei CCE, Tencent TKE, 标准 Kubernetes 集群。

-

前提条件

-
    -
  • 准备一个待接入的集群,确保容器管理集群和待接入集群之间网络通畅,并且集群的 Kubernetes 版本 1.22+。
  • -
  • 当前操作用户应具有 Kpanda Owner 或更高权限。
  • -
-

操作步骤

-
    -
  1. -

    进入 集群列表 页面,点击右上角的 接入集群 按钮。

    -

    接入集群

    -
  2. -
  3. -

    填写基本信息。

    -
      -
    • 集群名称:名称应具有唯一性,设置后不可更改。最长 63 个字符,只能包含小写字母、数字及分隔符("-"),且必须以小写字母或数字开头及结尾。
    • -
    • 集群别名:可输入任意字符,不超过 60 个字符。
    • -
    • 发行版:集群的发行厂商,包括市场主流云厂商和本地私有物理集群。
    • -
    -
  4. -
  5. -

    填写目标集群的 KubeConfig,点击 验证 Config ,验证通过后才能成功接入集群。

    -
    -

    如果不知道如何获取集群的 KubeConfig 文件,可以在输入框右上角点击 如何获取 kubeConfig 查看对应步骤。

    -
    -

    接入集群

    -
  6. -
  7. -

    确认所有参数填写正确,在页面右下角点击 确定

    -

    接入集群

    -
  8. -
-
-

Note

-
    -
  • 新接入的集群状态为 接入中 ,接入成功后变为 运行中
  • -
  • 如果集群状态一直处于 接入中 ,请确认接入脚本是否在对应集群上执行成功。有关集群状态的更多详情,请参考集群状态
  • -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/integrate-rancher-cluster.html b/site/end-user/kpanda/clusters/integrate-rancher-cluster.html deleted file mode 100644 index 4c96abe..0000000 --- a/site/end-user/kpanda/clusters/integrate-rancher-cluster.html +++ /dev/null @@ -1,566 +0,0 @@ - - - - - - - - - - - - -接入 rancher 集群 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

接入 rancher 集群

-

本文介绍如何接入 rancher 集群。

-

前提条件

-
    -
  • 准备一个具有管理员权限的待接入 ranhcer 集群,确保容器管理集群和待接入集群之间网络通畅。
  • -
  • 当前操作用户应具有 Kpanda Owner 或更高权限。
  • -
-

操作步骤

-

步骤一:在 rancher 集群创建具有管理员权限的 ServiceAccount 用户

-
    -
  1. -

    使用具有管理员权限的角色进入 rancher 集群,并使用终端新建一个名为 sa.yaml 的文件。

    -
    vi sa.yaml
    -
    -

    然后按下 i 键进入插入模式,输入以下内容:

    -
    sa.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    -kind: ClusterRole
    -metadata:
    -  name: rancher-rke
    -rules:
    -  - apiGroups:
    -  - '*'
    -  resources:
    -  - '*'
    -  verbs:
    -  - '*'
    -  - nonResourceURLs:
    -  - '*'
    -  verbs:
    -  - '*'
    ----
    -apiVersion: rbac.authorization.k8s.io/v1
    -kind: ClusterRoleBinding
    -metadata:
    -  name: rancher-rke
    -roleRef:
    -    apiGroup: rbac.authorization.k8s.io
    -    kind: ClusterRole
    -    name: rancher-rke
    -  subjects:
    -  - kind: ServiceAccount
    -    name: rancher-rke
    -    namespace: kube-system
    ----
    -apiVersion: v1
    -kind: ServiceAccount
    -metadata:
    -  name: rancher-rke
    -  namespace: kube-system
    -
    -

    按下 esc 键退出插入模式,然后输入 __ :wq__ 保存并退出。

    -
  2. -
  3. -

    在当前路径下执行如下命令,新建名为 rancher-rke 的 ServiceAccount(以下简称为 SA ):

    -
    kubectl apply -f sa.yaml
    -
    -

    预期输出如下:

    -
    clusterrole.rbac.authorization.k8s.io/rancher-rke created
    -clusterrolebinding.rbac.authorization.k8s.io/rancher-rke created
    -serviceaccount/rancher-rke created
    -
    -
  4. -
  5. -

    创建名为 rancher-rke-secret 的密钥,并将密钥和 rancher-rke SA 绑定。

    -
    kubectl apply -f - <<EOF
    -apiVersion: v1
    -kind: Secret
    -metadata:
    -  name: rancher-rke-secret
    -  namespace: kube-system
    -  annotations:
    -    kubernetes.io/service-account.name: rancher-rke
    -  type: kubernetes.io/service-account-token
    -EOF
    -
    -

    预期输出如下:

    -
    secret/rancher-rke-secret created
    -
    -
    -

    Note

    -

    如果您的集群版本低于 1.24,请忽略此步骤,直接前往下一步。

    -
    -
  6. -
  7. -

    查找 rancher-rke SA 的密钥:

    -
    kubectl -n kube-system get secret | grep rancher-rke | awk '{print $1}'
    -
    -

    预期输出:

    -
    rancher-rke-secret
    -
    -

    查看密钥 rancher-rke-secret 的详情:

    -
    kubectl -n kube-system describe secret rancher-rke-secret
    -
    -

    预期输出:

    -
    Name:         rancher-rke-secret
    -Namespace:    kube-system
    -Labels:       <none>
    -Annotations:  kubernetes.io/service-account.name: rancher-rke
    -            kubernetes.io/service-account.uid: d83df5d9-bd7d-488d-a046-b740618a0174
    -
    -Type:  kubernetes.io/service-account-token
    -
    -Data
    -====
    -ca.crt:     570 bytes
    -namespace:  11 bytes
    -token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjUtNE9nUWZLRzVpbEJORkZaNmtCQXhqVzRsZHU4MHhHcDBfb0VCaUo0V1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyYW5jaGVyLXJrZS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmFuY2hlci1ya2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkODNkZjVkOS1iZDdkLTQ4OGQtYTA0Ni1iNzQwNjE4YTAxNzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cmFuY2hlci1ya2UifQ.VNsMtPEFOdDDeGt_8VHblcMRvjOwPXMM-79o9UooHx6q-VkHOcIOp3FOT2hnEdNnIsyODZVKCpEdCgyozX-3y5x2cZSZpocnkMcBbQm-qfTyUcUhAY7N5gcYUtHUhvRAsNWJcsDCn6d96gT_qo-ddo_cT8Ri39Lc123FDYOnYG-YGFKSgRQVy7Vyv34HIajZCCjZzy7i--eE_7o4DXeTjNqAFMFstUxxHBOXI3Rdn1zKQKqh5Jhg4ES7X-edSviSUfJUX-QV_LlAw5DuAyGPH7bDH4QaQ5k-p6cIctmpWZE-9wRDlKA4LYRblKE7MJcI6OmM4ldlMM0Jc8N-gCtl4w
    -
    -
  8. -
-

步骤二:在本地使用 rancher-rke SA 的认证信息更新 kubeconfig 文件

-

在任意一台安装了 kubelet 的本地节点执行如下操作:

-
    -
  1. -

    配置 kubelet token:

    -
    kubectl config set-credentials rancher-rke --token=`rancher-rke-secret` 里面的 token 信息
    -
    -

    例如:

    -
    kubectl config set-credentials eks-admin --token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjUtNE9nUWZLRzVpbEJORkZaNmtCQXhqVzRsZHU4MHhHcDBfb0VCaUo0V1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyYW5jaGVyLXJrZS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmFuY2hlci1ya2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkODNkZjVkOS1iZDdkLTQ4OGQtYTA0Ni1iNzQwNjE4YTAxNzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cmFuY2hlci1ya2UifQ.VNsMtPEFOdDDeGt_8VHblcMRvjOwPXMM-79o9UooHx6q-VkHOcIOp3FOT2hnEdNnIsyODZVKCpEdCgyozX-3y5x2cZSZpocnkMcBbQm-qfTyUcUhAY7N5gcYUtHUhvRAsNWJcsDCn6d96gT_qo-ddo_cT8Ri39Lc123FDYOnYG-YGFKSgRQVy7Vyv34HIajZCCjZzy7i--eE_7o4DXeTjNqAFMFstUxxHBOXI3Rdn1zKQKqh5Jhg4ES7X-edSviSUfJUX-QV_LlAw5DuAyGPH7bDH4QaQ5k-p6cIctmpWZE-9wRDlKA4LYRblKE7MJcI6OmM4ldlMM0Jc8N-gCtl4w
    -
    -
  2. -
  3. -

    配置 kubelet APIServer 信息:

    -
    kubectl config set-cluster {集群名} --insecure-skip-tls-verify=true --server={APIServer}
    -
    -
      -
    • {集群名} :指 rancher 集群的名称。
    • -
    • {APIServer} :指集群的访问地址,一般为集群控制节点 IP + 6443 端口,如 https://10.X.X.X:6443
    • -
    -

    例如:

    -
    kubectl config set-cluster rancher-rke --insecure-skip-tls-verify=true --server=https://10.X.X.X:6443
    -
    -
  4. -
  5. -

    配置 kubelet 上下文信息:

    -
    kubectl config set-context {上下文名称} --cluster={集群名} --user={SA 用户名}
    -
    -

    例如:

    -
    kubectl config set-context rancher-rke-context --cluster=rancher-rke --user=rancher-rke
    -
    -
  6. -
  7. -

    在 kubelet 中指定我们刚刚新建的上下文 rancher-rke-context

    -
    kubectl config use-context rancher-rke-context
    -
    -
  8. -
  9. -

    获取上下文 rancher-rke-context 中的 kubeconfig 信息。

    -
    kubectl config view --minify --flatten --raw
    -
    -

    预期输出:

    -
    apiVersion: v1
    -  clusters:
    -  - cluster:
    -    insecure-skip-tls-verify: true
    -    server: https://77C321BCF072682C70C8665ED4BFA10D.gr7.ap-southeast-1.eks.amazonaws.com
    -  name: joincluster
    -  contexts:
    -  - context:
    -    cluster: joincluster
    -    user: eks-admin
    -  name: ekscontext
    -  current-context: ekscontext
    -  kind: Config
    -  preferences: {}
    -  users:
    -  - name: eks-admin
    -  user:
    -    token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImcxTjJwNkktWm5IbmRJU1RFRExvdWY1TGFWVUtGQ3VIejFtNlFQcUNFalEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2V
    -
    -
  10. -
-

步骤三:算丰 AI 算力平台界面接入集群

-

使用刚刚获取的 kubeconfig 文件,参考接入集群文档,将 rancher 集群接入全局服务集群。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/k8s-cert.html b/site/end-user/kpanda/clusters/k8s-cert.html deleted file mode 100644 index c0e18ee..0000000 --- a/site/end-user/kpanda/clusters/k8s-cert.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - - - - - - - - -Kubernetes 集群证书更新 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

Kubernetes 集群证书更新

-

为保证 Kubernetes 各组件之间的通信安全,组件之间的调用会进行 TLS 身份验证,执行验证操作需要配置集群 PKI 证书。

-

集群证书有效期为1年,为避免证书过期导致业务无法使用,请及时更新证书。

-

本文介绍如何手动进行证书更新。

-

检查证书是否过期

-

您可以执行以下命令查看证书是否过期:

-
kubeadm certs check-expiration
-
-

输出类似于以下内容:

-
CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
-admin.conf                 Dec 14, 2024 07:26 UTC   204d                                    no      
-apiserver                  Dec 14, 2024 07:26 UTC   204d            ca                      no      
-apiserver-etcd-client      Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      
-apiserver-kubelet-client   Dec 14, 2024 07:26 UTC   204d            ca                      no      
-controller-manager.conf    Dec 14, 2024 07:26 UTC   204d                                    no      
-etcd-healthcheck-client    Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      
-etcd-peer                  Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      
-etcd-server                Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      
-front-proxy-client         Dec 14, 2024 07:26 UTC   204d            front-proxy-ca          no      
-scheduler.conf             Dec 14, 2024 07:26 UTC   204d                                    no      
-
-CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
-ca                      Dec 12, 2033 07:26 UTC   9y              no      
-etcd-ca                 Dec 12, 2033 07:26 UTC   9y              no      
-front-proxy-ca          Dec 12, 2033 07:26 UTC   9y              no      
-
-

手动更新证书

-

您可以通过以下命令手动更新证书,只需带上合适的命令行选项。更新证书前请先备份当前证书。

-

更新指定证书:

-
kubeadm certs renew
-
-

更新全部证书:

-
kubeadm certs renew all
-
-

更新后的证书可以在 /etc/kubernetes/pki 目录下查看,有效期延续 1 年。 -以下对应的几个配置文件也会同步更新:

-
    -
  • /etc/kubernetes/admin.conf
  • -
  • /etc/kubernetes/controller-manager.conf
  • -
  • /etc/kubernetes/scheduler.conf
  • -
-
-

Note

-
    -
  • 如果您部署的是一个高可用集群,这个命令需要在所有控制节点上执行。
  • -
  • 此命令用 CA(或者 front-proxy-CA )证书和存储在 /etc/kubernetes/pki 中的密钥执行更新。
  • -
-
-

重启服务

-

执行更新操作之后,你需要重启控制面 Pod。因为动态证书重载目前还不被所有组件和证书支持,所有这项操作是必须的。

-

静态 Pod 是被本地 kubelet 而不是 API 服务器管理,所以 kubectl 不能用来删除或重启他们。

-

要重启静态 Pod,你可以临时将清单文件从 /etc/kubernetes/manifests/ 移除并等待 20 秒。 -参考 KubeletConfiguration 结构中的 fileCheckFrequency 值。

-

如果 Pod 不在清单目录里,kubelet 将会终止它。 -在另一个 fileCheckFrequency 周期之后你可以将文件移回去,kubelet 可以完成 Pod 的重建,而组件的证书更新操作也得以完成。

-
mv ./manifests/* ./temp/
-mv ./temp/* ./manifests/
-
-
-

Note

-

如果容器服务使用的是 Docker,为了让证书生效,可以使用以下命令对涉及到证书使用的几个服务进行重启:

-
docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' | xargs docker restart
-
-
-

更新 KubeConfig

-

构建集群时通常会将 admin.conf 证书复制到 $HOME/.kube/config 中,为了在更新 admin.conf 后更新 $HOME/.kube/config 的内容, 必须运行以下命令:

-
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
-sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
-

为 kubelet 配置证书轮换

-

完成以上操作后,基本完成了集群所有证书的更新,但不包括 kubelet。

-

因为 kubernetes 包含特性 kubelet 证书轮换, 在当前证书即将过期时, 将自动生成新的秘钥,并从 Kubernetes API 申请新的证书。 一旦新的证书可用,它将被用于与 Kubernetes API 间的连接认证。

-
-

Note

-

此特性适用于 Kubernetes 1.8.0 或更高的版本。

-
-

启用客户端证书轮换,配置参数如下:

-
    -
  • -

    kubelet 进程接收 --rotate-certificates 参数,该参数决定 kubelet 在当前使用的 证书即将到期时,是否会自动申请新的证书。

    -
  • -
  • -

    kube-controller-manager 进程接收 --cluster-signing-duration 参数 - (在 1.19 版本之前为 --experimental-cluster-signing-duration),用来控制签发证书的有效期限。

    -
  • -
-

更多详情参考为 kubelet 配置证书轮换

-

自动更新证书

-

为了更高效便捷处理已过期或者即将过期的 kubernetes 集群证书,可参考 -k8s 版本集群证书更新

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/runtime.html b/site/end-user/kpanda/clusters/runtime.html deleted file mode 100644 index 5370d54..0000000 --- a/site/end-user/kpanda/clusters/runtime.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - - - - - - - -如何选择容器运行时 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

如何选择容器运行时

-

容器运行时是 kubernetes 中对容器和容器镜像生命周期进行管理的重要组件。 -kubernetes 在 1.19 版本中将 containerd 设为默认的容器运行时,并在 1.24 版本中移除了 Dockershim 组件的支持。

-

因此相较于 Docker 运行时,我们更加 推荐您使用轻量的 containerd 作为您的容器运行时,因为这已经成为当前主流的运行时选择。

-

除此之外,一些操作系统发行厂商对 Docker 运行时的兼容也不够友好,不同操作系统对运行时的支持如下表:

-

不同操作系统和推荐的运行时版本对应关系

- - - - - - - - - - - - - - - - - - - - - - - - - -
操作系统推荐的 containerd 版本推荐的 Docker 版本
CentOS1.7.520.10
RedHatOS1.7.520.10
KylinOS1.7.519.03(仅 ARM 架构支持 ,在 x86 架构下不支持使用 Docker 作为运行时)
-

更多支持的运行时版本信息,请参考 RedHatOS 支持的运行时版本KylinOS 支持的运行时版本

-
-

Note

-

在离线安装模式下,需要提前准备相关操作系统的运行时离线包。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/clusters/upgrade-cluster.html b/site/end-user/kpanda/clusters/upgrade-cluster.html deleted file mode 100644 index 4ec2ff5..0000000 --- a/site/end-user/kpanda/clusters/upgrade-cluster.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - - - - - - -集群升级 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

集群升级

-

Kubernetes 社区每个季度都会发布一次小版本,每个版本的维护周期大概只有 9 个月。 -版本停止维护后就不会再更新一些重大漏洞或安全漏洞。手动升级集群操作较为繁琐,给管理人员带来了极大的工作负担。

-

本节将介绍如何在通过 Web UI 界面一键式在线升级工作集群 Kubernetes 版本, -如需离线升级工作集群的 kubernetes 版本,请参阅工作集群离线升级指南进行升级。

-
-

Danger

-

版本升级后将无法回退到之前的版本,请谨慎操作。

-
-
-

Note

-
    -
  • Kubernetes 版本以 x.y.z 表示,其中 x 是主要版本, y 是次要版本, z 是补丁版本。
  • -
  • 不允许跨次要版本对集群进行升级,例如不能从 1.23 直接升级到 1.25。
  • -
  • 接入集群 不支持版本升级。如果左侧导航栏没有 集群升级 ,请检查该集群是否为 接入集群
  • -
  • 全局服务集群只能通过终端进行升级。
  • -
  • 升级工作集群时,该工作集群的管理集群应该已经接入容器管理模块,并且处于正常运行中。
  • -
  • 如果需要修改集群参数,可以通过升级相同版本的方式实现,具体操作参考下文。
  • -
-
-
    -
  1. -

    在集群列表中点击目标集群的名称。

    -

    升级集群

    -
  2. -
  3. -

    然后在左侧导航栏点击 集群运维 -> 集群升级 ,在页面右上角点击 版本升级

    -

    升级集群

    -
  4. -
  5. -

    选择可升级的版本,输入集群名称进行确认。

    -

    可升级版本

    -
    -

    Note

    -

    如果您是想通过升级方式来修改集群参数,请参考以下步骤:

    -
      -
    1. -

      找到集群对应的 ConfigMap,您可以登录控制节点执行如下命令,找到 varsConfRef 中的 ConfigMap 名称。

      -
      kubectl get cluster.kubean.io <clustername> -o yaml
      -
      -
    2. -
    3. -

      根据需要,修改 ConfigMap 中的参数信息。

      -
    4. -
    5. -

      在此处选择相同版本进行升级操作,升级完成即可成功更新对应的集群参数。

      -
    6. -
    -
    -
  6. -
  7. -

    点击 确定 后,可以看到集群的升级进度。

    -

    升级进度

    -
  8. -
  9. -

    集群升级预计需要 30 分钟,可以点击 实时日志 按钮查看集群升级的详细日志。

    -

    实时日志

    -
  10. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/configmaps-secrets/configmap-hot-loading.html b/site/end-user/kpanda/configmaps-secrets/configmap-hot-loading.html deleted file mode 100644 index 39f1206..0000000 --- a/site/end-user/kpanda/configmaps-secrets/configmap-hot-loading.html +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - - - - - - - - -Configmap/Secret热加载 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

configmap/secret 热加载

-

configmap/secret 热加载是指将 configmap/secret 作为数据卷挂载在容器中挂载时,当配置发生改变时,容器将自动读取 configmap/secret 更新后的配置,而无需重启 Pod。

-

操作步骤

-
    -
  1. -

    参考创建工作负载 - 容器配置,配置容器数据存储,选择 ConfigmapConfigmap KeySecretSecret Key 作为数据卷挂载至容器。

    -

    使用 config 作为数据卷

    -
    -

    Note

    -

    使用子路径(SubPath)方式挂载的配置文件不支持热加载。

    -
    -
  2. -
  3. -

    进入【配置与密钥】页面,进入配置项详情页面,在【关联资源】中找到对应的 container 资源,点击 立即加载 按钮,进入配置热加载页面。

    -

    使用 config 作为数据卷

    -
    -

    Note

    -

    如果您的应用支持自动读取 configmap/secret 更新后的配置,则无需手动执行热加载操作。

    -
    -
  4. -
  5. -

    在热加载配置弹窗中,输入进入容器内的 执行命令 并点击 确定 按钮,以重载配置。例如,在 nginx 容器中,以 root 用户权限,执行 nginx -s reload 命令来重载配置。

    -

    使用 config 作为数据卷

    -
  6. -
  7. -

    在界面弹出的 web 终端中查看应用重载情况。

    -

    使用 config 作为数据卷

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/configmaps-secrets/create-configmap.html b/site/end-user/kpanda/configmaps-secrets/create-configmap.html deleted file mode 100644 index 4383a68..0000000 --- a/site/end-user/kpanda/configmaps-secrets/create-configmap.html +++ /dev/null @@ -1,825 +0,0 @@ - - - - - - - - - - - - - - -创建配置项 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建配置项

-

配置项(ConfigMap)以键值对的形式存储非机密性数据,实现配置数据和应用代码相互解耦的效果。配置项可用作容器的环境变量、命令行参数或者存储卷中的配置文件。

-
-

Note

-
    -
  • -

    在配置项中保存的数据不可超过 1 MiB。如果需要存储体积更大的数据,建议挂载存储卷或者使用独立的数据库或者文件服务。

    -
  • -
  • -

    配置项不提供保密或者加密功能。如果要存储加密数据,建议使用密钥,或者其他第三方工具来保证数据的私密性。

    -
  • -
-
-

支持两种创建方式:

-
    -
  • 图形化表单创建
  • -
  • YAML 创建
  • -
-

前提条件

- -

图形化表单创建

-
    -
  1. -

    集群列表 页面点击某个集群的名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 配置与密钥 -> 配置项 ,点击右上角 创建配置项 按钮。

    -

    创建配置项

    -
  4. -
  5. -

    创建配置项 页面中填写配置信息,点击 确定

    -
    -

    Note

    -

    点击 上传文件 可以从本地导入已有的文件,快速创建配置项。

    -
    -

    创建配置项

    -
  6. -
  7. -

    创建完成后在配置项右侧点击更多可以,可以编辑 YAML、更新、导出、删除等操作。

    -

    创建配置项

    -
  8. -
-

YAML 创建

-
    -
  1. -

    集群列表 页面点击某个集群的名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 配置与密钥 -> 配置项 ,点击右上角 YAML 创建 按钮。

    -

    创建配置项

    -
  4. -
  5. -

    填写或粘贴事先准备好的配置文件,然后在弹框右下角点击 确定

    -
    -

    Note

    -
      -
    • 点击 导入 可以从本地导入已有的文件,快速创建配置项。
    • -
    • 填写数据之后点击 下载 可以将配置文件保存在本地。
    • -
    -
    -

    创建配置项

    -
  6. -
  7. -

    创建完成后在配置项右侧点击更多可以,可以编辑 YAML、更新、导出、删除等操作。

    -

    创建配置项

    -
  8. -
-

配置项 YAML 示例

-
```yaml
-kind: ConfigMap
-apiVersion: v1
-metadata:
-  name: kube-root-ca.crt
-  namespace: default
-  annotations:
-data:
-  version: '1.0'
-```
-
-

下一步:使用配置项

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/configmaps-secrets/create-secret.html b/site/end-user/kpanda/configmaps-secrets/create-secret.html deleted file mode 100644 index 3def81f..0000000 --- a/site/end-user/kpanda/configmaps-secrets/create-secret.html +++ /dev/null @@ -1,823 +0,0 @@ - - - - - - - - - - - - - - -创建密钥 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建密钥

-

密钥是一种用于存储和管理密码、OAuth 令牌、SSH、TLS 凭据等敏感信息的资源对象。使用密钥意味着您不需要在应用程序代码中包含敏感的机密数据。

-

密钥使用场景:

-
    -
  • 作为容器的环境变量使用,提供容器运行过程中所需的一些必要信息。
  • -
  • 使用密钥作为 Pod 的数据卷。
  • -
  • 在 kubelet 拉取容器镜像时作为镜像仓库的身份认证凭证。
  • -
-

支持两种创建方式:

-
    -
  • 图形化表单创建
  • -
  • YAML 创建
  • -
-

前提条件

- -

图形化表单创建

-
    -
  1. -

    集群列表 页面点击某个集群的名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 配置与密钥 -> 密钥 ,点击右上角 创建密钥 按钮。

    -

    创建密钥

    -
  4. -
  5. -

    创建密钥 页面中填写配置信息,点击 确定

    -

    创建密钥

    -

    填写配置时需要注意:

    -
      -
    • 密钥的名称在同一个命名空间中必须具有唯一性
    • -
    • 密钥类型:
        -
      • 默认(Opaque):Kubernetes 默认的密钥类型,支持用户定义的任意数据。
      • -
      • TLS (kubernetes.io/tls):用于 TLS 客户端或者服务器端数据访问的凭证。
      • -
      • 镜像仓库信息 (kubernetes.io/dockerconfigjson):用于镜像仓库访问的凭证。
      • -
      • 用户名和密码(kubernetes.io/basic-auth):用于基本身份认证的凭证。
      • -
      • 自定义:用户根据业务需要自定义的类型。
      • -
      -
    • -
    • 密钥数据:密钥所存储的数据,不同数据需要填写的参数有所不同
        -
      • 当密钥类型为默认(Opaque)/自定义:可以填入多个键值对数据。
      • -
      • 当密钥类型为 TLS (kubernetes.io/tls):需要填入证书凭证和私钥数据。证书是自签名或 CA 签名过的凭据,用来进行身份认证。证书请求是对签名的请求,需要使用私钥进行签名。
      • -
      • 当密钥类型为镜像仓库信息 (kubernetes.io/dockerconfigjson):需要填入私有镜像仓库的账号和密码。
      • -
      • 当密钥类型为用户名和密码(kubernetes.io/basic-auth):需要指定用户名和密码。
      • -
      -
    • -
    -
  6. -
-

YAML 创建

-
    -
  1. -

    集群列表 页面点击某个集群的名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 配置与密钥 -> 密钥 ,点击右上角 YAML 创建 按钮。

    -

    YAML 创建

    -
  4. -
  5. -

    YAML 创建 页面中填写 YAML 配置,点击 确定

    -
    -

    支持从本地导入 YAML 文件或将填写好的文件下载保存到本地。

    -
    -

    YAML 创建

    -
  6. -
-

密钥 YAML 示例

-
```yaml
-apiVersion: v1
-kind: Secret
-metadata:
-  name: secretdemo
-type: Opaque
-data:
-  username: ******
-  password: ******
-```
-
-

下一步:使用密钥

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/configmaps-secrets/use-configmap.html b/site/end-user/kpanda/configmaps-secrets/use-configmap.html deleted file mode 100644 index de933fc..0000000 --- a/site/end-user/kpanda/configmaps-secrets/use-configmap.html +++ /dev/null @@ -1,943 +0,0 @@ - - - - - - - - - - - - - - -使用配置项 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

使用配置项

-

配置项(ConfigMap)是 Kubernetes 的一种 API 对象,用来将非机密性的数据保存到键值对中,可以存储其他对象所需要使用的配置。 -使用时, 容器可以将其用作环境变量、命令行参数或者存储卷中的配置文件。通过使用配置项,能够将配置数据和应用程序代码分开,为应用配置的修改提供更加灵活的途径。

-
-

Note

-

配置项并不提供保密或者加密功能。如果要存储的数据是机密的,请使用密钥,或者使用其他第三方工具来保证数据的私密性,而不是用配置项。 -此外在容器里使用配置项时,容器和配置项必须处于同一集群的命名空间中。

-
-

使用场景

-

您可以在 Pod 中使用配置项,有多种使用场景,主要包括:

-
    -
  • -

    使用配置项设置容器的环境变量

    -
  • -
  • -

    使用配置项设置容器的命令行参数

    -
  • -
  • -

    使用配置项作为容器的数据卷

    -
  • -
-

设置容器的环境变量

-

您可以通过图形化界面或者终端命令行来使用配置项作为容器的环境变量。

-
-

Note

-

配置项导入是将配置项作为环境变量的值;配置项键值导入是将配置项中某一参数作为环境变量的值。

-
-

图形化界面操作

-

通过镜像创建工作负载时,可以在 环境变量 界面通过选择 配置项导入配置项键值导入 为容器设置环境变量。

-
    -
  1. -

    进入镜像创建工作负载页面中,在 容器配置 这一步中,选择 环境变量 配置,点击 添加环境变量 按钮。

    -

    添加环境变量

    -
  2. -
  3. -

    在环境变量类型处选择 配置项导入配置项键值导入

    -
      -
    • -

      当环境变量类型选择为 配置项导入 时,依次输入 变量名前缀 名称、 配置项 的名称。

      -
    • -
    • -

      当环境变量类型选择为 配置项键值导入 时,依次输入 变量名配置项 名称、 的名称。

      -
    • -
    -
  4. -
-

命令行操作

-

您可以在创建工作负载时将配置项设置为环境变量,使用 valueFrom 参数引用 ConfigMap 中的 Key/Value。

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: configmap-pod-1
-spec:
-  containers:
-    - name: test-container
-      image: busybox
-      command: [ "/bin/sh", "-c", "env" ]
-      env:
-        - name: SPECIAL_LEVEL_KEY
-          valueFrom:                  # (1)!
-            configMapKeyRef:
-              name: kpanda-configmap  # (2)!
-              key: SPECIAL_LEVEL      # (3)!
-  restartPolicy: Never
-
-
    -
  1. 使用 valueFrom 来指定 env 引用配置项的 value 值
  2. -
  3. 引用的配置文件名称
  4. -
  5. 引用的配置项 key
  6. -
-

设置容器的命令行参数

-

您可以使用配置项设置容器中的命令或者参数值,使用环境变量替换语法 $(VAR_NAME) 来进行。如下所示。

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: configmap-pod-3
-spec:
-  containers:
-    - name: test-container
-      image: busybox
-      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
-      env:
-        - name: SPECIAL_LEVEL_KEY
-          valueFrom:
-            configMapKeyRef:
-              name: kpanda-configmap
-              key: SPECIAL_LEVEL
-        - name: SPECIAL_TYPE_KEY
-          valueFrom:
-            configMapKeyRef:
-              name: kpanda-configmap
-              key: SPECIAL_TYPE
-  restartPolicy: Never
-
-

这个 Pod 运行后,输出如下内容。

-
Hello Kpanda
-
-

用作容器数据卷

-

您可以通过图形化界面或者终端命令行来使用配置项作为容器的环境变量。

-

图形化操作

-

在通过镜像创建工作负载时,您可以通过在 数据存储 界面选择存储类型为 配置项 ,将配置项作为容器的数据卷。

-
    -
  1. -

    进入镜像创建工作负载页面中,在 容器配置 这一步中,选择 数据存储 配置,在 节点路径映射 列表点击 添加 按钮。

    -

    添加环境变量

    -
  2. -
  3. -

    在存储类型处选择 配置项 ,并依次输入 容器路径子路径 等信息。

    -
  4. -
-

命令行操作

-

要在一个 Pod 的存储卷中使用 ConfigMap。

-

下面是一个将 ConfigMap 以卷的形式进行挂载的 Pod 示例:

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: mypod
-spec:
-  containers:
-  - name: mypod
-    image: redis
-    volumeMounts:
-    - name: foo
-      mountPath: "/etc/foo"
-      readOnly: true
-  volumes:
-  - name: foo
-    configMap:
-      name: myconfigmap
-
-

如果 Pod 中有多个容器,则每个容器都需要自己的 volumeMounts 块,但针对每个 ConfigMap,您只需要设置一个 spec.volumes 块。

-
-

Note

-

将配置项作为容器挂载的数据卷时,配置项只能作为只读文件进行读取。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/configmaps-secrets/use-secret.html b/site/end-user/kpanda/configmaps-secrets/use-secret.html deleted file mode 100644 index 8633f43..0000000 --- a/site/end-user/kpanda/configmaps-secrets/use-secret.html +++ /dev/null @@ -1,962 +0,0 @@ - - - - - - - - - - - - - - -使用密钥 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

使用密钥

-

密钥是一种用于存储和管理密码、OAuth 令牌、SSH、TLS 凭据等敏感信息的资源对象。使用密钥意味着您不需要在应用程序代码中包含敏感的机密数据。

-

使用场景

-

您可以在 Pod 中使用密钥,有多种使用场景,主要包括:

-
    -
  • 作为容器的环境变量使用,提供容器运行过程中所需的一些必要信息。
  • -
  • 使用密钥作为 Pod 的数据卷。
  • -
  • 在 kubelet 拉取容器镜像时用作镜像仓库的身份认证凭证使用。
  • -
-

使用密钥设置容器的环境变量

-

您可以通过图形化界面或者终端命令行来使用密钥作为容器的环境变量。

-
-

Note

-

密钥导入是将密钥作为环境变量的值;密钥键值导入是将密钥中某一参数作为环境变量的值。

-
-

图形界面操作

-

在通过镜像创建工作负载时,您可以在 环境变量 界面通过选择 密钥导入密钥键值导入 为容器设置环境变量。

-
    -
  1. -

    进入镜像创建工作负载页面。

    -

    创建 deployment

    -
  2. -
  3. -

    容器配置 选择 环境变量 配置,点击 添加环境变量 按钮。

    -

    添加环境变量

    -
  4. -
  5. -

    在环境变量类型处选择 密钥导入密钥键值导入

    -

    密钥导入

    -
      -
    • -

      当环境变量类型选择为 密钥导入 时,依次输入 变量名前缀密钥 的名称。

      -
    • -
    • -

      当环境变量类型选择为 密钥键值导入 时,依次输入 变量名密钥 的名称。

      -
    • -
    -
  6. -
-

命令行操作

-

如下例所示,您可以在创建工作负载时将密钥设置为环境变量,使用 valueFrom 参数引用 Secret 中的 Key/Value。

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: secret-env-pod
-spec:
-  containers:
-  - name: mycontainer
-    image: redis
-    env:
-      - name: SECRET_USERNAME
-        valueFrom:
-          secretKeyRef:
-            name: mysecret
-            key: username
-            optional: false # (1)!
-      - name: SECRET_PASSWORD
-        valueFrom:
-          secretKeyRef:
-            name: mysecret
-            key: password
-            optional: false # (2)!
-
-
    -
  1. 此值为默认值;意味着 "mysecret",必须存在且包含名为 "username" 的主键
  2. -
  3. 此值为默认值;意味着 "mysecret",必须存在且包含名为 "password" 的主键
  4. -
-

使用密钥作为 Pod 的数据卷

-

图形界面操作

-

在通过镜像创建工作负载时,您可以通过在 数据存储 界面选择存储类型为 密钥 ,将密钥作为容器的数据卷。

-
    -
  1. -

    进入镜像创建工作负载页面。

    -

    创建deployment

    -
  2. -
  3. -

    容器配置 选择 数据存储 配置,在 节点路径映射 列表点击 添加 按钮。

    -

    创建deployment

    -
  4. -
  5. -

    在存储类型处选择 密钥 ,并依次输入 容器路径子路径 等信息。

    -
  6. -
-

命令行操作

-

下面是一个通过数据卷来挂载名为 mysecret 的 Secret 的 Pod 示例:

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: mypod
-spec:
-  containers:
-  - name: mypod
-    image: redis
-    volumeMounts:
-    - name: foo
-      mountPath: "/etc/foo"
-      readOnly: true
-  volumes:
-  - name: foo
-    secret:
-      secretName: mysecret
-      optional: false # (1)!
-
-
    -
  1. 默认设置,意味着 "mysecret" 必须已经存在
  2. -
-

如果 Pod 中包含多个容器,则每个容器需要自己的 volumeMounts 块,不过针对每个 Secret 而言,只需要一份 .spec.volumes 设置。

-

在 kubelet 拉取容器镜像时用作镜像仓库的身份认证凭证

-

您可以通过图形化界面或者终端命令行来使用密钥作为镜像仓库身份认证凭证。

-

图形化操作

-

在通过镜像创建工作负载时,您可以通过在 数据存储 界面选择存储类型为 密钥 ,将密钥作为容器的数据卷。

-
    -
  1. -

    进入镜像创建工作负载页面。

    -

    创建deployment

    -
  2. -
  3. -

    在第二步 容器配置 时选择 基本信息 配置,点击 选择镜像 按钮。

    -

    选择镜像

    -
  4. -
  5. -

    在弹框的 镜像仓库 下拉选择私有镜像仓库名称。关于私有镜像密钥创建请查看创建密钥了解详情。

    -

    选择镜像

    -
  6. -
  7. -

    输入私有仓库内的镜像名称,点击 确定 ,完成镜像选择。

    -
  8. -
-
-

Note

-

创建密钥时,需要确保输入正确的镜像仓库地址、用户名称、密码并选择正确的镜像名称,否则将无法获取镜像仓库中的镜像。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/custom-resources/create.html b/site/end-user/kpanda/custom-resources/create.html deleted file mode 100644 index e560545..0000000 --- a/site/end-user/kpanda/custom-resources/create.html +++ /dev/null @@ -1,780 +0,0 @@ - - - - - - - - - - - - - - -自定义资源 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建自定义资源 (CRD)

-

在 Kubernetes 中一切对象都被抽象为资源,如 Pod、Deployment、Service、Volume 等是 Kubernetes 提供的默认资源, -这为我们的日常运维和管理工作提供了重要支撑,但是在一些特殊的场景中,现有的预置资源并不能满足业务的需要, -因此我们希望去扩展 Kubernetes API 的能力,自定义资源(CustomResourceDefinition, CRD)正是基于这样的需求应运而生。

-

容器管理模块支持对自定义资源的界面化管理,主要功能如下:

-
    -
  • 获取集群下自定义资源列表和详细信息
  • -
  • 基于 YAML 创建自定资源
  • -
  • 基于 YAML 创建自定义资源示例 CR(Custom Resource)
  • -
  • 删除自定义资源
  • -
-

前提条件

- -

通过 YAML 创建自定义资源

-
    -
  1. -

    点击一个集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 自定义资源 ,点击右上角 YAML 创建 按钮。

    -

    点击创建按钮

    -
  4. -
  5. -

    YAML 创建 页面中,填写 YAML 语句后,点击 确定

    -

    填写 yaml

    -
  6. -
  7. -

    返回自定义资源列表页,即可查看刚刚创建的名为 crontabs.stable.example.com 的自定义资源。

    -

    查看

    -
  8. -
-

自定义资源示例:

-
CRD example
apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: crontabs.stable.example.com
-spec:
-  group: stable.example.com
-  versions:
-    - name: v1
-      served: true
-      storage: true
-      schema:
-        openAPIV3Schema:
-          type: object
-          properties:
-            spec:
-              type: object
-              properties:
-                cronSpec:
-                  type: string
-                image:
-                  type: string
-                replicas:
-                  type: integer
-  scope: Namespaced
-  names:
-    plural: crontabs
-    singular: crontab
-    kind: CronTab
-    shortNames:
-    - ct
-
-

通过 YAML 创建自定义资源示例

-
    -
  1. -

    点击一个集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 自定义资源 ,进入自定义资源列表页面。

    -

    点击创建按钮

    -
  4. -
  5. -

    点击名为 crontabs.stable.example.com 的自定义资源,进入详情,点击右上角 YAML 创建 按钮。

    -

    点击创建按钮

    -
  6. -
  7. -

    YAML 创建 页面中,填写 YAML 语句后,点击 确定

    -

    填写 yaml

    -
  8. -
  9. -

    返回 crontabs.stable.example.com 的详情页面,即可查看刚刚创建的名为 my-new-cron-object 的自定义资源。

    -
  10. -
-

CR 示例:

-
CR example
apiVersion: "stable.example.com/v1"
-kind: CronTab
-metadata:
-  name: my-new-cron-object
-spec:
-  cronSpec: "* * * * */5"
-  image: my-awesome-cron-image
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/FAQ.html b/site/end-user/kpanda/gpu/FAQ.html deleted file mode 100644 index f5dd0a0..0000000 --- a/site/end-user/kpanda/gpu/FAQ.html +++ /dev/null @@ -1,369 +0,0 @@ - - - - - - - - - - - - -GPU 相关 FAQ - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

GPU 相关 FAQ

-

Pod 内 nvidia-smi 看不到 GPU 进程

-

Q: 在使用 GPU 的 Pod 内执行 nvidia-smi 命令看不到使用 GPU 的进程信息,包括整卡模式、vGPU 模式等。

-

A: 因为有 PID namespace 隔离,导致在 Pod 内查看不到 GPU 进程,如果要查看 GPU 进程有如下几种方法:

-
    -
  • 在使用 GPU 的工作负载配置 hostPID: true,使其可以查看到宿主机上的 PID
  • -
  • 在 gpu-operator 的 driver Pod 中执行 nvidia-smi 命令查看进程
  • -
  • 在宿主机上执行 chroot /run/nvidia/driver nvidia-smi 命令查看进程
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/Iluvatar_usage.html b/site/end-user/kpanda/gpu/Iluvatar_usage.html deleted file mode 100644 index 64acf7a..0000000 --- a/site/end-user/kpanda/gpu/Iluvatar_usage.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - -App 使用天数智芯(Iluvatar)GPU - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
- -
-
-
-

App 使用天数智芯(Iluvatar)GPU

-

本节介绍如何在算丰 AI 算力平台使用天数智芯虚拟 GPU。

-

前提条件

- -

操作步骤

-

使用界面配置

-
    -
  1. -

    确认集群是否已检测 GPU 卡。点击对应 集群 -> 集群设置 -> Addon 插件 ,查看是否已自动启用并自动检测对应 GPU 类型。 - 目前集群会自动启用 GPU ,并且设置 GPU 类型为 Iluvatar

    -

    集群设置

    -
  2. -
  3. -

    部署工作负载。点击对应 集群 -> 工作负载 ,通过镜像方式部署工作负载,选择类型(Iluvatar)之后,需要配置 App 使用的 GPU 资源:

    -
      -
    • 物理卡数量(iluvatar.ai/vcuda-core):表示当前 Pod 需要挂载几张物理卡,输入值必须为整数且 小于等于 宿主机上的卡数量。
    • -
    • 显存使用数量(iluvatar.ai/vcuda-memory):表示每张卡占用的 GPU 显存,值单位为 MB,最小值为 1,最大值为整卡的显存值。
    • -
    -

    负载使用

    -
    -

    如果上述值配置的有问题则会出现调度失败,资源分配不了的情况。

    -
    -
  4. -
-

使用 YAML 配置

-

创建工作负载申请 GPU 资源,在资源申请和限制配置中增加iluvatar.ai/vcuda-core: 1iluvatar.ai/vcuda-memory: 200 参数,配置 App 使用物理卡的资源。

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: full-iluvatar-gpu-demo
-  namespace: default
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: full-iluvatar-gpu-demo
-  template:
-    metadata:
-      labels:
-        app: full-iluvatar-gpu-demo
-    spec:
-      containers:
-      - image: nginx:perl
-        name: container-0
-        resources:
-          limits:
-            cpu: 250m
-            iluvatar.ai/vcuda-core: '1'
-            iluvatar.ai/vcuda-memory: '200'
-            memory: 512Mi
-          requests:
-            cpu: 250m
-            memory: 512Mi
-      imagePullSecrets:
-      - name: default-secret
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/ascend/ascend_driver_install.html b/site/end-user/kpanda/gpu/ascend/ascend_driver_install.html deleted file mode 100644 index 2f5f1b1..0000000 --- a/site/end-user/kpanda/gpu/ascend/ascend_driver_install.html +++ /dev/null @@ -1,538 +0,0 @@ - - - - - - - - - - - - -昇腾 NPU 组件安装 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

昇腾 NPU 组件安装

-

本章节提供昇腾 NPU 驱动、Device Plugin、NPU-Exporter 等组件的安装指导。

-

前提条件

-
    -
  1. 安装前请确认支持的 NPU 型号,详情请参考昇腾 NPU 矩阵
  2. -
  3. 请确认 对应 NPU 型号所要求的内核版本是否匹配,详情请参考昇腾 NPU 矩阵
  4. -
  5. 准备 Kubernetes 基础环境
  6. -
-

安装步骤

-

使用 NPU 资源之前,需要完成固件安装、NPU 驱动安装、 Docker Runtime 安装、用户创建、日志目录创建以及 NPU Device Plugin 安装,详情参考如下步骤。

-

安装固件

-
    -
  1. 安装前请确认内核版本在“二进制安装”安装方式对应的版本范围内,则可以直接安装NPU驱动固件。
  2. -
  3. 固件与驱动下载请参考固件下载地址
  4. -
  5. 固件安装请参考安装 NPU 驱动固件
  6. -
-

安装 NPU 驱动

-
    -
  1. 如驱动未安装,请参考昇腾官方文档进行安装。例如 Ascend910,参考 - 910 驱动安装文档
  2. -
  3. 运行 npu-smi info 命令,并且能够正常返回 NPU 信息,表示 NPU 驱动与固件已就绪。
  4. -
-

昇腾信息

-

安装 Docker Runtime

-
    -
  1. -

    下载 Ascend Docker Runtime

    -

    社区版下载地址:https://www.hiascend.com/zh/software/mindx-dl/community

    -
    wget -c https://mindx.obs.cn-south-1.myhuaweicloud.com/OpenSource/MindX/MindX%205.0.RC2/MindX%20DL%205.0.RC2/Ascend-docker-runtime_5.0.RC2_linux-x86_64.run
    -
    -

    安装到指定路径下,依次执行以下两条命令,参数为指定的安装路径:

    -
    chmod u+x Ascend-docker-runtime_5.0.RC2_linux-x86_64.run 
    -./Ascend-docker-runtime_{version}_linux-{arch}.run --install --install-path=<path>
    -
    -
  2. -
  3. -

    修改 containerd 配置文件

    -

    containerd 无默认配置文件时,依次执行以下3条命令,创建配置文件:

    -
    mkdir /etc/containerd 
    -containerd config default > /etc/containerd/config.toml 
    -vim /etc/containerd/config.toml
    -
    -

    containerd 有配置文件时:

    -
    vim /etc/containerd/config.toml
    -
    -

    根据实际情况修改 runtime 的安装路径,主要修改 runtime 字段:

    -
    ... 
    -[plugins."io.containerd.monitor.v1.cgroups"]
    -   no_prometheus = false  
    -[plugins."io.containerd.runtime.v1.linux"]
    -   shim = "containerd-shim"
    -   runtime = "/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime"
    -   runtime_root = ""
    -   no_shim = false
    -   shim_debug = false
    - [plugins."io.containerd.runtime.v2.task"]
    -   platforms = ["linux/amd64"]
    -...
    -
    -

    执行以下命令,重启 containerd:

    -
    systemctl restart containerd
    -
    -
  4. -
-

用户创建

-

在对应组件安装的节点上执行以下命令创建用户。

-
# Ubuntu 操作系统
-useradd -d /home/hwMindX -u 9000 -m -s /usr/sbin/nologin hwMindX
-usermod -a -G HwHiAiUser hwMindX
-# Centos 操作系统
-useradd -d /home/hwMindX -u 9000 -m -s /sbin/nologin hwMindX
-usermod -a -G HwHiAiUser hwMindX
-
-

日志目录创建

-

在对应节点创建组件日志父目录和各组件的日志目录,并设置目录对应属主和权限。执行下述命令,创建组件日志父目录。

-
mkdir -m 755 /var/log/mindx-dl
-chown root:root /var/log/mindx-dl
-
-

执行下述命令,创建 Device Plugin 组件日志目录。

-
mkdir -m 750 /var/log/mindx-dl/devicePlugin
-chown root:root /var/log/mindx-dl/devicePlugin
-
-
-

Note

-

请分别为所需组件创建对应的日志目录,当前案例中只需要 Device Plugin 组件。 -如果有其他组件需求请参考官方文档

-
-

创建节点 Label

-

参考下述命令在对应节点上创建 Label:

-
# 在安装了驱动的计算节点创建此标签
-kubectl label node {nodename} huawei.com.ascend/Driver=installed
-kubectl label node {nodename} node-role.kubernetes.io/worker=worker
-kubectl label node {nodename} workerselector=dls-worker-node
-kubectl label node {nodename} host-arch=huawei-arm //或者host-arch=huawei-x86 ,根据实际情况选择
-kubectl label node {nodename} accelerator=huawei-Ascend910 //根据实际情况进行选择
-# 在控制节点创建此标签
-kubectl label node {nodename} masterselector=dls-master-node
-
-

安装 Device Plugin 和 NpuExporter

-

功能模块路径: 容器管理 -> 集群管理 ,点击目标集群的名称,从左侧导航栏点击 Helm 应用 -> Helm 模板 -> 搜索 ascend-mindxdl

-

找到 ascend-mindxdl

-

ascend-mindxdl详情

-
    -
  • DevicePlugin :通过提供通用设备插件机制和标准的设备API接口,供Kubernetes使用设备。建议使用默认的镜像及版本。
  • -
  • NpuExporter :基于Prometheus/Telegraf生态,该组件提供接口,帮助用户能够关注到昇腾系列AI处理器以及容器级分配状态。建议使用默认的镜像及版本。
  • -
  • ServiceMonitor :默认不开启,开启后可前往可观测性模块查看 NPU 相关监控。如需开启,请确保 insight-agent 已安装并处于运行状态,否则将导致 ascend-mindxdl 安装失败。
  • -
  • isVirtualMachine :默认不开启,如果 NPU 节点为云主机场景,请开启 isVirtualMachine 参数。
  • -
-

安装成功后,对应命名空间下会出现两个组件,如下图:

-

ascend-mindxdl列表

-

同时节点信息上也会出现对应 NPU 的信息:

-

节点标签

-

一切就绪后,我们通过页面创建工作负载时,就能够选择到对应的 NPU 设备,如下图:

-

使用 NPU

-
-

Note

-

有关详细使用步骤,请参照应用使用昇腾(Ascend)NPU

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/ascend/ascend_usage.html b/site/end-user/kpanda/gpu/ascend/ascend_usage.html deleted file mode 100644 index ad17023..0000000 --- a/site/end-user/kpanda/gpu/ascend/ascend_usage.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - - - - - - - -应用使用昇腾(Ascend)NPU - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

应用使用昇腾(Ascend)NPU

-

本节介绍如何在算丰 AI 算力平台使用昇腾 GPU。

-

前提条件

-
    -
  • 当前 NPU 节点已安装昇腾 (Ascend)驱动。
  • -
  • 当前 NPU 节点已安装 Ascend-Docker-Runtime 组件。
  • -
  • 当前集群已安装 NPU MindX DL 套件。
  • -
  • 当前集群内 NPU 卡未进行任何虚拟化操作或被其它应用占用。
  • -
-

请参考昇腾 NPU 组件安装文档安装基础环境。

-

快速使用

-

本文使用昇腾示例库中的 AscentCL 图片分类应用示例。

-
    -
  1. -

    下载昇腾代码库

    -

    运行以下命令下载昇腾 Demo 示例代码库,并且请记住代码存放的位置,后续需要使用。

    -
    git clone https://gitee.com/ascend/samples.git
    -
    -
  2. -
  3. -

    准备基础镜像

    -

    此例使用 Ascent-pytorch 基础镜像,可访问昇腾镜像仓库获取。

    -
  4. -
  5. -

    准备 YAML

    -
    ascend-demo.yaml
    apiVersion: batch/v1
    -kind: Job
    -metadata:
    -  name: resnetinfer1-1-1usoc
    -spec:
    -  template:
    -    spec:
    -      containers:
    -        - image: ascendhub.huawei.com/public-ascendhub/ascend-pytorch:23.0.RC2-ubuntu18.04 # Inference image name
    -          imagePullPolicy: IfNotPresent
    -          name: resnet50infer
    -          securityContext:
    -            runAsUser: 0
    -          command:
    -            - "/bin/bash"
    -            - "-c"
    -            - |
    -              source /usr/local/Ascend/ascend-toolkit/set_env.sh &&
    -              TEMP_DIR=/root/samples_copy_$(date '+%Y%m%d_%H%M%S_%N') &&
    -              cp -r /root/samples "$TEMP_DIR" &&
    -              cd "$TEMP_DIR"/inference/modelInference/sampleResnetQuickStart/python/model &&
    -              wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx &&
    -              atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224"  --soc_version=Ascend910 &&
    -              cd ../data &&
    -              wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg &&
    -              cd ../scripts &&
    -              bash sample_run.sh
    -          resources:
    -            requests:
    -              huawei.com/Ascend910: 1 # Number of the Ascend 910 Processors
    -            limits:
    -              huawei.com/Ascend910: 1 # The value should be the same as that of requests
    -          volumeMounts:
    -            - name: hiai-driver
    -              mountPath: /usr/local/Ascend/driver
    -              readOnly: true
    -            - name: slog
    -              mountPath: /var/log/npu/conf/slog/slog.conf
    -            - name: localtime # The container time must be the same as the host time
    -              mountPath: /etc/localtime
    -            - name: dmp
    -              mountPath: /var/dmp_daemon
    -            - name: slogd
    -              mountPath: /var/slogd
    -            - name: hbasic
    -              mountPath: /etc/hdcBasic.cfg
    -            - name: sys-version
    -              mountPath: /etc/sys_version.conf
    -            - name: aicpu
    -              mountPath: /usr/lib64/aicpu_kernels
    -            - name: tfso
    -              mountPath: /usr/lib64/libtensorflow.so
    -            - name: sample-path
    -              mountPath: /root/samples
    -      volumes:
    -        - name: hiai-driver
    -          hostPath:
    -            path: /usr/local/Ascend/driver
    -        - name: slog
    -          hostPath:
    -            path: /var/log/npu/conf/slog/slog.conf
    -        - name: localtime
    -          hostPath:
    -            path: /etc/localtime
    -        - name: dmp
    -          hostPath:
    -            path: /var/dmp_daemon
    -        - name: slogd
    -          hostPath:
    -            path: /var/slogd
    -        - name: hbasic
    -          hostPath:
    -            path: /etc/hdcBasic.cfg
    -        - name: sys-version
    -          hostPath:
    -            path: /etc/sys_version.conf
    -        - name: aicpu
    -          hostPath:
    -            path: /usr/lib64/aicpu_kernels
    -        - name: tfso
    -          hostPath:
    -            path: /usr/lib64/libtensorflow.so
    -        - name: sample-path
    -          hostPath:
    -            path: /root/samples
    -      restartPolicy: OnFailure
    -
    -

    以上 YAML 中有一些字段需要根据实际情况进行修改:

    -
      -
    1. atc ... --soc_version=Ascend910 使用的是 Ascend910 ,请以实际情况为主 - 您可以使用 npu-smi info 命令查看显卡型号然后加上 Ascend 前缀即可
    2. -
    3. samples-path 以实际情况为准
    4. -
    5. resources 以实际情况为准
    6. -
    -
  6. -
  7. -

    部署 Job 并查看结果

    -

    使用如下命令创建 Job:

    -
    kubectl apply -f ascend-demo.yaml
    -
    -

    查看 Pod 运行状态:

    -

    昇腾 Pod 状态

    -

    Pod 成功运行后,查看日志结果。在屏幕上的关键提示信息示例如下图,提示信息中的 Label 表示类别标识, -Conf 表示该分类的最大置信度,Class 表示所属类别。这些值可能会根据版本、环境有所不同,请以实际情况为准:

    -

    昇腾 demo 运行结果

    -

    结果图片展示:

    -

    昇腾 demo 运行结果图片

    -
  8. -
-

界面使用

-
    -
  1. -

    确认集群是否已检测 GPU 卡。点击对应 集群 -> 集群设置 -> Addon 插件 ,查看是否已自动启用并自动检测对应 GPU 类型。 - 目前集群会自动启用 GPU ,并且设置 GPU 类型为 Ascend

    -

    集群设置

    -
  2. -
  3. -

    部署工作负载,点击对应 集群 -> 工作负载 ,通过镜像方式部署工作负载,选择类型(Ascend)之后,需要配置应用使用的物理卡数量:

    -

    物理卡数量(huawei.com/Ascend910) :表示当前 Pod 需要挂载几张物理卡,输入值必须为整数且**小于等于**宿主机上的卡数量。

    -

    负载使用

    -
    -

    如果上述值配置的有问题则会出现调度失败,资源分配不了的情况。

    -
    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/ascend/vnpu.html b/site/end-user/kpanda/gpu/ascend/vnpu.html deleted file mode 100644 index 34fc0a9..0000000 --- a/site/end-user/kpanda/gpu/ascend/vnpu.html +++ /dev/null @@ -1,448 +0,0 @@ - - - - - - - - - - - - -启用昇腾虚拟化 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

启用昇腾虚拟化

-

昇腾虚拟化分为动态虚拟化和静态虚拟化,本文介绍如何开启并使用昇腾静态虚拟化能力。

-

前提条件

-
    -
  • Kubernetes 集群环境搭建。
  • -
  • 当前 NPU 节点已安装昇腾 (Ascend)驱动。
  • -
  • 当前 NPU 节点已安装 Ascend-Docker-Runtime 组件。
  • -
  • 当前集群已安装 NPU MindX DL 套件。
  • -
  • -

    支持的 NPU 卡型号:

    -
      -
    • Ascend 310P,已验证
    • -
    • Ascend 910b(20 核),已验证
    • -
    • Ascend 910(32 核),官方介绍支持,未实际验证
    • -
    • Ascend 910(30 核),官方介绍支持,未实际验证
    • -
    -

    更多细节参阅官方虚拟化硬件说明

    -
  • -
-

请参考昇腾 NPU 组件安装文档安装基础环境。

-

开启虚拟化能力

-

开启虚拟化能力需要手动修改 ascend-device-plugin-daemonset 组件的启动参数,参考下述命令:

-
- device-plugin -useAscendDocker=true -volcanoType=false -presetVirtualDevice=true
-- logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0
-
-

切分 VNPU 实例

-

静态虚拟化需要手动对 VNPU 实例的切分,请参考下述命令:

-
npu-smi set -t create-vnpu -i 13 -c 0 -f vir02
-
-
    -
  • i 指的是 card id
  • -
  • c 指的是 chip id
  • -
  • vir02 指的是切分规格模板
  • -
-

关于 card id 和 chip id,可以通过 npu-smi info 查询,切分规格可通过 -ascend 官方模板进行查询。

-

切分实例过后可通过下述命令查询切分结果:

-
npu-smi info -t info-vnpu -i 13 -c 0
-
-

查询结果如下:

-

vnpu1

-

重启 ascend-device-plugin-daemonset

-

切分实例后手动重启 device-plugin pod,然后使用 kubectl describe 命令查看已注册 node 的资源:

-
kubectl describe node {{nodename}}
-
-

vnpu2

-

如何使用设备

-

在创建应用时,指定资源 key,参考下述 YAML:

-
......
-resources:
-  requests:
-    huawei.com/Ascend310P-2c: 1
-  limits:
-    huawei.com/Ascend310P-2c: 1
-......
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/dynamic-regulation.html b/site/end-user/kpanda/gpu/dynamic-regulation.html deleted file mode 100644 index 3680038..0000000 --- a/site/end-user/kpanda/gpu/dynamic-regulation.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - - - - - -GPU 资源动态调节 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

GPU 资源动态调节

-

提供 GPU 资源动态调整功能,允许您在无需重新加载、重置或重启整个运行环境的情况下,对已经分配的 vGPU 资源进行实时、动态的调整。 -这一功能旨在最大程度地减少对业务运行的影响,确保您的业务能够持续稳定地运行,同时根据实际需求灵活调整 GPU 资源。

-

使用场景

-
    -
  • 弹性资源分配 :当业务需求或工作负载发生变化时,可以快速调整 GPU 资源以满足新的性能要求。
  • -
  • 即时响应 :在面对突发的高负载或业务需求时,可以迅速增加 GPU 资源而无需中断业务运行,以确保服务的稳定性和性能。
  • -
-

操作步骤

-

以下是一个具体的操作示例,展示如何在不重启 vGPU Pod 的情况下动态调整 vGPU 的算力和显存资源:

-

创建一个 vGPU Pod

-

首先,我们使用以下 YAML 创建一个 vGPU Pod,其算力初始不限制,显存限制为 200Mb。

-
kind: Deployment
-apiVersion: apps/v1
-metadata:
-  name: gpu-burn-test
-  namespace: default
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: gpu-burn-test
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: gpu-burn-test
-    spec:
-      containers:
-        - name: container-1
-          image: docker.io/chrstnhntschl/gpu_burn:latest
-          command:
-            - sleep
-            - '100000'
-          resources:
-            limits:
-              cpu: 1m
-              memory: 1Gi
-              nvidia.com/gpucores: '0'
-              nvidia.com/gpumem: '200'
-              nvidia.com/vgpu: '1'
-
-

调整前查看 Pod 中的资源 GPU 分配资源:

-

gpu-dynamic-regulation-before.png

-

动态调整算力

-

如果需要修改算力为 10%,可以按照以下步骤操作:

-
    -
  1. -

    进入容器:

    -
    kubectl exec -it <pod-name> -- /bin/bash
    -
    -
  2. -
  3. -

    执行:

    -
    export CUDA_DEVICE_SM_LIMIT=10
    -
    -
  4. -
  5. -

    在当前终端直接运行:

    -
    ./gpu_burn 60
    -
    -

    程序即可生效。注意,不能退出当前 Bash 终端。

    -
  6. -
-

动态调整显存

-

如果需要修改显存为 300 MB,可以按照以下步骤操作:

-
    -
  1. -

    进入容器:

    -
    kubectl exec -it <pod-name> -- /bin/bash
    -
    -
  2. -
  3. -

    执行以下命令来设置显存限制:

    -
    export CUDA_DEVICE_MEMORY_LIMIT_0=300m
    -export CUDA_DEVICE_MEMORY_SHARED_CACHE=/usr/local/vgpu/d.cache
    -
    -
    -

    Note

    -

    每次修改显存大小时,d.cache 这个文件名字都需要修改,比如改为 a.cache1.cache 等,以避免缓存冲突。

    -
    -
  4. -
  5. -

    在当前终端直接运行:

    -
    ./gpu_burn 60
    -
    -

    程序即可生效。同样地,不能退出当前 Bash 终端。

    -
  6. -
-

调整后查看 Pod 中的资源 GPU 分配资源:

-

gpu-dynamic-regulation-after.png

-

通过上述步骤,您可以在不重启 vGPU Pod 的情况下动态地调整其算力和显存资源,从而更灵活地满足业务需求并优化资源利用。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/gpu_matrix.html b/site/end-user/kpanda/gpu/gpu_matrix.html deleted file mode 100644 index ef9a70e..0000000 --- a/site/end-user/kpanda/gpu/gpu_matrix.html +++ /dev/null @@ -1,667 +0,0 @@ - - - - - - - - - - - - -GPU 支持矩阵 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

GPU 支持矩阵

-

本页说明算丰 AI 算力平台支持的 GPU 及操作系统所对应的矩阵。

-

NVIDIA GPU

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GPU 厂商及类型支持 GPU 型号适配的操作系统(在线)推荐内核推荐的操作系统及内核安装文档
NVIDIA GPU(整卡/vGPU)NVIDIA Fermi (2.1) 架构CentOS 7Kernel 3.10.0-123 ~ 3.10.0-1160内核参考文档建议使用操作系统对应 Kernel 版本操作系统:CentOS 7.9;内核版本: 3.10.0-1160GPU Operator 离线安装
NVIDIA GeForce 400 系列CentOS 8Kernel 4.18.0-80 ~ 4.18.0-348
NVIDIA Quadro 4000 系列Ubuntu 20.04Kernel 5.4
NVIDIA Tesla 20 系列Ubuntu 22.04Kernel 5.19
NVIDIA Ampere 架构系列(A100;A800;H100)RHEL 7Kernel 3.10.0-123 ~ 3.10.0-1160
RHEL 8Kernel 4.18.0-80 ~ 4.18.0-348
NVIDIA MIGNVIDIA Ampere 架构系列(A100、A800、H100)CentOS 7Kernel 3.10.0-123 ~ 3.10.0-1160操作系统:CentOS 7.9;内核版本:3.10.0-1160GPU Operator 离线安装
CentOS 8Kernel 4.18.0-80 ~ 4.18.0-348
Ubuntu 20.04Kernel 5.4
Ubuntu 22.04Kernel 5.19
RHEL 7Kernel 3.10.0-123 ~ 3.10.0-1160
RHEL 8Kernel 4.18.0-80 ~ 4.18.0-348
-

昇腾(Ascend)NPU

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GPU 厂商及类型支持 NPU 型号适配的操作系统(在线)推荐内核推荐的操作系统及内核安装文档
昇腾(Ascend 310)Ascend 310Ubuntu 20.04详情参考:内核版本要求操作系统:CentOS 7.9;内核版本:3.10.0-1160300 和 310P 驱动文档
Ascend 310P;CentOS 7.6
CentOS 8.2
KylinV10SP1 操作系统
openEuler 操作系统
昇腾(Ascend 910)Ascend 910BUbuntu 20.04详情参考内核版本要求操作系统:CentOS 7.9;内核版本:3.10.0-1160910 驱动文档
CentOS 7.6
CentOS 8.2
KylinV10SP1 操作系统
openEuler 操作系统
-

天数智芯(Iluvatar)GPU

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GPU 厂商及类型支持的 GPU 型号适配的操作系统(在线)推荐内核推荐的操作系统及内核安装文档
天数智芯(Iluvatar vGPU)BI100CentOS 7Kernel 3.10.0-957.el7.x86_64 ~ 3.10.0-1160.42.2.el7.x86_64操作系统:CentOS 7.9;内核版本: 3.10.0-1160补充中
MR100;CentOS 8Kernel 4.18.0-80.el8.x86_64 ~ 4.18.0-305.19.1.el8_4.x86_64
Ubuntu 20.04Kernel 4.15.0-20-generic ~ 4.15.0-160-generic Kernel 5.4.0-26-generic ~ 5.4.0-89-generic Kernel 5.8.0-23-generic ~ 5.8.0-63-generic
Ubuntu 21.04Kernel 4.15.0-20-generic ~ 4.15.0-160-generic Kernel 5.4.0-26-generic ~ 5.4.0-89-generic Kernel 5.8.0-23-generic ~ 5.8.0-63-generic
openEuler 22.03 LTSKernel 版本大于等于 5.1 且小于等于 5.10
-

沐曦(Metax)GPU

- - - - - - - - - - - - - - - - - - - - - -
GPU 厂商及类型支持的 GPU 型号适配的操作系统(在线)推荐内核推荐的操作系统及内核安装文档
沐曦Metax(整卡/vGPU)曦云 C500沐曦 GPU 安装使用
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/gpu_scheduler_config.html b/site/end-user/kpanda/gpu/gpu_scheduler_config.html deleted file mode 100644 index 7a8eff2..0000000 --- a/site/end-user/kpanda/gpu/gpu_scheduler_config.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - -GPU 调度配置(Binpack 和 Spread ) - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

GPU 调度配置(Binpack 和 Spread )

-

本文介绍使用 NVIDIA vGPU 时,如何通过 Binpack 和 Spread 的 GPU 调度配置减少 GPU 资源碎片、防止单点故障等,实现 vGPU 的高级调度。 -算丰 AI 算力平台提供了集群和工作负载两种维度的 Binpack 和 Spread 调度策略,分别满足不同场景下的使用需求。

-

前置条件

-
    -
  • 集群节点上已正确安装 GPU 设备。
  • -
  • 集群中已正确安装 gpu-operator 组件 和 - Nvidia-vgpu 组件
  • -
  • 集群节点列表中,GPU 模式下存在 NVIDIA-vGPU 类型。
  • -
-

使用场景

-
    -
  • -

    基于 GPU 卡维度调度策略

    -
      -
    • Binpack:优先选择节点的同一张 GPU 卡,适用于提高 GPU 利用率,减少资源碎片。
    • -
    • Spread:多个 Pod 会分散在节点的不同 GPU 卡上,适用于高可用场景,避免单卡故障。
    • -
    -
  • -
  • -

    基于节点维度的调度策略

    -
      -
    • Binpack: 多个 Pod 会优先选择同一个节点,适用于提高 GPU 利用率,减少资源碎片。
    • -
    • Spread:多个 Pod 会分散在不同节点上,适用于高可用场景,避免单节点故障。
    • -
    -
  • -
-

集群维度使用 Binpack 和 Spread 调度配置

-
-

Note

-

默认情况下,工作负载会遵循集群级别的 Binpack 和 Spread 调度配置。 -若工作负载单独设置了与集群不一致的 Binpack 和 Spread 调度策略,则该工作负载优先遵循其本身的调度策略。

-
-
    -
  1. -

    集群列表 页选择需要调整 Binpack 和 Spread 调度策略的集群,点击右侧的 操作图标并在下拉列表中点击 GPU 调度配置

    -

    集群列表

    -
  2. -
  3. -

    根据业务场景调整 GPU 调度配置,并点击 确定 后保存。

    -

    binpack配置

    -
  4. -
-

工作负载维度使用 Binpack 和 Spread 调度配置

-
-

Note

-

当工作负载维度的 Binpack 和 Spread 调度策略与集群级别的配置冲突时,优先遵循工作负载维度的配置。

-
-

参考以下步骤,使用镜像创建一个无状态负载,并在工作负载中配置 Binpack 和 Spread 调度策略 。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群list

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 无状态负载 ,然后点击页面右上角的 镜像创建 按钮。

    -

    创建工作负载

    -
  4. -
  5. -

    依次填写基本信息容器配置,并在 容器配置 中启用 GPU 配置,选择 GPU 类型为 NVIDIA vGPU, - 点击 高级设置 ,启用 Binpack / Spread 调度策略,根据业务场景调整 GPU 调度配置。配置完成后点击 下一步 , - 进入 服务配置高级配置后,在页面右下角点击 确定 完成创建。

    -

    配置binpack

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/images/ascend-mindxdl.png b/site/end-user/kpanda/gpu/images/ascend-mindxdl.png deleted file mode 100644 index 3ed8510..0000000 Binary files a/site/end-user/kpanda/gpu/images/ascend-mindxdl.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/clusterlist1.png b/site/end-user/kpanda/gpu/images/clusterlist1.png deleted file mode 100644 index 6504daa..0000000 Binary files a/site/end-user/kpanda/gpu/images/clusterlist1.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/config.png b/site/end-user/kpanda/gpu/images/config.png deleted file mode 100644 index 441d162..0000000 Binary files a/site/end-user/kpanda/gpu/images/config.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/create-gpu-alarm.png b/site/end-user/kpanda/gpu/images/create-gpu-alarm.png deleted file mode 100644 index 4836dc1..0000000 Binary files a/site/end-user/kpanda/gpu/images/create-gpu-alarm.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/detail-ascend.png b/site/end-user/kpanda/gpu/images/detail-ascend.png deleted file mode 100644 index df1e75a..0000000 Binary files a/site/end-user/kpanda/gpu/images/detail-ascend.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/driveimage.png b/site/end-user/kpanda/gpu/images/driveimage.png deleted file mode 100644 index d858b44..0000000 Binary files a/site/end-user/kpanda/gpu/images/driveimage.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/driver.jpg b/site/end-user/kpanda/gpu/images/driver.jpg deleted file mode 100644 index 5b886b9..0000000 Binary files a/site/end-user/kpanda/gpu/images/driver.jpg and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-alarm-details.png b/site/end-user/kpanda/gpu/images/gpu-alarm-details.png deleted file mode 100644 index 2841326..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-alarm-details.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-alarm-details2.png b/site/end-user/kpanda/gpu/images/gpu-alarm-details2.png deleted file mode 100644 index 57ccd25..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-alarm-details2.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-alarm-message.png b/site/end-user/kpanda/gpu/images/gpu-alarm-message.png deleted file mode 100644 index efb1a7c..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-alarm-message.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-alarm-message2.png b/site/end-user/kpanda/gpu/images/gpu-alarm-message2.png deleted file mode 100644 index f349466..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-alarm-message2.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-createdeploy.png b/site/end-user/kpanda/gpu/images/gpu-createdeploy.png deleted file mode 100644 index c9d2728..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-createdeploy.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-deploybipack.png b/site/end-user/kpanda/gpu/images/gpu-deploybipack.png deleted file mode 100644 index 015d8f0..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-deploybipack.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-dynamic-regulation-after.png b/site/end-user/kpanda/gpu/images/gpu-dynamic-regulation-after.png deleted file mode 100644 index 450a773..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-dynamic-regulation-after.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-dynamic-regulation-before.png b/site/end-user/kpanda/gpu/images/gpu-dynamic-regulation-before.png deleted file mode 100644 index 6f9db7b..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-dynamic-regulation-before.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-operator-mig.png b/site/end-user/kpanda/gpu/images/gpu-operator-mig.png deleted file mode 100644 index 14493ed..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-operator-mig.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-scheduler-clusterlist.png b/site/end-user/kpanda/gpu/images/gpu-scheduler-clusterlist.png deleted file mode 100644 index 3fb8947..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-scheduler-clusterlist.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/gpu-scheduler-clusterrule.png b/site/end-user/kpanda/gpu/images/gpu-scheduler-clusterrule.png deleted file mode 100644 index 4506326..0000000 Binary files a/site/end-user/kpanda/gpu/images/gpu-scheduler-clusterrule.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/image-1.png b/site/end-user/kpanda/gpu/images/image-1.png deleted file mode 100644 index d0ad415..0000000 Binary files a/site/end-user/kpanda/gpu/images/image-1.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/image-2.png b/site/end-user/kpanda/gpu/images/image-2.png deleted file mode 100644 index a0ceafc..0000000 Binary files a/site/end-user/kpanda/gpu/images/image-2.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/image.png b/site/end-user/kpanda/gpu/images/image.png deleted file mode 100644 index 4613049..0000000 Binary files a/site/end-user/kpanda/gpu/images/image.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/kubean.png b/site/end-user/kpanda/gpu/images/kubean.png deleted file mode 100644 index 6cc2768..0000000 Binary files a/site/end-user/kpanda/gpu/images/kubean.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/label-ascend-mindxdl.png b/site/end-user/kpanda/gpu/images/label-ascend-mindxdl.png deleted file mode 100644 index 2327825..0000000 Binary files a/site/end-user/kpanda/gpu/images/label-ascend-mindxdl.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/list-ascend-mindxdl.png b/site/end-user/kpanda/gpu/images/list-ascend-mindxdl.png deleted file mode 100644 index e52b242..0000000 Binary files a/site/end-user/kpanda/gpu/images/list-ascend-mindxdl.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/metax-node.png b/site/end-user/kpanda/gpu/images/metax-node.png deleted file mode 100644 index 86d66ed..0000000 Binary files a/site/end-user/kpanda/gpu/images/metax-node.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/metax-node1.png b/site/end-user/kpanda/gpu/images/metax-node1.png deleted file mode 100644 index ba4fc16..0000000 Binary files a/site/end-user/kpanda/gpu/images/metax-node1.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/metax-use.png b/site/end-user/kpanda/gpu/images/metax-use.png deleted file mode 100644 index 2227e78..0000000 Binary files a/site/end-user/kpanda/gpu/images/metax-use.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/metax-use2.png b/site/end-user/kpanda/gpu/images/metax-use2.png deleted file mode 100644 index 414b50e..0000000 Binary files a/site/end-user/kpanda/gpu/images/metax-use2.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/mig-select.png b/site/end-user/kpanda/gpu/images/mig-select.png deleted file mode 100644 index 74f2efa..0000000 Binary files a/site/end-user/kpanda/gpu/images/mig-select.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/miggpuoperator.png b/site/end-user/kpanda/gpu/images/miggpuoperator.png deleted file mode 100644 index 197737c..0000000 Binary files a/site/end-user/kpanda/gpu/images/miggpuoperator.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/migoperator.png b/site/end-user/kpanda/gpu/images/migoperator.png deleted file mode 100644 index 659b262..0000000 Binary files a/site/end-user/kpanda/gpu/images/migoperator.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/migpolicy.png b/site/end-user/kpanda/gpu/images/migpolicy.png deleted file mode 100644 index 6c0d9e5..0000000 Binary files a/site/end-user/kpanda/gpu/images/migpolicy.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/mixed.png b/site/end-user/kpanda/gpu/images/mixed.png deleted file mode 100644 index f59cd4e..0000000 Binary files a/site/end-user/kpanda/gpu/images/mixed.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/mlu1.PNG b/site/end-user/kpanda/gpu/images/mlu1.PNG deleted file mode 100644 index 690b3e9..0000000 Binary files a/site/end-user/kpanda/gpu/images/mlu1.PNG and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/mlu2.png b/site/end-user/kpanda/gpu/images/mlu2.png deleted file mode 100644 index b446e68..0000000 Binary files a/site/end-user/kpanda/gpu/images/mlu2.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/mlu3.png b/site/end-user/kpanda/gpu/images/mlu3.png deleted file mode 100644 index a52096b..0000000 Binary files a/site/end-user/kpanda/gpu/images/mlu3.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/node-gpu.png b/site/end-user/kpanda/gpu/images/node-gpu.png deleted file mode 100644 index 9c6bf7d..0000000 Binary files a/site/end-user/kpanda/gpu/images/node-gpu.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/node-mig.png b/site/end-user/kpanda/gpu/images/node-mig.png deleted file mode 100644 index 7184ab6..0000000 Binary files a/site/end-user/kpanda/gpu/images/node-mig.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/nvidia-gpu-driver-tag.jpg b/site/end-user/kpanda/gpu/images/nvidia-gpu-driver-tag.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/end-user/kpanda/gpu/images/operator-mig.png b/site/end-user/kpanda/gpu/images/operator-mig.png deleted file mode 100644 index 6a5ce29..0000000 Binary files a/site/end-user/kpanda/gpu/images/operator-mig.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/pod-mig.png b/site/end-user/kpanda/gpu/images/pod-mig.png deleted file mode 100644 index 5efbbe0..0000000 Binary files a/site/end-user/kpanda/gpu/images/pod-mig.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/redhat0.12.2.png b/site/end-user/kpanda/gpu/images/redhat0.12.2.png deleted file mode 100644 index 01bbb7c..0000000 Binary files a/site/end-user/kpanda/gpu/images/redhat0.12.2.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/rhel7.9.png b/site/end-user/kpanda/gpu/images/rhel7.9.png deleted file mode 100644 index f740e56..0000000 Binary files a/site/end-user/kpanda/gpu/images/rhel7.9.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/use-ascend-mindxdl.png b/site/end-user/kpanda/gpu/images/use-ascend-mindxdl.png deleted file mode 100644 index da3c80a..0000000 Binary files a/site/end-user/kpanda/gpu/images/use-ascend-mindxdl.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/usemig.png b/site/end-user/kpanda/gpu/images/usemig.png deleted file mode 100644 index 47805ca..0000000 Binary files a/site/end-user/kpanda/gpu/images/usemig.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/usemig1.png b/site/end-user/kpanda/gpu/images/usemig1.png deleted file mode 100644 index 1e501c1..0000000 Binary files a/site/end-user/kpanda/gpu/images/usemig1.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/vgpu-addon.png b/site/end-user/kpanda/gpu/images/vgpu-addon.png deleted file mode 100644 index 3241a80..0000000 Binary files a/site/end-user/kpanda/gpu/images/vgpu-addon.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/vgpu-sc.png b/site/end-user/kpanda/gpu/images/vgpu-sc.png deleted file mode 100644 index a9ef974..0000000 Binary files a/site/end-user/kpanda/gpu/images/vgpu-sc.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/vnpu1.png b/site/end-user/kpanda/gpu/images/vnpu1.png deleted file mode 100644 index d395dda..0000000 Binary files a/site/end-user/kpanda/gpu/images/vnpu1.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/vnpu2.png b/site/end-user/kpanda/gpu/images/vnpu2.png deleted file mode 100644 index 5fd547c..0000000 Binary files a/site/end-user/kpanda/gpu/images/vnpu2.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/volcano-binpack1.png b/site/end-user/kpanda/gpu/images/volcano-binpack1.png deleted file mode 100644 index 461c38d..0000000 Binary files a/site/end-user/kpanda/gpu/images/volcano-binpack1.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/images/volcano-binpacknode.png b/site/end-user/kpanda/gpu/images/volcano-binpacknode.png deleted file mode 100644 index 17bbcff..0000000 Binary files a/site/end-user/kpanda/gpu/images/volcano-binpacknode.png and /dev/null differ diff --git a/site/end-user/kpanda/gpu/index.html b/site/end-user/kpanda/gpu/index.html deleted file mode 100644 index 919eeb4..0000000 --- a/site/end-user/kpanda/gpu/index.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - - - - - - - -GPU 管理概述 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

GPU 管理概述

-

本文介绍 算丰 AI 算力容器管理平台对 GPU为代表的异构资源统一运维管理能力。

-

背景

-

随着 AI 应用、大模型、人工智能、自动驾驶等新兴技术的快速发展,企业面临着越来越多的计算密集型任务和数据处理需求。 -以 CPU 为代表的传统计算架构已无法满足企业日益增长的计算需求。此时,以 GPU 为代表的异构计算因在处理大规模数据、进行复杂计算和实时图形渲染方面具有独特的优势被广泛应用。

-

与此同时,由于缺乏异构资源调度管理等方面的经验和专业的解决方案,导致了 GPU 设备的资源利用率极低,给企业带来了高昂的 AI 生产成本。 -如何降本增效,提高 GPU 等异构资源的利用效率,成为了当前众多企业亟需跨越的一道难题。

-

GPU 能力介绍

-

算丰 AI 算力容器管理平台支持对 GPU、NPU 等异构资源进行统一调度和运维管理,充分释放 GPU 资源算力,加速企业 AI 等新兴应用发展。GPU 管理能力如下:

-
    -
  • 支持统一纳管 NVIDIA、华为昇腾、天数等国内外厂商的异构计算资源。
  • -
  • 支持同一集群多卡异构调度,并支持集群 GPU 卡自动识别。
  • -
  • 支持 NVIDIA GPU、vGPU、MIG 等 GPU 原生管理方案,并提供云原生能力。
  • -
  • 支持单块物理卡切分给不同的租户使用,并支持对租户和容器使用 GPU 资源按照算力、显存进行 GPU 资源配额。
  • -
  • 支持集群、节点、应用等多维度 GPU 资源监控,帮助运维人员管理 GPU 资源。
  • -
  • 兼容 TensorFlow、pytorch 等多种训练框架。
  • -
-

GPU Operator 介绍

-

同普通计算机硬件一样,NVIDIA GPU 卡作为物理硬件,必须安装 NVIDIA GPU 驱动后才能使用。 -为了降低用户在 kuberneets 上使用 GPU 的成本,NVIDIA 官方提供了 NVIDIA GPU Operator 组件来管理使用 NVIDIA GPU 所依赖的各种组件。 -这些组件包括 NVIDIA 驱动程序(用于启用 CUDA)、NVIDIA 容器运行时、GPU 节点标记、基于 DCGM 的监控等。 -理论上来说用户只需要将 GPU 卡插在已经被 kubernetes 所纳管的计算设备上,然后通过 GPU Operator 就能使用 NVIDIA GPU 的所有能力了。 -了解更多 NVIDIA GPU Operator 相关信息,请参考 NVIDIA 官方文档。 -如何部署请参考 GPU Operator 离线安装

-

NVIDIA GPU Operator 架构图:

-

NVIDIA GPU Operator 架构图

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/metax/usemetax.html b/site/end-user/kpanda/gpu/metax/usemetax.html deleted file mode 100644 index cb92ce9..0000000 --- a/site/end-user/kpanda/gpu/metax/usemetax.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - - - - - -沐曦 GPU 组件安装与使用 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

沐曦 GPU 组件安装与使用

-

本章节提供沐曦 gpu-extensions、gpu-operator 等组件的安装指导和沐曦 GPU 整卡和 vGPU 两种模式的使用方法。

-

前提条件

-
    -
  1. 已在沐曦软件中心下载并安装所需的 tar 包, - 本文以 metax-gpu-k8s-package.0.7.10.tar.gz 为例。
  2. -
  3. 准备 Kubernetes 基础环境
  4. -
-

组件介绍

-

Metax 提供了两个 helm-chart 包,一个是 metax-extensions,一个是 gpu-operator,根据使用场景可选择安装不同的组件。

-
    -
  1. Metax-extensions:包含 gpu-device 和 gpu-label 两个组件。在使用 Metax-extensions 方案时,用户的应用容器镜像需要基于 MXMACA® 基础镜像构建。且 Metax-extensions 仅适用于 GPU 整卡使用场景。
  2. -
  3. gpu-operator:包含 gpu-device、gpu-label、driver-manager、container-runtime、operator-controller 这些组件。 - 使用 gpu-operator 方案时,用户可选择制作不包含 MXMACA® SDK 的应用容器镜像。gpu-operator 适用于 GPU 整卡和 vGPU 场景。
  4. -
-

操作步骤

-
    -
  1. -

    /home/metax/metax-docs/k8s/metax-gpu-k8s-package.0.7.10.tar.gz 文件中解压出

    -
      -
    • deploy-gpu-extensions.yaml # 部署yaml
    • -
    • metax-gpu-extensions-0.7.10.tgz、metax-operator-0.7.10.tgz # helm chart文件
    • -
    • metax-k8s-images.0.7.10.run # 离线镜像
    • -
    -
  2. -
  3. -

    查看系统是否安装驱动

    -
    $ lsmod | grep metax 
    -metax 1605632 0 
    -ttm 86016 3 drm_vram_helper,metax,drm_ttm_helper 
    -drm 618496 7 drm_kms_helper,drm_vram_helper,ast,metax,drm_ttm_helper,ttm
    -
    -
      -
    • 如没有内容显示,就表示没有安装过软件包。如有内容显示,则表示安装过软件包。
    • -
    • 使用 metax-opeartor 时,不推荐在工作节点预安装 MXMACA 内核态驱动,若已安装也无需卸载。
    • -
    -
  4. -
  5. -

    安装驱动

    -
  6. -
-

gpu-extensions

-
    -
  1. -

    推送镜像

    -
    tar -xf metax-gpu-k8s-package.0.7.10.tar.gz
    -./metax-k8s-images.0.7.10.run push {registry}/metax
    -
    -
  2. -
  3. -

    推送 Helm Chart

    -
    helm plugin install https://github.com/chartmuseum/helm-push
    -helm repo add  --username rootuser --password rootpass123  metax http://172.16.16.5:8081
    -helm cm-push metax-operator-0.7.10.tgz metax
    -helm cm-push metax-gpu-extensions-0.7.10.tgz metax
    -
    -
  4. -
  5. -

    在算丰 AI 算力平台上安装 metax-gpu-extensions

    -

    部署成功之后,可以在节点上查看到资源。

    -

    查看资源

    -
  6. -
  7. -

    修改成功之后就可以在节点上看到带有 Metax GPU 的标签

    -

    metax节点标签

    -
  8. -
-

gpu-operator

-

安装 gpu-opeartor 时的已知问题:

-
    -
  1. -

    metax-operatorgpu-labelgpu-devicecontainer-runtime 这几个组件镜像要带有 amd64 后缀。

    -
  2. -
  3. -

    metax-maca 组件的镜像不在 metax-k8s-images.0.7.13.run 包里面,需要单独下载 maca-mxc500-2.23.0.23-ubuntu20.04-x86_64.tar.xz 这类镜像,load 之后重新修改 metax-maca 组件的镜像。

    -
  4. -
  5. -

    metax-driver 组件的镜像需要从 https://pub-docstore.metax-tech.com:7001 这个网站下载 k8s-driver-image.2.23.0.25.run 文件,然后执行 k8s-driver-image.2.23.0.25.run push {registry}/metax 命令把镜像推送到镜像仓库。推送之后修改 metax-driver 组件的镜像地址。

    -
  6. -
-

使用 GPU

-

安装后可在工作负载中使用沐曦 GPU。注意启用 GPU 后,需选择GPU类型为 Metax GPU

-

使用 GPU

-

进入容器,执行 mx-smi 可查看 GPU 的使用情况.

-

使用 GPU

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/mlu/use-mlu.html b/site/end-user/kpanda/gpu/mlu/use-mlu.html deleted file mode 100644 index fd99c21..0000000 --- a/site/end-user/kpanda/gpu/mlu/use-mlu.html +++ /dev/null @@ -1,444 +0,0 @@ - - - - - - - - - - - - -使用寒武纪 GPU - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

使用寒武纪 GPU

-

本文介绍如何在算丰 AI 算力平台中使用寒武纪 GPU。

-

前置条件

- -

在安装 DevicePlugin 时请关闭 --enable-device-type 参数,否则算丰 AI 算力平台将无法正确识别寒武纪 GPU。

-

寒武纪 GPU 模式介绍

-

寒武纪 GPU 有以下几种模式:

-
    -
  • 整卡模式:将寒武纪GPU以整卡的方式注册到集群当中进行使用。
  • -
  • Share 模式:可以将一张寒武纪GPU共享给多个 Pod 进行使用,可以通过 virtualization-num 参数进行设置可共享容器的数量。
  • -
  • Dynamic smlu 模式:进一步对资源进行了细化,可以控制分配给容器的显存、算力的大小。
  • -
  • Mim 模式:可以将寒武纪 GPU 按照固定的规格切分成多张 GPU 进行使用。
  • -
-

算丰 AI 算力平台使用寒武纪

-

这里以 Dynamic smlu 模式为例:

-
    -
  1. -

    在正确安装 DevicePlugin 等组件后,点击对应 集群 -> 集群运维-> 集群设置 -> Addon 插件 ,查看是否已自动启用并自动检测对应 GPU 类型。

    -

    mlu类型

    -
  2. -
  3. -

    点击节点管理页面,查看节点是否已经正确识别到对应的GPU类型。

    -

    节点列表

    -
  4. -
  5. -

    部署工作负载。点击对应 集群 -> 工作负载 ,通过镜像方式部署工作负载,选择类型(MLU VGPU)之后,需要配置 App 使用的 GPU 资源:

    -
      -
    • GPU 算力(cambricon.com/mlu.smlu.vcore):表示当前 Pod 需要使用核心的百分比数量。
    • -
    • GPU 显存(cambricon.com/mlu.smlu.vmemory):表示当前Pod需要使用显存的大小,单位是MB。
    • -
    -

    使用mlu

    -
  6. -
-

使用 YAML 配置

-

参考 YAML 文件如下:

-
apiVersion: v1  
-kind: Pod  
-metadata:  
-  name: pod1  
-spec:  
-  restartPolicy: OnFailure  
-  containers:  
-    - image: ubuntu:16.04  
-      name: pod1-ctr  
-      command: ["sleep"]  
-      args: ["100000"]  
-      resources:  
-        limits:  
-          cambricon.com/mlu: "1" # use this when device type is not enabled, else delete this line.  
-          #cambricon.com/mlu: "1" #uncomment to use when device type is enabled  
-          #cambricon.com/mlu.share: "1" #uncomment to use device with env-share mode  
-          #cambricon.com/mlu.mim-2m.8gb: "1" #uncomment to use device with mim mode  
-          #cambricon.com/mlu.smlu.vcore: "100" #uncomment to use device with mim mode  
-          #cambricon.com/mlu.smlu.vmemory: "1024" #uncomment to use device with mim mode
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/full_gpu_userguide.html b/site/end-user/kpanda/gpu/nvidia/full_gpu_userguide.html deleted file mode 100644 index d815822..0000000 --- a/site/end-user/kpanda/gpu/nvidia/full_gpu_userguide.html +++ /dev/null @@ -1,447 +0,0 @@ - - - - - - - - - - - - -应用使用 GPU 整卡 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

应用使用 GPU 整卡

-

本节介绍如何在算丰 AI 算力平台将整个 NVIDIA GPU 卡分配给单个应用。

-

前提条件

-
    -
  • 已经部署 算丰 AI 算力平台 容器管理平台,且平台运行正常。
  • -
  • 容器管理模块已接入 Kubernetes 集群或者已创建 Kubernetes 集群,且能够访问集群的 UI 界面。
  • -
  • 当前集群已离线安装 GPU Operator 并已启用 NVIDIA DevicePlugin ,可参考 GPU Operator 离线安装
  • -
  • 当前集群内 GPU 卡未进行任何虚拟化操作或被其它应用占用。
  • -
-

操作步骤

-

使用 UI 界面配置

-
    -
  1. -

    确认集群是否已检测 GPU 卡。点击对应 集群 -> 集群设置 -> Addon 插件 ,查看是否已自动启用并自动检测对应 GPU 类型。 - 目前集群会自动启用 GPU ,并且设置 GPU 类型为 Nvidia GPU

    -

    集群设置

    -
  2. -
  3. -

    部署工作负载,点击对应 集群 -> 工作负载 ,通过镜像方式部署工作负载,选择类型(Nvidia GPU)之后,需要配置应用使用的物理卡数量:

    -

    物理卡数量(nvidia.com/gpu) :表示当前 Pod 需要挂载几张物理卡,输入值必须为整数且 小于等于 宿主机上的卡数量。

    -

    集群设置

    -
    -

    如果上述值配置的有问题则会出现调度失败,资源分配不了的情况。

    -
    -
  4. -
-

使用 YAML 配置

-

创建工作负载申请 GPU 资源,在资源申请和限制配置中增加 nvidia.com/gpu: 1 参数配置应用使用物理卡的数量。

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: full-gpu-demo
-  namespace: default
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: full-gpu-demo
-  template:
-    metadata:
-      labels:
-        app: full-gpu-demo
-    spec:
-      containers:
-      - image: chrstnhntschl/gpu_burn
-        name: container-0
-        resources:
-          requests:
-            cpu: 250m
-            memory: 512Mi
-            nvidia.com/gpu: 1   # 申请 GPU 的数量
-          limits:
-            cpu: 250m
-            memory: 512Mi
-            nvidia.com/gpu: 1   # GPU 数量的使用上限
-      imagePullSecrets:
-      - name: default-secret
-
-
-

Note

-

使用 nvidia.com/gpu 参数指定 GPU 数量时,requests 和 limits 值需要保持一致。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html b/site/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html deleted file mode 100644 index 34bca61..0000000 --- a/site/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html +++ /dev/null @@ -1,516 +0,0 @@ - - - - - - - - - - - - -GPU 告警规则 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

GPU 告警规则

-

本文介绍如何在算丰 AI 算力平台设置 GPU 相关的告警规则。

-

前置条件

-
    -
  • 集群节点上已正确安装 GPU 设备
  • -
  • 集群中已正确安装 gpu-operator 组件
  • -
  • 如果用到了 vGPU 还需要在集群中安装 Nvidia-vgpu 组件,并且开启 servicemonitor
  • -
  • 集群正确安装了 insight-agent 组件
  • -
-

告警常用 GPU 指标

-

本节介绍 GPU 告警常用的指标,分为两个部分:

-
    -
  • GPU 卡纬度的指标,主要反应单个 GPU 设备的运行状态。
  • -
  • 应用纬度的指标,主要反应 Pod 在 GPU 上的运行状态。
  • -
-

GPU 卡指标

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
指标名称指标单位说明
DCGM_FI_DEV_GPU_UTIL%GPU 利用率
DCGM_FI_DEV_MEM_COPY_UTIL%显存利用率
DCGM_FI_DEV_ENC_UTIL%编码器利用率
DCGM_FI_DEV_DEC_UTIL%解码器利用率
DCGM_FI_DEV_FB_FREEMB表示显存剩余量
DCGM_FI_DEV_FB_USEDMB表示显存使用量
DCGM_FI_DEV_GPU_TEMP摄氏度表示当前 GPU 的温度度数
DCGM_FI_DEV_POWER_USAGEW设备电源使用情况
DCGM_FI_DEV_XID_ERRORS-表示一段时间内,最后发生的 XID 错误号。XID 提供 GPU 硬件、NVIDIA 软件或应用中的错误类型、错误位置、错误代码等信息,更多 XID 信息
-

应用维度的指标

- - - - - - - - - - - - - - - - - - - - - - - - - -
指标名称指标单位说明
kpanda_gpu_pod_utilization%表示 Pod 对 GPU 的使用率
kpanda_gpu_mem_pod_usageMB表示 Pod 对 GPU 显存的使用量
kpanda_gpu_mem_pod_utilization%表示 Pod 对 GPU 显存的使用率
-

设置告警规则

-

这里会介绍如何设置 GPU 告警规则,使用 GPU 卡利用率指标作为案例,请用户根据实际的业务场景选择指标以及编写 promql。

-

目标:当GPU卡利用率在五秒钟内一直保持 80% 的利用率时发出告警

-
    -
  1. -

    在可观测页面,点击 告警 -> 告警策略 -> 创建告警策略

    -

    创建告警规则

    -
  2. -
  3. -

    填写基本信息

    -

    填写告警规则

    -
  4. -
  5. -

    添加规则

    -

    填写告警规则2

    -
  6. -
  7. -

    选择通知方式

    -

    通知方式

    -
  8. -
  9. -

    设置完成后,当一个 GPU 在 5s 内一直保持 80% 的利用率,会收到如下的告警信息。

    -

    告警信息

    -
  10. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html b/site/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html deleted file mode 100644 index 4071d1b..0000000 --- a/site/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html +++ /dev/null @@ -1,748 +0,0 @@ - - - - - - - - - - - - -GPU 监控指标 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

GPU 监控指标

-

本页列出一些常用的 GPU 监控指标。

-

集群维度

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
指标名称描述
GPU 卡数集群下所有的 GPU 卡数量
GPU 平均使用率集群下所有 GPU 卡的平均算力使用率
GPU 平均显存使用率集群下所有 GPU 卡的平均显存使用率
GPU 卡功率集群下所有 GPU 卡的功率
GPU 卡温度集群下所有 GPU 卡的温度
GPU 算力使用率细节24 小时内,集群下所有 GPU 卡的使用率细节(包含 max、avg、current)
GPU 显存使用量细节24 小时内,集群下所有 GPU 卡的显存使用量细节(包含 min、max、avg、current)
GPU 显存带宽使用率表示内存带宽利用率。以 Nvidia GPU V100 为例,其最大内存带宽为 900 GB/sec,如果当前的内存带宽为 450 GB/sec,则内存带宽利用率为 50%
-

节点维度

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
指标名称描述
GPU 模式节点上 GPU 卡的使用模式,包含整卡模式、MIG 模式、vGPU 模式
GPU 物理卡数节点上所有的 GPU 卡数量
GPU 虚拟卡数节点上已经被创建出来的 vGPU 设备数量
GPU MIG 实例数节点上已经被创建出来的 MIG 实例数
GPU 显存分配率节点上所有 GPU 卡的显存分配率
GPU 算力平均使用率节点上所有 GPU 卡的算力平均使用率
GPU 显存平均使用率节点上所有 GPU 卡的平均显存使用率
GPU 驱动版本节点上 GPU 卡驱动的版本信息
GPU 算力使用率细节24 小时内,节点上每张 GPU 卡的算力使用率细节(包含 max、avg、current)
GPU 显存使用量24 小时内,节点上每张 GPU 卡的显存使用量细节(包含 min、max、avg、current)
-

根据 XID 状态排查 GPU 相关问题

-

XID 消息是 NVIDIA 驱动程序向操作系统的内核日志或事件日志打印的错误报告。XID 消息用于标识 GPU 错误事件, -提供 GPU 硬件、NVIDIA 软件或应用中的错误类型、错误位置、错误代码等信息。 -如检查项 GPU 节点上的 XID 异常为空,表明无 XID 消息;如有,您可按照下表自助排查并解决问题, -或查看更多 XID 消息

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
XID消息说明
13Graphics Engine Exception.通常是数组越界、指令错误,小概率是硬件问题。
31GPU memory page fault.通常是应用程序的非法地址访问,极小概率是驱动或者硬件问题。
32Invalid or corrupted push buffer stream.事件由 PCIE 总线上管理 NVIDIA 驱动和 GPU 之间通信的 DMA 控制器上报,通常是 PCI 质量问题导致,而非您的程序产生。
38Driver firmware error.通常是驱动固件错误而非硬件问题。
43GPU stopped processing.通常是您应用自身错误,而非硬件问题。
45Preemptive cleanup, due to previous errors -- Most likely to see when running multiple cuda applications and hitting a DBE.通常是您手动退出或者其他故障(硬件、资源限制等)导致的 GPU 应用退出,XID 45 只提供一个结果,具体原因通常需要进一步分析日志。
48Double Bit ECC Error (DBE).当 GPU 发生不可纠正的错误时,会上报此事件,该错误也会同时反馈给您的应用程序。通常需要重置 GPU 或重启节点来清除这个错误。
61Internal micro-controller breakpoint/warning.GPU 内部引擎停止工作,您的业务已经受到影响。
62Internal micro-controller halt.与 XID 61 的触发场景类似。
63ECC page retirement or row remapping recording event.当应用程序遭遇到 GPU 显存硬件错误时,NVIDIA 自纠错机制会将错误的内存区域 retire 或者 remap,retirement 和 remapped 信息需记录到 infoROM 中才能永久生效。Volt 架构:成功记录 ECC page retirement 事件到 infoROM。Ampere 架构:成功记录 row remapping 事件到 infoROM。
64ECC page retirement or row remapper recording failure.与 XID 63 的触发场景类似。但 XID 63 代表 retirement 和 remapped 信息成功记录到了 infoROM,XID 64 代表该记录操作失败。
68NVDEC0 Exception.通常是硬件或驱动问题。
74NVLINK Error.NVLink 硬件错误产生的 XID,表明 GPU 已经出现严重硬件故障,需要下线维修。
79GPU has fallen off the bus.GPU 硬件检测到掉卡,总线上无法检测该 GPU,表明该 GPU 已经出现严重硬件故障,需要下线维修。
92High single-bit ECC error rate.硬件或驱动故障。
94Contained ECC error.当应用程序遭遇到 GPU 不可纠正的显存 ECC 错误时,NVIDIA 错误抑制机制会尝试将错误抑制在发生硬件故障的应用程序,避免该错误影响 GPU 节点上运行的其他应用程序。当抑制机制成功抑制错误时,会产生该事件,仅出现不可纠正 ECC 错误的应用程序受到影响。
95Uncontained ECC error.与 XID 94 的触发场景类似。但 XID 94 代表抑制成功,而 XID 95 代表抑制失败,表明运行在该 GPU 上的所有应用程序都已受到影响。
-

Pod 维度

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
分类指标名称描述
应用概览 GPU 卡 - 算力 & 显存Pod GPU 算力使用率当前 Pod 所使用到的 GPU 卡的算力使用率
Pod GPU 显存使用率当前 Pod 所使用到的 GPU 卡的显存使用率
Pod 显存使用量当前 Pod 所使用到的 GPU 卡的显存使用量
显存分配量当前 Pod 所使用到的 GPU 卡的显存分配量
Pod GPU 显存复制使用率当前 Pod 所使用到的 GPU 卡的显存显存复制比率
GPU 卡 - 引擎概览GPU 图形引擎活动百分比表示在一个监控周期内,Graphics 或 Compute 引擎处于 Active 的时间占总的时间的比例
GPU 内存带宽利用率表示内存带宽利用率(Memory BW Utilization)将数据发送到设备内存或从设备内存接收数据的周期分数。该值表示时间间隔内的平均值,而不是瞬时值。较高的值表示设备内存的利用率较高。
该值为 1(100%)表示在整个时间间隔内的每个周期执行一条 DRAM 指令(实际上,峰值约为 0.8 (80%) 是可实现的最大值)。
假设该值为 0.2(20%),表示 20% 的周期在时间间隔内读取或写入设备内存。
Tensor 核心引擎使用率表示在一个监控周期内,Tensor Core 管道(Pipe)处于 Active 时间占总时间的比例
FP16 引擎使用率表示在一个监控周期内,FP16 管道处于 Active 的时间占总的时间的比例
FP32 引擎使用率表示在一个监控周期内,FP32 管道处于 Active 的时间占总的时间的比例
FP64 引擎使用率表示在一个监控周期内,FP64 管道处于 Active 的时间占总的时间的比例
GPU 解码使用率GPU 卡解码引擎比率
GPU 编码使用率GPU 卡编码引擎比率
GPU 卡 - 温度 & 功耗GPU 卡温度集群下所有 GPU 卡的温度
GPU 卡功率集群下所有 GPU 卡的功率
GPU 卡 - 总耗能GPU 卡总共消耗的能量
GPU 卡 - ClockGPU 卡内存频率内存频率
GPU 卡应用SM 时钟频率应用的 SM 时钟频率
GPU 卡应用内存频率应用内存频率
GPU 卡视频引擎频率视频引擎频率
GPU 卡降频原因降频原因
GPU 卡 - 其他细节图形引擎活动图形或计算引擎的任何部分处于活动状态的时间比例。如果图形/计算上下文已绑定且图形/计算管道繁忙,则图形引擎处于活动状态。该值表示时间间隔内的平均值,而不是瞬时值。
SM活动多处理器上至少一个 Warp 处于活动状态的时间比例,所有多处理器的平均值。请注意,“活动”并不一定意味着 Warp 正在积极计算。例如,等待内存请求的 Warp 被视为活动状态。该值表示时间间隔内的平均值,而不是瞬时值。0.8 或更大的值是有效使用 GPU 的必要条件,但还不够。小于 0.5 的值可能表示 GPU 使用效率低下。给出一个简化的 GPU 架构视图,如果 GPU 有 N 个 SM,则使用 N 个块并在整个时间间隔内运行的内核将对应于活动 1(100%)。使用 N/5 个块并在整个时间间隔内运行的内核将对应于活动 0.2(20%)。使用 N 个块并运行五分之一时间间隔的内核,如果 SM 处于空闲状态,则活动也将为 0.2(20%)。该值与每个块的线程数无关(参见DCGM_FI_PROF_SM_OCCUPANCY)。
SM 入住率多处理器上驻留 Warp 的比例,相对于多处理器上支持的最大并发 Warp 数。该值表示时间间隔内的平均值,而不是瞬时值。占用率越高并不一定表示 GPU 使用率越高。对于 GPU 内存带宽受限的工作负载(参见DCGM_FI_PROF_DRAM_ACTIVE),占用率越高表明 GPU 使用率越高。但是,如果工作负载是计算受限的(即不受 GPU 内存带宽或延迟限制),则占用率越高并不一定与 GPU 使用率越高相关。计算占用率并不简单,它取决于 GPU 属性、每个块的线程数、每个线程的寄存器以及每个块的共享内存等因素。使用CUDA 占用率计算器 探索各种占用率场景。
张量活动张量 (HMMA / IMMA) 管道处于活动状态的周期分数。该值表示时间间隔内的平均值,而不是瞬时值。值越高,张量核心的利用率越高。活动 1 (100%) 相当于在整个时间间隔内每隔一个周期发出一个张量指令。活动 0.2 (20%) 可能表示 20% 的 SM 在整个时间段内的利用率为 100%,100% 的 SM 在整个时间段内的利用率为 20%,100% 的 SM 在 20% 的时间段内的利用率为 100%,或者介于两者之间的任何组合(请参阅DCGM_FI_PROF_SM_ACTIVE以帮助消除这些可能性的歧义)。
FP64 引擎活动FP64(双精度)管道处于活动状态的周期分数。该值表示时间间隔内的平均值,而不是瞬时值。值越高,FP64 核心的利用率越高。活动量 1(100%)相当于整个时间间隔内 Volta 上每四个周期的每个 SM上执行一条 FP64 指令 。活动量 0.2(20%)可能表示 20% 的 SM 在整个时间段内利用率为 100%,100% 的 SM 在整个时间段内利用率为 20%,100% 的 SM 在 20% 的时间段内利用率为 100%,或者介于两者之间的任何组合(请参阅 DCGM_FI_PROF_SM_ACTIVE 以帮助消除这些可能性的歧义)。
FP32 引擎活动FMA(FP32(单精度)和整数)管道处于活动状态的周期分数。该值表示时间间隔内的平均值,而不是瞬时值。值越高,FP32 核心的利用率越高。活动量 1(100%)相当于整个时间间隔内每隔一个周期执行一次 FP32 指令。活动量 0.2(20%)可能表示 20% 的 SM 在整个时间段内利用率为 100%,100% 的 SM 在整个时间段内利用率为 20%,100% 的 SM 在 20% 的时间段内利用率为 100%,或者两者之间的任何组合(请参阅DCGM_FI_PROF_SM_ACTIVE以帮助消除这些可能性的歧义)。
FP16 引擎活动FP16(半精度)管道处于活动状态的周期分数。该值表示时间间隔内的平均值,而不是瞬时值。值越高,FP16 核心的利用率越高。活动量 1(100%)相当于整个时间间隔内每隔一个周期执行一次 FP16 指令。活动量 0.2(20%)可能表示 20% 的 SM 在整个时间段内利用率为 100%,100% 的 SM 在整个时间段内利用率为 20%,100% 的 SM 在 20% 的时间段内利用率为 100%,或者介于两者之间的任何组合(请参阅DCGM_FI_PROF_SM_ACTIVE以帮助消除这些可能性的歧义)。
内存带宽利用率向设备内存发送数据或从设备内存接收数据的周期比例。该值表示时间间隔内的平均值,而不是瞬时值。值越高,设备内存的利用率越高。活动率为 1 (100%) 相当于整个时间间隔内每个周期执行一条 DRAM 指令(实际上,峰值约为 0.8 (80%) 是可实现的最大值)。活动率为 0.2 (20%) 表示在时间间隔内有 20% 的周期正在读取或写入设备内存。
NVLink 带宽通过 NVLink 传输/接收的数据速率(不包括协议标头),以每秒字节数为单位。该值表示一段时间内的平均值,而不是瞬时值。速率是一段时间内的平均值。例如,如果 1 秒内传输了 1 GB 的数据,则无论数据是以恒定速率还是突发速率传输,速率都是 1 GB/s。理论上,每个链路每个方向的最大 NVLink Gen2 带宽为 25 GB/s。
PCIe 带宽通过 PCIe 总线传输/接收的数据速率,包括协议标头和数据有效负载,以字节/秒为单位。该值表示一段时间内的平均值,而不是瞬时值。该速率是一段时间内的平均值。例如,如果 1 秒内传输了 1 GB 的数据,则无论数据是以恒定速率还是突发速率传输,速率都是 1 GB/s。理论上最大 PCIe Gen3 带宽为每通道 985 MB/s。
PCIe 传输速率节点 GPU 卡通过 PCIe 总线传输的数据速率
PCIe 接收速率节点 GPU 卡通过 PCIe 总线接收的数据速率
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/index.html b/site/end-user/kpanda/gpu/nvidia/index.html deleted file mode 100644 index 6c08b62..0000000 --- a/site/end-user/kpanda/gpu/nvidia/index.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - - - - - - -NVIDIA GPU 卡使用模式 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

NVIDIA GPU 卡使用模式

-

NVIDIA 作为业内知名的图形计算供应商,为算力的提升提供了诸多软硬件解决方案,其中 NVIDIA 在 GPU 的使用方式上提供了如下三种解决方案:

-

整卡(Full GPU)

-

整卡是指将整个 NVIDIA GPU 分配给单个用户或应用程序。在这种配置下,应用可以完全占用 GPU 的所有资源, -并获得最大的计算性能。整卡适用于需要大量计算资源和内存的工作负载,如深度学习训练、科学计算等。

-

vGPU(Virtual GPU)

-

vGPU 是一种虚拟化技术,允许将一个物理 GPU 划分为多个虚拟 GPU,每个虚拟 GPU 分配给不同的云主机或用户。 -vGPU 使多个用户可以共享同一台物理 GPU,并在各自的虚拟环境中独立使用 GPU 资源。 -每个虚拟 GPU 可以获得一定的计算能力和显存容量。vGPU 适用于虚拟化环境和云计算场景,可以提供更高的资源利用率和灵活性。

-

MIG(Multi-Instance GPU)

-

MIG 是 NVIDIA Ampere 架构引入的一项功能,它允许将一个物理 GPU 划分为多个物理 GPU 实例,每个实例可以独立分配给不同的用户或工作负载。 -每个 MIG 实例具有自己的计算资源、显存和 PCIe 带宽,就像一个独立的虚拟 GPU。 -MIG 提供了更细粒度的 GPU 资源分配和管理,可以根据需求动态调整实例的数量和大小。 -MIG 适用于多租户环境、容器化应用程序和批处理作业等场景。

-

无论是在虚拟化环境中使用 vGPU,还是在物理 GPU 上使用 MIG,NVIDIA 为用户提供了更多的选择和优化 GPU 资源的方式。 -算丰 AI 算力容器管理平台全面兼容了上述 NVIDIA 的能力特性,用户只需通过简单的界面操作,就能够获得全部 NVIDIA GPU 的计算能力,从而提高资源利用率并降低成本。

-
    -
  • Single 模式,节点仅在其所有 GPU 上公开单一类型的 MIG 设备,节点上的所有 GPU 必须:
      -
    • 属于同一个型号(例如 A100-SXM-40GB),只有同一型号 GPU 的 MIG Profile 才是一样的
    • -
    • 启用 MIG 配置,需要重启机器才能生效
    • -
    • 为在所有产品中公开“完全相同”的 MIG 设备类型,创建相同的GI 和 CI
    • -
    -
  • -
  • Mixed 模式,节点在其所有 GPU 上公开混合 MIG 设备类型。请求特定的 MIG 设备类型需要设备类型提供的计算切片数量和内存总量。
      -
    • 节点上的所有 GPU 必须:属于同一产品线(例如 A100-SXM-40GB)
    • -
    • 每个 GPU 可启用或不启用 MIG,并且可以自由配置任何可用 MIG 设备类型的混合搭配。
    • -
    • 在节点上运行的 k8s-device-plugin 将:
        -
      • 使用传统的 nvidia.com/gpu 资源类型公开任何不处于 MIG 模式的 GPU
      • -
      • 使用遵循架构 nvidia.com/mig-g.gb 的资源类型公开各个 MIG 设备
      • -
      -
    • -
    -
  • -
-

开启配置详情参考 GPU Operator 离线安装

-

如何使用

-

您可以参考以下链接,快速使用算丰 AI 算力平台关于 NVIDIA GPU 卡的管理能力。

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html b/site/end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html deleted file mode 100644 index 7f3c0c6..0000000 --- a/site/end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html +++ /dev/null @@ -1,509 +0,0 @@ - - - - - - - - - - - - -GPU Operator 离线安装 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

GPU Operator 离线安装

-

算丰 AI 算力平台预置了 Ubuntu22.04、Ubuntu20.04、CentOS 7.9 这三个操作系统的 Driver 镜像,驱动版本是 535.104.12; -并且内置了各操作系统所需的 Toolkit 镜像,用户不再需要手动离线 Toolkit 镜像。

-

本文使用 AMD 架构的 CentOS 7.9(3.10.0-1160)进行演示。如需使用 Red Hat 8.4 部署, -请参考向火种节点仓库上传 Red Hat GPU Opreator 离线镜像构建 Red Hat 8.4 离线 yum 源

-

前提条件

-
    -
  • 待部署 gpu-operator 的集群节点内核版本必须完全一致。节点所在的发行版和 GPU 卡型号在 GPU 支持矩阵的范围内。
  • -
  • 安装 gpu-operator 时选择 v23.9.0+2 及以上版本
  • -
-

操作步骤

-

参考如下步骤为集群安装 gpu-operator 插件。

-
    -
  1. -

    登录平台,进入 容器管理 -> 待安装 gpu-operator 的集群 -> 进入集群详情。

    -
  2. -
  3. -

    Helm 模板 页面,选择 全部仓库 ,搜索 gpu-operator

    -
  4. -
  5. -

    选择 gpu-operator ,点击 安装

    -
  6. -
  7. -

    参考下文参数配置,配置 gpu-operator 安装参数,完成 gpu-operator 的安装。

    -
  8. -
-

参数配置

-
    -
  • systemOS :选择机器的操作系统,当前内置了 Ubuntu 22.04Ubuntu20.04Centos7.9other 四个选项,请正确的选择操作系统。
  • -
-

基本参数配置

-
    -
  • 名称 :输入插件名称。
  • -
  • 命名空间 :选择将插件安装的命名空间。
  • -
  • 版本 :插件的版本,此处以 v23.9.0+2 版本为例。
  • -
  • 失败删除 :安装失败,则删除已经安装的关联资源。开启后,将默认同步开启 就绪等待
  • -
  • 就绪等待 :启用后,所有关联资源都处于就绪状态,才会标记应用安装成功。
  • -
  • 详情日志 :开启后,将记录安装过程的详细日志。
  • -
-

高级参数配置

-

Operator 参数配置

-
    -
  • InitContainer.image :配置 CUDA 镜像,推荐默认镜像: nvidia/cuda
  • -
  • InitContainer.repository :CUDA 镜像所在的镜像仓库,默认为 nvcr.m.daocloud.io 仓库
  • -
  • InitContainer.version : CUDA 镜像的版本,请使用默认参数
  • -
-

Driver 参数配置

-
    -
  • Driver.enable :配置是否在节点上部署 NVIDIA 驱动,默认开启,如果您在使用 GPU Operator 部署前,已经在节点上部署了 NVIDIA 驱动程序,请关闭。(若手动部署驱动程序需要关注 CUDA Toolkit 与 Toolkit Driver Version 的适配关系,通过 GPU operator 安装则无需关注)。
  • -
  • Driver.usePrecompiled :启用预编译的GPU驱动
  • -
  • Driver.image :配置 GPU 驱动镜像,推荐默认镜像: nvidia/driver
  • -
  • Driver.repository :GPU 驱动镜像所在的镜像仓库,默认为 nvidia 的 nvcr.io 仓库。
  • -
  • Driver.usePrecompiled :开启预编译模式安装驱动。
  • -
  • -

    Driver.version :GPU 驱动镜像的版本,离线部署请使用默认参数,仅在线安装时需配置。不同类型操作系统的 Driver 镜像的版本存在如下差异, - 详情可参考:Nvidia GPU Driver 版本。 - 如下不同操作系统的 Driver Version 示例:

    -
    -

    Note

    -

    使用内置的操作系统版本无需修改镜像版本,其他操作系统版本请参考向火种节点仓库上传镜像。 -注意版本号后无需填写 Ubuntu、CentOS、Red Hat 等操作系统名称,若官方镜像含有操作系统后缀,请手动移除。

    -
      -
    • Red Hat 系统,例如 525.105.17
    • -
    • Ubuntu 系统,例如 535-5.15.0-1043-nvidia
    • -
    • CentOS 系统,例如 525.147.05
    • -
    -
    -
  • -
  • -

    Driver.RepoConfig.ConfigMapName :用来记录 GPU Operator 的离线 yum 源配置文件名称, - 当使用预置的离线包时,各类型的操作系统请参考如下的文档。

    - -
  • -
-

Toolkit 配置参数

-

Toolkit.enable :默认开启,该组件让 conatainerd/docker 支持运行需要 GPU 的容器。

-

MIG 配置参数

-

详细配置方式请参考开启 MIG 功能

-

MigManager.Config.name :MIG 的切分配置文件名,用于定义 MIG 的(GI, CI)切分策略。 -默认为 default-mig-parted-config 。自定义参数参考开启 MIG 功能

-

下一步操作

-

完成上述相关参数配置和创建后:

-
    -
  • -

    如果使用 整卡模式应用创建时可使用 GPU 资源

    -
  • -
  • -

    如果使用 vGPU 模式 ,完成上述相关参数配置和创建后,下一步请完成 vGPU Addon 安装

    -
  • -
  • -

    如果使用 MIG 模式,并且需要给个别 GPU 节点按照某种切分规格进行使用, - 否则按照 MigManager.Config 中的 default 值进行切分。

    -
      -
    • -

      single 模式请给对应节点打上如下 Label:

      -
      kubectl label nodes {node} nvidia.com/mig.config="all-1g.10gb" --overwrite
      -
      -
    • -
    • -

      mixed 模式请给对应节点打上如下 Label:

      -
      kubectl label nodes {node} nvidia.com/mig.config="custom-config" --overwrite
      -
      -
    • -
    -
  • -
-

​ 切分后,应用可使用 MIG GPU 资源

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/mig/create_mig.html b/site/end-user/kpanda/gpu/nvidia/mig/create_mig.html deleted file mode 100644 index 0d47a79..0000000 --- a/site/end-user/kpanda/gpu/nvidia/mig/create_mig.html +++ /dev/null @@ -1,497 +0,0 @@ - - - - - - - - - - - - -开启 MIG 功能 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

开启 MIG 功能

-

本章节介绍如何开启 NVIDIA MIG 功能方式,NVIDIA 当前提供两种在 Kubernetes 节点上公开 MIG 设备的策略:

-
    -
  • Single 模式,节点仅在其所有 GPU 上公开单一类型的 MIG 设备。
  • -
  • Mixed 模式,节点在其所有 GPU 上公开混合 MIG 设备类型。
  • -
-

详情参考 NVIDIA GPU 卡使用模式

-

前提条件

-
    -
  • 待安装 GPU 驱动节点系统要求请参考:GPU 支持矩阵
  • -
  • 确认集群节点上具有对应型号的 GPU 卡(NVIDIA H100、 - A100 和 - A30 Tensor Core GPU), - 详情参考 GPU 支持矩阵
  • -
  • 节点上的所有 GPU 必须:属于同一产品线(例如 A100-SXM-40GB)
  • -
-

安装 gpu-operator Addon

-

参数配置

-

安装 Operator 时需要对应设置 MigManager Config 参数, -默认为 default-mig-parted-config ,同时也可以自定义切分策略配置文件:

-

single

-

自定义切分策略

-
  ## 自定义切分 GI 实例配置
-  all-disabled:
-    - devices: all
-      mig-enabled: false
-  all-enabled:
-    - devices: all
-      mig-enabled: true
-      mig-devices: {}
-  all-1g.10gb:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        1g.5gb: 7
-  all-1g.10gb.me:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        1g.10gb+me: 1
-  all-1g.20gb:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        1g.20gb: 4
-  all-2g.20gb:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        2g.20gb: 3
-  all-3g.40gb:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        3g.40gb: 2
-  all-4g.40gb:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        4g.40gb: 1
-  all-7g.80gb:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        7g.80gb: 1
-  all-balanced:
-    - device-filter: ["0x233110DE", "0x232210DE", "0x20B210DE", "0x20B510DE", "0x20F310DE", "0x20F510DE"]
-      devices: all
-      mig-enabled: true
-      mig-devices:
-        1g.10gb: 2
-        2g.20gb: 1
-        3g.40gb: 1
-  # 设置后会按照设置规格切分 CI 实例
-  custom-config:
-    - devices: all
-      mig-enabled: true
-      mig-devices:
-        3g.40gb: 2
-
-

在上述的 YAML 中设置 custom-config ,设置后会按照规格切分 CI 实例。

-
custom-config:
-  - devices: all
-    mig-enabled: true
-    mig-devices:
-      1c.3g.40gb: 6
-
-

设置完成后,在确认部署应用时即可使用 GPU MIG 资源

-

切换节点 GPU 模式

-
-

Note

-

切换 GPU 模式或者修改切分规格后需要重启 nvidia-mig-manager。

-
-

当我们成功安装 gpu-operator 之后,节点默认是整卡模式,在节点管理页面会有标识,如下图所示:

-

mixed

-

点击节点列表右侧的 ,选择 GPU 模式切换 ,然后选择对应的 MIG 模式以及切分的策略,这里以 MIXED 模式为例:

-

mig

-

这里一共有两个配置:

-
    -
  1. MIg 策略:Mixed 以及 Single 。
  2. -
  3. 切分策略:这里的策略需要与 default-mig-parted-config - (或者用户自定义的切分策略)配置文件中的 key 保持一致。
  4. -
-

点击 确定 按钮后,等待约一分钟左右刷新页面,MIG 模式切换成:

-

切换 mig

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/mig/index.html b/site/end-user/kpanda/gpu/nvidia/mig/index.html deleted file mode 100644 index 7fc2e94..0000000 --- a/site/end-user/kpanda/gpu/nvidia/mig/index.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - - - - - - - - - -NVIDIA 多实例 GPU(MIG) 概述 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

NVIDIA 多实例 GPU(MIG) 概述

-

MIG 场景

-
    -
  • -

    多租户云环境

    -

    MIG 允许云服务提供商将一块物理 GPU 划分为多个独立的 GPU 实例,每个实例可以独立分配给不同的租户。这样可以实现资源的隔离和独立性,满足多个租户对 GPU 计算能力的需求。

    -
  • -
  • -

    容器化应用程序

    -

    MIG 可以在容器化环境中实现更细粒度的 GPU 资源管理。通过将物理 GPU 划分为多个 MIG 实例,可以为每个容器分配独立的 GPU 计算资源,提供更好的性能隔离和资源利用。

    -
  • -
  • -

    批处理作业

    -

    对于需要大规模并行计算的批处理作业,MIG 可以提供更高的计算性能和更大的显存容量。每个 MIG 实例可以利用物理 GPU 的一部分计算资源,从而加速大规模计算任务的处理。

    -
  • -
  • -

    AI/机器学习训练

    -

    MIG 可以在训练大规模深度学习模型时提供更大的计算能力和显存容量。将物理 GPU 划分为多个 MIG 实例,每个实例可以独立进行模型训练,提高训练效率和吞吐量。

    -
  • -
-

总体而言,NVIDIA MIG 适用于需要更细粒度的GPU资源分配和管理的场景,可以实现资源的隔离、提高性能利用率,并且满足多个用户或应用程序对 GPU 计算能力的需求。

-

MIG 概述

-

NVIDIA 多实例 GPU(Multi-Instance GPU,简称 MIG)是 NVIDIA 在 H100,A100,A30 系列 GPU 卡上推出的一项新特性, -旨在将一块物理 GPU 分割为多个 GPU 实例,以提供更细粒度的资源共享和隔离。MIG 最多可将一块 GPU 划分成七个 GPU 实例, -使得一个 物理 GPU 卡可为多个用户提供单独的 GPU 资源,以实现最佳 GPU 利用率。

-

这个功能使得多个应用程序或用户可以同时共享GPU资源,提高了计算资源的利用率,并增加了系统的可扩展性。

-

通过 MIG,每个 GPU 实例的处理器在整个内存系统中具有独立且隔离的路径——芯片上的交叉开关端口、L2 -高速缓存组、内存控制器和 DRAM 地址总线都唯一分配给单个实例。

-

这确保了单个用户的工作负载能够以可预测的吞吐量和延迟运行,并具有相同的二级缓存分配和 DRAM 带宽。 -MIG 可以划分可用的 GPU 计算资源(包括流多处理器或 SM 和 GPU 引擎,如复制引擎或解码器)进行分区, -以便为不同的客户端(如云主机、容器或进程)提供定义的服务质量(QoS)和故障隔离)。 -MIG 使多个 GPU 实例能够在单个物理 GPU 上并行运行。

-

MIG 允许多个 vGPU(以及云主机)在单个 GPU 实例上并行运行,同时保留 vGPU 提供的隔离保证。 -有关使用 vGPU 和 MIG 进行 GPU 分区的详细信息,请参阅 -NVIDIA Multi-Instance GPU and NVIDIA Virtual Compute Server

-

MIG 架构

-

如下是一个 MIG 的概述图,可以看出 MIG 将一张物理 GPU 卡虚拟化成了 7 个 GPU 实例,这些 GPU 实例能够可以被多个 User 使用。

-

img

-

重要概念

-
    -
  • SM :流式多处理器(Streaming Multiprocessor),GPU 的核心计算单元,负责执行图形渲染和通用计算任务。 - 每个 SM 包含一组 CUDA 核心,以及共享内存、寄存器文件和其他资源,可以同时执行多个线程。 - 每个 MIG 实例都拥有一定数量的 SM 和其他相关资源,以及被划分出来的显存。
  • -
  • GPU Memory Slice :GPU 内存切片,GPU 内存切片是 GPU 内存的最小部分,包括相应的内存控制器和缓存。 - GPU 内存切片大约是 GPU 内存资源总量的八分之一,包括容量和带宽。
  • -
  • GPU SM Slice :GPU SM 切片是 GPU 上 SM 的最小计算单位。在 MIG 模式下配置时, - GPU SM 切片大约是 GPU 中可用 SMS 总数的七分之一。
  • -
  • GPU Slice :GPU 切片是 GPU 中由单个 GPU 内存切片和单个 GPU SM 切片组合在一起的最小部分。
  • -
  • GPU Instance :GPU 实例 (GI) 是 GPU 切片和 GPU 引擎(DMA、NVDEC 等)的组合。 - GPU 实例中的任何内容始终共享所有 GPU 内存切片和其他 GPU 引擎,但它的 SM 切片可以进一步细分为计算实例(CI)。 - GPU 实例提供内存 QoS。每个 GPU 切片都包含专用的 GPU 内存资源,这些资源会限制可用容量和带宽,并提供内存 QoS。 - 每个 GPU 内存切片获得总 GPU 内存资源的八分之一,每个 GPU SM 切片获得 SM 总数的七分之一。
  • -
  • Compute Instance :GPU 实例的计算切片可以进一步细分为多个计算实例 (CI),其中 CI 共享父 - GI 的引擎和内存,但每个 CI 都有专用的 SM 资源。
  • -
-

GPU 实例(GI)

-

本节介绍如何在 GPU 上创建各种分区。将使用 A100-40GB 作为示例演示如何对单个 GPU 物理卡上进行分区。

-

GPU 的分区是使用内存切片进行的,因此可以认为 A100-40GB GPU 具有 8x5GB 内存切片和 7 个 GPU SM 切片,如下图所示,展示了 A100 上可用的内存切片。

-

img

-

如上所述,创建 GPU 实例 (GI) 需要将一定数量的内存切片与一定数量的计算切片相结合。 -在下图中,一个 5GB 内存切片与 1 个计算切片相结合,以创建 1g.5gb GI 配置文件:

-

img

-

同样,4x5GB 内存切片可以与 4x1 计算切片结合使用以创建 4g.20gb 的 GI 配置文件:

-

img

-

计算实例(CI)

-

GPU 实例的计算切片(GI)可以进一步细分为多个计算实例(CI),其中 CI 共享父 GI 的引擎和内存, -但每个 CI 都有专用的 SM 资源。使用上面的相同 4g.20gb 示例,可以创建一个 CI 以仅使用第一个计算切片的 1c.4g.20gb 计算配置,如下图蓝色部分所示:

-

img

-

在这种情况下,可以通过选择任何计算切片来创建 4 个不同的 CI。还可以将两个计算切片组合在一起以创建 2c.4g.20gb 的计算配置):

-

img

-

除此之外,还可以组合 3 个计算切片以创建计算配置文件,或者可以组合所有 4 个计算切片以创建 3c.4g.20gb4c.4g.20gb 计算配置文件。 -合并所有 4 个计算切片时,配置文件简称为 4g.20gb

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/mig/mig_command.html b/site/end-user/kpanda/gpu/nvidia/mig/mig_command.html deleted file mode 100644 index 44791b9..0000000 --- a/site/end-user/kpanda/gpu/nvidia/mig/mig_command.html +++ /dev/null @@ -1,417 +0,0 @@ - - - - - - - - - - - - -MIG 相关命令 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

MIG 相关命令

-

GI 相关命名:

- - - - - - - - - - - - - - - - - - - - - - - - - -
子命令说明
nvidia-smi mig -lgi查看创建 GI 实例列表
nvidia-smi mig -dgi -gi删除指定的 GI 实例
nvidia-smi mig -lgip查看 GI 的 profile
nvidia-smi mig -cgi通过指定 profile 的 ID 创建 GI
-

CI 相关命令:

- - - - - - - - - - - - - - - - - - - - - - - - - -
子命令说明
nvidia-smi mig -lcip { -gi {gi Instance ID}}查看 CI 的 profile ,指定 -gi 可以查看特定 GI 实例可以创建的 CI
nvidia-smi mig -lci查看创建的 CI 实例列表
nvidia-smi mig -cci {profile id} -gi {gi instance id}指定的 GI 创建 CI 实例
nvidia-smi mig -dci -ci删除指定 CI 实例
-

GI+CI 相关命令:

- - - - - - - - - - - - - -
子命令说明
nvidia-smi mig -i 0 -cgi {gi profile id} -C {ci profile id}直接创建 GI + CI 实例
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/mig/mig_usage.html b/site/end-user/kpanda/gpu/nvidia/mig/mig_usage.html deleted file mode 100644 index b1f1694..0000000 --- a/site/end-user/kpanda/gpu/nvidia/mig/mig_usage.html +++ /dev/null @@ -1,469 +0,0 @@ - - - - - - - - - - - - -使用 MIG GPU 资源 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

使用 MIG GPU 资源

-

本节介绍应用如何使用 MIG GPU 资源。

-

前提条件

- -

UI 界面使用 MIG GPU

-
    -
  1. -

    确认集群是否已识别 GPU 卡类型

    -

    进入 集群详情 -> 节点管理 ,查看是否已正确识别为 MIG 模式。

    -

    gpu

    -
  2. -
  3. -

    通过镜像部署应用,可选择并使用 NVIDIA MIG 资源。

    -
      -
    • -

      MIG Single 模式示例(与整卡使用方式相同):

      -
      -

      Note

      -

      MIG single 策略允许用户以与 GPU 整卡相同的方式(nvidia.com/gpu)请求和使用GPU资源,不同的是这些资源可以是 GPU 的一部分(MIG设备),而不是整个GPU。了解更多 GPU MIG 模式设计

      -
      -

      usemig

      -
    • -
    • -

      MIG Mixed 模式示例:

      -

      mig02

      -
    • -
    -
  4. -
-

YAML 配置使用 MIG

-

MIG Single 模式:

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: mig-demo
-  namespace: default
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: mig-demo
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: mig-demo
-    spec:
-      containers:
-        - name: mig-demo1
-          image: chrstnhntschl/gpu_burn
-          resources:
-            limits:
-              nvidia.com/gpu: 2 # (1)!
-          imagePullPolicy: Always
-      restartPolicy: Always
-
-
    -
  1. 申请 MIG GPU 的数量
  2. -
-

MIG Mixed 模式:

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: mig-demo
-  namespace: default
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: mig-demo
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: mig-demo
-    spec:
-      containers:
-        - name: mig-demo1
-          image: chrstnhntschl/gpu_burn
-          resources:
-            limits:
-              nvidia.com/mig-4g.20gb: 1 # (1)!
-          imagePullPolicy: Always
-      restartPolicy: Always
-
-
    -
  1. 通过 nvidia.com/mig-g.gb 的资源类型公开各个 MIG 设备
  2. -
-

进入容器后可以查看只使用了一个 MIG 设备。

-

mig03

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/push_image_to_repo.html b/site/end-user/kpanda/gpu/nvidia/push_image_to_repo.html deleted file mode 100644 index 97b58e5..0000000 --- a/site/end-user/kpanda/gpu/nvidia/push_image_to_repo.html +++ /dev/null @@ -1,462 +0,0 @@ - - - - - - - - - - - - -向火种节点仓库上传 Red Hat GPU Opreator 离线镜像 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

向火种节点仓库上传 Red Hat GPU Opreator 离线镜像

-

本文以 Red Hat 8.4 的 nvcr.io/nvidia/driver:525.105.17-rhel8.4 离线驱动镜像为例,介绍如何向火种节点仓库上传离线镜像。

-

前提条件

-
    -
  1. 火种节点及其组件状态运行正常。
  2. -
  3. 准备一个能够访问互联网和火种节点的节点,且节点上已经完成 - Docker 的安装。
  4. -
-

操作步骤

-

在联网节点获取离线镜像

-

以下操作在联网节点上进行。

-
    -
  1. -

    在联网机器上拉取 nvcr.io/nvidia/driver:525.105.17-rhel8.4 离线驱动镜像:

    -
    docker pull nvcr.io/nvidia/driver:525.105.17-rhel8.4
    -
    -
  2. -
  3. -

    镜像拉取完成后,打包镜像为 nvidia-driver.tar 压缩包:

    -
    docker save nvcr.io/nvidia/driver:525.105.17-rhel8.4 > nvidia-driver.tar
    -
    -
  4. -
  5. -

    拷贝 nvidia-driver.tar 镜像压缩包到火种节点:

    -
    scp  nvidia-driver.tar user@ip:/root
    -
    -

    例如:

    -
    scp  nvidia-driver.tar root@10.6.175.10:/root
    -
    -
  6. -
-

推送镜像到火种节点仓库

-

以下操作在火种节点上进行。

-
    -
  1. -

    登录火种节点,将联网节点拷贝的镜像压缩包 nvidia-driver.tar 导入本地:

    -
    docker load -i nvidia-driver.tar
    -
    -
  2. -
  3. -

    查看刚刚导入的镜像:

    -
    docker images -a |grep nvidia
    -
    -

    预期输出:

    -
    nvcr.io/nvidia/driver                 e3ed7dee73e9   1 days ago   1.02GB
    -
    -
  4. -
  5. -

    重新标记镜像,使其与远程 Registry 仓库中的目标仓库对应:

    -
    docker tag <image-name> <registry-url>/<repository-name>:<tag>
    -
    -
      -
    • <image-name> 是上一步 nvidia 镜像的名称,
    • -
    • <registry-url> 是火种节点上 Registry 服务的地址,
    • -
    • <repository-name> 是您要推送到的仓库名称,
    • -
    • <tag> 是您为镜像指定的标签。
    • -
    -

    例如:

    -
    registry:docker tag nvcr.io/nvidia/driver 10.6.10.5/nvcr.io/nvidia/driver:525.105.17-rhel8.4
    -
    -
  6. -
  7. -

    将镜像推送到火种节点镜像仓库:

    -
    docker push {ip}/nvcr.io/nvidia/driver:525.105.17-rhel8.4
    -
    -
  8. -
-

接下来

-

参考构建 Red Hat 8.4 离线 yum 源和 -GPU Operator 离线安装来为集群部署 GPU Operator。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html b/site/end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html deleted file mode 100644 index 57778c8..0000000 --- a/site/end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html +++ /dev/null @@ -1,1217 +0,0 @@ - - - - - - - - - - - - -RHEL 9.2 离线安装 gpu-operator 驱动 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

RHEL 9.2 离线安装 gpu-operator 驱动

-

前提条件:已安装 gpu-operator v23.9.0+2 及更高版本

-

RHEL 9.2 驱动镜像不能直接安装,官方的驱动脚本存在一点问题,在官方修复之前,提供如下的步骤来实现离线安装驱动。

-

禁用nouveau驱动

-

在 RHEL 9.2 中存在 nouveau 非官方的 Nvidia 驱动,因此需要先禁用。

-
# 创建一个新的文件
-sudo vi /etc/modprobe.d/blacklist-nouveau.conf
-# 添加以下两行内容:
-blacklist nouveau
-options nouveau modeset=0
-# 禁用Nouveau
-sudo dracut --force
-# 重启vm
-sudo reboot
-# 检查是否已经成功禁用
-lsmod | grep nouveau
-
-

自定义驱动镜像

-

先在本地创建 nvidia-driver 文件:

-
-点击查看完整的 nvidia-driver 文件内容 -
#! /bin/bash -x
-# Copyright (c) 2018-2020, NVIDIA CORPORATION. All rights reserved.
-
-set -eu
-
-RUN_DIR=/run/nvidia
-PID_FILE=${RUN_DIR}/${0##*/}.pid
-DRIVER_VERSION=${DRIVER_VERSION:?"Missing DRIVER_VERSION env"}
-KERNEL_UPDATE_HOOK=/run/kernel/postinst.d/update-nvidia-driver
-NUM_VGPU_DEVICES=0
-NVIDIA_MODULE_PARAMS=()
-NVIDIA_UVM_MODULE_PARAMS=()
-NVIDIA_MODESET_MODULE_PARAMS=()
-NVIDIA_PEERMEM_MODULE_PARAMS=()
-TARGETARCH=${TARGETARCH:?"Missing TARGETARCH env"}
-USE_HOST_MOFED="${USE_HOST_MOFED:-false}"
-DNF_RELEASEVER=${DNF_RELEASEVER:-""}
-RHEL_VERSION=${RHEL_VERSION:-""}
-RHEL_MAJOR_VERSION=9
-
-OPEN_KERNEL_MODULES_ENABLED=${OPEN_KERNEL_MODULES_ENABLED:-false}
-[[ "${OPEN_KERNEL_MODULES_ENABLED}" == "true" ]] && KERNEL_TYPE=kernel-open || KERNEL_TYPE=kernel
-
-DRIVER_ARCH=${TARGETARCH/amd64/x86_64} && DRIVER_ARCH=${DRIVER_ARCH/arm64/aarch64}
-echo "DRIVER_ARCH is $DRIVER_ARCH"
-
-SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
-source $SCRIPT_DIR/common.sh
-
-_update_package_cache() {
-    if [ "${PACKAGE_TAG:-}" != "builtin" ]; then
-        echo "Updating the package cache..."
-        if ! yum -q makecache; then
-            echo "FATAL: failed to reach RHEL package repositories. "\
-                 "Ensure that the cluster can access the proper networks."
-            exit 1
-        fi
-    fi
-}
-
-_cleanup_package_cache() {
-    if [ "${PACKAGE_TAG:-}" != "builtin" ]; then
-        echo "Cleaning up the package cache..."
-        rm -rf /var/cache/yum/*
-    fi
-}
-
-_get_rhel_version_from_kernel() {
-    local rhel_version_underscore rhel_version_arr
-    rhel_version_underscore=$(echo "${KERNEL_VERSION}" | sed 's/.*el\([0-9]\+_[0-9]\+\).*/\1/g')
-    # For e.g. :- from the kernel version 4.18.0-513.9.1.el8_9, we expect to extract the string "8_9"
-    if [[ ! ${rhel_version_underscore} =~ ^[0-9]+_[0-9]+$ ]]; then
-        echo "Unable to resolve RHEL version from kernel version" >&2
-        return 1
-    fi
-    IFS='_' read -r -a rhel_version_arr <<< "$rhel_version_underscore"
-    if [[ ${#rhel_version_arr[@]} -ne 2 ]]; then
-        echo "Unable to resolve RHEL version from kernel version" >&2
-        return 1
-    fi
-    RHEL_VERSION="${rhel_version_arr[0]}.${rhel_version_arr[1]}"
-    echo "RHEL VERSION successfully resolved from kernel: ${RHEL_VERSION}"
-    return 0
-}
-
-_resolve_rhel_version() {
-    _get_rhel_version_from_kernel || RHEL_VERSION="${RHEL_MAJOR_VERSION}"
-    # set dnf release version as rhel version by default
-    if [[ -z "${DNF_RELEASEVER}" ]]; then
-        DNF_RELEASEVER="${RHEL_VERSION}"
-    fi
-    return 0
-}
-
-# Resolve the kernel version to the form major.minor.patch-revision.
-_resolve_kernel_version() {
-    echo "Resolving Linux kernel version..."
-    local version=$(yum -q list available --showduplicates kernel-headers |
-      awk -v arch=$(uname -m) 'NR>1 {print $2"."arch}' | tac | grep -E -m1 "^${KERNEL_VERSION/latest/.*}")
-
-    if [ -z "${version}" ]; then
-        echo "Could not resolve Linux kernel version" >&2
-        return 1
-    fi
-    KERNEL_VERSION="${version}"
-    echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
-    return 0
-}
-
-# Install the kernel modules header/builtin/order files and generate the kernel version string.
-_install_prerequisites() (
-    local tmp_dir=$(mktemp -d)
-
-    trap "rm -rf ${tmp_dir}" EXIT
-    cd ${tmp_dir}
-
-    echo "Installing elfutils..."
-    if ! dnf install -q -y elfutils-libelf.$DRIVER_ARCH; then
-        echo "FATAL: failed to install elfutils packages. RHEL entitlement may be improperly deployed."
-        exit 1
-    fi
-    if ! dnf install -q -y elfutils-libelf-devel.$DRIVER_ARCH; then
-        echo "FATAL: failed to install elfutils packages. RHEL entitlement may be improperly deployed."
-        exit 1
-    fi    
-
-    rm -rf /lib/modules/${KERNEL_VERSION}
-    mkdir -p /lib/modules/${KERNEL_VERSION}/proc
-
-    echo "Enabling RHOCP and EUS RPM repos..."
-    if [ -n "${OPENSHIFT_VERSION:-}" ]; then
-        dnf config-manager --set-enabled rhocp-${OPENSHIFT_VERSION}-for-rhel-9-$DRIVER_ARCH-rpms || true
-        if ! dnf makecache --releasever=${DNF_RELEASEVER}; then
-            dnf config-manager --set-disabled rhocp-${OPENSHIFT_VERSION}-for-rhel-9-$DRIVER_ARCH-rpms || true
-        fi
-    fi
-
-    dnf config-manager --set-enabled rhel-9-for-$DRIVER_ARCH-baseos-eus-rpms  || true
-    if ! dnf makecache --releasever=${DNF_RELEASEVER}; then
-            dnf config-manager --set-disabled rhel-9-for-$DRIVER_ARCH-baseos-eus-rpms || true
-    fi
-
-    # try with EUS disabled, if it does not work, then try just major version
-    if ! dnf makecache --releasever=${DNF_RELEASEVER}; then
-      # If pointing to DNF_RELEASEVER does not work, we point to the RHEL_MAJOR_VERSION as a last resort
-      if ! dnf makecache --releasever=${RHEL_MAJOR_VERSION}; then
-        echo "FATAL: failed to update the dnf metadata cache after multiple attempts with releasevers ${DNF_RELEASEVER}, ${RHEL_MAJOR_VERSION}"
-        exit 1
-      else
-        DNF_RELEASEVER=${RHEL_MAJOR_VERSION}
-      fi
-    fi
-
-    echo "Installing Linux kernel headers..."
-    dnf -q -y --releasever=${DNF_RELEASEVER} install kernel-headers-${KERNEL_VERSION} kernel-devel-${KERNEL_VERSION} --allowerasing > /dev/null
-    ln -s /usr/src/kernels/${KERNEL_VERSION} /lib/modules/${KERNEL_VERSION}/build
-
-    echo "Installing Linux kernel module files..."
-    dnf -q -y --releasever=${DNF_RELEASEVER} install kernel-core-${KERNEL_VERSION} > /dev/null
-
-    # Prevent depmod from giving a WARNING about missing files
-    touch /lib/modules/${KERNEL_VERSION}/modules.order
-    touch /lib/modules/${KERNEL_VERSION}/modules.builtin
-
-    depmod ${KERNEL_VERSION}
-
-    echo "Generating Linux kernel version string..."
-    if [ "$TARGETARCH" = "arm64" ]; then
-        gunzip -c /lib/modules/${KERNEL_VERSION}/vmlinuz | strings | grep -E '^Linux version' | sed 's/^\(.*\)\s\+(.*)$/\1/' > version
-    else
-        extract-vmlinux /lib/modules/${KERNEL_VERSION}/vmlinuz | strings | grep -E '^Linux version' | sed 's/^\(.*\)\s\+(.*)$/\1/' > version
-    fi
-    if [ -z "$(<version)" ]; then
-        echo "Could not locate Linux kernel version string" >&2
-        return 1
-    fi
-    mv version /lib/modules/${KERNEL_VERSION}/proc
-
-    # Parse gcc version
-    # gcc_version is expected to match x.y.z
-    # current_gcc is expected to match 'gcc-x.y.z-rel.el8.x86_64
-    local gcc_version=$(cat /lib/modules/${KERNEL_VERSION}/proc/version | grep -Eo "gcc \(GCC\) ([0-9\.]+)" | grep -Eo "([0-9\.]+)")
-    local current_gcc=$(rpm -qa gcc)
-    echo "kernel requires gcc version: 'gcc-${gcc_version}', current gcc version is '${current_gcc}'"
-
-    if ! [[ "${current_gcc}" =~ "gcc-${gcc_version}"-.* ]]; then
-        dnf install -q -y --releasever=${DNF_RELEASEVER} "gcc-${gcc_version}"
-    fi
-)
-
-# Cleanup the prerequisites installed above.
-_remove_prerequisites() {
-    true
-    if [ "${PACKAGE_TAG:-}" != "builtin" ]; then
-        dnf -q -y remove kernel-headers-${KERNEL_VERSION} kernel-devel-${KERNEL_VERSION} > /dev/null
-        # TODO remove module files not matching an existing driver package.
-    fi
-}
-
-# Check if the kernel version requires a new precompiled driver packages.
-_kernel_requires_package() {
-    local proc_mount_arg=""
-
-    echo "Checking NVIDIA driver packages..."
-
-    [[ ! -d /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE} ]] && return 0
-    cd /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE}
-
-    proc_mount_arg="--proc-mount-point /lib/modules/${KERNEL_VERSION}/proc"
-    for pkg_name in $(ls -d -1 precompiled/** 2> /dev/null); do
-        is_match=$(../mkprecompiled --match ${pkg_name} ${proc_mount_arg})
-        if [ "${is_match}" == "kernel interface matches." ]; then
-            echo "Found NVIDIA driver package ${pkg_name##*/}"
-            return 1
-        fi
-    done
-    return 0
-}
-
-# Compile the kernel modules, optionally sign them, and generate a precompiled package for use by the nvidia-installer.
-_create_driver_package() (
-    local pkg_name="nvidia-modules-${KERNEL_VERSION%%-*}${PACKAGE_TAG:+-${PACKAGE_TAG}}"
-    local nvidia_sign_args=""
-    local nvidia_modeset_sign_args=""
-    local nvidia_uvm_sign_args=""
-
-    trap "make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build clean > /dev/null" EXIT
-
-    echo "Compiling NVIDIA driver kernel modules..."
-    cd /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE}
-
-    if _gpu_direct_rdma_enabled; then
-        ln -s /run/mellanox/drivers/usr/src/ofa_kernel /usr/src/
-        # if arch directory exists(MOFED >=5.5) then create a symlink as expected by GPU driver installer
-        # This is required as currently GPU driver installer doesn't expect headers in x86_64 folder, but only in either default or kernel-version folder.
-        # ls -ltr /usr/src/ofa_kernel/
-        # lrwxrwxrwx 1 root root   36 Dec  8 20:10 default -> /etc/alternatives/ofa_kernel_headers
-        # drwxr-xr-x 4 root root 4096 Dec  8 20:14 x86_64
-        # lrwxrwxrwx 1 root root   44 Dec  9 19:05 5.4.0-90-generic -> /usr/src/ofa_kernel/x86_64/5.4.0-90-generic/
-        if [[ -d "/run/mellanox/drivers/usr/src/ofa_kernel/$(uname -m)/$(uname -r)" ]]; then
-            if [[ ! -e "/usr/src/ofa_kernel/$(uname -r)" ]]; then
-                ln -s "/run/mellanox/drivers/usr/src/ofa_kernel/$(uname -m)/$(uname -r)" /usr/src/ofa_kernel/
-            fi
-        fi
-    fi
-
-    make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build nv-linux.o nv-modeset-linux.o > /dev/null
-
-    echo "Relinking NVIDIA driver kernel modules..."
-    rm -f nvidia.ko nvidia-modeset.ko
-    ld -d -r -o nvidia.ko ./nv-linux.o ./nvidia/nv-kernel.o_binary
-    ld -d -r -o nvidia-modeset.ko ./nv-modeset-linux.o ./nvidia-modeset/nv-modeset-kernel.o_binary
-
-    if [ -n "${PRIVATE_KEY}" ]; then
-        echo "Signing NVIDIA driver kernel modules..."
-        donkey get ${PRIVATE_KEY} sh -c "PATH=${PATH}:/usr/src/linux-headers-${KERNEL_VERSION}/scripts && \
-          sign-file sha512 \$DONKEY_FILE pubkey.x509 nvidia.ko nvidia.ko.sign &&                          \
-          sign-file sha512 \$DONKEY_FILE pubkey.x509 nvidia-modeset.ko nvidia-modeset.ko.sign &&          \
-          sign-file sha512 \$DONKEY_FILE pubkey.x509 nvidia-uvm.ko"
-        nvidia_sign_args="--linked-module nvidia.ko --signed-module nvidia.ko.sign"
-        nvidia_modeset_sign_args="--linked-module nvidia-modeset.ko --signed-module nvidia-modeset.ko.sign"
-        nvidia_uvm_sign_args="--signed"
-    fi
-
-    echo "Building NVIDIA driver package ${pkg_name}..."
-    ../mkprecompiled --pack ${pkg_name} --description ${KERNEL_VERSION}                              \
-                                        --proc-mount-point /lib/modules/${KERNEL_VERSION}/proc       \
-                                        --driver-version ${DRIVER_VERSION}                           \
-                                        --kernel-interface nv-linux.o                                \
-                                        --linked-module-name nvidia.ko                               \
-                                        --core-object-name nvidia/nv-kernel.o_binary                 \
-                                        ${nvidia_sign_args}                                          \
-                                        --target-directory .                                         \
-                                        --kernel-interface nv-modeset-linux.o                        \
-                                        --linked-module-name nvidia-modeset.ko                       \
-                                        --core-object-name nvidia-modeset/nv-modeset-kernel.o_binary \
-                                        ${nvidia_modeset_sign_args}                                  \
-                                        --target-directory .                                         \
-                                        --kernel-module nvidia-uvm.ko                                \
-                                        ${nvidia_uvm_sign_args}                                      \
-                                        --target-directory .
-    mkdir -p precompiled
-    mv ${pkg_name} precompiled
-)
-
-_assert_nvswitch_system() {
-    [ -d /proc/driver/nvidia-nvswitch ] || return 1
-    entries=$(ls -1 /proc/driver/nvidia-nvswitch/devices/*)
-    if [ -z "${entries}" ]; then
-        return 1
-    fi
-    return 0
-}
-
-# For each kernel module configuration file mounted into the container,
-# parse the file contents and extract the custom module parameters that
-# are to be passed as input to 'modprobe'.
-#
-# Assumptions:
-# - Configuration files are named <module-name>.conf (i.e. nvidia.conf, nvidia-uvm.conf).
-# - Configuration files are mounted inside the container at /drivers.
-# - Each line in the file contains at least one parameter, where parameters on the same line
-#   are space delimited. It is up to the user to properly format the file to ensure
-#   the correct set of parameters are passed to 'modprobe'.
-_get_module_params() {
-    local base_path="/drivers"
-    # nvidia
-    if [ -f "${base_path}/nvidia.conf" ]; then
-       while IFS="" read -r param || [ -n "$param" ]; do
-           NVIDIA_MODULE_PARAMS+=("$param")
-       done <"${base_path}/nvidia.conf"
-       echo "Module parameters provided for nvidia: ${NVIDIA_MODULE_PARAMS[@]}"
-    fi
-    # nvidia-uvm
-    if [ -f "${base_path}/nvidia-uvm.conf" ]; then
-       while IFS="" read -r param || [ -n "$param" ]; do
-           NVIDIA_UVM_MODULE_PARAMS+=("$param")
-       done <"${base_path}/nvidia-uvm.conf"
-       echo "Module parameters provided for nvidia-uvm: ${NVIDIA_UVM_MODULE_PARAMS[@]}"
-    fi
-    # nvidia-modeset
-    if [ -f "${base_path}/nvidia-modeset.conf" ]; then
-       while IFS="" read -r param || [ -n "$param" ]; do
-           NVIDIA_MODESET_MODULE_PARAMS+=("$param")
-       done <"${base_path}/nvidia-modeset.conf"
-       echo "Module parameters provided for nvidia-modeset: ${NVIDIA_MODESET_MODULE_PARAMS[@]}"
-    fi
-    # nvidia-peermem
-    if [ -f "${base_path}/nvidia-peermem.conf" ]; then
-       while IFS="" read -r param || [ -n "$param" ]; do
-           NVIDIA_PEERMEM_MODULE_PARAMS+=("$param")
-       done <"${base_path}/nvidia-peermem.conf"
-       echo "Module parameters provided for nvidia-peermem: ${NVIDIA_PEERMEM_MODULE_PARAMS[@]}"
-    fi
-}
-
-# Load the kernel modules and start persistenced.
-_load_driver() {
-    echo "Parsing kernel module parameters..."
-    _get_module_params
-
-    local nv_fw_search_path="$RUN_DIR/driver/lib/firmware"
-    local set_fw_path="true"
-    local fw_path_config_file="/sys/module/firmware_class/parameters/path"
-    for param in "${NVIDIA_MODULE_PARAMS[@]}"; do
-        if [[ "$param" == "NVreg_EnableGpuFirmware=0" ]]; then
-          set_fw_path="false"
-        fi
-    done
-
-    if [[ "$set_fw_path" == "true" ]]; then
-        echo "Configuring the following firmware search path in '$fw_path_config_file': $nv_fw_search_path"
-        if [[ ! -z $(grep '[^[:space:]]' $fw_path_config_file) ]]; then
-            echo "WARNING: A search path is already configured in $fw_path_config_file"
-            echo "         Retaining the current configuration"
-        else
-            echo -n "$nv_fw_search_path" > $fw_path_config_file || echo "WARNING: Failed to configure the firmware search path"
-        fi
-    fi
-
-    echo "Loading ipmi and i2c_core kernel modules..."
-    modprobe -a i2c_core ipmi_msghandler ipmi_devintf
-
-    echo "Loading NVIDIA driver kernel modules..."
-    set -o xtrace +o nounset
-    modprobe nvidia "${NVIDIA_MODULE_PARAMS[@]}"
-    modprobe nvidia-uvm "${NVIDIA_UVM_MODULE_PARAMS[@]}"
-    modprobe nvidia-modeset "${NVIDIA_MODESET_MODULE_PARAMS[@]}"
-    set +o xtrace -o nounset
-
-    if _gpu_direct_rdma_enabled; then
-        echo "Loading NVIDIA Peer Memory kernel module..."
-        set -o xtrace +o nounset
-        modprobe -a nvidia-peermem "${NVIDIA_PEERMEM_MODULE_PARAMS[@]}"
-        set +o xtrace -o nounset
-    fi
-
-    echo "Starting NVIDIA persistence daemon..."
-    nvidia-persistenced --persistence-mode
-
-    if [ "${DRIVER_TYPE}" = "vgpu" ]; then
-        echo "Copying gridd.conf..."
-        cp /drivers/gridd.conf /etc/nvidia/gridd.conf
-        if [ "${VGPU_LICENSE_SERVER_TYPE}" = "NLS" ]; then
-            echo "Copying ClientConfigToken..."
-            mkdir -p  /etc/nvidia/ClientConfigToken/
-            cp /drivers/ClientConfigToken/* /etc/nvidia/ClientConfigToken/
-        fi
-
-        echo "Starting nvidia-gridd.."
-        LD_LIBRARY_PATH=/usr/lib64/nvidia/gridd nvidia-gridd
-
-        # Start virtual topology daemon
-        _start_vgpu_topology_daemon
-    fi
-
-    if _assert_nvswitch_system; then
-        echo "Starting NVIDIA fabric manager daemon..."
-        nv-fabricmanager -c /usr/share/nvidia/nvswitch/fabricmanager.cfg
-    fi
-}
-
-# Stop persistenced and unload the kernel modules if they are currently loaded.
-_unload_driver() {
-    local rmmod_args=()
-    local nvidia_deps=0
-    local nvidia_refs=0
-    local nvidia_uvm_refs=0
-    local nvidia_modeset_refs=0
-    local nvidia_peermem_refs=0
-
-    echo "Stopping NVIDIA persistence daemon..."
-    if [ -f /var/run/nvidia-persistenced/nvidia-persistenced.pid ]; then
-        local pid=$(< /var/run/nvidia-persistenced/nvidia-persistenced.pid)
-
-        kill -SIGTERM "${pid}"
-        for i in $(seq 1 50); do
-            kill -0 "${pid}" 2> /dev/null || break
-            sleep 0.1
-        done
-        if [ $i -eq 50 ]; then
-            echo "Could not stop NVIDIA persistence daemon" >&2
-            return 1
-        fi
-    fi
-
-    if [ -f /var/run/nvidia-gridd/nvidia-gridd.pid ]; then
-        echo "Stopping NVIDIA grid daemon..."
-        local pid=$(< /var/run/nvidia-gridd/nvidia-gridd.pid)
-
-        kill -SIGTERM "${pid}"
-        for i in $(seq 1 10); do
-            kill -0 "${pid}" 2> /dev/null || break
-            sleep 0.1
-        done
-        if [ $i -eq 10 ]; then
-            echo "Could not stop NVIDIA Grid daemon" >&2
-            return 1
-        fi
-    fi
-
-    if [ -f /var/run/nvidia-fabricmanager/nv-fabricmanager.pid ]; then
-        echo "Stopping NVIDIA fabric manager daemon..."
-        local pid=$(< /var/run/nvidia-fabricmanager/nv-fabricmanager.pid)
-
-        kill -SIGTERM "${pid}"
-        for i in $(seq 1 50); do
-            kill -0 "${pid}" 2> /dev/null || break
-            sleep 0.1
-        done
-        if [ $i -eq 50 ]; then
-            echo "Could not stop NVIDIA fabric manager daemon" >&2
-            return 1
-        fi
-    fi
-
-    echo "Unloading NVIDIA driver kernel modules..."
-    if [ -f /sys/module/nvidia_modeset/refcnt ]; then
-        nvidia_modeset_refs=$(< /sys/module/nvidia_modeset/refcnt)
-        rmmod_args+=("nvidia-modeset")
-        ((++nvidia_deps))
-    fi
-    if [ -f /sys/module/nvidia_uvm/refcnt ]; then
-        nvidia_uvm_refs=$(< /sys/module/nvidia_uvm/refcnt)
-        rmmod_args+=("nvidia-uvm")
-        ((++nvidia_deps))
-    fi
-    if [ -f /sys/module/nvidia/refcnt ]; then
-        nvidia_refs=$(< /sys/module/nvidia/refcnt)
-        rmmod_args+=("nvidia")
-    fi
-    if [ -f /sys/module/nvidia_peermem/refcnt ]; then
-        nvidia_peermem_refs=$(< /sys/module/nvidia_peermem/refcnt)
-        rmmod_args+=("nvidia-peermem")
-        ((++nvidia_deps))
-    fi
-    if [ ${nvidia_refs} -gt ${nvidia_deps} ] || [ ${nvidia_uvm_refs} -gt 0 ] || [ ${nvidia_modeset_refs} -gt 0 ] || [ ${nvidia_peermem_refs} -gt 0 ]; then
-        echo "Could not unload NVIDIA driver kernel modules, driver is in use" >&2
-        return 1
-    fi
-
-    if [ ${#rmmod_args[@]} -gt 0 ]; then
-        rmmod ${rmmod_args[@]}
-    fi
-    return 0
-}
-
-# Link and install the kernel modules from a precompiled package using the nvidia-installer.
-_install_driver() {
-    local install_args=()
-
-    echo "Installing NVIDIA driver kernel modules..."
-    cd /usr/src/nvidia-${DRIVER_VERSION}
-    rm -rf /lib/modules/${KERNEL_VERSION}/video
-
-    if [ "${ACCEPT_LICENSE}" = "yes" ]; then
-        install_args+=("--accept-license")
-    fi
-    IGNORE_CC_MISMATCH=1 nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check -m=${KERNEL_TYPE} ${install_args[@]+"${install_args[@]}"}
-    # May need to add no-cc-check for Rhel, otherwise it complains about cc missing in path
-    # /proc/version and lib/modules/KERNEL_VERSION/proc are different, by default installer looks at /proc/ so, added the proc-mount-point
-    # TODO: remove the -a flag. its not needed. in the new driver version, license-acceptance is implicit
-    #nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check --no-cc-version-check --proc-mount-point /lib/modules/${KERNEL_VERSION}/proc ${install_args[@]+"${install_args[@]}"}
-}
-
-# Mount the driver rootfs into the run directory with the exception of sysfs.
-_mount_rootfs() {
-    echo "Mounting NVIDIA driver rootfs..."
-    mount --make-runbindable /sys
-    mount --make-private /sys
-    mkdir -p ${RUN_DIR}/driver
-    mount --rbind / ${RUN_DIR}/driver
-
-    echo "Check SELinux status"
-    if [ -e /sys/fs/selinux ]; then
-        echo "SELinux is enabled"
-        echo "Change device files security context for selinux compatibility"
-        chcon -R -t container_file_t ${RUN_DIR}/driver/dev
-    else
-        echo "SELinux is disabled, skipping..."
-    fi
-}
-
-# Unmount the driver rootfs from the run directory.
-_unmount_rootfs() {
-    echo "Unmounting NVIDIA driver rootfs..."
-    if findmnt -r -o TARGET | grep "${RUN_DIR}/driver" > /dev/null; then
-        umount -l -R ${RUN_DIR}/driver
-    fi
-}
-
-# Write a kernel postinst.d script to automatically precompile packages on kernel update (similar to DKMS).
-_write_kernel_update_hook() {
-    if [ ! -d ${KERNEL_UPDATE_HOOK%/*} ]; then
-        return
-    fi
-
-    echo "Writing kernel update hook..."
-    cat > ${KERNEL_UPDATE_HOOK} <<'EOF'
-#!/bin/bash
-
-set -eu
-trap 'echo "ERROR: Failed to update the NVIDIA driver" >&2; exit 0' ERR
-
-NVIDIA_DRIVER_PID=$(< /run/nvidia/nvidia-driver.pid)
-
-export "$(grep -z DRIVER_VERSION /proc/${NVIDIA_DRIVER_PID}/environ)"
-nsenter -t "${NVIDIA_DRIVER_PID}" -m -- nvidia-driver update --kernel "$1"
-EOF
-    chmod +x ${KERNEL_UPDATE_HOOK}
-}
-
-_shutdown() {
-    if _unload_driver; then
-        _unmount_rootfs
-        rm -f ${PID_FILE} ${KERNEL_UPDATE_HOOK}
-        return 0
-    fi
-    return 1
-}
-
-_find_vgpu_driver_version() {
-    local count=""
-    local version=""
-    local drivers_path="/drivers"
-
-    if [ "${DISABLE_VGPU_VERSION_CHECK}" = "true" ]; then
-        echo "vgpu version compatibility check is disabled"
-        return 0
-    fi
-    # check if vgpu devices are present
-    count=$(vgpu-util count)
-    if [ $? -ne 0 ]; then
-         echo "cannot find vgpu devices on host, pleae check /var/log/vgpu-util.log for more details..."
-         return 0
-    fi
-    NUM_VGPU_DEVICES=$(echo "$count" | awk -F= '{print $2}')
-    if [ $NUM_VGPU_DEVICES -eq 0 ]; then
-        # no vgpu devices found, treat as passthrough
-        return 0
-    fi
-    echo "found $NUM_VGPU_DEVICES vgpu devices on host"
-
-    # find compatible guest driver using driver catalog
-    if [ -d "/mnt/shared-nvidia-driver-toolkit/drivers" ]; then
-        drivers_path="/mnt/shared-nvidia-driver-toolkit/drivers"
-    fi
-    version=$(vgpu-util match -i "${drivers_path}" -c "${drivers_path}/vgpuDriverCatalog.yaml")
-    if [ $? -ne 0 ]; then
-        echo "cannot find match for compatible vgpu driver from available list, please check /var/log/vgpu-util.log for more details..."
-        return 1
-    fi
-    DRIVER_VERSION=$(echo "$version" | awk -F= '{print $2}')
-    echo "vgpu driver version selected: ${DRIVER_VERSION}"
-    return 0
-}
-
-_start_vgpu_topology_daemon() {
-    type nvidia-topologyd > /dev/null 2>&1 || return 0
-    echo "Starting nvidia-topologyd.."
-    nvidia-topologyd
-}
-
-_prepare() {
-    if [ "${DRIVER_TYPE}" = "vgpu" ]; then
-        _find_vgpu_driver_version || exit 1
-    fi
-
-    # Install the userspace components and copy the kernel module sources.
-    sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \
-        cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \
-        sh /tmp/install.sh nvinstall && \
-        mkdir -p /usr/src/nvidia-$DRIVER_VERSION && \
-        mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-$DRIVER_VERSION && \
-        sed '9,${/^\(kernel\|LICENSE\)/!d}' .manifest > /usr/src/nvidia-$DRIVER_VERSION/.manifest
-
-    echo -e "\n========== NVIDIA Software Installer ==========\n"
-    echo -e "Starting installation of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\n"
-}
-
-_prepare_exclusive() {
-    _prepare
-
-    exec 3> ${PID_FILE}
-    if ! flock -n 3; then
-        echo "An instance of the NVIDIA driver is already running, aborting"
-        exit 1
-    fi
-    echo $$ >&3
-
-    trap "echo 'Caught signal'; exit 1" HUP INT QUIT PIPE TERM
-    trap "_shutdown" EXIT
-
-    _unload_driver || exit 1
-    _unmount_rootfs
-}
-
-_build() {
-    # Install dependencies
-    if _kernel_requires_package; then
-        _update_package_cache
-        _install_prerequisites
-        _create_driver_package
-        #_remove_prerequisites
-        _cleanup_package_cache
-    fi
-
-    # Build the driver
-    _install_driver
-}
-
-_load() {
-    _load_driver
-    _mount_rootfs
-    _write_kernel_update_hook
-
-    echo "Done, now waiting for signal"
-    sleep infinity &
-    trap "echo 'Caught signal'; _shutdown && { kill $!; exit 0; }" HUP INT QUIT PIPE TERM
-    trap - EXIT
-    while true; do wait $! || continue; done
-    exit 0
-}
-
-init() {
-    _prepare_exclusive
-
-    _build
-
-    _load
-}
-
-build() {
-    _prepare
-
-    _build
-}
-
-load() {
-    _prepare_exclusive
-
-    _load
-}
-
-update() {
-    exec 3>&2
-    if exec 2> /dev/null 4< ${PID_FILE}; then
-        if ! flock -n 4 && read pid <&4 && kill -0 "${pid}"; then
-            exec > >(tee -a "/proc/${pid}/fd/1")
-            exec 2> >(tee -a "/proc/${pid}/fd/2" >&3)
-        else
-            exec 2>&3
-        fi
-        exec 4>&-
-    fi
-    exec 3>&-
-
-    # vgpu driver version is chosen dynamically during runtime, so pre-compile modules for
-    # only non-vgpu driver types
-    if [ "${DRIVER_TYPE}" != "vgpu" ]; then
-        # Install the userspace components and copy the kernel module sources.
-        if [ ! -e /usr/src/nvidia-${DRIVER_VERSION}/mkprecompiled ]; then
-            sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \
-                cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \
-                sh /tmp/install.sh nvinstall && \
-                mkdir -p /usr/src/nvidia-$DRIVER_VERSION && \
-                mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-$DRIVER_VERSION && \
-                sed '9,${/^\(kernel\|LICENSE\)/!d}' .manifest > /usr/src/nvidia-$DRIVER_VERSION/.manifest
-        fi
-    fi
-
-    echo -e "\n========== NVIDIA Software Updater ==========\n"
-    echo -e "Starting update of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\n"
-
-    trap "echo 'Caught signal'; exit 1" HUP INT QUIT PIPE TERM
-
-    _update_package_cache
-    _resolve_kernel_version || exit 1
-    _install_prerequisites
-    if _kernel_requires_package; then
-        _create_driver_package
-    fi
-    _remove_prerequisites
-    _cleanup_package_cache
-
-    echo "Done"
-    exit 0
-}
-
-# Wait for MOFED drivers to be loaded and load nvidia-peermem whenever it gets unloaded during MOFED driver updates
-reload_nvidia_peermem() {
-    if [ "$USE_HOST_MOFED" = "true" ]; then
-        until  lsmod | grep mlx5_core > /dev/null 2>&1 && [ -f /run/nvidia/validations/.driver-ctr-ready ];
-        do
-            echo "waiting for mellanox ofed and nvidia drivers to be installed"
-            sleep 10
-        done
-    else
-        # use driver readiness flag created by MOFED container
-        until  [ -f /run/mellanox/drivers/.driver-ready ] && [ -f /run/nvidia/validations/.driver-ctr-ready ];
-        do
-            echo "waiting for mellanox ofed and nvidia drivers to be installed"
-            sleep 10
-        done
-    fi
-    # get any parameters provided for nvidia-peermem
-    _get_module_params && set +o nounset
-    if chroot /run/nvidia/driver modprobe nvidia-peermem "${NVIDIA_PEERMEM_MODULE_PARAMS[@]}"; then
-        if [ -f /sys/module/nvidia_peermem/refcnt ]; then
-            echo "successfully loaded nvidia-peermem module, now waiting for signal"
-            sleep inf
-            trap "echo 'Caught signal'; exit 1" HUP INT QUIT PIPE TERM
-        fi
-    fi
-    echo "failed to load nvidia-peermem module"
-    exit 1
-}
-
-# probe by gpu-operator for liveness/startup checks for nvidia-peermem module to be loaded when MOFED drivers are ready
-probe_nvidia_peermem() {
-    if lsmod | grep mlx5_core > /dev/null 2>&1; then
-        if [ ! -f /sys/module/nvidia_peermem/refcnt ]; then
-            echo "nvidia-peermem module is not loaded"
-            return 1
-        fi
-    else
-        echo "MOFED drivers are not ready, skipping probe to avoid container restarts..."
-    fi
-    return 0
-}
-
-usage() {
-    cat >&2 <<EOF
-Usage: $0 COMMAND [ARG...]
-
-Commands:
-  init   [-a | --accept-license] [-m | --max-threads MAX_THREADS]
-  build  [-a | --accept-license] [-m | --max-threads MAX_THREADS]
-  load
-  update [-k | --kernel VERSION] [-s | --sign KEYID] [-t | --tag TAG] [-m | --max-threads MAX_THREADS]
-EOF
-    exit 1
-}
-
-if [ $# -eq 0 ]; then
-    usage
-fi
-command=$1; shift
-case "${command}" in
-    init) options=$(getopt -l accept-license,max-threads: -o am: -- "$@") ;;
-    build) options=$(getopt -l accept-license,tag:,max-threads: -o a:t:m: -- "$@") ;;
-    load) options="" ;;
-    update) options=$(getopt -l kernel:,sign:,tag:,max-threads: -o k:s:t:m: -- "$@") ;;
-    reload_nvidia_peermem) options="" ;;
-    probe_nvidia_peermem) options="" ;;
-    *) usage ;;
-esac
-if [ $? -ne 0 ]; then
-    usage
-fi
-eval set -- "${options}"
-
-ACCEPT_LICENSE=""
-MAX_THREADS=""
-KERNEL_VERSION=$(uname -r)
-PRIVATE_KEY=""
-PACKAGE_TAG=""
-
-for opt in ${options}; do
-    case "$opt" in
-    -a | --accept-license) ACCEPT_LICENSE="yes"; shift 1 ;;
-    -k | --kernel) KERNEL_VERSION=$2; shift 2 ;;
-    -m | --max-threads) MAX_THREADS=$2; shift 2 ;;
-    -s | --sign) PRIVATE_KEY=$2; shift 2 ;;
-    -t | --tag) PACKAGE_TAG=$2; shift 2 ;;
-    --) shift; break ;;
-    esac
-done
-if [ $# -ne 0 ]; then
-    usage
-fi
-
-_resolve_rhel_version || exit 1
-
-$command
-
-
-

使用官方的镜像来二次构建自定义镜像,如下是一个 Dockerfile 文件的内容:

-
FROM nvcr.io/nvidia/driver:535.183.06-rhel9.2
-COPY nvidia-driver /usr/local/bin
-RUN chmod +x /usr/local/bin/nvidia-driver
-CMD ["/bin/bash", "-c"]
-
-

构建命令并推送到火种集群:

-
docker build -t {火种registry}/nvcr.m.daocloud.io/nvidia/driver:535.183.06-01-rhel9.2 -f Dockerfile .
-docker push {火种registry}/nvcr.m.daocloud.io/nvidia/driver:535.183.06-01-rhel9.2
-
-

安装驱动

-
    -
  1. 安装 gpu-operator addon
  2. -
  3. 设置 driver.version=535.183.06-01
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html b/site/end-user/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html deleted file mode 100644 index ae5c887..0000000 --- a/site/end-user/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - -Ubuntu22.04 离线安装 gpu-operator 驱动 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

Ubuntu22.04 离线安装 gpu-operator 驱动

-

前提条件:已安装 gpu-operator v23.9.0+2 及更高版本

-

准备离线镜像

-
    -
  1. -

    查看内核版本

    -
    $ uname -r
    -5.15.0-78-generic
    -
    -
  2. -
  3. -

    查看内核对应的 GPU Driver 镜像版本, - https://catalog.ngc.nvidia.com/orgs/nvidia/containers/driver/tags。 - 使用内核查询镜像版本,通过 ctr export 保存镜像。

    -
    ctr i pull nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04
    -ctr i export --all-platforms driver.tar.gz nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 
    -
    -
  4. -
  5. -

    把镜像导入到火种集群的镜像仓库中

    -
    ctr i import driver.tar.gz
    -ctr i tag nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 {火种registry}/nvcr.m.daocloud.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04
    -ctr i push {火种registry}/nvcr.m.daocloud.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 --skip-verify=true
    -
    -
  6. -
-

安装驱动

-
    -
  1. 安装 gpu-operator addon
  2. -
  3. 若使用预编译模式,则设置 driver.usePrecompiled=true,并设置 driver.version=535,这里要注意,写的是 535,不是 535.104.12。(非预编译模式跳过此步,直接安装即可)
  4. -
-

安装驱动

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html b/site/end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html deleted file mode 100644 index 0c4425b..0000000 --- a/site/end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html +++ /dev/null @@ -1,604 +0,0 @@ - - - - - - - - - - - - -构建 CentOS 7.9 离线 yum 源 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

构建 CentOS 7.9 离线 yum 源

-

使用场景介绍

-

当工作节点的内核版本与全局服务集群的控制节点内核版本或 OS 类型不一致时,需要用户手动构建离线 yum 源。

-

本文介绍如何构建离线 yum 源, 并在安装 Gpu Operator 时,通过 RepoConfig.ConfigMapName 参数来使用。

-

前提条件

-
    -
  1. 用户已经在平台上安装了 v0.12.0 及以上版本的 addon 离线包。
  2. -
  3. 准备一个能够和待部署 GPU Operator 的集群网络能够联通的文件服务器,如 nginx 或 minio。
  4. -
  5. 准备一个能够访问互联网、待部署 GPU Operator 的集群和文件服务器的节点, - 且节点上已经完成 Docker 的安装。
  6. -
-

操作步骤

-

本文以内核版本为 3.10.0-1160.95.1.el7.x86_64 的 CentOS 7.9 节点为例,介绍如何构建 GPU operator 离线包的 yum 源。

-

检查集群节点的 OS 和内核版本

-

分别在全局服务集群的控制节点和待部署 GPU Operator 的节点执行如下命令,若两个节点的 OS 和内核版本一致则无需构建 yum 源, -可参考离线安装 GPU Operator 文档直接安装;若两个节点的 OS 或内核版本不一致,请执行下一步

-
    -
  1. -

    执行如下命令,查看集群下待部署 GPU Operator 节点的发行版名称和版本号。

    -
    cat /etc/redhat-release
    -
    -

    预期输出如下:

    -
    CentOS Linux release 7.9 (Core)
    -
    -

    输出结果为当前节点内核版本 CentOS 7.9

    -
  2. -
  3. -

    执行如下命令,查看集群下待部署 GPU Operator 节点的内核版本。

    -
    uname -a
    -
    -

    预期输出如下:

    -
    Linux localhost.localdomain 3.10.0-1160.95.1.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
    -
    -

    输出结果为当前节点内核版本 3.10.0-1160.el7.x86_64

    -
  4. -
-

制作离线 yum 源

-

在一个能够访问互联网和文件服务器的节点上进行操作。

-
    -
  1. -

    在一个能够访问互联网和文件服务器的节点上执行如下命令新建一个名为 yum.sh 的脚本文件。

    -
    vi yum.sh
    -
    -

    然后按下 i 键进入插入模式,输入以下内容:

    -
    export TARGET_KERNEL_VERSION=$1
    -
    -cat >> run.sh << \EOF
    -#! /bin/bash
    -echo "start install kernel repo"
    -echo ${KERNEL_VERSION}
    -mkdir centos-base
    -
    -if [ "$OS" -eq 7 ]; then
    -    yum install --downloadonly --downloaddir=./centos-base perl
    -    yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64
    -    yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64
    -    yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el7.x86_64
    -    yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el7.x86_64
    -    yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el7.x86_64
    -    yum install  -y --downloadonly --downloaddir=./centos-base groff-base
    -elif [ "$OS" -eq 8 ]; then
    -    yum install --downloadonly --downloaddir=./centos-base perl
    -    yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64
    -    yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64
    -    yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el8.x86_64
    -    yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el8.x86_64
    -    yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el8.x86_64
    -    yum install  -y --downloadonly --downloaddir=./centos-base groff-base
    -else
    -    echo "Error os version"
    -fi
    -
    -createrepo centos-base/
    -ls -lh centos-base/
    -tar -zcf centos-base.tar.gz centos-base/
    -echo "end install kernel repo"
    -EOF
    -
    -cat >> Dockerfile << EOF
    -FROM centos:7
    -ENV KERNEL_VERSION=""
    -ENV OS=7
    -RUN yum install -y createrepo
    -COPY run.sh .
    -ENTRYPOINT ["/bin/bash","run.sh"]
    -EOF
    -
    -docker build -t test:v1 -f Dockerfile .
    -docker run -e KERNEL_VERSION=$TARGET_KERNEL_VERSION --name centos7.9 test:v1
    -docker cp centos7.9:/centos-base.tar.gz .
    -tar -xzf centos-base.tar.gz
    -
    -

    按下 esc 键退出插入模式,然后输入 __ :wq__ 保存并退出。

    -
  2. -
  3. -

    运行 yum.sh 文件:

    -
    bash -x yum.sh TARGET_KERNEL_VERSION
    -
    -

    TARGET_KERNEL_VERSION 参数用于指定集群节点的内核版本,注意:发行版标识符(如 __ .el7.x86_64 __ )无需输入。 -例如:

    -
    bash -x yum.sh 3.10.0-1160.95.1
    -
    -
  4. -
-

至此,您已经生成了内核为 3.10.0-1160.95.1.el7.x86_64 的离线的 yum 源: centos-base

-

上传离线 yum 源到文件服务器

-

在一个能够访问互联网和文件服务器的节点上进行操作。主要用于将上一步中生成的 yum -源上传到可以被待部署 GPU Operator 的集群进行访问的文件服务器中。 -文件服务器可以为 Nginx 、 Minio 或其它支持 Http 协议的文件服务器。

-

本操作示例采用的是算丰 AI 算力平台火种节点内置的 Minio 作为文件服务器,Minio 相关信息如下:

-
    -
  • 访问地址: http://10.5.14.200:9000(一般为{火种节点 IP} + {9000 端口})
  • -
  • 登录用户名:rootuser
  • -
  • -

    登录密码:rootpass123

    -
  • -
  • -

    在节点当前路径下,执行如下命令将节点本地 mc 命令行工具和 minio 服务器建立链接。

    -
    mc config host add minio http://10.5.14.200:9000 rootuser rootpass123
    -
    -

    预期输出如下:

    -
    Added `minio` successfully.
    -
    -

    mc 命令行工具是 Minio 文件服务器提供的客户端命令行工具,详情请参考: -MinIO Client

    -
  • -
  • -

    在节点当前路径下,新建一个名为 centos-base 的存储桶(bucket)。

    -
    mc mb -p minio/centos-base
    -
    -

    预期输出如下:

    -
    Bucket created successfully __minio/centos-base__ .
    -
    -
  • -
  • -

    将存储桶 centos-base 的访问策略设置为允许公开下载。以便在后期安装 GPU-operator 时能够被访问。

    -
    mc anonymous set download minio/centos-base
    -
    -

    预期输出如下:

    -
    Access permission for `minio/centos-base` is set to `download` 
    -
    -
  • -
  • -

    在节点当前路径下,将步骤二生成的离线 yum 源文件 centos-base 复制到 minio 服务器的 minio/centos-base 存储桶中。

    -
    mc cp centos-base minio/centos-base --recursive
    -
    -
  • -
-

在集群创建配置项用来保存 yum 源信息

-

在待部署 GPU Operator 集群的控制节点上进行操作。

-
    -
  1. -

    执行如下命令创建名为 CentOS-Base.repo 的文件,用来指定 yum 源存储的配置信息。

    -
    # 文件名称必须为 CentOS-Base.repo,否则安装 gpu-operator 时无法被识别
    -cat > CentOS-Base.repo << EOF
    -[extension-0]
    -baseurl = http://10.5.14.200:9000/centos-base/centos-base #步骤三中,放置 yum 源的文件服务器地址
    -gpgcheck = 0
    -name = kubean extension 0
    -
    -[extension-1]
    -baseurl = http://10.5.14.200:9000/centos-base/centos-base #步骤三中,放置 yum 源的文件服务器地址
    -gpgcheck = 0
    -name = kubean extension 1
    -EOF
    -
    -
  2. -
  3. -

    基于创建的 CentOS-Base.repo 文件,在 gpu-operator 命名空间下,创建名为 local-repo-config 的配置文件:

    -
    kubectl create configmap local-repo-config  -n gpu-operator --from-file=CentOS-Base.repo=/etc/yum.repos.d/extension.repo
    -
    -

    预期输出如下:

    -
    configmap/local-repo-config created
    -
    -

    local-repo-config 配置文件用于在安装 gpu-operator 时,提供 RepoConfig.ConfigMapName 参数的值,配置文件名称用户可自定义。

    -
  4. -
  5. -

    查看 local-repo-config 的配置文件的内容:

    -
    kubectl get configmap local-repo-config  -n gpu-operator -oyaml
    -
    -

    预期输出如下:

    -
    apiVersion: v1
    -data:
    -CentOS-Base.repo: "[extension-0]\nbaseurl = http://10.6.232.5:32618/centos-base#步骤二中,放置 yum 源的文件服务器路径\ngpgcheck = 0\nname = kubean extension 0\n  \n[extension-1]\nbaseurl
    -    = http://10.6.232.5:32618/centos-base #步骤二中,放置 yum 源的文件服务器路径\ngpgcheck = 0\nname
    -    = kubean extension 1\n"
    -kind: ConfigMap
    -metadata:
    -creationTimestamp: "2023-10-18T01:59:02Z"
    -name: local-repo-config
    -namespace: gpu-operator
    -resourceVersion: "59445080"
    -uid: c5f0ebab-046f-442c-b932-f9003e014387
    -
    -
  6. -
-

至此,您已成功为待部署 GPU Operator 的集群创建了离线 yum 源配置文件。 -通过在离线安装 GPU Operator 时通过 RepoConfig.ConfigMapName 参数来使用。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html b/site/end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html deleted file mode 100644 index 7339aad..0000000 --- a/site/end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - - - -构建 Red Hat 8.4 离线 yum 源 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

构建 Red Hat 8.4 离线 yum 源

-

算丰 AI 算力平台预置了 CentOS 7.9,内核为 3.10.0-1160 的 GPU operator 离线包。其它 OS 类型的节点或内核需要用户手动构建离线 yum 源。

-

本文介绍如何基于全局服务集群任意节点构建 Red Hat 8.4 离线 yum 源包,并在安装 Gpu Operator 时,通过 RepoConfig.ConfigMapName 参数来使用。

-

前提条件

-
    -
  1. 用户已经在平台上安装了 v0.12.0 及以上版本的 addon 离线包。
  2. -
  3. 待部署 GPU Operator 的集群节点 OS 必须为 Red Hat 8.4,且内核版本完全一致。
  4. -
  5. 准备一个能够和待部署 GPU Operator 的集群网络能够联通的文件服务器,如 nginx 或 minio。
  6. -
  7. 准备一个能够访问互联网、待部署 GPU Operator 的集群和文件服务器的节点,且节点上已经完成 - Docker 的安装。
  8. -
  9. 全局服务集群的节点必须为 Red Hat 8.4 4.18.0-305.el8.x86_64。
  10. -
-

操作步骤

-

本文以 Red Hat 8.4 4.18.0-305.el8.x86_64 节点为例,介绍如何基于全局服务集群任意节点构建 Red Hat 8.4 离线 yum 源包, -并在安装 Gpu Operator 时,通过 RepoConfig.ConfigMapName 参数来使用。

-

下载火种节点中的 yum 源

-

以下操作在全局服务集群的 master 节点上执行。

-
    -
  1. -

    使用 ssh 或其它方式进入全局服务集群内任一节点执行如下命令:

    -
    cat /etc/yum.repos.d/extension.repo #查看 extension.repo 中的内容
    -
    -

    预期输出如下:

    -
    [extension-0]
    -baseurl = http://10.5.14.200:9000/kubean/redhat/$releasever/os/$basearch
    -gpgcheck = 0
    -name = kubean extension 0
    -
    -[extension-1]
    -baseurl = http://10.5.14.200:9000/kubean/redhat-iso/$releasever/os/$basearch/AppStream
    -gpgcheck = 0
    -name = kubean extension 1
    -
    -[extension-2]
    -baseurl = http://10.5.14.200:9000/kubean/redhat-iso/$releasever/os/$basearch/BaseOS
    -gpgcheck = 0
    -name = kubean extension 2
    -
    -
  2. -
  3. -

    root 路径下新建一个名为 redhat-base-repo 的文件夹

    -
    mkdir redhat-base-repo
    -
    -
  4. -
  5. -

    下载 yum 源中的 rpm 包到本地:

    -
    yum install yum-utils
    -
    -
  6. -
  7. -

    下载 extension-1 中的 rpm 包:

    -
    reposync  -p redhat-base-repo  -n --repoid=extension-1
    -
    -
  8. -
  9. -

    下载 extension-2 中的 rpm 包:

    -
    reposync  -p redhat-base-repo  -n --repoid=extension-2
    -
    -
  10. -
-

下载 elfutils-libelf-devel-0.187-4.el8.x86_64.rpm 包

-

以下操作在联网节点执行操作,在操作前,您需要保证联网节点和全局服务集群 master 节点间的网络联通性。

-
    -
  1. -

    在联网节点执行如下命令,下载 elfutils-libelf-devel-0.187-4.el8.x86_64.rpm 包:

    -
    wget https://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/elfutils-libelf-devel-0.187-4.el8.x86_64.rpm
    -
    -
  2. -
  3. -

    在当前目录下将 elfutils-libelf-devel-0.187-4.el8.x86_64.rpm 包传输至步骤一中的节点上:

    -
    scp  elfutils-libelf-devel-0.187-4.el8.x86_64.rpm user@ip:~/redhat-base-repo/extension-2/Packages/
    -
    -

    例如:

    -
    scp  elfutils-libelf-devel-0.187-4.el8.x86_64.rpm root@10.6.175.10:~/redhat-base-repo/extension-2/Packages/
    -
    -
  4. -
-

生成本地 yum repo

-

以下操作在步骤一中全局服务集群的 master 节点上执行。

-
    -
  1. -

    进入 yum repo 目录:

    -
    cd ~/redhat-base-repo/extension-1/Packages
    -cd ~/redhat-base-repo/extension-2/Packages
    -
    -
  2. -
  3. -

    生成目录 repo 索引:

    -
    yum install createrepo -y  # 若已安装 createrepo 可省略此步骤
    -createrepo_c ./
    -
    -
  4. -
-

至此,您已经生成了内核为 4.18.0-305.el8.x86_64 的离线的 yum 源: redhat-base-repo

-

将本地生成的 yum repo 上传至文件服务器

-

本操作示例采用的是算丰 AI 算力平台火种节点内置的 Minio 作为文件服务器,用户可基于自身情况选择文件服务器。Minio 相关信息如下:

-
    -
  • 访问地址: http://10.5.14.200:9000(一般为{火种节点 IP} + {9000 端口})
  • -
  • 登录用户名:rootuser
  • -
  • -

    登录密码:rootpass123

    -
  • -
  • -

    在节点当前路径下,执行如下命令将节点本地 mc 命令行工具和 minio 服务器建立链接。

    -
    mc config host add minio 文件服务器访问地址 用户名 密码
    -
    -

    例如:

    -
    mc config host add minio http://10.5.14.200:9000 rootuser rootpass123
    -
    -

    预期输出如下:

    -
    Added `minio` successfully.
    -
    -

    mc 命令行工具是 Minio 文件服务器提供的客户端命令行工具,详情请参考: -MinIO Client

    -
  • -
  • -

    在节点当前路径下,新建一个名为 redhat-base 的存储桶(bucket)。

    -
    mc mb -p minio/redhat-base
    -
    -

    预期输出如下:

    -
    Bucket created successfully `minio/redhat-base`.
    -
    -
  • -
  • -

    将存储桶 redhat-base 的访问策略设置为允许公开下载。以便在后期安装 GPU-operator 时能够被访问。

    -
    mc anonymous set download minio/redhat-base
    -
    -

    预期输出如下:

    -
    Access permission for `minio/redhat-base` is set to `download` 
    -
    -
  • -
  • -

    在节点当前路径下,将步骤二生成的离线 yum 源文件 redhat-base-repo 复制到 minio 服务器的 minio/redhat-base 存储桶中。

    -
    mc cp redhat-base-repo minio/redhat-base --recursive
    -
    -
  • -
-

在集群创建配置项用来保存 yum 源信息

-

本步骤在待部署 GPU Operator 集群的控制节点上进行操作。

-
    -
  1. -

    执行如下命令创建名为 redhat.repo 的文件,用来指定 yum 源存储的配置信息。

    -
    # 文件名称必须为 redhat.repo,否则安装 gpu-operator 时无法被识别
    -cat > redhat.repo << EOF
    -[extension-0]
    -baseurl = http://10.5.14.200:9000/redhat-base/redhat-base-repo/Packages #步骤一中,放置 yum 源的文件服务器地址
    -gpgcheck = 0
    -name = kubean extension 0
    -
    -[extension-1]
    -baseurl = http://10.5.14.200:9000/redhat-base/redhat-base-repo/Packages #步骤一中,放置 yum 源的文件服务器地址
    -gpgcheck = 0
    -name = kubean extension 1
    -EOF
    -
    -
  2. -
  3. -

    基于创建的 redhat.repo 文件,在 gpu-operator 命名空间下,创建名为 local-repo-config 的配置文件:

    -
    kubectl create configmap local-repo-config  -n gpu-operator --from-file=./redhat.repo 
    -
    -

    预期输出如下:

    -
    configmap/local-repo-config created
    -
    -

    local-repo-config 配置文件用于在安装 gpu-operator 时,提供 RepoConfig.ConfigMapName 参数的值,配置文件名称用户可自定义。

    -
  4. -
  5. -

    查看 local-repo-config 的配置文件的内容:

    -
    kubectl get configmap local-repo-config  -n gpu-operator -oyaml
    -
    -
  6. -
-

至此,您已成功为待部署 GPU Operator 的集群创建了离线 yum 源配置文件。 -通过在离线安装 GPU Operator 时通过 RepoConfig.ConfigMapName 参数来使用。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/vgpu/hami.html b/site/end-user/kpanda/gpu/nvidia/vgpu/hami.html deleted file mode 100644 index ac94d52..0000000 --- a/site/end-user/kpanda/gpu/nvidia/vgpu/hami.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - -构建 vGPU 显存超配镜像 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

构建 vGPU 显存超配镜像

-

Hami 项目中 vGPU 显存超配的功能已经不存在,目前使用有显存超配的 libvgpu.so 文件重新构建。

-
Dockerfile
FROM docker.m.daocloud.io/projecthami/hami:v2.3.11
-COPY libvgpu.so /k8s-vgpu/lib/nvidia/
-
-

执行以下命令构建镜像:

-
docker build -t release.daocloud.io/projecthami/hami:v2.3.11 -f Dockerfile .
-
-

然后把镜像 push 到 release.daocloud.io 中。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/vgpu/vgpu_addon.html b/site/end-user/kpanda/gpu/nvidia/vgpu/vgpu_addon.html deleted file mode 100644 index 64aa9fe..0000000 --- a/site/end-user/kpanda/gpu/nvidia/vgpu/vgpu_addon.html +++ /dev/null @@ -1,416 +0,0 @@ - - - - - - - - - - - - -安装 NVIDIA vGPU Addon - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

安装 NVIDIA vGPU Addon

-

如需将一张 NVIDIA 虚拟化成多个虚拟 GPU,并将其分配给不同的云主机或用户,您可以使用 NVIDIA 的 vGPU 能力。 -本节介绍如何在算丰 AI 算力平台中安装 vGPU 插件,这是使用 NVIDIA vGPU 能力的前提。

-

前提条件

- -

操作步骤

-
    -
  1. -

    功能模块路径: 容器管理 -> 集群管理 ,点击目标集群的名称,从左侧导航栏点击 Helm 应用 -> Helm 模板 -> 搜索 nvidia-vgpu

    -

    找到 nvidia-vgpu

    -
  2. -
  3. -

    在安装 vGPU 的过程中提供了几个基本修改的参数,如果需要修改高级参数点击 YAML 列进行修改:

    -
      -
    • -

      deviceCoreScaling :NVIDIA 装置算力使用比例,预设值是 1。可以大于 1(启用虚拟算力,实验功能)。如果我们配置 devicePlugin.deviceCoreScaling 参数为 S,在部署了我们装置插件的 Kubernetes 集群中,这张 GPU 分出的 vGPU 将总共包含 S * 100% 算力。

      -
    • -
    • -

      deviceMemoryScaling :NVIDIA 装置显存使用比例,预设值是 1。可以大于 1(启用虚拟显存,实验功能)。 - 对于有 M 显存大小的 NVIDIA GPU,如果我们配置 devicePlugin.deviceMemoryScaling 参数为 S, - 在部署了我们装置插件的 Kubernetes 集群中,这张 GPU 分出的 vGPU 将总共包含 S * M 显存。

      -
    • -
    • -

      deviceSplitCount :整数类型,预设值是 10。GPU 的分割数,每一张 GPU 都不能分配超过其配置数目的任务。 - 若其配置为 N 的话,每个 GPU 上最多可以同时存在 N 个任务。

      -
    • -
    • -

      Resources :就是对应 vgpu-device-plugin 和 vgpu-schedule pod 的资源使用量。

      -
    • -
    • -

      ServiceMonitor :默认不开启,开启后可前往可观测性模块查看 vGPU 相关监控。如需开启,请确保 insight-agent 已安装并处于运行状态,否则将导致 NVIDIA vGPU Addon 安装失败。

      -
    • -
    -

    修改参数

    -
  4. -
  5. -

    安装成功之后会在指定 Namespace 下出现如下两个类型的 Pod,即表示 NVIDIA vGPU 插件已安装成功:

    -

    出现两个 Pod

    -
  6. -
-

安装成功后,部署应用可使用 vGPU 资源

-
-

Note

-

NVIDIA vGPU Addon 不支持从老版本 v2.0.0 直接升级为最新版 v2.0.0+1; -如需升级,请卸载老版本后重新安装。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html b/site/end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html deleted file mode 100644 index bfe191e..0000000 --- a/site/end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html +++ /dev/null @@ -1,444 +0,0 @@ - - - - - - - - - - - - -应用使用 Nvidia vGPU - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

应用使用 Nvidia vGPU

-

本节介绍如何在算丰 AI 算力平台使用 vGPU 能力。

-

前提条件

- -

操作步骤

-

界面使用 vGPU

-
    -
  1. -

    确认集群是否已检测 GPU 卡。点击对应 集群 -> 集群设置 -> Addon 插件 ,查看是否已自动启用并自动检测对应 GPU 类型。 - 目前集群会自动启用 GPU ,并且设置 GPU 类型为 Nvidia vGPU

    -

    安装 vgpu

    -
  2. -
  3. -

    部署工作负载,点击对应 集群 -> 工作负载 ,通过镜像方式部署工作负载,选择类型(Nvidia vGPU)之后,会自动出现如下几个参数需要填写:

    -
      -
    • 物理卡数量(nvidia.com/vgpu):表示当前 Pod 需要挂载几张物理卡,输入值必须为整数且 小于等于 宿主机上的卡数量。
    • -
    • GPU 算力(nvidia.com/gpucores): 表示每张卡占用的 GPU 算力,值范围为 0-100; - 如果配置为 0, 则认为不强制隔离;配置为100,则认为独占整张卡。
    • -
    • GPU 显存(nvidia.com/gpumem): 表示每张卡占用的 GPU 显存,值单位为 MB,最小值为 1,最大值为整卡的显存值。
    • -
    -
    -

    如果上述值配置的有问题则会出现调度失败,资源分配不了的情况。

    -
    -

    部署工作负载

    -
  4. -
-

YAML 配置使用 vGPU

-

参考如下工作负载配置,在资源申请和限制配置中增加 nvidia.com/vgpu: '1' 参数来配置应用使用物理卡的数量。

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: full-vgpu-demo
-  namespace: default
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: full-vgpu-demo
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: full-vgpu-demo
-    spec:
-      containers:
-        - name: full-vgpu-demo1
-          image: chrstnhntschl/gpu_burn
-          resources:
-            limits:
-              nvidia.com/gpucores: '20'   # 申请每张卡占用 20% 的 GPU 算力
-              nvidia.com/gpumem: '200'   # 申请每张卡占用 200MB 的显存
-              nvidia.com/vgpu: '1'   # 申请GPU的数量
-          imagePullPolicy: Always
-      restartPolicy: Always
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html b/site/end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html deleted file mode 100644 index 309c100..0000000 --- a/site/end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - - - - - - - - -构建 Red Hat 7.9 离线 yum 源 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

构建 Red Hat 7.9 离线 yum 源

-

使用场景介绍

-

算丰 AI 算力平台预置了 CentOS 7.9,内核为 3.10.0-1160 的 GPU Operator 离线包。其它 OS 类型的节点或内核需要用户手动构建离线 yum 源。

-

本文介绍如何基于全局服务集群任意节点构建 Red Hat 7.9 离线 yum 源包,并在安装 Gpu Operator 时使用 RepoConfig.ConfigMapName 参数。

-

前提条件

-
    -
  1. 待部署 GPU Operator 的集群节点 OS 必须为 Red Hat 7.9,且内核版本完全一致
  2. -
  3. 准备一个能够与待部署 GPU Operator 的集群网络联通的文件服务器,如 nginx 或 minio
  4. -
  5. 准备一个能够访问互联网、待部署 GPU Operator 的集群和文件服务器的节点, - 且节点上已经完成 Docker 的安装
  6. -
  7. 全局服务集群的节点必须为 Red Hat 7.9
  8. -
-

操作步骤

-

1. 构建相关内核版本的离线 Yum 源

-
    -
  1. -

    下载 rhel7.9 ISO

    -

    下载 rhel7.9 ISO

    -
  2. -
  3. -

    下载与 Kubean 版本对应的的 rhel7.9 ospackage

    -

    容器管理 的全局服务集群中找到 Helm 应用 ,搜索 kubean,可查看 kubean 的版本号。

    -

    kubean

    -

    kubean的代码仓库 中下载该版本的 rhel7.9 ospackage。

    -

    kubean 的代码仓库

    -
  4. -
  5. -

    通过安装器导入离线资源

    -

    参考导入离线资源文档

    -
  6. -
-

2. 下载 Red Hat 7.9 OS 的离线驱动镜像

-

点击查看下载地址

-

driveimage

-

3. 向火种节点仓库上传 Red Hat GPU Opreator 离线镜像

-

参考向火种节点仓库上传 Red Hat GPU Opreator 离线镜像

-
-

Note

-

此参考以 rhel8.4 为例,请注意修改成 rhel7.9。

-
-

4. 在集群创建配置项用来保存 Yum 源信息

-

在待部署 GPU Operator 集群的控制节点上运行以下命令。

-
    -
  1. -

    执行如下命令创建名为 CentOS-Base.repo 的文件,用来指定 yum 源存储的配置信息。

    -
    # 文件名称必须为 CentOS-Base.repo,否则安装 gpu-operator 时无法被识别
    -cat > CentOS-Base.repo <<  EOF
    -[extension-0]
    -baseurl = http://10.5.14.200:9000/centos-base/centos-base # 火种节点的的文件服务器地址,一般为{火种节点 IP} + {9000 端口}
    -gpgcheck = 0
    -name = kubean extension 0
    -
    -[extension-1]
    -baseurl = http://10.5.14.200:9000/centos-base/centos-base # 火种节点的的文件服务器地址,一般为{火种节点 IP} + {9000 端口}
    -gpgcheck = 0
    -name = kubean extension 1
    -EOF
    -
    -
  2. -
  3. -

    基于创建的 CentOS-Base.repo 文件,在 gpu-operator 命名空间下,创建名为 local-repo-config 的配置文件:

    -
    kubectl create configmap local-repo-config -n gpu-operator --from-file=CentOS-Base.repo=/etc/yum.repos.d/extension.repo
    -
    -

    预期输出如下:

    -
    configmap/local-repo-config created
    -
    -

    local-repo-config 配置文件用于在安装 gpu-operator 时,提供 RepoConfig.ConfigMapName 参数的值,配置文件名称用户可自定义。

    -
  4. -
  5. -

    查看 local-repo-config 的配置文件的内容:

    -
    kubectl get configmap local-repo-config -n gpu-operator -oyaml
    -
    -

    预期输出如下:

    -
    local-repo-config.yaml
    apiVersion: v1
    -data:
    -  CentOS-Base.repo: "[extension-0]\nbaseurl = http://10.6.232.5:32618/centos-base # 步骤 2 中,放置 yum 源的文件服务器路径 \ngpgcheck = 0\nname = kubean extension 0\n  \n[extension-1]\nbaseurl
    -  = http://10.6.232.5:32618/centos-base # 步骤 2 中,放置 yum 源的文件服务器路径 \ngpgcheck = 0\nname
    -  = kubean extension 1\n"
    -kind: ConfigMap
    -metadata:
    -  creationTimestamp: "2023-10-18T01:59:02Z"
    -  name: local-repo-config
    -  namespace: gpu-operator
    -  resourceVersion: "59445080"
    -  uid: c5f0ebab-046f-442c-b932-f9003e014387
    -
    -
  6. -
-

至此,您已成功为待部署 GPU Operator 的集群创建了离线 yum 源配置文件。 -其中在离线安装 GPU Operator 时使用了 RepoConfig.ConfigMapName 参数。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/vgpu_quota.html b/site/end-user/kpanda/gpu/vgpu_quota.html deleted file mode 100644 index b2b8bf7..0000000 --- a/site/end-user/kpanda/gpu/vgpu_quota.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - - - - - - - - -GPU 配额管理 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

GPU 配额管理

-

本节介绍如何在算丰 AI 算力平台使用 vGPU 能力。

-

前提条件

-

当前集群已通过 Operator 或手动方式部署对应类型 GPU 驱动(NVIDIA GPU、NVIDIA MIG、天数、昇腾)

-

操作步骤

-
    -
  1. -

    进入 Namespaces 中,点击 配额管理 可以配置当前 Namespace 可以使用的 GPU 资源。

    -

    配额管理

    -
  2. -
  3. -

    当前命名空间配额管理覆盖的卡类型为:NVIDIA vGPU、NVIDIA MIG、天数、昇腾。

    -

    NVIDIA vGPU 配额管理 :配置具体可以使用的配额,会创建 ResourcesQuota CR:

    -
      -
    • 物理卡数量(nvidia.com/vgpu):表示当前 POD 需要挂载几张物理卡,并且要 小于等于 宿主机上的卡数量。
    • -
    • GPU 算力(nvidia.com/gpucores):表示每张卡占用的 GPU 算力,值范围为 0-100;如果配置为 0,则认为不强制隔离;配置为 100,则认为独占整张卡。
    • -
    • GPU 显存(nvidia.com/gpumem):表示每张卡占用的 GPU 显存,值单位为 MB,最小值为 1,最大值为整卡的显存值。
    • -
    -

    卡类型

    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/volcano/drf.html b/site/end-user/kpanda/gpu/volcano/drf.html deleted file mode 100644 index 237d506..0000000 --- a/site/end-user/kpanda/gpu/volcano/drf.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - - - - - - -DRF(Dominant Resource Fairness) 调度策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

DRF(Dominant Resource Fairness) 调度策略

-

DRF 调度策略认为占用资源较少的任务具有更高的优先级。这样能够满足更多的作业,不会因为一个胖业务, -饿死大批小业务。DRF 调度算法能够确保在多种类型资源共存的环境下,尽可能满足分配的公平原则。

-

使用方式

-

DRF 调度策略默认已启用,无需任何配置。

-
kubectl -n volcano-system view configmaps volcano-scheduler-configmap
-
-

使用案例

-

在 AI 训练,或大数据计算中,通过有限运行使用资源少的任务,这样可以让集群资源使用率更高,而且还能避免小任务被饿死。 -如下创建两个 Job,一个是小资源需求,一个是大资源需求,可以看出来小资源需求的 Job 优先运行起来。

-
cat <<EOF | kubectl apply -f -  
-apiVersion: batch.volcano.sh/v1alpha1  
-kind: Job  
-metadata:  
-  name: small-resource  
-spec:  
-  schedulerName: volcano  
-  minAvailable: 4  
-  priorityClassName: small-resource  
-  tasks:  
-    - replicas: 4  
-      name: "test"  
-      template:  
-        spec:  
-          containers:  
-            - image: alpine  
-              command: ["/bin/sh", "-c", "sleep 1000"]  
-              imagePullPolicy: IfNotPresent  
-              name: running  
-              resources:  
-                requests:  
-                  cpu: "1"  
-          restartPolicy: OnFailure  
----  
-apiVersion: batch.volcano.sh/v1alpha1  
-kind: Job  
-metadata:  
-  name: large-resource  
-spec:  
-  schedulerName: volcano  
-  minAvailable: 4  
-  priorityClassName: large-resource  
-  tasks:  
-    - replicas: 4  
-      name: "test"  
-      template:  
-        spec:  
-          containers:  
-            - image: alpine  
-              command: ["/bin/sh", "-c", "sleep 1000"]  
-              imagePullPolicy: IfNotPresent  
-              name: running  
-              resources:  
-                requests:  
-                  cpu: "2"  
-          restartPolicy: OnFailure  
-EOF
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/volcano/numa.html b/site/end-user/kpanda/gpu/volcano/numa.html deleted file mode 100644 index 8308c32..0000000 --- a/site/end-user/kpanda/gpu/volcano/numa.html +++ /dev/null @@ -1,605 +0,0 @@ - - - - - - - - - - - - -NUMA 亲和性调度 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

NUMA 亲和性调度

-

NUMA 节点是 Non-Uniform Memory Access(非统一内存访问)架构中的一个基本组成单元,一个 Node 节点是多个 NUMA 节点的集合, -在多个 NUMA 节点之间进行内存访问时会产生延迟,开发者可以通过优化任务调度和内存分配策略,来提高内存访问效率和整体性能。

-

使用场景

-

Numa 亲和性调度的常见场景是那些对 CPU 参数敏感/调度延迟敏感的计算密集型作业。如科学计算、视频解码、动漫动画渲染、大数据离线处理等具体场景。

-

调度策略

-

Pod 调度时可以采用的 NUMA 放置策略,具体策略对应的调度行为请参见 Pod 调度行为说明。

-
    -
  • single-numa-node:Pod 调度时会选择拓扑管理策略已经设置为 single-numa-node 的节点池中的节点,且 CPU 需要放置在相同 NUMA 下,如果节点池中没有满足条件的节点,Pod 将无法被调度。
  • -
  • restricted:Pod 调度时会选择拓扑管理策略已经设置为 restricted 节点池的节点,且 CPU 需要放置在相同的 NUMA 集合下,如果节点池中没有满足条件的节点,Pod 将无法被调度。
  • -
  • best-effort:Pod 调度时会选择拓扑管理策略已经设置为 best-effort 节点池的节点,且尽量将 CPU 放置在相同 NUMA 下,如果没有节点满足这一条件,则选择最优节点进行放置。
  • -
-

调度原理

-

当Pod设置了拓扑策略时,Volcano 会根据 Pod 设置的拓扑策略预测匹配的节点列表。 -调度过程如下:

-
    -
  1. -

    根据 Pod 设置的 Volcano 拓扑策略,筛选具有相同策略的节点。

    -
  2. -
  3. -

    在设置了相同策略的节点中,筛选 CPU 拓扑满足该策略要求的节点进行调度。

    -
  4. -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pod 可配置的拓扑策略1. 根据 Pod 设置的拓扑策略,筛选可调度的节点2. 进一步筛选 CPU 拓扑满足策略的节点进行调度
none针对配置了以下几种拓扑策略的节点,调度时均无筛选行为。none:可调度;best-effort:可调度;restricted:可调度;single-numa-node:可调度-
best-effort筛选拓扑策略同样为“best-effort”的节点:none:不可调度;best-effort:可调度;restricted:不可调度;single-numa-node:不可调度尽可能满足策略要求进行调度:优先调度至单 NUMA 节点,如果单 NUMA 节点无法满足 CPU 申请值,允许调度至多个 NUMA 节点。
restricted筛选拓扑策略同样为“restricted”的节点:none:不可调度;best-effort:不可调度;restricted:可调度;single-numa-node:不可调度严格限制的调度策略:单 NUMA 节点的CPU容量上限大于等于 CPU 的申请值时,仅允许调度至单 NUMA 节点。此时如果单 NUMA 节点剩余的 CPU 可使用量不足,则 Pod 无法调度。单 NUMA 节点的 CPU 容量上限小于 CPU 的申请值时,可允许调度至多个 NUMA 节点。
single-numa-node筛选拓扑策略同样为“single-numa-node”的节点:none:不可调度;best-effort:不可调度;restricted:不可调度;single-numa-node:可调度仅允许调度至单 NUMA 节点。
-

配置 NUMA 亲和调度策略

-
    -
  1. -

    在 Job 中配置 policies

    -
    task: 
    -  - replicas: 1 
    -    name: "test-1" 
    -    topologyPolicy: single-numa-node 
    -  - replicas: 1 
    -    name: "test-2" 
    -    topologyPolicy: best-effort 
    -
    -
  2. -
  3. -

    修改 kubelet 的调度策略,设置 --topology-manager-policy 参数,支持的策略有四种:

    -
      -
    • none(默认)
    • -
    • best-effort
    • -
    • restricted
    • -
    • single-numa-node
    • -
    -
  4. -
-

使用案例

-
    -
  1. -

    示例一:在无状态工作负载中配置 NUMA 亲和性。

    -
    kind: Deployment  
    -apiVersion: apps/v1  
    -metadata:  
    -  name: numa-tset  
    -spec:  
    -  replicas: 1  
    -  selector:  
    -    matchLabels:  
    -      app: numa-tset  
    -  template:  
    -    metadata:  
    -      labels:  
    -        app: numa-tset  
    -      annotations:  
    -        volcano.sh/numa-topology-policy: single-numa-node    # set the topology policy  
    -    spec:  
    -      containers:  
    -        - name: container-1  
    -          image: nginx:alpine  
    -          resources:  
    -            requests:  
    -              cpu: 2           # 必须为整数,且需要与limits中一致  
    -              memory: 2048Mi  
    -            limits:  
    -              cpu: 2           # 必须为整数,且需要与requests中一致  
    -              memory: 2048Mi  
    -      imagePullSecrets:  
    -      - name: default-secret
    -
    -
  2. -
  3. -

    示例二:创建一个 Volcano Job,并使用 NUMA 亲和性。

    -
    apiVersion: batch.volcano.sh/v1alpha1  
    -kind: Job  
    -metadata:  
    -  name: vj-test  
    -spec:  
    -  schedulerName: volcano  
    -  minAvailable: 1  
    -  tasks:  
    -    - replicas: 1  
    -      name: "test"  
    -      topologyPolicy: best-effort   # set the topology policy for task  
    -      template:  
    -        spec:  
    -          containers:  
    -            - image: alpine  
    -              command: ["/bin/sh", "-c", "sleep 1000"]  
    -              imagePullPolicy: IfNotPresent  
    -              name: running  
    -              resources:  
    -                limits:  
    -                  cpu: 20  
    -                  memory: "100Mi"  
    -          restartPolicy: OnFailure
    -
    -
  4. -
-

NUMA 调度分析

-

假设 NUMA 节点情况如下:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
工作节点节点策略拓扑管理器策略NUMA 节点 0 上的可分配 CPUNUMA 节点 1 上的可分配 CPU
node-1single-numa-node16U16U
node-2best-effort16U16U
node-3best-effort20U20U
-
    -
  • 示例一中,Pod 的 CPU 申请值为 2U,设置拓扑策略为“single-numa-node”,因此会被调度到相同策略的 node-1。
  • -
  • 示例二中,Pod 的 CPU 申请值为20U,设置拓扑策略为“best-effort”,它将被调度到 node-3, - 因为 node-3 可以在单个 NUMA 节点上分配 Pod 的 CPU 请求,而 node-2 需要在两个 NUMA 节点上执行此操作。
  • -
-

查看当前节点的 CPU 概况

-

您可以通过 lscpu 命令查看当前节点的 CPU 概况:

-
lscpu 
-... 
-CPU(s): 32 
-NUMA node(s): 2 
-NUMA node0 CPU(s): 0-15 
-NUMA node1 CPU(s): 16-31
-
-

查看当前节点的 CPU 分配

-

然后查看 NUMA 节点使用情况:

-
# 查看当前节点的 CPU 分配
-cat /var/lib/kubelet/cpu_manager_state
-{"policyName":"static","defaultCpuSet":"0,10-15,25-31","entries":{"777870b5-c64f-42f5-9296-688b9dc212ba":{"container-1":"16-24"},"fb15e10a-b6a5-4aaa-8fcd-76c1aa64e6fd":{"container-1":"1-9"}},"checksum":318470969}
-
-

以上示例中表示,节点上运行了两个容器,一个占用了 NUMA node0 的1-9 核,另一个占用了 NUMA node1 的 16-24 核。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html b/site/end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html deleted file mode 100644 index 8d346a7..0000000 --- a/site/end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html +++ /dev/null @@ -1,537 +0,0 @@ - - - - - - - - - - - - -使用 Volcano 的 Gang Scheduler - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

使用 Volcano 的 Gang Scheduler

-

Gang 调度策略是 volcano-scheduler 的核心调度算法之一,它满足了调度过程中的 “All or nothing” 的调度需求, -避免 Pod 的任意调度导致集群资源的浪费。具体算法是,观察 Job 下的 Pod 已调度数量是否满足了最小运行数量, -当 Job 的最小运行数量得到满足时,为 Job 下的所有 Pod 执行调度动作,否则,不执行。

-

使用场景

-

基于容器组概念的 Gang 调度算法十分适合需要多进程协作的场景。AI 场景往往包含复杂的流程, -Data Ingestion、Data Analysts、Data Splitting、Trainer、Serving、Logging 等, -需要一组容器进行协同工作,就很适合基于容器组的 Gang 调度策略。 -MPI 计算框架下的多线程并行计算通信场景,由于需要主从进程协同工作,也非常适合使用 Gang 调度策略。 -容器组下的容器高度相关也可能存在资源争抢,整体调度分配,能够有效解决死锁。

-

在集群资源不足的场景下,Gang 的调度策略对于集群资源的利用率的提升是非常明显的。 -比如集群现在只能容纳 2 个 Pod,现在要求最小调度的 Pod 数为 3。 -那现在这个 Job 的所有的 Pod 都会 pending,直到集群能够容纳 3 个 Pod,Pod 才会被调度。 -有效防止调度部分 Pod,不满足要求又占用了资源,使其他 Job 无法运行的情况。

-

概念说明

-

Gang Scheduler 是 Volcano 的核心的调度插件,安装 Volcano 后默认就开启了。 -在创建工作负载时只需要指定调度器的名称为 Volcano 即可。

-

Volcano 是以 PodGroup 为单位进行调度的,在创建工作负载时,并不需要手动创建 PodGroup 资源, -Volcano 会根据工作负载的信息自动创建。下面是一个 PodGroup 的示例:

-
apiVersion: scheduling.volcano.sh/v1beta1
-kind: PodGroup
-metadata:
-  name: test
-  namespace: default
-spec:
-  minMember: 1  # (1)!
-  minResources:  # (2)!
-    cpu: "3"
-    memory: "2048Mi"
-  priorityClassName: high-prority # (3)!
-  queue: default # (4)!
-
-
    -
  1. 表示该 PodGroup 下 最少 需要运行的 Pod 或任务数量。 - 如果集群资源不满足 miniMember 数量任务的运行需求,调度器将不会调度任何一个该 PodGroup 内的任务。
  2. -
  3. 表示运行该 PodGroup 所需要的最少资源。当集群可分配资源不满足 minResources 时,调度器将不会调度任何一个该 PodGroup 内的任务。
  4. -
  5. 表示该 PodGroup 的优先级,用于调度器为该 queue 中所有 PodGroup 进行调度时进行排序。 - system-node-criticalsystem-cluster-critical 是 2 个预留的值,表示最高优先级。不特别指定时,默认使用 default 优先级或 zero 优先级。
  6. -
  7. 表示该 PodGroup 所属的 queue。queue 必须提前已创建且状态为 open。
  8. -
-

使用案例

-

在 MPI 计算框架下的多线程并行计算通信场景中,我们要确保所有的 Pod 都能调度成功才能保证任务正常完成。 -设置 minAvailable 为 4,表示要求 1 个 mpimaster 和 3 个 mpiworker 能运行。

-
apiVersion: batch.volcano.sh/v1alpha1
-kind: Job
-metadata:
-  name: lm-mpi-job
-  labels:
-    "volcano.sh/job-type": "MPI"
-spec:
-  minAvailable: 4
-  schedulerName: volcano
-  plugins:
-    ssh: []
-    svc: []
-  policies:
-    - event: PodEvicted
-      action: RestartJob
-  tasks:
-    - replicas: 1
-      name: mpimaster
-      policies:
-        - event: TaskCompleted
-          action: CompleteJob
-      template:
-        spec:
-          containers:
-            - command:
-                - /bin/sh
-                - -c
-                - |
-                  MPI_HOST=`cat /etc/volcano/mpiworker.host | tr "\n" ","`;
-                  mkdir -p /var/run/sshd; /usr/sbin/sshd;
-                  mpiexec --allow-run-as-root --host ${MPI_HOST} -np 3 mpi_hello_world;
-              image: docker.m.daocloud.io/volcanosh/example-mpi:0.0.1
-              name: mpimaster
-              ports:
-                - containerPort: 22
-                  name: mpijob-port
-              workingDir: /home
-              resources:
-                requests:
-                  cpu: "500m"
-                limits:
-                  cpu: "500m"
-          restartPolicy: OnFailure
-          imagePullSecrets:
-            - name: default-secret
-    - replicas: 3
-      name: mpiworker
-      template:
-        spec:
-          containers:
-            - command:
-                - /bin/sh
-                - -c
-                - |
-                  mkdir -p /var/run/sshd; /usr/sbin/sshd -D;
-              image: docker.m.daocloud.io/volcanosh/example-mpi:0.0.1
-              name: mpiworker
-              ports:
-                - containerPort: 22
-                  name: mpijob-port
-              workingDir: /home
-              resources:
-                requests:
-                  cpu: "1000m"
-                limits:
-                  cpu: "1000m"
-          restartPolicy: OnFailure
-          imagePullSecrets:
-            - name: default-secret
-
-

生成 PodGroup 的资源:

-
apiVersion: scheduling.volcano.sh/v1beta1
-kind: PodGroup
-metadata:
-  annotations:
-  creationTimestamp: "2024-05-28T09:18:50Z"
-  generation: 5
-  labels:
-    volcano.sh/job-type: MPI
-  name: lm-mpi-job-9c571015-37c7-4a1a-9604-eaa2248613f2
-  namespace: default
-  ownerReferences:
-  - apiVersion: batch.volcano.sh/v1alpha1
-    blockOwnerDeletion: true
-    controller: true
-    kind: Job
-    name: lm-mpi-job
-    uid: 9c571015-37c7-4a1a-9604-eaa2248613f2
-  resourceVersion: "25173454"
-  uid: 7b04632e-7cff-4884-8e9a-035b7649d33b
-spec:
-  minMember: 4
-  minResources:
-    count/pods: "4"
-    cpu: 3500m
-    limits.cpu: 3500m
-    pods: "4"
-    requests.cpu: 3500m
-  minTaskMember:
-    mpimaster: 1
-    mpiworker: 3
-  queue: default
-status:
-  conditions:
-  - lastTransitionTime: "2024-05-28T09:19:01Z"
-    message: '3/4 tasks in gang unschedulable: pod group is not ready, 1 Succeeded,
-      3 Releasing, 4 minAvailable'
-    reason: NotEnoughResources
-    status: "True"
-    transitionID: f875efa5-0358-4363-9300-06cebc0e7466
-    type: Unschedulable
-  - lastTransitionTime: "2024-05-28T09:18:53Z"
-    reason: tasks in gang are ready to be scheduled
-    status: "True"
-    transitionID: 5a7708c8-7d42-4c33-9d97-0581f7c06dab
-    type: Scheduled
-  phase: Pending
-  succeeded: 1
-
-

从 PodGroup 可以看出,通过 ownerReferences 关联到工作负载,并设置最小运行的 Pod 数为 4。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/volcano/volcano_binpack.html b/site/end-user/kpanda/gpu/volcano/volcano_binpack.html deleted file mode 100644 index 80e2e24..0000000 --- a/site/end-user/kpanda/gpu/volcano/volcano_binpack.html +++ /dev/null @@ -1,509 +0,0 @@ - - - - - - - - - - - - -使用 Volcano Binpack 调度策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
- -
-
-
-

使用 Volcano Binpack 调度策略

-

Binpack 调度算法的目标是尽量把已被占用的节点填满(尽量不往空白节点分配)。具体实现上,Binpack 调度算法会给投递的节点打分, -分数越高表示节点的资源利用率越高。通过尽可能填满节点,将应用负载靠拢在部分节点,这种调度算法能够尽可能减小节点内的碎片, -在空闲的机器上为申请了更大资源请求的 Pod 预留足够的资源空间,使集群下空闲资源得到最大化的利用。

-

前置条件

-

预先在算丰 AI 算力平台上安装 Volcano 组件

-

Binpack 算法原理

-

Binpack 在对一个节点打分时,会根据 Binpack 插件自身权重和各资源设置的权重值综合打分。 -首先,对 Pod 请求资源中的每类资源依次打分,以 CPU 为例,CPU 资源在待调度节点的得分信息如下:

-
CPU.weight * (request + used) / allocatable
-
-

即 CPU 权重值越高,得分越高,节点资源使用量越满,得分越高。Memory、GPU 等资源原理类似。其中:

-
    -
  • CPU.weight 为用户设置的 CPU 权重
  • -
  • request 为当前 Pod 请求的 CPU 资源量
  • -
  • used 为当前节点已经分配使用的 CPU 量
  • -
  • allocatable 为当前节点 CPU 可用总量
  • -
-

通过 Binpack 策略的节点总得分如下:

-
binpack.weight - (CPU.score + Memory.score + GPU.score) / (CPU.weight + Memory.weight + GPU.weight) - 100
-
-

即 Binpack 插件的权重值越大,得分越高,某类资源的权重越大,该资源在打分时的占比越大。其中:

-
    -
  • binpack.weight 为用户设置的装箱调度策略权重
  • -
  • CPU.score 为 CPU 资源得分,CPU.weight 为 CPU 权重
  • -
  • Memory.score 为 Memory 资源得分,Memory.weight 为 Memory 权重
  • -
  • GPU.score 为 GPU 资源得分,GPU.weight 为 GPU 权重
  • -
-

原理

-

如图所示,集群中存在两个节点,分别为 Node1 和 Node 2,在调度 Pod 时,Binpack 策略对两个节点分别打分。 -假设集群中 CPU.weight 配置为 1,Memory.weight 配置为 1,GPU.weight 配置为 2,binpack.weight 配置为 5。

-
    -
  1. -

    Binpack 对 Node 1 的资源打分,各资源的计算公式为:

    -
      -
    • -

      CPU Score:

      -

      CPU.weight - (request + used) / allocatable = 1 - (2 + 4) / 8 = 0.75

      -
    • -
    • -

      Memory Score:

      -

      Memory.weight - (request + used) / allocatable = 1 - (4 + 8) / 16 = 0.75

      -
    • -
    • -

      GPU Score:

      -

      GPU.weight - (request + used) / allocatable = 2 - (4 + 4) / 8 = 2

      -
    • -
    -
  2. -
  3. -

    节点总得分的计算公式为:

    -
    binpack.weight - (CPU.score + Memory.score + GPU.score) / (CPU.weight + Memory.weight + GPU.weight) - 100
    -
    -

    假设 binpack.weight 配置为 5,Node 1 在 Binpack 策略下的得分为:

    -
    5 - (0.75 + 0.75 + 2) / (1 + 1 + 2) - 100 = 437.5
    -
    -
  4. -
  5. -

    Binpack 对 Node 2 的资源打分:

    -
      -
    • -

      CPU Score:

      -

      CPU.weight - (request + used) / allocatable = 1 - (2 + 6) / 8 = 1

      -
    • -
    • -

      Memory Score:

      -

      Memory.weight - (request + used) / allocatable = 1 - (4 + 8) / 16 = 0.75

      -
    • -
    • -

      GPU Score:

      -

      GPU.weight - (request + used) / allocatable = 2 - (4 + 4) / 8 = 2

      -
    • -
    -
  6. -
  7. -

    Node 2 在 Binpack 策略下的得分为:

    -
    5 - (1 + 0.75 + 2) / (1 + 1 + 2) - 100 = 468.75
    -
    -
  8. -
-

综上,Node 2 得分大于 Node 1,按照 Binpack 策略,Pod 将会优先调度至 Node 2。

-

使用案例

-

Binpack 调度插件在安装 Volcano 的时候默认就会开启;如果用户没有配置权重,则使用如下默认的配置权重。

-
- plugins:
-    - name: binpack
-      arguments:
-        binpack.weight: 1
-        binpack.cpu: 1
-        binpack.memory: 1
-
-

默认权重不能体现堆叠特性,因此需要修改为 binpack.weight: 10

-
kubectl -n volcano-system edit configmaps volcano-scheduler-configmap
-
-
- plugins:
-    - name: binpack
-      arguments:
-        binpack.weight: 10
-        binpack.cpu: 1
-        binpack.memory: 1
-        binpack.resources: nvidia.com/gpu, example.com/foo
-        binpack.resources.nvidia.com/gpu: 2
-        binpack.resources.example.com/foo: 3
-
-

改好之后重启 volcano-scheduler Pod 使其生效。

-

创建如下的 Deployment。

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: binpack-test
-  labels:
-    app: binpack-test
-spec:
-  replicas: 2
-  selector:
-    matchLabels:
-      app: test
-  template:
-    metadata:
-      labels:
-        app: test
-    spec:
-      schedulerName: volcano
-      containers:
-        - name: test
-          image: busybox
-          imagePullPolicy: IfNotPresent
-          command: ["sh", "-c", 'echo "Hello, Kubernetes!" && sleep 3600']
-          resources:
-            requests:
-              cpu: 500m
-            limits:
-              cpu: 500m
-
-

在两个 Node 的集群上可以看到 Pod 被调度到一个 Node 上。

-

结果

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/volcano/volcano_priority.html b/site/end-user/kpanda/gpu/volcano/volcano_priority.html deleted file mode 100644 index aef13ed..0000000 --- a/site/end-user/kpanda/gpu/volcano/volcano_priority.html +++ /dev/null @@ -1,541 +0,0 @@ - - - - - - - - - - - - -优先级抢占(Preemption scheduling)策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

优先级抢占(Preemption scheduling)策略

-

Volcano 通过 Priority 插件实现了优先级抢占策略,即 Preemption scheduling 策略。在集群资源有限且多个 Job 等待调度时, -如果使用 Kubernetes 默认调度器,可能会导致具有更多 Pod 数量的 Job 分得更多资源。而 Volcano-scheduler 提供了算法,支持不同的 Job 以 fair-share 的形式共享集群资源。

-

Priority 插件允许用户自定义 Job 和 Task 的优先级,并根据需求在不同层次上定制调度策略。 -例如,对于金融场景、物联网监控场景等需要较高实时性的应用,Priority 插件能够确保其优先得到调度。

-

使用方式

-

优先级的决定基于配置的 PriorityClass 中的 Value 值,值越大优先级越高。默认已启用,无需修改。可通过以下命令确认或修改。

-
kubectl -n volcano-system edit configmaps volcano-scheduler-configmap
-
-

使用案例

-

假设集群中存在两个空闲节点,并有三个优先级不同的工作负载:high-priority、med-priority 和 low-priority。 -当 high-priority 工作负载运行并占满集群资源后,再提交 med-priority 和 low-priority 工作负载。 -由于集群资源全部被更高优先级的工作负载占用,med-priority 和 low-priority 工作负载将处于 pending 状态。 -当 high-priority 工作负载结束后,根据优先级调度原则,med-priority 工作负载将优先被调度。

-
    -
  1. -

    通过 priority.yaml 创建 3 个优先级定义,分别为:high-priority,med-priority,low-priority。

    -

    查看 priority.yaml
    cat <<EOF | kubectl apply -f - 
    -apiVersion: scheduling.k8s.io/v1 
    -kind: PriorityClass 
    -items: 
    -  - metadata: 
    -      name: high-priority 
    -    value: 100 
    -    globalDefault: false 
    -    description: "This priority class should be used for volcano job only." 
    -  - metadata: 
    -      name: med-priority 
    -    value: 50 
    -    globalDefault: false 
    -    description: "This priority class should be used for volcano job only." 
    -  - metadata: 
    -      name: low-priority 
    -    value: 10 
    -    globalDefault: false 
    -    description: "This priority class should be used for volcano job only." 
    -EOF
    -
    -2. 查看优先级定义信息。

    -

    kubectl get PriorityClass
    -
    -
    NAME                      VALUE        GLOBAL-DEFAULT   AGE  
    -high-priority             100          false            97s  
    -low-priority              10           false            97s  
    -med-priority              50           false            97s  
    -system-cluster-critical   2000000000   false            6d6h  
    -system-node-critical      2000001000   false            6d6h
    -

    -
  2. -
  3. -

    创建高优先级工作负载 high-priority-job,占用集群的全部资源。

    -
    查看 high-priority-job
    cat <<EOF | kubectl apply -f -  
    -apiVersion: batch.volcano.sh/v1alpha1  
    -kind: Job  
    -metadata:  
    -  name: priority-high  
    -spec:  
    -  schedulerName: volcano  
    -  minAvailable: 4  
    -  priorityClassName: high-priority  
    -  tasks:  
    -    - replicas: 4  
    -      name: "test"  
    -      template:  
    -        spec:  
    -          containers:  
    -            - image: alpine  
    -              command: ["/bin/sh", "-c", "sleep 1000"]  
    -              imagePullPolicy: IfNotPresent  
    -              name: running  
    -              resources:  
    -                requests:  
    -                  cpu: "4"  
    -          restartPolicy: OnFailure  
    -EOF
    -
    -

    通过 kubectl get pod 查看 Pod运行 信息:

    -

    kubectl get pods
    -
    -
    NAME                   READY   STATUS    RESTARTS   AGE  
    -priority-high-test-0   1/1     Running   0          3s  
    -priority-high-test-1   1/1     Running   0          3s  
    -priority-high-test-2   1/1     Running   0          3s  
    -priority-high-test-3   1/1     Running   0          3s
    -

    -

    此时,集群节点资源已全部被占用。

    -
  4. -
  5. -

    创建中优先级工作负载 med-priority-job 和低优先级工作负载 low-priority-job。

    -
    med-priority-job
    cat <<EOF | kubectl apply -f -  
    -apiVersion: batch.volcano.sh/v1alpha1  
    -kind: Job  
    -metadata:  
    -  name: priority-medium  
    -spec:  
    -  schedulerName: volcano  
    -  minAvailable: 4  
    -  priorityClassName: med-priority  
    -  tasks:  
    -    - replicas: 4  
    -      name: "test"  
    -      template:  
    -        spec:  
    -          containers:  
    -            - image: alpine  
    -              command: ["/bin/sh", "-c", "sleep 1000"]  
    -              imagePullPolicy: IfNotPresent  
    -              name: running  
    -              resources:  
    -                requests:  
    -                  cpu: "4"  
    -          restartPolicy: OnFailure  
    -EOF
    -
    -
    low-priority-job
    cat <<EOF | kubectl apply -f -  
    -apiVersion: batch.volcano.sh/v1alpha1  
    -kind: Job  
    -metadata:  
    -  name: priority-low  
    -spec:  
    -  schedulerName: volcano  
    -  minAvailable: 4  
    -  priorityClassName: low-priority  
    -  tasks:  
    -    - replicas: 4  
    -      name: "test"  
    -      template:  
    -        spec:  
    -          containers:  
    -            - image: alpine  
    -              command: ["/bin/sh", "-c", "sleep 1000"]  
    -              imagePullPolicy: IfNotPresent  
    -              name: running  
    -              resources:  
    -                requests:  
    -                  cpu: "4"  
    -          restartPolicy: OnFailure  
    -EOF
    -
    -

    通过 kubectl get pod 查看 Pod 运行信息,集群资源不足,Pod 处于 Pending 状态:

    -

    kubectl get pods
    -
    -
    NAME                     READY   STATUS    RESTARTS   AGE  
    -priority-high-test-0     1/1     Running   0          3m29s  
    -priority-high-test-1     1/1     Running   0          3m29s  
    -priority-high-test-2     1/1     Running   0          3m29s  
    -priority-high-test-3     1/1     Running   0          3m29s  
    -priority-low-test-0      0/1     Pending   0          2m26s  
    -priority-low-test-1      0/1     Pending   0          2m26s  
    -priority-low-test-2      0/1     Pending   0          2m26s  
    -priority-low-test-3      0/1     Pending   0          2m26s  
    -priority-medium-test-0   0/1     Pending   0          2m36s  
    -priority-medium-test-1   0/1     Pending   0          2m36s  
    -priority-medium-test-2   0/1     Pending   0          2m36s  
    -priority-medium-test-3   0/1     Pending   0          2m36s
    -

    -
  6. -
  7. -

    删除 high_priority_job 工作负载,释放集群资源,med_priority_job 会被优先调度。 - 执行 kubectl delete -f high_priority_job.yaml 释放集群资源,查看 Pod 的调度信息:

    -

    kubectl get pods
    -
    -
    NAME                     READY   STATUS    RESTARTS   AGE  
    -priority-low-test-0      0/1     Pending   0          5m18s  
    -priority-low-test-1      0/1     Pending   0          5m18s  
    -priority-low-test-2      0/1     Pending   0          5m18s  
    -priority-low-test-3      0/1     Pending   0          5m18s  
    -priority-medium-test-0   1/1     Running   0          5m28s  
    -priority-medium-test-1   1/1     Running   0          5m28s  
    -priority-medium-test-2   1/1     Running   0          5m28s  
    -priority-medium-test-3   1/1     Running   0          5m28s
    -

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/gpu/volcano/volcano_user_guide.html b/site/end-user/kpanda/gpu/volcano/volcano_user_guide.html deleted file mode 100644 index 9a1c874..0000000 --- a/site/end-user/kpanda/gpu/volcano/volcano_user_guide.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - - - - - - - -安装 Volcano - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
- -
-
-
-
-

安装 Volcano

-

随着 Kubernetes(K8s)成为云原生应用编排与管理的首选平台,众多应用正积极向 K8s 迁移。 -在人工智能与机器学习领域,由于这些任务通常涉及大量计算,开发者倾向于在 Kubernetes 上构建 AI 平台, -以充分利用其在资源管理、应用编排及运维监控方面的优势。

-

然而,Kubernetes 的默认调度器主要针对长期运行的服务设计,对于 AI、大数据等需要批量和弹性调度的任务存在诸多不足。 -例如,在资源竞争激烈的情况下,默认调度器可能导致资源分配不均,进而影响任务的正常执行。

-

以 TensorFlow 作业为例,其包含 PS(参数服务器)和 Worker 两种角色,两者需协同工作才能完成任务。 -若仅部署单一角色,作业将无法运行。而默认调度器对 Pod 的调度是逐个进行的,无法感知 TFJob 中 PS 和 Worker 的依赖关系。 -在高负载情况下,这可能导致多个作业各自分配到部分资源,但均无法完成,从而造成资源浪费。

-

Volcano 的调度策略优势

-

Volcano 提供了多种调度策略,以应对上述挑战。其中,Gang-scheduling 策略能确保分布式机器学习训练过程中多个任务(Pod)同时启动, -避免死锁;Preemption scheduling 策略则允许高优先级作业在资源不足时抢占低优先级作业的资源,确保关键任务优先完成。

-

此外,Volcano 与 Spark、TensorFlow、PyTorch 等主流计算框架无缝对接,并支持 CPU 和 GPU 等异构设备的混合调度,为 AI 计算任务提供了全面的优化支持。

-

接下来,我们将介绍如何安装和使用 Volcano,以便您能够充分利用其调度策略优势,优化 AI 计算任务。

-

安装 Volcano

-
    -
  1. -

    集群详情 -> Helm 应用 -> Helm 模板 中找到 Volcano 并安装。

    -

    Volcano helm 模板

    -

    安装 Volcano

    -
  2. -
  3. -

    检查并确认 Volcano 是否安装完成,即 volcano-admission、volcano-controllers、volcano-scheduler 组件是否正常运行。

    -

    Volcano 组件

    -
  4. -
-

通常 Volcano 会和 AI Lab 平台配合使用,以实现数据集、Notebook、任务训练的整个开发、训练流程的有效闭环。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/helm/Import-addon.html b/site/end-user/kpanda/helm/Import-addon.html deleted file mode 100644 index c1683f0..0000000 --- a/site/end-user/kpanda/helm/Import-addon.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - - - - - -将自定义 Helm 应用导入系统内置 Addon - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
- -
-
-
-
-

将自定义 Helm 应用导入系统内置 Addon

-

本文从离线和在线两种环境说明如何将 Helm 应用导入到系统内置的 Addon 中。

-

离线环境

-

离线环境指的是无法连通互联网或封闭的私有网络环境。

-

前提条件

-
    -
  • 存在可以运行的 charts-syncer。 - 若没有,可点击下载
  • -
  • Helm Chart 已经完成适配 charts-syncer。 - 即在 Helm Chart 内添加了 .relok8s-images.yaml 文件。该文件需要包含 Chart 中所有使用到镜像, - 也可以包含 Chart 中未直接使用的镜像,类似 Operator 中使用的镜像。
  • -
-
-

Note

-
    -
  • 如何编写 Chart 可参考 image-hints-file。 - 要求镜像的 registry 和 repository 必须分开,因为 load 镜像时需替换或修改 registry/repository。
  • -
  • 安装器所在的火种集群已安装 charts-syncer。 - 若将自定义 Helm 应用导入安装器所在火种集群,可跳过下载直接适配; - 若未安装 charts-syncer二进制文件, - 可立即下载
  • -
-
-

同步 Helm Chart

-
    -
  1. 进入容器管理 -> Helm 应用 -> Helm 仓库,搜索 addon,获取内置仓库地址和用户名/密码(系统内置仓库默认用户名/密码为 rootuser/rootpass123)。
  2. -
-

helmlist

-

helmdetail

-
    -
  1. -

    同步 Helm Chart 到容器管理内置仓库 Addon

    -
      -
    • -

      编写如下配置文件,可以根据具体配置修改,并保存为 sync-dao-2048.yaml

      -
      source:  # helm charts 源信息
      -  repo:
      -    kind: HARBOR # 也可以是任何其他支持的 Helm Chart 仓库类别,比如 CHARTMUSEUM
      -    url: https://release-ci.daocloud.io/chartrepo/community #  需更改为 chart repo url
      -    #auth: # 用户名/密码,若没有设置密码可以不填写
      -      #username: "admin"
      -      #password: "Harbor12345"
      -charts:  # 需要同步
      -  - name: dao-2048 # helm charts 信息,若不填写则同步源 helm repo 内所有 charts
      -    versions:
      -      - 1.4.1
      -target:  # helm charts 目标信息
      -  containerRegistry: 10.5.14.40 # 镜像仓库 url
      -  repo:
      -    kind: CHARTMUSEUM # 也可以是任何其他支持的 Helm Chart 仓库类别,比如 HARBOR
      -    url: http://10.5.14.40:8081 #  需更改为正确 chart repo url,可以通过 helm repo add $HELM-REPO 验证地址是否正确
      -    auth: # 用户名/密码,若没有设置密码可以不填写
      -      username: "rootuser"
      -      password: "rootpass123"
      -  containers:
      -    # kind: HARBOR # 若镜像仓库为 HARBOR 且希望 charts-syncer 自动创建镜像 Repository 则填写该字段  
      -    # auth: # 用户名/密码,若没有设置密码可以不填写 
      -      # username: "admin"
      -      # password: "Harbor12345"
      -
      -# leverage .relok8s-images.yaml file inside the Charts to move the container images too
      -relocateContainerImages: true
      -
      -
    • -
    • -

      执行 charts-syncer 命令同步 Chart 及其包含的镜像

      -
      charts-syncer sync --config sync-dao-2048.yaml --insecure --auto-create-repository
      -
      -

      预期输出为:

      -
      I1222 15:01:47.119777    8743 sync.go:45] Using config file: "examples/sync-dao-2048.yaml"
      -W1222 15:01:47.234238    8743 syncer.go:263] Ignoring skipDependencies option as dependency sync is not supported if container image relocation is true or syncing from/to intermediate directory
      -I1222 15:01:47.234685    8743 sync.go:58] There is 1 chart out of sync!
      -I1222 15:01:47.234706    8743 sync.go:66] Syncing "dao-2048_1.4.1" chart...
      -.relok8s-images.yaml hints file found
      -Computing relocation...
      -
      -Relocating dao-2048@1.4.1...
      -Pushing 10.5.14.40/daocloud/dao-2048:v1.4.1...
      -Done
      -Done moving /var/folders/vm/08vw0t3j68z9z_4lcqyhg8nm0000gn/T/charts-syncer869598676/dao-2048-1.4.1.tgz
      -
      -
    • -
    -
  2. -
  3. -

    待上一步执行完成后,进入容器管理 -> Helm 应用 -> Helm 仓库,找到对应 Addon, - 在操作栏点击同步仓库,回到 Helm 模板就可以看到上传的 Helm 应用

    -

    helm同步

    -

    详情2048

    -
  4. -
  5. -

    后续可正常进行安装、升级、卸载

    -

    安装升级

    -
  6. -
-

在线环境

-

在线环境的 Helm Repo 地址为 release.daocloud.io。 -如果用户无权限添加 Helm Repo,则无法将自定义 Helm 应用导入系统内置 Addon。 -您可以添加自己搭建的 Helm 仓库,然后按照离线环境中同步 Helm Chart 的步骤将您的 Helm 仓库集成到平台使用。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/helm/helm-app.html b/site/end-user/kpanda/helm/helm-app.html deleted file mode 100644 index dd36046..0000000 --- a/site/end-user/kpanda/helm/helm-app.html +++ /dev/null @@ -1,837 +0,0 @@ - - - - - - - - - - - - - - -管理 Helm 应用 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

管理 Helm 应用

-

容器管理模块支持对 Helm 进行界面化管理,包括使用 Helm 模板创建 Helm 实例、自定义 Helm 实例参数、对 Helm 实例进行全生命周期管理等功能。

-

本节将以 cert-manager 为例,介绍如何通过容器管理界面创建并管理 Helm 应用。

-

前提条件

- -

安装 Helm 应用

-

参照以下步骤安装 Helm 应用。

-
    -
  1. -

    点击一个集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,依次点击 Helm 应用 -> Helm 模板 ,进入 Helm 模板页面。

    -

    在 Helm 模板页面选择名为 addonHelm 仓库,此时界面上将呈现 addon 仓库下所有的 Helm chart 模板。 -点击名称为 cert-manager 的 Chart。

    -

    找到 chart

    -
  4. -
  5. -

    在安装页面,能够看到 Chart 的相关详细信息,在界面右上角选择需要安装的版本,点击 安装 按钮。此处选择 v1.9.1 版本进行安装。

    -

    点击安装

    -
  6. -
  7. -

    配置 名称命名空间版本信息 ,也可以在下方的 参数配置 区域通过修改 YAML 来自定义参数。点击 确定

    -

    填写参数

    -
  8. -
  9. -

    系统将自动返回 Helm 应用列表,新创建的 Helm 应用状态为 安装中 ,等待一段时间后状态变为 运行中

    -

    查看状态

    -
  10. -
-

更新 Helm 应用

-

当我们通过界面完成一个 Helm 应用的安装后,我们可以对 Helm 应用执行更新操作。注意:只有通过界面安装的 Helm 应用才支持使用界面进行更新操作。

-

参照以下步骤更新 Helm 应用。

-
    -
  1. -

    点击一个集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 Helm 应用 ,进入 Helm 应用列表页面。

    -

    在 Helm 应用列表页选择需要更新的 Helm 应用,点击列表右侧的 操作按钮,在下拉选择中选择 更新 操作。

    -

    点击更新

    -
  4. -
  5. -

    点击 更新 按钮后,系统将跳转至更新界面,您可以根据需要对 Helm 应用进行更新,此处我们以更新 dao-2048 这个应用的 http 端口为例。

    -

    更新页面

    -
  6. -
  7. -

    修改完相应参数后。您可以在参数配置下点击 变化 按钮,对比修改前后的文件,确定无误后,点击底部 确定 按钮,完成 Helm 应用的更新。

    -

    对比变化

    -
  8. -
  9. -

    系统将自动返回 Helm 应用列表,右上角弹窗提示 更新成功

    -

    更新成功

    -
  10. -
-

查看 Helm 操作记录

-

Helm 应用的每次安装、更新、删除都有详细的操作记录和日志可供查看。

-
    -
  1. -

    在左侧导航栏,依次点击 集群运维 -> 最近操作 ,然后在页面上方选择 Helm 操作 标签页。每一条记录对应一次安装/更新/删除操作。

    -

    helm 操作

    -
  2. -
  3. -

    如需查看每一次操作的详细日志:在列表右侧点击 ,在弹出菜单中选择 日志

    -

    选择日志

    -
  4. -
  5. -

    此时页面下方将以控制台的形式展示详细的运行日志。

    -

    查看运行日志

    -
  6. -
-

删除 Helm 应用

-

参照以下步骤删除 Helm 应用。

-
    -
  1. -

    找到待删除的 Helm 应用所在的集群,点击集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,点击 Helm 应用 ,进入 Helm 应用列表页面。

    -

    在 Helm 应用列表页选择您需要删除的 Helm 应用,点击列表右侧的 操作按钮,在下拉选择中选择 删除

    -

    点击删除

    -
  4. -
  5. -

    在弹窗内输入 Helm 应用的名称进行确认,然后点击 删除 按钮。

    -

    确认删除

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/helm/helm-repo.html b/site/end-user/kpanda/helm/helm-repo.html deleted file mode 100644 index 984bcd3..0000000 --- a/site/end-user/kpanda/helm/helm-repo.html +++ /dev/null @@ -1,847 +0,0 @@ - - - - - - - - - - - - - - -管理 Helm 仓库 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

管理 Helm 仓库

-

Helm 仓库是用来存储和发布 Chart 的存储库。Helm 应用模块支持通过 HTTP(s) 协议来访问存储库中的 Chart 包。系统默认内置了下表所示的 4 个 Helm 仓库以满足企业生产过程中的常见需求。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
仓库描述示例
partner由生态合作伙伴所提供的各类优质特色 Charttidb
system系统核心功能组件及部分高级功能所必需依赖的 Chart,如必需安装 insight-agent 才能够获取集群的监控信息Insight
addon业务场景中常见的 Chartcert-manager
communityKubernetes 社区较为热门的开源组件 ChartIstio
-

除上述预置仓库外,您也可以自行添加第三方 Helm 仓库。本文将介绍如何添加、更新第三方 Helm 仓库。

-

前提条件

- -

引入第三方 Helm 仓库

-

下面以 Kubevela 公开的镜像仓库为例,引入 Helm 仓库并管理。

-
    -
  1. -

    找到需要引入第三方 Helm 仓库的集群,点击集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,依次点击 Helm 应用 -> Helm 仓库 ,进入 Helm 仓库页面。

    -

    helm仓库

    -
  4. -
  5. -

    在 Helm 仓库页面点击 创建仓库 按钮,进入创建仓库页面,按照下表配置相关参数。

    -
      -
    • 仓库名称:设置仓库名称。最长 63 个字符,只能包含小写字母、数字及分隔符 - ,且必须以小写字母或数字开头并结尾,例如 kubevela
    • -
    • 仓库地址:用来指向目标 Helm 仓库的 http(s)地址。例如 https://charts.kubevela.net/core
    • -
    • 跳过 TLS 验证: 如果添加的 Helm 仓库为 https 地址且需跳过 TLS 验证,可以勾选此选项,默认为不勾选
    • -
    • 认证方式:连接仓库地址后用来进行身份校验的方式。对于公开仓库,可以选择 None ,私有的仓库需要输入用户名/密码以进行身份校验
    • -
    • 标签:为该 Helm 仓库添加标签。例如 key: repo4;value: Kubevela
    • -
    • 注解:为该 Helm 仓库添加注解。例如 key: repo4;value: Kubevela
    • -
    • 描述:为该 Helm 仓库添加描述。例如:这是一个 Kubevela 公开 Helm 仓库
    • -
    -

    填写参数

    -
  6. -
  7. -

    点击 确定 ,完成 Helm 仓库的创建。页面会自动跳转至 Helm 仓库列表。

    -

    确定

    -
  8. -
-

更新 Helm 仓库

-

当 Helm 仓库的地址信息发生变化时,可以更新 Helm 仓库的地址、认证方式、标签、注解及描述信息。

-
    -
  1. -

    找到待更新仓库所在的集群,点击集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,依次点击 Helm 应用 -> Helm 仓库 ,进入 Helm 仓库列表页面。

    -

    helm仓库

    -
  4. -
  5. -

    在仓库列表页面找到需要更新的 Helm 仓库,在列表右侧点击 按钮,在弹出菜单中点击 更新

    -

    点击更新

    -
  6. -
  7. -

    编辑 Helm 仓库 页面进行更新,完成后点击 确定

    -

    确定

    -
  8. -
  9. -

    返回 Helm 仓库列表,屏幕提示更新成功。

    -
  10. -
-

删除 Helm 仓库

-

除了引入、更新仓库外,您也可以将不需要的仓库删除,包括系统预置仓库和第三方仓库。

-
    -
  1. -

    找到待删除仓库所在的集群,点击集群名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏,依次点击 Helm 应用 -> Helm 仓库 ,进入 Helm 仓库列表页面。

    -

    helm仓库

    -
  4. -
  5. -

    在仓库列表页面找到需要更新的 Helm 仓库,在列表右侧点击 按钮,在弹出菜单中点击 删除

    -

    点击删除

    -
  6. -
  7. -

    输入仓库名称进行确认,点击 删除

    -

    确认删除

    -
  8. -
  9. -

    返回 Helm 仓库列表,屏幕提示删除成功。

    -
  10. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/helm/index.html b/site/end-user/kpanda/helm/index.html deleted file mode 100644 index 4b69d2f..0000000 --- a/site/end-user/kpanda/helm/index.html +++ /dev/null @@ -1,672 +0,0 @@ - - - - - - - - - - - - - - -Helm 模板 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

Helm 模板

-

Helm 是 Kubernetes 的包管理工具,方便用户快速发现、共享和使用 Kubernetes 构建的应用。容器管理模块提供了上百个 Helm 模板,涵盖存储、网络、监控、数据库等主要场景。借助这些模板,您可以通过 UI 界面快速部署、便捷管理 Helm 应用。此外,支持通过添加 Helm 仓库 添加更多的个性化模板,满足多样需求。

-

模板

-

关键概念

-

使用 Helm 时需要了解以下几个关键概念:

-
    -
  • -

    Chart:一个 Helm 安装包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula、APT 的 dpkg 或者 Yum 的 rpm 文件。Chart 在算丰 AI 算力平台中称为 Helm 模板

    -
  • -
  • -

    Release:在 Kubernetes 集群上运行的一个 Chart 实例。一个 Chart 可以在同一个集群内多次安装,每次安装都会创建一个新的 Release。Release 在算丰 AI 算力平台中称为 Helm 应用

    -
  • -
  • -

    Repository:用于发布和存储 Chart 的存储库。Repository 在算丰 AI 算力平台中称为 Helm 仓库

    -
  • -
-

更多详细信息,请前往 Helm 官网查看。

-

相关操作

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/helm/multi-archi-helm.html b/site/end-user/kpanda/helm/multi-archi-helm.html deleted file mode 100644 index 71afad8..0000000 --- a/site/end-user/kpanda/helm/multi-archi-helm.html +++ /dev/null @@ -1,489 +0,0 @@ - - - - - - - - - - - - -Helm 应用多架构和升级导入步骤 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

Helm 应用多架构和升级导入步骤

-

通常在多架构集群中,也会使用多架构的 Helm 包来部署应用,以解决架构差异带来的部署问题。 -本文将介绍如何将单架构 Helm 应用融合为多架构,以及多架构与多架构 Helm 应用的相互融合。

-

导入

-

单架构导入

-

准备好待导入的离线包 addon-offline-full-package-${version}-${arch}.tar.gz 。 -把路径填写至 clusterConfig.yml 配置文件,例如:

-
addonPackage:
-  path: "/home/addon-offline-full-package-v0.9.0-amd64.tar.gz"
-
-

然后执行导入命令:

-
~/dce5-installer cluster-create -c /home/dce5/sample/clusterConfig.yaml -m /home/dce5/sample/manifest.yaml -d -j13
-
-

多架构融合

-

准备好待融合的离线包 addon-offline-full-package-${version}-${arch}.tar.gz

-

以 addon-offline-full-package-v0.9.0-arm64.tar.gz 为例,执行导入命令:

-
~/dce5-installer import-addon -c /home/dce5/sample/clusterConfig.yaml --addon-path=/home/addon-offline-full-package-v0.9.0-arm64.tar.gz
-
-

升级

-

单架构升级

-

准备好待导入的离线包 addon-offline-full-package-${version}-${arch}.tar.gz

-

把路径填写至 clusterConfig.yml 配置文件,例如:

-
addonPackage:
-  path: "/home/addon-offline-full-package-v0.11.0-amd64.tar.gz"
-
-

然后执行导入命令:

-
~/dce5-installer cluster-create -c /home/dce5/sample/clusterConfig.yaml -m /home/dce5/sample/manifest.yaml -d -j13
-
-

多架构融合

-

准备好待融合的离线包 addon-offline-full-package-${version}-${arch}.tar.gz

-

以 addon-offline-full-package-v0.11.0-arm64.tar.gz 为例,执行导入命令:

-
~/dce5-installer import-addon -c /home/dce5/sample/clusterConfig.yaml --addon-path=/home/addon-offline-full-package-v0.11.0-arm64.tar.gz
-
-

注意事项

-

磁盘空间

-

离线包比较大,且过程中需要解压和 load 镜像,需要预留充足的空间,否则可能在过程中报 “no space left” 而中断。

-

失败后重试

-

如果在多架构融合步骤执行失败,重试前需要清理一下残留:

-
rm -rf addon-offline-target-package
-
-

镜像空间

-

如果融合的离线包中包含了与导入的离线包不一致的镜像空间,可能会在融合过程中因为镜像空间不存在而报错:

-

helm

-

解决办法:只需要在融合之前创建好该镜像空间即可,例如上图报错可通过创建镜像空间 localhost 提前避免。

-

架构冲突

-

升级至低于 0.12.0 版本的 addon 时,由于目标离线包里的 charts-syncer 没有检查镜像存在则不推送功能,因此会在升级的过程中会重新把多架构冲成单架构。 -例如:在 v0.10 版本将 addon 实现为多架构,此时若升级为 v0.11 版本,则多架构 addon 会被覆盖为单架构;若升级为 0.12.0 及以上版本则仍能够保持多架构。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/helm/upload-helm.html b/site/end-user/kpanda/helm/upload-helm.html deleted file mode 100644 index 081b301..0000000 --- a/site/end-user/kpanda/helm/upload-helm.html +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - -上传 Helm 模板 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

上传 Helm 模板

-

本文介绍如何上传 Helm 模板,操作步骤见下文。

-
    -
  1. -

    引入 Helm 仓库,操作步骤参考引入第三方 Helm 仓库

    -
  2. -
  3. -

    上传 Helm Chart 到 Helm 仓库。

    -
    -
    -
    -
    -

    Note

    -

    此方式适用于 Harbor、ChartMuseum、JFrog 类型仓库。

    -
    -
      -
    1. -

      登录一个可以访问到 Helm 仓库的节点,将 Helm 二进制文件上传到节点,并安装 cm-push 插件(需要连通外网并提前安装 Git)。

      -

      安装插件流程参考安装 cm-push 插件

      -
    2. -
    3. -

      推送 Helm Chart 到 Helm 仓库,执行如下命令;

      -
      helm cm-push ${charts-dir} ${HELM_REPO_URL} --username ${username} --password ${password}
      -
      -

      字段说明:

      -
        -
      • charts-dir:Helm Chart 的目录,或者是打包好的 Chart(即 .tgz 文件)。
      • -
      • HELM_REPO_URL:Helm 仓库的 URL。
      • -
      • username/password:有推送权限的 Helm 仓库用户名和密码。
      • -
      • 如果采用 https 访问且需要跳过证书验证,可添加参数 --insecure
      • -
      -
    4. -
    -
    -
    -
    -

    Note

    -

    此方式仅适用于 Harbor 类型仓库。

    -
    -
      -
    1. -

      登录网页 Harbor 仓库,请确保登录用户有推送权限;

      -
    2. -
    3. -

      进入到对应项目,选择 Helm Charts 页签,点击页面 上传 按钮,完成 Helm Chart 上传。

      -

      上传 Helm Chart

      -
    4. -
    -
    -
    -
    -
  4. -
  5. -

    同步远端仓库数据

    -
    -
    -
    -

    默认集群未开启 Helm 仓库自动刷新 ,需要执行手动同步操作,大致步骤为:

    -

    进入 Helm 应用 -> Helm 仓库 ,点击仓库列表右侧的 按钮,选择 同步仓库 ,完成仓库数据同步。

    -

    上传 Helm Chart

    -
    -
    -

    如需开启 Helm 仓库自动同步功能,可进入 集群运维 -> 集群设置 -> 高级配置 ,开启 Helm 仓库自动刷新开关。

    -

    自动同步

    -
    -
    -
    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/images/4-5-01.png b/site/end-user/kpanda/images/4-5-01.png deleted file mode 100644 index 7285bd0..0000000 Binary files a/site/end-user/kpanda/images/4-5-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-02.png b/site/end-user/kpanda/images/4-5-02.png deleted file mode 100644 index e2b079a..0000000 Binary files a/site/end-user/kpanda/images/4-5-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-03.png b/site/end-user/kpanda/images/4-5-03.png deleted file mode 100644 index be727e9..0000000 Binary files a/site/end-user/kpanda/images/4-5-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-backup1.png b/site/end-user/kpanda/images/4-5-backup1.png deleted file mode 100644 index 4f730d5..0000000 Binary files a/site/end-user/kpanda/images/4-5-backup1.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-backup2.png b/site/end-user/kpanda/images/4-5-backup2.png deleted file mode 100644 index 8e9063f..0000000 Binary files a/site/end-user/kpanda/images/4-5-backup2.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-calico-01.png b/site/end-user/kpanda/images/4-5-calico-01.png deleted file mode 100644 index 1c7ba31..0000000 Binary files a/site/end-user/kpanda/images/4-5-calico-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-calico-02.png b/site/end-user/kpanda/images/4-5-calico-02.png deleted file mode 100644 index 9fe81e0..0000000 Binary files a/site/end-user/kpanda/images/4-5-calico-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-calico-03.png b/site/end-user/kpanda/images/4-5-calico-03.png deleted file mode 100644 index bd84e73..0000000 Binary files a/site/end-user/kpanda/images/4-5-calico-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-registry-01.png b/site/end-user/kpanda/images/4-5-registry-01.png deleted file mode 100644 index d2907a5..0000000 Binary files a/site/end-user/kpanda/images/4-5-registry-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-registry-02.png b/site/end-user/kpanda/images/4-5-registry-02.png deleted file mode 100644 index 6103638..0000000 Binary files a/site/end-user/kpanda/images/4-5-registry-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-registry-03.png b/site/end-user/kpanda/images/4-5-registry-03.png deleted file mode 100644 index b27caa8..0000000 Binary files a/site/end-user/kpanda/images/4-5-registry-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-registry-04.png b/site/end-user/kpanda/images/4-5-registry-04.png deleted file mode 100644 index f5308d5..0000000 Binary files a/site/end-user/kpanda/images/4-5-registry-04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-registry-05.png b/site/end-user/kpanda/images/4-5-registry-05.png deleted file mode 100644 index 11b48ed..0000000 Binary files a/site/end-user/kpanda/images/4-5-registry-05.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-restore1.png b/site/end-user/kpanda/images/4-5-restore1.png deleted file mode 100644 index 475b3a4..0000000 Binary files a/site/end-user/kpanda/images/4-5-restore1.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-restore2.png b/site/end-user/kpanda/images/4-5-restore2.png deleted file mode 100644 index 8f75735..0000000 Binary files a/site/end-user/kpanda/images/4-5-restore2.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-01.png b/site/end-user/kpanda/images/4-5-underlay-01.png deleted file mode 100644 index 543771c..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-02.png b/site/end-user/kpanda/images/4-5-underlay-02.png deleted file mode 100644 index 5bb4954..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-03.png b/site/end-user/kpanda/images/4-5-underlay-03.png deleted file mode 100644 index e3d32e7..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-04.png b/site/end-user/kpanda/images/4-5-underlay-04.png deleted file mode 100644 index 7bf03cf..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-05.png b/site/end-user/kpanda/images/4-5-underlay-05.png deleted file mode 100644 index 5f553b0..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-05.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-06.png b/site/end-user/kpanda/images/4-5-underlay-06.png deleted file mode 100644 index 2e33138..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-06.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-07.png b/site/end-user/kpanda/images/4-5-underlay-07.png deleted file mode 100644 index 0e26a36..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-07.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-08.png b/site/end-user/kpanda/images/4-5-underlay-08.png deleted file mode 100644 index a4abcb0..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-08.png and /dev/null differ diff --git a/site/end-user/kpanda/images/4-5-underlay-09.png b/site/end-user/kpanda/images/4-5-underlay-09.png deleted file mode 100644 index 19811fa..0000000 Binary files a/site/end-user/kpanda/images/4-5-underlay-09.png and /dev/null differ diff --git a/site/end-user/kpanda/images/access-cluster-100.png b/site/end-user/kpanda/images/access-cluster-100.png deleted file mode 100644 index 47a6799..0000000 Binary files a/site/end-user/kpanda/images/access-cluster-100.png and /dev/null differ diff --git a/site/end-user/kpanda/images/access-cluster-101.png b/site/end-user/kpanda/images/access-cluster-101.png deleted file mode 100644 index dabc8b3..0000000 Binary files a/site/end-user/kpanda/images/access-cluster-101.png and /dev/null differ diff --git a/site/end-user/kpanda/images/access-cluster-102.png b/site/end-user/kpanda/images/access-cluster-102.png deleted file mode 100644 index 581ce56..0000000 Binary files a/site/end-user/kpanda/images/access-cluster-102.png and /dev/null differ diff --git a/site/end-user/kpanda/images/access-cluster-103.png b/site/end-user/kpanda/images/access-cluster-103.png deleted file mode 100644 index ae7e31a..0000000 Binary files a/site/end-user/kpanda/images/access-cluster-103.png and /dev/null differ diff --git a/site/end-user/kpanda/images/auto-helm.png b/site/end-user/kpanda/images/auto-helm.png deleted file mode 100644 index c7ad3bc..0000000 Binary files a/site/end-user/kpanda/images/auto-helm.png and /dev/null differ diff --git a/site/end-user/kpanda/images/backupd20481.png b/site/end-user/kpanda/images/backupd20481.png deleted file mode 100644 index e8130b8..0000000 Binary files a/site/end-user/kpanda/images/backupd20481.png and /dev/null differ diff --git a/site/end-user/kpanda/images/backupd20482.png b/site/end-user/kpanda/images/backupd20482.png deleted file mode 100644 index b81d1b4..0000000 Binary files a/site/end-user/kpanda/images/backupd20482.png and /dev/null differ diff --git a/site/end-user/kpanda/images/backupd20483.png b/site/end-user/kpanda/images/backupd20483.png deleted file mode 100644 index a558e54..0000000 Binary files a/site/end-user/kpanda/images/backupd20483.png and /dev/null differ diff --git a/site/end-user/kpanda/images/backupd20484.png b/site/end-user/kpanda/images/backupd20484.png deleted file mode 100644 index 0f5d372..0000000 Binary files a/site/end-user/kpanda/images/backupd20484.png and /dev/null differ diff --git a/site/end-user/kpanda/images/best-practice-001.png b/site/end-user/kpanda/images/best-practice-001.png deleted file mode 100644 index c1beaa9..0000000 Binary files a/site/end-user/kpanda/images/best-practice-001.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-oversold-01.png b/site/end-user/kpanda/images/cluster-oversold-01.png deleted file mode 100644 index 4c516ac..0000000 Binary files a/site/end-user/kpanda/images/cluster-oversold-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-oversold-02.png b/site/end-user/kpanda/images/cluster-oversold-02.png deleted file mode 100644 index 9915cc2..0000000 Binary files a/site/end-user/kpanda/images/cluster-oversold-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-oversold-03.png b/site/end-user/kpanda/images/cluster-oversold-03.png deleted file mode 100644 index 6cd4e4c..0000000 Binary files a/site/end-user/kpanda/images/cluster-oversold-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-oversold-04.png b/site/end-user/kpanda/images/cluster-oversold-04.png deleted file mode 100644 index 254aef7..0000000 Binary files a/site/end-user/kpanda/images/cluster-oversold-04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-oversold-05.png b/site/end-user/kpanda/images/cluster-oversold-05.png deleted file mode 100644 index 800d890..0000000 Binary files a/site/end-user/kpanda/images/cluster-oversold-05.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-scheduler-plugin-01.png b/site/end-user/kpanda/images/cluster-scheduler-plugin-01.png deleted file mode 100644 index 25c2188..0000000 Binary files a/site/end-user/kpanda/images/cluster-scheduler-plugin-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-scheduler-plugin-02.png b/site/end-user/kpanda/images/cluster-scheduler-plugin-02.png deleted file mode 100644 index d397cf3..0000000 Binary files a/site/end-user/kpanda/images/cluster-scheduler-plugin-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-scheduler-plugin-03.png b/site/end-user/kpanda/images/cluster-scheduler-plugin-03.png deleted file mode 100644 index ac925f8..0000000 Binary files a/site/end-user/kpanda/images/cluster-scheduler-plugin-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-scheduler-plugin-04.png b/site/end-user/kpanda/images/cluster-scheduler-plugin-04.png deleted file mode 100644 index b98809e..0000000 Binary files a/site/end-user/kpanda/images/cluster-scheduler-plugin-04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster-setup-001.png b/site/end-user/kpanda/images/cluster-setup-001.png deleted file mode 100644 index 55f23ab..0000000 Binary files a/site/end-user/kpanda/images/cluster-setup-001.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster01.png b/site/end-user/kpanda/images/cluster01.png deleted file mode 100644 index a778c9e..0000000 Binary files a/site/end-user/kpanda/images/cluster01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster02.png b/site/end-user/kpanda/images/cluster02.png deleted file mode 100644 index 6581988..0000000 Binary files a/site/end-user/kpanda/images/cluster02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster03.png b/site/end-user/kpanda/images/cluster03.png deleted file mode 100644 index bf1d074..0000000 Binary files a/site/end-user/kpanda/images/cluster03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cluster04.png b/site/end-user/kpanda/images/cluster04.png deleted file mode 100644 index de986c6..0000000 Binary files a/site/end-user/kpanda/images/cluster04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/clusterlist.png b/site/end-user/kpanda/images/clusterlist.png deleted file mode 100644 index c5b4da7..0000000 Binary files a/site/end-user/kpanda/images/clusterlist.png and /dev/null differ diff --git a/site/end-user/kpanda/images/config06.png b/site/end-user/kpanda/images/config06.png deleted file mode 100644 index 68f3de2..0000000 Binary files a/site/end-user/kpanda/images/config06.png and /dev/null differ diff --git a/site/end-user/kpanda/images/crd-cluster-list.png b/site/end-user/kpanda/images/crd-cluster-list.png deleted file mode 100644 index e7f6347..0000000 Binary files a/site/end-user/kpanda/images/crd-cluster-list.png and /dev/null differ diff --git a/site/end-user/kpanda/images/crd-instance-list.png b/site/end-user/kpanda/images/crd-instance-list.png deleted file mode 100644 index 8b5ca5c..0000000 Binary files a/site/end-user/kpanda/images/crd-instance-list.png and /dev/null differ diff --git a/site/end-user/kpanda/images/crd-list-01.png b/site/end-user/kpanda/images/crd-list-01.png deleted file mode 100644 index e0e7fd6..0000000 Binary files a/site/end-user/kpanda/images/crd-list-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/crd-list-02.png b/site/end-user/kpanda/images/crd-list-02.png deleted file mode 100644 index 7f54b4c..0000000 Binary files a/site/end-user/kpanda/images/crd-list-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/crd-list-03.png b/site/end-user/kpanda/images/crd-list-03.png deleted file mode 100644 index b1ce492..0000000 Binary files a/site/end-user/kpanda/images/crd-list-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/crd01.png b/site/end-user/kpanda/images/crd01.png deleted file mode 100644 index d3c06f0..0000000 Binary files a/site/end-user/kpanda/images/crd01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/create-configmap.png b/site/end-user/kpanda/images/create-configmap.png deleted file mode 100644 index 3d7702f..0000000 Binary files a/site/end-user/kpanda/images/create-configmap.png and /dev/null differ diff --git a/site/end-user/kpanda/images/create-depolyment.png b/site/end-user/kpanda/images/create-depolyment.png deleted file mode 100644 index fe20c7d..0000000 Binary files a/site/end-user/kpanda/images/create-depolyment.png and /dev/null differ diff --git a/site/end-user/kpanda/images/create004.png b/site/end-user/kpanda/images/create004.png deleted file mode 100644 index 99b8c6d..0000000 Binary files a/site/end-user/kpanda/images/create004.png and /dev/null differ diff --git a/site/end-user/kpanda/images/create005.png b/site/end-user/kpanda/images/create005.png deleted file mode 100644 index 9c412a8..0000000 Binary files a/site/end-user/kpanda/images/create005.png and /dev/null differ diff --git a/site/end-user/kpanda/images/create006.png b/site/end-user/kpanda/images/create006.png deleted file mode 100644 index 1cf366e..0000000 Binary files a/site/end-user/kpanda/images/create006.png and /dev/null differ diff --git a/site/end-user/kpanda/images/create007.png b/site/end-user/kpanda/images/create007.png deleted file mode 100644 index dca8620..0000000 Binary files a/site/end-user/kpanda/images/create007.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createVpaScale.png b/site/end-user/kpanda/images/createVpaScale.png deleted file mode 100644 index 9a15310..0000000 Binary files a/site/end-user/kpanda/images/createVpaScale.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster-ssh01.png b/site/end-user/kpanda/images/createcluster-ssh01.png deleted file mode 100644 index 4e5965c..0000000 Binary files a/site/end-user/kpanda/images/createcluster-ssh01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster.png b/site/end-user/kpanda/images/createcluster.png deleted file mode 100644 index 7bc0fed..0000000 Binary files a/site/end-user/kpanda/images/createcluster.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster01.png b/site/end-user/kpanda/images/createcluster01.png deleted file mode 100644 index a4e718f..0000000 Binary files a/site/end-user/kpanda/images/createcluster01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster02.png b/site/end-user/kpanda/images/createcluster02.png deleted file mode 100644 index af2d2a8..0000000 Binary files a/site/end-user/kpanda/images/createcluster02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster03.png b/site/end-user/kpanda/images/createcluster03.png deleted file mode 100644 index 3052fdd..0000000 Binary files a/site/end-user/kpanda/images/createcluster03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster04.png b/site/end-user/kpanda/images/createcluster04.png deleted file mode 100644 index 4907d2c..0000000 Binary files a/site/end-user/kpanda/images/createcluster04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster05.png b/site/end-user/kpanda/images/createcluster05.png deleted file mode 100644 index 5df2b75..0000000 Binary files a/site/end-user/kpanda/images/createcluster05.png and /dev/null differ diff --git a/site/end-user/kpanda/images/createcluster06.png b/site/end-user/kpanda/images/createcluster06.png deleted file mode 100644 index 8f5d47f..0000000 Binary files a/site/end-user/kpanda/images/createcluster06.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cronjob02.png b/site/end-user/kpanda/images/cronjob02.png deleted file mode 100644 index 7b7b4f4..0000000 Binary files a/site/end-user/kpanda/images/cronjob02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cronjob03.png b/site/end-user/kpanda/images/cronjob03.png deleted file mode 100644 index 6f07ab5..0000000 Binary files a/site/end-user/kpanda/images/cronjob03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cronjob04.png b/site/end-user/kpanda/images/cronjob04.png deleted file mode 100644 index c14a0c4..0000000 Binary files a/site/end-user/kpanda/images/cronjob04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/cronjob12.png b/site/end-user/kpanda/images/cronjob12.png deleted file mode 100644 index a387167..0000000 Binary files a/site/end-user/kpanda/images/cronjob12.png and /dev/null differ diff --git a/site/end-user/kpanda/images/custommetrics.png b/site/end-user/kpanda/images/custommetrics.png deleted file mode 100644 index 312cfdc..0000000 Binary files a/site/end-user/kpanda/images/custommetrics.png and /dev/null differ diff --git a/site/end-user/kpanda/images/delete001.png b/site/end-user/kpanda/images/delete001.png deleted file mode 100644 index fe11fac..0000000 Binary files a/site/end-user/kpanda/images/delete001.png and /dev/null differ diff --git a/site/end-user/kpanda/images/delete002.png b/site/end-user/kpanda/images/delete002.png deleted file mode 100644 index 3396ae0..0000000 Binary files a/site/end-user/kpanda/images/delete002.png and /dev/null differ diff --git a/site/end-user/kpanda/images/delete003.png b/site/end-user/kpanda/images/delete003.png deleted file mode 100644 index a2bc110..0000000 Binary files a/site/end-user/kpanda/images/delete003.png and /dev/null differ diff --git a/site/end-user/kpanda/images/deletecluster01.png b/site/end-user/kpanda/images/deletecluster01.png deleted file mode 100644 index 77bb5a9..0000000 Binary files a/site/end-user/kpanda/images/deletecluster01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/deletecluster02.png b/site/end-user/kpanda/images/deletecluster02.png deleted file mode 100644 index 1654220..0000000 Binary files a/site/end-user/kpanda/images/deletecluster02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/deletecluster03.png b/site/end-user/kpanda/images/deletecluster03.png deleted file mode 100644 index 9d140ca..0000000 Binary files a/site/end-user/kpanda/images/deletecluster03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/deploy05.png b/site/end-user/kpanda/images/deploy05.png deleted file mode 100644 index 1be8a44..0000000 Binary files a/site/end-user/kpanda/images/deploy05.png and /dev/null differ diff --git a/site/end-user/kpanda/images/deploy14.png b/site/end-user/kpanda/images/deploy14.png deleted file mode 100644 index fd4b30b..0000000 Binary files a/site/end-user/kpanda/images/deploy14.png and /dev/null differ diff --git a/site/end-user/kpanda/images/deploy15.png b/site/end-user/kpanda/images/deploy15.png deleted file mode 100644 index 5073286..0000000 Binary files a/site/end-user/kpanda/images/deploy15.png and /dev/null differ diff --git a/site/end-user/kpanda/images/deploy16.png b/site/end-user/kpanda/images/deploy16.png deleted file mode 100644 index d3ba448..0000000 Binary files a/site/end-user/kpanda/images/deploy16.png and /dev/null differ diff --git a/site/end-user/kpanda/images/faq01.png b/site/end-user/kpanda/images/faq01.png deleted file mode 100644 index 225d370..0000000 Binary files a/site/end-user/kpanda/images/faq01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/faq02.png b/site/end-user/kpanda/images/faq02.png deleted file mode 100644 index f261535..0000000 Binary files a/site/end-user/kpanda/images/faq02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/faq204.png b/site/end-user/kpanda/images/faq204.png deleted file mode 100644 index a771fbd..0000000 Binary files a/site/end-user/kpanda/images/faq204.png and /dev/null differ diff --git a/site/end-user/kpanda/images/gpu_mig04.png b/site/end-user/kpanda/images/gpu_mig04.png deleted file mode 100644 index a01cdab..0000000 Binary files a/site/end-user/kpanda/images/gpu_mig04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/helmrepo01.png b/site/end-user/kpanda/images/helmrepo01.png deleted file mode 100644 index 8e11f54..0000000 Binary files a/site/end-user/kpanda/images/helmrepo01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/helmrepo02.png b/site/end-user/kpanda/images/helmrepo02.png deleted file mode 100644 index 72df4f5..0000000 Binary files a/site/end-user/kpanda/images/helmrepo02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/helmrepo03.png b/site/end-user/kpanda/images/helmrepo03.png deleted file mode 100644 index d822eac..0000000 Binary files a/site/end-user/kpanda/images/helmrepo03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/helmrepo04.png b/site/end-user/kpanda/images/helmrepo04.png deleted file mode 100644 index 85046be..0000000 Binary files a/site/end-user/kpanda/images/helmrepo04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/helmrepo05.png b/site/end-user/kpanda/images/helmrepo05.png deleted file mode 100644 index 8ba82ef..0000000 Binary files a/site/end-user/kpanda/images/helmrepo05.png and /dev/null differ diff --git a/site/end-user/kpanda/images/helmrepo07.png b/site/end-user/kpanda/images/helmrepo07.png deleted file mode 100644 index cf7c1cc..0000000 Binary files a/site/end-user/kpanda/images/helmrepo07.png and /dev/null differ diff --git a/site/end-user/kpanda/images/helmrepo08.png b/site/end-user/kpanda/images/helmrepo08.png deleted file mode 100644 index 047dadd..0000000 Binary files a/site/end-user/kpanda/images/helmrepo08.png and /dev/null differ diff --git a/site/end-user/kpanda/images/hpa-cronhpa-capability-rule-01.png b/site/end-user/kpanda/images/hpa-cronhpa-capability-rule-01.png deleted file mode 100644 index 30ee0e4..0000000 Binary files a/site/end-user/kpanda/images/hpa-cronhpa-capability-rule-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/imagequest.png b/site/end-user/kpanda/images/imagequest.png deleted file mode 100644 index 8a9ccc8..0000000 Binary files a/site/end-user/kpanda/images/imagequest.png and /dev/null differ diff --git a/site/end-user/kpanda/images/inspection-home.png b/site/end-user/kpanda/images/inspection-home.png deleted file mode 100644 index 603832a..0000000 Binary files a/site/end-user/kpanda/images/inspection-home.png and /dev/null differ diff --git a/site/end-user/kpanda/images/inspection-list-more.png b/site/end-user/kpanda/images/inspection-list-more.png deleted file mode 100644 index bb22184..0000000 Binary files a/site/end-user/kpanda/images/inspection-list-more.png and /dev/null differ diff --git a/site/end-user/kpanda/images/inspection-report-01.png b/site/end-user/kpanda/images/inspection-report-01.png deleted file mode 100644 index 1d88404..0000000 Binary files a/site/end-user/kpanda/images/inspection-report-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/inspection-report-02.png b/site/end-user/kpanda/images/inspection-report-02.png deleted file mode 100644 index 927d7c2..0000000 Binary files a/site/end-user/kpanda/images/inspection-report-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/inspection-report-03.png b/site/end-user/kpanda/images/inspection-report-03.png deleted file mode 100644 index 11d621a..0000000 Binary files a/site/end-user/kpanda/images/inspection-report-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/inspection-start-alone.png b/site/end-user/kpanda/images/inspection-start-alone.png deleted file mode 100644 index 35a27f6..0000000 Binary files a/site/end-user/kpanda/images/inspection-start-alone.png and /dev/null differ diff --git a/site/end-user/kpanda/images/inspection-start.png b/site/end-user/kpanda/images/inspection-start.png deleted file mode 100644 index fb550d1..0000000 Binary files a/site/end-user/kpanda/images/inspection-start.png and /dev/null differ diff --git a/site/end-user/kpanda/images/join-cluster01.png b/site/end-user/kpanda/images/join-cluster01.png deleted file mode 100644 index b07542a..0000000 Binary files a/site/end-user/kpanda/images/join-cluster01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/join-cluster02.png b/site/end-user/kpanda/images/join-cluster02.png deleted file mode 100644 index 3631364..0000000 Binary files a/site/end-user/kpanda/images/join-cluster02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/knative-install-1.png b/site/end-user/kpanda/images/knative-install-1.png deleted file mode 100644 index 0925c12..0000000 Binary files a/site/end-user/kpanda/images/knative-install-1.png and /dev/null differ diff --git a/site/end-user/kpanda/images/knative-install-2.png b/site/end-user/kpanda/images/knative-install-2.png deleted file mode 100644 index c2fa119..0000000 Binary files a/site/end-user/kpanda/images/knative-install-2.png and /dev/null differ diff --git a/site/end-user/kpanda/images/knative-install-3.png b/site/end-user/kpanda/images/knative-install-3.png deleted file mode 100644 index 1e84211..0000000 Binary files a/site/end-user/kpanda/images/knative-install-3.png and /dev/null differ diff --git a/site/end-user/kpanda/images/knative-request-flow.png b/site/end-user/kpanda/images/knative-request-flow.png deleted file mode 100644 index dfa6eb4..0000000 Binary files a/site/end-user/kpanda/images/knative-request-flow.png and /dev/null differ diff --git a/site/end-user/kpanda/images/limit-disk-usage-docker-01.png b/site/end-user/kpanda/images/limit-disk-usage-docker-01.png deleted file mode 100644 index a2dc078..0000000 Binary files a/site/end-user/kpanda/images/limit-disk-usage-docker-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/limit-disk-usage-docker-02.png b/site/end-user/kpanda/images/limit-disk-usage-docker-02.png deleted file mode 100644 index bb4d28f..0000000 Binary files a/site/end-user/kpanda/images/limit-disk-usage-docker-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/limit-disk-usage-docker-03.png b/site/end-user/kpanda/images/limit-disk-usage-docker-03.png deleted file mode 100644 index c7685a4..0000000 Binary files a/site/end-user/kpanda/images/limit-disk-usage-docker-03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/limit-disk-usage-docker-04.png b/site/end-user/kpanda/images/limit-disk-usage-docker-04.png deleted file mode 100644 index 968cbbb..0000000 Binary files a/site/end-user/kpanda/images/limit-disk-usage-docker-04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/note.svg b/site/end-user/kpanda/images/note.svg deleted file mode 100644 index 5e473ae..0000000 --- a/site/end-user/kpanda/images/note.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - Icon/16/Prompt备份@0.5x - Created with Sketch. - - - - - - - - - - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/images/ns00.png b/site/end-user/kpanda/images/ns00.png deleted file mode 100644 index 7300a9c..0000000 Binary files a/site/end-user/kpanda/images/ns00.png and /dev/null differ diff --git a/site/end-user/kpanda/images/ns01.png b/site/end-user/kpanda/images/ns01.png deleted file mode 100644 index c199640..0000000 Binary files a/site/end-user/kpanda/images/ns01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/ns02.png b/site/end-user/kpanda/images/ns02.png deleted file mode 100644 index dad110c..0000000 Binary files a/site/end-user/kpanda/images/ns02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/ns03.png b/site/end-user/kpanda/images/ns03.png deleted file mode 100644 index 058390a..0000000 Binary files a/site/end-user/kpanda/images/ns03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/ns04.png b/site/end-user/kpanda/images/ns04.png deleted file mode 100644 index 8b8863c..0000000 Binary files a/site/end-user/kpanda/images/ns04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/operator-framework.svg b/site/end-user/kpanda/images/operator-framework.svg deleted file mode 100644 index d3dc0fa..0000000 --- a/site/end-user/kpanda/images/operator-framework.svg +++ /dev/null @@ -1 +0,0 @@ -Operator Framework logo \ No newline at end of file diff --git a/site/end-user/kpanda/images/permisson02.png b/site/end-user/kpanda/images/permisson02.png deleted file mode 100644 index 4c69bdc..0000000 Binary files a/site/end-user/kpanda/images/permisson02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/remove001.png b/site/end-user/kpanda/images/remove001.png deleted file mode 100644 index e20f17d..0000000 Binary files a/site/end-user/kpanda/images/remove001.png and /dev/null differ diff --git a/site/end-user/kpanda/images/rules.png b/site/end-user/kpanda/images/rules.png deleted file mode 100644 index 9cbefbb..0000000 Binary files a/site/end-user/kpanda/images/rules.png and /dev/null differ diff --git a/site/end-user/kpanda/images/sc01.png b/site/end-user/kpanda/images/sc01.png deleted file mode 100644 index 62d05e0..0000000 Binary files a/site/end-user/kpanda/images/sc01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/sc03.png b/site/end-user/kpanda/images/sc03.png deleted file mode 100644 index 0bff950..0000000 Binary files a/site/end-user/kpanda/images/sc03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/sc04 2.png b/site/end-user/kpanda/images/sc04 2.png deleted file mode 100644 index b96215a..0000000 Binary files a/site/end-user/kpanda/images/sc04 2.png and /dev/null differ diff --git a/site/end-user/kpanda/images/sc04.png b/site/end-user/kpanda/images/sc04.png deleted file mode 100644 index 0919834..0000000 Binary files a/site/end-user/kpanda/images/sc04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/sc05.png b/site/end-user/kpanda/images/sc05.png deleted file mode 100644 index 35352a2..0000000 Binary files a/site/end-user/kpanda/images/sc05.png and /dev/null differ diff --git a/site/end-user/kpanda/images/sc06.png b/site/end-user/kpanda/images/sc06.png deleted file mode 100644 index 1f7dea5..0000000 Binary files a/site/end-user/kpanda/images/sc06.png and /dev/null differ diff --git a/site/end-user/kpanda/images/secret04.png b/site/end-user/kpanda/images/secret04.png deleted file mode 100644 index 40868ff..0000000 Binary files a/site/end-user/kpanda/images/secret04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/secret08.png b/site/end-user/kpanda/images/secret08.png deleted file mode 100644 index a986531..0000000 Binary files a/site/end-user/kpanda/images/secret08.png and /dev/null differ diff --git a/site/end-user/kpanda/images/security08.png b/site/end-user/kpanda/images/security08.png deleted file mode 100644 index 4a1c8ab..0000000 Binary files a/site/end-user/kpanda/images/security08.png and /dev/null differ diff --git a/site/end-user/kpanda/images/service03.png b/site/end-user/kpanda/images/service03.png deleted file mode 100644 index 338c365..0000000 Binary files a/site/end-user/kpanda/images/service03.png and /dev/null differ diff --git a/site/end-user/kpanda/images/service04.png b/site/end-user/kpanda/images/service04.png deleted file mode 100644 index fbd972e..0000000 Binary files a/site/end-user/kpanda/images/service04.png and /dev/null differ diff --git a/site/end-user/kpanda/images/servicemonitor.png b/site/end-user/kpanda/images/servicemonitor.png deleted file mode 100644 index fc0f82f..0000000 Binary files a/site/end-user/kpanda/images/servicemonitor.png and /dev/null differ diff --git a/site/end-user/kpanda/images/settings02.png b/site/end-user/kpanda/images/settings02.png deleted file mode 100644 index e8f301f..0000000 Binary files a/site/end-user/kpanda/images/settings02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/success.png b/site/end-user/kpanda/images/success.png deleted file mode 100644 index 79d2a69..0000000 Binary files a/site/end-user/kpanda/images/success.png and /dev/null differ diff --git a/site/end-user/kpanda/images/update-kpanda.png b/site/end-user/kpanda/images/update-kpanda.png deleted file mode 100644 index 44a204a..0000000 Binary files a/site/end-user/kpanda/images/update-kpanda.png and /dev/null differ diff --git a/site/end-user/kpanda/images/upgrade.png b/site/end-user/kpanda/images/upgrade.png deleted file mode 100644 index a7566e3..0000000 Binary files a/site/end-user/kpanda/images/upgrade.png and /dev/null differ diff --git a/site/end-user/kpanda/images/upload-helm-01.png b/site/end-user/kpanda/images/upload-helm-01.png deleted file mode 100644 index 9da7ed6..0000000 Binary files a/site/end-user/kpanda/images/upload-helm-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/upload-helm-02.png b/site/end-user/kpanda/images/upload-helm-02.png deleted file mode 100644 index 9c22ba1..0000000 Binary files a/site/end-user/kpanda/images/upload-helm-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/volcano-01 2.png b/site/end-user/kpanda/images/volcano-01 2.png deleted file mode 100644 index c176723..0000000 Binary files a/site/end-user/kpanda/images/volcano-01 2.png and /dev/null differ diff --git a/site/end-user/kpanda/images/volcano-01.png b/site/end-user/kpanda/images/volcano-01.png deleted file mode 100644 index 0b03312..0000000 Binary files a/site/end-user/kpanda/images/volcano-01.png and /dev/null differ diff --git a/site/end-user/kpanda/images/volcano-02 2.png b/site/end-user/kpanda/images/volcano-02 2.png deleted file mode 100644 index d79735b..0000000 Binary files a/site/end-user/kpanda/images/volcano-02 2.png and /dev/null differ diff --git a/site/end-user/kpanda/images/volcano-02.png b/site/end-user/kpanda/images/volcano-02.png deleted file mode 100644 index fbcbf4b..0000000 Binary files a/site/end-user/kpanda/images/volcano-02.png and /dev/null differ diff --git a/site/end-user/kpanda/images/volcano-03 2.png b/site/end-user/kpanda/images/volcano-03 2.png deleted file mode 100644 index 5112532..0000000 Binary files a/site/end-user/kpanda/images/volcano-03 2.png and /dev/null differ diff --git a/site/end-user/kpanda/images/volcano-03.png b/site/end-user/kpanda/images/volcano-03.png deleted file mode 100644 index 97afd08..0000000 Binary files a/site/end-user/kpanda/images/volcano-03.png and /dev/null differ diff --git a/site/end-user/kpanda/inspect/config.html b/site/end-user/kpanda/inspect/config.html deleted file mode 100644 index 565b579..0000000 --- a/site/end-user/kpanda/inspect/config.html +++ /dev/null @@ -1,751 +0,0 @@ - - - - - - - - - - - - - - -创建巡检配置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建巡检配置

-

算丰 AI 算力平台容器管理模块提供集群巡检功能,支持从集群维度、节点维度、容器组维度进行巡检。

-
    -
  • 集群维度:检查集群中系统组件的运行情况,包括集群状态、资源使用情况,以及控制节点特有的巡检项等,例如 kube-apiserveretcd 的状态。
  • -
  • 节点维度:包括控制节点和工作节点通用的检查项,例如节点资源使用情况、句柄数、PID 状态、网络状态。
  • -
  • 容器组维度:检查 Pod 的 CPU 和内存使用情况、运行状态、PV 和 PVC 的状态等。
  • -
-

下面介绍如何创建巡检配置。

-

前提条件

- -

操作步骤

-
    -
  1. -

    在左侧导航栏点击 集群巡检

    -

    nav

    -
  2. -
  3. -

    在页面右侧点击 巡检配置

    -

    create

    -
  4. -
  5. -

    参考以下说明填写巡检配置,然后在页面底部点击 确定 即可。

    -
      -
    • 集群:下拉选择要对哪些集群进行巡检。如果选择多个集群,则自动生成多个巡检配置(仅巡检的集群不一致,其他配置都完全一致)
    • -
    • 定时巡检:启用后可根据事先设置的巡检频率定期自动执行集群巡检
    • -
    • 巡检频率:设置自动巡检的周期,例如每周二上午十点。支持自定义 CronExpression,可参考 Cron 时间表语法
    • -
    • 巡检记录保留条数:累计最多保留多少条巡检记录,包括所有集群的巡检记录
    • -
    • -

      参数配置:参数配置分为集群维度、节点维度、容器组维度三部分,可以根据场景需求启用或禁用某些巡检项。

      -

      basic

      -
    • -
    -
  6. -
-

巡检配置创建完成后,会自动显示在巡检配置列表中。在配置右侧点击更多操作按钮可以立即执行巡检、修改巡检配置、删除巡检配置和巡检记录。

-
    -
  • 点击 巡检 可以根据该配置立即执行一次巡检。
  • -
  • 点击 巡检配置 可以修改巡检配置。
  • -
  • -

    点击 删除 可以删除该巡检配置和历史的巡检记录

    -

    basic

    -
  • -
-
-

Note

-
    -
  • 巡检配置创建完成后,如果启用了 定时巡检 配置,则会在指定时间自动执行巡检。
  • -
  • 如未启用 定时巡检 配置,则需要手动触发巡检
  • -
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/inspect/index.html b/site/end-user/kpanda/inspect/index.html deleted file mode 100644 index f0381f2..0000000 --- a/site/end-user/kpanda/inspect/index.html +++ /dev/null @@ -1,659 +0,0 @@ - - - - - - - - - - - - - - -介绍 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

集群巡检

-

集群巡检可以通过自动或手动方式,定期或随时检查集群的整体健康状态,让管理员获得保障集群安全的主动权。 -基于合理的巡检计划,这种主动自发的集群检查可以让管理员随时掌握集群状态,摆脱之前出现故障时只能被动排查问题的困境,做到事先监控、提前防范。

-

算丰 AI 算力平台容器管理模块提供的集群巡检功能,支持从集群、节点、容器组(Pod)三个维度进行自定义巡检项,巡检结束后会自动生成可视化的巡检报告。

-
    -
  • 集群维度:检查集群中系统组件的运行情况,包括集群状态、资源使用情况以及控制节点特有的巡检项等,例如 kube-apiserveretcd 的状态。
  • -
  • 节点维度:包括控制节点和工作节点通用的检查项,例如节点资源使用情况、句柄数、PID 状态、网络状态。
  • -
  • 容器组维度:检查 Pod 的 CPU 和内存使用情况、运行状态、PV 和 PVC 的状态等。
  • -
-

如需了解或执行安全方面的巡检,可参考算丰 AI 算力平台支持的安全扫描类型

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/inspect/inspect.html b/site/end-user/kpanda/inspect/inspect.html deleted file mode 100644 index 9d98117..0000000 --- a/site/end-user/kpanda/inspect/inspect.html +++ /dev/null @@ -1,740 +0,0 @@ - - - - - - - - - - - - - - -执行巡检 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

执行集群巡检

-

巡检配置创建完成后,如果启用了 定时巡检 配置,则会在指定时间自动执行巡检。如未启用 定时巡检 配置,则需要手动触发巡检。

-

此页介绍如何手动执行集群巡检。

-

前提条件

- -

操作步骤

-

执行巡检时,支持勾选多个集群进行批量巡检,或者仅对某一个集群进行单独巡检。

-
-
-
-
    -
  1. -

    在容器管理模块的一级导航栏点击 集群巡检 ,然后在页面右侧点击 巡检

    -

    start

    -
  2. -
  3. -

    勾选需要巡检的集群,然后在页面底部点击 确定 即可。

    -
      -
    • 若选择多个集群进行同时巡检,系统将根据不同集群的巡检配置进行巡检。
    • -
    • -

      如未设置集群巡检配置,将使用系统默认配置。

      -

      start

      -
    • -
    -
  4. -
-
-
-
    -
  1. 进入集群巡检页面。
  2. -
  3. -

    在对应巡检配置的右侧点击 更多操作按钮,然后在弹出的菜单中选择 巡检 即可。

    -

    basic

    -
  4. -
-
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/inspect/report.html b/site/end-user/kpanda/inspect/report.html deleted file mode 100644 index eb2489f..0000000 --- a/site/end-user/kpanda/inspect/report.html +++ /dev/null @@ -1,727 +0,0 @@ - - - - - - - - - - - - - - -查看巡检报告 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

查看巡检报告

-

巡检执行完成后,可以查看巡检记录和详细的巡检报告。

-

前提条件

- -

操作步骤

-
    -
  1. -

    进入集群巡检页面,点击目标巡检集群的名称。

    -

    start

    -
  2. -
  3. -

    点击想要查看的巡检记录名称。

    -
      -
    • 每执行一次巡检,就会生成一条巡检记录。
    • -
    • -

      当巡检记录超过巡检配置中设置的最大保留条数时,从执行时间最早的记录开始删除。

      -

      start

      -
    • -
    -
  4. -
  5. -

    查看巡检的详细信息,根据巡检配置可能包括集群资源概览、系统组件的运行情况等。

    -

    在页面右上角可以下载巡检报告或删除该项巡检报告。

    -

    start

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/namespaces/createns.html b/site/end-user/kpanda/namespaces/createns.html deleted file mode 100644 index 0c792d5..0000000 --- a/site/end-user/kpanda/namespaces/createns.html +++ /dev/null @@ -1,779 +0,0 @@ - - - - - - - - - - - - - - -创建命名空间 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

命名空间

-

命名空间是 Kubernetes 中用来进行资源隔离的一种抽象。一个集群下可以包含多个不重名的命名空间,每个命名空间中的资源相互隔离。有关命名空间的详细介绍,可参考命名空间

-

本文将介绍命名空间的相关操作。

-

创建命名空间

-

支持通过表单轻松创建命名空间,也支持通过编写或导入 YAML 文件快速创建命名空间。

-
-

Note

-
    -
  • 在创建命名空间之前,需要在容器管理模块接入 Kubernetes 集群或者管理员已为用户创建了集群。
  • -
  • 集群初始化后通常会自动生成默认的命名空间 default 。但对于生产集群而言,为便于管理,建议创建其他的命名空间,而非直接使用 default 命名空间。
  • -
-
-

表单创建

-
    -
  1. -

    集群列表 页面点击目标集群的名称。

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏点击 命名空间 ,然后点击页面右侧的 创建 按钮。

    -

    点击创建

    -
  4. -
  5. -

    填写命名空间的名称,配置工作空间和标签(可选设置),然后点击 确定

    -
    -

    Info

    -
      -
    • -

      命名空间绑定工作空间之后,该命名空间的资源就会共享给所绑定的工作空间。有关工作空间的详细说明,可参考工作空间与层级

      -
    • -
    • -

      命名空间创建完成后,仍然可以绑定/解绑工作空间。

      -
    • -
    -
    -

    填写表单

    -
  6. -
  7. -

    点击 确定 ,完成命名空间的创建。在命名空间列表右侧,点击 ,可以从弹出菜单中选择查看 YAML、修改标签、绑定/解绑工作空间、配额管理、删除等更多操作。

    -

    更多操作

    -
  8. -
-

YAML 创建

-
    -
  1. -

    集群列表 页面点击目标集群的名称。

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏点击 命名空间 ,然后点击页面右侧的 YAML 创建 按钮。

    -

    点击创建

    -
  4. -
  5. -

    输入或粘贴事先准备好的 YAML 内容,或者从本地直接导入已有的 YAML 文件。

    -
    -

    输入 YAML 内容后,点击 下载 可以将该 YAML 文件保存到本地。

    -
    -

    点击创建

    -
  6. -
  7. -

    最后在弹框右下角点击 确定 即可。

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/namespaces/exclusive.html b/site/end-user/kpanda/namespaces/exclusive.html deleted file mode 100644 index 1a5857e..0000000 --- a/site/end-user/kpanda/namespaces/exclusive.html +++ /dev/null @@ -1,967 +0,0 @@ - - - - - - - - - - - - - - -命名空间独享节点 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

启用命名空间独享节点

-

命名空间独享节点指在 kubernetes 集群中,通过污点和污点容忍的方式实现特定命名空间对一个或多个节点 CPU、内存等资源的独享。为特定命名空间配置独享节点后,其它非此命名空间的应用和服务均不能运行在被独享的节点上。使用独享节点可以让重要应用独享一部分计算资源,从而和其他应用实现物理隔离。

-
-

Note

-

在节点被设置为独享节点前已经运行在此节点上的应用和服务将不会受影响,依然会正常运行在该节点上,仅当这些 Pod 被删除或重建时,才会调度到其它非独享节点上。

-
-

准备工作

-

检查当前集群的 kube-apiserver 是否启用了 PodNodeSelectorPodTolerationRestriction 准入控制器。

-

使用命名空间独享节点功能需要用户启用 kube-apiserver 上的 PodNodeSelectorPodTolerationRestriction 两个特性准入控制器(Admission Controllers),关于准入控制器更多说明请参阅 kubernetes Admission Controllers Reference

-

您可以前往当前集群下任意一个 Master 节点上检查 kube-apiserver.yaml 文件内是否启用了这两个特性,也可以在 Master 节点上执行执行如下命令进行快速检查:

-
```bash
-[root@g-master1 ~]# cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep  enable-admission-plugins
-
-# 预期输出如下:
-- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction
-```
-
-

在全局服务集群上启用命名空间独享节点

-

由于全局服务集群上运行着 kpanda、ghippo、insight 等平台基础组件,在 Global 启用命名空间独享节点将可能导致当系统组件重启后,系统组件无法调度到被独享的节点上,影响系统的整体高可用能力。因此,通常情况下,我们不推荐用户在全局服务集群上启用命名空间独享节点特性

-

如果您确实需要在全局服务集群上启用命名空间独享节点,请参考以下步骤进行开启:

-
    -
  1. -

    为全局服务集群的 kube-apiserver 启用了 PodNodeSelectorPodTolerationRestriction 准入控制器

    -
    -

    Note

    -

    如果集群已启用了上述的两个准入控制器,请跳过此步,直接前往配置系统组件容忍。

    -
    -

    前往当前集群下任意一个 Master 节点上修改 kube-apiserver.yaml 配置文件,也可以在 Master 节点上执行执行如下命令进行配置:

    -
    [root@g-master1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml
    -
    -# 预期输出如下:
    -apiVersion: v1
    -kind: Pod
    -metadata:
    -    ......
    -spec:
    -containers:
    -- command:
    -    - kube-apiserver
    -    ......
    -    - --default-not-ready-toleration-seconds=300
    -    - --default-unreachable-toleration-seconds=300
    -    - --enable-admission-plugins=NodeRestriction   #启用的准入控制器列表
    -    - --enable-aggregator-routing=False
    -    - --enable-bootstrap-token-auth=true
    -    - --endpoint-reconciler-type=lease
    -    - --etcd-cafile=/etc/kubernetes/ssl/etcd/ca.crt
    -    ......
    -
    -

    找到 --enable-admission-plugins 参数,加入(以英文逗号分隔的) PodNodeSelectorPodTolerationRestriction 准入控制器。参考如下:

    -
    # 加入 __ ,PodNodeSelector,PodTolerationRestriction__ 
    -- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction 
    -
    -
  2. -
  3. -

    为平台组件所在的命名空间添加容忍注解

    -

    完成准入控制器的开启后,您需要为平台组件所在的命名空间添加容忍注解,以保证平台组件的高可用。

    -

    目前算丰 AI 算力平台的系统组件命名空间如下表:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    命名空间所包含的系统组件
    kpanda-systemkpanda
    hwameiStor-systemhwameiStor
    istio-systemistio
    metallb-systemmetallb
    cert-manager-systemcert-manager
    contour-systemcontour
    kubean-systemkubean
    ghippo-systemghippo
    kcoral-systemkcoral
    kcollie-systemkcollie
    insight-systeminsight、insight-agent:
    ipavo-systemipavo
    kairship-systemkairship
    karmada-systemkarmada
    amamba-systemamamba、jenkins
    skoala-systemskoala
    mspider-systemmspider
    mcamel-systemmcamel-rabbitmq、mcamel-elasticsearch、mcamel-mysql、mcamel-redis、mcamel-kafka、mcamel-minio、mcamel-postgresql
    spidernet-systemspidernet
    kangaroo-systemkangaroo
    gmagpie-systemgmagpie
    dowl-systemdowl
    -

    检查当前集群中所有命名空间是否存在上述的命名空间,执行如下命令,分别为每个命名空间添加注解: scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Exists", "effect": "NoSchedule", "key": "ExclusiveNamespace"}]'

    -

    kubectl annotate ns <namespace-name> scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Exists", "effect": 
    -"NoSchedule", "key": "ExclusiveNamespace"}]'
    -
    -请确保将 <namespace-name> 替换为要添加注解的平台命名空间名称。

    -
  4. -
  5. -

    使用界面为命名空间设置独享节点

    -

    当您确认集群 API 服务器上的 PodNodeSelectorPodTolerationRestriction 两个特性准入控制器已经开启后,请参考如下步骤使用算丰 AI 算力平台的 UI 管理界面为命名空间设置独享节点了。

    -
      -
    1. -

      在集群列表页面点击集群名称,然后在左侧导航栏点击 命名空间

      -

      命名空间

      -
    2. -
    3. -

      点击命名空间名称,然后点击 独享节点 页签,在下方右侧点击 添加节点

      -

      添加节点

      -
    4. -
    5. -

      在页面左侧选择让该命名空间独享哪些节点,在右侧可以清空或删除某个已选节点,最后在底部点击 确定

      -

      确定

      -
    6. -
    7. -

      可以在列表中查看此命名空间的已有的独享节点,在节点右侧可以选择 取消独享

      -
      -

      取消独享之后,其他命名空间下的 Pod 也可以被调度到该节点上。

      -
      -

      取消独享

      -
    8. -
    -
  6. -
-

在 非全局服务集群上启用命名空间独享节点

-

在 非全局服务集群上启用命名空间独享节点,请参考以下步骤进行开启:

-
    -
  1. -

    为当前集群的 kube-apiserver 启用了 PodNodeSelectorPodTolerationRestriction 准入控制器

    -
    -

    Note

    -

    如果集群已启用了上述的两个准入控制器,请跳过此步,直接前往界面为命名空间设置独享节点

    -
    -

    前往当前集群下任意一个 Master 节点上修改 kube-apiserver.yaml 配置文件,也可以在 Master 节点上执行执行如下命令进行配置:

    -
    [root@g-master1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml
    -
    -# 预期输出如下:
    -apiVersion: v1
    -kind: Pod
    -metadata:
    -    ......
    -spec:
    -containers:
    -- command:
    -    - kube-apiserver
    -    ......
    -    - --default-not-ready-toleration-seconds=300
    -    - --default-unreachable-toleration-seconds=300
    -    - --enable-admission-plugins=NodeRestriction   #启用的准入控制器列表
    -    - --enable-aggregator-routing=False
    -    - --enable-bootstrap-token-auth=true
    -    - --endpoint-reconciler-type=lease
    -    - --etcd-cafile=/etc/kubernetes/ssl/etcd/ca.crt
    -    ......
    -
    -

    找到 --enable-admission-plugins 参数,加入(以英文逗号分隔的) PodNodeSelectorPodTolerationRestriction 准入控制器。参考如下:

    -
    # 加入 __ ,PodNodeSelector,PodTolerationRestriction__ 
    -- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction 
    -
    -
  2. -
  3. -

    使用界面为命名空间设置独享节点

    -

    当您确认集群 API 服务器上的 PodNodeSelectorPodTolerationRestriction 两个特性准入控制器已经开启后,请参考如下步骤使用算丰 AI 算力平台的 UI 管理界面为命名空间设置独享节点了。

    -
      -
    1. -

      在集群列表页面点击集群名称,然后在左侧导航栏点击 命名空间

      -

      命名空间

      -
    2. -
    3. -

      点击命名空间名称,然后点击 独享节点 页签,在下方右侧点击 添加节点

      -

      添加节点

      -
    4. -
    5. -

      在页面左侧选择让该命名空间独享哪些节点,在右侧可以清空或删除某个已选节点,最后在底部点击 确定

      -

      确定

      -
    6. -
    7. -

      可以在列表中查看此命名空间的已有的独享节点,在节点右侧可以选择 取消独享

      -
      -

      取消独享之后,其他命名空间下的 Pod 也可以被调度到该节点上。

      -
      -

      取消独享

      -
    8. -
    -
  4. -
  5. -

    为需要高可用的组件所在的命名空间添加容忍注解(可选)

    -

    执行如下命令,需要高可用的组件所在的命名空间添加注解:scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Exists", "effect": -"NoSchedule", "key": "ExclusiveNamespace"}]'

    -
    kubectl annotate ns <namespace-name> scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Exists", "effect": 
    -"NoSchedule", "key": "ExclusiveNamespace"}]'
    -
    -

    请确保将 <namespace-name> 替换为要添加注解的平台命名空间名称。

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/namespaces/podsecurity.html b/site/end-user/kpanda/namespaces/podsecurity.html deleted file mode 100644 index 4198f8a..0000000 --- a/site/end-user/kpanda/namespaces/podsecurity.html +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - - - - - - -容器组安全策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

容器组安全策略

-

容器组安全策略指在 kubernetes 集群中,通过为指定命名空间配置不同的等级和模式,实现在安全的各个方面控制 Pod 的行为,只有满足一定的条件的 Pod 才会被系统接受。它设置三个等级和三种模式,用户可以根据自己的需求选择更加合适的方案来设置限制策略。

-
-

Note

-

一条安全模式仅能配置一条安全策略。同时请谨慎为命名空间配置 enforce 的安全模式,违反后将会导致 Pod 无法创建。

-
-

本节将介绍如何通过容器管理界面为命名空间配置容器组安全策略。

-

前提条件

- -

为命名空间配置容器组安全策略

-
    -
  1. -

    选择需要配置容器组安全策略的命名空间,进入详情页。在 容器组安全策略 页面点击 配置策略 ,进入配置页。

    -

    配置策略列表

    -
  2. -
  3. -

    在配置页点击 添加策略 ,则会出现一条策略,包括安全级别和安全模式,以下是对安全级别和安全策略的详细介绍。

    - - - - - - - - - - - - - - - - - - - - - -
    安全级别描述
    Privileged不受限制的策略,提供最大可能范围的权限许可。此策略允许已知的特权提升。
    Baseline限制性最弱的策略,禁止已知的策略提升。允许使用默认的(规定最少)Pod 配置。
    Restricted限制性非常强的策略,遵循当前的保护 Pod 的最佳实践。
    - - - - - - - - - - - - - - - - - - - - - -
    安全模式描述
    Audit违反指定策略会在审计日志中添加新的审计事件,Pod 可以被创建。
    Warn违反指定策略会返回用户可见的告警信息,Pod 可以被创建。
    Enforce违反指定策略会导致 Pod 无法创建。
    -

    添加策略

    -
  4. -
  5. -

    不同的安全级别对应不同的检查项,若您不知道该如何为您的命名空间配置,可以点击页面右上角的 策略配置项说明 查看详细信息。

    -

    配置项说明01

    -

    配置项说明01

    -
  6. -
  7. -

    点击确定,若创建成功,则页面上将出现您配置的安全策略。

    -

    创建成功

    -
  8. -
  9. -

    点击 还可以编辑或者删除您配置的安全策略。

    -

    操作

    -
  10. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/network/create-ingress.html b/site/end-user/kpanda/network/create-ingress.html deleted file mode 100644 index 4fa1ff2..0000000 --- a/site/end-user/kpanda/network/create-ingress.html +++ /dev/null @@ -1,837 +0,0 @@ - - - - - - - - - - - - - - -创建路由 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建路由(Ingress)

-

在 Kubernetes 集群中,Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 -流量路由由 Ingress 资源上定义的规则控制。下面是一个将所有流量都发送到同一 Service 的简单 Ingress 示例:

-

ingress-diagram

-

Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。

-

前提条件

- -

创建路由

-
    -
  1. -

    NS Editor 用户成功登录后,点击左上角的 集群列表 进入 集群列表 页面。在集群列表中,点击一个集群名称。

    -

    集群列表

    -
  2. -
  3. -

    在左侧导航栏中,点击 容器网络 -> 路由 进入服务列表,点击右上角 创建路由 按钮。

    -

    服务与路由

    -
    -

    Note

    -

    也可以通过 YAML 创建 一个路由。

    -
    -
  4. -
  5. -

    打开 创建路由 页面,进行配置。可选择两种协议类型,参考以下两个参数表进行配置。

    -
  6. -
-

创建 HTTP 协议路由

-

输入如下参数:

-

创建路由

-
    -
  • 路由名称 :必填,输入新建路由的名称。
  • -
  • 命名空间 :必填,选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述。
  • -
  • 设置路由规则
      -
    • 域名 :必填,使用域名对外提供访问服务。默认为集群的域名。
    • -
    • 协议 :必填,指授权入站到达集群服务的协议,支持 HTTP (不需要身份认证)或 HTTPS(需需要配置身份认证) 协议。 - 这里选择 HTTP 协议的路由。
    • -
    • 转发策略 :选填,指定 Ingress 的访问策略
    • -
    • 路径 :指定服务访问的URL路径,默认为根路径
    • -
    • 目标服务 :进行路由的服务名称
    • -
    • 目标服务端口 :服务对外暴露的端口
    • -
    -
  • -
  • 负载均衡器类型 :必填,Ingress 实例的使用范围
      -
    • 平台级负载均衡器 :同一个集群内,共享同一个 Ingress 实例,其中 Pod 都可以接收到由该负载均衡分发的请求
    • -
    • 租户级负载均衡器 :租户负载均衡器,Ingress 实例独属于当前命名空,或者独属于某一工作空间, - 并且设置的工作空间中包含当前命名空间,其中 Pod 都可以接收到由该负载均衡分发的请求
    • -
    -
  • -
  • Ingress Class :选填,选择对应的 Ingress 实例,选择后将流量导入到指定的 Ingress 实例。
      -
    • 为 None 时使用默认的 DefaultClass,请在创建 Ingress 实例时设置 DefaultClass, - 更多信息请参考 Ingress Class
    • -
    • 若选择其他实例(如 ngnix ),则会出现高级配置,可设置 会话保持路径重写重定向流量分发
    • -
    -
  • -
  • 会话保持 :选填,会话保持分为 三种类型: L4 源地址哈希Cookie KeyL7 Header Name ,开启后根据对应规则进行会话保持。
      -
    • L4 源地址哈希 :开启后默认在 Annotation 中加入如下标签: - nginx.ingress.kubernetes.io/upstream-hash-by: "$binary_remote_addr"
    • -
    • Cookie Key :开启后来自特定客户端的连接将传递至相同 Pod,开启后 默认在 Annotation 中增加如下参数: - nginx.ingress.kubernetes.io/affinity: "cookie"。nginx.ingress.kubernetes.io/affinity-mode: persistent
    • -
    • L7 Header Name :开启后默认在 Annotation 中加入如下标签: - nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x_forwarded_for"
    • -
    -
  • -
  • 路径重写 :选填, rewrite-target ,某些场景中后端服务暴露的URL与Ingress规则中指定的路径不同,如果不进行URL重写配置,访问会出现错误。
  • -
  • 重定向 :选填, permanent-redirect ,永久重定向,输入重写路径后,访问路径重定向至设置的地址。
  • -
  • 流量分发 :选填,开启后并设置后,根据设定条件进行流量分发。
      -
    • 基于权重 :设定权重后,在创建的 Ingress 添加如下 Annotation: - nginx.ingress.kubernetes.io/canary-weight: "10"
    • -
    • 基于 Cookie :设定 Cookie 规则后,流量根据设定的 Cookie 条件进行流量分发
    • -
    • 基于 Header : 设定 Header 规则后,流量根据设定的 Header 条件进行流量分发
    • -
    -
  • -
  • 标签 :选填,为路由添加标签
  • -
  • 注解 :选填,为路由添加注解
  • -
-

创建 HTTPS 协议路由

-

输入如下参数: -创建路由

-
-

Note

-

注意:与 HTTP 协议 设置路由规则 不同,增加密钥选择证书,其他基本一致。

-
-
    -
  • 协议 :必填指授权入站到达集群服务的协议,支持 HTTP (不需要身份认证)或 HTTPS(需需要配置身份认证) 协议。这里选择 HTTPS 协议的路由。
  • -
  • 密钥 :必填,Https TLS 证书,创建秘钥
  • -
-

完成路由创建

-

配置完所有参数后,点击 确定 按钮,自动返回路由列表。在列表右侧,点击 ,可以修改或删除所选路由。

-

路由列表

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/network/create-services.html b/site/end-user/kpanda/network/create-services.html deleted file mode 100644 index 9810e69..0000000 --- a/site/end-user/kpanda/network/create-services.html +++ /dev/null @@ -1,1027 +0,0 @@ - - - - - - - - - - - - - - -创建服务 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建服务(Service)

-

在 Kubernetes 集群中,每个 Pod 都有一个内部独立的 IP 地址,但是工作负载中的 Pod 可能会被随时创建和删除,直接使用 Pod IP 地址并不能对外提供服务。

-

这就需要创建服务,通过服务您会获得一个固定的 IP 地址,从而实现工作负载前端和后端的解耦,让外部用户能够访问服务。同时,服务还提供了负载均衡(LoadBalancer)功能,使用户能从公网访问到工作负载。

-

前提条件

- -

创建服务

-
    -
  1. -

    NS Editor 用户成功登录后,点击左上角的 集群列表 进入 集群列表 页面。在集群列表中,点击一个集群名称。

    -

    集群列表

    -
  2. -
  3. -

    在左侧导航栏中,点击 容器网络 -> 服务 进入服务列表,点击右上角 创建服务 按钮。

    -

    服务与路由

    -
    -

    Tip

    -

    也可以通过 YAML 创建 一个服务。

    -
    -
  4. -
  5. -

    打开 创建服务 页面,选择一种访问类型,参考以下几个参数表进行配置。

    -

    创建服务

    -
  6. -
-

创建 ClusterIP 服务

-

点选 集群内访问(ClusterIP) ,这是指通过集群的内部 IP 暴露服务,选择此项的服务只能在集群内部访问。这是默认的服务类型。参考下表配置参数。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数说明举例值
访问类型【类型】必填
【含义】指定 Pod 服务发现的方式,这里选择集群内访问(ClusterIP)。
ClusterIP
服务名称【类型】必填
【含义】输入新建服务的名称。
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
Svc-01
命名空间【类型】必填
【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
default
标签选择器【类型】必填
【含义】添加标签,Service 根据标签选择 Pod,填写后点击“添加”。也可以引用已有工作负载的标签,点击 引用负载标签 ,在弹出的窗口中选择负载,系统会默认将所选的负载标签作为选择器。
app:job01
端口配置【类型】必填
【含义】为服务添加协议端口,需要先选择端口协议类型,目前支持 TCP、UDP 两种传输协议。
端口名称:输入自定义的端口的名称。
服务端口(port):Pod 对外提供服务的访问端口。
容器端口(targetport):工作负载实际监听的容器端口,用来对集群内暴露服务。
会话保持【类型】选填
【含义】开启后,相同客户端的请求将转发至同一 Pod
开启
会话保持最大时长【类型】选填
【含义】开启会话保持后,保持的最大时长,默认为 30 秒
30 秒
注解【类型】选填
【含义】为服务添加注解
-

创建 NodePort 服务

-

点选 节点访问(NodePort) ,这是指通过每个节点上的 IP 和静态端口( NodePort )暴露服务。 NodePort 服务会路由到自动创建的 ClusterIP 服务。通过请求 <节点 IP>:<节点端口> ,您可以从集群的外部访问一个 NodePort 服务。参考下表配置参数。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数说明举例值
访问类型【类型】必填
【含义】指定 Pod 服务发现的方式,这里选择节点访问(NodePort)。
NodePort
服务名称【类型】必填
【含义】输入新建服务的名称。
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
Svc-01
命名空间【类型】必填
【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
default
标签选择器【类型】必填
【含义】添加标签,Service 根据标签选择 Pod,填写后点击“添加”。也可以引用已有工作负载的标签,点击 引用负载标签 ,在弹出的窗口中选择负载,系统会默认将所选的负载标签作为选择器。
端口配置【类型】必填
【含义】为服务添加协议端口,需要先选择端口协议类型,目前支持 TCP、UDP 两种传输协议。
端口名称:输入自定义的端口的名称。
服务端口(port):Pod 对外提供服务的访问端口。默认情况下,为了方便起见,服务端口被设置为与容器端口字段相同的值。
容器端口(targetport):工作负载实际监听的容器端口。
节点端口(nodeport):节点的端口,接收来自 ClusterIP 传输的流量。用来做外部流量访问的入口。
会话保持【类型】选填
【含义】开启后,相同客户端的请求将转发至同一 Pod
开启后 Service 的 .spec.sessionAffinityClientIP ,详情请参考:Service 的会话亲和性
开启
会话保持最大时长【类型】选填
【含义】开启会话保持后,保持的最大时长,默认超时时长为 30 秒
.spec.sessionAffinityConfig.clientIP.timeoutSeconds 默认设置为 30 秒
30 秒
注解【类型】选填
【含义】为服务添加注解
-

创建 LoadBalancer 服务

-

点选 负载均衡(LoadBalancer) ,这是指使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。参考下表配置参数。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数说明举例值
访问类型【类型】必填
【含义】指定 Pod 服务发现的方式,这里选择负载均衡(LoadBalancer)。
LoadBalancer
服务名称【类型】必填
【含义】输入新建服务的名称。
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
Svc-01
命名空间【类型】必填
【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
default
外部流量策略【类型】必填
【含义】设置外部流量策略。
Cluster:流量可以转发到集群中所有节点上的 Pod。
Local:流量只发给本节点上的 Pod。
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
标签选择器【类型】必填
【含义】添加标签,Service 根据标签选择 Pod,填写后点击“添加”。也可以引用已有工作负载的标签,点击 引用负载标签 ,在弹出的窗口中选择负载,系统会默认将所选的负载标签作为选择器。
负载均衡类型【类型】必填
【含义】使用的负载均衡类型,当前支持 MetalLB 和其他。
MetalLB IP 池【类型】必填
【含义】选择的 负载均衡类型为 MetalLB 时,LoadBalancer Service默认会从这个池中分配 IP 地址, 并且通过 APR 宣告这个池中的所有 IP 地址
负载均衡地址【类型】必填
【含义】
1.如使用的是公有云 CloudProvider,此处填写的为云厂商提供的负载均衡地址;
2.如果上述负载均衡类型选择为 MetalLB ,默认从上述 IP 池中获取 IP ,如果不填则自动获取。
端口配置【类型】必填
【含义】为服务添加协议端口,需要先选择端口协议类型,目前支持 TCP、UDP 两种传输协议。
端口名称:输入自定义的端口的名称。
服务端口(port):Pod 对外提供服务的访问端口。默认情况下,为了方便起见,服务端口被设置为与容器端口字段相同的值。
容器端口(targetport):工作负载实际监听的容器端口。
节点端口(nodeport):节点的端口,接收来自 ClusterIP 传输的流量。用来做外部流量访问的入口。
注解【类型】选填
【含义】为服务添加注解
-

创建 ExternalName 服务

-

点选 外部服务(ExternalName) ,这是指通过将服务映射到外部域名来暴露服务。选择此项的服务不会创建典型的 ClusterIP 或 NodePort,而是通过 DNS 名称解析将请求重定向到外部的服务地址。参考下表配置参数。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数说明举例值
访问类型【类型】必填
【含义】指定 Pod 服务发现的方式,这里选择外部服务(ExternalName)。
ExternalName
服务名称【类型】必填
【含义】输入新建服务的名称。
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
Svc-01
命名空间【类型】必填
【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
default
域名【类型】必填
-

完成服务创建

-

配置完所有参数后,点击 确定 按钮,自动返回服务列表。在列表右侧,点击 ,可以修改或删除所选服务。

-

服务列表

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/network/network-policy.html b/site/end-user/kpanda/network/network-policy.html deleted file mode 100644 index 380a8fc..0000000 --- a/site/end-user/kpanda/network/network-policy.html +++ /dev/null @@ -1,842 +0,0 @@ - - - - - - - - - - - - - - -网络策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

网络策略

-

网络策略(NetworkPolicy)可以在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量。容器管理模块目前支持创建基于 Pod 或命名空间的网络策略,支持通过标签选择器来设定哪些流量可以进入或离开带有特定标签的 Pod。

-

有关网络策略的更多详情,可参考 Kubernetes 官方文档网络策略

-

创建网络策略

-

目前支持通过 YAML 和表单两种方式创建网络策略,这两种方式各有优劣,可以满足不同用户的使用需求。

-

通过 YAML 创建步骤更少、更高效,但门槛要求较高,需要熟悉网络策略的 YAML 文件配置。

-

通过表单创建更直观更简单,根据提示填写对应的值即可,但步骤更加繁琐。

-

YAML 创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器网络 -> 网络策略 -> YAML 创建

    -

    路径

    -
  2. -
  3. -

    在弹框中输入或粘贴事先准备好的 YAML 文件,然后在弹框底部点击 确定

    -

    yaml

    -
  4. -
-

表单创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器网络 -> 网络策略 -> 创建策略

    -

    路径

    -
  2. -
  3. -

    填写基本信息。

    -

    名称和命名空间在创建之后不可更改。

    -

    基本信息

    -
  4. -
  5. -

    填写策略配置。

    -

    策略配置分为入流量策略和出流量策略。如果源 Pod 想要成功连接到目标 Pod,源 Pod 的出流量策略和目标 Pod 的入流量策略都需要允许连接。如果任何一方不允许连接,都会导致连接失败。

    -
      -
    • -

      入流量策略:点击 开始配置策略,支持配置多条策略。多条网络策略的效果相互叠加,只有同时满足所有网络策略,才能成功建立连接。

      -

      ingress

      -
    • -
    • -

      出流量策略

      -

      egress

      -
    • -
    -
  6. -
-

查看网络策略

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器网络 -> 网络策略 ,点击网络策略的名称。

    -

    路径

    -
  2. -
  3. -

    查看该策略的基本配置、关联实例信息、入流量策略、出流量策略。

    -

    详情

    -
  4. -
-
-

Info

-

在关联实例页签下,支持查看实例监控、日志、容器列表、YAML 文件、事件等。

-

查看实例信息

-
-

更新网络策略

-

有两种途径可以更新网络策略。支持通过表单或 YAML 文件更新网络策略。

-
    -
  • -

    在网络策略列表页面,找到需要更新的策略,在右侧的操作栏下选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 更新。

    -

    更新

    -
  • -
  • -

    点击网络策略的名称,进入网络策略的详情页面后,在页面右上角选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 更新。

    -

    更新

    -
  • -
-

删除网络策略

-

有两种途径可以删除网络策略。支持通过表单或 YAML 文件更新网络策略。

-
    -
  • -

    在网络策略列表页面,找到需要更新的策略,在右侧的操作栏下选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 删除。

    -

    删除

    -
  • -
  • -

    点击网络策略的名称,进入网络策略的详情页面后,在页面右上角选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 删除。

    -

    删除

    -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/add-node.html b/site/end-user/kpanda/nodes/add-node.html deleted file mode 100644 index dd147f9..0000000 --- a/site/end-user/kpanda/nodes/add-node.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - - - - - - - -集群节点扩容 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

集群节点扩容

-

随着业务应用不断增长,集群资源日趋紧张,这时可以基于 kubean 对集群节点进行扩容。扩容后,应用可以运行在新增的节点上,缓解资源压力。

-

只有通过容器管理模块创建的集群才支持节点扩缩容,从外部接入的集群不支持此操作。本文主要介绍同种架构下工作集群的 工作节点 扩容。

-
    -
  1. -

    集群列表 页面点击目标集群的名称。

    -

    集群角色 中带有 接入集群 的标签,则说明该集群不支持节点扩缩容。

    -

    进入集群列表页面

    -
  2. -
  3. -

    在左侧导航栏点击 节点管理 ,然后在页面右上角点击 接入节点

    -

    节点管理

    -
  4. -
  5. -

    输入主机名称和节点 IP 并点击 确定

    -

    点击 ➕ 添加工作节点 可以继续接入更多节点。

    -

    节点管理

    -
  6. -
-
-

Note

-

接入节点大约需要 20 分钟,请您耐心等待。

-
-

参考文档

- -
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/delete-node.html b/site/end-user/kpanda/nodes/delete-node.html deleted file mode 100644 index b2c3fed..0000000 --- a/site/end-user/kpanda/nodes/delete-node.html +++ /dev/null @@ -1,411 +0,0 @@ - - - - - - - - - - - - -集群节点缩容 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

集群节点缩容

-

当业务高峰期结束之后,为了节省资源成本,可以缩小集群规模,卸载冗余的节点,即节点缩容。节点卸载后,应用无法继续运行在该节点上。

-

前提条件

-
    -
  • 当前操作用户具有 Cluster Admin 角色授权 。
  • -
  • 只有通过容器管理模块创建的集群才支持节点扩缩容,从外部接入的集群不支持此操作。
  • -
  • 卸载节点之前,需要暂停调度该节点,并且将该节点上的应用都驱逐至其他节点。
  • -
  • 驱逐方式:登录控制器节点,通过 kubectl drain 命令驱逐节点上所有 Pod。安全驱逐的方式可以允许容器组里面的容器优雅地中止。
  • -
-

注意事项

-
    -
  1. -

    集群节点缩容时,只能逐个进行卸载,无法批量卸载。

    -
  2. -
  3. -

    如需卸载集群控制器节点,需要确保最终控制器节点数为 奇数

    -
  4. -
  5. -

    集群节点缩容时不可下线 第一个控制器 节点。如果必须执行此操作,请联系售后工程师。

    -
  6. -
-

操作步骤

-
    -
  1. -

    集群列表 页面点击目标集群的名称。

    -

    集群角色 中带有 接入集群 的标签,则说明该集群不支持节点扩缩容。

    -

    进入集群列表页面

    -
  2. -
  3. -

    在左侧导航栏点击 节点管理 ,找到需要卸载的节点,点击 选择 移除节点

    -

    移除节点

    -
  4. -
  5. -

    输入节点名称,并点击 删除 进行确认。

    -

    移除节点

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/labels-annotations.html b/site/end-user/kpanda/nodes/labels-annotations.html deleted file mode 100644 index e28b312..0000000 --- a/site/end-user/kpanda/nodes/labels-annotations.html +++ /dev/null @@ -1,675 +0,0 @@ - - - - - - - - - - - - - - -标签与注解 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

标签与注解

-

标签(Labels)是为 Pod、节点、集群等 Kubernetes 对象添加的标识性键值对,可结合标签选择器查找并筛选满足某些条件的 Kubernetes 对象。每个键对于给定对象必须是唯一的。

-

注解(Annotations)和标签一样,也是键/值对,但不具备标识或筛选功能。 -使用注解可以为节点添加任意的元数据。 -注解的键通常使用的格式为 前缀(可选)/名称(必填) ,例如 nfd.node.kubernetes.io/extended-resources 。 -如果省略前缀,表示该注解键是用户私有的。

-

有关标签和注解的更多信息,可参考 Kubernetes 的官方文档标签和选择算符注解

-

添加/删除标签与注解的步骤如下:

-
    -
  1. -

    集群列表 页面点击目标集群的名称。

    -

    进入集群列表页面

    -
  2. -
  3. -

    在左侧导航栏点击 节点管理 ,在节点右侧点击 操作图标,点击 修改标签修改注解

    -

    暂停调度

    -
  4. -
  5. -

    点击 ➕ 添加 可以添加标签或注解,点击 X 可以删除标签或注解,最后点击 确定

    -

    节点管理

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/node-authentication.html b/site/end-user/kpanda/nodes/node-authentication.html deleted file mode 100644 index f731db5..0000000 --- a/site/end-user/kpanda/nodes/node-authentication.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - - - - - - -使用 SSH 密钥认证节点 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

使用 SSH 密钥认证节点

-

如果您选择使用 SSH 密钥作为待创建集群的节点认证方式,您需要按照如下说明配置公私钥。

-
    -
  1. -

    执行如下命令,在 待建集群的管理集群中的任意节点 上生成公私钥。

    -
    cd /root/.ssh
    -ssh-keygen -t rsa
    -
    -
  2. -
  3. -

    执行 ls 命令查看管理集群上的密钥是否创建成功,正确反馈如下:

    -
    ls
    -id_rsa  id_rsa.pub  known_hosts
    -
    -

    其中名为 id_rsa 的文件是私钥,名为 id_rsa.pub 的文件是公钥。

    -
  4. -
  5. -

    执行如下命令,分别将公钥文件 id_rsa.pub 加载到待创建集群的所有节点上。

    -
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.0
    -
    -

    将上面命令中的 root@10.0.0.0 用户账号和节点 IP 替换为待创建集群的节点用户名和 IP。** 需要在待创建集群的每台节点都执行相同的操作 **。

    -
  6. -
  7. -

    执行如下命令,查看步骤 1 所创建的私钥文件 id_rsa

    -
    cat /root/.ssh/id_rsa
    -
    -

    输出如下内容:

    -
    -----BEGIN RSA PRIVATE KEY-----
    -MIIEpQIBAAKCAQEA3UvyKINzY5BFuemQ+uJ6q+GqgfvnWwNC8HzZhpcMSjJy26MM
    -UtBEBJxy8fMi57XcjYxPibXW/wnd+32ICCycqCwByUmuXeCC1cjlCQDqjcAvXae7
    -Y54IXGF7wm2IsMNwf0kjFEXjuS48FLDA0mGRaN3BG+Up5geXcHckg3K5LD8kXFFx
    -dEmSIjdyw55NaUitmEdHzN7cIdfi6Z56jcV8dcFBgWKUx+ebiyPmZBkXToz6GnMF
    -rswzzZCl+G6Jb2xTGy7g7ozb4BoZd1IpSD5EhDanRrESVE0C5YuJ5zUAC0CvVd1l
    -v67AK8Ko6MXToHp01/bcsvlM6cqgwUFXZKVeOwIDAQABAoIBAQCO36GQlo3BEjxy
    -M2HvGJmqrx+unDxafliRe4nVY2AD515Qf4xNSzke4QM1QoyenMOwf446krQkJPK0
    -k+9nl6Xszby5gGCbK4BNFk8I6RaGPjZWeRx6zGUJf8avWJiPxx6yjz2esSC9RiR0
    -F0nmiiefVMyAfgv2/5++dK2WUFNNRKLgSRRpP5bRaD5wMzzxtSSXrUon6217HO8p
    -3RoWsI51MbVzhdVgpHUNABcoa0rpr9svT6XLKZxY8mxpKFYjM0Wv2JIDABg3kBvh
    -QbJ7kStCO3naZjKMU9UuSqVJs06cflGYw7Or8/tABR3LErNQKPjkhAQqt0DXw7Iw
    -3tKdTAJBAoGBAP687U7JAOqQkcphek2E/A/sbO/d37ix7Z3vNOy065STrA+ZWMZn
    -pZ6Ui1B/oJpoZssnfvIoz9sn559X0j67TljFALFd2ZGS0Fqh9KVCqDvfk+Vst1dq
    -+3r/yZdTOyswoccxkJiC/GDwZGK0amJWqvob39JCZhDAKIGLbGMmjdAHAoGBAN5k
    -m1WGnni1nZ+3dryIwgB6z1hWcnLTamzSET6KhSuo946ET0IRG9xtlheCx6dqICbr
    -Vk1Y4NtRZjK/p/YGx59rDWf7E3I8ZMgR7mjieOcUZ4lUlA4l7ZIlW/2WZHW+nUXO
    -Ti20fqJ8qSp4BUvOvuth1pz2GLUHe2/Fxjf7HIstAoGBAPHpPr9r+TfIlPsJeRj2
    -6lzA3G8qWFRQfGRYjv0fjv0pA+RIb1rzgP/I90g5+63G6Z+R4WdcxI/OJJNY1iuG
    -uw9n/pFxm7U4JC990BPE6nj5iLz+clpNGYckNDBF9VG9vFSrSDLdaYkxoVNvG/xJ
    -a9Na90H4lm7f3VewrPy310KvAoGAZr+mwNoEh5Kpc6xo8Gxi7aPP/mlaUVD6X7Ki
    -gvmu02AqmC7rC4QqEiqTaONkaSXwGusqIWxJ3yp5hELmUBYLzszAEeV/s4zRp1oZ
    -g133LBRSTbHFAdBmNdqK6Nu+KGRb92980UMOKvZbliKDl+W6cbfvVu+gtKrzTc3b
    -aevb4TUCgYEAnJAxyVYDP1nJf7bjBSHXQu1E/DMwbtrqw7dylRJ8cAzI7IxfSCez
    -7BYWq41PqVd9/zrb3Pbh2phiVzKe783igAIMqummcjo/kZyCwFsYBzK77max1jF5
    -aPQsLbRS2aDz8kIH6jHPZ/R+15EROmdtLmA7vIJZGerWWQR0dUU+XXA=
    -
    -

    将私钥内容复制后填至界面密钥输入框。

    -

    SSH 认证

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/node-check.html b/site/end-user/kpanda/nodes/node-check.html deleted file mode 100644 index 8e525b4..0000000 --- a/site/end-user/kpanda/nodes/node-check.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - - - - - - -创建集群节点可用性检查 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

创建集群节点可用性检查

-

在创建集群或为已有集群添加节点时,请参阅下表,检查节点配置,以避免因节点配置错误导致集群创建或扩容失败。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
检查项描述
操作系统参考支持的架构及操作系统
SELinux关闭
防火墙关闭
架构一致性节点间 CPU 架构一致(如均为 ARM 或 x86)
主机时间所有主机间同步误差小于 10 秒。
网络联通性节点及其 SSH 端口能够正常被平台访问。
CPU可用 CPU 资源大于 4 Core
内存可用内存资源大于 8 GB
-

支持的架构及操作系统

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
架构操作系统备注
ARMKylin Linux Advanced Server release V10 (Sword) SP2推荐
ARMUOS Linux
ARMopenEuler
x86CentOS 7.x推荐
x86Redhat 7.x推荐
x86Redhat 8.x推荐
x86Flatcar Container Linux by Kinvolk
x86Debian Bullseye, Buster, Jessie, Stretch
x86Ubuntu 16.04, 18.04, 20.04, 22.04
x86Fedora 35, 36
x86Fedora CoreOS
x86openSUSE Leap 15.x/Tumbleweed
x86Oracle Linux 7, 8, 9
x86Alma Linux 8, 9
x86Rocky Linux 8, 9
x86Amazon Linux 2
x86Kylin Linux Advanced Server release V10 (Sword) - SP2 海光
x86UOS Linux
x86openEuler
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/node-details.html b/site/end-user/kpanda/nodes/node-details.html deleted file mode 100644 index 862cb11..0000000 --- a/site/end-user/kpanda/nodes/node-details.html +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - - - - - - - - - -节点详情 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

节点详情

-

接入或创建集群之后,可以查看集群中各个节点的信息,包括节点状态、标签、资源用量、Pod、监控信息等。

-
    -
  1. -

    集群列表 页面点击目标集群的名称。

    -

    进入集群列表页面

    -
  2. -
  3. -

    在左侧导航栏点击 节点管理 ,可以查看节点状态、角色、标签、CPU/内存使用情况、IP 地址、创建时间。

    -

    暂停调度

    -
  4. -
  5. -

    点击节点名称,可以进入节点详情页面查看更多信息,包括概览信息、容器组信息、标签注解信息、事件列表、状态等。

    -

    节点管理

    -

    此外,还可以查看节点的 YAML 文件、监控信息、标签和注解等。

    -

    节点管理

    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/schedule.html b/site/end-user/kpanda/nodes/schedule.html deleted file mode 100644 index 2688a0e..0000000 --- a/site/end-user/kpanda/nodes/schedule.html +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - - - - - - - - - -节点调度 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

节点调度

-

支持将节点暂停调度或恢复调度。暂停调度指,停止将 Pod 调度到该节点。恢复调度指,可以将 Pod 调度到该节点。

-
    -
  1. -

    集群列表 页面点击目标集群的名称。

    -

    进入集群列表页面

    -
  2. -
  3. -

    在左侧导航栏点击 节点管理 ,在节点右侧点击 操作图标,点击 暂停调度 按钮即可暂停调度该节点。

    -

    暂停调度

    -
  4. -
  5. -

    在节点右侧点击 操作图标,点击 恢复调度 按钮即可恢复调度该节点。

    -

    节点管理

    -
  6. -
-

节点调度状态可能因网络情况有所延迟,点击搜索框右侧的刷新图标可以刷新节点调度状态。

-

节点管理

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/nodes/taints.html b/site/end-user/kpanda/nodes/taints.html deleted file mode 100644 index b314a30..0000000 --- a/site/end-user/kpanda/nodes/taints.html +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - - - - -污点管理 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

节点污点管理

-

污点 (Taint) 能够使节点排斥某一类 Pod,避免 Pod 被调度到该节点上。 -每个节点上可以应用一个或多个污点,不能容忍这些污点的 Pod 则不会被调度该节点上。

-

注意事项

-
    -
  1. 当前操作用户应具备 NS Editor 角色授权或其他更高权限。
  2. -
  3. 为节点添加污点之后,只有能容忍该污点的 Pod 才能被调度到该节点。
  4. -
-

操作步骤

-
    -
  1. -

    集群列表 页找到目标集群,点击集群名称,进入 集群概览 页面。

    -

    点击集群名称

    -
  2. -
  3. -

    在左侧导航栏,点击 节点管理 ,找到需要修改污点的节点,点击右侧的 操作图标并点击 修改污点 按钮。

    -

    修改污点

    -
  4. -
  5. -

    在弹框内输入污点的键值信息,选择污点效果,点击 确定

    -

    点击 ➕ 添加 可以为节点添加多个污点,点击污点效果右侧的 X 可以删除污点。

    -

    目前支持三种污点效果:

    -
      -
    • NoSchedule:新的 Pod 不会被调度到带有此污点的节点上,除非新的 Pod 具有相匹配的容忍度。当前正在节点上运行的 Pod 不会 被驱逐。
    • -
    • NoExecute:这会影响已在节点上运行的 Pod:
        -
      • 如果 Pod 不能容忍此污点,会马上被驱逐。
      • -
      • 如果 Pod 能够容忍此污点,但是在容忍度定义中没有指定 tolerationSeconds,则 Pod 还会一直在这个节点上运行。
      • -
      • 如果 Pod 能够容忍此污点而且指定了 tolerationSeconds,则 Pod 还能在这个节点上继续运行指定的时长。这段时间过去后,再从节点上驱除这些 Pod。
      • -
      -
    • -
    • PreferNoSchedule:这是“软性”的 NoSchedule。控制平面将**尝试**避免将不容忍此污点的 Pod 调度到节点上,但不能保证完全避免。所以要尽量避免使用此污点。
    • -
    -

    修改污点

    -
  6. -
-

有关污点的更多详情,请参阅 Kubernetes 官方文档:污点和容忍度

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/olm/import-miniooperator.html b/site/end-user/kpanda/olm/import-miniooperator.html deleted file mode 100644 index b898a8e..0000000 --- a/site/end-user/kpanda/olm/import-miniooperator.html +++ /dev/null @@ -1,810 +0,0 @@ - - - - - - - - - - - - - - -Operator 应用 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

导入离线 MinIo Operator

-

本文将介绍在离线环境下如何导入 MinIo Operator。

-

前提条件

-
    -
  • 当前集群已接入容器管理且全局服务集群已经安装 kolm 组件(helm 模板搜索 kolm)
  • -
  • 当前集群已经安装 olm 组件且版本 >= 0.2.4 (helm 模板搜索 olm)
  • -
  • 支持执行 Docker 命令
  • -
  • 准备一个镜像仓库
  • -
-

操作步骤

-
    -
  1. -

    在执行环境中设置环境变量并在后续步骤使用,执行命令:

    -
    export OPM_IMG=10.5.14.200/quay.m.daocloud.io/operator-framework/opm:v1.29.0 
    -export BUNDLE_IMG=10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3 
    -
    -

    如何获取上述镜像地址:

    -

    前往 容器管理 -> 选择当前集群 -> helm 应用 -> 查看 olm 组件 -> 插件设置 ,找到后续步骤所需 opm,minio,minio bundle,minio operator 的镜像。

    -

    olm

    -
    以上诉截图为例,则四个镜像地址如下
    -
    -# opm 镜像 
    -10.5.14.200/quay.m.daocloud.io/operator-framework/opm:v1.29.0
    -
    -# minio 镜像
    -10.5.14.200/quay.m.daocloud.io/minio/minio:RELEASE.2023-03-24T21-41-23Z
    -
    -# minio bundle 镜像
    -10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3
    -
    -# minio operator 镜像 
    -10.5.14.200/quay.m.daocloud.io/minio/operator:v5.0.3
    -
    -
  2. -
  3. -

    执行 opm 命令获取离线 bundle 镜像包含的 operator。

    -
    # 创建 operator 存放目录
    -$ mkdir minio-operator && cd minio-operator 
    -
    -# 获取 operator yaml 
    -$ docker run --user root  -v $PWD/minio-operator:/minio-operator ${OPM_IMG} alpha bundle unpack --skip-tls-verify -v -d ${BUNDLE_IMG} -o ./minio-operator
    -
    -# 预期结果
    -.
    -└── minio-operator
    -    ├── manifests
    -       ├── console-env_v1_configmap.yaml
    -       ├── console-sa-secret_v1_secret.yaml
    -       ├── console_v1_service.yaml
    -       ├── minio-operator.clusterserviceversion.yaml
    -       ├── minio.min.io_tenants.yaml
    -       ├── operator_v1_service.yaml
    -       ├── sts.min.io_policybindings.yaml
    -       └── sts_v1_service.yaml
    -    └── metadata
    -        └── annotations.yaml
    -
    -3 directories, 9 files
    -
    -
  4. -
  5. -

    替换  minio-operator/manifests/minio-operator.clusterserviceversion.yaml  文件中的所有镜像地址为离线镜像仓库地址镜像。

    -

    替换前:

    -

    image1

    -

    替换后:

    -

    image2

    -
  6. -
  7. -

    生成构建 bundle 镜像的 Dockerfile

    -
    $ docker run --user root  -v $PWD:/minio-operator -w /minio-operator ${OPM_IMG} alpha bundle generate --channels stable,beta -d /minio-operator/minio-operator/manifests -e stable -p minio-operator  
    -
    -# 预期结果
    -.
    -├── bundle.Dockerfile
    -└── minio-operator
    -    ├── manifests
    -       ├── console-env_v1_configmap.yaml
    -       ├── console-sa-secret_v1_secret.yaml
    -       ├── console_v1_service.yaml
    -       ├── minio-operator.clusterserviceversion.yaml
    -       ├── minio.min.io_tenants.yaml
    -       ├── operator_v1_service.yaml
    -       ├── sts.min.io_policybindings.yaml
    -       └── sts_v1_service.yaml
    -    └── metadata
    -        └── annotations.yaml
    -
    -3 directories, 10 files
    -
    -
  8. -
  9. -

    执行构建命令,构建 bundle 镜像且推送到离线 registry。

    -
    # 设置新的 bundle image 
    -export OFFLINE_BUNDLE_IMG=10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3-offline 
    -
    -$ docker build . -f bundle.Dockerfile -t ${OFFLINE_BUNDLE_IMG}  
    -
    -$ docker push ${OFFLINE_BUNDLE_IMG}
    -
    -
  10. -
  11. -

    生成构建 catalog 镜像的 Dockerfile。

    -
    $ docker run --user root  -v $PWD:/minio-operator  -w /minio-operator ${OPM_IMG} index add  --bundles ${OFFLINE_BUNDLE_IMG} --generate --binary-image ${OPM_IMG} --skip-tls-verify
    -
    -# 预期结果
    -.
    -├── bundle.Dockerfile
    -├── database
    -   └── index.db
    -├── index.Dockerfile
    -└── minio-operator
    -    ├── manifests
    -       ├── console-env_v1_configmap.yaml
    -       ├── console-sa-secret_v1_secret.yaml
    -       ├── console_v1_service.yaml
    -       ├── minio.min.io_tenants.yaml
    -       ├── minio-operator.clusterserviceversion.yaml
    -       ├── operator_v1_service.yaml
    -       ├── sts.min.io_policybindings.yaml
    -       └── sts_v1_service.yaml
    -    └── metadata
    -        └── annotations.yaml
    -
    -4 directories, 12 files
    -
    -
  12. -
  13. -

    构建 catalog 镜像

    -
    # 设置新的 catalog image  
    -export OFFLINE_CATALOG_IMG=10.5.14.200/release.daocloud.io/operator-framework/system-operator-index:v0.1.0-offline
    -
    -$ docker build . -f index.Dockerfile -t ${OFFLINE_CATALOG_IMG}  
    -
    -$ docker push ${OFFLINE_CATALOG_IMG}
    -
    -
  14. -
  15. -

    前往容器管理,更新 helm 应用 olm 的内置 catsrc 镜像(填写构建 catalog 镜像指定的 ${catalog-image} 即可)

    -

    olm1

    -

    olm2

    -
  16. -
  17. -

    更新成功后,Operator Hub 中会出现 minio-operator 组件

    -

    olm3

    -
  18. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/permissions/cluster-ns-auth.html b/site/end-user/kpanda/permissions/cluster-ns-auth.html deleted file mode 100644 index 601c385..0000000 --- a/site/end-user/kpanda/permissions/cluster-ns-auth.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - - - - - - - - - - -集群和命名空间授权 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-

集群和命名空间授权

-

容器管理基于全局权限管理及全局用户/用户组管理实现授权,如需为用户授予容器管理的最高权限(可以创建、管理、删除所有集群)。

-

前提条件

-

给用户/用户组授权之前,请完成如下准备:

-
    -
  • -

    已在全局管理中创建了待授权的用户/用户组,请参考用户

    -
  • -
  • -

    仅 Kpanda Owner及当前集群的 Cluster Admin 具备集群授权能力。详情可参考权限说明

    -
  • -
  • -

    仅 Kpanda Owner、当前集群的 Cluster Admin,当前命名空间的 NS Admin 具备命名空间授权能力。

    -
  • -
-

集群授权

-
    -
  1. -

    用户登录平台后,点击左侧菜单栏 容器管理 下的 权限管理 ,默认位于 集群权限 页签。

    -

    集群权限

    -
  2. -
  3. -

    点击 添加授权 按钮。

    -

    添加授权

    -
  4. -
  5. -

    添加集群权限 页面中,选择目标集群、待授权的用户/用户组后,点击 确定

    -

    目前仅支持的集群角色为 Cluster Admin ,详情权限可参考权限说明。如需要给多个用户/用户组同时进行授权, 可点击 添加用户权限 进行多次添加。

    -

    添加集群权限

    -
  6. -
  7. -

    返回集群权限管理页面,屏幕出现消息: 添加集群权限成功

    -

    添加成功

    -
  8. -
-

命名空间授权

-
    -
  1. -

    用户登录平台后,点击左侧菜单栏 容器管理 下的 权限管理 ,点击 命名空间权限 页签。

    -

    命名空间权限

    -
  2. -
  3. -

    点击 添加授权 按钮。在 添加命名空间权限 页面中,选择目标集群、目标命名空间,以及待授权的用户/用户组后,点击 确定

    -

    目前支持的命名空间角色为 NS Admin、NS Editor、NS Viewer,详情权限可参考权限说明。如需给多个用户/用户组同时进行授权,可点击 添加用户权限 进行多次添加。点击 确定 完成权限授权。

    -

    添加命名空间权限

    -
  4. -
  5. -

    返回命名空间权限管理页面,屏幕出现消息: 添加集群权限成功

    -

    添加成功

    -
    -

    Tip

    -

    后续如需删除或编辑权限,可点击列表右侧的 ,选择 编辑删除

    -

    编辑或删除

    -
    -
  6. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/permissions/custom-kpanda-role.html b/site/end-user/kpanda/permissions/custom-kpanda-role.html deleted file mode 100644 index 4215b7d..0000000 --- a/site/end-user/kpanda/permissions/custom-kpanda-role.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - - - - - - - - - - -增加容器管理内置权限点 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

增加 Kpanda 内置角色权限点

-

过去 Kpanda 内置角色的权限点(rbac rules)都是提前预定义好的且用户无法修改,因为以前修改内置角色的权限点之后也会被 Kpanda 控制器还原成预定义的权限点。 -为了支持更加灵活的权限配置,满足对系统角色的自定义需求,目前 Kpanda 支持为内置系统角色(cluster admin、ns admin、ns editor、ns viewer)修改权限点。 -以下示例演示如何新增 ns-viewer 权限点,尝试增加可以删除 Deployment 的权限。其他权限点操作类似。

-

前提条件

- -
-

Note

-
    -
  • 只需在 Global Cluster 增加权限点,Kpanda 控制器会把 Global Cluster 增加的权限点同步到所有接入子集群中,同步需一段时间才能完成
  • -
  • 只能在 Global Cluster 增加权限点,在子集群新增的权限点会被 Global Cluster 内置角色权限点覆盖
  • -
  • -

    只支持使用固定 Label 的 ClusterRole 追加权限,不支持替换或者删除权限,也不能使用 role 追加权限,内置角色跟用户创建的 ClusterRole Label 对应关系如下

    -
    cluster-admin: rbac.kpanda.io/role-template-cluster-admin: "true"
    -cluster-edit: rbac.kpanda.io/role-template-cluster-edit: "true"
    -cluster-view: rbac.kpanda.io/role-template-cluster-view: "true"
    -ns-admin: rbac.kpanda.io/role-template-ns-admin: "true"
    -ns-edit: rbac.kpanda.io/role-template-ns-edit: "true"
    -ns-view: rbac.kpanda.io/role-template-ns-view: "true"
    -
    -
  • -
-
-

操作步骤

-
    -
  1. -

    使用 admin 或者 cluster admin 权限的用户创建无状态负载

    -

    image-20240514112742395

    -
  2. -
  3. -

    授权 ns-viewer,用户有该 namespace ns-view 权限

    -

    image-20240514113009311

    -
  4. -
  5. -

    切换登录用户为 ns-viewer,打开控制台获取 ns-viewer 用户对应的 token,使用 curl 请求删除上述的 deployment nginx,发现无删除权限

    -
    [root@master-01 ~]# curl -k -X DELETE  'https://${URL}/apis/kpanda.io/v1alpha1/clusters/cluster-member/namespaces/default/deployments/nginx' -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJOU044MG9BclBRMzUwZ2VVU2ZyNy1xMEREVWY4MmEtZmJqR05uRE1sd1lFIn0.eyJleHAiOjE3MTU3NjY1NzksImlhdCI6MTcxNTY4MDE3OSwiYXV0aF90aW1lIjoxNzE1NjgwMTc3LCJqdGkiOiIxZjI3MzJlNC1jYjFhLTQ4OTktYjBiZC1iN2IxZWY1MzAxNDEiLCJpc3MiOiJodHRwczovLzEwLjYuMjAxLjIwMTozMDE0Ny9hdXRoL3JlYWxtcy9naGlwcG8iLCJhdWQiOiJfX2ludGVybmFsLWdoaXBwbyIsInN1YiI6ImMxZmMxM2ViLTAwZGUtNDFiYS05ZTllLWE5OGU2OGM0MmVmMCIsInR5cCI6IklEIiwiYXpwIjoiX19pbnRlcm5hbC1naGlwcG8iLCJzZXNzaW9uX3N0YXRlIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiYXRfaGFzaCI6IlJhTHoyQjlKQ2FNc1RrbGVMR3V6blEiLCJhY3IiOiIwIiwic2lkIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJncm91cHMiOltdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJucy12aWV3ZXIiLCJsb2NhbGUiOiIifQ.As2ipMjfvzvgONAGlc9RnqOd3zMwAj82VXlcqcR74ZK9tAq3Q4ruQ1a6WuIfqiq8Kq4F77ljwwzYUuunfBli2zhU2II8zyxVhLoCEBu4pBVBd_oJyUycXuNa6HfQGnl36E1M7-_QG8b-_T51wFxxVb5b7SEDE1AvIf54NAlAr-rhDmGRdOK1c9CohQcS00ab52MD3IPiFFZ8_Iljnii-RpXKZoTjdcULJVn_uZNk_SzSUK-7MVWmPBK15m6sNktOMSf0pCObKWRqHd15JSe-2aA2PKBo1jBH3tHbOgZyMPdsLI0QdmEnKB5FiiOeMpwn_oHnT6IjT-BZlB18VkW8rA'
    -{"code":7,"message":"[RBAC] delete resources(deployments: nginx) is forbidden for user(ns-viewer) in cluster(cluster-member)","details":[]}[root@master-01 ~]#
    -[root@master-01 ~]#
    -
    -
  6. -
  7. -

    在全局服务集群上创建如下 ClusterRole:

    -
    apiVersion: rbac.authorization.k8s.io/v1
    -kind: ClusterRole
    -metadata:
    -  name: append-ns-view # (1)!
    -  labels:
    -    rbac.kpanda.io/role-template-ns-view: "true" # (2)!
    -rules:
    -  - apiGroups: [ "apps" ]
    -    resources: [ "deployments" ]
    -    verbs: [ "delete" ]
    -
    -
      -
    1. 此字段值可任意指定,只需不重复且符合 Kubernetes 资源名称规则要求
    2. -
    3. 注意给不同的角色添加权限时应打上不同的 label
    4. -
    -
  8. -
  9. -

    等待 Kpanda 控制器添加用户创建权限到内置角色 ns-viewer 中,可查看对应内置角色如是否有上一步新增的权限点

    -

    [root@master-01 ~]# kubectl get clusterrole role-template-ns-view -oyaml|grep deployments -C 10|tail -n 6
    -
    -
    - apiGroups:
    -  - apps
    -  resources:
    -  - deployments
    -  verbs:
    -  - delete
    -

    -
  10. -
  11. -

    再次使用 curl 请求删除上述的 deployment nginx,这次成功删除了。也就是说,ns-viewer 成功新增了删除 Deployment 的权限。

    -
    [root@master-01 ~]# curl -k -X DELETE  'https://${URL}/apis/kpanda.io/v1alpha1/clusters/cluster-member/namespaces/default/deployments/nginx' -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJOU044MG9BclBRMzUwZ2VVU2ZyNy1xMEREVWY4MmEtZmJqR05uRE1sd1lFIn0.eyJleHAiOjE3MTU3NjY1NzksImlhdCI6MTcxNTY4MDE3OSwiYXV0aF90aW1lIjoxNzE1NjgwMTc3LCJqdGkiOiIxZjI3MzJlNC1jYjFhLTQ4OTktYjBiZC1iN2IxZWY1MzAxNDEiLCJpc3MiOiJodHRwczovLzEwLjYuMjAxLjIwMTozMDE0Ny9hdXRoL3JlYWxtcy9naGlwcG8iLCJhdWQiOiJfX2ludGVybmFsLWdoaXBwbyIsInN1YiI6ImMxZmMxM2ViLTAwZGUtNDFiYS05ZTllLWE5OGU2OGM0MmVmMCIsInR5cCI6IklEIiwiYXpwIjoiX19pbnRlcm5hbC1naGlwcG8iLCJzZXNzaW9uX3N0YXRlIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiYXRfaGFzaCI6IlJhTHoyQjlKQ2FNc1RrbGVMR3V6blEiLCJhY3IiOiIwIiwic2lkIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJncm91cHMiOltdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJucy12aWV3ZXIiLCJsb2NhbGUiOiIifQ.As2ipMjfvzvgONAGlc9RnqOd3zMwAj82VXlcqcR74ZK9tAq3Q4ruQ1a6WuIfqiq8Kq4F77ljwwzYUuunfBli2zhU2II8zyxVhLoCEBu4pBVBd_oJyUycXuNa6HfQGnl36E1M7-_QG8b-_T51wFxxVb5b7SEDE1AvIf54NAlAr-rhDmGRdOK1c9CohQcS00ab52MD3IPiFFZ8_Iljnii-RpXKZoTjdcULJVn_uZNk_SzSUK-7MVWmPBK15m6sNktOMSf0pCObKWRqHd15JSe-2aA2PKBo1jBH3tHbOgZyMPdsLI0QdmEnKB5FiiOeMpwn_oHnT6IjT-BZlB18VkW8rA'
    -
    -
  12. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/permissions/permission-brief.html b/site/end-user/kpanda/permissions/permission-brief.html deleted file mode 100644 index 9a248d2..0000000 --- a/site/end-user/kpanda/permissions/permission-brief.html +++ /dev/null @@ -1,1130 +0,0 @@ - - - - - - - - - - - - - - -权限体系介绍 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

容器管理权限说明

-

容器管理权限基于全局权限管理以及 Kubernetes RBAC 权限管理打造的多维度权限管理体系。 -支持集群级、命名空间级的权限控制,帮助用户便捷灵活地对租户下的 IAM 用户、用户组(用户的集合)设定不同的操作权限。

-

集群权限

-

集群权限基于 Kubernetes RBAC 的 ClusterRolebinding 授权,集群权限设置可让用户/用户组具备集群相关权限。 -目前的默认集群角色为 Cluster Admin (不具备集群的创建、删除权限)。

-

Cluster Admin

-

Cluster Admin 具有以下权限:

-
    -
  • -

    可管理、编辑、查看对应集群

    -
  • -
  • -

    管理、编辑、查看 命名空间下的所有工作负载及集群内所有资源

    -
  • -
  • -

    可授权用户为集群内角色 (Cluster Admin、NS Admin、NS Editor、NS Viewer)

    -
  • -
-

该集群角色的 YAML 示例如下:

-
apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  annotations:
-    kpanda.io/creator: system
-  creationTimestamp: "2022-06-16T09:42:49Z"
-  labels:
-    iam.kpanda.io/role-template: "true"
-  name: role-template-cluster-admin
-  resourceVersion: "15168"
-  uid: f8f86d42-d5ef-47aa-b284-097615795076
-rules:
-- apiGroups:
-  - '*'
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- nonResourceURLs:
-  - '*'
-  verbs:
-  - '*'
-
-

命名空间权限

-

命名空间权限是基于 Kubernetes RBAC 能力的授权,可以实现不同的用户/用户组对命名空间下的资源具有不同的操作权限(包括 Kubernetes API 权限),详情可参考:Kubernetes RBAC。目前容器管理的默认角色为:NS Admin、NS Editor、NS Viewer。

-

NS Admin

-

NS Admin 具有以下权限:

-
    -
  • 可查看对应命名空间
  • -
  • 管理、编辑、查看 命名空间下的所有工作负载,及自定义资源
  • -
  • 可授权用户为对应命名空间角色 (NS Editor、NS Viewer)
  • -
-

该集群角色的 YAML 示例如下:

-
apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  annotations:
-    kpanda.io/creator: system
-  creationTimestamp: "2022-06-16T09:42:49Z"
-  labels:
-    iam.kpanda.io/role-template: "true"
-  name: role-template-ns-admin
-  resourceVersion: "15173"
-  uid: 69f64c7e-70e7-4c7c-a3e0-053f507f2bc3
-rules:
-- apiGroups:
-  - '*'
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- nonResourceURLs:
-  - '*'
-  verbs:
-  - '*'    
-
-

NS Editor

-

NS Editor 具有以下权限:

-
    -
  • 可查看对应有权限的命名空间
  • -
  • 管理、编辑、查看 命名空间下的所有工作负载
  • -
-
-点击查看集群角色的 YAML 示例 -
apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  annotations:
-    kpanda.io/creator: system
-  creationTimestamp: "2022-06-16T09:42:50Z"
-  labels:
-    iam.kpanda.io/role-template: "true"
-  name: role-template-ns-edit
-  resourceVersion: "15175"
-  uid: ca9e690e-96c0-4978-8915-6e4c00c748fe
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  - endpoints
-  - persistentvolumeclaims
-  - persistentvolumeclaims/status
-  - pods
-  - replicationcontrollers
-  - replicationcontrollers/scale
-  - serviceaccounts
-  - services
-  - services/status
-  verbs:
-  - '*'
-- apiGroups:
-  - ""
-  resources:
-  - bindings
-  - events
-  - limitranges
-  - namespaces/status
-  - pods/log
-  - pods/status
-  - replicationcontrollers/status
-  - resourcequotas
-  - resourcequotas/status
-  verbs:
-  - '*'
-- apiGroups:
-  - ""
-  resources:
-  - namespaces
-  verbs:
-  - '*'
-- apiGroups:
-  - apps
-  resources:
-  - controllerrevisions
-  - daemonsets
-  - daemonsets/status
-  - deployments
-  - deployments/scale
-  - deployments/status
-  - replicasets
-  - replicasets/scale
-  - replicasets/status
-  - statefulsets
-  - statefulsets/scale
-  - statefulsets/status
-  verbs:
-  - '*'
-- apiGroups:
-  - autoscaling
-  resources:
-  - horizontalpodautoscalers
-  - horizontalpodautoscalers/status
-  verbs:
-  - '*'
-- apiGroups:
-  - batch
-  resources:
-  - cronjobs
-  - cronjobs/status
-  - jobs
-  - jobs/status
-  verbs:
-  - '*'
-- apiGroups:
-  - extensions
-  resources:
-  - daemonsets
-  - daemonsets/status
-  - deployments
-  - deployments/scale
-  - deployments/status
-  - ingresses
-  - ingresses/status
-  - networkpolicies
-  - replicasets
-  - replicasets/scale
-  - replicasets/status
-  - replicationcontrollers/scale
-  verbs:
-  - '*'
-- apiGroups:
-  - policy
-  resources:
-  - poddisruptionbudgets
-  - poddisruptionbudgets/status
-  verbs:
-  - '*'
-- apiGroups:
-  - networking.k8s.io
-  resources:
-  - ingresses
-  - ingresses/status
-  - networkpolicies
-  verbs:
-  - '*'      
-
-
-

NS Viewer

-

NS Viewer 具有以下权限:

-
    -
  • 可查看对应命名空间
  • -
  • 可查看对应命名空间下的所有工作负载,及自定义资源
  • -
-
-点击查看集群角色的 YAML 示例 -
apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  annotations:
-    kpanda.io/creator: system
-  creationTimestamp: "2022-06-16T09:42:50Z"
-  labels:
-    iam.kpanda.io/role-template: "true"
-  name: role-template-ns-view
-  resourceVersion: "15183"
-  uid: 853888fd-6ee8-42ac-b91e-63923918baf8
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - configmaps
-  - endpoints
-  - persistentvolumeclaims
-  - persistentvolumeclaims/status
-  - pods
-  - replicationcontrollers
-  - replicationcontrollers/scale
-  - serviceaccounts
-  - services
-  - services/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - bindings
-  - events
-  - limitranges
-  - namespaces/status
-  - pods/log
-  - pods/status
-  - replicationcontrollers/status
-  - resourcequotas
-  - resourcequotas/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - ""
-  resources:
-  - namespaces
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - apps
-  resources:
-  - controllerrevisions
-  - daemonsets
-  - daemonsets/status
-  - deployments
-  - deployments/scale
-  - deployments/status
-  - replicasets
-  - replicasets/scale
-  - replicasets/status
-  - statefulsets
-  - statefulsets/scale
-  - statefulsets/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - autoscaling
-  resources:
-  - horizontalpodautoscalers
-  - horizontalpodautoscalers/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - batch
-  resources:
-  - cronjobs
-  - cronjobs/status
-  - jobs
-  - jobs/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - extensions
-  resources:
-  - daemonsets
-  - daemonsets/status
-  - deployments
-  - deployments/scale
-  - deployments/status
-  - ingresses
-  - ingresses/status
-  - networkpolicies
-  - replicasets
-  - replicasets/scale
-  - replicasets/status
-  - replicationcontrollers/scale
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - policy
-  resources:
-  - poddisruptionbudgets
-  - poddisruptionbudgets/status
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - networking.k8s.io
-  resources:
-  - ingresses
-  - ingresses/status
-  - networkpolicies
-  verbs:
-  - get
-  - list
-  - watch 
-
-
-

权限 FAQ

-
    -
  1. -

    全局权限和容器管理权限管理的关系?

    -

    答:全局权限仅授权为粗粒度权限,可管理所有集群的创建、编辑、删除;而对于细粒度的权限,如单个集群的管理权限,单个命名空间的管理、编辑、删除权限,需要基于 Kubernetes RBAC 的容器管理权限进行实现。 -一般权限的用户仅需要在容器管理中进行授权即可。

    -
  2. -
  3. -

    目前仅支持四个默认角色,后台自定义角色的 RoleBinding 以及 ClusterRoleBinding (Kubernetes 细粒度的 RBAC)是否也能生效?

    -

    答:目前自定义权限暂时无法通过图形界面进行管理,但是通过 kubectl 创建的权限规则同样能生效。

    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/create-hpa.html b/site/end-user/kpanda/scale/create-hpa.html deleted file mode 100644 index 541193a..0000000 --- a/site/end-user/kpanda/scale/create-hpa.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - - - - - -基于内置指标创建 HPA - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
- -
-
-
-
-

基于内置指标创建 HPA

-

算丰 AI 算力平台支持 Pod 资源基于指标进行弹性伸缩(Horizontal Pod Autoscaling, HPA)。 -用户可以通过设置 CPU 利用率、内存用量及自定义指标指标来动态调整 Pod 资源的副本数量。 -例如,为工作负载设置基于 CPU 利用率指标弹性伸缩策略后,当 Pod 的 CPU 利用率超过/低于您设置的指标阀值,工作负载控制器将会自动增加/较少 Pod 副本数。

-

本文将介绍如何为工作负载配置基于内置指标的弹性伸缩。

-
-

Note

-
    -
  1. HPA 仅适用于 Deployment 和 StatefulSet,每个工作负载只能创建一个 HPA。
  2. -
  3. 如果基于 CPU 利用率创建 HPA 策略,必须预先为工作负载设置配置限制(Limit),否则无法计算 CPU 利用率。
  4. -
  5. 如果同时使用内置指标和多种自定义指,HPA 会根据多项指标分别计算所需伸缩副本数,取较大值(但不会超过设置 HPA 策略时配置的最大副本数)进行弹性伸缩。
  6. -
-
-

内置指标弹性伸缩策略

-

系统内置了 CPU 和内存两种弹性伸缩指标以满足用户的基础业务使用场景。

-

前提条件

-

在为工作负载配置内置指标弹性伸缩策略之前,需要满足以下前提条件:

- -

操作步骤

-

参考以下步骤,为工作负载配置内置指标弹性伸缩策略。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 进入集群列表页面。点击一个集群名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 进入工作负载列表后,点击一个负载名称,进入 工作负载详情 页面。

    -

    工作负载

    -
  4. -
  5. -

    点击 弹性伸缩 页签,查看当前集群的弹性伸缩配置情况。

    -

    弹性伸缩

    -
  6. -
  7. -

    确认集群已安装了 metrics-server 插件,且插件运行状态为正常后,即可点击 新建伸缩 按钮。

    -

    新建伸缩

    -
  8. -
  9. -

    创建自定义指标弹性伸缩策略参数。

    -

    工作负载

    -
      -
    • 策略名称:输入弹性伸缩策略的名称,请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 hpa-my-dep。
    • -
    • 命名空间:负载所在的命名空间。
    • -
    • 工作负载:执行弹性伸缩的工作负载对象。
    • -
    • 目标 CPU 利用率:工作负载资源下 Pod 的 CPU 使用率。计算方式为:工作负载下所有的 Pod 资源 / 工作负载的请求(request)值。当实际 CPU 用量大于/小于目标值时,系统自动减少/增加 Pod 副本数量。
    • -
    • 目标内存用量:工作负载资源下的 Pod 的内存用量。当实际内存用量大于/小于目标值时,系统自动减少/增加 Pod 副本数量。
    • -
    • 副本范围:Pod 副本数的弹性伸缩范围。默认区间为为 1 - 10。
    • -
    -
  10. -
  11. -

    完成参数配置后,点击 确定 按钮,自动返回弹性伸缩详情页面。点击列表右侧的 ,可以执行编辑、删除操作,还可以查看相关事件。

    -

    工作负载

    -
  12. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/create-vpa.html b/site/end-user/kpanda/scale/create-vpa.html deleted file mode 100644 index 5257d61..0000000 --- a/site/end-user/kpanda/scale/create-vpa.html +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - -创建 VPA - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

创建 VPA

-

容器垂直扩缩容策略(Vertical Pod Autoscaler, VPA)通过监控 Pod 在一段时间内的资源申请和用量, -计算出对该 Pod 而言最适合的 CPU 和内存请求值。使用 VPA 可以更加合理地为集群下每个 Pod 分配资源,提高集群的整体资源利用率,避免集群资源浪费。

-

算丰 AI 算力平台支持通过容器垂直扩缩容策略(Vertical Pod Autoscaler, VPA),基于此功能可以根据容器资源的使用情况动态调整 Pod 请求值。 -算丰 AI 算力平台支持通过手动和自动两种方式来修改资源请求值,您可以根据实际需要进行配置。

-

本文将介绍如何为工作负载配置 Pod 垂直伸缩。

-
-

Warning

-

使用 VPA 修改 Pod 资源请求会触发 Pod 重启。由于 Kubernetes 本身的限制, Pod 重启后可能会被调度到其它节点上。

-
-

前提条件

-

为工作负载配置垂直伸缩策略之前,需要满足以下前提条件:

- -

操作步骤

-

参考以下步骤,为工作负载配置内置指标弹性伸缩策略。

-
    -
  1. -

    集群列表 中找到目前集群,点击目标集群的名称。

    -

    集群详情

    -
  2. -
  3. -

    在左侧导航栏点击 工作负载 ,找到需要创建 VPA 的负载,点击该负载的名称。

    -

    工作负载 -3. 点击 弹性伸缩 页签,查看当前集群的弹性伸缩配置,确认已经安装了相关插件并且插件是否运行正常。

    -

    垂直伸缩

    -
  4. -
  5. -

    点击 新建伸缩 按钮,并配置 VPA 垂直伸缩策略参数。

    -

    新建伸缩

    -
      -
    • 策略名称:输入垂直伸缩策略的名称,请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 vpa-my-dep。
    • -
    • 伸缩模式:执行修改 CPU 和内存请求值的方式,目前垂直伸缩支持手动和自动两种伸缩模式。
        -
      • 手动伸缩:垂直伸缩策略计算出推荐的资源配置值后,需用户手动修改应用的资源配额。
      • -
      • 自动伸缩:垂直伸缩策略自动计算和修改应用的资源配额。
      • -
      -
    • -
    • 目标容器:选择需要进行垂直伸缩的容器。
    • -
    -
  6. -
  7. -

    完成参数配置后,点击 确定 按钮,自动返回弹性伸缩详情页面。点击列表右侧的 ,可以执行编辑、删除操作。

    -

    工作负载

    -
  8. -
-
-

Note

-

默认情况下,--min-replicas 的值为 2。表示当副本数大于 1 时,VPA 才会生效, -可以通过修改 updater 的 --min-replicas 参数值来改变这一默认行为。

-
spec: 
-  containers: 
-  - name: updater 
-  args: 
-  - "--min-replicas=2"
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/custom-hpa.html b/site/end-user/kpanda/scale/custom-hpa.html deleted file mode 100644 index fd7ef64..0000000 --- a/site/end-user/kpanda/scale/custom-hpa.html +++ /dev/null @@ -1,553 +0,0 @@ - - - - - - - - - - - - -基于自定义指标创建 HPA - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

基于自定义指标创建 HPA

-

当系统内置的 CPU 和内存两种指标不能满足您业务的实际需求时,您可以通过配置 ServiceMonitoring 来添加自定义指标, -并基于自定义指标实现弹性伸缩。本文将介绍如何为工作负载配置基于自定义指标进行弹性伸缩。

-
-

Note

-
    -
  1. HPA 仅适用于 Deployment 和 StatefulSet,每个工作负载只能创建一个 HPA。
  2. -
  3. 如果同时使用内置指标和多种自定义指,HPA 会根据多项指标分别计算所需伸缩副本数,取较大值(但不会超过设置 HPA 策略时配置的最大副本数)进行弹性伸缩。
  4. -
-
-

前提条件

-

在为工作负载配置自定义指标弹性伸缩策略之前,需要满足以下前提条件:

- -

操作步骤

-

参考以下步骤,为工作负载配置指标弹性伸缩策略。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 进入集群列表页面。点击一个集群名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 进入工作负载列表后,点击一个负载名称,进入 工作负载详情 页面。

    -

    工作负载

    -
  4. -
  5. -

    点击 弹性伸缩 页签,查看当前集群的弹性伸缩配置情况。

    -

    弹性伸缩配置

    -
  6. -
  7. -

    确认集群已安装了 metrics-server 、Insight、Prometheus-adapter 插件且插件运行状态为正常后,即可点击 新建伸缩 按钮。

    -
    -

    Note

    -

    如果相关插件未安装或插件处于异常状态,您在页面上将无法看见创建自定义指标弹性伸缩入口。

    -
    -

    新建伸缩

    -
  8. -
  9. -

    创建自定义指标弹性伸缩策略参数。

    -

    伸缩策略参数

    -
      -
    • 策略名称:输入弹性伸缩策略的名称,请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 hpa-my-dep。
    • -
    • 命名空间:负载所在的命名空间。
    • -
    • 工作负载:执行弹性伸缩的工作负载对象。
    • -
    • 资源类型:进行监控的自定义指标类型,包含 Pod 和 Service 两种类型。
    • -
    • 指标:使用 ServiceMonitoring 创建的自定义指标名称或系统内置的自定义指标名称。
    • -
    • 数据类型:用于计算指标值的方法,包含目标值和目标平均值两种类型,当资源类型为 Pod 时,只支持使用目标平均值。
    • -
    -
  10. -
-

操作示例

-

本案例以 Golang 业务程序为例,该示例程序暴露了 httpserver_requests_total 指标,并记录 HTTP 的请求,通过该指标可以计算出业务程序的 QPS 值。

-

部署业务程序

-

使用 Deployment 部署业务程序:

-
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: httpserver
-  namespace: httpserver
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: httpserver
-  template:
-    metadata:
-      labels:
-        app: httpserver
-    spec:
-      containers:
-      - name: httpserver
-        image: registry.imroc.cc/test/httpserver:custom-metrics
-        imagePullPolicy: Always
----
-
-apiVersion: v1
-kind: Service
-metadata:
-  name: httpserver
-  namespace: httpserver
-  labels:
-    app: httpserver
-  annotations:
-    prometheus.io/scrape: "true"
-    prometheus.io/path: "/metrics"
-    prometheus.io/port: "http"
-spec:
-  type: ClusterIP
-  ports:
-  - port: 80
-    protocol: TCP
-    name: http
-  selector:
-    app: httpserver
-
-

Prometheus 采集业务监控

-

若已安装 insight-agent,可以通过创建 ServiceMonitor 的 CRD 对象配置 Prometheus。

-

操作步骤:在 集群详情 -> 自定义资源 搜索“servicemonitors.monitoring.coreos.com",点击名称进入详情。 -通过创建 YAML,在命名空间 httpserver 下创建如下示例的 CRD:

-
apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
-  name: httpserver
-  namespace: httpserver
-  labels:
-    operator.insight.io/managed-by: insight
-spec:
-  endpoints:
-  - port: http
-    interval: 5s
-  namespaceSelector:
-    matchNames:
-    - httpserver
-  selector:
-    matchLabels:
-      app: httpserver
-
-

servicemonitor

-
-

Note

-

若通过 insight 安装 Prometheus,则 serviceMonitor 上必须打上 operator.insight.io/managed-by: insight -这个 label,通过其他方式安装则无需此 label。

-
-

在 prometheus-adapter 中配置指标规则

-

操作步骤:在 集群详情 -> Helm 应用 搜索 “prometheus-adapter",通过操作栏进入更新页面,在 YAML 中配置自定义指标,示例如下:

-
rules:
-  custom:
-    - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)
-      name:
-        as: httpserver_requests_qps
-        matches: httpserver_requests_total
-      resources:
-        template: <<.Resource>>
-      seriesQuery: httpserver_requests_total
-
-

rules

-

创建自定义指标弹性伸缩策略参数

-

按照上述步骤在 Deployment 中找到应用程序 httpserver 并通过自定义指标创建弹性伸缩。

-

custommetrics

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/hpa-cronhpa-compatibility-rules.html b/site/end-user/kpanda/scale/hpa-cronhpa-compatibility-rules.html deleted file mode 100644 index 92c3035..0000000 --- a/site/end-user/kpanda/scale/hpa-cronhpa-compatibility-rules.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - - - - - - -HPA 和 CronHPA 兼容规则 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

HPA 和 CronHPA 兼容规则

-

HPA 全称为 HorizontalPodAutoscaler,即 Pod 水平自动伸缩。

-

CronHPA 全称为 Cron HorizontalPodAutoscaler,即 Pod 定时的水平自动伸缩。

-

CronHPA 和 HPA 兼容冲突

-

定时伸缩 CronHPA 通过设置定时的方式触发容器的水平副本伸缩。为了防止突发的流量冲击等状况, -您可能已经配置 HPA 保障应用的正常运行。如果同时检测到了 HPA 和 CronHPA 的存在, -由于 CronHPA 和 HPA 相互独立无法感知,就会出现两个控制器各自工作,后执行的操作会覆盖先执行的操作。

-

对比 CronHPA 和 HPA 的定义模板,可以观察到以下几点:

-
    -
  • CronHPA 和 HPA 都是通过 scaleTargetRef 字段来获取伸缩对象。
  • -
  • CronHPA 通过 jobs 的 crontab 规则定时伸缩副本数。
  • -
  • HPA 通过资源利用率判断伸缩情况。
  • -
-
-

Note

-

如果同时设置 CronHPA 和 HPA,会出现 CronHPA 和 HPA 同时操作一个 scaleTargetRef 的场景。

-
-

CronHPA 和 HPA 兼容方案

-

从上文可知,CronHPA 和 HPA 同时使用会导致后执行的操作覆盖先执行操作的本质原因是两个控制器无法相互感知, -那么只需要让 CronHPA 感知 HPA 的当前状态就能解决冲突问题。

-

系统会将 HPA 作为定时伸缩 CronHPA 的扩缩容对象,从而实现对该 HPA 定义的 Deployment 对象的定时扩缩容。

-

HPA 的定义将 Deployment 配置在 scaleTargetRef 字段下,然后 Deployment 通过自身定义查找 ReplicaSet,最后通过 ReplicaSet 调整真实的副本数目。

-

算丰 AI 算力平台将 CronHPA 中的 scaleTargetRef 设置为 HPA 对象,然后通过 HPA 对象来寻找真实的 scaleTargetRef,从而让 CronHPA 感知 HPA 的当前状态。

-

CronHPA 和 HPA 兼容方案

-

CronHPA 会通过调整 HPA 的方式感知 HPA。CronHPA 通过识别要达到的副本数与当前副本数两者间的较大值, -判断是否需要扩缩容及修改 HPA 的上限;CronHPA 通过识别 CronHPA 要达到的副本数与 HPA 的配置间的较小值,判断是否需要修改 HPA 的下限。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/images/create-metrics-server-01.png b/site/end-user/kpanda/scale/images/create-metrics-server-01.png deleted file mode 100644 index 4c359e3..0000000 Binary files a/site/end-user/kpanda/scale/images/create-metrics-server-01.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/create-metrics-server-02.png b/site/end-user/kpanda/scale/images/create-metrics-server-02.png deleted file mode 100644 index 4335320..0000000 Binary files a/site/end-user/kpanda/scale/images/create-metrics-server-02.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/create-metrics-server-03.png b/site/end-user/kpanda/scale/images/create-metrics-server-03.png deleted file mode 100644 index c57019a..0000000 Binary files a/site/end-user/kpanda/scale/images/create-metrics-server-03.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/create-vpa-01.png b/site/end-user/kpanda/scale/images/create-vpa-01.png deleted file mode 100644 index c509dc0..0000000 Binary files a/site/end-user/kpanda/scale/images/create-vpa-01.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/create-vpa-02.png b/site/end-user/kpanda/scale/images/create-vpa-02.png deleted file mode 100644 index 446df49..0000000 Binary files a/site/end-user/kpanda/scale/images/create-vpa-02.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/create-vpa-03.png b/site/end-user/kpanda/scale/images/create-vpa-03.png deleted file mode 100644 index a76fe33..0000000 Binary files a/site/end-user/kpanda/scale/images/create-vpa-03.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/create-vpa-04.png b/site/end-user/kpanda/scale/images/create-vpa-04.png deleted file mode 100644 index c6c1c8f..0000000 Binary files a/site/end-user/kpanda/scale/images/create-vpa-04.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/create-vpa-05.png b/site/end-user/kpanda/scale/images/create-vpa-05.png deleted file mode 100644 index 27c7f4b..0000000 Binary files a/site/end-user/kpanda/scale/images/create-vpa-05.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/install-vpa-01.png b/site/end-user/kpanda/scale/images/install-vpa-01.png deleted file mode 100644 index 9f0b0e9..0000000 Binary files a/site/end-user/kpanda/scale/images/install-vpa-01.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/install-vpa-02.png b/site/end-user/kpanda/scale/images/install-vpa-02.png deleted file mode 100644 index 2853242..0000000 Binary files a/site/end-user/kpanda/scale/images/install-vpa-02.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/install-vpa-03.png b/site/end-user/kpanda/scale/images/install-vpa-03.png deleted file mode 100644 index 6e6ed16..0000000 Binary files a/site/end-user/kpanda/scale/images/install-vpa-03.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/images/install-vpa-04.png b/site/end-user/kpanda/scale/images/install-vpa-04.png deleted file mode 100644 index e7a5584..0000000 Binary files a/site/end-user/kpanda/scale/images/install-vpa-04.png and /dev/null differ diff --git a/site/end-user/kpanda/scale/install-cronhpa.html b/site/end-user/kpanda/scale/install-cronhpa.html deleted file mode 100644 index ad4a263..0000000 --- a/site/end-user/kpanda/scale/install-cronhpa.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - - - - - - - - - -安装 kubernetes-cronhpa-controller 插件 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

安装 kubernetes-cronhpa-controller 插件

-

容器副本定时水平扩缩容策略(CronHPA)能够为周期性高并发应用提供稳定的计算资源保障, kubernetes-cronhpa-controller 则是实现 CronHPA 的关键组件。

-

本节介绍如何安装 kubernetes-cronhpa-controller 插件。

-
-

Note

-

为了使用 CornHPA,不仅需要安装 kubernetes-cronhpa-controller 插件,还要安装 metrics-server 插件

-
-

前提条件

-

安装 kubernetes-cronhpa-controller 插件之前,需要满足以下前提条件:

- -

操作步骤

-

参考如下步骤为集群安装 kubernetes-cronhpa-controller 插件。

-
    -
  1. -

    集群列表 页面找到需要安装此插件的目标集群,点击该集群的名称,然后在左侧点击 工作负载 -> 无状态工作负载 ,点击目标工作负载的名称。

    -
  2. -
  3. -

    在工作负载详情页面,点击 弹性伸缩 页签,在 CronHPA 右侧点击 安装

    -

    工作负载

    -
  4. -
  5. -

    阅读该插件的相关介绍,选择版本后点击 安装 按钮。推荐安装 1.3.0 或更高版本。

    -

    工作负载

    -
  6. -
  7. -

    参考以下说明配置参数。

    -

    工作负载

    -
      -
    • 名称:输入插件名称,请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 kubernetes-cronhpa-controller。
    • -
    • 命名空间:选择将插件安装在哪个命名空间,此处以 default 为例。
    • -
    • 版本:插件的版本,此处以 1.3.0 版本为例。
    • -
    • 就绪等待:启用后,将等待应用下的所有关联资源都处于就绪状态,才会标记应用安装成功。
    • -
    • 失败删除:如果插件安装失败,则删除已经安装的关联资源。开启后,将默认同步开启 就绪等待
    • -
    • 详情日志:开启后,将记录安装过程的详细日志。
    • -
    -
    -

    Note

    -

    开启 就绪等待 和/或 失败删除 后,应用需要较长时间才会被标记为“运行中”状态。

    -
    -
  8. -
  9. -

    在页面右下角点击 确定 ,系统将自动跳转至 Helm 应用 列表页面。稍等几分钟后刷新页面作,即可看到刚刚安装的应用。

    -
    -

    Warning

    -
    -

    如需删除 kubernetes-cronhpa-controller 插件,应在 Helm 应用 列表页面才能将其彻底删除。

    -

    如果在工作负载的 弹性伸缩 页签下删除插件,这只是删除了该插件的工作负载副本,插件本身仍未删除,后续重新安装该插件时也会提示错误。

    -
  10. -
  11. -

    回到工作负载详情页面下的 弹性伸缩 页签,可以看到界面显示 插件已安装 。现在可以开始创建 CronHPA 策略了。

    -

    工作负载

    -
  12. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/install-metrics-server.html b/site/end-user/kpanda/scale/install-metrics-server.html deleted file mode 100644 index ded1399..0000000 --- a/site/end-user/kpanda/scale/install-metrics-server.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - - - - - - -安装 metrics-server 插件 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

安装 metrics-server 插件

-

metrics-server 是 Kubernetes 内置的资源使用指标采集组件。 -您可以通过配置弹性伸缩(HPA)策略来实现工作负载资源自动水平伸缩 Pod 副本。

-

本节介绍如何安装 metrics-server

-

前提条件

-

安装 metrics-server 插件前,需要满足以下前提条件:

- -

操作步骤

-

请执行如下步骤为集群安装 metrics-server 插件。

-
    -
  1. -

    在工作负载详情下的弹性伸缩页面,点击 去安装 ,进入 metrics-server 插件安装界面。

    -

    工作负载

    -
  2. -
  3. -

    阅读 metrics-server 插件相关介绍,选择版本后点击 安装 按钮。本文将以 3.8.2 版本为例进行安装,推荐您安装 3.8.2 及更高版本。

    -

    工作负载

    -
  4. -
  5. -

    在安装配置界面配置基本参数。

    -

    工作负载

    -
      -
    • 名称:输入插件名称,请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 metrics-server-01。
    • -
    • 命名空间:选择插件安装的命名空间,此处以 default 为例。
    • -
    • 版本:插件的版本,此处以 3.8.2 版本为例。
    • -
    • 就绪等待:启用后,将等待应用下所有关联资源处于就绪状态,才会标记应用安装成功。
    • -
    • 失败删除:开启后,将默认同步开启就绪等待。如果安装失败,将删除安装相关资源。
    • -
    • 详情日志:开启安装过程日志的详细输出。
    • -
    -
    -

    Note

    -

    开启 就绪等待 和/或 失败删除 后,应用需要经过较长时间才会被标记为 运行中 状态。

    -
    -
  6. -
  7. -

    高级参数配置

    -
      -
    • -

      如果集群网络无法访问 k8s.gcr.io 仓库,请尝试修改 repositort 参数为 repository: k8s.m.daocloud.io/metrics-server/metrics-server

      -
    • -
    • -

      安装 metrics-server 插件还需提供 SSL 证书。如需绕过证书校验,需要在 defaultArgs: 处添加 - --kubelet-insecure-tls 参数。

      -
    • -
    -
    -点击查看推荐的 YAML 参数 -
    image:
    -  repository: k8s.m.daocloud.io/metrics-server/metrics-server # 将仓库源地址修改为 k8s.m.daocloud.io
    -  tag: ''
    -  pullPolicy: IfNotPresent
    -imagePullSecrets: []
    -nameOverride: ''
    -fullnameOverride: ''
    -serviceAccount:
    -  create: true
    -  annotations: {}
    -  name: ''
    -rbac:
    -  create: true
    -  pspEnabled: false
    -apiService:
    -  create: true
    -podLabels: {}
    -podAnnotations: {}
    -podSecurityContext: {}
    -securityContext:
    -  allowPrivilegeEscalation: false
    -  readOnlyRootFilesystem: true
    -  runAsNonRoot: true
    -  runAsUser: 1000
    -priorityClassName: system-cluster-critical
    -containerPort: 4443
    -hostNetwork:
    -  enabled: false
    -replicas: 1
    -updateStrategy: {}
    -podDisruptionBudget:
    -  enabled: false
    -  minAvailable: null
    -  maxUnavailable: null
    -defaultArgs:
    -  - '--cert-dir=/tmp'
    -  - '--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname'
    -  - '--kubelet-use-node-status-port'
    -  - '--metric-resolution=15s'
    -  - --kubelet-insecure-tls # 绕过证书校验
    -args: []
    -livenessProbe:
    -  httpGet:
    -    path: /livez
    -    port: https
    -    scheme: HTTPS
    -  initialDelaySeconds: 0
    -  periodSeconds: 10
    -  failureThreshold: 3
    -readinessProbe:
    -  httpGet:
    -    path: /readyz
    -    port: https
    -    scheme: HTTPS
    -  initialDelaySeconds: 20
    -  periodSeconds: 10
    -  failureThreshold: 3
    -service:
    -  type: ClusterIP
    -  port: 443
    -  annotations: {}
    -  labels: {}
    -metrics:
    -  enabled: false
    -serviceMonitor:
    -  enabled: false
    -  additionalLabels: {}
    -  interval: 1m
    -  scrapeTimeout: 10s
    -resources: {}
    -extraVolumeMounts: []
    -extraVolumes: []
    -nodeSelector: {}
    -tolerations: []
    -affinity: {}
    -
    -
    -
  8. -
  9. -

    点击 确定 按钮,完成 metrics-server 插件的安装,之后系统将自动跳转至 Helm 应用 列表页面, - 稍等几分钟后,为页面执行刷新操作,即可看到刚刚安装的应用。

    -
  10. -
-
-

Note

-

删除 metrics-server 插件时,在 Helm 应用 列表页面才能彻底删除该插件。如果仅在工作负载页面删除 metrics-server , -这只是删除了该应用的工作负载副本,应用本身仍未删除,后续重新安装该插件时也会提示错误。

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/install-vpa.html b/site/end-user/kpanda/scale/install-vpa.html deleted file mode 100644 index f3800aa..0000000 --- a/site/end-user/kpanda/scale/install-vpa.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - - - - - - - -安装 vpa 插件 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

安装 vpa 插件

-

容器垂直扩缩容策略(Vertical Pod Autoscaler, VPA)能够让集群的资源配置更加合理,避免集群资源浪费。 vpa 则是实现容器垂直扩缩容的关键组件。

-

本节介绍如何安装 vpa 插件。

-
为了使用 VPA 策略,不仅需要安装 __vpa__ 插件,还要[安装 __metrics-server__ 插件](install-metrics-server.md)。
-
-

前提条件

-

安装 vpa 插件之前,需要满足以下前提条件:

- -

操作步骤

-

参考如下步骤为集群安装 vpa 插件。

-
    -
  1. -

    集群列表 页面找到需要安装此插件的目标集群,点击该集群的名称,然后在左侧点击 工作负载 -> 无状态工作负载 ,点击目标工作负载的名称。

    -
  2. -
  3. -

    在工作负载详情页面,点击 弹性伸缩 页签,在 VPA 右侧点击 安装

    -

    工作负载 -3. 阅读该插件的相关介绍,选择版本后点击 安装 按钮。推荐安装 1.5.0 或更高版本。

    -

    工作负载 -4. 查看以下说明配置参数。

    -

    工作负载 -- 名称:输入插件名称,请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 kubernetes-cronhpa-controller。 -- 命名空间:选择将插件安装在哪个命名空间,此处以 default 为例。 -- 版本:插件的版本,此处以 4.5.0 版本为例。 -- 就绪等待:启用后,将等待应用下的所有关联资源都处于就绪状态,才会标记应用安装成功。 -- 失败删除:如果插件安装失败,则删除已经安装的关联资源。开启后,将默认同步开启 就绪等待 。 -- 详情日志:开启后,将记录安装过程的详细日志。

    -
    -

    Note

    -

    开启 就绪等待 和/或 失败删除 后,应用需要经过较长时间才会被标记为“运行中”状态。

    -
    -
  4. -
  5. -

    在页面右下角点击 确定 ,系统将自动跳转至 Helm 应用 列表页面。稍等几分钟后刷新页面作,即可看到刚刚安装的应用。

    -
    -

    Warning

    -
    -

    如需删除 vpa 插件,应在 Helm 应用 列表页面才能将其彻底删除。

    -

    如果在工作负载的 弹性伸缩 页签下删除插件,这只是删除了该插件的工作负载副本,插件本身仍未删除,后续重新安装该插件时也会提示错误。

    -
  6. -
  7. -

    回到工作负载详情页面下的 弹性伸缩 页签,可以看到界面显示 插件已安装 。现在可以开始创建 VPA 策略了。

    -

    工作负载.png

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/knative/install.html b/site/end-user/kpanda/scale/knative/install.html deleted file mode 100644 index 394be8a..0000000 --- a/site/end-user/kpanda/scale/knative/install.html +++ /dev/null @@ -1,383 +0,0 @@ - - - - - - - - - - - - -安装 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

安装

-

Knative 是一个面向无服务器部署的跨平台解决方案。

-

步骤

-
    -
  1. -

    登录集群,点击侧边栏 Helm 应用 -> Helm 模板 ,在右侧上方搜索框输入 knative ,然后按回车键搜索。

    -

    Install-1

    -
  2. -
  3. -

    点击搜索出的 knative-operator ,进入安装配置界面。你可以在该界面查看可用版本以及 Helm values 的 Parameters 可选项。

    -

    Install-2

    -
  4. -
  5. -

    点击安装按钮后,进入安装配置界面。

    -

    Install-3

    -
  6. -
  7. -

    输入名称,安装租户,建议勾选 就绪等待详细日志

    -
  8. -
  9. -

    在下方设置,可以勾选 Serving ,并输入 Knative Serving 组件的安装租户,会在安装后部署 Knative Serving 组件,该组件由 Knative Operator 管理。

    -
  10. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/knative/knative.html b/site/end-user/kpanda/scale/knative/knative.html deleted file mode 100644 index 36fbdc4..0000000 --- a/site/end-user/kpanda/scale/knative/knative.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - - - - - - -Kantive 介绍 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

Kantive 介绍

-

Knative 提供了一种更高层次的抽象,简化并加速了在 Kubernetes 上构建、部署和管理应用的过程。它使得开发人员能够更专注于业务逻辑的实现,而将大部分基础设施和运维工作交给 Knative 去处理,从而显著提高生产力。

-

组件

-

knative-operator 运行组件如下。

-
knative-operator   knative-operator-58f7d7db5c-7f6r5      1/1     Running     0     6m55s
-knative-operator   operator-webhook-667dc67bc-qvrv4       1/1     Running     0     6m55s
-
-

knative-serving 组件如下。

-
knative-serving        3scale-kourier-gateway-d69fbfbd-bd8d8   1/1     Running     0                 7m13s
-knative-serving        activator-7c6fddd698-wdlng              1/1     Running     0                 7m3s
-knative-serving        autoscaler-8f4b876bb-kd25p              1/1     Running     0                 7m17s
-knative-serving        autoscaler-hpa-5f7f74679c-vkc7p         1/1     Running     0                 7m15s
-knative-serving        controller-789c896c46-tfvsv             1/1     Running     0                 7m17s
-knative-serving        net-kourier-controller-7db578c889-7gd5l 1/1     Running     0                 7m14s
-knative-serving        webhook-5c88b94c5-78x7m                 1/1     Running     0                 7m1s
-knative-serving        storage-version-migration-serving-serving-1.12.2-t7zvd   0/1  Completed   0   7m15s
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
组件作用
Activator对请求排队(如果一个 Knative Service 已经缩减到零)。调用 autoscaler,将缩减到 0 的服务恢复并转发排队的请求。Activator 还可以充当请求缓冲器,处理突发流量。
AutoscalerAutoscaler 负责根据配置、指标和进入的请求来缩放 Knative 服务。
Controller管理 Knative CR 的状态。它会监视多个对象,管理依赖资源的生命周期,并更新资源状态。
Queue-ProxySidecar 容器,每个 Knative Service 都会注入一个。负责收集流量数据并报告给 Autoscaler,Autoscaler 根据这些数据和预设的规则来发起扩容或缩容请求。
WebhooksKnative Serving 有几个 Webhooks 负责验证和变更 Knative 资源。
-

Ingress 流量入口方案

- - - - - - - - - - - - - - - - - - - - - -
方案适用场景
Istio如果已经用了 Istio,可以选择 Istio 作为流量入口方案。
Contour如果集群中已经启用了 Contour,可以选择 Contour 作为流量入口方案。
Kourier如果在没有上述 2 种 Ingress 组件时,可以使用 Knative 基于 Envoy 实现的 Kourier Ingress 作为流量入口。
-

Autoscaler 方案对比

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Autoscaler 类型是否为 Knative Serving 核心部分默认启用Scale to Zero 支持基于 CPU 的 Autoscaling 支持
Knative Pod Autoscaler (KPA)
Horizontal Pod Autoscaler (HPA)需安装 Knative Serving 后启用
-

CRD

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
资源类型API 名称描述
Servicesservice.serving.knative.dev自动管理 Workload 的整个生命周期,控制其他对象的创建,确保应用具有 Routes、Configurations 以及每次更新时的新 revision。
Routesroute.serving.knative.dev将网络端点映射到一个或多个修订版本,支持流量分配和版本路由。
Configurationsconfiguration.serving.knative.dev维护部署的期望状态,提供代码和配置之间的分离,遵循 Twelve-Factor 应用程序方法论,修改配置会创建新的 revision。
Revisionsrevision.serving.knative.dev每次对工作负载修改的时间点快照,是不可变对象,可根据流量自动扩容和缩容。
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/knative/playground.html b/site/end-user/kpanda/scale/knative/playground.html deleted file mode 100644 index a502b6b..0000000 --- a/site/end-user/kpanda/scale/knative/playground.html +++ /dev/null @@ -1,503 +0,0 @@ - - - - - - - - - - - - -Knative 使用实践 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

Knative 使用实践

-

在本节中,我们将通过几个实践来深入了解学习 Knative。

-

case 1 - Hello World

-
apiVersion: serving.knative.dev/v1
-kind: Service
-metadata:
-  name: hello
-spec:
-  template:
-    spec:
-      containers:
-        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest
-          ports:
-            - containerPort: 8080
-          env:
-            - name: TARGET
-              value: "World"
-
-

可以使用 kubectl 已部署的应用的状态,这个应用由 knative 自动配置了 ingress 和伸缩器。

-
~ kubectl get service.serving.knative.dev/hello
-NAME    URL                                              LATESTCREATED   LATESTREADY   READY   REASON
-hello   http://hello.knative-serving.knative.loulan.me   hello-00001     hello-00001   True
-
-

部署出的 Pod YAML 如下,由 2 个 Pod 组成:user-container 和 queue-proxy。

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: hello-00003-deployment-5fcb8ccbf-7qjfk
-spec:
-  containers:
-  - name: user-container
-  - name: queue-proxy
-
-

knative-request-flow

-

请求流:

-
    -
  1. case1 在低流量或零流量时,流量将路由到 activator
  2. -
  3. case2 流量大时,流量大于 target-burst-capacity 时才直接路由到 Pod
      -
    1. 配置为 0,只有从 0 扩容存在
    2. -
    3. 配置为 -1,activator 会一直存在请求路径
    4. -
    5. 配置为 >0,触发扩缩容之前,系统能够额外处理的并发请求数量。
    6. -
    -
  4. -
  5. -

    case3 流量再变小时,流量低于 current_demand + target-burst-capacity > (pods * concurrency-target) 时将再次路由到 activator

    -

    待处理的请求总数 + 能接受的超过目标并发数的请求数量 > 每个 Pod 的目标并发数 * Pod 数量

    -
  6. -
-

case 2 - 基于并发弹性伸缩

-

我们首先在集群应用下面 YAML 定义。

-
apiVersion: serving.knative.dev/v1
-kind: Service
-metadata:
-  name: hello
-spec:
-  template:
-    metadata:
-      annotations:
-        autoscaling.knative.dev/target: "1"
-        autoscaling.knative.dev/class: "kpa.autoscaling.knative.dev"
-    spec:
-      containers:
-        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest
-          ports:
-            - containerPort: 8080
-          env:
-            - name: TARGET
-              value: "World"
-
-

执行下面命令测试,并可以通过 kubectl get pods -A -w 来观察扩容的 Pod。

-
wrk -t2 -c4 -d6s http://hello.knative-serving.knative.daocloud.io/
-
-

case 3 - 基于并发弹性伸缩,达到特定比例提前扩容

-

我们可以很轻松的实现,例如限制每个容器并发为 10,可以通过 autoscaling.knative.dev/target-utilization-percentage: 70 来实现,达到 70% 就开始扩容 Pod。

-
apiVersion: serving.knative.dev/v1
-kind: Service
-metadata:
-  name: hello
-spec:
-  template:
-    metadata:
-      annotations:
-        autoscaling.knative.dev/target: "10"
-        autoscaling.knative.dev/class: "kpa.autoscaling.knative.dev"
-        autoscaling.knative.dev/target-utilization-percentage: "70" 
-        autoscaling.knative.dev/metric: "concurrency"
-     spec:
-      containers:
-        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest
-          ports:
-            - containerPort: 8080
-          env:
-            - name: TARGET
-              value: "World"
-
-

case 4 - 灰度发布/流量百分比

-

我们可以通过 spec.traffic 实现到每个版本流量的控制。

-
apiVersion: serving.knative.dev/v1
-kind: Service
-metadata:
-  name: hello
-spec:
-  template:
-    metadata:
-      annotations:
-        autoscaling.knative.dev/target: "1"  
-        autoscaling.knative.dev/class: "kpa.autoscaling.knative.dev"         
-    spec:
-      containers:
-        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest
-          ports:
-            - containerPort: 8080
-          env:
-            - name: TARGET
-              value: "World"
-  traffic:
-  - latestRevision: true
-    percent: 50
-  - latestRevision: false
-    percent: 50
-    revisionName: hello-00001
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/scale/knative/scene.html b/site/end-user/kpanda/scale/knative/scene.html deleted file mode 100644 index ed0ac7b..0000000 --- a/site/end-user/kpanda/scale/knative/scene.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - - - - - - -使用场景 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

使用场景

-

适合的场景

-
    -
  • 短连接高并发业务
  • -
  • 需要弹性伸缩的业务
  • -
  • 大量应用需要缩容到 0 提高资源利用率
  • -
  • AI Serving 服务,基于特定指标进行扩容
  • -
-
-

Tip

-

短连接高并发业务以及需要弹性伸缩的业务,推荐使用 HPA 和 VPA 能力。

-
-

不适合的场景

-
    -
  • 长连接业务
  • -
  • 延时敏感业务
  • -
  • 基于 cookie 的流量分流
  • -
  • 基于 header 的流量分流
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/security/audit.html b/site/end-user/kpanda/security/audit.html deleted file mode 100644 index ea81e8f..0000000 --- a/site/end-user/kpanda/security/audit.html +++ /dev/null @@ -1,785 +0,0 @@ - - - - - - - - - - - - - - -权限扫描 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

权限扫描

-

为了使用权限扫描功能,需要先创建扫描策略,执行该策略之后会自动生成扫描报告以供查看。

-

创建扫描策略

-
    -
  1. -

    在容器管理模块的首页左侧导航栏点击 安全管理

    -

    安全管理

    -
  2. -
  3. -

    在左侧导航栏点击 权限扫描 ,点击 扫描策略 页签,在右侧点击 创建扫描策略

    -

    安全管理

    -
  4. -
  5. -

    参考下列说明填写配置,最后点击 确定 即可。

    -
      -
    • 集群:选择需要扫描哪个集群。可选的集群列表来自容器管理模块中接入或创建的集群。如果没有想选的集群,可以去容器管理模块中接入创建集群。
    • -
    • -

      扫描类型:

      -
        -
      • 立即扫描:在扫描策略创建好之后立即执行一次扫描,后续不可以自动/手动再次执行扫描。
      • -
      • 定时扫描:通过设置扫描周期,自动按时重复执行扫描。
      • -
      -
    • -
    • -

      扫描报告保留数量:设置最多保留多少扫描报告。超过指定的保留数量时,从最早的报告开始删除。

      -

      安全管理

      -
    • -
    -
  6. -
-

更新/删除扫描策略

-

创建扫描策略之后,可以根据需要更新或删除扫描策略。

-

扫描策略 页签下,点击配置右侧的 操作按钮:

-
    -
  • -

    对于周期性的扫描策略:

    -
      -
    • 选择 立即执行 意味着,在周期计划之外立即再扫描一次集群
    • -
    • 选择 禁用 会中断扫描计划,直到点击 启用 才可以继续根据周期计划执行该扫描策略。
    • -
    • 选择 编辑 可以更新配置,支持更新扫描配置、类型、扫描周期、报告保留数量,不可更改配置名称和需要扫描的目标集群。
    • -
    • 选择 删除 可以删除该配置
    • -
    -
  • -
  • -

    对于一次性的扫描策略:仅支持 删除 操作。

    -

    创建扫描配置

    -
  • -
-

查看扫描报告

-
    -
  1. -

    安全管理 -> 权限扫描 -> 扫描报告 页签下,点击报告名称

    -
    -

    在报告右侧点击 删除 可以手动删除报告。

    -
    -

    创建扫描配置

    -
  2. -
  3. -

    查看扫描报告内容,包括:

    -
      -
    • 扫描的目标集群
    • -
    • 使用的扫描策略
    • -
    • 扫描项总数、警告数、错误数
    • -
    • 在周期性扫描策略生成的扫描报告中,还可以查看扫描频率
    • -
    • 扫描开始的时间
    • -
    • -

      检查详情,例如被检查的资源、资源类型、扫描结果、错误类型、错误详情

      -

      创建扫描配置

      -
    • -
    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/security/cis/config.html b/site/end-user/kpanda/security/cis/config.html deleted file mode 100644 index 10d061c..0000000 --- a/site/end-user/kpanda/security/cis/config.html +++ /dev/null @@ -1,776 +0,0 @@ - - - - - - - - - - - - - - -扫描配置 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

扫描配置

-

使用合规性扫描的第一步,就是先创建扫描配置。基于扫描配置再创建扫描策略、执行扫描策略,最后查看扫描结果。

-

创建扫描配置

-

创建扫描配置的步骤如下:

-
    -
  1. -

    在容器管理模块的首页左侧导航栏点击 安全管理

    -

    安全管理

    -
  2. -
  3. -

    默认进入 合规性扫描 页面,点击 扫描配置 页签,然后在右上角点击 创建扫描配置

    -

    安全管理

    -
  4. -
  5. -

    填写配置名称、选择配置模板、按需勾选扫描项,最后点击 确定

    -

    扫描模板:目前提供了两个模板。 kubeadm 模板适用于一般情况下的 Kubernetes 集群。 -我们在 kubeadm 模板基础上,结合算丰 AI 算力平台的平台设计忽略了不适用于算丰 AI 算力平台的扫描项。

    -

    安全管理

    -
  6. -
-

查看扫描配置

-

在扫描配置页签下,点击扫描配置的名称,可以查看该配置的类型、扫描项数量、创建时间、配置模板,以及该配置启用的具体扫描项。

-

安全管理

-

更新/删除扫描配置

-

扫描配置创建成功之后,可以根据需求更新配置或删除该配置。

-

在扫描配置页签下,点击配置右侧的 操作按钮:

-
    -
  • 选择 编辑 可以更新配置,支持更新描述、模板和扫描项。不可更改配置名称。
  • -
  • -

    选择 删除 可以删除该配置。

    -

    安全管理

    -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/security/cis/policy.html b/site/end-user/kpanda/security/cis/policy.html deleted file mode 100644 index 56ab117..0000000 --- a/site/end-user/kpanda/security/cis/policy.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - - - - - - - - - - -扫描策略 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-

扫描策略

-

创建扫描策略

-

创建扫描配置之后,可以基于配置创建扫描策略。

-
    -
  1. -

    安全管理 -> 合规性扫描 页面的 扫描策略 页签下,在右侧点击创建扫描策略。

    -

    创建扫描配置

    -
  2. -
  3. -

    参考下列说明填写配置后,点击 确定

    -
      -
    • 集群:选择需要扫描哪个集群。可选的集群列表来自容器管理模块中接入或创建的集群。如果没有想选的集群,可以去容器管理模块中接入创建集群。
    • -
    • 扫描配置:选择事先创建好的扫描配置。扫描配置规定了需要执行哪些具体的扫描项。
    • -
    • -

      扫描类型:

      -
        -
      • 立即扫描:在扫描策略创建好之后立即执行一次扫描,后续不可以自动/手动再次执行扫描。
      • -
      • 定时扫描:通过设置扫描周期,自动按时重复执行扫描。
      • -
      -
    • -
    • -

      扫描报告保留数量:设置最多保留多少扫描报告。超过指定的保留数量时,从最早的报告开始删除。

      -

      创建扫描配置

      -
    • -
    -
  4. -
-

更新/删除扫描策略

-

创建扫描策略之后,可以根据需要更新或删除扫描策略。

-

扫描策略 页签下,点击配置右侧的 操作按钮:

-
    -
  • -

    对于周期性的扫描策略:

    -
      -
    • 选择 立即执行 意味着,在周期计划之外立即再扫描一次集群
    • -
    • 选择 禁用 会中断扫描计划,直到点击 启用 才可以继续根据周期计划执行该扫描策略。
    • -
    • 选择 编辑 可以更新配置,支持更新扫描配置、类型、扫描周期、报告保留数量,不可更改配置名称和需要扫描的目标集群。
    • -
    • 选择 删除 可以删除该配置
    • -
    -
  • -
  • -

    对于一次性的扫描策略:仅支持 删除 操作。

    -

    创建扫描配置

    -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/security/cis/report.html b/site/end-user/kpanda/security/cis/report.html deleted file mode 100644 index b46d9d0..0000000 --- a/site/end-user/kpanda/security/cis/report.html +++ /dev/null @@ -1,706 +0,0 @@ - - - - - - - - - - - - - - -扫描报告 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

hide: - - toc

-
-

扫描报告

-

执行扫描策略之后会自动生成扫描报告。您可以在线查看扫描报告或将其下载到本地查看。

-
    -
  • -

    下载查看扫描报告

    -

    安全管理 -> 合规性扫描 页面的 扫描报告 页签点击报告右侧的 操作按钮选择 下载

    -

    报告列表截图

    -
  • -
  • -

    在线查看扫描报告

    -

    点击某个报告的名称,您可以在线查看 CIS 合规性扫描的报告内容。具体包括:

    -
      -
    • 扫描的目标集群
    • -
    • 使用的扫描策略和扫描配置
    • -
    • 扫描开始时间
    • -
    • 扫描项总数、通过数与未通过数
    • -
    • 对于未通过的扫描项给出对应的修复建议
    • -
    • 对于通过的扫描项给出更安全的操作建议
    • -
    -

    报告列表截图

    -
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/security/hunter.html b/site/end-user/kpanda/security/hunter.html deleted file mode 100644 index c4d21ce..0000000 --- a/site/end-user/kpanda/security/hunter.html +++ /dev/null @@ -1,785 +0,0 @@ - - - - - - - - - - - - - - -漏洞扫描 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

漏洞扫描

-

为了使用漏洞扫描功能,需要先创建扫描策略,执行该策略之后会自动生成扫描报告以供查看。

-

创建扫描策略

-
    -
  1. -

    在容器管理模块的首页左侧导航栏点击 安全管理

    -

    安全管理

    -
  2. -
  3. -

    在左侧导航栏点击 漏洞扫描 ,点击 扫描策略 页签,在右侧点击 创建扫描策略

    -

    安全管理

    -
  4. -
  5. -

    参考下列说明填写配置,最后点击 确定 即可。

    -
      -
    • 集群:选择需要扫描哪个集群。可选的集群列表来自容器管理模块中接入或创建的集群。如果没有想选的集群,可以去容器管理模块中接入创建集群。
    • -
    • -

      扫描类型:

      -
        -
      • 立即扫描:在扫描策略创建好之后立即执行一次扫描,后续不可以自动/手动再次执行扫描。
      • -
      • 定时扫描:通过设置扫描周期,自动按时重复执行扫描。
      • -
      -
    • -
    • -

      扫描报告保留数量:设置最多保留多少扫描报告。超过指定的保留数量时,从最早的报告开始删除。

      -

      安全管理

      -
    • -
    -
  6. -
-

更新/删除扫描策略

-

创建扫描策略之后,可以根据需要更新或删除扫描策略。

-

扫描策略 页签下,点击配置右侧的 操作按钮:

-
    -
  • -

    对于周期性的扫描策略:

    -
      -
    • 选择 立即执行 意味着,在周期计划之外立即再扫描一次集群
    • -
    • 选择 禁用 会中断扫描计划,直到点击 启用 才可以继续根据周期计划执行该扫描策略。
    • -
    • 选择 编辑 可以更新配置,支持更新扫描配置、类型、扫描周期、报告保留数量,不可更改配置名称和需要扫描的目标集群。
    • -
    • 选择 删除 可以删除该配置
    • -
    -
  • -
  • -

    对于一次性的扫描策略:仅支持 删除 操作。

    -

    创建扫描配置

    -
  • -
-

查看扫描报告

-
    -
  1. -

    安全管理 -> 权限扫描 -> 扫描报告 页签下,点击报告名称

    -
    -

    在报告右侧点击 删除 可以手动删除报告。

    -
    -

    创建扫描配置

    -
  2. -
  3. -

    查看扫描报告内容,包括:

    -
      -
    • 扫描的目标集群
    • -
    • 使用的扫描策略
    • -
    • 扫描频率
    • -
    • 风险总数、高风险数、中风险数、低风险数
    • -
    • 扫描时间
    • -
    • -

      检查详情,例如漏洞 ID、漏洞类型、漏洞名称、漏洞描述等

      -

      创建扫描配置

      -
    • -
    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/security/index.html b/site/end-user/kpanda/security/index.html deleted file mode 100644 index 76670a7..0000000 --- a/site/end-user/kpanda/security/index.html +++ /dev/null @@ -1,749 +0,0 @@ - - - - - - - - - - - - - - -安全扫描类型 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-

安全扫描类型

-

在Kubernetes(简称K8s)环境中,安全扫描是确保集群安全性的关键措施之一。其中,合规性扫描(基于CIS Benchmark)、权限扫描(基于kube-audit审计功能)、漏洞扫描(基于 kube-hunter)是三种常见且重要的安全扫描手段:

-
    -
  • -

    合规性扫描:基于 CIS Benchmark 对集群节点进行安全扫描。CIS Benchmark 是一套全球公认的最佳实践标准,为 Kubernetes 集群提供了详细的安全配置指南和自动化检查工具(如Kube-Bench),帮助组织确保其K8s集群符合安全基线要求,保护系统和数据免受威胁。

    -
  • -
  • -

    权限扫描:基于kube-audit审计功能。权限扫描主要解决集群访问控制和操作透明度的问题。通过审计日志,集群管理员能够追溯集群资源的访问历史,识别异常行为,如未经授权的访问、敏感数据的泄露、有安全漏洞的操作记录等。这对于故障排查、安全事件响应以及满足合规性要求至关重要。此外,权限扫描还可以帮助组织发现潜在的权限滥用问题,及时采取措施防止安全事件的发生。

    -
  • -
  • -

    漏洞扫描:基于 kube-hunter,主要解决 Kubernetes 集群中存在的已知漏洞和配置错误问题。kube-hunter 通过模拟攻击行为,能够识别集群中可被恶意利用的漏洞,如未授权访问、暴露的服务和API端点、配置错误的角色和绑定策略等。特别地,kube-hunter能够识别并报告 CVE 漏洞,这些漏洞如果被恶意利用,可能导致数据泄露、服务中断等严重后果。CVE 漏洞是由国际知名的安全组织如MITRE所定义和维护的,CVE数据库为软件和固件中的已知漏洞提供了唯一标识符,成为全球安全社区共同遵循的标准。kube-hunter 通过利用 CVE 数据库中的信息,能够帮助用户快速识别并响应Kubernetes集群中的安全威胁。

    -
  • -
-

合规性扫描

-

合规性扫描的对象是集群节点。扫描结果中会列出扫描项以及扫描结果,并针对未通过的扫描项给出修复建议。有关扫描时用到的具体安全规则,可参考 CIS Kubernetes Benchmark

-

检查不同类型的节点时,扫描的侧重点有所不同。

-
    -
  • -

    扫描控制平面节点(Controller)

    -
      -
    • 关注 API Servercontroller-managerschedulerkubelet 等系统组件的安全性
    • -
    • 检查 Etcd 数据库的安全配置
    • -
    • 检查集群身份验证机制、授权策略和网络安全配置是否符合安全标准
    • -
    -
  • -
  • -

    扫描工作节点(Worker)

    -
      -
    • 检查 kubelet、Docker等容器运行时的配置否符合安全标准
    • -
    • 检查容器镜像是否经过信任验证
    • -
    • 检查节点的网络安全配置否符合安全标准
    • -
    -
  • -
-
-

Tip

-

使用合规性扫描时,需要先创建扫描配置,然后基于该配置创建扫描策略。执行扫描策略之后,可以查看扫描报告

-
-

权限扫描

-

权限扫描侧重于权限问题引发的安全漏洞。权限扫描可以帮助用户识别 Kubernetes 集群中的安全威胁,标识哪些资源需要进行进一步的审查和保护措施。通过执行这些检查项,用户可以更清楚、更全面地了解自己的 Kubernetes 环境,确保集群环境符合 Kubernetes 的最佳实践和安全标准。

-

具体而言,权限扫描支持以下操作:

-
    -
  • -

    扫描集群中的所有节点的健康状态。

    -
  • -
  • -

    扫描集群组件的运行状况,如 kube-apiserverkube-controller-managerkube-scheduler 等。

    -
  • -
  • -

    扫描安全配置:检查 Kubernetes 的安全配置

    -
      -
    • API 安全:启用了不安全的 API 版本,是否设置了适当的 RBAC 角色和权限限制等
    • -
    • 容器安全:是否使用了不安全的 Image、是否开放了特权模式,是否设置了合适的安全上下文等
    • -
    • 网络安全:是否启用了合适的网络策略来限制流量,是否使用了 TLS 加密等
    • -
    • 存储安全:是否启用了适当的加密、访问控制等。
    • -
    • 应用程序安全:是否设置了必要的安全措施,例如密码管理、跨站脚本攻击防御等。
    • -
    -
  • -
  • -

    提供警告和建议:建议集群管理员执行的安全最佳实践,例如定期轮换证书、使用强密码、限制网络访问等。

    -
  • -
-
-

Tip

-

使用合规性扫描时,需要先创建扫描策略。执行扫描策略之后,可以查看扫描报告。详情可参考安全扫描

-
-

漏洞扫描

-

漏洞扫描侧重于扫描潜在的恶意攻击和安全漏洞,例如远程代码执行、SQL 注入、XSS 攻击等,以及一些针对 Kubernetes 特定的攻击。最终的扫描报告会列出集群中存在的安全漏洞,并提出修复建议。

-
-

Tip

-

使用合规性扫描时,需要先创建扫描策略。执行扫描策略之后,可以查看扫描报告。详情可参考漏洞扫描

-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/storage/pv.html b/site/end-user/kpanda/storage/pv.html deleted file mode 100644 index 77b2ed9..0000000 --- a/site/end-user/kpanda/storage/pv.html +++ /dev/null @@ -1,914 +0,0 @@ - - - - - - - - - - - - - - -数据卷 PV - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

数据卷(PV)

-

数据卷(PersistentVolume,PV)是集群中的一块存储,可由管理员事先制备,或使用存储类(Storage Class)来动态制备。PV 是集群资源,但拥有独立的生命周期,不会随着 Pod 进程结束而被删除。将 PV 挂载到工作负载可以实现工作负载的数据持久化。PV 中保存了可被 Pod 中容器访问的数据目录。

-

创建数据卷

-

目前支持通过 YAML 和表单两种方式创建数据卷,这两种方式各有优劣,可以满足不同用户的使用需求。

-
    -
  • -

    通过 YAML 创建步骤更少、更高效,但门槛要求较高,需要熟悉数据卷的 YAML 文件配置。

    -
  • -
  • -

    通过表单创建更直观更简单,根据提示填写对应的值即可,但步骤更加繁琐。

    -
  • -
-

YAML 创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 数据卷(PV) -> YAML 创建

    -

    路径

    -
  2. -
  3. -

    在弹框中输入或粘贴事先准备好的 YAML 文件,然后在弹框底部点击 确定

    -
    -

    支持从本地导入 YAML 文件或将填写好的文件下载保存到本地。

    -
    -

    yaml

    -
  4. -
-

表单创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 数据卷(PV) -> 创建数据卷(PV)

    -

    路径

    -
  2. -
  3. -

    填写基本信息。

    -
      -
    • 数据卷名称、数据卷类型、挂载路径、卷模式、节点亲和性在创建之后不可更改。
    • -
    • -

      数据卷类型:有关卷类型的详细介绍,可参考 Kubernetes 官方文档

      -
    • -
    • -

      Local:将 Node 节点的本地存储包装成 PVC 接口,容器直接使用 PVC 而无需关注底层的存储类型。Local 卷不支持动态配置数据卷,但支持配置节点亲和性,可以限制能从哪些节点上访问该数据卷。

      -
    • -
    • -

      HostPath:使用 Node 节点的文件系统上的文件或目录作为数据卷,不支持基于节点亲和性的 Pod 调度。

      -
    • -
    • -

      挂载路径:将数据卷挂载到容器中的某个具体目录下。

      -
    • -
    • -

      访问模式:

      -
        -
      • ReadWriteOnce:数据卷可以被一个节点以读写方式挂载。
      • -
      • ReadWriteMany:数据卷可以被多个节点以读写方式挂载。
      • -
      • ReadOnlyMany:数据卷可以被多个节点以只读方式挂载。
      • -
      • ReadWriteOncePod:数据卷可以被单个 Pod 以读写方式挂载。
      • -
      -
    • -
    • -

      回收策略:

      -
        -
      • Retain:不删除 PV,仅将其状态变为 released ,需要用户手动回收。有关如何手动回收,可参考持久卷
      • -
      • Recycle:保留 PV 但清空其中的数据,执行基本的擦除操作( rm -rf /thevolume/* )。
      • -
      • Delete:删除 PV 时及其中的数据。
      • -
      -
    • -
    • -

      卷模式:

      -
        -
      • 文件系统:数据卷将被 Pod 挂载到某个目录。如果数据卷的存储来自某块设备而该设备目前为空,第一次挂载卷之前会在设备上创建文件系统。
      • -
      • 块:将数据卷作为原始块设备来使用。这类卷以块设备的方式交给 Pod 使用,其上没有任何文件系统,可以让 Pod 更快地访问数据卷。
      • -
      -
    • -
    • -

      节点亲和性:

      -

      基本信息

      -
    • -
    -
  4. -
-

查看数据卷

-

在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 数据卷(PV)

-
    -
  • -

    该页面可以查看当前集群中的所有数据卷,以及各个数据卷的状态、容量、命名空间等信息。

    -
  • -
  • -

    支持按照数据卷的名称、状态、命名空间、创建时间进行顺序或逆序排序。

    -

    详情

    -
  • -
  • -

    点击数据卷的名称,可以查看该数据卷的基本配置、存储池信息、标签、注解等信息。

    -

    详情

    -
  • -
-

克隆数据卷

-

通过克隆数据卷,可以基于被克隆数据卷的配置,重新创建一个新的数据卷。

-
    -
  1. -

    进入克隆页面

    -
      -
    • -

      在数据卷列表页面,找到需要克隆的数据卷,在右侧的操作栏下选择 克隆

      -
      -

      也可以点击数据卷的名称,在详情页面的右上角点击操作按钮选择 克隆

      -
      -

      克隆

      -
    • -
    -
  2. -
  3. -

    直接使用原配置,或者按需进行修改,然后在页面底部点击 确定

    -
  4. -
-

更新数据卷

-

有两种途径可以更新数据卷。支持通过表单或 YAML 文件更新数据卷。

-
-

Note

-

仅支持更新数据卷的别名、容量、访问模式、回收策略、标签和注解。

-
-
    -
  • -

    在数据卷列表页面,找到需要更新的数据卷,在右侧的操作栏下选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 更新。

    -

    更新

    -
  • -
  • -

    点击数据卷的名称,进入数据卷的详情页面后,在页面右上角选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 更新。

    -

    更新

    -
  • -
-

删除数据卷

-

在数据卷列表页面,找到需要删除的数据,在右侧的操作栏下选择 删除

-
-

也可以点击数据卷的名称,在详情页面的右上角点击操作按钮选择 删除

-
-

删除

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/storage/pvc.html b/site/end-user/kpanda/storage/pvc.html deleted file mode 100644 index f5ab689..0000000 --- a/site/end-user/kpanda/storage/pvc.html +++ /dev/null @@ -1,956 +0,0 @@ - - - - - - - - - - - - - - -数据卷声明 PVC - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

数据卷声明(PVC)

-

持久卷声明(PersistentVolumeClaim,PVC)表达的是用户对存储的请求。PVC 消耗 PV 资源,申领使用特定大小、特定访问模式的数据卷,例如要求 PV 卷以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 等模式来挂载。

-

创建数据卷声明

-

目前支持通过 YAML 和表单两种方式创建数据卷声明,这两种方式各有优劣,可以满足不同用户的使用需求。

-
    -
  • -

    通过 YAML 创建步骤更少、更高效,但门槛要求较高,需要熟悉数据卷声明的 YAML 文件配置。

    -
  • -
  • -

    通过表单创建更直观更简单,根据提示填写对应的值即可,但步骤更加繁琐。

    -
  • -
-

YAML 创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 数据卷声明 (PVC) -> YAML 创建

    -

    路径

    -
  2. -
  3. -

    在弹框中输入或粘贴事先准备好的 YAML 文件,然后在弹框底部点击 确定

    -
    -

    支持从本地导入 YAML 文件或将填写好的文件下载保存到本地。

    -
    -

    yaml

    -
  4. -
-

表单创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 数据卷声明 (PVC) -> 创建数据卷声明 (PVC)

    -

    路径

    -
  2. -
  3. -

    填写基本信息。

    -
      -
    • 数据卷声明的名称、命名空间、创建方式、数据卷、容量、访问模式在创建之后不可更改。
    • -
    • -

      创建方式:在已有的存储池或者数据卷中动态创建新的数据卷声明,或者基于数据卷声明的快照创建新的数据卷声明。

      -
      -

      基于快照创建时无法修改数据卷声明的容量,可以在创建完成后再进行修改。

      -
      -
    • -
    • -

      选择创建方式之后,在下拉列表中选择想要使用的存储池/数据卷/快照。

      -
    • -
    • -

      访问模式:

      -
    • -
    • -

      ReadWriteOnce,数据卷声明可以被一个节点以读写方式挂载。

      -
    • -
    • ReadWriteMany,数据卷声明可以被多个节点以读写方式挂载。
    • -
    • ReadOnlyMany,数据卷声明可以被多个节点以只读方式挂载。
    • -
    • -

      ReadWriteOncePod,数据卷声明可以被单个 Pod 以读写方式挂载。

      -

      基本信息

      -
    • -
    -
  4. -
-

查看数据卷声明

-

在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 数据卷声明(PVC)

-
    -
  • -

    该页面可以查看当前集群中的所有数据卷声明,以及各个数据卷声明的状态、容量、命名空间等信息。

    -
  • -
  • -

    支持按照数据卷声明的名称、状态、命名空间、创建时间进行顺序或逆序排序。

    -

    详情

    -
  • -
  • -

    点击数据卷声明的名称,可以查看该数据卷声明的基本配置、存储池信息、标签、注解等信息。

    -

    详情

    -
  • -
-

扩容数据卷声明

-
    -
  1. -

    在左侧导航栏点击 容器存储 -> 数据卷声明(PVC) ,找到想要调整容量的数据卷声明。

    -

    扩容

    -
  2. -
  3. -

    点击数据卷声明的名称,然后在页面右上角点击操作按钮选择 扩容

    -

    扩容

    -
  4. -
  5. -

    输入目标容量,然后点击 确定

    -

    克隆

    -
  6. -
-

克隆数据卷声明

-

通过克隆数据卷声明,可以基于被克隆数据卷声明的配置,重新创建一个新的数据卷声明。

-
    -
  1. -

    进入克隆页面

    -
      -
    • -

      在数据卷声明列表页面,找到需要克隆的数据卷声明,在右侧的操作栏下选择 克隆

      -
      -

      也可以点击数据卷声明的名称,在详情页面的右上角点击操作按钮选择 克隆

      -
      -

      克隆

      -
    • -
    -
  2. -
  3. -

    直接使用原配置,或者按需进行修改,然后在页面底部点击 确定

    -

    克隆

    -
  4. -
-

更新数据卷声明

-

有两种途径可以更新数据卷声明。支持通过表单或 YAML 文件更新数据卷声明。

-
-

Note

-

仅支持更新数据卷声明的别名、标签和注解。

-
-
    -
  • -

    在数据卷列表页面,找到需要更新的数据卷声明,在右侧的操作栏下选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 更新。

    -

    更新

    -
  • -
  • -

    点击数据卷声明的名称,进入数据卷声明的详情页面后,在页面右上角选择 更新 即可通过表单更新,选择 编辑 YAML 即可通过 YAML 更新。

    -

    更新

    -
  • -
-

删除数据卷声明

-

在数据卷声明列表页面,找到需要删除的数据,在右侧的操作栏下选择 删除

-
-

也可以点击数据卷声明的名称,在详情页面的右上角点击操作按钮选择 删除

-
-

删除

-

常见问题

-
    -
  1. -

    如果列表中没有可选的存储池或数据卷,可以创建存储池创建数据卷

    -
  2. -
  3. -

    如果列表中没有可选的快照,可以进入数据卷声明的详情页,在右上角制作快照。

    -

    制作快照

    -
  4. -
  5. -

    如果数据卷声明所使用的存储池 (SC) 没有启用快照,则无法制作快照,页面不会显示“制作快照”选项。

    -
  6. -
  7. -

    如果数据卷声明所使用的存储池 (SC) 没有开启扩容功能,则该数据卷不支持扩容,页面不会显示扩容选项。

    -

    开启快照

    -
  8. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/storage/sc-share.html b/site/end-user/kpanda/storage/sc-share.html deleted file mode 100644 index c34df48..0000000 --- a/site/end-user/kpanda/storage/sc-share.html +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - - - - - - - - - -共享存储池 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

共享存储池

-

算丰 AI 算力平台容器管理模块支持将一个存储池共享给多个命名空间使用,以便提高资源利用效率。

-
    -
  1. -

    在存储池列表中找到需要共享的存储池,在右侧操作栏下点击 授权命名空间

    -

    授权

    -
  2. -
  3. -

    点击 自定义命名空间 可以逐一选择需要将此存储池共享到哪些命名空间。

    -
      -
    • 点击 授权所有命名空间 可以一次性将此存储池共享到当前集群下的所有命名空间。
    • -
    • -

      在列表右侧的操作栏下方点击 移除授权 ,可以解除授权,停止将此存储池共享到该命名空间。

      -

      授权

      -
    • -
    -
  4. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/storage/sc.html b/site/end-user/kpanda/storage/sc.html deleted file mode 100644 index c50f1f9..0000000 --- a/site/end-user/kpanda/storage/sc.html +++ /dev/null @@ -1,829 +0,0 @@ - - - - - - - - - - - - - - -存储池 SC - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

存储池(SC)

-

存储池指将许多物理磁盘组成一个大型存储资源池,本平台支持接入各类存储厂商后创建块存储池、本地存储池、自定义存储池,然后为工作负载动态配置数据卷。

-

创建存储池(SC)

-

目前支持通过 YAML 和表单两种方式创建存储池,这两种方式各有优劣,可以满足不同用户的使用需求。

-
    -
  • -

    通过 YAML 创建步骤更少、更高效,但门槛要求较高,需要熟悉存储池的 YAML 文件配置。

    -
  • -
  • -

    通过表单创建更直观更简单,根据提示填写对应的值即可,但步骤更加繁琐。

    -
  • -
-

YAML 创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 存储池(SC) -> YAML 创建

    -

    路径

    -
  2. -
  3. -

    在弹框中输入或粘贴事先准备好的 YAML 文件,然后在弹框底部点击 确定

    -
    -

    支持从本地导入 YAML 文件或将填写好的文件下载保存到本地。

    -
    -

    yaml

    -
  4. -
-

表单创建

-
    -
  1. -

    在集群列表中点击目标集群的名称,然后在左侧导航栏点击 容器存储 -> 存储池(SC) -> 创建存储池(SC)

    -

    路径

    -
  2. -
  3. -

    填写基本信息,然后在底部点击 确定

    -

    自定义存储系统

    -
      -
    • 存储池名称、驱动、回收策略在创建后不可修改。
    • -
    • -

      CSI 存储驱动:基于标准 Kubernetes 的容器存储接口插件,需遵守存储厂商规定的格式,例如 rancher.io/local-path

      -
        -
      • 有关如何填写不同厂商提供的 CSI 驱动,可参考 Kubernetes 官方文档存储类
          -
        • 回收策略:删除数据卷时,保留数据卷中的数据或者删除其中的数据。
        • -
        • 快照/扩容:开启后,基于该存储池的数据卷/数据卷声明才能支持扩容和快照功能,但 前提是底层使用的存储驱动支持快照和扩容功能
        • -
        -
      • -
      -
    • -
    -

    HwameiStor 存储系统

    -
      -
    • 存储池名称、驱动、回收策略在创建后不可修改。
    • -
    • 存储系统:HwameiStor 存储系统。
    • -
    • 存储类型:支持 LVM,裸磁盘类型
        -
      • LVM 类型 :HwameiStor 推荐使用此方式,可使用高可用数据卷,对应的的 CSI 存储驱动为 lvm.hwameistor.io
      • -
      • 裸磁盘数据卷 : 适用于非高可用场景,无高可用能力,对应的 CSI 驱动为 hdd.hwameistor.io
      • -
      -
    • -
    • 高可用模式:使用高可用能力之前请确认 DRBD 组件 已安装。开启高可用模式后,可将数据卷副本数设置为 1 和 2。 如需要可将数据卷副本从 1 Convert 成 1
    • -
    • 回收策略:删除数据卷时,保留数据卷中的数据或者删除其中的数据。
    • -
    • 快照/扩容:开启后,基于该存储池的数据卷/数据卷声明才能支持扩容和快照功能,但 前提是底层使用的存储驱动支持快照和扩容功能
    • -
    -
    -

    Note

    -

    目前 HwameiStor xfs、ext4 两种文件系统,其中默认使用的是 xfs 文件系统,如果想要替换为 ext4,可以在自定义参数添加 csi.storage.k8s.io/fstype: ext4

    -
    -

    基本信息

    -
  4. -
-

更新存储池(SC)

-

在存储池列表页面,找到需要更新的存储池,在右侧的操作栏下选择 编辑 即可通过更新存储池。

-

更新

-
-

Info

-

选择 查看 YAML 可以查看该存储池的 YAML 文件,但不支持编辑。

-
-

删除存储池(SC)

-

在存储池列表页面,找到需要删除的存储池,在右侧的操作栏下选择 删除

-

删除

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/create-cronjob.html b/site/end-user/kpanda/workloads/create-cronjob.html deleted file mode 100644 index 0a2485c..0000000 --- a/site/end-user/kpanda/workloads/create-cronjob.html +++ /dev/null @@ -1,1033 +0,0 @@ - - - - - - - - - - - - - - -创建 CronJob - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建定时任务(CronJob)

-

本文介绍如何通过镜像和 YAML 文件两种方式创建定时任务(CronJob)。

-

定时任务(CronJob)适用于于执行周期性的操作,例如备份、报告生成等。这些任务可以配置为周期性重复的(例如:每天/每周/每月一次),可以定义任务开始执行的时间间隔。

-

前提条件

-

创建定时任务(CronJob)之前,需要满足以下前提条件:

-
    -
  • -

    在容器管理模块中接入 Kubernetes 集群或者管理员已为用户创建了集群,且能够访问集群的 UI 界面。

    -
  • -
  • -

    创建一个命名空间用户

    -
  • -
  • -

    当前操作用户应具有 NS Editor 或更高权限,详情可参考命名空间授权

    -
  • -
  • -

    单个实例中有多个容器时,请确保容器使用的端口不冲突,否则部署会失效。

    -
  • -
-

镜像创建

-

参考以下步骤,使用镜像创建一个定时任务。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 定时任务 ,然后点击页面右上角的 镜像创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    依次填写基本信息容器配置定时任务配置高级配置后,在页面右下角点击 确定 完成创建。

    -

    系统将自动返回 定时任务 列表。点击列表右侧的 ,可以对定时任务执行执行更新、删除、重启等操作。

    -

    操作菜单

    -
  6. -
-

基本信息

-

创建定时任务 页面中,根据下表输入信息后,点击 下一步

-

基本信息

-
    -
  • 负载名称:最多包含 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾。同一命名空间内同一类型工作负载的名称不得重复,而且负载名称在工作负载创建好之后不可更改。
  • -
  • 命名空间:选择将新建的定时任务部署在哪个命名空间,默认使用 default 命名空间。找不到所需的命名空间时可以根据页面提示去创建新的命名空间
  • -
  • 描述:输入工作负载的描述信息,内容自定义。字符数量应不超过 512 个。
  • -
-

容器配置

-

容器配置分为基本信息、生命周期、健康检查、环境变量、数据存储、安全设置六部分,点击下方的相应页签可查看各部分的配置要求。

-
-

容器配置仅针对单个容器进行配置,如需在一个容器组中添加多个容器,可点击右侧的 + 添加多个容器。

-
-
-
-
-

在配置容器相关参数时,必须正确填写容器的名称、镜像参数,否则将无法进入下一步。参考以下要求填写配置后,点击 确认

-

基本信息

-
    -
  • 容器类型:默认为工作容器。有关初始化容器,参见 k8s 官方文档
  • -
  • 容器名称:最多包含 63 个字符,支持小写字母、数字及分隔符(“-”)。必须以小写字母或数字开头及结尾,例如 nginx-01。
  • -
  • 镜像:
      -
    • 容器镜像:从列表中选择一个合适的镜像。输入镜像名称时,默认从官方的 DockerHub 拉取镜像。 - 接入算丰 AI 算力平台的镜像仓库模块后,可以点击右侧的 选择镜像 按钮来选择镜像。
    • -
    • 镜像版本:从下拉列表选择一个合适的版本。
    • -
    • 镜像拉取策略:勾选 总是拉取镜像 后,负载每次重启/升级时都会从仓库重新拉取镜像。 - 如果不勾选,则只拉取本地镜像,只有当镜像在本地不存在时才从镜像仓库重新拉取。 - 更多详情可参考镜像拉取策略
    • -
    • 镜像仓库密钥:可选。如果目标仓库需要 Secret 才能访问,需要先去创建一个密钥
    • -
    -
  • -
  • 特权容器:容器默认不可以访问宿主机上的任何设备,开启特权容器后,容器即可访问宿主机上的所有设备,享有宿主机上的运行进程的所有权限。
  • -
  • CPU/内存配额:CPU/内存资源的请求值(需要使用的最小资源)和限制值(允许使用的最大资源)。请根据需要为容器配置资源,避免资源浪费和因容器资源超额导致系统故障。默认值如图所示。
  • -
  • GPU 配置:为容器配置 GPU 用量, 仅支持输入正整数。
      -
    • 整卡模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量。配置后,容器将占用整张物理 GPU卡。同时物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      -
    • -
    • 虚拟化模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量, 物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      • GPU 算力:每张物理 GPU 卡上需要使用的算力百分比,最多为100%。
      • -
      • 显存:每张物理卡上需要使用的显存数量。
      • -
      • 调度策略(Binpack / Spread):支持基于 GPU 卡和基于节点的两种维度的调度策略。Binpack 是集中式调度策略,优先将容器调度到同一个节点的同一张 GPU 卡上;Spread 是分散式调度策略,优先将容器调度到不同节点的不同 GPU 卡上,根据实际场景可组合使用。(当工作负载级别的 Binpack / Spread 调度策略与集群级别的 Binpack / Spread 调度策略冲突时,系统优先使用工作负载级别的调度策略)。
      • -
      • 任务优先级:GPU 算力会优先供给高优先级任务使用,普通任务会减少甚至暂停使用 GPU 算力,直到高优先级任务结束,普通任务会重新继续使用 GPU 算力,常用于在离线混部场景。
      • -
      • 指定型号:将工作负载调度到指定型号的 GPU 卡上,适用于对 GPU 型号有特殊要求的场景。
      • -
      -
    • -
    • Mig 模式
        -
      • 规格:切分后的物理 GPU 卡规格。
      • -
      • 数量:使用该规格的数量。
      • -
      -
    • -
    -
  • -
-
-

设置 GPU 之前,需要管理员预先在集群上安装 GPU Operatornvidia-vgpu(仅 vGPU 模式需要安装),并在集群设置中开启 GPU 特性。

-
-
-
-

设置容器启动时、启动后、停止前需要执行的命令。详情可参考容器生命周期配置

-

生命周期

-
-
-

用于判断容器和应用的健康状态,有助于提高应用的可用性。详情可参考容器健康检查配置

-

健康检查

-
-
-

配置 Pod 内的容器参数,为 Pod 添加环境变量或传递配置等。详情可参考容器环境变量配置

-

环境变量

-
-
-

配置容器挂载数据卷和数据持久化的设置。详情可参考容器数据存储配置

-

数据存储

-
-
-

通过 Linux 内置的账号权限隔离机制来对容器进行安全隔离。您可以通过使用不同权限的账号 UID(数字身份标记)来限制容器的权限。例如,输入 0 表示使用 root 账号的权限。

-

安全设置

-
-
-
-

定时任务配置

-

定时任务配置

-
    -
  • -

    并发策略:是否允许多个 Job 任务并行执行。

    -
      -
    • Allow :可以在前一个任务未完成时就创建新的定时任务,而且多个任务可以并行。任务太多可能抢占集群资源。
    • -
    • Forbid :在前一个任务完成之前,不能创建新任务,如果新任务的执行时间到了而之前的任务仍未执行完,CronJob 会忽略新任务的执行。
    • -
    • Replace :如果新任务的执行时间到了,但前一个任务还未完成,新的任务会取代前一个任务。
    • -
    -
    -

    上述规则仅适用于同一个 CronJob 创建的多个任务。多个 CronJob 创建的多个任务总是允许并发执行。

    -
    -
  • -
  • -

    定时规则:基于分钟、小时、天、周、月设置任务执行的时间周期。支持用数字和 * 自定义 Cron 表达式,输入表达式后下方会提示当前表达式的含义。有关详细的表达式语法规则,可参考 Cron 时间表语法

    -
  • -
  • 任务记录:设定保留多少条任务执行成功或失败的记录。 0 表示不保留。
  • -
  • 超时时间:超出该时间时,任务就会被标识为执行失败,任务下的所有 Pod 都会被删除。为空时表示不设置超时时间。默认值为 360 s。
  • -
  • 重试次数:任务可重试次数,默认值为 6。
  • -
  • 重启策略:设置任务失败时是否重启 Pod。
  • -
-

服务配置

-

为有状态负载配置服务(Service),使有状态负载能够被外部访问。

-
    -
  1. -

    点击 创建服务 按钮。

    -

    服务配置

    -
  2. -
  3. -

    参考创建服务,配置服务参数。

    -

    创建服务

    -
  4. -
  5. -

    点击 确定 ,点击 下一步

    -
  6. -
-

高级配置

-

定时任务的高级配置主要涉及标签与注解。

-

可以点击 添加 按钮为工作负载实例 Pod 添加标签和注解。

-

定时任务配置

-

YAML 创建

-

除了通过镜像方式外,还可以通过 YAML 文件更快速地创建创建定时任务。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 定时任务 ,然后点击页面右上角的 YAML 创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    输入或粘贴事先准备好的 YAML 文件,点击 确定 即可完成创建。

    -

    工作负载

    -
  6. -
-
-点击查看创建定时任务的 YAML 示例 -
apiVersion: batch/v1
-kind: CronJob
-metadata:
-  creationTimestamp: '2022-12-26T09:45:47Z'
-  generation: 1
-  name: demo
-  namespace: default
-  resourceVersion: '92726617'
-  uid: d030d8d7-a405-4dcd-b09a-176942ef36c9
-spec:
-  concurrencyPolicy: Allow
-  failedJobsHistoryLimit: 1
-  jobTemplate:
-    metadata:
-      creationTimestamp: null
-    spec:
-      activeDeadlineSeconds: 360
-      backoffLimit: 6
-      template:
-        metadata:
-          creationTimestamp: null
-        spec:
-          containers:
-            - image: nginx
-              imagePullPolicy: IfNotPresent
-              lifecycle: {}
-              name: container-3
-              resources:
-                limits:
-                  cpu: 250m
-                  memory: 512Mi
-                requests:
-                  cpu: 250m
-                  memory: 512Mi
-              securityContext:
-                privileged: false
-              terminationMessagePath: /dev/termination-log
-              terminationMessagePolicy: File
-          dnsPolicy: ClusterFirst
-          restartPolicy: Never
-          schedulerName: default-scheduler
-          securityContext: {}
-          terminationGracePeriodSeconds: 30
-  schedule: 0 0 13 * 5
-  successfulJobsHistoryLimit: 3
-  suspend: false
-status: {}
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/create-daemonset.html b/site/end-user/kpanda/workloads/create-daemonset.html deleted file mode 100644 index d8c6321..0000000 --- a/site/end-user/kpanda/workloads/create-daemonset.html +++ /dev/null @@ -1,1194 +0,0 @@ - - - - - - - - - - - - - - -创建 DaemonSet - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建守护进程(DaemonSet)

-

本文介绍如何通过镜像和 YAML 文件两种方式创建守护进程(DaemonSet)。

-

守护进程(DaemonSet)通过节点亲和性污点功能确保在全部或部分节点上运行一个 Pod 的副本。对于新加入集群的节点,DaemonSet 自动在新节点上部署相应的 Pod,并跟踪 Pod 的运行状态。当节点被移除时,DaemonSet 则删除其创建的所有 Pod。

-

守护进程的常见用例包括:

-
    -
  • -

    在每个节点上运行集群守护进程。

    -
  • -
  • -

    在每个节点上运行日志收集守护进程。

    -
  • -
  • -

    在每个节点上运行监控守护进程。

    -
  • -
-

简单起见,可以在每个节点上为每种类型的守护进程都启动一个 DaemonSet。如需更精细、更高级地管理守护进程,也可以为同一种守护进程部署多个 DaemonSet。每个 DaemonSet 具有不同的标志,并且对不同硬件类型具有不同的内存、CPU 要求。

-

前提条件

-

创建 DaemonSet 之前,需要满足以下前提条件:

-
    -
  • -

    在容器管理模块中接入 Kubernetes 集群或者管理员已为用户创建了集群,且能够访问集群的 UI 界面。

    -
  • -
  • -

    创建一个命名空间用户

    -
  • -
  • -

    当前操作用户应具有 NS Editor 或更高权限,详情可参考命名空间授权

    -
  • -
  • -

    单个实例中有多个容器时,请确保容器使用的端口不冲突,否则部署会失效。

    -
  • -
-

镜像创建

-

参考以下步骤,使用镜像创建一个守护进程。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 守护进程 ,然后点击页面右上角的 镜像创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    依次填写基本信息容器配置服务配置高级配置后,在页面右下角点击 确定 完成创建。

    -

    系统将自动返回 守护进程 列表。点击列表右侧的 ,可以对守护进程执行执行更新、删除、重启等操作。

    -

    操作菜单

    -
  6. -
-

基本信息

-

创建守护进程 页面中,根据下表输入信息后,点击 下一步

-

基本信息

-
    -
  • 负载名称:最多包含 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾。同一命名空间内同一类型工作负载的名称不得重复,而且负载名称在工作负载创建好之后不可更改。
  • -
  • 命名空间:选择将新建的守护进程部署在哪个命名空间,默认使用 default 命名空间。找不到所需的命名空间时可以根据页面提示去创建新的命名空间
  • -
  • 描述:输入工作负载的描述信息,内容自定义。字符数量应不超过 512 个。
  • -
-

容器配置

-

容器配置分为基本信息、生命周期、健康检查、环境变量、数据存储、安全设置六部分,点击下方的相应页签可查看各部分的配置要求。

-
-

容器配置仅针对单个容器进行配置,如需在一个容器组中添加多个容器,可点击右侧的 + 添加多个容器。

-
-
-
-
-

在配置容器相关参数时,必须正确填写容器的名称、镜像参数,否则将无法进入下一步。参考以下要求填写配置后,点击 确认

-

基本信息

-
    -
  • 容器类型:默认为工作容器。有关初始化容器,参见 k8s 官方文档
  • -
  • 容器名称:最多包含 63 个字符,支持小写字母、数字及分隔符(“-”)。必须以小写字母或数字开头及结尾,例如 nginx-01。
  • -
  • 镜像:
      -
    • 容器镜像:从列表中选择一个合适的镜像。输入镜像名称时,默认从官方的 DockerHub 拉取镜像。 - 接入算丰 AI 算力平台的镜像仓库模块后,可以点击右侧的 选择镜像 按钮来选择镜像。
    • -
    • 镜像版本:从下拉列表选择一个合适的版本。
    • -
    • 镜像拉取策略:勾选 总是拉取镜像 后,负载每次重启/升级时都会从仓库重新拉取镜像。 - 如果不勾选,则只拉取本地镜像,只有当镜像在本地不存在时才从镜像仓库重新拉取。 - 更多详情可参考镜像拉取策略
    • -
    • 镜像仓库密钥:可选。如果目标仓库需要 Secret 才能访问,需要先去创建一个密钥
    • -
    -
  • -
  • 特权容器:容器默认不可以访问宿主机上的任何设备,开启特权容器后,容器即可访问宿主机上的所有设备,享有宿主机上的运行进程的所有权限。
  • -
  • CPU/内存配额:CPU/内存资源的请求值(需要使用的最小资源)和限制值(允许使用的最大资源)。请根据需要为容器配置资源,避免资源浪费和因容器资源超额导致系统故障。默认值如图所示。
  • -
  • GPU 配置:为容器配置 GPU 用量, 仅支持输入正整数。
      -
    • 整卡模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量。配置后,容器将占用整张物理 GPU卡。同时物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      -
    • -
    • 虚拟化模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量, 物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      • GPU 算力:每张物理 GPU 卡上需要使用的算力百分比,最多为100%。
      • -
      • 显存:每张物理卡上需要使用的显存数量。
      • -
      • 调度策略(Binpack / Spread):支持基于 GPU 卡和基于节点的两种维度的调度策略。Binpack 是集中式调度策略,优先将容器调度到同一个节点的同一张 GPU 卡上;Spread 是分散式调度策略,优先将容器调度到不同节点的不同 GPU 卡上,根据实际场景可组合使用。(当工作负载级别的 Binpack / Spread 调度策略与集群级别的 Binpack / Spread 调度策略冲突时,系统优先使用工作负载级别的调度策略)。
      • -
      • 任务优先级:GPU 算力会优先供给高优先级任务使用,普通任务会减少甚至暂停使用 GPU 算力,直到高优先级任务结束,普通任务会重新继续使用 GPU 算力,常用于在离线混部场景。
      • -
      • 指定型号:将工作负载调度到指定型号的 GPU 卡上,适用于对 GPU 型号有特殊要求的场景。
      • -
      -
    • -
    • Mig 模式
        -
      • 规格:切分后的物理 GPU 卡规格。
      • -
      • 数量:使用该规格的数量。
      • -
      -
    • -
    -
  • -
-
-

设置 GPU 之前,需要管理员预先在集群上安装 GPU Operatornvidia-vgpu(仅 vGPU 模式需要安装),并在集群设置中开启 GPU 特性。

-
-
-
-

设置容器启动时、启动后、停止前需要执行的命令。详情可参考容器生命周期配置

-

生命周期

-
-
-

用于判断容器和应用的健康状态,有助于提高应用的可用性。详情可参考容器健康检查配置

-

健康检查

-
-
-

配置 Pod 内的容器参数,为 Pod 添加环境变量或传递配置等。详情可参考容器环境变量配置

-

环境变量

-
-
-

配置容器挂载数据卷和数据持久化的设置。详情可参考容器数据存储配置

-

数据存储

-
-
-

通过 Linux 内置的账号权限隔离机制来对容器进行安全隔离。您可以通过使用不同权限的账号 UID(数字身份标记)来限制容器的权限。例如,输入 0 表示使用 root 账号的权限。

-

安全设置

-
-
-
-

服务配置

-

为守护进程创建服务(Service),使守护进程能够被外部访问。

-
    -
  1. -

    点击 创建服务 按钮。

    -

    服务配置

    -
  2. -
  3. -

    配置服务参数,详情请参考创建服务

    -

    创建服务

    -
  4. -
  5. -

    点击 确定 ,点击 下一步

    -
  6. -
-

高级配置

-

高级配置包括负载的网络配置、升级策略、调度策略、标签与注解四部分,可点击下方的页签查看各部分的配置要求。

-
-
-
-

应用在某些场景下会出现冗余的 DNS 查询。Kubernetes 为应用提供了与 DNS 相关的配置选项,能够在某些场景下有效地减少冗余的 DNS 查询,提升业务并发量。

-

DNS 配置

-
    -
  • -

    DNS 策略

    -
      -
    • Default:使容器使用 kubelet 的 --resolv-conf 参数指向的域名解析文件。该配置只能解析注册到互联网上的外部域名,无法解析集群内部域名,且不存在无效的 DNS 查询。
    • -
    • ClusterFirstWithHostNet:应用对接主机的域名文件。
    • -
    • ClusterFirst:应用对接 Kube-DNS/CoreDNS。
    • -
    • None:Kubernetes v1.9(Beta in v1.10)中引入的新选项值。设置为 None 之后,必须设置 dnsConfig,此时容器的域名解析文件将完全通过 dnsConfig 的配置来生成。
    • -
    -
  • -
  • -

    域名服务器:填写域名服务器的地址,例如 10.6.175.20

    -
  • -
  • 搜索域:域名查询时的 DNS 搜索域列表。指定后,提供的搜索域列表将合并到基于 dnsPolicy 生成的域名解析文件的 search 字段中,并删除重复的域名。Kubernetes 最多允许 6 个搜索域。
  • -
  • Options:DNS 的配置选项,其中每个对象可以具有 name 属性(必需)和 value 属性(可选)。该字段中的内容将合并到基于 dnsPolicy 生成的域名解析文件的 options 字段中,dnsConfig 的 options 的某些选项如果与基于 dnsPolicy 生成的域名解析文件的选项冲突,则会被 dnsConfig 所覆盖。
  • -
  • 主机别名:为主机设置的别名。
  • -
-
-
-

升级策略

-
    -
  • 升级方式: 滚动升级 指逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新老的实例上,因此业务不会中断。 重建升级 指先删除老版本的负载实例,再安装指定的新版本,升级过程中业务会中断。
  • -
  • 最大无效 Pod 数:指定负载更新过程中不可用 Pod 的最大值或比率,默认 25%。如果等于实例数有服务中断的风险。
  • -
  • 最大浪涌:更新 Pod 的过程中 Pod 总数超过 Pod 期望副本数部分的最大值或比率。默认 25%。
  • -
  • 最大保留版本数:设置版本回滚时保留的旧版本数量。默认 10。
  • -
  • Pod 可用最短时间:Pod 就绪的最短时间,只有超出这个时间 Pod 才被认为可用,默认 0 秒。
  • -
  • 升级最大持续时间:如果超过所设置的时间仍未部署成功,则将该负载标记为失败。默认 600 秒。
  • -
  • 缩容时间窗:负载停止前命令的执行时间窗(0-9,999秒),默认 30 秒。
  • -
-
-
-

调度策略

-
    -
  • 容忍时间:负载实例所在的节点不可用时,将负载实例重新调度到其它可用节点的时间,默认为 300 秒。
  • -
  • 节点亲和性:根据节点上的标签来约束 Pod 可以调度到哪些节点上。
  • -
  • 工作负载亲和性:基于已经在节点上运行的 Pod 的标签来约束 Pod 可以调度到哪些节点。
  • -
  • 工作负载反亲和性:基于已经在节点上运行的 Pod 的标签来约束 Pod 不可以调度到哪些节点。
  • -
  • 拓扑域:即 topologyKey,用于指定可以调度的一组节点。例如, kubernetes.io/os 表示只要某个操作系统的节点满足 labelSelector 的条件就可以调度到该节点。
  • -
-
-

具体详情请参考调度策略

-
-
-
-

可以点击 添加 按钮为工作负载和容器组添加标签和注解。

-

标签与注解

-
-
-
-

YAML 创建

-

除了通过镜像方式外,还可以通过 YAML 文件更快速地创建创建守护进程。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 守护进程 ,然后点击页面右上角的 YAML 创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    输入或粘贴事先准备好的 YAML 文件,点击 确定 即可完成创建。

    -

    工作负载

    -
  6. -
-
-点击查看创建守护进程的 YAML 示例 -
kind: DaemonSet
-apiVersion: apps/v1
-metadata:
-  name: hwameistor-local-disk-manager
-  namespace: hwameistor
-  uid: ccbdc098-7de3-4a8a-96dd-d1cee159c92b
-  resourceVersion: '90999552'
-  generation: 1
-  creationTimestamp: '2022-12-15T09:03:44Z'
-  labels:
-    app.kubernetes.io/managed-by: Helm
-  annotations:
-    deprecated.daemonset.template.generation: '1'
-    meta.helm.sh/release-name: hwameistor
-    meta.helm.sh/release-namespace: hwameistor
-spec:
-  selector:
-    matchLabels:
-      app: hwameistor-local-disk-manager
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: hwameistor-local-disk-manager
-    spec:
-      volumes:
-        - name: udev
-          hostPath:
-            path: /run/udev
-            type: Directory
-        - name: procmount
-          hostPath:
-            path: /proc
-            type: Directory
-        - name: devmount
-          hostPath:
-            path: /dev
-            type: Directory
-        - name: socket-dir
-          hostPath:
-            path: /var/lib/kubelet/plugins/disk.hwameistor.io
-            type: DirectoryOrCreate
-        - name: registration-dir
-          hostPath:
-            path: /var/lib/kubelet/plugins_registry/
-            type: Directory
-        - name: plugin-dir
-          hostPath:
-            path: /var/lib/kubelet/plugins
-            type: DirectoryOrCreate
-        - name: pods-mount-dir
-          hostPath:
-            path: /var/lib/kubelet/pods
-            type: DirectoryOrCreate
-      containers:
-        - name: registrar
-          image: k8s-gcr.m.daocloud.io/sig-storage/csi-node-driver-registrar:v2.5.0
-          args:
-            - '--v=5'
-            - '--csi-address=/csi/csi.sock'
-            - >-
-              --kubelet-registration-path=/var/lib/kubelet/plugins/disk.hwameistor.io/csi.sock
-          env:
-            - name: KUBE_NODE_NAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: spec.nodeName
-          resources: {}
-          volumeMounts:
-            - name: socket-dir
-              mountPath: /csi
-            - name: registration-dir
-              mountPath: /registration
-          lifecycle:
-            preStop:
-              exec:
-                command:
-                  - /bin/sh
-                  - '-c'
-                  - >-
-                    rm -rf /registration/disk.hwameistor.io 
-                    /registration/disk.hwameistor.io-reg.sock
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-        - name: manager
-          image: ghcr.m.daocloud.io/hwameistor/local-disk-manager:v0.6.1
-          command:
-            - /local-disk-manager
-          args:
-            - '--endpoint=$(CSI_ENDPOINT)'
-            - '--nodeid=$(NODENAME)'
-            - '--csi-enable=true'
-          env:
-            - name: CSI_ENDPOINT
-              value: unix://var/lib/kubelet/plugins/disk.hwameistor.io/csi.sock
-            - name: NAMESPACE
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-            - name: WATCH_NAMESPACE
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-            - name: POD_NAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.name
-            - name: NODENAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: spec.nodeName
-            - name: OPERATOR_NAME
-              value: local-disk-manager
-          resources: {}
-          volumeMounts:
-            - name: udev
-              mountPath: /run/udev
-            - name: procmount
-              readOnly: true
-              mountPath: /host/proc
-            - name: devmount
-              mountPath: /dev
-            - name: registration-dir
-              mountPath: /var/lib/kubelet/plugins_registry
-            - name: plugin-dir
-              mountPath: /var/lib/kubelet/plugins
-              mountPropagation: Bidirectional
-            - name: pods-mount-dir
-              mountPath: /var/lib/kubelet/pods
-              mountPropagation: Bidirectional
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-          securityContext:
-            privileged: true
-      restartPolicy: Always
-      terminationGracePeriodSeconds: 30
-      dnsPolicy: ClusterFirst
-      serviceAccountName: hwameistor-admin
-      serviceAccount: hwameistor-admin
-      hostNetwork: true
-      hostPID: true
-      securityContext: {}
-      schedulerName: default-scheduler
-      tolerations:
-        - key: CriticalAddonsOnly
-          operator: Exists
-        - key: node.kubernetes.io/not-ready
-          operator: Exists
-          effect: NoSchedule
-        - key: node-role.kubernetes.io/master
-          operator: Exists
-          effect: NoSchedule
-        - key: node-role.kubernetes.io/control-plane
-          operator: Exists
-          effect: NoSchedule
-        - key: node.cloudprovider.kubernetes.io/uninitialized
-          operator: Exists
-          effect: NoSchedule
-  updateStrategy:
-    type: RollingUpdate
-    rollingUpdate:
-      maxUnavailable: 1
-      maxSurge: 0
-  revisionHistoryLimit: 10
-status:
-  currentNumberScheduled: 4
-  numberMisscheduled: 0
-  desiredNumberScheduled: 4
-  numberReady: 4
-  observedGeneration: 1
-  updatedNumberScheduled: 4
-  numberAvailable: 4
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/create-deployment.html b/site/end-user/kpanda/workloads/create-deployment.html deleted file mode 100644 index 89fd324..0000000 --- a/site/end-user/kpanda/workloads/create-deployment.html +++ /dev/null @@ -1,1032 +0,0 @@ - - - - - - - - - - - - - - -创建 Deployment - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建无状态负载(Deployment)

-

本文介绍如何通过镜像和 YAML 文件两种方式创建无状态负载。

-

无状态负载(Deployment)是 Kubernetes 中的一种常见资源,主要为 PodReplicaSet 提供声明式更新,支持弹性伸缩、滚动升级、版本回退等功能。在 Deployment 中声明期望的 Pod 状态,Deployment Controller 会通过 ReplicaSet 修改当前状态,使其达到预先声明的期望状态。Deployment 是无状态的,不支持数据持久化,适用于部署无状态的、不需要保存数据、随时可以重启回滚的应用。

-

通过算丰 AI 算力平台的容器管理模块,可以基于相应的角色权限轻松管理多云多集群上的工作负载,包括对无状态负载的创建、更新、删除、弹性扩缩、重启、版本回退等全生命周期管理。

-

前提条件

-

在使用镜像创建无状态负载之前,需要满足以下前提条件:

-
    -
  • -

    在容器管理模块中接入 Kubernetes 集群或者管理员已为用户创建了集群,且能够访问集群的 UI 界面。

    -
  • -
  • -

    创建一个命名空间用户

    -
  • -
  • -

    当前操作用户应具有 NS Editor 或更高权限,详情可参考命名空间授权

    -
  • -
  • -

    单个实例中有多个容器时,请确保容器使用的端口不冲突,否则部署会失效。

    -
  • -
-

镜像创建

-

参考以下步骤,使用镜像创建一个无状态负载。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 无状态负载 ,然后点击页面右上角的 镜像创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    依次填写基本信息容器配置服务配置高级配置后,在页面右下角点击 确定 完成创建。

    -

    系统将自动返回 无状态负载 列表。点击列表右侧的 ,可以对负载执行执行更新、删除、弹性扩缩、重启、版本回退等操作。如果负载状态出现异常,请查看具体异常信息,可参考工作负载状态

    -

    操作菜单

    -
  6. -
-

基本信息

-
    -
  • 负载名称:最多包含 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 deployment-01。同一命名空间内同一类型工作负载的名称不得重复,而且负载名称在工作负载创建好之后不可更改。
  • -
  • 命名空间:选择将新建的负载部署在哪个命名空间,默认使用 default 命名空间。找不到所需的命名空间时可以根据页面提示去创建新的命名空间
  • -
  • 实例数:输入负载的 Pod 实例数量,默认创建 1 个 Pod 实例。
  • -
  • -

    描述:输入负载的描述信息,内容自定义。字符数不超过 512。

    -

    基本信息

    -
  • -
-

容器配置

-

容器配置分为基本信息、生命周期、健康检查、环境变量、数据存储、安全设置六部分,点击下方的相应页签可查看各部分的配置要求。

-
-

容器配置仅针对单个容器进行配置,如需在一个容器组中添加多个容器,可点击右侧的 + 添加多个容器。

-
-
-
-
-

在配置容器相关参数时,必须正确填写容器的名称、镜像参数,否则将无法进入下一步。参考以下要求填写配置后,点击 确认

-

基本信息

-
    -
  • 容器类型:默认为工作容器。有关初始化容器,参见 k8s 官方文档
  • -
  • 容器名称:最多包含 63 个字符,支持小写字母、数字及分隔符(“-”)。必须以小写字母或数字开头及结尾,例如 nginx-01。
  • -
  • 镜像:
      -
    • 容器镜像:从列表中选择一个合适的镜像。输入镜像名称时,默认从官方的 DockerHub 拉取镜像。 - 安装算丰 AI 算力平台的镜像仓库模块后,可以点击右侧的 选择镜像 按钮来选择镜像。
    • -
    • 镜像版本:从下拉列表选择一个合适的版本。
    • -
    • 镜像拉取策略:勾选 总是拉取镜像 后,负载每次重启/升级时都会从仓库重新拉取镜像。 - 如果不勾选,则只拉取本地镜像,只有当镜像在本地不存在时才从镜像仓库重新拉取。 - 更多详情可参考镜像拉取策略
    • -
    • 镜像仓库密钥:可选。如果目标仓库需要 Secret 才能访问,需要先去创建一个密钥
    • -
    -
  • -
  • 特权容器:容器默认不可以访问宿主机上的任何设备,开启特权容器后,容器即可访问宿主机上的所有设备,享有宿主机上的运行进程的所有权限。
  • -
  • CPU/内存配额:CPU/内存资源的请求值(需要使用的最小资源)和限制值(允许使用的最大资源)。请根据需要为容器配置资源,避免资源浪费和因容器资源超额导致系统故障。默认值如图所示。
  • -
  • GPU 配置:为容器配置 GPU 用量, 仅支持输入正整数。
      -
    • 整卡模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量。配置后,容器将占用整张物理 GPU卡。同时物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      -
    • -
    • 虚拟化模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量, 物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      • GPU 算力:每张物理 GPU 卡上需要使用的算力百分比,最多为100%。
      • -
      • 显存:每张物理卡上需要使用的显存数量。
      • -
      • 调度策略(Binpack / Spread):支持基于 GPU 卡和基于节点的两种维度的调度策略。Binpack 是集中式调度策略,优先将容器调度到同一个节点的同一张 GPU 卡上;Spread 是分散式调度策略,优先将容器调度到不同节点的不同 GPU 卡上,根据实际场景可组合使用。(当工作负载级别的 Binpack / Spread 调度策略与集群级别的 Binpack / Spread 调度策略冲突时,系统优先使用工作负载级别的调度策略)。
      • -
      • 任务优先级:GPU 算力会优先供给高优先级任务使用,普通任务会减少甚至暂停使用 GPU 算力,直到高优先级任务结束,普通任务会重新继续使用 GPU 算力,常用于在离线混部场景。
      • -
      • 指定型号:将工作负载调度到指定型号的 GPU 卡上,适用于对 GPU 型号有特殊要求的场景。
      • -
      -
    • -
    • Mig 模式
        -
      • 规格:切分后的物理 GPU 卡规格。
      • -
      • 数量:使用该规格的数量。
      • -
      -
    • -
    -
  • -
-
-

设置 GPU 之前,需要管理员预先在集群上安装 GPU Operatornvidia-vgpu(仅 vGPU 模式需要安装),并在集群设置中开启 GPU 特性。

-
-
-
-

设置容器启动时、启动后、停止前需要执行的命令。详情可参考容器生命周期配置

-

生命周期

-
-
-

用于判断容器和应用的健康状态,有助于提高应用的可用性。详情可参考容器健康检查配置

-

健康检查

-
-
-

配置 Pod 内的容器参数,为 Pod 添加环境变量或传递配置等。详情可参考容器环境变量配置

-

环境变量

-
-
-

配置容器挂载数据卷和数据持久化的设置。详情可参考容器数据存储配置

-

数据存储

-
-
-

通过 Linux 内置的账号权限隔离机制来对容器进行安全隔离。您可以通过使用不同权限的账号 UID(数字身份标记)来限制容器的权限。例如,输入 0 表示使用 root 账号的权限。

-

安全设置

-
-
-
-

服务配置

-

为无状态负载配置服务(Service),使无状态负载能够被外部访问。

-
    -
  1. -

    点击 创建服务 按钮。

    -

    服务配置

    -
  2. -
  3. -

    参考创建服务,配置服务参数。

    -

    创建服务

    -
  4. -
  5. -

    点击 确定 ,点击 下一步

    -
  6. -
-

高级配置

-

高级配置包括负载的网络配置、升级策略、调度策略、标签与注解四部分,可点击下方的页签查看各部分的配置要求。

-
-
-
-
    -
  • -

    如在集群中部署了 SpiderPool 和 Multus 组件,则可以在网络配置中配置容器网卡。

    -
  • -
  • -

    DNS 配置:应用在某些场景下会出现冗余的 DNS 查询。Kubernetes 为应用提供了与 DNS 相关的配置选项,能够在某些场景下有效地减少冗余的 DNS 查询,提升业务并发量。

    -
  • -
  • -

    DNS 策略

    -
      -
    • Default:使容器使用 kubelet 的 --resolv-conf 参数指向的域名解析文件。该配置只能解析注册到互联网上的外部域名,无法解析集群内部域名,且不存在无效的 DNS 查询。
    • -
    • ClusterFirstWithHostNet:应用对接主机的域名文件。
    • -
    • ClusterFirst:应用对接 Kube-DNS/CoreDNS。
    • -
    • None:Kubernetes v1.9(Beta in v1.10)中引入的新选项值。设置为 None 之后,必须设置 dnsConfig,此时容器的域名解析文件将完全通过 dnsConfig 的配置来生成。
    • -
    -
  • -
  • -

    域名服务器:填写域名服务器的地址,例如 10.6.175.20

    -
  • -
  • 搜索域:域名查询时的 DNS 搜索域列表。指定后,提供的搜索域列表将合并到基于 dnsPolicy 生成的域名解析文件的 search 字段中,并删除重复的域名。Kubernetes 最多允许 6 个搜索域。
  • -
  • Options:DNS 的配置选项,其中每个对象可以具有 name 属性(必需)和 value 属性(可选)。该字段中的内容将合并到基于 dnsPolicy 生成的域名解析文件的 options 字段中,dnsConfig 的 options 的某些选项如果与基于 dnsPolicy 生成的域名解析文件的选项冲突,则会被 dnsConfig 所覆盖。
  • -
  • -

    主机别名:为主机设置的别名。

    -

    DNS 配置

    -
  • -
-
-
-
    -
  • 升级方式: 滚动升级 指逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新老的实例上,因此业务不会中断。 重建升级 指先删除老版本的负载实例,再安装指定的新版本,升级过程中业务会中断。
  • -
  • 最大不可用:指定负载更新过程中不可用 Pod 的最大值或比率,默认 25%。如果等于实例数有服务中断的风险。
  • -
  • 最大峰值:更新 Pod 的过程中 Pod 总数超过 Pod 期望副本数部分的最大值或比率。默认 25%。
  • -
  • 最大保留版本数:设置版本回滚时保留的旧版本数量。默认 10。
  • -
  • Pod 可用最短时间:Pod 就绪的最短时间,只有超出这个时间 Pod 才被认为可用,默认 0 秒。
  • -
  • 升级最大持续时间:如果超过所设置的时间仍未部署成功,则将该负载标记为失败。默认 600 秒。
  • -
  • -

    缩容时间窗:负载停止前命令的执行时间窗(0-9,999秒),默认 30 秒。

    -

    升级策略

    -
  • -
-
-
-
    -
  • 容忍时间:负载实例所在的节点不可用时,将负载实例重新调度到其它可用节点的时间,默认为 300 秒。
  • -
  • 节点亲和性:根据节点上的标签来约束 Pod 可以调度到哪些节点上。
  • -
  • 工作负载亲和性:基于已经在节点上运行的 Pod 的标签来约束 Pod 可以调度到哪些节点。
  • -
  • 工作负载反亲和性:基于已经在节点上运行的 Pod 的标签来约束 Pod 不可以调度到哪些节点。
  • -
-
-

具体详情请参考调度策略

-
-

调度策略

-
-
-

可以点击 添加 按钮为工作负载和容器组添加标签和注解。

-

标签与注解

-
-
-
-

YAML 创建

-

除了通过镜像方式外,还可以通过 YAML 文件更快速地创建创建无状态负载。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 无状态负载 ,然后点击页面右上角的 YAML 创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    输入或粘贴事先准备好的 YAML 文件,点击 确定 即可完成创建。

    -

    工作负载

    -
  6. -
-
-点击查看创建无状态负载的 YAML 示例 -
apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: nginx-deployment
-spec:
-  selector:
-    matchLabels:
-      app: nginx
-  replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
-  template:
-    metadata:
-      labels:
-        app: nginx
-    spec:
-      containers:
-      - name: nginx
-        image: nginx:1.14.2
-        ports:
-        - containerPort: 80
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/create-job.html b/site/end-user/kpanda/workloads/create-job.html deleted file mode 100644 index a00111b..0000000 --- a/site/end-user/kpanda/workloads/create-job.html +++ /dev/null @@ -1,991 +0,0 @@ - - - - - - - - - - - - - - -创建 Job - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建任务(Job)

-

本文介绍如何通过镜像和 YAML 文件两种方式创建任务(Job)。

-

任务(Job)适用于执行一次性任务。Job 会创建一个或多个 Pod,Job 会一直重新尝试执行 Pod,直到成功终止的 Pod 达到一定数量。成功终止的 Pod 达到指定的数量后,Job 也随之结束。删除 Job 时会一同清除该 Job 创建的所有 Pod。暂停 Job 时删除该 Job 中的所有活跃 Pod,直到 Job 被继续执行。有关任务(Job)的更多介绍,可参考Job

-

前提条件

-
    -
  • -

    在容器管理模块中接入 Kubernetes 集群或者管理员已为用户创建了集群,且能够访问集群的 UI 界面。

    -
  • -
  • -

    创建一个命名空间用户

    -
  • -
  • -

    当前操作用户应具有 NS Editor 或更高权限,详情可参考命名空间授权

    -
  • -
  • -

    单个实例中有多个容器时,请确保容器使用的端口不冲突,否则部署会失效。

    -
  • -
-

镜像创建

-

参考以下步骤,使用镜像创建一个任务。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 任务 ,然后点击页面右上角的 镜像创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    依次填写基本信息容器配置、服务配置、高级配置后,在页面右下角点击 确定 完成创建。

    -

    系统将自动返回 任务 列表。点击列表右侧的 ,可以对任务执行执行更新、删除、重启等操作。

    -

    操作菜单

    -
  6. -
-

基本信息

-

创建任务 页面中,根据下表输入基本信息后,点击 下一步

-

创建任务

-
    -
  • 负载名称:最多包含 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾。同一命名空间内同一类型工作负载的名称不得重复,而且负载名称在工作负载创建好之后不可更改。
  • -
  • 命名空间:选择将新建的任务部署在哪个命名空间,默认使用 default 命名空间。找不到所需的命名空间时可以根据页面提示去创建新的命名空间
  • -
  • 实例数:输入工作负载的 Pod 实例数量。默认创建 1 个 Pod 实例。
  • -
  • 描述:输入工作负载的描述信息,内容自定义。字符数量应不超过 512 个。
  • -
-

容器配置

-

容器配置分为基本信息、生命周期、健康检查、环境变量、数据存储、安全设置六部分,点击下方的相应页签可查看各部分的配置要求。

-
-

容器配置仅针对单个容器进行配置,如需在一个容器组中添加多个容器,可点击右侧的 + 添加多个容器。

-
-
-
-
-

在配置容器相关参数时,必须正确填写容器的名称、镜像参数,否则将无法进入下一步。参考以下要求填写配置后,点击 确认

-

基本信息

-
    -
  • 容器类型:默认为工作容器。有关初始化容器,参见 k8s 官方文档
  • -
  • 容器名称:最多包含 63 个字符,支持小写字母、数字及分隔符(“-”)。必须以小写字母或数字开头及结尾,例如 nginx-01。
  • -
  • 镜像:
      -
    • 容器镜像:从列表中选择一个合适的镜像。输入镜像名称时,默认从官方的 DockerHub 拉取镜像。 - 接入算丰 AI 算力平台的镜像仓库模块后,可以点击右侧的 选择镜像 按钮来选择镜像。
    • -
    • 镜像版本:从下拉列表选择一个合适的版本。
    • -
    • 镜像拉取策略:勾选 总是拉取镜像 后,负载每次重启/升级时都会从仓库重新拉取镜像。 - 如果不勾选,则只拉取本地镜像,只有当镜像在本地不存在时才从镜像仓库重新拉取。 - 更多详情可参考镜像拉取策略
    • -
    • 镜像仓库密钥:可选。如果目标仓库需要 Secret 才能访问,需要先去创建一个密钥
    • -
    -
  • -
  • 特权容器:容器默认不可以访问宿主机上的任何设备,开启特权容器后,容器即可访问宿主机上的所有设备,享有宿主机上的运行进程的所有权限。
  • -
  • CPU/内存配额:CPU/内存资源的请求值(需要使用的最小资源)和限制值(允许使用的最大资源)。请根据需要为容器配置资源,避免资源浪费和因容器资源超额导致系统故障。默认值如图所示。
  • -
  • GPU 配置:为容器配置 GPU 用量, 仅支持输入正整数。
      -
    • 整卡模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量。配置后,容器将占用整张物理 GPU卡。同时物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      -
    • -
    • 虚拟化模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量, 物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      • GPU 算力:每张物理 GPU 卡上需要使用的算力百分比,最多为100%。
      • -
      • 显存:每张物理卡上需要使用的显存数量。
      • -
      • 调度策略(Binpack / Spread):支持基于 GPU 卡和基于节点的两种维度的调度策略。Binpack 是集中式调度策略,优先将容器调度到同一个节点的同一张 GPU 卡上;Spread 是分散式调度策略,优先将容器调度到不同节点的不同 GPU 卡上,根据实际场景可组合使用。(当工作负载级别的 Binpack / Spread 调度策略与集群级别的 Binpack / Spread 调度策略冲突时,系统优先使用工作负载级别的调度策略)。
      • -
      • 任务优先级:GPU 算力会优先供给高优先级任务使用,普通任务会减少甚至暂停使用 GPU 算力,直到高优先级任务结束,普通任务会重新继续使用 GPU 算力,常用于在离线混部场景。
      • -
      • 指定型号:将工作负载调度到指定型号的 GPU 卡上,适用于对 GPU 型号有特殊要求的场景。
      • -
      -
    • -
    • Mig 模式
        -
      • 规格:切分后的物理 GPU 卡规格。
      • -
      • 数量:使用该规格的数量。
      • -
      -
    • -
    -
  • -
-
-

设置 GPU 之前,需要管理员预先在集群上安装 GPU Operatornvidia-vgpu(仅 vGPU 模式需要安装),并在集群设置中开启 GPU 特性。

-
-
-
-

设置容器启动时、启动后、停止前需要执行的命令。详情可参考容器生命周期配置

-

生命周期

-
-
-

用于判断容器和应用的健康状态,有助于提高应用的可用性。详情可参考容器健康检查配置

-

健康检查

-
-
-

配置 Pod 内的容器参数,为 Pod 添加环境变量或传递配置等。详情可参考容器环境变量配置

-

环境变量

-
-
-

配置容器挂载数据卷和数据持久化的设置。详情可参考容器数据存储配置

-

数据存储

-
-
-

通过 Linux 内置的账号权限隔离机制来对容器进行安全隔离。您可以通过使用不同权限的账号 UID(数字身份标记)来限制容器的权限。例如,输入 0 表示使用 root 账号的权限。

-

安全设置

-
-
-
-

高级配置

-

高级配置包括任务设置、标签与注解两部分。

-
-
-
-

任务设置

-
    -
  • 并行数:任务执行过程中允许同时创建的最大 Pod 数,并行数应不大于 Pod 总数。默认为 1。
  • -
  • 超时时间:超出该时间时,任务会被标识为执行失败,任务下的所有 Pod 都会被删除。为空时表示不设置超时时间。
  • -
  • 重启策略:设置失败时是否重启 Pod。
  • -
-
-
-

可以点击 添加 按钮为工作负载实例 Pod 添加标签和注解。

-

标签与注解

-
-
-
-

YAML 创建

-

除了通过镜像方式外,还可以通过 YAML 文件更快速地创建创建任务。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 任务 ,然后点击页面右上角的 YAML 创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    输入或粘贴事先准备好的 YAML 文件,点击 确定 即可完成创建。

    -

    工作负载

    -
  6. -
-
-点击查看创建任务的 YAML 示例 -
kind: Job
-apiVersion: batch/v1
-metadata:
-  name: demo
-  namespace: default
-  uid: a9708239-0358-4aa1-87d3-a092c080836e
-  resourceVersion: '92751876'
-  generation: 1
-  creationTimestamp: '2022-12-26T10:52:22Z'
-  labels:
-    app: demo
-    controller-uid: a9708239-0358-4aa1-87d3-a092c080836e
-    job-name: demo
-  annotations:
-    revisions: >-
-      {"1":{"status":"running","uid":"a9708239-0358-4aa1-87d3-a092c080836e","start-time":"2022-12-26T10:52:22Z","completion-time":"0001-01-01T00:00:00Z"}}
-spec:
-  parallelism: 1
-  backoffLimit: 6
-  selector:
-    matchLabels:
-      controller-uid: a9708239-0358-4aa1-87d3-a092c080836e
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: demo
-        controller-uid: a9708239-0358-4aa1-87d3-a092c080836e
-        job-name: demo
-    spec:
-      containers:
-        - name: container-4
-          image: nginx
-          resources:
-            limits:
-              cpu: 250m
-              memory: 512Mi
-            requests:
-              cpu: 250m
-              memory: 512Mi
-          lifecycle: {}
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-          securityContext:
-            privileged: false
-      restartPolicy: Never
-      terminationGracePeriodSeconds: 30
-      dnsPolicy: ClusterFirst
-      securityContext: {}
-      schedulerName: default-scheduler
-  completionMode: NonIndexed
-  suspend: false
-status:
-  startTime: '2022-12-26T10:52:22Z'
-  active: 1
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/create-statefulset.html b/site/end-user/kpanda/workloads/create-statefulset.html deleted file mode 100644 index 5c4f662..0000000 --- a/site/end-user/kpanda/workloads/create-statefulset.html +++ /dev/null @@ -1,1481 +0,0 @@ - - - - - - - - - - - - - - -创建 StatefulSet - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

创建有状态负载(StatefulSet)

-

本文介绍如何通过镜像和 YAML 文件两种方式创建有状态负载(StatefulSet)。

-

有状态负载(StatefulSet)是 Kubernetes 中的一种常见资源,和无状态负载(Deployment)类似,主要用于管理 Pod 集合的部署和伸缩。二者的主要区别在于,Deployment 是无状态的,不保存数据,而 StatefulSet 是有状态的,主要用于管理有状态应用。此外,StatefulSet 中的 Pod 具有永久不变的 ID,便于在匹配存储卷时识别对应的 Pod。

-

通过算丰 AI 算力平台的容器管理模块,可以基于相应的角色权限轻松管理多云多集群上的工作负载,包括对有状态工作负载的创建、更新、删除、弹性扩缩、重启、版本回退等全生命周期管理。

-

前提条件

-

在使用镜像创建有状态负载之前,需要满足以下前提条件:

-
    -
  • -

    在容器管理模块中接入 Kubernetes 集群或者管理员已为用户创建了集群,且能够访问集群的 UI 界面。

    -
  • -
  • -

    创建一个命名空间用户

    -
  • -
  • -

    当前操作用户应具有 NS Editor 或更高权限,详情可参考命名空间授权

    -
  • -
  • -

    单个实例中有多个容器时,请确保容器使用的端口不冲突,否则部署会失效。

    -
  • -
-

镜像创建

-

参考以下步骤,使用镜像创建一个有状态负载。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情

    -

    集群详情

    -
  2. -
  3. -

    点击左侧导航栏的 工作负载 -> 有状态负载 ,然后点击右上角 镜像创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    依次填写基本信息容器配置服务配置高级配置后,在页面右下角点击 确定 完成创建。

    -

    系统将自动返回 有状态工作负载 列表,等待工作负载状态变为 运行中 。如果工作负载状态出现异常,请查看具体异常信息,可参考工作负载状态

    -

    点击新建工作负载列右侧的 ,可以对工作负载执行执行更新、删除、弹性扩缩、重启、版本回退等操作。

    -

    操作菜单

    -
  6. -
-

基本信息

-
    -
  • 负载名称:最多包含 63 个字符,只能包含小写字母、数字及分隔符(“-”),且必须以小写字母或数字开头及结尾,例如 deployment-01。同一命名空间内同一类型工作负载的名称不得重复,而且负载名称在工作负载创建好之后不可更改。
  • -
  • 命名空间:选择将新建的负载部署在哪个命名空间,默认使用 default 命名空间。找不到所需的命名空间时可以根据页面提示去创建新的命名空间
  • -
  • 实例数:输入负载的 Pod 实例数量,默认创建 1 个 Pod 实例。
  • -
  • -

    描述:输入负载的描述信息,内容自定义。字符数不超过 512。

    -

    基本信息

    -
  • -
-

容器配置

-

容器配置分为基本信息、生命周期、健康检查、环境变量、数据存储、安全设置六部分,点击下方的相应页签可查看各部分的配置要求。

-
-

容器配置仅针对单个容器进行配置,如需在一个容器组中添加多个容器,可点击右侧的 + 添加多个容器。

-
-
-
-
-

在配置容器相关参数时,必须正确填写容器的名称、镜像参数,否则将无法进入下一步。参考以下要求填写配置后,点击 确认

-

基本信息

-
    -
  • 容器类型:默认为工作容器。有关初始化容器,参见 k8s 官方文档
  • -
  • 容器名称:最多包含 63 个字符,支持小写字母、数字及分隔符(“-”)。必须以小写字母或数字开头及结尾,例如 nginx-01。
  • -
  • 镜像:
      -
    • 容器镜像:从列表中选择一个合适的镜像。输入镜像名称时,默认从官方的 DockerHub 拉取镜像。 - 接入算丰 AI 算力平台的镜像仓库模块后,可以点击右侧的 选择镜像 按钮来选择镜像。
    • -
    • 镜像版本:从下拉列表选择一个合适的版本。
    • -
    • 镜像拉取策略:勾选 总是拉取镜像 后,负载每次重启/升级时都会从仓库重新拉取镜像。 - 如果不勾选,则只拉取本地镜像,只有当镜像在本地不存在时才从镜像仓库重新拉取。 - 更多详情可参考镜像拉取策略
    • -
    • 镜像仓库密钥:可选。如果目标仓库需要 Secret 才能访问,需要先去创建一个密钥
    • -
    -
  • -
  • 特权容器:容器默认不可以访问宿主机上的任何设备,开启特权容器后,容器即可访问宿主机上的所有设备,享有宿主机上的运行进程的所有权限。
  • -
  • CPU/内存配额:CPU/内存资源的请求值(需要使用的最小资源)和限制值(允许使用的最大资源)。请根据需要为容器配置资源,避免资源浪费和因容器资源超额导致系统故障。默认值如图所示。
  • -
  • GPU 配置:为容器配置 GPU 用量, 仅支持输入正整数。
      -
    • 整卡模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量。配置后,容器将占用整张物理 GPU卡。同时物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      -
    • -
    • 虚拟化模式:
        -
      • 物理卡数量:容器能够使用的物理 GPU 卡数量, 物理卡数量需要 ≤ 单节点插入的最大 GPU 卡数。
      • -
      • GPU 算力:每张物理 GPU 卡上需要使用的算力百分比,最多为100%。
      • -
      • 显存:每张物理卡上需要使用的显存数量。
      • -
      • 调度策略(Binpack / Spread):支持基于 GPU 卡和基于节点的两种维度的调度策略。Binpack 是集中式调度策略,优先将容器调度到同一个节点的同一张 GPU 卡上;Spread 是分散式调度策略,优先将容器调度到不同节点的不同 GPU 卡上,根据实际场景可组合使用。(当工作负载级别的 Binpack / Spread 调度策略与集群级别的 Binpack / Spread 调度策略冲突时,系统优先使用工作负载级别的调度策略)。
      • -
      • 任务优先级:GPU 算力会优先供给高优先级任务使用,普通任务会减少甚至暂停使用 GPU 算力,直到高优先级任务结束,普通任务会重新继续使用 GPU 算力,常用于在离线混部场景。
      • -
      • 指定型号:将工作负载调度到指定型号的 GPU 卡上,适用于对 GPU 型号有特殊要求的场景。
      • -
      -
    • -
    • Mig 模式
        -
      • 规格:切分后的物理 GPU 卡规格。
      • -
      • 数量:使用该规格的数量。
      • -
      -
    • -
    -
  • -
-
-

设置 GPU 之前,需要管理员预先在集群上安装 GPU Operatornvidia-vgpu(仅 vGPU 模式需要安装),并在集群设置中开启 GPU 特性。

-
-
-
-

设置容器启动时、启动后、停止前需要执行的命令。详情可参考容器生命周期配置

-

生命周期

-
-
-

用于判断容器和应用的健康状态。有助于提高应用的可用性。详情可参考容器健康检查配置

-

健康检查

-
-
-

配置 Pod 内的容器参数,为 Pod 添加环境变量或传递配置等。详情可参考容器环境变量配置

-

环境变量

-
-
-

配置容器挂载数据卷和数据持久化的设置。详情可参考容器数据存储配置

-

数据存储

-
-
-

通过 Linux 内置的账号权限隔离机制来对容器进行安全隔离。您可以通过使用不同权限的账号 UID(数字身份标记)来限制容器的权限。例如,输入 0 表示使用 root 账号的权限。

-

安全设置

-
-
-
-

服务配置

-

为有状态负载配置服务(Service),使有状态负载能够被外部访问。

-
    -
  1. -

    点击 创建服务 按钮。

    -

    服务配置

    -
  2. -
  3. -

    参考创建服务,配置服务参数。

    -

    创建服务

    -
  4. -
  5. -

    点击 确定 ,点击 下一步

    -
  6. -
-

高级配置

-

高级配置包括负载的网络配置、升级策略、调度策略、标签与注解四部分,可点击下方的页签查看各部分的配置要求。

-
-
-
-
    -
  • -

    如在集群中部署了 SpiderPool 和 Multus 组件,则可以在网络配置中配置容器网卡。

    -
  • -
  • -

    DNS 配置:应用在某些场景下会出现冗余的 DNS 查询。Kubernetes 为应用提供了与 DNS 相关的配置选项,能够在某些场景下有效地减少冗余的 DNS 查询,提升业务并发量。

    -
  • -
  • -

    DNS 策略

    -
      -
    • Default:使容器使用 kubelet 的 --resolv-conf 参数指向的域名解析文件。该配置只能解析注册到互联网上的外部域名,无法解析集群内部域名,且不存在无效的 DNS 查询。
    • -
    • ClusterFirstWithHostNet:应用对接主机的域名文件。
    • -
    • ClusterFirst:应用对接 Kube-DNS/CoreDNS。
    • -
    • None:Kubernetes v1.9(Beta in v1.10)中引入的新选项值。设置为 None 之后,必须设置 dnsConfig,此时容器的域名解析文件将完全通过 dnsConfig 的配置来生成。
    • -
    -
  • -
  • -

    域名服务器:填写域名服务器的地址,例如 10.6.175.20

    -
  • -
  • 搜索域:域名查询时的 DNS 搜索域列表。指定后,提供的搜索域列表将合并到基于 dnsPolicy 生成的域名解析文件的 search 字段中,并删除重复的域名。Kubernetes 最多允许 6 个搜索域。
  • -
  • Options:DNS 的配置选项,其中每个对象可以具有 name 属性(必需)和 value 属性(可选)。该字段中的内容将合并到基于 dnsPolicy 生成的域名解析文件的 options 字段中,dnsConfig 的 options 的某些选项如果与基于 dnsPolicy 生成的域名解析文件的选项冲突,则会被 dnsConfig 所覆盖。
  • -
  • -

    主机别名:为主机设置的别名。

    -

    DNS 配置

    -
  • -
-
-
-
    -
  • 升级方式: 滚动升级 指逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新老的实例上,因此业务不会中断。 重建升级 指先删除老版本的负载实例,再安装指定的新版本,升级过程中业务会中断。
  • -
  • 最大保留版本数:设置版本回滚时保留的旧版本数量。默认 10。
  • -
  • -

    缩容时间窗:负载停止前命令的执行时间窗(0-9,999秒),默认 30 秒。

    -

    升级策略

    -
  • -
-
-
-

Kubernetes v1.7 及其之后的版本可以通过 .spec.podManagementPolicy 设置 Pod 的管理策略,支持以下两种方式:

-
    -
  • -

    按序策略(OrderedReady) :默认的 Pod 管理策略,表示按顺序部署 Pod,只有前一个 Pod 部署 成功完成后,有状态负载才会开始部署下一个 Pod。删除 Pod 时则采用逆序,最后创建的最先被删除。

    -
  • -
  • -

    并行策略(Parallel) :并行创建或删除容器,和 Deployment 类型的 Pod 一样。StatefulSet 控制器并行地启动或终止所有的容器。启动或者终止其他 Pod 前,无需等待 Pod 进入 Running 和 ready 或者完全停止状态。 这个选项只会影响扩缩操作的行为,不影响更新时的顺序。

    -

    容器管理策略

    -
  • -
-
-
-
    -
  • 容忍时间:负载实例所在的节点不可用时,将负载实例重新调度到其它可用节点的时间,默认为 300 秒。
  • -
  • 节点亲和性:根据节点上的标签来约束 Pod 可以调度到哪些节点上。
  • -
  • 工作负载亲和性:基于已经在节点上运行的 Pod 的标签来约束 Pod 可以调度到哪些节点。
  • -
  • 工作负载反亲和性:基于已经在节点上运行的 Pod 的标签来约束 Pod 不可以调度到哪些节点。
  • -
  • 拓扑域:即 topologyKey,用于指定可以调度的一组节点。例如, kubernetes.io/os 表示只要某个操作系统的节点满足 labelSelector 的条件就可以调度到该节点。
  • -
-
-

具体详情请参考调度策略

-
-
![调度策略](../../../images/deploy15_1.png)
-
-
-
-

可以点击 添加 按钮为工作负载和容器组添加标签和注解。

-

标签与注解

-
-
-
-

YAML 创建

-

除了通过镜像方式外,还可以通过 YAML 文件更快速地创建创建有状态负载。

-
    -
  1. -

    点击左侧导航栏上的 集群列表 ,然后点击目标集群的名称,进入 集群详情 页面。

    -

    集群详情

    -
  2. -
  3. -

    在集群详情页面,点击左侧导航栏的 工作负载 -> 有状态负载 ,然后点击页面右上角的 YAML 创建 按钮。

    -

    工作负载

    -
  4. -
  5. -

    输入或粘贴事先准备好的 YAML 文件,点击 确定 即可完成创建。

    -

    工作负载

    -
  6. -
-
-点击查看创建有状态负载的 YAML 示例 -
kind: StatefulSet
-apiVersion: apps/v1
-metadata:
-  name: test-mysql-123-mysql
-  namespace: default
-  uid: d3f45527-a0ab-4b22-9013-5842a06f4e0e
-  resourceVersion: '20504385'
-  generation: 1
-  creationTimestamp: '2022-09-22T09:34:10Z'
-  ownerReferences:
-    - apiVersion: mysql.presslabs.org/v1alpha1
-      kind: MysqlCluster
-      name: test-mysql-123
-      uid: 5e877cc3-5167-49da-904e-820940cf1a6d
-      controller: true
-      blockOwnerDeletion: true
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app.kubernetes.io/managed-by: mysql.presslabs.org
-      app.kubernetes.io/name: mysql
-      mysql.presslabs.org/cluster: test-mysql-123
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app.kubernetes.io/component: database
-        app.kubernetes.io/instance: test-mysql-123
-        app.kubernetes.io/managed-by: mysql.presslabs.org
-        app.kubernetes.io/name: mysql
-        app.kubernetes.io/version: 5.7.31
-        mysql.presslabs.org/cluster: test-mysql-123
-      annotations:
-        config_rev: '13941099'
-        prometheus.io/port: '9125'
-        prometheus.io/scrape: 'true'
-        secret_rev: '13941101'
-    spec:
-      volumes:
-        - name: conf
-          emptyDir: {}
-        - name: init-scripts
-          emptyDir: {}
-        - name: config-map
-          configMap:
-            name: test-mysql-123-mysql
-            defaultMode: 420
-        - name: data
-          persistentVolumeClaim:
-            claimName: data
-      initContainers:
-        - name: init
-          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1
-          args:
-            - clone-and-init
-          envFrom:
-            - secretRef:
-                name: test-mysql-123-mysql-operated
-          env:
-            - name: MY_NAMESPACE
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-            - name: MY_POD_NAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.name
-            - name: MY_POD_IP
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: status.podIP
-            - name: MY_SERVICE_NAME
-              value: mysql
-            - name: MY_CLUSTER_NAME
-              value: test-mysql-123
-            - name: MY_FQDN
-              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)
-            - name: MY_MYSQL_VERSION
-              value: 5.7.31
-            - name: BACKUP_USER
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-mysql-operated
-                  key: BACKUP_USER
-                  optional: true
-            - name: BACKUP_PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-mysql-operated
-                  key: BACKUP_PASSWORD
-                  optional: true
-          resources: {}
-          volumeMounts:
-            - name: conf
-              mountPath: /etc/mysql
-            - name: config-map
-              mountPath: /mnt/conf
-            - name: data
-              mountPath: /var/lib/mysql
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-      containers:
-        - name: mysql
-          image: docker.m.daocloud.io/mysql:5.7.31
-          ports:
-            - name: mysql
-              containerPort: 3306
-              protocol: TCP
-          env:
-            - name: MY_NAMESPACE
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-            - name: MY_POD_NAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.name
-            - name: MY_POD_IP
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: status.podIP
-            - name: MY_SERVICE_NAME
-              value: mysql
-            - name: MY_CLUSTER_NAME
-              value: test-mysql-123
-            - name: MY_FQDN
-              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)
-            - name: MY_MYSQL_VERSION
-              value: 5.7.31
-            - name: ORCH_CLUSTER_ALIAS
-              value: test-mysql-123.default
-            - name: ORCH_HTTP_API
-              value: http://mysql-operator.mcamel-system/api
-            - name: MYSQL_ROOT_PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-secret
-                  key: ROOT_PASSWORD
-                  optional: false
-            - name: MYSQL_USER
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-secret
-                  key: USER
-                  optional: true
-            - name: MYSQL_PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-secret
-                  key: PASSWORD
-                  optional: true
-            - name: MYSQL_DATABASE
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-secret
-                  key: DATABASE
-                  optional: true
-          resources:
-            limits:
-              cpu: '1'
-              memory: 1Gi
-            requests:
-              cpu: 100m
-              memory: 512Mi
-          volumeMounts:
-            - name: conf
-              mountPath: /etc/mysql
-            - name: data
-              mountPath: /var/lib/mysql
-          livenessProbe:
-            exec:
-              command:
-                - mysqladmin
-                - '--defaults-file=/etc/mysql/client.conf'
-                - ping
-            initialDelaySeconds: 60
-            timeoutSeconds: 5
-            periodSeconds: 5
-            successThreshold: 1
-            failureThreshold: 3
-          readinessProbe:
-            exec:
-              command:
-                - /bin/sh
-                - '-c'
-                - >-
-                  test $(mysql --defaults-file=/etc/mysql/client.conf -NB -e
-                  'SELECT COUNT(*) FROM sys_operator.status WHERE
-                  name="configured" AND value="1"') -eq 1
-            initialDelaySeconds: 5
-            timeoutSeconds: 5
-            periodSeconds: 2
-            successThreshold: 1
-            failureThreshold: 3
-          lifecycle:
-            preStop:
-              exec:
-                command:
-                  - bash
-                  - /etc/mysql/pre-shutdown-ha.sh
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-        - name: sidecar
-          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1
-          args:
-            - config-and-serve
-          ports:
-            - name: sidecar-http
-              containerPort: 8080
-              protocol: TCP
-          envFrom:
-            - secretRef:
-                name: test-mysql-123-mysql-operated
-          env:
-            - name: MY_NAMESPACE
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-            - name: MY_POD_NAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.name
-            - name: MY_POD_IP
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: status.podIP
-            - name: MY_SERVICE_NAME
-              value: mysql
-            - name: MY_CLUSTER_NAME
-              value: test-mysql-123
-            - name: MY_FQDN
-              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)
-            - name: MY_MYSQL_VERSION
-              value: 5.7.31
-            - name: XTRABACKUP_TARGET_DIR
-              value: /tmp/xtrabackup_backupfiles/
-          resources:
-            limits:
-              cpu: '1'
-              memory: 1Gi
-            requests:
-              cpu: 10m
-              memory: 64Mi
-          volumeMounts:
-            - name: conf
-              mountPath: /etc/mysql
-            - name: data
-              mountPath: /var/lib/mysql
-          readinessProbe:
-            httpGet:
-              path: /health
-              port: 8080
-              scheme: HTTP
-            initialDelaySeconds: 30
-            timeoutSeconds: 5
-            periodSeconds: 5
-            successThreshold: 1
-            failureThreshold: 3
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-        - name: metrics-exporter
-          image: prom/mysqld-exporter:v0.13.0
-          args:
-            - '--web.listen-address=0.0.0.0:9125'
-            - '--web.telemetry-path=/metrics'
-            - '--collect.heartbeat'
-            - '--collect.heartbeat.database=sys_operator'
-          ports:
-            - name: prometheus
-              containerPort: 9125
-              protocol: TCP
-          env:
-            - name: MY_NAMESPACE
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-            - name: MY_POD_NAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.name
-            - name: MY_POD_IP
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: status.podIP
-            - name: MY_SERVICE_NAME
-              value: mysql
-            - name: MY_CLUSTER_NAME
-              value: test-mysql-123
-            - name: MY_FQDN
-              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)
-            - name: MY_MYSQL_VERSION
-              value: 5.7.31
-            - name: USER
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-mysql-operated
-                  key: METRICS_EXPORTER_USER
-                  optional: false
-            - name: PASSWORD
-              valueFrom:
-                secretKeyRef:
-                  name: test-mysql-123-mysql-operated
-                  key: METRICS_EXPORTER_PASSWORD
-                  optional: false
-            - name: DATA_SOURCE_NAME
-              value: $(USER):$(PASSWORD)@(127.0.0.1:3306)/
-          resources:
-            limits:
-              cpu: 100m
-              memory: 128Mi
-            requests:
-              cpu: 10m
-              memory: 32Mi
-          livenessProbe:
-            httpGet:
-              path: /metrics
-              port: 9125
-              scheme: HTTP
-            initialDelaySeconds: 30
-            timeoutSeconds: 30
-            periodSeconds: 30
-            successThreshold: 1
-            failureThreshold: 3
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-        - name: pt-heartbeat
-          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1
-          args:
-            - pt-heartbeat
-            - '--update'
-            - '--replace'
-            - '--check-read-only'
-            - '--create-table'
-            - '--database'
-            - sys_operator
-            - '--table'
-            - heartbeat
-            - '--utc'
-            - '--defaults-file'
-            - /etc/mysql/heartbeat.conf
-            - '--fail-successive-errors=20'
-          env:
-            - name: MY_NAMESPACE
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-            - name: MY_POD_NAME
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.name
-            - name: MY_POD_IP
-              valueFrom:
-                fieldRef:
-                  apiVersion: v1
-                  fieldPath: status.podIP
-            - name: MY_SERVICE_NAME
-              value: mysql
-            - name: MY_CLUSTER_NAME
-              value: test-mysql-123
-            - name: MY_FQDN
-              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)
-            - name: MY_MYSQL_VERSION
-              value: 5.7.31
-          resources:
-            limits:
-              cpu: 100m
-              memory: 64Mi
-            requests:
-              cpu: 10m
-              memory: 32Mi
-          volumeMounts:
-            - name: conf
-              mountPath: /etc/mysql
-          terminationMessagePath: /dev/termination-log
-          terminationMessagePolicy: File
-          imagePullPolicy: IfNotPresent
-      restartPolicy: Always
-      terminationGracePeriodSeconds: 30
-      dnsPolicy: ClusterFirst
-      securityContext:
-        runAsUser: 999
-        fsGroup: 999
-      affinity:
-        podAntiAffinity:
-          preferredDuringSchedulingIgnoredDuringExecution:
-            - weight: 100
-              podAffinityTerm:
-                labelSelector:
-                  matchLabels:
-                    app.kubernetes.io/component: database
-                    app.kubernetes.io/instance: test-mysql-123
-                    app.kubernetes.io/managed-by: mysql.presslabs.org
-                    app.kubernetes.io/name: mysql
-                    app.kubernetes.io/version: 5.7.31
-                    mysql.presslabs.org/cluster: test-mysql-123
-                topologyKey: kubernetes.io/hostname
-      schedulerName: default-scheduler
-  volumeClaimTemplates:
-    - kind: PersistentVolumeClaim
-      apiVersion: v1
-      metadata:
-        name: data
-        creationTimestamp: null
-        ownerReferences:
-          - apiVersion: mysql.presslabs.org/v1alpha1
-            kind: MysqlCluster
-            name: test-mysql-123
-            uid: 5e877cc3-5167-49da-904e-820940cf1a6d
-            controller: true
-      spec:
-        accessModes:
-          - ReadWriteOnce
-        resources:
-          limits:
-            storage: 1Gi
-          requests:
-            storage: 1Gi
-        storageClassName: local-path
-        volumeMode: Filesystem
-      status:
-        phase: Pending
-  serviceName: mysql
-  podManagementPolicy: OrderedReady
-  updateStrategy:
-    type: RollingUpdate
-    rollingUpdate:
-      partition: 0
-  revisionHistoryLimit: 10
-status:
-  observedGeneration: 1
-  replicas: 1
-  readyReplicas: 1
-  currentReplicas: 1
-  updatedReplicas: 1
-  currentRevision: test-mysql-123-mysql-6b8f5577c7
-  updateRevision: test-mysql-123-mysql-6b8f5577c7
-  collisionCount: 0
-  availableReplicas: 1
-
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/pod-config/env-variables.html b/site/end-user/kpanda/workloads/pod-config/env-variables.html deleted file mode 100644 index 5ad9f0d..0000000 --- a/site/end-user/kpanda/workloads/pod-config/env-variables.html +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - - - - - - - - - -环境变量 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

配置环境变量

-

环境变量是指容器运行环境中设定的一个变量,用于给 Pod 添加环境标志或传递配置等,支持通过键值对的形式为 Pod 配置环境变量。

-

算丰 AI 算力平台容器管理在原生 Kubernetes 的基础上增加了图形化界面为 Pod 配置环境变量,支持以下几种配置方式:

-
    -
  • 键值对(Key/Value Pair):将自定义的键值对作为容器的环境变量
  • -
  • 资源引用(Resource):将 Container 定义的字段作为环境变量的值,例如容器的内存限制、副本数等
  • -
  • 变量/变量引用(Pod Field):将 Pod 字段作为环境变量的值,例如 Pod 的名称
  • -
  • 配置项键值导入(ConfigMap key):导入配置项中某个键的值作为某个环境变量的值
  • -
  • 密钥键值导入(Secret Key):使用来自 Secret 中的数据定义环境变量的值
  • -
  • 密钥导入(Secret):将 Secret 中的所有键值都导入为环境变量
  • -
  • 配置项导入(ConfigMap):将配置项中所有键值都导入为环境变量
  • -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/pod-config/health-check.html b/site/end-user/kpanda/workloads/pod-config/health-check.html deleted file mode 100644 index 0805a2d..0000000 --- a/site/end-user/kpanda/workloads/pod-config/health-check.html +++ /dev/null @@ -1,999 +0,0 @@ - - - - - - - - - - - - - - -健康检查 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

容器的健康检查

-

容器健康检查根据用户需求,检查容器的健康状况。配置后,容器内的应用程序入如果异常,容器会自动进行重启恢复。Kubernetes 提供了存活(Liveness)检查、就绪(Readiness)检查和启动(Startup)检查。

-
    -
  • -

    存活检查(LivenessProbe) 可探测到应用死锁(应用程序在运行,但是无法继续执行后面的步骤)情况。 重启这种状态下的容器有助于提高应用的可用性,即使其中存在缺陷。

    -
  • -
  • -

    就绪检查(ReadinessProbe) 可探知容器何时准备好接受请求流量,当一个 Pod 内的所有容器都就绪时,才能认为该 Pod 就绪。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 若 Pod 尚未就绪,会被从 Service 的负载均衡器中剔除。

    -
  • -
  • -

    启动检查(StartupProbe) 可以了解应用容器何时启动,配置后,可控制容器在启动成功后再进行存活性和就绪态检查, 确保这些存活、就绪探测器不会影响应用的启动。 启动探测可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。

    -
  • -
-

存活和就绪检查

-

存活检查(LivenessProbe)的配置和就绪检查(ReadinessProbe)的配置参数相似, 唯一区别是要使用 readinessProbe 字段,而不是 livenessProbe 字段。

-

HTTP GET 参数说明:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数参数说明
路径( Path)访问的请求路径。如: 示例中的 /healthz 路径
端口(Port)服务监听端口。 如: 示例中的 8080 端口
协议访问协议,Http 或者Https
延迟时间(initialDelaySeconds)延迟检查时间,单位为秒,此设置与业务程序正常启动时间相关。例如,设置为30,表明容器启动后30秒才开始健康检查,该时间是预留给业务程序启动的时间。
超时时间(timeoutSeconds)超时时间,单位为秒。例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。若设置为0或不设置,默认超时等待时间为1秒。
超时时间(timeoutSeconds)超时时间,单位为秒。例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。若设置为0或不设置,默认超时等待时间为1秒。
成功阈值(successThreshold)探测失败后,被视为成功的最小连续成功数。默认值是 1,最小值是 1。存活和启动探测的这个值必须是 1。
最大失败次数(failureThreshold)当探测失败时重试的次数。存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。
-

使用 HTTP GET 请求检查

-

YAML 示例:

-
apiVersion: v1
-kind: Pod
-metadata:
-  labels:
-    test: liveness
-  name: liveness-http
-spec:
-  containers:
-  - name: liveness
-    image: k8s.gcr.io/liveness
-    args:
-    - /server
-    livenessProbe:
-      httpGet:
-        path: /healthz  # 访问的请求路径
-        port: 8080  # 服务监听端口
-        httpHeaders:
-        - name: Custom-Header
-          value: Awesome
-      initialDelaySeconds: 3  # kubelet 在执行第一次探测前应该等待 3 秒
-      periodSeconds: 3   # kubelet 每隔 3 秒执行一次存活探测
-
-

按照设定的规则,ubelet 向容器内运行的服务(服务在监听 8080 端口)发送一个 HTTP GET 请求来执行探测。如果服务器上 /healthz 路径下的处理程序返回成功代码,则 kubelet 认为容器是健康存活的。 如果处理程序返回失败代码,则 kubelet 会杀死这个容器并将其重启。返回大于或等于 200 并且小于 400 的任何代码都标示成功,其它返回代码都标示失败。 容器存活期间的最开始 10 秒中, /healthz 处理程序返回 200 的状态码。 之后处理程序返回 500 的状态码。

-

使用 TCP 端口检查

-

TCP 端口参数说明:

- - - - - - - - - - - - - - - - - - - - - -
参数参数说明
端口(Port)服务监听端口。 如: 示例中的 8080 端口
延迟时间(initialDelaySeconds)延迟检查时间,单位为秒,此设置与业务程序正常启动时间相关。例如,设置为30,表明容器启动后30秒才开始健康检查,该时间是预留给业务程序启动的时间。
超时时间(timeoutSeconds)超时时间,单位为秒。例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。若设置为0或不设置,默认超时等待时间为1秒。
-

对于提供TCP通信服务的容器,基于此配置,按照设定规则集群对该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败。选择TCP端口探测方式,必须指定容器监听的端口。

-

YAML 示例:

-
apiVersion: v1
-kind: Pod
-metadata:
-  name: goproxy
-  labels:
-    app: goproxy
-spec:
-  containers:
-  - name: goproxy
-    image: k8s.gcr.io/goproxy:0.1
-    ports:
-    - containerPort: 8080
-    readinessProbe:
-      tcpSocket:
-        port: 8080
-      initialDelaySeconds: 5
-      periodSeconds: 10
-    livenessProbe:
-      tcpSocket:
-        port: 8080
-      initialDelaySeconds: 15
-      periodSeconds: 20
-
-

此示例同时使用就绪和存活探针。kubelet 在容器启动 5 秒后发送第一个就绪探测。 尝试连接 goproxy 容器的 8080 端口, 如果探测成功,这个 Pod 会被标记为就绪状态,kubelet 将继续每隔 10 秒运行一次检测。

-

除了就绪探测,这个配置包括了一个存活探测。 kubelet 会在容器启动 15 秒后进行第一次存活探测。 就绪探测会尝试连接 goproxy 容器的 8080 端口。 如果存活探测失败,容器会被重新启动。

-

执行命令检查

-

YAML 示例:

-
apiVersion: v1
-kind: Pod
-metadata:
-  labels:
-    test: liveness
-  name: liveness-exec
-spec:
-  containers:
-  - name: liveness
-    image: k8s.gcr.io/busybox
-    args:
-    - /bin/sh
-    - -c
-    - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
-    livenessProbe:
-      exec:
-        command:
-        - cat
-        - /tmp/healthy
-      initialDelaySeconds: 5 # kubelet 在执行第一次探测前等待 5 秒
-      periodSeconds: 5  #kubelet 每 5 秒执行一次存活探测
-
-

periodSeconds 字段指定了 kubelet 每 5 秒执行一次存活探测, initialDelaySeconds 字段指定 kubelet 在执行第一次探测前等待 5 秒。按照设定规则,集群周期性的通过 kubelet 在容器内执行命令 cat /tmp/healthy 来进行探测。 如果命令执行成功并且返回值为 0,kubelet 就会认为这个容器是健康存活的。 如果这个命令返回非 0 值,kubelet 会杀死这个容器并重新启动它。

-

使用启动前检查保护慢启动容器

-

有些应用在启动时需要较长的初始化时间,需要使用相同的命令来设置启动探测,针对 HTTP 或 TCP 检测,可以通过将 failureThreshold * periodSeconds 参数设置为足够长的时间来应对启动需要较长时间的场景。

-

YAML 示例:

-
ports:
-- name: liveness-port
-  containerPort: 8080
-  hostPort: 8080
-
-livenessProbe:
-  httpGet:
-    path: /healthz
-    port: liveness-port
-  failureThreshold: 1
-  periodSeconds: 10
-
-startupProbe:
-  httpGet:
-    path: /healthz
-    port: liveness-port
-  failureThreshold: 30
-  periodSeconds: 10
-
-

如上设置,应用将有最多 5 分钟(30 * 10 = 300s)的时间来完成启动过程, 一旦启动探测成功,存活探测任务就会接管对容器的探测,对容器死锁作出快速响应。 如果启动探测一直没有成功,容器会在 300 秒后被杀死,并且根据 restartPolicy 来 执行进一步处置。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/pod-config/job-parameters.html b/site/end-user/kpanda/workloads/pod-config/job-parameters.html deleted file mode 100644 index 1c4fcf5..0000000 --- a/site/end-user/kpanda/workloads/pod-config/job-parameters.html +++ /dev/null @@ -1,792 +0,0 @@ - - - - - - - - - - - - - - -Job 参数 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

任务参数说明

-

根据 .spec.completions.spec.Parallelism 的设置,可以将任务(Job)划分为以下几种类型:

- - - - - - - - - - - - - - - - - - - - - -
Job 类型说明
非并行 Job创建一个 Pod 直至其 Job 成功结束
具有确定完成计数的并行 Job当成功的 Pod 个数达到 .spec.completions 时,Job 被视为完成
并行 Job创建一个或多个 Pod 直至有一个成功结束
-

参数说明

- - - - - - - - - - - - - - - - - - - - - - - - - -
RestartPolicy创建一个 Pod 直至其成功结束
.spec.completions表示 Job 结束需要成功运行的 Pod 个数,默认为 1
.spec.parallelism表示并行运行的 Pod 的个数,默认为 1
spec.backoffLimit表示失败 Pod 的重试最大次数,超过这个次数不会继续重试。
.spec.activeDeadlineSeconds表示 Pod 运行时间,一旦达到这个时间,Job 即其所有的 Pod 都会停止。且activeDeadlineSeconds 优先级高于 backoffLimit,即到达 activeDeadlineSeconds 的 Job 会忽略backoffLimit 的设置。
-

以下是一个 Job 配置示例,保存在 myjob.yaml 中,其计算 π 到 2000 位并打印输出。

-
apiVersion: batch/v1
-kind: Job            # 当前资源的类型
-metadata:
-  name: myjob
-spec:
-  completions: 50        # Job结束需要运行50个Pod,这个示例中就是打印π 50次
-  parallelism: 5        # 并行5个Pod
-  backoffLimit: 5        # 最多重试5次
-  template:
-    spec:
-      containers:
-      - name: pi
-        image: perl
-        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
-      restartPolicy: Never #重启策略
-
-

相关命令

-
kubectl apply -f myjob.yaml  #启动 job
-kubectl get job #查看这个job
-kubectl logs myjob-1122dswzs 查看Job Pod 的日志
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/pod-config/lifecycle.html b/site/end-user/kpanda/workloads/pod-config/lifecycle.html deleted file mode 100644 index e6e11c4..0000000 --- a/site/end-user/kpanda/workloads/pod-config/lifecycle.html +++ /dev/null @@ -1,940 +0,0 @@ - - - - - - - - - - - - - - -生命周期 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
- -
-
-
-

配置容器生命周期

-

Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果 Pod 内至少有一个容器正常启动,则进入 Running 状态。如果 Pod 中有容器以失败状态结束,则状态变为 Failed 。以下 phase 字段值表明了一个 Pod 处于生命周期的哪个阶段。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
描述
Pending
(悬决)
Pod 已被系统接受,但有一个或者多个容器尚未创建亦未运行。这个阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。
Running
(运行中)
Pod 已经绑定到了某个节点,Pod 中的所有容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
Succeeded
(成功)
Pod 中的所有容器都已成功终止,并且不会再重启。
Failed
(失败)
Pod 中的所有容器都已终止,并且至少有一个容器是因为失败而终止。也就是说,容器以非 0 状态退出或者被系统终止。
Unknown
(未知)
因为某些原因无法取得 Pod 的状态,这种情况通常是因为与 Pod 所在主机通信失败所致。
-

在算丰 AI 算力平台容器管理中创建一个工作负载时,通常使用镜像来指定容器中的运行环境。默认情况下,在构建镜像时,可以通过 EntrypointCMD 两个字段来定义容器运行时执行的命令和参数。如果需要更改容器镜像启动前、启动后、停止前的命令和参数,可以通过设置容器的生命周期事件命令和参数,来覆盖镜像中默认的命令和参数。

-

生命周期配置

-

根据业务需要对容器的启动命令、启动后命令、停止前命令进行配置。

- - - - - - - - - - - - - - - - - - - - - - - - - -
参数说明举例值
启动命令【类型】选填
【含义】容器将按照启动命令进行启动。
启动后命令【类型】选填
【含义】容器启动后出发的命令
停止前命令【类型】选填
【含义】容器在收到停止命令后执行的命令。确保升级或实例删除时可提前将实例中运行的业务排水。
-

启动命令

-

根据下表对启动命令进行配置。

- - - - - - - - - - - - - - - - - - - - -
参数说明举例值
运行命令【类型】必填
【含义】输入可执行的命令,多个命令之间用空格进行分割,如命令本身带空格,则需要加(“”)。
【含义】多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。
/run/server
运行参数【类型】选填
【含义】输入控制容器运行命令参数。
port=8080
-

启动后命令

-

算丰 AI 算力平台提供命令行脚本和 HTTP 请求两种处理类型对启动后命令进行配置。您可以根据下表选择适合您的配置方式。

-

命令行脚本配置

- - - - - - - - - - - - - - - - - - - - -
参数说明举例值
运行命令【类型】选填
【含义】输入可执行的命令,多个命令之间用空格进行分割,如命令本身带空格,则需要加(“”)。
【含义】多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。
/run/server
运行参数【类型】选填
【含义】输入控制容器运行命令参数。
port=8080
-

停止前命令

-

算丰 AI 算力平台提供命令行脚本和 HTTP 请求两种处理类型对停止前命令进行配置。您可以根据下表选择适合您的配置方式。

-

HTTP 请求配置

- - - - - - - - - - - - - - - - - - - - - - - - - -
参数说明举例值
URL 路径【类型】选填
【含义】请求的URL路径。
【含义】多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。
/run/server
端口【类型】必填
【含义】请求的端口。
port=8080
节点地址【类型】选填
【含义】请求的 IP 地址,默认是容器所在的节点 IP。
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/pod-config/scheduling-policy.html b/site/end-user/kpanda/workloads/pod-config/scheduling-policy.html deleted file mode 100644 index 4f72752..0000000 --- a/site/end-user/kpanda/workloads/pod-config/scheduling-policy.html +++ /dev/null @@ -1,875 +0,0 @@ - - - - - - - - - - - - - - -集群调度 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

调度策略

-

在 Kubernetes 集群中,节点也有标签。您可以手动添加标签。 Kubernetes 也会为集群中所有节点添加一些标准的标签。参见常用的标签、注解和污点以了解常见的节点标签。通过为节点添加标签,您可以让 Pod 调度到特定节点或节点组上。您可以使用这个功能来确保特定的 Pod 只能运行在具有一定隔离性,安全性或监管属性的节点上。

-

nodeSelector 是节点选择约束的最简单推荐形式。您可以将 nodeSelector 字段添加到 Pod 的规约中设置您希望目标节点所具有的节点标签。Kubernetes 只会将 Pod 调度到拥有指定每个标签的节点上。 nodeSelector 提供了一种最简单的方法来将 Pod 约束到具有特定标签的节点上。亲和性和反亲和性扩展了您可以定义的约束类型。使用亲和性与反亲和性的一些好处有:

-
    -
  • -

    亲和性、反亲和性语言的表达能力更强。 nodeSelector 只能选择拥有所有指定标签的节点。亲和性、反亲和性为您提供对选择逻辑的更强控制能力。

    -
  • -
  • -

    您可以标明某规则是“软需求”或者“偏好”,这样调度器在无法找到匹配节点时,会忽略亲和性/反亲和性规则,确保 Pod 调度成功。

    -
  • -
  • -

    您可以使用节点上(或其他拓扑域中)运行的其他 Pod 的标签来实施调度约束,而不是只能使用节点本身的标签。这个能力让您能够定义规则允许哪些 Pod 可以被放置在一起。

    -
  • -
-

您可以通过设置亲和(affinity)与反亲和(anti-affinity)来选择 Pod 要部署的节点。

-

容忍时间

-

当工作负载实例所在的节点不可用时,系统将实例重新调度到其它可用节点的时间窗。默认为 300 秒。

-

节点亲和性(nodeAffinity)

-

节点亲和性概念上类似于 nodeSelector , 它使您可以根据节点上的标签来约束 Pod 可以调度到哪些节点上。 节点亲和性有两种:

-
    -
  • -

    必须满足:( requiredDuringSchedulingIgnoredDuringExecution 调度器只有在规则被满足的时候才能执行调度。此功能类似于 nodeSelector , 但其语法表达能力更强。您可以定义多条硬约束规则,但只需满足其中一条。

    -
  • -
  • -

    尽量满足:( preferredDuringSchedulingIgnoredDuringExecution 调度器会尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。您还可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。同时您还可以定义多条硬约束规则,但只需满足其中一条。

    -
  • -
-

标签名

-

对应节点的标签,可以使用默认的标签也可以用户自定义标签。

-

操作符

-
    -
  • In:标签值需要在 values 的列表中
  • -
  • NotIn:标签的值不在某个列表中
  • -
  • Exists:判断某个标签是存在,无需设置标签值
  • -
  • DoesNotExist:判断某个标签是不存在,无需设置标签值
  • -
  • Gt:标签的值大于某个值(字符串比较)
  • -
  • Lt:标签的值小于某个值(字符串比较)
  • -
-

权重

-

仅支持在“尽量满足”策略中添加,可以理解为调度的优先级,权重大的会被优先调度。取值范围是 1 到 100。

-

工作负载亲和性

-

与节点亲和性类似,工作负载的亲和性也有两种类型:

-
    -
  • 必须满足:( requiredDuringSchedulingIgnoredDuringExecution 调度器只有在规则被满足的时候才能执行调度。此功能类似于 nodeSelector , 但其语法表达能力更强。您可以定义多条硬约束规则,但只需满足其中一条。
  • -
  • 尽量满足:( preferredDuringSchedulingIgnoredDuringExecution 调度器会尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。您还可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。同时您还可以定义多条硬约束规则,但只需满足其中一条。
  • -
-

工作负载的亲和性主要用来决定工作负载的 Pod 可以和哪些 Pod部 署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一可用区)中,减少它们之间的网络延迟。

-

标签名

-

对应节点的标签,可以使用默认的标签也可以用户自定义标签。

-

命名空间

-

指定调度策略生效的命名空间。

-

操作符

-
    -
  • In:标签值需要在 values 的列表中
  • -
  • NotIn:标签的值不在某个列表中
  • -
  • Exists:判断某个标签是存在,无需设置标签值
  • -
  • DoesNotExist:判断某个标签是不存在,无需设置标签值
  • -
-

拓扑域

-

指定调度时的影响范围。例如,如果指定为 kubernetes.io/Clustername 表示以 Node 节点为区分范围。

-

工作负载反亲和性

-

与节点亲和性类似,工作负载的反亲和性也有两种类型:

-
    -
  • 必须满足:( requiredDuringSchedulingIgnoredDuringExecution 调度器只有在规则被满足的时候才能执行调度。此功能类似于 nodeSelector , 但其语法表达能力更强。您可以定义多条硬约束规则,但只需满足其中一条。
  • -
  • 尽量满足:( preferredDuringSchedulingIgnoredDuringExecution 调度器会尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。您还可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。同时您还可以定义多条硬约束规则,但只需满足其中一条。
  • -
-

工作负载的反亲和性主要用来决定工作负载的 Pod 不可以和哪些 Pod 部署在同一拓扑域。例如,将一个负载的相同 Pod 分散部署到不同的拓扑域(例如不同主机)中,提高负载本身的稳定性。

-

标签名

-

对应节点的标签,可以使用默认的标签也可以用户自定义标签。

-

命名空间

-

指定调度策略生效的命名空间。

-

操作符

-
    -
  • In:标签值需要在 values 的列表中
  • -
  • NotIn:标签的值不在某个列表中
  • -
  • Exists:判断某个标签是存在,无需设置标签值
  • -
  • DoesNotExist:判断某个标签是不存在,无需设置标签值
  • -
-

拓扑域

-

指定调度时的影响范围。例如,如果指定为 kubernetes.io/Clustername 表示以 Node 节点为区分范围。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/kpanda/workloads/pod-config/workload-status.html b/site/end-user/kpanda/workloads/pod-config/workload-status.html deleted file mode 100644 index f93143c..0000000 --- a/site/end-user/kpanda/workloads/pod-config/workload-status.html +++ /dev/null @@ -1,924 +0,0 @@ - - - - - - - - - - - - - - -工作负载状态 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

工作负载状态

-

工作负载是运行在 Kubernetes 上的一个应用程序,在 Kubernetes 中,无论您的应用程序是由单个同一组件或是由多个不同的组件构成,都可以使用一组 Pod 来运行它。Kubernetes 提供了五种内置的工作负载资源来管理 Pod:

- -

您也可以通过设置自定义资源 CRD 来实现对工作负载资源的扩展。在第五代容器管理中,支持对工作负载进行创建、更新、扩容、监控、日志、删除、版本管理等全生命周期管理。

-

Pod 状态

-

Pod 是 Kuberneters 中创建和管理的、最小的计算单元,即一组容器的集合。这些容器共享存储、网络以及管理控制容器运行方式的策略。 -Pod 通常不由用户直接创建,而是通过工作负载资源来创建。 -Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少其中有一个主要容器正常启动,则进入 Running ,之后取决于 Pod 中是否有容器以失败状态结束而进入 Succeeded 或者 Failed 阶段。

-

工作负载状态

-

第五代容器管理模块依据 Pod 的状态、副本数等因素,设计了一种内置的工作负载生命周期的状态集,以让用户能够更加真实的感知工作负载运行情况。 -由于不同的工作负载类型(比如无状态工作负载和任务)对 Pod 的管理机制不一致,因此,不同的工作负载在运行过程中会呈现不同的生命周期状态,具体如下表:

-

无状态负载、有状态负载、守护进程状态

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
状态描述
等待中1. 工作负载创建正在进行中,工作负载处于此状态。
2. 触发升级或者回滚动作后,工作负载处于此状态。
3. 触发暂停/扩缩容等操作,工作负载处在此状态。
运行中负载下的所有实例都在运行中且副本数与用户预定义的数量一致时处于此状态。
删除中执行删除操作时,负载处于此状态,直到删除完成。
异常因为某些原因无法取得工作负载的状态。这种情况通常是因为与 Pod 所在主机通信失败。
未就绪容器处于异常,pending 状态时,因未知错误导致负载无法启动时显示此状态
-

任务状态

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
状态描述
等待中任务创建正在进行中,工作负载处于此状态。
执行中任务正在执行中,工作负载处于此状态。
执行完成任务执行完成,工作负载处于此状态。
删除中触发删除操作,工作负载处在此状态。
异常因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。
-

定时任务状态

- - - - - - - - - - - - - - - - - - - - - - - - - -
状态描述
等待中定时任务创建正在进行中,定时任务处于此状态。
已启动创建定时任务成功后,正常运行或将已暂停的任务启动时定时任务处于此状态。
已停止执行停止任务操作时,定时任务处于此状态。
删除中触发删除操作,定时任务处在此状态。
-

当工作负载处于异常或未就绪状态时,您可以通过将鼠标移动到负载的状态值上,系统将通过提示框展示更加详细的错误信息。您也可以通过查看日志或事件来获取工作负载的相关运行信息。

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/register/index.html b/site/end-user/register/index.html deleted file mode 100644 index 09b017e..0000000 --- a/site/end-user/register/index.html +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - - - - - - - - - -用户注册 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

用户注册

-

新用户首次使用 AI 算力平台需要进行注册。

-

前置条件

-
    -
  • 已安装 AI 算力平台
  • -
  • 已开启邮箱注册功能
  • -
  • 有一个可用的邮箱
  • -
-

邮箱注册步骤

-
    -
  1. -

    打开 AI 算力平台首页 https://ai.isuanova.com/,点击 注册

    -

    home

    -
  2. -
  3. -

    键入用户名、密码、邮箱后点击 注册

    -

    to register

    -
  4. -
  5. -

    系统提示发送了一封邮件到您的邮箱。

    -

    to register

    -
  6. -
  7. -

    登录自己的邮箱,找到邮件,点击链接。

    -

    email

    -
  8. -
  9. -

    恭喜,您成功进入了 AI 算力平台,现在可以开始您的 AI 之旅了。

    -

    verify

    -
  10. -
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/share/notebook.html b/site/end-user/share/notebook.html deleted file mode 100644 index f338a83..0000000 --- a/site/end-user/share/notebook.html +++ /dev/null @@ -1,681 +0,0 @@ - - - - - - - - - - - - - - -使用 Notebook - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
- -
-
-

使用 Notebook

-

Notebook 通常指的是 Jupyter Notebook 或类似的交互式计算环境。 -这是一种非常流行的工具,广泛用于数据科学、机器学习和深度学习等领域。 -本页说明如何在算丰 AI 算力平台中使用 Notebook。

-

前置条件

-
    -
  • 已安装 AI 算力平台
  • -
  • 用户已成功注册
  • -
  • 管理员为用户分配了工作空间
  • -
  • 已准备好数据集(代码、数据等)
  • -
-

创建和使用 Notebook 实例

-
    -
  1. 管理员身份 登录 AI 算力平台
  2. -
  3. -

    导航至 AI Lab -> 运维管理 -> 队列管理 ,点击右侧的 创建 按钮

    -

    create queue

    -
  4. -
  5. -

    键入名称,选择集群、工作空间和配额后,点击 确定

    -

    ok

    -
  6. -
  7. -

    用户身份 登录 AI 算力平台,导航至 AI Lab -> Notebook ,点击右侧的 创建 按钮

    -

    create notebook

    -
  8. -
  9. -

    配置各项参数后点击 确定

    -
    -
    -
    -

    键入名称,选择集群、命名空间,选择刚创建的队列,点击 一键初始化

    -

    basic

    -
    -
    -

    选择 Notebook 类型,配置内存、CPU,开启 GPU,创建和配置 PVC:

    -

    resource

    -
    -
    -

    开启 SSH 外网访问:

    -

    advanced

    -
    -
    -
    -
  10. -
  11. -

    自动跳转到 Notebook 实例列表,点击实例名称

    -

    click name

    -
  12. -
  13. -

    进入 Notebook 实例详情页,点击右上角的 打开 按钮

    -

    open

    -
  14. -
  15. -

    进入了 Notebook 开发环境,比如在 /home/jovyan 目录挂载了持久卷,可以通过 git 克隆代码,通过 SSH 连接后上传数据等。

    -

    notebook

    -
  16. -
-

通过 SSH 访问 Notebook 实例

-
    -
  1. -

    在自己的电脑上生成 SSH 密钥对

    -

    在自己电脑上打开命令行,比如在 Windows 上打开 git bash,输入 ssh-keygen.exe -t rsa,然后一路回车。

    -

    generate

    -
  2. -
  3. -

    通过 cat ~/.ssh/id_rsa.pub 等命令查看并复制公钥

    -

    copy key

    -
  4. -
  5. -

    以用户身份登录 AI 算力平台,在右上角点击 个人中心 -> SSH 公钥 -> 导入 SSH 公钥

    -

    import

    -
  6. -
  7. -

    进入 Notebook 实例的详情页,复制 SSH 的链接

    -

    copy link

    -
  8. -
  9. -

    在客户端使用 SSH 访问 Notebook 实例

    -

    ssh

    -
  10. -
-

下一步:创建训练任务

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/end-user/share/workload.html b/site/end-user/share/workload.html deleted file mode 100644 index e74d341..0000000 --- a/site/end-user/share/workload.html +++ /dev/null @@ -1,634 +0,0 @@ - - - - - - - - - - - - - - -创建 AI 工作负载 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-

创建 AI 负载使用 GPU 资源

-

管理员为工作空间分配资源配额后,用户就可以创建 AI 工作负载来使用 GPU 算力资源。

-

前置条件

-
    -
  • 已安装 AI 算力平台
  • -
  • 用户已成功注册
  • -
  • 管理员为用户分配了工作空间
  • -
  • 管理员为工作空间设置了资源配额
  • -
  • 管理员已经为用户分配了一个集群
  • -
-

创建 AI 负载步骤

-
    -
  1. 以用户身份登录 AI 算力平台
  2. -
  3. -

    导航至 容器管理 ,选择一个命名空间,点击 工作负载 -> 无状态负载 , - 点击右侧的 镜像创建 按钮

    -

    button

    -
  4. -
  5. -

    配置各项参数后点击 确定

    -
    -
    -
    -

    选择自己的命名空间。

    -

    basic

    -
    -
    -

    设置镜像,配置 CPU、内存、GPU 等资源,设置启动命令。

    -

    container

    -
    -
    -

    服务配置和高级配置可以使用默认配置。

    -
    -
    -
    -
  6. -
  7. -

    自动返回无状态负载列表,点击负载名称

    -

    click name

    -
  8. -
  9. -

    进入详情页,可以看到 GPU 配额

    -

    check gpu

    -
  10. -
  11. -

    你还可以进入控制台,运行 mx-smi 命令查看 GPU 资源

    -

    check gpu

    -
  12. -
-

下一步:使用 Notebook

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/images/Advanced-Configuration.png b/site/images/Advanced-Configuration.png deleted file mode 100644 index f261564..0000000 Binary files a/site/images/Advanced-Configuration.png and /dev/null differ diff --git a/site/images/DaoCloud.png b/site/images/DaoCloud.png deleted file mode 100644 index de4ee32..0000000 Binary files a/site/images/DaoCloud.png and /dev/null differ diff --git a/site/images/Installation-and-upgrade.png b/site/images/Installation-and-upgrade.png deleted file mode 100644 index 3bc24dd..0000000 Binary files a/site/images/Installation-and-upgrade.png and /dev/null differ diff --git a/site/images/about02.png b/site/images/about02.png deleted file mode 100644 index 357e47e..0000000 Binary files a/site/images/about02.png and /dev/null differ diff --git a/site/images/about03.png b/site/images/about03.png deleted file mode 100644 index 7b18a08..0000000 Binary files a/site/images/about03.png and /dev/null differ diff --git a/site/images/access-cloudshell.png b/site/images/access-cloudshell.png deleted file mode 100644 index 00297fb..0000000 Binary files a/site/images/access-cloudshell.png and /dev/null differ diff --git a/site/images/access-download-cert.png b/site/images/access-download-cert.png deleted file mode 100644 index d529ae0..0000000 Binary files a/site/images/access-download-cert.png and /dev/null differ diff --git a/site/images/access-get-cert.png b/site/images/access-get-cert.png deleted file mode 100644 index fa2abb9..0000000 Binary files a/site/images/access-get-cert.png and /dev/null differ diff --git a/site/images/access-get-node.png b/site/images/access-get-node.png deleted file mode 100644 index cab7d9d..0000000 Binary files a/site/images/access-get-node.png and /dev/null differ diff --git a/site/images/addnode01.png b/site/images/addnode01.png deleted file mode 100644 index 6834e02..0000000 Binary files a/site/images/addnode01.png and /dev/null differ diff --git a/site/images/addnode01_1.png b/site/images/addnode01_1.png deleted file mode 100644 index 6834e02..0000000 Binary files a/site/images/addnode01_1.png and /dev/null differ diff --git a/site/images/addnode02.png b/site/images/addnode02.png deleted file mode 100644 index 6cdd8ae..0000000 Binary files a/site/images/addnode02.png and /dev/null differ diff --git a/site/images/addnode03.png b/site/images/addnode03.png deleted file mode 100644 index e2b749e..0000000 Binary files a/site/images/addnode03.png and /dev/null differ diff --git a/site/images/appear05.png b/site/images/appear05.png deleted file mode 100644 index f53a5d8..0000000 Binary files a/site/images/appear05.png and /dev/null differ diff --git a/site/images/ascend-demo-infer-result.png b/site/images/ascend-demo-infer-result.png deleted file mode 100644 index b0638b0..0000000 Binary files a/site/images/ascend-demo-infer-result.png and /dev/null differ diff --git a/site/images/ascend-demo-pod-result.png b/site/images/ascend-demo-pod-result.png deleted file mode 100644 index 6083b53..0000000 Binary files a/site/images/ascend-demo-pod-result.png and /dev/null differ diff --git a/site/images/ascend-demo-pod-status.png b/site/images/ascend-demo-pod-status.png deleted file mode 100644 index 0ade4b5..0000000 Binary files a/site/images/ascend-demo-pod-status.png and /dev/null differ diff --git a/site/images/audit01.png b/site/images/audit01.png deleted file mode 100644 index 27060b0..0000000 Binary files a/site/images/audit01.png and /dev/null differ diff --git a/site/images/audit02.png b/site/images/audit02.png deleted file mode 100644 index 7121a0c..0000000 Binary files a/site/images/audit02.png and /dev/null differ diff --git a/site/images/audit03.png b/site/images/audit03.png deleted file mode 100644 index 0e29cf6..0000000 Binary files a/site/images/audit03.png and /dev/null differ diff --git a/site/images/audit04.png b/site/images/audit04.png deleted file mode 100644 index 301df9d..0000000 Binary files a/site/images/audit04.png and /dev/null differ diff --git a/site/images/audit05.png b/site/images/audit05.png deleted file mode 100644 index d989987..0000000 Binary files a/site/images/audit05.png and /dev/null differ diff --git a/site/images/audit06.png b/site/images/audit06.png deleted file mode 100644 index f066de4..0000000 Binary files a/site/images/audit06.png and /dev/null differ diff --git a/site/images/audit07.png b/site/images/audit07.png deleted file mode 100644 index e43cb6c..0000000 Binary files a/site/images/audit07.png and /dev/null differ diff --git a/site/images/authorize01.png b/site/images/authorize01.png deleted file mode 100644 index c0cf0bf..0000000 Binary files a/site/images/authorize01.png and /dev/null differ diff --git a/site/images/authorize02.png b/site/images/authorize02.png deleted file mode 100644 index a41bb60..0000000 Binary files a/site/images/authorize02.png and /dev/null differ diff --git a/site/images/backup1.png b/site/images/backup1.png deleted file mode 100644 index 6ec51f3..0000000 Binary files a/site/images/backup1.png and /dev/null differ diff --git a/site/images/backup2.png b/site/images/backup2.png deleted file mode 100644 index 1714966..0000000 Binary files a/site/images/backup2.png and /dev/null differ diff --git a/site/images/backup3.png b/site/images/backup3.png deleted file mode 100644 index bd3d185..0000000 Binary files a/site/images/backup3.png and /dev/null differ diff --git a/site/images/backupd20485.png b/site/images/backupd20485.png deleted file mode 100644 index aef150c..0000000 Binary files a/site/images/backupd20485.png and /dev/null differ diff --git a/site/images/backupd20486.png b/site/images/backupd20486.png deleted file mode 100644 index 9e3382d..0000000 Binary files a/site/images/backupd20486.png and /dev/null differ diff --git a/site/images/cluster-ns.png b/site/images/cluster-ns.png deleted file mode 100644 index df28002..0000000 Binary files a/site/images/cluster-ns.png and /dev/null differ diff --git a/site/images/cluster-setting-ascend-gpu.jpg b/site/images/cluster-setting-ascend-gpu.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/cluster-setting-gpu.jpg b/site/images/cluster-setting-gpu.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/cluster-setting-iluvatar-gpu.jpg b/site/images/cluster-setting-iluvatar-gpu.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/cluster-version.png b/site/images/cluster-version.png deleted file mode 100644 index 2392ce9..0000000 Binary files a/site/images/cluster-version.png and /dev/null differ diff --git a/site/images/config05.png b/site/images/config05.png deleted file mode 100644 index a9c71a3..0000000 Binary files a/site/images/config05.png and /dev/null differ diff --git a/site/images/configmap-hot-loading.jpg b/site/images/configmap-hot-loading.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/configmap-hot-loading02.png b/site/images/configmap-hot-loading02.png deleted file mode 100644 index 93d3daf..0000000 Binary files a/site/images/configmap-hot-loading02.png and /dev/null differ diff --git a/site/images/configmap-hot-loading03.png b/site/images/configmap-hot-loading03.png deleted file mode 100644 index 89604af..0000000 Binary files a/site/images/configmap-hot-loading03.png and /dev/null differ diff --git a/site/images/configmap01.png b/site/images/configmap01.png deleted file mode 100644 index 7bf0c54..0000000 Binary files a/site/images/configmap01.png and /dev/null differ diff --git a/site/images/configmap02.png b/site/images/configmap02.png deleted file mode 100644 index 39723be..0000000 Binary files a/site/images/configmap02.png and /dev/null differ diff --git a/site/images/configmap03.png b/site/images/configmap03.png deleted file mode 100644 index b7109d3..0000000 Binary files a/site/images/configmap03.png and /dev/null differ diff --git a/site/images/configmap04.png b/site/images/configmap04.png deleted file mode 100644 index 62d8b09..0000000 Binary files a/site/images/configmap04.png and /dev/null differ diff --git a/site/images/configmap04_1.png b/site/images/configmap04_1.png deleted file mode 100644 index 62d8b09..0000000 Binary files a/site/images/configmap04_1.png and /dev/null differ diff --git a/site/images/console01.png b/site/images/console01.png deleted file mode 100644 index ccbcf0a..0000000 Binary files a/site/images/console01.png and /dev/null differ diff --git a/site/images/console02.png b/site/images/console02.png deleted file mode 100644 index 2f5702a..0000000 Binary files a/site/images/console02.png and /dev/null differ diff --git a/site/images/crd01.png b/site/images/crd01.png deleted file mode 100644 index 8f53b7f..0000000 Binary files a/site/images/crd01.png and /dev/null differ diff --git a/site/images/crd01_1.png b/site/images/crd01_1.png deleted file mode 100644 index 8f53b7f..0000000 Binary files a/site/images/crd01_1.png and /dev/null differ diff --git a/site/images/crd01_2.png b/site/images/crd01_2.png deleted file mode 100644 index 8f53b7f..0000000 Binary files a/site/images/crd01_2.png and /dev/null differ diff --git a/site/images/crd03.png b/site/images/crd03.png deleted file mode 100644 index d9a1134..0000000 Binary files a/site/images/crd03.png and /dev/null differ diff --git a/site/images/crd06.png b/site/images/crd06.png deleted file mode 100644 index 48666ba..0000000 Binary files a/site/images/crd06.png and /dev/null differ diff --git a/site/images/create-tep01.png b/site/images/create-tep01.png deleted file mode 100644 index 80f2f3d..0000000 Binary files a/site/images/create-tep01.png and /dev/null differ diff --git a/site/images/create-tep02.png b/site/images/create-tep02.png deleted file mode 100644 index 23fb0da..0000000 Binary files a/site/images/create-tep02.png and /dev/null differ diff --git a/site/images/create-tep03.png b/site/images/create-tep03.png deleted file mode 100644 index b584338..0000000 Binary files a/site/images/create-tep03.png and /dev/null differ diff --git a/site/images/create-tep04.png b/site/images/create-tep04.png deleted file mode 100644 index 965cb1a..0000000 Binary files a/site/images/create-tep04.png and /dev/null differ diff --git a/site/images/create-tep05.png b/site/images/create-tep05.png deleted file mode 100644 index 54ff24c..0000000 Binary files a/site/images/create-tep05.png and /dev/null differ diff --git a/site/images/create-tep06.png b/site/images/create-tep06.png deleted file mode 100644 index d21911b..0000000 Binary files a/site/images/create-tep06.png and /dev/null differ diff --git a/site/images/create-tep07.png b/site/images/create-tep07.png deleted file mode 100644 index aae99c9..0000000 Binary files a/site/images/create-tep07.png and /dev/null differ diff --git a/site/images/create-tep08.png b/site/images/create-tep08.png deleted file mode 100644 index 30a5d14..0000000 Binary files a/site/images/create-tep08.png and /dev/null differ diff --git a/site/images/create001.png b/site/images/create001.png deleted file mode 100644 index 718a759..0000000 Binary files a/site/images/create001.png and /dev/null differ diff --git a/site/images/create002.png b/site/images/create002.png deleted file mode 100644 index 046e50b..0000000 Binary files a/site/images/create002.png and /dev/null differ diff --git a/site/images/create009.png b/site/images/create009.png deleted file mode 100644 index cf183b7..0000000 Binary files a/site/images/create009.png and /dev/null differ diff --git a/site/images/createScale.png b/site/images/createScale.png deleted file mode 100644 index 29f523e..0000000 Binary files a/site/images/createScale.png and /dev/null differ diff --git a/site/images/createScale02.png b/site/images/createScale02.png deleted file mode 100644 index da69f41..0000000 Binary files a/site/images/createScale02.png and /dev/null differ diff --git a/site/images/createScale02_1.png b/site/images/createScale02_1.png deleted file mode 100644 index da69f41..0000000 Binary files a/site/images/createScale02_1.png and /dev/null differ diff --git a/site/images/createScale07.png b/site/images/createScale07.png deleted file mode 100644 index e437599..0000000 Binary files a/site/images/createScale07.png and /dev/null differ diff --git a/site/images/createScale07_1.png b/site/images/createScale07_1.png deleted file mode 100644 index e437599..0000000 Binary files a/site/images/createScale07_1.png and /dev/null differ diff --git a/site/images/createScale08.png b/site/images/createScale08.png deleted file mode 100644 index b140e9f..0000000 Binary files a/site/images/createScale08.png and /dev/null differ diff --git a/site/images/createScale09.png b/site/images/createScale09.png deleted file mode 100644 index 491507d..0000000 Binary files a/site/images/createScale09.png and /dev/null differ diff --git a/site/images/createScale10.png b/site/images/createScale10.png deleted file mode 100644 index cea2060..0000000 Binary files a/site/images/createScale10.png and /dev/null differ diff --git a/site/images/createScale_1.png b/site/images/createScale_1.png deleted file mode 100644 index 29f523e..0000000 Binary files a/site/images/createScale_1.png and /dev/null differ diff --git a/site/images/createcluster-ssh01.png b/site/images/createcluster-ssh01.png deleted file mode 100644 index fb104dc..0000000 Binary files a/site/images/createcluster-ssh01.png and /dev/null differ diff --git a/site/images/createcluster07.png b/site/images/createcluster07.png deleted file mode 100644 index e3a7b9b..0000000 Binary files a/site/images/createcluster07.png and /dev/null differ diff --git a/site/images/createnew01.png b/site/images/createnew01.png deleted file mode 100644 index d3c0199..0000000 Binary files a/site/images/createnew01.png and /dev/null differ diff --git a/site/images/createnew07.png b/site/images/createnew07.png deleted file mode 100644 index 2fc5900..0000000 Binary files a/site/images/createnew07.png and /dev/null differ diff --git a/site/images/createuser01.png b/site/images/createuser01.png deleted file mode 100644 index 26242f2..0000000 Binary files a/site/images/createuser01.png and /dev/null differ diff --git a/site/images/createuser02.png b/site/images/createuser02.png deleted file mode 100644 index 46b3b9c..0000000 Binary files a/site/images/createuser02.png and /dev/null differ diff --git a/site/images/createuser03.png b/site/images/createuser03.png deleted file mode 100644 index 709f103..0000000 Binary files a/site/images/createuser03.png and /dev/null differ diff --git a/site/images/createvm02.png b/site/images/createvm02.png deleted file mode 100644 index 23a1c91..0000000 Binary files a/site/images/createvm02.png and /dev/null differ diff --git a/site/images/createvm05.png b/site/images/createvm05.png deleted file mode 100644 index ffe7bd6..0000000 Binary files a/site/images/createvm05.png and /dev/null differ diff --git a/site/images/createvm07.png b/site/images/createvm07.png deleted file mode 100644 index 4e48c1e..0000000 Binary files a/site/images/createvm07.png and /dev/null differ diff --git a/site/images/createvm08.png b/site/images/createvm08.png deleted file mode 100644 index e1e0d62..0000000 Binary files a/site/images/createvm08.png and /dev/null differ diff --git a/site/images/createvm08_1.png b/site/images/createvm08_1.png deleted file mode 100644 index e1e0d62..0000000 Binary files a/site/images/createvm08_1.png and /dev/null differ diff --git a/site/images/creatnew03.png b/site/images/creatnew03.png deleted file mode 100644 index f34b710..0000000 Binary files a/site/images/creatnew03.png and /dev/null differ diff --git a/site/images/creatnew04.png b/site/images/creatnew04.png deleted file mode 100644 index 6feac19..0000000 Binary files a/site/images/creatnew04.png and /dev/null differ diff --git a/site/images/creatnew05.png b/site/images/creatnew05.png deleted file mode 100644 index 1bdeb28..0000000 Binary files a/site/images/creatnew05.png and /dev/null differ diff --git a/site/images/creatnew06.png b/site/images/creatnew06.png deleted file mode 100644 index 8329c2c..0000000 Binary files a/site/images/creatnew06.png and /dev/null differ diff --git a/site/images/cronjob01.png b/site/images/cronjob01.png deleted file mode 100644 index ad4881b..0000000 Binary files a/site/images/cronjob01.png and /dev/null differ diff --git a/site/images/cronjob05.png b/site/images/cronjob05.png deleted file mode 100644 index 1b20b32..0000000 Binary files a/site/images/cronjob05.png and /dev/null differ diff --git a/site/images/cronjob06.png b/site/images/cronjob06.png deleted file mode 100644 index 3d414be..0000000 Binary files a/site/images/cronjob06.png and /dev/null differ diff --git a/site/images/cronjob07.png b/site/images/cronjob07.png deleted file mode 100644 index 4786ce9..0000000 Binary files a/site/images/cronjob07.png and /dev/null differ diff --git a/site/images/cronjob08.png b/site/images/cronjob08.png deleted file mode 100644 index 6d3ea21..0000000 Binary files a/site/images/cronjob08.png and /dev/null differ diff --git a/site/images/cronjob08_1.png b/site/images/cronjob08_1.png deleted file mode 100644 index 6d3ea21..0000000 Binary files a/site/images/cronjob08_1.png and /dev/null differ diff --git a/site/images/csv1.png b/site/images/csv1.png deleted file mode 100644 index facf3b9..0000000 Binary files a/site/images/csv1.png and /dev/null differ diff --git a/site/images/csv2.png b/site/images/csv2.png deleted file mode 100644 index f478bfb..0000000 Binary files a/site/images/csv2.png and /dev/null differ diff --git a/site/images/custom01.png b/site/images/custom01.png deleted file mode 100644 index 907de78..0000000 Binary files a/site/images/custom01.png and /dev/null differ diff --git a/site/images/custom01_1.png b/site/images/custom01_1.png deleted file mode 100644 index 907de78..0000000 Binary files a/site/images/custom01_1.png and /dev/null differ diff --git a/site/images/custom01_2.png b/site/images/custom01_2.png deleted file mode 100644 index 907de78..0000000 Binary files a/site/images/custom01_2.png and /dev/null differ diff --git a/site/images/custom02.png b/site/images/custom02.png deleted file mode 100644 index 672382e..0000000 Binary files a/site/images/custom02.png and /dev/null differ diff --git a/site/images/custom03.png b/site/images/custom03.png deleted file mode 100644 index 44f7f87..0000000 Binary files a/site/images/custom03.png and /dev/null differ diff --git a/site/images/custom04.png b/site/images/custom04.png deleted file mode 100644 index 57cbbcf..0000000 Binary files a/site/images/custom04.png and /dev/null differ diff --git a/site/images/custom05.png b/site/images/custom05.png deleted file mode 100644 index fdd6aff..0000000 Binary files a/site/images/custom05.png and /dev/null differ diff --git a/site/images/custom06.png b/site/images/custom06.png deleted file mode 100644 index 70918be..0000000 Binary files a/site/images/custom06.png and /dev/null differ diff --git a/site/images/custom07.png b/site/images/custom07.png deleted file mode 100644 index a5b1755..0000000 Binary files a/site/images/custom07.png and /dev/null differ diff --git a/site/images/daemon01.png b/site/images/daemon01.png deleted file mode 100644 index 7b0c007..0000000 Binary files a/site/images/daemon01.png and /dev/null differ diff --git a/site/images/daemon02.png b/site/images/daemon02.png deleted file mode 100644 index d4161e8..0000000 Binary files a/site/images/daemon02.png and /dev/null differ diff --git a/site/images/daemon03.png b/site/images/daemon03.png deleted file mode 100644 index cb9ba4b..0000000 Binary files a/site/images/daemon03.png and /dev/null differ diff --git a/site/images/daemon05.png b/site/images/daemon05.png deleted file mode 100644 index 9cbc281..0000000 Binary files a/site/images/daemon05.png and /dev/null differ diff --git a/site/images/daemon06.png b/site/images/daemon06.png deleted file mode 100644 index beb4438..0000000 Binary files a/site/images/daemon06.png and /dev/null differ diff --git a/site/images/daemon07.png b/site/images/daemon07.png deleted file mode 100644 index 89d029b..0000000 Binary files a/site/images/daemon07.png and /dev/null differ diff --git a/site/images/daemon08.png b/site/images/daemon08.png deleted file mode 100644 index 2635498..0000000 Binary files a/site/images/daemon08.png and /dev/null differ diff --git a/site/images/delete004.png b/site/images/delete004.png deleted file mode 100644 index e663c09..0000000 Binary files a/site/images/delete004.png and /dev/null differ diff --git a/site/images/deletegroup01.png b/site/images/deletegroup01.png deleted file mode 100644 index d74c820..0000000 Binary files a/site/images/deletegroup01.png and /dev/null differ diff --git a/site/images/deletegroup02.png b/site/images/deletegroup02.png deleted file mode 100644 index c419b49..0000000 Binary files a/site/images/deletegroup02.png and /dev/null differ diff --git a/site/images/deletegroup03.png b/site/images/deletegroup03.png deleted file mode 100644 index fafda4a..0000000 Binary files a/site/images/deletegroup03.png and /dev/null differ diff --git a/site/images/deletenode01.png b/site/images/deletenode01.png deleted file mode 100644 index ddd9908..0000000 Binary files a/site/images/deletenode01.png and /dev/null differ diff --git a/site/images/deletenode02.png b/site/images/deletenode02.png deleted file mode 100644 index 26b32e7..0000000 Binary files a/site/images/deletenode02.png and /dev/null differ diff --git a/site/images/deleteuser01.png b/site/images/deleteuser01.png deleted file mode 100644 index 834d17e..0000000 Binary files a/site/images/deleteuser01.png and /dev/null differ diff --git a/site/images/deleteuser02.png b/site/images/deleteuser02.png deleted file mode 100644 index 71e5992..0000000 Binary files a/site/images/deleteuser02.png and /dev/null differ diff --git a/site/images/deploy01.png b/site/images/deploy01.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01.png and /dev/null differ diff --git a/site/images/deploy01_1.png b/site/images/deploy01_1.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_1.png and /dev/null differ diff --git a/site/images/deploy01_10.png b/site/images/deploy01_10.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_10.png and /dev/null differ diff --git a/site/images/deploy01_11.png b/site/images/deploy01_11.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_11.png and /dev/null differ diff --git a/site/images/deploy01_12.png b/site/images/deploy01_12.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_12.png and /dev/null differ diff --git a/site/images/deploy01_13.png b/site/images/deploy01_13.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_13.png and /dev/null differ diff --git a/site/images/deploy01_14.png b/site/images/deploy01_14.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_14.png and /dev/null differ diff --git a/site/images/deploy01_15.png b/site/images/deploy01_15.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_15.png and /dev/null differ diff --git a/site/images/deploy01_2.png b/site/images/deploy01_2.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_2.png and /dev/null differ diff --git a/site/images/deploy01_3.png b/site/images/deploy01_3.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_3.png and /dev/null differ diff --git a/site/images/deploy01_4.png b/site/images/deploy01_4.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_4.png and /dev/null differ diff --git a/site/images/deploy01_5.png b/site/images/deploy01_5.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_5.png and /dev/null differ diff --git a/site/images/deploy01_6.png b/site/images/deploy01_6.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_6.png and /dev/null differ diff --git a/site/images/deploy01_7.png b/site/images/deploy01_7.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_7.png and /dev/null differ diff --git a/site/images/deploy01_8.png b/site/images/deploy01_8.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_8.png and /dev/null differ diff --git a/site/images/deploy01_9.png b/site/images/deploy01_9.png deleted file mode 100644 index 604133f..0000000 Binary files a/site/images/deploy01_9.png and /dev/null differ diff --git a/site/images/deploy02.png b/site/images/deploy02.png deleted file mode 100644 index 8cee240..0000000 Binary files a/site/images/deploy02.png and /dev/null differ diff --git a/site/images/deploy02Yaml.png b/site/images/deploy02Yaml.png deleted file mode 100644 index 6fc8d79..0000000 Binary files a/site/images/deploy02Yaml.png and /dev/null differ diff --git a/site/images/deploy02Yaml_1.png b/site/images/deploy02Yaml_1.png deleted file mode 100644 index 6fc8d79..0000000 Binary files a/site/images/deploy02Yaml_1.png and /dev/null differ diff --git a/site/images/deploy03yaml.png b/site/images/deploy03yaml.png deleted file mode 100644 index ba322a7..0000000 Binary files a/site/images/deploy03yaml.png and /dev/null differ diff --git a/site/images/deploy04.png b/site/images/deploy04.png deleted file mode 100644 index c95184d..0000000 Binary files a/site/images/deploy04.png and /dev/null differ diff --git a/site/images/deploy06.png b/site/images/deploy06.png deleted file mode 100644 index 8463bf7..0000000 Binary files a/site/images/deploy06.png and /dev/null differ diff --git a/site/images/deploy06_1.png b/site/images/deploy06_1.png deleted file mode 100644 index 8463bf7..0000000 Binary files a/site/images/deploy06_1.png and /dev/null differ diff --git a/site/images/deploy06_2.png b/site/images/deploy06_2.png deleted file mode 100644 index 8463bf7..0000000 Binary files a/site/images/deploy06_2.png and /dev/null differ diff --git a/site/images/deploy06_3.png b/site/images/deploy06_3.png deleted file mode 100644 index 8463bf7..0000000 Binary files a/site/images/deploy06_3.png and /dev/null differ diff --git a/site/images/deploy06_4.png b/site/images/deploy06_4.png deleted file mode 100644 index 8463bf7..0000000 Binary files a/site/images/deploy06_4.png and /dev/null differ diff --git a/site/images/deploy07.png b/site/images/deploy07.png deleted file mode 100644 index 8bab4e9..0000000 Binary files a/site/images/deploy07.png and /dev/null differ diff --git a/site/images/deploy07_1.png b/site/images/deploy07_1.png deleted file mode 100644 index 8bab4e9..0000000 Binary files a/site/images/deploy07_1.png and /dev/null differ diff --git a/site/images/deploy07_2.png b/site/images/deploy07_2.png deleted file mode 100644 index 8bab4e9..0000000 Binary files a/site/images/deploy07_2.png and /dev/null differ diff --git a/site/images/deploy07_3.png b/site/images/deploy07_3.png deleted file mode 100644 index 8bab4e9..0000000 Binary files a/site/images/deploy07_3.png and /dev/null differ diff --git a/site/images/deploy07_4.png b/site/images/deploy07_4.png deleted file mode 100644 index 8bab4e9..0000000 Binary files a/site/images/deploy07_4.png and /dev/null differ diff --git a/site/images/deploy08.png b/site/images/deploy08.png deleted file mode 100644 index 9a00da4..0000000 Binary files a/site/images/deploy08.png and /dev/null differ diff --git a/site/images/deploy08_1.png b/site/images/deploy08_1.png deleted file mode 100644 index 9a00da4..0000000 Binary files a/site/images/deploy08_1.png and /dev/null differ diff --git a/site/images/deploy08_2.png b/site/images/deploy08_2.png deleted file mode 100644 index 9a00da4..0000000 Binary files a/site/images/deploy08_2.png and /dev/null differ diff --git a/site/images/deploy08_3.png b/site/images/deploy08_3.png deleted file mode 100644 index 9a00da4..0000000 Binary files a/site/images/deploy08_3.png and /dev/null differ diff --git a/site/images/deploy08_4.png b/site/images/deploy08_4.png deleted file mode 100644 index 9a00da4..0000000 Binary files a/site/images/deploy08_4.png and /dev/null differ diff --git a/site/images/deploy09.png b/site/images/deploy09.png deleted file mode 100644 index 7bee4d8..0000000 Binary files a/site/images/deploy09.png and /dev/null differ diff --git a/site/images/deploy09_1.png b/site/images/deploy09_1.png deleted file mode 100644 index 7bee4d8..0000000 Binary files a/site/images/deploy09_1.png and /dev/null differ diff --git a/site/images/deploy09_2.png b/site/images/deploy09_2.png deleted file mode 100644 index 7bee4d8..0000000 Binary files a/site/images/deploy09_2.png and /dev/null differ diff --git a/site/images/deploy09_3.png b/site/images/deploy09_3.png deleted file mode 100644 index 7bee4d8..0000000 Binary files a/site/images/deploy09_3.png and /dev/null differ diff --git a/site/images/deploy09_4.png b/site/images/deploy09_4.png deleted file mode 100644 index 7bee4d8..0000000 Binary files a/site/images/deploy09_4.png and /dev/null differ diff --git a/site/images/deploy10.png b/site/images/deploy10.png deleted file mode 100644 index eed1841..0000000 Binary files a/site/images/deploy10.png and /dev/null differ diff --git a/site/images/deploy10_1.png b/site/images/deploy10_1.png deleted file mode 100644 index eed1841..0000000 Binary files a/site/images/deploy10_1.png and /dev/null differ diff --git a/site/images/deploy10_2.png b/site/images/deploy10_2.png deleted file mode 100644 index eed1841..0000000 Binary files a/site/images/deploy10_2.png and /dev/null differ diff --git a/site/images/deploy10_3.png b/site/images/deploy10_3.png deleted file mode 100644 index eed1841..0000000 Binary files a/site/images/deploy10_3.png and /dev/null differ diff --git a/site/images/deploy10_4.png b/site/images/deploy10_4.png deleted file mode 100644 index eed1841..0000000 Binary files a/site/images/deploy10_4.png and /dev/null differ diff --git a/site/images/deploy12.png b/site/images/deploy12.png deleted file mode 100644 index aa9d2bf..0000000 Binary files a/site/images/deploy12.png and /dev/null differ diff --git a/site/images/deploy13.png b/site/images/deploy13.png deleted file mode 100644 index dfbb16a..0000000 Binary files a/site/images/deploy13.png and /dev/null differ diff --git a/site/images/deploy13_1.png b/site/images/deploy13_1.png deleted file mode 100644 index dfbb16a..0000000 Binary files a/site/images/deploy13_1.png and /dev/null differ diff --git a/site/images/deploy13_2.png b/site/images/deploy13_2.png deleted file mode 100644 index dfbb16a..0000000 Binary files a/site/images/deploy13_2.png and /dev/null differ diff --git a/site/images/deploy13_3.png b/site/images/deploy13_3.png deleted file mode 100644 index dfbb16a..0000000 Binary files a/site/images/deploy13_3.png and /dev/null differ diff --git a/site/images/deploy14.png b/site/images/deploy14.png deleted file mode 100644 index 78e06c9..0000000 Binary files a/site/images/deploy14.png and /dev/null differ diff --git a/site/images/deploy14_1.png b/site/images/deploy14_1.png deleted file mode 100644 index 78e06c9..0000000 Binary files a/site/images/deploy14_1.png and /dev/null differ diff --git a/site/images/deploy15.png b/site/images/deploy15.png deleted file mode 100644 index b82ff9a..0000000 Binary files a/site/images/deploy15.png and /dev/null differ diff --git a/site/images/deploy15_1.png b/site/images/deploy15_1.png deleted file mode 100644 index b82ff9a..0000000 Binary files a/site/images/deploy15_1.png and /dev/null differ diff --git a/site/images/deploy16.png b/site/images/deploy16.png deleted file mode 100644 index 971f701..0000000 Binary files a/site/images/deploy16.png and /dev/null differ diff --git a/site/images/deploy16_1.png b/site/images/deploy16_1.png deleted file mode 100644 index 971f701..0000000 Binary files a/site/images/deploy16_1.png and /dev/null differ diff --git a/site/images/deploy17.png b/site/images/deploy17.png deleted file mode 100644 index 9fd9571..0000000 Binary files a/site/images/deploy17.png and /dev/null differ diff --git a/site/images/deploy17_1.png b/site/images/deploy17_1.png deleted file mode 100644 index 9fd9571..0000000 Binary files a/site/images/deploy17_1.png and /dev/null differ diff --git a/site/images/deploy17_2.png b/site/images/deploy17_2.png deleted file mode 100644 index 9fd9571..0000000 Binary files a/site/images/deploy17_2.png and /dev/null differ diff --git a/site/images/deploy18.png b/site/images/deploy18.png deleted file mode 100644 index 4819dce..0000000 Binary files a/site/images/deploy18.png and /dev/null differ diff --git a/site/images/edit b/site/images/edit deleted file mode 100644 index ae67449..0000000 --- a/site/images/edit +++ /dev/null @@ -1,145 +0,0 @@ -[External] Steps to Enable MIG Support in Kubernetes - Google Docs
\ No newline at end of file diff --git a/site/images/enableuser.png b/site/images/enableuser.png deleted file mode 100644 index e1708c5..0000000 Binary files a/site/images/enableuser.png and /dev/null differ diff --git a/site/images/enableuser_1.png b/site/images/enableuser_1.png deleted file mode 100644 index e1708c5..0000000 Binary files a/site/images/enableuser_1.png and /dev/null differ diff --git a/site/images/etcd-get01.png b/site/images/etcd-get01.png deleted file mode 100644 index 5b9b202..0000000 Binary files a/site/images/etcd-get01.png and /dev/null differ diff --git a/site/images/etcd01.png b/site/images/etcd01.png deleted file mode 100644 index 0d6476d..0000000 Binary files a/site/images/etcd01.png and /dev/null differ diff --git a/site/images/etcd04.png b/site/images/etcd04.png deleted file mode 100644 index f494b38..0000000 Binary files a/site/images/etcd04.png and /dev/null differ diff --git a/site/images/etcd05.png b/site/images/etcd05.png deleted file mode 100644 index 770b6e7..0000000 Binary files a/site/images/etcd05.png and /dev/null differ diff --git a/site/images/etcd06.png b/site/images/etcd06.png deleted file mode 100644 index 528d3e5..0000000 Binary files a/site/images/etcd06.png and /dev/null differ diff --git a/site/images/etcd07.png b/site/images/etcd07.png deleted file mode 100644 index 9e9f725..0000000 Binary files a/site/images/etcd07.png and /dev/null differ diff --git a/site/images/etcd08.png b/site/images/etcd08.png deleted file mode 100644 index 002d0c5..0000000 Binary files a/site/images/etcd08.png and /dev/null differ diff --git a/site/images/etcd09.png b/site/images/etcd09.png deleted file mode 100644 index d5cfbeb..0000000 Binary files a/site/images/etcd09.png and /dev/null differ diff --git a/site/images/exclusive01.png b/site/images/exclusive01.png deleted file mode 100644 index e76fbdf..0000000 Binary files a/site/images/exclusive01.png and /dev/null differ diff --git a/site/images/exclusive01_1.png b/site/images/exclusive01_1.png deleted file mode 100644 index e76fbdf..0000000 Binary files a/site/images/exclusive01_1.png and /dev/null differ diff --git a/site/images/exclusive02.png b/site/images/exclusive02.png deleted file mode 100644 index dc5124d..0000000 Binary files a/site/images/exclusive02.png and /dev/null differ diff --git a/site/images/exclusive02_1.png b/site/images/exclusive02_1.png deleted file mode 100644 index dc5124d..0000000 Binary files a/site/images/exclusive02_1.png and /dev/null differ diff --git a/site/images/exclusive03.png b/site/images/exclusive03.png deleted file mode 100644 index 653c0ec..0000000 Binary files a/site/images/exclusive03.png and /dev/null differ diff --git a/site/images/exclusive03_1.png b/site/images/exclusive03_1.png deleted file mode 100644 index 653c0ec..0000000 Binary files a/site/images/exclusive03_1.png and /dev/null differ diff --git a/site/images/exclusive04.png b/site/images/exclusive04.png deleted file mode 100644 index 32cf7d2..0000000 Binary files a/site/images/exclusive04.png and /dev/null differ diff --git a/site/images/exclusive04_1.png b/site/images/exclusive04_1.png deleted file mode 100644 index 32cf7d2..0000000 Binary files a/site/images/exclusive04_1.png and /dev/null differ diff --git a/site/images/falco-exporter-install-1.png b/site/images/falco-exporter-install-1.png deleted file mode 100644 index 371093a..0000000 Binary files a/site/images/falco-exporter-install-1.png and /dev/null differ diff --git a/site/images/falco-exporter-install-2.png b/site/images/falco-exporter-install-2.png deleted file mode 100644 index 0d8a176..0000000 Binary files a/site/images/falco-exporter-install-2.png and /dev/null differ diff --git a/site/images/falco-exporter-install-3.png b/site/images/falco-exporter-install-3.png deleted file mode 100644 index 8137208..0000000 Binary files a/site/images/falco-exporter-install-3.png and /dev/null differ diff --git a/site/images/falco-exporter-install-4.png b/site/images/falco-exporter-install-4.png deleted file mode 100644 index 2c34bf0..0000000 Binary files a/site/images/falco-exporter-install-4.png and /dev/null differ diff --git a/site/images/falco-exporter-install-5.png b/site/images/falco-exporter-install-5.png deleted file mode 100644 index d7d8586..0000000 Binary files a/site/images/falco-exporter-install-5.png and /dev/null differ diff --git a/site/images/falco-exporter-install-6.png b/site/images/falco-exporter-install-6.png deleted file mode 100644 index e326082..0000000 Binary files a/site/images/falco-exporter-install-6.png and /dev/null differ diff --git a/site/images/falco-install-1.png b/site/images/falco-install-1.png deleted file mode 100644 index 9f001a8..0000000 Binary files a/site/images/falco-install-1.png and /dev/null differ diff --git a/site/images/falco-install-2.png b/site/images/falco-install-2.png deleted file mode 100644 index 20f19de..0000000 Binary files a/site/images/falco-install-2.png and /dev/null differ diff --git a/site/images/falco-install-3.png b/site/images/falco-install-3.png deleted file mode 100644 index 82bf30b..0000000 Binary files a/site/images/falco-install-3.png and /dev/null differ diff --git a/site/images/falco-install-4.png b/site/images/falco-install-4.png deleted file mode 100644 index 8dd1ee0..0000000 Binary files a/site/images/falco-install-4.png and /dev/null differ diff --git a/site/images/falco_cluster.png b/site/images/falco_cluster.png deleted file mode 100644 index d4d4101..0000000 Binary files a/site/images/falco_cluster.png and /dev/null differ diff --git a/site/images/falco_cluster_1.png b/site/images/falco_cluster_1.png deleted file mode 100644 index d4d4101..0000000 Binary files a/site/images/falco_cluster_1.png and /dev/null differ diff --git a/site/images/favicon.ico b/site/images/favicon.ico deleted file mode 100644 index a6e4cd4..0000000 Binary files a/site/images/favicon.ico and /dev/null differ diff --git a/site/images/favicon1.ico b/site/images/favicon1.ico deleted file mode 100644 index 5642350..0000000 Binary files a/site/images/favicon1.ico and /dev/null differ diff --git a/site/images/fd02.png b/site/images/fd02.png deleted file mode 100644 index fb3f8ce..0000000 Binary files a/site/images/fd02.png and /dev/null differ diff --git a/site/images/fd03.png b/site/images/fd03.png deleted file mode 100644 index 5661464..0000000 Binary files a/site/images/fd03.png and /dev/null differ diff --git a/site/images/fdpractice.png b/site/images/fdpractice.png deleted file mode 100644 index 33fefd4..0000000 Binary files a/site/images/fdpractice.png and /dev/null differ diff --git a/site/images/gmagpiereport.png b/site/images/gmagpiereport.png deleted file mode 100644 index f9505d2..0000000 Binary files a/site/images/gmagpiereport.png and /dev/null differ diff --git a/site/images/gpu_mig03.png b/site/images/gpu_mig03.png deleted file mode 100644 index 3b6ae6b..0000000 Binary files a/site/images/gpu_mig03.png and /dev/null differ diff --git a/site/images/group00.png b/site/images/group00.png deleted file mode 100644 index 7c019e6..0000000 Binary files a/site/images/group00.png and /dev/null differ diff --git a/site/images/group01.png b/site/images/group01.png deleted file mode 100644 index 426efd4..0000000 Binary files a/site/images/group01.png and /dev/null differ diff --git a/site/images/group02.png b/site/images/group02.png deleted file mode 100644 index fc6f1c2..0000000 Binary files a/site/images/group02.png and /dev/null differ diff --git a/site/images/group03.png b/site/images/group03.png deleted file mode 100644 index 4fb0522..0000000 Binary files a/site/images/group03.png and /dev/null differ diff --git a/site/images/group04.png b/site/images/group04.png deleted file mode 100644 index d887759..0000000 Binary files a/site/images/group04.png and /dev/null differ diff --git a/site/images/group05.png b/site/images/group05.png deleted file mode 100644 index 35dcd4e..0000000 Binary files a/site/images/group05.png and /dev/null differ diff --git a/site/images/group06.png b/site/images/group06.png deleted file mode 100644 index 6f8eeeb..0000000 Binary files a/site/images/group06.png and /dev/null differ diff --git a/site/images/helm01.png b/site/images/helm01.png deleted file mode 100644 index 5cc8f6d..0000000 Binary files a/site/images/helm01.png and /dev/null differ diff --git a/site/images/helm02.png b/site/images/helm02.png deleted file mode 100644 index 7dc3dca..0000000 Binary files a/site/images/helm02.png and /dev/null differ diff --git a/site/images/helm03.png b/site/images/helm03.png deleted file mode 100644 index 023c361..0000000 Binary files a/site/images/helm03.png and /dev/null differ diff --git a/site/images/helm04.png b/site/images/helm04.png deleted file mode 100644 index dabb1d6..0000000 Binary files a/site/images/helm04.png and /dev/null differ diff --git a/site/images/helm05.png b/site/images/helm05.png deleted file mode 100644 index 31c287d..0000000 Binary files a/site/images/helm05.png and /dev/null differ diff --git a/site/images/helm06.png b/site/images/helm06.png deleted file mode 100644 index ff986ee..0000000 Binary files a/site/images/helm06.png and /dev/null differ diff --git a/site/images/helm07.png b/site/images/helm07.png deleted file mode 100644 index 939b100..0000000 Binary files a/site/images/helm07.png and /dev/null differ diff --git a/site/images/helm08.png b/site/images/helm08.png deleted file mode 100644 index 0868983..0000000 Binary files a/site/images/helm08.png and /dev/null differ diff --git a/site/images/helm09.png b/site/images/helm09.png deleted file mode 100644 index eb80566..0000000 Binary files a/site/images/helm09.png and /dev/null differ diff --git a/site/images/helm10.png b/site/images/helm10.png deleted file mode 100644 index a4acff6..0000000 Binary files a/site/images/helm10.png and /dev/null differ diff --git a/site/images/helm11.png b/site/images/helm11.png deleted file mode 100644 index 8bc0d50..0000000 Binary files a/site/images/helm11.png and /dev/null differ diff --git a/site/images/helm12.png b/site/images/helm12.png deleted file mode 100644 index 08cefee..0000000 Binary files a/site/images/helm12.png and /dev/null differ diff --git a/site/images/helm13.png b/site/images/helm13.png deleted file mode 100644 index 0854b37..0000000 Binary files a/site/images/helm13.png and /dev/null differ diff --git a/site/images/helm14.png b/site/images/helm14.png deleted file mode 100644 index 6b1a16b..0000000 Binary files a/site/images/helm14.png and /dev/null differ diff --git a/site/images/helm2048.png b/site/images/helm2048.png deleted file mode 100644 index 98aa448..0000000 Binary files a/site/images/helm2048.png and /dev/null differ diff --git a/site/images/helmdetail.png b/site/images/helmdetail.png deleted file mode 100644 index 7d9bab9..0000000 Binary files a/site/images/helmdetail.png and /dev/null differ diff --git a/site/images/helmlist.png b/site/images/helmlist.png deleted file mode 100644 index 0d280b2..0000000 Binary files a/site/images/helmlist.png and /dev/null differ diff --git a/site/images/helmsyn.png b/site/images/helmsyn.png deleted file mode 100644 index b55501f..0000000 Binary files a/site/images/helmsyn.png and /dev/null differ diff --git a/site/images/iam.png b/site/images/iam.png deleted file mode 100644 index 7cd3f31..0000000 Binary files a/site/images/iam.png and /dev/null differ diff --git a/site/images/ingress.svg b/site/images/ingress.svg deleted file mode 100644 index 450a0aa..0000000 --- a/site/images/ingress.svg +++ /dev/null @@ -1 +0,0 @@ -
cluster
Ingress-managed
load balancer
routing rule
Ingress
Pod
Service
Pod
client
\ No newline at end of file diff --git a/site/images/ingress01.png b/site/images/ingress01.png deleted file mode 100644 index 8c80aa6..0000000 Binary files a/site/images/ingress01.png and /dev/null differ diff --git a/site/images/ingress02.png b/site/images/ingress02.png deleted file mode 100644 index 45e9731..0000000 Binary files a/site/images/ingress02.png and /dev/null differ diff --git a/site/images/ingress03.png b/site/images/ingress03.png deleted file mode 100644 index 04abd5d..0000000 Binary files a/site/images/ingress03.png and /dev/null differ diff --git a/site/images/ingress04.png b/site/images/ingress04.png deleted file mode 100644 index 3b0b44b..0000000 Binary files a/site/images/ingress04.png and /dev/null differ diff --git a/site/images/ingress05.png b/site/images/ingress05.png deleted file mode 100644 index c3220c5..0000000 Binary files a/site/images/ingress05.png and /dev/null differ diff --git a/site/images/inspect01.png b/site/images/inspect01.png deleted file mode 100644 index 9f9a187..0000000 Binary files a/site/images/inspect01.png and /dev/null differ diff --git a/site/images/inspect03.png b/site/images/inspect03.png deleted file mode 100644 index 74fe6b3..0000000 Binary files a/site/images/inspect03.png and /dev/null differ diff --git a/site/images/inspect05.png b/site/images/inspect05.png deleted file mode 100644 index 36b5e4f..0000000 Binary files a/site/images/inspect05.png and /dev/null differ diff --git a/site/images/installcronhpa.png b/site/images/installcronhpa.png deleted file mode 100644 index 6675a13..0000000 Binary files a/site/images/installcronhpa.png and /dev/null differ diff --git a/site/images/installcronhpa1.png b/site/images/installcronhpa1.png deleted file mode 100644 index 10db2e8..0000000 Binary files a/site/images/installcronhpa1.png and /dev/null differ diff --git a/site/images/installcronhpa2.png b/site/images/installcronhpa2.png deleted file mode 100644 index e2df9eb..0000000 Binary files a/site/images/installcronhpa2.png and /dev/null differ diff --git a/site/images/installcronhpa3.png b/site/images/installcronhpa3.png deleted file mode 100644 index 4c0a68a..0000000 Binary files a/site/images/installcronhpa3.png and /dev/null differ diff --git a/site/images/job01.png b/site/images/job01.png deleted file mode 100644 index 8805b79..0000000 Binary files a/site/images/job01.png and /dev/null differ diff --git a/site/images/job02-1.png b/site/images/job02-1.png deleted file mode 100644 index e81b33e..0000000 Binary files a/site/images/job02-1.png and /dev/null differ diff --git a/site/images/job02.png b/site/images/job02.png deleted file mode 100644 index b494ee6..0000000 Binary files a/site/images/job02.png and /dev/null differ diff --git a/site/images/job03.png b/site/images/job03.png deleted file mode 100644 index d2b816f..0000000 Binary files a/site/images/job03.png and /dev/null differ diff --git a/site/images/job04.png b/site/images/job04.png deleted file mode 100644 index c25a51b..0000000 Binary files a/site/images/job04.png and /dev/null differ diff --git a/site/images/job08.png b/site/images/job08.png deleted file mode 100644 index fdf9a5d..0000000 Binary files a/site/images/job08.png and /dev/null differ diff --git a/site/images/job09.png b/site/images/job09.png deleted file mode 100644 index 7e46001..0000000 Binary files a/site/images/job09.png and /dev/null differ diff --git a/site/images/join001.png b/site/images/join001.png deleted file mode 100644 index f2e3fd9..0000000 Binary files a/site/images/join001.png and /dev/null differ diff --git a/site/images/join002.png b/site/images/join002.png deleted file mode 100644 index 2999752..0000000 Binary files a/site/images/join002.png and /dev/null differ diff --git a/site/images/join003.png b/site/images/join003.png deleted file mode 100644 index 386aabe..0000000 Binary files a/site/images/join003.png and /dev/null differ diff --git a/site/images/joingroup01.png b/site/images/joingroup01.png deleted file mode 100644 index 75eea82..0000000 Binary files a/site/images/joingroup01.png and /dev/null differ diff --git a/site/images/joingroup02.png b/site/images/joingroup02.png deleted file mode 100644 index 63b680f..0000000 Binary files a/site/images/joingroup02.png and /dev/null differ diff --git a/site/images/labels01.png b/site/images/labels01.png deleted file mode 100644 index 587bade..0000000 Binary files a/site/images/labels01.png and /dev/null differ diff --git a/site/images/labels02.png b/site/images/labels02.png deleted file mode 100644 index 1ae7e17..0000000 Binary files a/site/images/labels02.png and /dev/null differ diff --git a/site/images/lang00.png b/site/images/lang00.png deleted file mode 100644 index 7e9eeee..0000000 Binary files a/site/images/lang00.png and /dev/null differ diff --git a/site/images/lang01.png b/site/images/lang01.png deleted file mode 100644 index 6e9a6e7..0000000 Binary files a/site/images/lang01.png and /dev/null differ diff --git a/site/images/lang01_1.png b/site/images/lang01_1.png deleted file mode 100644 index 6e9a6e7..0000000 Binary files a/site/images/lang01_1.png and /dev/null differ diff --git a/site/images/lang02.png b/site/images/lang02.png deleted file mode 100644 index 0f623f5..0000000 Binary files a/site/images/lang02.png and /dev/null differ diff --git a/site/images/lang03.png b/site/images/lang03.png deleted file mode 100644 index 465270e..0000000 Binary files a/site/images/lang03.png and /dev/null differ diff --git a/site/images/ldap02.png b/site/images/ldap02.png deleted file mode 100644 index 3639210..0000000 Binary files a/site/images/ldap02.png and /dev/null differ diff --git a/site/images/mail01.png b/site/images/mail01.png deleted file mode 100644 index 0910c6e..0000000 Binary files a/site/images/mail01.png and /dev/null differ diff --git a/site/images/mail02.png b/site/images/mail02.png deleted file mode 100644 index 9577030..0000000 Binary files a/site/images/mail02.png and /dev/null differ diff --git a/site/images/mail03.png b/site/images/mail03.png deleted file mode 100644 index ae7aeee..0000000 Binary files a/site/images/mail03.png and /dev/null differ diff --git a/site/images/mailbox.png b/site/images/mailbox.png deleted file mode 100644 index 5d7ec89..0000000 Binary files a/site/images/mailbox.png and /dev/null differ diff --git a/site/images/mig2c.4g.20gb.png b/site/images/mig2c.4g.20gb.png deleted file mode 100644 index f55e9c9..0000000 Binary files a/site/images/mig2c.4g.20gb.png and /dev/null differ diff --git a/site/images/mig_1c.4g.20gb.png b/site/images/mig_1c.4g.20gb.png deleted file mode 100644 index 93f3027..0000000 Binary files a/site/images/mig_1c.4g.20gb.png and /dev/null differ diff --git a/site/images/mig_1g5gb.png b/site/images/mig_1g5gb.png deleted file mode 100644 index cd20462..0000000 Binary files a/site/images/mig_1g5gb.png and /dev/null differ diff --git a/site/images/mig_4g20gb.png b/site/images/mig_4g20gb.png deleted file mode 100644 index b4c640f..0000000 Binary files a/site/images/mig_4g20gb.png and /dev/null differ diff --git a/site/images/mig_7m.png b/site/images/mig_7m.png deleted file mode 100644 index 82698f9..0000000 Binary files a/site/images/mig_7m.png and /dev/null differ diff --git a/site/images/mig_overview.png b/site/images/mig_overview.png deleted file mode 100644 index d20cf55..0000000 Binary files a/site/images/mig_overview.png and /dev/null differ diff --git a/site/images/multi-arch-helm.png b/site/images/multi-arch-helm.png deleted file mode 100644 index b10340e..0000000 Binary files a/site/images/multi-arch-helm.png and /dev/null differ diff --git a/site/images/networkpolicy01.png b/site/images/networkpolicy01.png deleted file mode 100644 index c5534c4..0000000 Binary files a/site/images/networkpolicy01.png and /dev/null differ diff --git a/site/images/networkpolicy02.png b/site/images/networkpolicy02.png deleted file mode 100644 index d7786a0..0000000 Binary files a/site/images/networkpolicy02.png and /dev/null differ diff --git a/site/images/networkpolicy03.png b/site/images/networkpolicy03.png deleted file mode 100644 index 3f4b353..0000000 Binary files a/site/images/networkpolicy03.png and /dev/null differ diff --git a/site/images/networkpolicy04.png b/site/images/networkpolicy04.png deleted file mode 100644 index e3887df..0000000 Binary files a/site/images/networkpolicy04.png and /dev/null differ diff --git a/site/images/networkpolicy05.png b/site/images/networkpolicy05.png deleted file mode 100644 index a760348..0000000 Binary files a/site/images/networkpolicy05.png and /dev/null differ diff --git a/site/images/networkpolicy06.png b/site/images/networkpolicy06.png deleted file mode 100644 index 9a9ff6d..0000000 Binary files a/site/images/networkpolicy06.png and /dev/null differ diff --git a/site/images/networkpolicy07.png b/site/images/networkpolicy07.png deleted file mode 100644 index cb95071..0000000 Binary files a/site/images/networkpolicy07.png and /dev/null differ diff --git a/site/images/networkpolicy08.png b/site/images/networkpolicy08.png deleted file mode 100644 index 77b61c4..0000000 Binary files a/site/images/networkpolicy08.png and /dev/null differ diff --git a/site/images/networkpolicy09.png b/site/images/networkpolicy09.png deleted file mode 100644 index 8cb5b2d..0000000 Binary files a/site/images/networkpolicy09.png and /dev/null differ diff --git a/site/images/networkpolicy10.png b/site/images/networkpolicy10.png deleted file mode 100644 index 87708fe..0000000 Binary files a/site/images/networkpolicy10.png and /dev/null differ diff --git a/site/images/networkpolicy11.png b/site/images/networkpolicy11.png deleted file mode 100644 index b254d95..0000000 Binary files a/site/images/networkpolicy11.png and /dev/null differ diff --git a/site/images/networkpolicy12.png b/site/images/networkpolicy12.png deleted file mode 100644 index 73d5bc1..0000000 Binary files a/site/images/networkpolicy12.png and /dev/null differ diff --git a/site/images/networkpolicy13.png b/site/images/networkpolicy13.png deleted file mode 100644 index 3672879..0000000 Binary files a/site/images/networkpolicy13.png and /dev/null differ diff --git a/site/images/newrole01.png b/site/images/newrole01.png deleted file mode 100644 index 0697210..0000000 Binary files a/site/images/newrole01.png and /dev/null differ diff --git a/site/images/newrole02.png b/site/images/newrole02.png deleted file mode 100644 index 94dfa28..0000000 Binary files a/site/images/newrole02.png and /dev/null differ diff --git a/site/images/newrole03.png b/site/images/newrole03.png deleted file mode 100644 index 92be81d..0000000 Binary files a/site/images/newrole03.png and /dev/null differ diff --git a/site/images/newrole04.png b/site/images/newrole04.png deleted file mode 100644 index 7f6f5a3..0000000 Binary files a/site/images/newrole04.png and /dev/null differ diff --git a/site/images/newrole05.png b/site/images/newrole05.png deleted file mode 100644 index 5b64f91..0000000 Binary files a/site/images/newrole05.png and /dev/null differ diff --git a/site/images/newrole06.png b/site/images/newrole06.png deleted file mode 100644 index 56c7d1f..0000000 Binary files a/site/images/newrole06.png and /dev/null differ diff --git a/site/images/newrole07.png b/site/images/newrole07.png deleted file mode 100644 index 8626771..0000000 Binary files a/site/images/newrole07.png and /dev/null differ diff --git a/site/images/newrole08.png b/site/images/newrole08.png deleted file mode 100644 index bf4af76..0000000 Binary files a/site/images/newrole08.png and /dev/null differ diff --git a/site/images/newrole09.png b/site/images/newrole09.png deleted file mode 100644 index 0766159..0000000 Binary files a/site/images/newrole09.png and /dev/null differ diff --git a/site/images/newrole10.png b/site/images/newrole10.png deleted file mode 100644 index da98ec6..0000000 Binary files a/site/images/newrole10.png and /dev/null differ diff --git a/site/images/newrole11.png b/site/images/newrole11.png deleted file mode 100644 index 9b75fcc..0000000 Binary files a/site/images/newrole11.png and /dev/null differ diff --git a/site/images/node-details01.png b/site/images/node-details01.png deleted file mode 100644 index 3086c9f..0000000 Binary files a/site/images/node-details01.png and /dev/null differ diff --git a/site/images/node-details02.png b/site/images/node-details02.png deleted file mode 100644 index f9a361f..0000000 Binary files a/site/images/node-details02.png and /dev/null differ diff --git a/site/images/node-details03.png b/site/images/node-details03.png deleted file mode 100644 index 88154cc..0000000 Binary files a/site/images/node-details03.png and /dev/null differ diff --git a/site/images/npu-smi-info.png b/site/images/npu-smi-info.png deleted file mode 100644 index 33957cf..0000000 Binary files a/site/images/npu-smi-info.png and /dev/null differ diff --git a/site/images/nvidia-gpu-operator-image.jpg b/site/images/nvidia-gpu-operator-image.jpg deleted file mode 100644 index 064210a..0000000 Binary files a/site/images/nvidia-gpu-operator-image.jpg and /dev/null differ diff --git a/site/images/oidc01.png b/site/images/oidc01.png deleted file mode 100644 index b82d157..0000000 Binary files a/site/images/oidc01.png and /dev/null differ diff --git a/site/images/olm.png b/site/images/olm.png deleted file mode 100644 index 63fde94..0000000 Binary files a/site/images/olm.png and /dev/null differ diff --git a/site/images/olm1.png b/site/images/olm1.png deleted file mode 100644 index 2e0d46b..0000000 Binary files a/site/images/olm1.png and /dev/null differ diff --git a/site/images/olm2.png b/site/images/olm2.png deleted file mode 100644 index 1c0ac34..0000000 Binary files a/site/images/olm2.png and /dev/null differ diff --git a/site/images/olm3.png b/site/images/olm3.png deleted file mode 100644 index 1f6ee33..0000000 Binary files a/site/images/olm3.png and /dev/null differ diff --git a/site/images/operations01.png b/site/images/operations01.png deleted file mode 100644 index d404ff2..0000000 Binary files a/site/images/operations01.png and /dev/null differ diff --git a/site/images/operations02.png b/site/images/operations02.png deleted file mode 100644 index c5fed9f..0000000 Binary files a/site/images/operations02.png and /dev/null differ diff --git a/site/images/operations03.png b/site/images/operations03.png deleted file mode 100644 index 67285b6..0000000 Binary files a/site/images/operations03.png and /dev/null differ diff --git a/site/images/perm01.png b/site/images/perm01.png deleted file mode 100644 index d07470a..0000000 Binary files a/site/images/perm01.png and /dev/null differ diff --git a/site/images/perm02.png b/site/images/perm02.png deleted file mode 100644 index f90a8c0..0000000 Binary files a/site/images/perm02.png and /dev/null differ diff --git a/site/images/perm03.png b/site/images/perm03.png deleted file mode 100644 index 344d198..0000000 Binary files a/site/images/perm03.png and /dev/null differ diff --git a/site/images/perm04.png b/site/images/perm04.png deleted file mode 100644 index 2054ff7..0000000 Binary files a/site/images/perm04.png and /dev/null differ diff --git a/site/images/perm05.png b/site/images/perm05.png deleted file mode 100644 index 285ecdd..0000000 Binary files a/site/images/perm05.png and /dev/null differ diff --git a/site/images/perm06.png b/site/images/perm06.png deleted file mode 100644 index b3a3b9c..0000000 Binary files a/site/images/perm06.png and /dev/null differ diff --git a/site/images/perm07.png b/site/images/perm07.png deleted file mode 100644 index 7a2dad5..0000000 Binary files a/site/images/perm07.png and /dev/null differ diff --git a/site/images/perm08.png b/site/images/perm08.png deleted file mode 100644 index bd2869e..0000000 Binary files a/site/images/perm08.png and /dev/null differ diff --git a/site/images/platform02.png b/site/images/platform02.png deleted file mode 100644 index 036996c..0000000 Binary files a/site/images/platform02.png and /dev/null differ diff --git a/site/images/platform02_1.png b/site/images/platform02_1.png deleted file mode 100644 index 036996c..0000000 Binary files a/site/images/platform02_1.png and /dev/null differ diff --git a/site/images/platform03.png b/site/images/platform03.png deleted file mode 100644 index 51c0353..0000000 Binary files a/site/images/platform03.png and /dev/null differ diff --git a/site/images/platform03_1.png b/site/images/platform03_1.png deleted file mode 100644 index 51c0353..0000000 Binary files a/site/images/platform03_1.png and /dev/null differ diff --git a/site/images/ps01.png b/site/images/ps01.png deleted file mode 100644 index 88202e1..0000000 Binary files a/site/images/ps01.png and /dev/null differ diff --git a/site/images/ps02.png b/site/images/ps02.png deleted file mode 100644 index ad2e4d3..0000000 Binary files a/site/images/ps02.png and /dev/null differ diff --git a/site/images/ps03.png b/site/images/ps03.png deleted file mode 100644 index 5280a1d..0000000 Binary files a/site/images/ps03.png and /dev/null differ diff --git a/site/images/ps04.png b/site/images/ps04.png deleted file mode 100644 index a1a4c56..0000000 Binary files a/site/images/ps04.png and /dev/null differ diff --git a/site/images/ps05.png b/site/images/ps05.png deleted file mode 100644 index 7c5cf93..0000000 Binary files a/site/images/ps05.png and /dev/null differ diff --git a/site/images/ps06.png b/site/images/ps06.png deleted file mode 100644 index cac6cd0..0000000 Binary files a/site/images/ps06.png and /dev/null differ diff --git a/site/images/pv01.png b/site/images/pv01.png deleted file mode 100644 index c95b728..0000000 Binary files a/site/images/pv01.png and /dev/null differ diff --git a/site/images/pv02.png b/site/images/pv02.png deleted file mode 100644 index 03f5290..0000000 Binary files a/site/images/pv02.png and /dev/null differ diff --git a/site/images/pv03.png b/site/images/pv03.png deleted file mode 100644 index f8f4dff..0000000 Binary files a/site/images/pv03.png and /dev/null differ diff --git a/site/images/pv04.png b/site/images/pv04.png deleted file mode 100644 index d81a984..0000000 Binary files a/site/images/pv04.png and /dev/null differ diff --git a/site/images/pv05.png b/site/images/pv05.png deleted file mode 100644 index 45657d8..0000000 Binary files a/site/images/pv05.png and /dev/null differ diff --git a/site/images/pv06.png b/site/images/pv06.png deleted file mode 100644 index 208fa4e..0000000 Binary files a/site/images/pv06.png and /dev/null differ diff --git a/site/images/pv07.png b/site/images/pv07.png deleted file mode 100644 index f919471..0000000 Binary files a/site/images/pv07.png and /dev/null differ diff --git a/site/images/pv08.png b/site/images/pv08.png deleted file mode 100644 index 2150f57..0000000 Binary files a/site/images/pv08.png and /dev/null differ diff --git a/site/images/pv09.png b/site/images/pv09.png deleted file mode 100644 index 1ecbc0d..0000000 Binary files a/site/images/pv09.png and /dev/null differ diff --git a/site/images/pv11.png b/site/images/pv11.png deleted file mode 100644 index d56804e..0000000 Binary files a/site/images/pv11.png and /dev/null differ diff --git a/site/images/pvc01.png b/site/images/pvc01.png deleted file mode 100644 index ec26beb..0000000 Binary files a/site/images/pvc01.png and /dev/null differ diff --git a/site/images/pvc02.png b/site/images/pvc02.png deleted file mode 100644 index d147f28..0000000 Binary files a/site/images/pvc02.png and /dev/null differ diff --git a/site/images/pvc03.png b/site/images/pvc03.png deleted file mode 100644 index 7666d9c..0000000 Binary files a/site/images/pvc03.png and /dev/null differ diff --git a/site/images/pvc04.png b/site/images/pvc04.png deleted file mode 100644 index f022ff1..0000000 Binary files a/site/images/pvc04.png and /dev/null differ diff --git a/site/images/pvc05.png b/site/images/pvc05.png deleted file mode 100644 index a01c933..0000000 Binary files a/site/images/pvc05.png and /dev/null differ diff --git a/site/images/pvc06.png b/site/images/pvc06.png deleted file mode 100644 index 7756b90..0000000 Binary files a/site/images/pvc06.png and /dev/null differ diff --git a/site/images/pvc07.png b/site/images/pvc07.png deleted file mode 100644 index bbad24f..0000000 Binary files a/site/images/pvc07.png and /dev/null differ diff --git a/site/images/pvc08.png b/site/images/pvc08.png deleted file mode 100644 index 24b6bec..0000000 Binary files a/site/images/pvc08.png and /dev/null differ diff --git a/site/images/pvc09.png b/site/images/pvc09.png deleted file mode 100644 index 4dee5a9..0000000 Binary files a/site/images/pvc09.png and /dev/null differ diff --git a/site/images/pvc11.png b/site/images/pvc11.png deleted file mode 100644 index 3e8d575..0000000 Binary files a/site/images/pvc11.png and /dev/null differ diff --git a/site/images/pvc12.png b/site/images/pvc12.png deleted file mode 100644 index 93cf6b4..0000000 Binary files a/site/images/pvc12.png and /dev/null differ diff --git a/site/images/pvc14.png b/site/images/pvc14.png deleted file mode 100644 index a3042f3..0000000 Binary files a/site/images/pvc14.png and /dev/null differ diff --git a/site/images/pvc15.png b/site/images/pvc15.png deleted file mode 100644 index f3a45bc..0000000 Binary files a/site/images/pvc15.png and /dev/null differ diff --git a/site/images/pvc16.png b/site/images/pvc16.png deleted file mode 100644 index 942eaef..0000000 Binary files a/site/images/pvc16.png and /dev/null differ diff --git a/site/images/pvc17.png b/site/images/pvc17.png deleted file mode 100644 index 8d15f3b..0000000 Binary files a/site/images/pvc17.png and /dev/null differ diff --git a/site/images/pvc18.png b/site/images/pvc18.png deleted file mode 100644 index 7352a3e..0000000 Binary files a/site/images/pvc18.png and /dev/null differ diff --git a/site/images/quota01.png b/site/images/quota01.png deleted file mode 100644 index 518f86a..0000000 Binary files a/site/images/quota01.png and /dev/null differ diff --git a/site/images/quota02.png b/site/images/quota02.png deleted file mode 100644 index 18cd477..0000000 Binary files a/site/images/quota02.png and /dev/null differ diff --git a/site/images/quota03.png b/site/images/quota03.png deleted file mode 100644 index 2f64099..0000000 Binary files a/site/images/quota03.png and /dev/null differ diff --git a/site/images/quota04.png b/site/images/quota04.png deleted file mode 100644 index 9ea4d0e..0000000 Binary files a/site/images/quota04.png and /dev/null differ diff --git a/site/images/quota05.png b/site/images/quota05.png deleted file mode 100644 index 8afa2b5..0000000 Binary files a/site/images/quota05.png and /dev/null differ diff --git a/site/images/quota06.png b/site/images/quota06.png deleted file mode 100644 index 6f431fa..0000000 Binary files a/site/images/quota06.png and /dev/null differ diff --git a/site/images/quota07.png b/site/images/quota07.png deleted file mode 100644 index 6017e39..0000000 Binary files a/site/images/quota07.png and /dev/null differ diff --git a/site/images/quota08.png b/site/images/quota08.png deleted file mode 100644 index 7519eb0..0000000 Binary files a/site/images/quota08.png and /dev/null differ diff --git a/site/images/regis01.PNG b/site/images/regis01.PNG deleted file mode 100644 index d17ceec..0000000 Binary files a/site/images/regis01.PNG and /dev/null differ diff --git a/site/images/regis02.PNG b/site/images/regis02.PNG deleted file mode 100644 index 2c7d515..0000000 Binary files a/site/images/regis02.PNG and /dev/null differ diff --git a/site/images/regis03.PNG b/site/images/regis03.PNG deleted file mode 100644 index 88b6854..0000000 Binary files a/site/images/regis03.PNG and /dev/null differ diff --git a/site/images/regis04.PNG b/site/images/regis04.PNG deleted file mode 100644 index 0527e95..0000000 Binary files a/site/images/regis04.PNG and /dev/null differ diff --git a/site/images/regis05.PNG b/site/images/regis05.PNG deleted file mode 100644 index 896c8da..0000000 Binary files a/site/images/regis05.PNG and /dev/null differ diff --git a/site/images/res-gp01.png b/site/images/res-gp01.png deleted file mode 100644 index e43670a..0000000 Binary files a/site/images/res-gp01.png and /dev/null differ diff --git a/site/images/sc-share01.png b/site/images/sc-share01.png deleted file mode 100644 index 78d8a4b..0000000 Binary files a/site/images/sc-share01.png and /dev/null differ diff --git a/site/images/sc-share02.png b/site/images/sc-share02.png deleted file mode 100644 index d83a8e6..0000000 Binary files a/site/images/sc-share02.png and /dev/null differ diff --git a/site/images/sc02.png b/site/images/sc02.png deleted file mode 100644 index 778cfaf..0000000 Binary files a/site/images/sc02.png and /dev/null differ diff --git a/site/images/schedule01.png b/site/images/schedule01.png deleted file mode 100644 index 3c3c0b5..0000000 Binary files a/site/images/schedule01.png and /dev/null differ diff --git a/site/images/schedule01_1.png b/site/images/schedule01_1.png deleted file mode 100644 index 3c3c0b5..0000000 Binary files a/site/images/schedule01_1.png and /dev/null differ diff --git a/site/images/schedule01_2.png b/site/images/schedule01_2.png deleted file mode 100644 index 3c3c0b5..0000000 Binary files a/site/images/schedule01_2.png and /dev/null differ diff --git a/site/images/schedule02.png b/site/images/schedule02.png deleted file mode 100644 index 9b4d962..0000000 Binary files a/site/images/schedule02.png and /dev/null differ diff --git a/site/images/schedule03.png b/site/images/schedule03.png deleted file mode 100644 index 3fd4aae..0000000 Binary files a/site/images/schedule03.png and /dev/null differ diff --git a/site/images/schedule04.png b/site/images/schedule04.png deleted file mode 100644 index 200859c..0000000 Binary files a/site/images/schedule04.png and /dev/null differ diff --git a/site/images/secret01.png b/site/images/secret01.png deleted file mode 100644 index d217b06..0000000 Binary files a/site/images/secret01.png and /dev/null differ diff --git a/site/images/secret01_1.png b/site/images/secret01_1.png deleted file mode 100644 index adcb9bb..0000000 Binary files a/site/images/secret01_1.png and /dev/null differ diff --git a/site/images/secret02.png b/site/images/secret02.png deleted file mode 100644 index cfb1ba8..0000000 Binary files a/site/images/secret02.png and /dev/null differ diff --git a/site/images/secret02_1.png b/site/images/secret02_1.png deleted file mode 100644 index 37d271b..0000000 Binary files a/site/images/secret02_1.png and /dev/null differ diff --git a/site/images/secret03.png b/site/images/secret03.png deleted file mode 100644 index d464154..0000000 Binary files a/site/images/secret03.png and /dev/null differ diff --git a/site/images/secret03_1.png b/site/images/secret03_1.png deleted file mode 100644 index be2ee01..0000000 Binary files a/site/images/secret03_1.png and /dev/null differ diff --git a/site/images/secret05.png b/site/images/secret05.png deleted file mode 100644 index 5331b5a..0000000 Binary files a/site/images/secret05.png and /dev/null differ diff --git a/site/images/secret05_1.png b/site/images/secret05_1.png deleted file mode 100644 index 5331b5a..0000000 Binary files a/site/images/secret05_1.png and /dev/null differ diff --git a/site/images/secret05_2.png b/site/images/secret05_2.png deleted file mode 100644 index 5331b5a..0000000 Binary files a/site/images/secret05_2.png and /dev/null differ diff --git a/site/images/secret06.png b/site/images/secret06.png deleted file mode 100644 index 9feccda..0000000 Binary files a/site/images/secret06.png and /dev/null differ diff --git a/site/images/secret07.png b/site/images/secret07.png deleted file mode 100644 index d5909d5..0000000 Binary files a/site/images/secret07.png and /dev/null differ diff --git a/site/images/secret09.png b/site/images/secret09.png deleted file mode 100644 index f5f3983..0000000 Binary files a/site/images/secret09.png and /dev/null differ diff --git a/site/images/secret10.png b/site/images/secret10.png deleted file mode 100644 index b9956dc..0000000 Binary files a/site/images/secret10.png and /dev/null differ diff --git a/site/images/security01.png b/site/images/security01.png deleted file mode 100644 index ca633e1..0000000 Binary files a/site/images/security01.png and /dev/null differ diff --git a/site/images/security01_1.png b/site/images/security01_1.png deleted file mode 100644 index b144e57..0000000 Binary files a/site/images/security01_1.png and /dev/null differ diff --git a/site/images/security01_2.png b/site/images/security01_2.png deleted file mode 100644 index b144e57..0000000 Binary files a/site/images/security01_2.png and /dev/null differ diff --git a/site/images/security01_3.png b/site/images/security01_3.png deleted file mode 100644 index b144e57..0000000 Binary files a/site/images/security01_3.png and /dev/null differ diff --git a/site/images/security02.png b/site/images/security02.png deleted file mode 100644 index 2a5e1e6..0000000 Binary files a/site/images/security02.png and /dev/null differ diff --git a/site/images/security03.png b/site/images/security03.png deleted file mode 100644 index 4e72b1b..0000000 Binary files a/site/images/security03.png and /dev/null differ diff --git a/site/images/security04.png b/site/images/security04.png deleted file mode 100644 index 7051be6..0000000 Binary files a/site/images/security04.png and /dev/null differ diff --git a/site/images/security04_1.png b/site/images/security04_1.png deleted file mode 100644 index 7051be6..0000000 Binary files a/site/images/security04_1.png and /dev/null differ diff --git a/site/images/security05.png b/site/images/security05.png deleted file mode 100644 index ddd9c76..0000000 Binary files a/site/images/security05.png and /dev/null differ diff --git a/site/images/security06.png b/site/images/security06.png deleted file mode 100644 index 22405f4..0000000 Binary files a/site/images/security06.png and /dev/null differ diff --git a/site/images/security07.png b/site/images/security07.png deleted file mode 100644 index 2b79f79..0000000 Binary files a/site/images/security07.png and /dev/null differ diff --git a/site/images/security09.png b/site/images/security09.png deleted file mode 100644 index c4937c5..0000000 Binary files a/site/images/security09.png and /dev/null differ diff --git a/site/images/security10.png b/site/images/security10.png deleted file mode 100644 index aadb3ff..0000000 Binary files a/site/images/security10.png and /dev/null differ diff --git a/site/images/security11.png b/site/images/security11.png deleted file mode 100644 index c183e08..0000000 Binary files a/site/images/security11.png and /dev/null differ diff --git a/site/images/security12.png b/site/images/security12.png deleted file mode 100644 index bd46827..0000000 Binary files a/site/images/security12.png and /dev/null differ diff --git a/site/images/security13.png b/site/images/security13.png deleted file mode 100644 index b5cfd65..0000000 Binary files a/site/images/security13.png and /dev/null differ diff --git a/site/images/security14.png b/site/images/security14.png deleted file mode 100644 index 133a77f..0000000 Binary files a/site/images/security14.png and /dev/null differ diff --git a/site/images/security15.png b/site/images/security15.png deleted file mode 100644 index 7b1e65d..0000000 Binary files a/site/images/security15.png and /dev/null differ diff --git a/site/images/security16.png b/site/images/security16.png deleted file mode 100644 index cda643f..0000000 Binary files a/site/images/security16.png and /dev/null differ diff --git a/site/images/security17.png b/site/images/security17.png deleted file mode 100644 index 4f8ac69..0000000 Binary files a/site/images/security17.png and /dev/null differ diff --git a/site/images/security18.png b/site/images/security18.png deleted file mode 100644 index 844ea8a..0000000 Binary files a/site/images/security18.png and /dev/null differ diff --git a/site/images/security19.png b/site/images/security19.png deleted file mode 100644 index ffff177..0000000 Binary files a/site/images/security19.png and /dev/null differ diff --git a/site/images/security20.png b/site/images/security20.png deleted file mode 100644 index 66f97b1..0000000 Binary files a/site/images/security20.png and /dev/null differ diff --git a/site/images/service01.png b/site/images/service01.png deleted file mode 100644 index c066d58..0000000 Binary files a/site/images/service01.png and /dev/null differ diff --git a/site/images/service02.png b/site/images/service02.png deleted file mode 100644 index 8f4e3e6..0000000 Binary files a/site/images/service02.png and /dev/null differ diff --git a/site/images/settings01.png b/site/images/settings01.png deleted file mode 100644 index 802484b..0000000 Binary files a/site/images/settings01.png and /dev/null differ diff --git a/site/images/snapshot01.png b/site/images/snapshot01.png deleted file mode 100644 index 3f2c416..0000000 Binary files a/site/images/snapshot01.png and /dev/null differ diff --git a/site/images/snapshot02.png b/site/images/snapshot02.png deleted file mode 100644 index 119355e..0000000 Binary files a/site/images/snapshot02.png and /dev/null differ diff --git a/site/images/snapshot03.png b/site/images/snapshot03.png deleted file mode 100644 index 0b4b9aa..0000000 Binary files a/site/images/snapshot03.png and /dev/null differ diff --git a/site/images/snapshot04.png b/site/images/snapshot04.png deleted file mode 100644 index e714c6a..0000000 Binary files a/site/images/snapshot04.png and /dev/null differ diff --git a/site/images/snapshot05.png b/site/images/snapshot05.png deleted file mode 100644 index b939af5..0000000 Binary files a/site/images/snapshot05.png and /dev/null differ diff --git a/site/images/sophon.png b/site/images/sophon.png deleted file mode 100644 index 63b7907..0000000 Binary files a/site/images/sophon.png and /dev/null differ diff --git a/site/images/sso1.png b/site/images/sso1.png deleted file mode 100644 index 2bb01bd..0000000 Binary files a/site/images/sso1.png and /dev/null differ diff --git a/site/images/sso3.png b/site/images/sso3.png deleted file mode 100644 index d666dad..0000000 Binary files a/site/images/sso3.png and /dev/null differ diff --git a/site/images/state01.png b/site/images/state01.png deleted file mode 100644 index ceeabb5..0000000 Binary files a/site/images/state01.png and /dev/null differ diff --git a/site/images/state02.png b/site/images/state02.png deleted file mode 100644 index c51593c..0000000 Binary files a/site/images/state02.png and /dev/null differ diff --git a/site/images/state03yaml.png b/site/images/state03yaml.png deleted file mode 100644 index c67b0ce..0000000 Binary files a/site/images/state03yaml.png and /dev/null differ diff --git a/site/images/state05.png b/site/images/state05.png deleted file mode 100644 index 8156821..0000000 Binary files a/site/images/state05.png and /dev/null differ diff --git a/site/images/state10.png b/site/images/state10.png deleted file mode 100644 index e443570..0000000 Binary files a/site/images/state10.png and /dev/null differ diff --git a/site/images/state11.png b/site/images/state11.png deleted file mode 100644 index 85518cb..0000000 Binary files a/site/images/state11.png and /dev/null differ diff --git a/site/images/state12.png b/site/images/state12.png deleted file mode 100644 index a642027..0000000 Binary files a/site/images/state12.png and /dev/null differ diff --git a/site/images/suanova.png b/site/images/suanova.png deleted file mode 100644 index cbe6548..0000000 Binary files a/site/images/suanova.png and /dev/null differ diff --git a/site/images/taint-add-remove.png b/site/images/taint-add-remove.png deleted file mode 100644 index 89e86c7..0000000 Binary files a/site/images/taint-add-remove.png and /dev/null differ diff --git a/site/images/taint-change.png b/site/images/taint-change.png deleted file mode 100644 index c2ae2de..0000000 Binary files a/site/images/taint-change.png and /dev/null differ diff --git a/site/images/taint-click--cluster-name.png b/site/images/taint-click--cluster-name.png deleted file mode 100644 index 0d1d649..0000000 Binary files a/site/images/taint-click--cluster-name.png and /dev/null differ diff --git a/site/images/tep04.png b/site/images/tep04.png deleted file mode 100644 index f6e74f1..0000000 Binary files a/site/images/tep04.png and /dev/null differ diff --git a/site/images/tep05.png b/site/images/tep05.png deleted file mode 100644 index 841c588..0000000 Binary files a/site/images/tep05.png and /dev/null differ diff --git a/site/images/upgradeclsuter00.png b/site/images/upgradeclsuter00.png deleted file mode 100644 index 998fb73..0000000 Binary files a/site/images/upgradeclsuter00.png and /dev/null differ diff --git a/site/images/upgradecluster01.png b/site/images/upgradecluster01.png deleted file mode 100644 index 1b36e6d..0000000 Binary files a/site/images/upgradecluster01.png and /dev/null differ diff --git a/site/images/upgradecluster02.png b/site/images/upgradecluster02.png deleted file mode 100644 index 80a250c..0000000 Binary files a/site/images/upgradecluster02.png and /dev/null differ diff --git a/site/images/upgradecluster03.png b/site/images/upgradecluster03.png deleted file mode 100644 index 2d6334f..0000000 Binary files a/site/images/upgradecluster03.png and /dev/null differ diff --git a/site/images/user_configmap_to_volume.jpg b/site/images/user_configmap_to_volume.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/vgpu-addon.png b/site/images/vgpu-addon.png deleted file mode 100644 index a0ceafc..0000000 Binary files a/site/images/vgpu-addon.png and /dev/null differ diff --git a/site/images/vgpu-cluster.png b/site/images/vgpu-cluster.png deleted file mode 100644 index 140e1d3..0000000 Binary files a/site/images/vgpu-cluster.png and /dev/null differ diff --git a/site/images/vgpu-deployment.png b/site/images/vgpu-deployment.png deleted file mode 100644 index 7d79d08..0000000 Binary files a/site/images/vgpu-deployment.png and /dev/null differ diff --git a/site/images/vgpu-pod.png b/site/images/vgpu-pod.png deleted file mode 100644 index a5d0323..0000000 Binary files a/site/images/vgpu-pod.png and /dev/null differ diff --git a/site/images/vgpu-quota.png b/site/images/vgpu-quota.png deleted file mode 100644 index 754b12d..0000000 Binary files a/site/images/vgpu-quota.png and /dev/null differ diff --git a/site/images/visual02.png b/site/images/visual02.png deleted file mode 100644 index 34e445d..0000000 Binary files a/site/images/visual02.png and /dev/null differ diff --git a/site/images/visual06.png b/site/images/visual06.png deleted file mode 100644 index be5895c..0000000 Binary files a/site/images/visual06.png and /dev/null differ diff --git a/site/images/webh01.png b/site/images/webh01.png deleted file mode 100644 index 18f3c2a..0000000 Binary files a/site/images/webh01.png and /dev/null differ diff --git a/site/images/webh02.png b/site/images/webh02.png deleted file mode 100644 index 6933458..0000000 Binary files a/site/images/webh02.png and /dev/null differ diff --git a/site/images/webh03.png b/site/images/webh03.png deleted file mode 100644 index 43e91f1..0000000 Binary files a/site/images/webh03.png and /dev/null differ diff --git a/site/images/webh04.png b/site/images/webh04.png deleted file mode 100644 index 5af346d..0000000 Binary files a/site/images/webh04.png and /dev/null differ diff --git a/site/images/webh05.png b/site/images/webh05.png deleted file mode 100644 index 91d609a..0000000 Binary files a/site/images/webh05.png and /dev/null differ diff --git a/site/images/webh06.png b/site/images/webh06.png deleted file mode 100644 index ef376da..0000000 Binary files a/site/images/webh06.png and /dev/null differ diff --git a/site/images/worker01.png b/site/images/worker01.png deleted file mode 100644 index 0707b29..0000000 Binary files a/site/images/worker01.png and /dev/null differ diff --git a/site/images/worker02.png b/site/images/worker02.png deleted file mode 100644 index afd1574..0000000 Binary files a/site/images/worker02.png and /dev/null differ diff --git a/site/images/worker03.png b/site/images/worker03.png deleted file mode 100644 index 544b38b..0000000 Binary files a/site/images/worker03.png and /dev/null differ diff --git a/site/images/worker04.png b/site/images/worker04.png deleted file mode 100644 index c318791..0000000 Binary files a/site/images/worker04.png and /dev/null differ diff --git a/site/images/worker05.png b/site/images/worker05.png deleted file mode 100644 index 73d2ffc..0000000 Binary files a/site/images/worker05.png and /dev/null differ diff --git a/site/images/worker06.png b/site/images/worker06.png deleted file mode 100644 index 02a5cac..0000000 Binary files a/site/images/worker06.png and /dev/null differ diff --git a/site/images/worker07.png b/site/images/worker07.png deleted file mode 100644 index cc004fa..0000000 Binary files a/site/images/worker07.png and /dev/null differ diff --git a/site/images/workload_ascendgpu_userguide.jpg b/site/images/workload_ascendgpu_userguide.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/workload_gpu_userguide.jpg b/site/images/workload_gpu_userguide.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/workload_iluvatargpu_userguide.jpg b/site/images/workload_iluvatargpu_userguide.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/site/images/ws01.png b/site/images/ws01.png deleted file mode 100644 index 0ddd4f5..0000000 Binary files a/site/images/ws01.png and /dev/null differ diff --git a/site/images/ws01_1.png b/site/images/ws01_1.png deleted file mode 100644 index f986657..0000000 Binary files a/site/images/ws01_1.png and /dev/null differ diff --git a/site/images/ws01_2.png b/site/images/ws01_2.png deleted file mode 100644 index 0ddd4f5..0000000 Binary files a/site/images/ws01_2.png and /dev/null differ diff --git a/site/images/ws01_3.png b/site/images/ws01_3.png deleted file mode 100644 index f986657..0000000 Binary files a/site/images/ws01_3.png and /dev/null differ diff --git a/site/images/ws01_4.png b/site/images/ws01_4.png deleted file mode 100644 index f986657..0000000 Binary files a/site/images/ws01_4.png and /dev/null differ diff --git a/site/images/ws01_5.png b/site/images/ws01_5.png deleted file mode 100644 index f986657..0000000 Binary files a/site/images/ws01_5.png and /dev/null differ diff --git a/site/images/ws01_6.png b/site/images/ws01_6.png deleted file mode 100644 index f986657..0000000 Binary files a/site/images/ws01_6.png and /dev/null differ diff --git a/site/images/ws02.png b/site/images/ws02.png deleted file mode 100644 index 31e2eda..0000000 Binary files a/site/images/ws02.png and /dev/null differ diff --git a/site/images/ws03.png b/site/images/ws03.png deleted file mode 100644 index 0ca3154..0000000 Binary files a/site/images/ws03.png and /dev/null differ diff --git a/site/images/ws04.png b/site/images/ws04.png deleted file mode 100644 index ec12a3a..0000000 Binary files a/site/images/ws04.png and /dev/null differ diff --git a/site/images/ws04_1.png b/site/images/ws04_1.png deleted file mode 100644 index ec12a3a..0000000 Binary files a/site/images/ws04_1.png and /dev/null differ diff --git a/site/images/wsfd01.png b/site/images/wsfd01.png deleted file mode 100644 index 49bff10..0000000 Binary files a/site/images/wsfd01.png and /dev/null differ diff --git a/site/index.html b/site/index.html deleted file mode 100644 index ce28ec2..0000000 --- a/site/index.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - - - - - - - - -豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- - -
-
-

豐收二號檔案站

-

這是豐收二號 AI 算力中心的檔案站。

-
    -
  • 終端用戶手冊:在容器化環境中,使用雲主機,開發 AI 算法,構建訓練和推理任務
  • -
  • 管理員手冊:為容器化終端用戶做好運維工作,保障平台平穩高效運行
  • -
  • 開發者手冊:匯總了 5 個模塊的 OpenAPI 手冊
  • -
-

home

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/openapi/baize/index.html b/site/openapi/baize/index.html deleted file mode 100644 index d7b1ac4..0000000 --- a/site/openapi/baize/index.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - -AI Lab OpenAPI 文档 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/openapi/baize/swagger-f7c9450c.html b/site/openapi/baize/swagger-f7c9450c.html deleted file mode 100644 index 521a5e2..0000000 --- a/site/openapi/baize/swagger-f7c9450c.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - Swagger UI - - - - - - -
- - - - - - \ No newline at end of file diff --git a/site/openapi/baize/v0.107.4.json b/site/openapi/baize/v0.107.4.json deleted file mode 100644 index 10ab175..0000000 --- a/site/openapi/baize/v0.107.4.json +++ /dev/null @@ -1,6480 +0,0 @@ -{ - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "schemes": [ - "http" - ], - "swagger": "2.0", - "info": { - "title": "Baize swagger api docs", - "version": "v1alpha1" - }, - "host": "demo-dev.daocloud.io", - "paths": { - "/apis/baize.io/v1alpha1/clusters": { - "get": { - "tags": [ - "ClusterService" - ], - "summary": "获取集群列表", - "operationId": "ClusterService_ListClusters", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAIClustersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/clusters/{cluster}/namespaces": { - "get": { - "tags": [ - "ClusterService" - ], - "summary": "获取集群命名空间", - "operationId": "ClusterService_ListClusterNamespaces", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterNamespaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/clusters/{cluster}/queues": { - "post": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_CreateQueue", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "description": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string", - "required": [ - "name" - ] - }, - "resources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1QueueResource" - } - }, - "strategy": { - "title": "队列策略", - "$ref": "#/definitions/v1alpha1QueueStrategy" - }, - "type": { - "title": "队列类型", - "$ref": "#/definitions/v1alpha1QueueType" - }, - "workspace": { - "type": "integer", - "format": "int32" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Queue" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/clusters/{cluster}/queues/{name}": { - "get": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_GetQueue", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "enum": [ - "QUEUE_TYPE_UNSPECIFIED", - "KUEUE" - ], - "type": "string", - "default": "QUEUE_TYPE_UNSPECIFIED", - "description": "队列类型", - "name": "type", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Queue" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - }, - "put": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_UpdateQueue", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "description": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "resources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1QueueResource" - } - }, - "strategy": { - "title": "队列策略", - "$ref": "#/definitions/v1alpha1QueueStrategy" - }, - "type": { - "title": "队列类型", - "$ref": "#/definitions/v1alpha1QueueType" - }, - "workspace": { - "type": "integer", - "format": "int32" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Queue" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - }, - "delete": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_DeleteQueue", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "type": { - "title": "队列类型", - "$ref": "#/definitions/v1alpha1QueueType" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Queue" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/clusters/{cluster}/queues/{name}/json": { - "get": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_GetQueueByJSON", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "enum": [ - "QUEUE_TYPE_UNSPECIFIED", - "KUEUE" - ], - "type": "string", - "default": "QUEUE_TYPE_UNSPECIFIED", - "description": "队列类型", - "name": "type", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueueJSON" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/clusters/{cluster}/settings/gpu-resources": { - "get": { - "tags": [ - "ClusterService" - ], - "summary": "获取集群 GPU 配置", - "operationId": "ClusterService_GetClusterGPUSettings", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GPUSettingsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/current-user/permission": { - "get": { - "tags": [ - "PermissionService" - ], - "operationId": "PermissionService_GetCurrentUserPermission", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UserPermission" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/datasets/conda/options": { - "get": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_GetDatasetCondaOptions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetDatasetCondaOptionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/devices/gpus": { - "get": { - "tags": [ - "DeviceService" - ], - "summary": "ListDevicesGPUs 获取 GPU 设备列表", - "operationId": "DeviceService_ListDevicesGPUs", - "parameters": [ - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDevicesGPUsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:*" - } - }, - "/apis/baize.io/v1alpha1/grafana-dashboards/admin-overview": { - "get": { - "tags": [ - "MetricsService" - ], - "summary": "管理员概览面板", - "operationId": "MetricsService_GetAdminGrafanaDashboard", - "parameters": [ - { - "type": "string", - "description": "可选,不选为全部集群", - "name": "cluster", - "in": "query" - }, - { - "type": "string", - "format": "int64", - "description": "起始时间", - "name": "from", - "in": "query" - }, - { - "type": "string", - "format": "int64", - "description": "结束时间,且作为单值指标的时间点", - "name": "to", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GrafanaDashboard" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/metrics/multiple-queries": { - "get": { - "tags": [ - "MetricsService" - ], - "summary": "查询具体的单一指标\ndeprecated, use GetAdminGrafanaDashboard instead", - "operationId": "MetricsService_QueryMultipleVectors", - "parameters": [ - { - "type": "array", - "items": { - "enum": [ - "QUERY_METRIC_UNSPECIFIED", - "QUERY_METRIC_GPU_INSTALLED_NODES", - "QUERY_METRIC_TOTAL_NODES", - "QUERY_METRIC_INUSE_GPUS", - "QUERY_METRIC_TOTAL_GPUS", - "QUERY_METRIC_INUSE_CPUS", - "QUERY_METRIC_TOTAL_CPUS", - "QUERY_METRIC_INUSE_MEM", - "QUERY_METRIC_TOTAL_MEM", - "QUERY_METRIC_INUSE_VGPU_MEM", - "QUERY_METRIC_TOTAL_VGPU_MEM", - "QUERY_METRIC_TOTAL_CLUSTERS" - ], - "type": "string" - }, - "collectionFormat": "multi", - "name": "queryMetrics", - "in": "query" - }, - { - "type": "string", - "format": "uint64", - "name": "time", - "in": "query" - }, - { - "type": "string", - "name": "cluster", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1MultipleVectorQueryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/metrics/time-series-queries": { - "get": { - "tags": [ - "MetricsService" - ], - "summary": "查询时间序列指标\ndeprecated, use GetAdminGrafanaDashboard instead", - "operationId": "MetricsService_QueryTimeSeriesVectors", - "parameters": [ - { - "type": "array", - "items": { - "enum": [ - "QUERY_TIME_SERIES_UNSPECIFIED", - "QUERY_TIME_SERIES_METRIC_GPU_DISTRIBUTION", - "QUERY_TIME_SERIES_METRIC_GPU_UTILIZATION" - ], - "type": "string" - }, - "collectionFormat": "multi", - "name": "queryMetrics", - "in": "query" - }, - { - "enum": [ - "QUERY_TIME_SERIES_METRIC_RANGES_UNSPECIFIED", - "QUERY_TIME_SERIES_METRIC_RANGES_LAST_3_DAYS", - "QUERY_TIME_SERIES_METRIC_RANGES_LAST_7_DAYS", - "QUERY_TIME_SERIES_METRIC_RANGES_LAST_15_DAYS" - ], - "type": "string", - "default": "QUERY_TIME_SERIES_METRIC_RANGES_UNSPECIFIED", - "name": "queryMetricRange", - "in": "query" - }, - { - "type": "string", - "name": "cluster", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryTimeSeriesVectorsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/notebook-images": { - "get": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_GetNotebookImageList", - "parameters": [ - { - "enum": [ - "TYPE_UNSPECIFIED", - "JUPYTER", - "CODE" - ], - "type": "string", - "default": "TYPE_UNSPECIFIED", - "description": "镜像类型,可以为空,空表示 Jupyter", - "name": "type", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1NotebookImageListResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/queues": { - "get": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_ListQueues", - "parameters": [ - { - "type": "string", - "name": "cluster", - "in": "query" - }, - { - "enum": [ - "QUEUE_TYPE_UNSPECIFIED", - "KUEUE" - ], - "type": "string", - "default": "QUEUE_TYPE_UNSPECIFIED", - "name": "type", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListQueueResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:workspace" - } - }, - "/apis/baize.io/v1alpha1/workspace/{workspace}/queues": { - "get": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_ListQueues2", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "query" - }, - { - "enum": [ - "QUEUE_TYPE_UNSPECIFIED", - "KUEUE" - ], - "type": "string", - "default": "QUEUE_TYPE_UNSPECIFIED", - "name": "type", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListQueueResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:workspace" - } - }, - "/apis/baize.io/v1alpha1/workspaces": { - "get": { - "tags": [ - "WorkspaceService" - ], - "operationId": "WorkspaceService_ListWorkspaces", - "parameters": [ - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - }, - { - "type": "string", - "name": "cluster", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListWorkspacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/analysis": { - "get": { - "tags": [ - "AnalysisManagement" - ], - "operationId": "AnalysisManagement_ListAnalysis", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "query" - }, - { - "type": "string", - "name": "namespace", - "in": "query" - }, - { - "type": "string", - "name": "queueName", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAnalysisResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:type, owner" - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters": { - "get": { - "tags": [ - "ClusterService" - ], - "summary": "获取集群列表", - "operationId": "ClusterService_ListClusters2", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAIClustersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces": { - "get": { - "tags": [ - "ClusterService" - ], - "summary": "获取集群命名空间", - "operationId": "ClusterService_ListClusterNamespaces2", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterNamespaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/analysis": { - "get": { - "tags": [ - "AnalysisManagement" - ], - "operationId": "AnalysisManagement_ListAnalysis2", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "queueName", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAnalysisResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:type, owner" - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/analysis/{name}": { - "delete": { - "tags": [ - "AnalysisManagement" - ], - "operationId": "AnalysisManagement_DeleteAnalysis", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Analysis" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/datasets": { - "get": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_ListDatasets", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDatasetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:type, uri, phase" - }, - "post": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_CreateDataset", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "boundPVC": { - "title": "绑定 PVC 设置", - "$ref": "#/definitions/v1alpha1DatasetBoundPVC" - }, - "description": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "secretOptions": { - "$ref": "#/definitions/v1alpha1SecretOptions" - }, - "source": { - "title": "定义数据源", - "$ref": "#/definitions/v1alpha1DataSource" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Dataset" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/datasets/{name}": { - "get": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_GetDataset", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Dataset" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - }, - "put": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_UpdateDataset", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "conda": { - "$ref": "#/definitions/v1alpha1DataSourceOptionsConda" - }, - "secretOptions": { - "$ref": "#/definitions/v1alpha1SecretOptions" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Dataset" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - }, - "delete": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_DeleteDataset", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Dataset" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/datasets/{name}/actions": { - "post": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_DatasetDoAction", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "action": { - "$ref": "#/definitions/DatasetActionRequestAction" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Dataset" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/datasets/{name}/related-instances": { - "get": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_GetRelatedInstances", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RelatedInstancesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:datasets" - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/datasets/{name}/sync-process": { - "get": { - "tags": [ - "DatasetManagement" - ], - "operationId": "DatasetManagement_GetDatasetSyncProcess", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1DatasetSyncProcess" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/grafana-dashboards": { - "get": { - "tags": [ - "MetricsService" - ], - "summary": "工作负载实例监控面板", - "operationId": "MetricsService_GetWorkloadGrafanaDashboard", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "pod", - "in": "query" - }, - { - "type": "string", - "name": "container", - "in": "query" - }, - { - "type": "string", - "description": "起始时间", - "name": "from", - "in": "query" - }, - { - "type": "string", - "description": "结束时间,且作为单值指标的时间点", - "name": "to", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GrafanaDashboard" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/inference-serving": { - "get": { - "tags": [ - "InferenceServingManagement" - ], - "summary": "获取推理服务列表", - "operationId": "InferenceServingManagement_ListInferenceServings", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListInferenceServingsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:phase, lastUpdated" - }, - "post": { - "tags": [ - "InferenceServingManagement" - ], - "summary": "创建推理服务", - "operationId": "InferenceServingManagement_CreateInferenceServing", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "auth": { - "$ref": "#/definitions/v1alpha1ServingAuth" - }, - "framework": { - "$ref": "#/definitions/v1alpha1Framework" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "models": { - "type": "array", - "title": "模型配置,暂时只支持一个,这里用数组只是为了扩展", - "items": { - "$ref": "#/definitions/v1alpha1ServingConfig" - } - }, - "name": { - "type": "string", - "required": [ - "name" - ] - }, - "podConfig": { - "title": "kubernetes pod 配置", - "$ref": "#/definitions/commonPodConfig" - }, - "replicas": { - "type": "integer", - "format": "int32" - }, - "serviceConfig": { - "$ref": "#/definitions/v1alpha1ServiceConfig" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1InferenceServing" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/inference-serving/{name}": { - "get": { - "tags": [ - "InferenceServingManagement" - ], - "summary": "获取推理服务", - "operationId": "InferenceServingManagement_GetInferenceServing", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1InferenceServing" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - }, - "put": { - "tags": [ - "InferenceServingManagement" - ], - "summary": "更新推理服务", - "operationId": "InferenceServingManagement_UpdateInferenceServing", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "auth": { - "$ref": "#/definitions/v1alpha1ServingAuth" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "models": { - "type": "array", - "title": "模型配置,暂时只支持一个,这里用数组只是为了扩展", - "items": { - "$ref": "#/definitions/v1alpha1ServingConfig" - } - }, - "podConfig": { - "title": "kubernetes pod 配置", - "$ref": "#/definitions/commonPodConfig" - }, - "replicas": { - "type": "integer", - "format": "int32" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1InferenceServing" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - }, - "delete": { - "tags": [ - "InferenceServingManagement" - ], - "summary": "删除推理服务", - "operationId": "InferenceServingManagement_DeleteInferenceServing", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object" - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1InferenceServing" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/jobs": { - "get": { - "tags": [ - "JobsManagement" - ], - "operationId": "JobsManagement_ListJobs2", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "cluster 表示查询所有集群的 Job。", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "namespace 表示查询所有命名空间的 Job。", - "name": "namespace", - "in": "path", - "required": true - }, - { - "enum": [ - "JOB_TYPE_UNSPECIFIED", - "PYTORCH", - "TENSORFLOW", - "PADDLE", - "MPI", - "MXNET" - ], - "type": "string", - "default": "JOB_TYPE_UNSPECIFIED", - "description": "任务类型,如果为空,表示所有任务类型。\n\n - MPI: XGBOOST = 4;", - "name": "type", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:trainingMode, runningDuration" - }, - "post": { - "tags": [ - "JobsManagement" - ], - "operationId": "JobsManagement_CreateJob", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "analysis": { - "title": "任务分析", - "$ref": "#/definitions/v1alpha1AnalysisConfig" - }, - "baseConfig": { - "$ref": "#/definitions/v1alpha1JobCreationBaseConfig" - }, - "description": { - "type": "string" - }, - "name": { - "type": "string", - "required": [ - "name" - ] - }, - "roleConfig": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1JobRoleDifferenceConfig" - } - }, - "trainingConfig": { - "title": "训练配置", - "$ref": "#/definitions/v1alpha1TrainingConfig" - }, - "trainingMode": { - "$ref": "#/definitions/v1alpha1TrainingMode" - }, - "type": { - "$ref": "#/definitions/v1alpha1JobType" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Job" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/jobs/{name}": { - "get": { - "tags": [ - "JobsManagement" - ], - "operationId": "JobsManagement_GetJob", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "enum": [ - "JOB_TYPE_UNSPECIFIED", - "PYTORCH", - "TENSORFLOW", - "PADDLE", - "MPI", - "MXNET" - ], - "type": "string", - "default": "JOB_TYPE_UNSPECIFIED", - "description": " - MPI: XGBOOST = 4;", - "name": "type", - "in": "query" - }, - { - "type": "boolean", - "description": "是否删除关联的任务分析工作负载", - "name": "deleteAnalysis", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Job" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - }, - "delete": { - "tags": [ - "JobsManagement" - ], - "operationId": "JobsManagement_DeleteJob", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "deleteAnalysis": { - "type": "boolean", - "title": "是否删除关联的任务分析工作负载" - }, - "type": { - "$ref": "#/definitions/v1alpha1JobType" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Job" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/jobs/{name}/actions": { - "post": { - "tags": [ - "JobsManagement" - ], - "operationId": "JobsManagement_DoJobAction", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "action": { - "$ref": "#/definitions/JobActionRequestAction" - }, - "params": { - "$ref": "#/definitions/JobActionRequestParams" - }, - "type": { - "$ref": "#/definitions/v1alpha1JobType" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Job" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/jobs/{name}/schedulers": { - "put": { - "tags": [ - "JobsManagement" - ], - "operationId": "JobsManagement_ListSchedulers", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "analysis": { - "title": "任务分析", - "$ref": "#/definitions/v1alpha1AnalysisConfig" - }, - "baseConfig": { - "$ref": "#/definitions/v1alpha1JobCreationBaseConfig" - }, - "description": { - "type": "string" - }, - "roleConfig": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1JobRoleDifferenceConfig" - } - }, - "trainingConfig": { - "title": "训练配置", - "$ref": "#/definitions/v1alpha1TrainingConfig" - }, - "trainingMode": { - "$ref": "#/definitions/v1alpha1TrainingMode" - }, - "type": { - "$ref": "#/definitions/v1alpha1JobType" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1JobSchedulersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/localqueues": { - "post": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_CreateLocalQueue", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "title": "队列类型", - "$ref": "#/definitions/v1alpha1QueueType" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateLocalQueueResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/notebooks": { - "get": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_ListNotebooks2", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "queueName", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNotebooksResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:type" - }, - "post": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_CreateNotebook", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "analysis": { - "title": "任务分析", - "$ref": "#/definitions/v1alpha1AnalysisConfig" - }, - "config": { - "$ref": "#/definitions/v1alpha1NotebookConfig" - }, - "description": { - "type": "string" - }, - "name": { - "type": "string", - "required": [ - "name" - ] - }, - "priorityClass": { - "type": "string", - "title": "notebook Pod 的优先级,Baize 会内建三个优先级:\nbaize-high-priority\nbaize-medium-priority\nbaize-low-priority\n目前只支持这三个,后续可能会支持系统其他优先级。" - }, - "queueName": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/v1alpha1NotebookType" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Notebook" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/notebooks/{name}": { - "get": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_GetNotebook", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "type": "boolean", - "description": "是否删除关联的任务分析工作负载", - "name": "deleteAnalysis", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Notebook" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - }, - "put": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_UpdateNotebook", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "analysis": { - "title": "任务分析", - "$ref": "#/definitions/v1alpha1AnalysisConfig" - }, - "config": { - "$ref": "#/definitions/v1alpha1NotebookConfig" - }, - "description": { - "type": "string" - }, - "priorityClass": { - "type": "string", - "title": "notebook Pod 的优先级,Baize 会内建三个优先级:\nbaize-high-priority\nbaize-medium-priority\nbaize-low-priority\n目前只支持这三个,后续可能会支持系统其他优先级。" - }, - "queueName": { - "type": "string" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Notebook" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - }, - "delete": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_DeleteNotebook", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "deleteAnalysis": { - "type": "boolean", - "title": "是否删除关联的任务分析工作负载" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Notebook" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/notebooks/{name}/actions": { - "post": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_NotebookDoAction", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "action": { - "$ref": "#/definitions/NotebookActionRequestAction" - } - } - } - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Notebook" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/pvcs": { - "get": { - "tags": [ - "ClusterService" - ], - "summary": "获取 PVC 列表", - "operationId": "ClusterService_ListPVCs", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPVCsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:storageClass, capacity" - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/namespaces/{namespace}/resources/{name}/instances": { - "get": { - "tags": [ - "PodsManagement" - ], - "operationId": "PodsManagement_GetPodInstanceList", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "namespace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "enum": [ - "JOB_TYPE_UNSPECIFIED", - "PYTORCH", - "TENSORFLOW", - "PADDLE", - "NOTEBOOK", - "INFERENCE", - "MXNET", - "MPI" - ], - "type": "string", - "default": "JOB_TYPE_UNSPECIFIED", - "name": "type", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PodInstanceListResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/queues/{name}/capacites": { - "get": { - "tags": [ - "QueueManagement" - ], - "operationId": "QueueManagement_CheckQueue", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "name", - "in": "path", - "required": true - }, - { - "enum": [ - "QUEUE_TYPE_UNSPECIFIED", - "KUEUE" - ], - "type": "string", - "default": "QUEUE_TYPE_UNSPECIFIED", - "description": "队列类型", - "name": "type", - "in": "query" - }, - { - "type": "string", - "name": "namespace", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CheckQueueResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/clusters/{cluster}/storage-classes": { - "get": { - "tags": [ - "ClusterService" - ], - "summary": "获取存储类列表", - "operationId": "ClusterService_ListStorageClasses", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListStorageClassesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:provisioner" - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/grafana-dashboards/dev-overview": { - "get": { - "tags": [ - "MetricsService" - ], - "summary": "开发者视角概览面板", - "operationId": "MetricsService_GetDevGrafanaDashboard", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "query" - }, - { - "type": "string", - "format": "int64", - "description": "起始时间", - "name": "from", - "in": "query" - }, - { - "type": "string", - "format": "int64", - "description": "结束时间,且作为单值指标的时间点", - "name": "to", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GrafanaDashboard" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/jobs": { - "get": { - "tags": [ - "JobsManagement" - ], - "operationId": "JobsManagement_ListJobs", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "enum": [ - "JOB_TYPE_UNSPECIFIED", - "PYTORCH", - "TENSORFLOW", - "PADDLE", - "MPI", - "MXNET" - ], - "type": "string", - "default": "JOB_TYPE_UNSPECIFIED", - "description": "任务类型,如果为空,表示所有任务类型。\n\n - MPI: XGBOOST = 4;", - "name": "type", - "in": "query" - }, - { - "type": "string", - "description": "cluster 表示查询所有集群的 Job。", - "name": "cluster", - "in": "query" - }, - { - "type": "string", - "description": "namespace 表示查询所有命名空间的 Job。", - "name": "namespace", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:trainingMode, runningDuration" - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/metrics/dev-dashboard-multiple-queries": { - "get": { - "tags": [ - "MetricsService" - ], - "summary": "查询开发者面板指标\ndeprecated, use GetDevGrafanaDashboard instead", - "operationId": "MetricsService_QueryDevDashboardMultipleVectors", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "array", - "items": { - "enum": [ - "DEV_DASH_QUERY_METRIC_UNSPECIFIED", - "DEV_DASH_QUERY_RUNNING_NOTEBOOKS", - "DEV_DASH_QUERY_TOTAL_NOTEBOOKS", - "DEV_DASH_QUERY_RUNNING_PYTORCH_JOBS", - "DEV_DASH_QUERY_TOTAL_PYTORCH_JOBS", - "DEV_DASH_QUERY_RUNNING_TENSORFLOW_JOBS", - "DEV_DASH_QUERY_TOTAL_TENSORFLOW_JOBS", - "DEV_DASH_QUERY_TOTAL_DATASETS", - "DEV_DASH_TASKS_STATS" - ], - "type": "string" - }, - "collectionFormat": "multi", - "name": "queryMetrics", - "in": "query" - }, - { - "type": "string", - "format": "uint64", - "name": "time", - "in": "query" - }, - { - "type": "string", - "name": "cluster", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1MultipleDevDashboardVectorQueryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - } - } - }, - "/apis/baize.io/v1alpha1/workspaces/{workspace}/notebooks": { - "get": { - "tags": [ - "NotebookService" - ], - "operationId": "NotebookService_ListNotebooks", - "parameters": [ - { - "type": "integer", - "format": "int32", - "name": "workspace", - "in": "path", - "required": true - }, - { - "type": "string", - "name": "cluster", - "in": "query" - }, - { - "type": "string", - "name": "namespace", - "in": "query" - }, - { - "type": "string", - "name": "queueName", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "总共有多少条目,请求时可以不用传递", - "name": "page.total", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage", - "name": "page.page", - "in": "query" - }, - { - "type": "integer", - "format": "int32", - "description": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize", - "name": "page.pageSize", - "in": "query" - }, - { - "type": "string", - "description": "排序规则,支持字符串和数字类型的字段进行排序", - "name": "page.sort", - "in": "query" - }, - { - "type": "string", - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "name": "page.search", - "in": "query" - } - ], - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNotebooksResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "description": "额外支持的搜索、排序字段:type" - } - } - }, - "definitions": { - "DataSourceOptionsCondaPackageManager": { - "type": "string", - "default": "PACKAGE_MANAGER_UNSPECIFIED", - "enum": [ - "PACKAGE_MANAGER_UNSPECIFIED", - "PIP", - "CONDA" - ] - }, - "DataSourceOptionsGit": { - "type": "object", - "properties": { - "branch": { - "type": "string", - "title": "Git 分支名称,不填写默认为主分支" - }, - "commit": { - "type": "string", - "title": "需要 checkout 的 commit,不填写不做 checkout" - }, - "depth": { - "type": "integer", - "format": "int32", - "title": "克隆的深度,不填写克隆所有历史,填写 1\n只克隆最近一次提交,可以减少克隆时间,无法和 commit 同时使用" - }, - "submodules": { - "type": "boolean", - "title": "是否克隆子模块" - } - } - }, - "DataSourceOptionsS3": { - "type": "object", - "properties": { - "endpoint": { - "type": "string", - "title": "S3 访问端点,可以是域名或者 IP" - }, - "region": { - "type": "string", - "title": "S3 存储桶区域" - } - } - }, - "DatasetActionRequestAction": { - "type": "string", - "default": "ACTION_UNSPECIFIED", - "enum": [ - "ACTION_UNSPECIFIED", - "RERUN" - ] - }, - "DatasetBoundPVCAccessMode": { - "type": "string", - "default": "ACCESS_MODE_UNSPECIFIED", - "enum": [ - "ACCESS_MODE_UNSPECIFIED", - "READ_ONLY_MANY", - "READ_WRITE_ONCE", - "READ_WRITE_MANY" - ] - }, - "DatasetStatusPhase": { - "type": "string", - "title": "- PENDING: 刚创建完的状态\n - READY: 可以被挂载的状态\n - PROCESSING: 正在处理中的状态\n - FAILED: 处理失败的状态,无法被挂载", - "default": "DATA_SET_PHASE_UNSPECIFIED", - "enum": [ - "DATA_SET_PHASE_UNSPECIFIED", - "PENDING", - "READY", - "PROCESSING", - "FAILED" - ] - }, - "FrameworkTriton": { - "type": "object", - "properties": { - "backend": { - "title": "Triton 后端类型", - "$ref": "#/definitions/TritonBackend" - } - } - }, - "InferenceServingStatusModelStatus": { - "type": "object", - "properties": { - "accessPath": { - "type": "string", - "title": "模型的访问路径,如 /v2/llama/generate\n如果要能够直接访问,需要和 .status.access_base_url 拼接。" - }, - "name": { - "type": "string" - } - } - }, - "InferenceServingStatusPhase": { - "type": "string", - "default": "PHASE_UNSPECIFIED", - "enum": [ - "PHASE_UNSPECIFIED", - "PENDING", - "UPDATING_OR_CREATING", - "RUNNING", - "FAILED", - "DELETING", - "STOPPED" - ] - }, - "JobActionRequestAction": { - "type": "string", - "title": "- RESTART: 重启任务", - "default": "JOB_ACTION_UNSPECIFIED", - "enum": [ - "JOB_ACTION_UNSPECIFIED", - "RESTART", - "CHANGE_PRIORITY" - ] - }, - "JobActionRequestParams": { - "type": "object", - "properties": { - "priorityClass": { - "type": "string", - "title": "当 action = CHANGE_PRIORITY 时,需要传入 priority_class" - } - } - }, - "JobSchedulersResponseScheduler": { - "type": "object", - "properties": { - "alias": { - "type": "string" - }, - "default": { - "type": "boolean", - "title": "如果 default = true,表示默认应该选择的调度器,这个可能是配置在 training-center 的配置。" - }, - "enabledFeatures": { - "type": "array", - "items": { - "$ref": "#/definitions/SchedulerFeature" - } - }, - "name": { - "type": "string" - } - } - }, - "KubeVolumeVolumeType": { - "description": " - PERSISTENT_VOLUME_CLAIM: The volume is a persistent volume claim.", - "type": "string", - "default": "VOLUME_TYPE_UNSPECIFIED", - "enum": [ - "VOLUME_TYPE_UNSPECIFIED", - "PERSISTENT_VOLUME_CLAIM", - "DATASET", - "DATASET_RUNTIME_ENV" - ] - }, - "ModelInputFormat": { - "description": "- FORMAT_NONE: @@ .. cpp:enumerator:: Format::FORMAT_NONE = 0\n@@\n@@ The input has no specific format. This is the default.\n@@\n - FORMAT_NHWC: @@ .. cpp:enumerator:: Format::FORMAT_NHWC = 1\n@@\n@@ HWC image format. Tensors with this format require 3 dimensions\n@@ if the model does not support batching (max_batch_size = 0) or 4\n@@ dimensions if the model does support batching (max_batch_size\n@@ >= 1). In either case the 'dims' below should only specify the\n@@ 3 non-batch dimensions (i.e. HWC or CHW).\n@@\n - FORMAT_NCHW: @@ .. cpp:enumerator:: Format::FORMAT_NCHW = 2\n@@\n@@ CHW image format. Tensors with this format require 3 dimensions\n@@ if the model does not support batching (max_batch_size = 0) or 4\n@@ dimensions if the model does support batching (max_batch_size\n@@ >= 1). In either case the 'dims' below should only specify the\n@@ 3 non-batch dimensions (i.e. HWC or CHW).\n@@", - "type": "string", - "title": "@@\n@@ .. cpp:enum:: Format\n@@\n@@ The format for the input.\n@@", - "default": "FORMAT_NONE", - "enum": [ - "FORMAT_NONE", - "FORMAT_NHWC", - "FORMAT_NCHW" - ] - }, - "NotebookActionRequestAction": { - "type": "string", - "default": "ACTION_UNSPECIFIED", - "enum": [ - "ACTION_UNSPECIFIED", - "START", - "STOP" - ] - }, - "NotebookConfigKubeMetadata": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "NotebookConfigServiceType": { - "description": " - NODE_PORT: The notebook is exposed as a NodePort service.\n - LOAD_BALANCER: The notebook is exposed as a LoadBalancer service.", - "type": "string", - "default": "SERVICE_TYPE_UNSPECIFIED", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "NODE_PORT", - "LOAD_BALANCER" - ] - }, - "PodInstanceContainer": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - }, - "RelatedInstancesResponseInstance": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - } - } - }, - "SchedulerFeature": { - "type": "string", - "title": "- BINPACK: 任务队列", - "default": "FEATURE_UNSPECIFIED", - "enum": [ - "FEATURE_UNSPECIFIED", - "BINPACK", - "GANG", - "FAIR" - ] - }, - "SecretOptionsAkSkAuth": { - "type": "object", - "properties": { - "accessKey": { - "type": "string" - }, - "secretKey": { - "type": "string" - } - } - }, - "SecretOptionsAuthType": { - "type": "string", - "title": "- AUTH_TYPE_UNSPECIFIED: 不需要认证\n - BASIC: 使用用户名密码认证\n - SSH: 使用 SSH 证书认证\n - TOKEN: 使用 Token 认证\n - AK_SK: 使用 AK/SK 认证", - "default": "AUTH_TYPE_UNSPECIFIED", - "enum": [ - "AUTH_TYPE_UNSPECIFIED", - "BASIC", - "SSH", - "TOKEN", - "AK_SK" - ] - }, - "SecretOptionsBasicAuth": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "SecretOptionsSSHAuth": { - "type": "object", - "properties": { - "passphrase": { - "type": "string" - }, - "privateKey": { - "type": "string" - } - } - }, - "SecretOptionsTokenAuth": { - "type": "object", - "properties": { - "token": { - "type": "string" - } - } - }, - "ServingAuthAuthType": { - "type": "string", - "default": "AUTH_TYPE_UNSPECIFIED", - "enum": [ - "AUTH_TYPE_UNSPECIFIED", - "TRITON_RESTRICTED_KEY" - ] - }, - "ServingAuthTritonRestrictedKeyValue": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "ServingConfigTritonModelConfig": { - "type": "object", - "properties": { - "customConfig": { - "type": "string", - "title": "用于自定义配置" - }, - "inputs": { - "type": "array", - "items": { - "$ref": "#/definitions/tritonModelInput" - } - }, - "maxBatchSize": { - "type": "integer", - "format": "int32" - }, - "outputs": { - "type": "array", - "items": { - "$ref": "#/definitions/tritonModelOutput" - } - } - } - }, - "ServingConfigTritonServingConfig": { - "type": "object", - "properties": { - "config": { - "$ref": "#/definitions/ServingConfigTritonModelConfig" - }, - "customModelConfig": { - "type": "object", - "title": "可以用于自定义 python 后端的模型配置,\n比如 model.py: \"import torch\\nimport torchvision\\nfrom torchvision import models\\n\\nmodel = models.resnet50(pretrained=True)\\nmodel.eval()\"\n暂时用不到", - "additionalProperties": { - "type": "string" - } - }, - "vllm": { - "title": "deprecated, DO NOT USE ME", - "$ref": "#/definitions/v1alpha1ServingConfigVLLM" - } - } - }, - "StatusPhase": { - "description": " - PENDING: The analysis is being prepared for use.\n - RUNNING: The analysis is active and ready to use.\n - STOPPED: The analysis is being stopped.\n - FAILED: The analysis is failed.", - "type": "string", - "default": "PHASE_UNSPECIFIED", - "enum": [ - "PHASE_UNSPECIFIED", - "PENDING", - "RUNNING", - "STOPPED", - "FAILED" - ] - }, - "TritonBackend": { - "type": "string", - "title": "- TRITON_BACKEND_VLLM: deprecated: DO NOT USE ME", - "default": "TRITON_BACKEND_UNSPECIFIED", - "enum": [ - "TRITON_BACKEND_UNSPECIFIED", - "TRITON_BACKEND_PYTORCH", - "TRITON_BACKEND_TENSORFLOW", - "TRITON_BACKEND_VLLM", - "TRITON_BACKEND_ONNX" - ] - }, - "VLLMLoraModel": { - "type": "object", - "properties": { - "relativePath": { - "type": "string", - "title": "模型文件相对于数据集的位置" - }, - "volume": { - "title": "数据集,不需要传 mountPath,会自动。", - "$ref": "#/definitions/commonKubeVolume" - } - } - }, - "commonAffinity": { - "description": "The following message is from k8s official: https://github.com/kubernetes/api/blob/master/core/v1/generated.proto\nAffinity is a group of affinity scheduling rules.", - "type": "object", - "properties": { - "nodeAffinity": { - "description": "Describes node affinity scheduling rules for the pod.", - "$ref": "#/definitions/commonNodeAffinity" - }, - "podAffinity": { - "description": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).", - "$ref": "#/definitions/commonPodAffinity" - }, - "podAntiAffinity": { - "description": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).", - "$ref": "#/definitions/commonPodAntiAffinity" - } - } - }, - "commonKubeEnv": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "commonKubeVolume": { - "type": "object", - "properties": { - "mountPath": { - "type": "string" - }, - "name": { - "type": "string" - }, - "readOnly": { - "type": "boolean" - }, - "type": { - "$ref": "#/definitions/KubeVolumeVolumeType" - } - } - }, - "commonLabelSelector": { - "type": "object", - "properties": { - "matchExpressions": { - "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", - "type": "array", - "items": { - "$ref": "#/definitions/commonLabelSelectorRequirement" - } - }, - "matchLabels": { - "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "commonLabelSelectorRequirement": { - "type": "object", - "properties": { - "key": { - "type": "string", - "title": "key is the label key that the selector applies to.\n+patchMergeKey=key\n+patchStrategy=merge" - }, - "operator": { - "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.", - "type": "string" - }, - "values": { - "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "commonNodeAffinity": { - "description": "Node affinity is a group of node affinity scheduling rules.", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node matches the corresponding matchExpressions; the\nnode(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/commonPreferredSchedulingTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to an update), the system\nmay or may not try to eventually evict the pod from its node.", - "$ref": "#/definitions/commonNodeSelector" - } - } - }, - "commonNodeSelector": { - "type": "object", - "title": "A node selector represents the union of the results of one or more label queries\nover a set of nodes; that is, it represents the OR of the selectors represented\nby the node selector terms.\n+structType=atomic", - "properties": { - "nodeSelectorTerms": { - "description": "Required. A list of node selector terms. The terms are ORed.", - "type": "array", - "items": { - "$ref": "#/definitions/commonNodeSelectorTerm" - } - } - } - }, - "commonNodeSelectorRequirement": { - "description": "A node selector requirement is a selector that contains values, a key, and an operator\nthat relates the key and values.", - "type": "object", - "properties": { - "key": { - "description": "The label key that the selector applies to.", - "type": "string" - }, - "operator": { - "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - "type": "string" - }, - "values": { - "description": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. If the operator is Gt or Lt, the values\narray must have a single element, which will be interpreted as an integer.\nThis array is replaced during a strategic merge patch.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "commonNodeSelectorTerm": { - "type": "object", - "title": "A null or empty node selector term matches no objects. The requirements of\nthem are ANDed.\nThe TopologySelectorTerm type implements a subset of the NodeSelectorTerm.\n+structType=atomic", - "properties": { - "matchExpressions": { - "description": "A list of node selector requirements by node's labels.", - "type": "array", - "items": { - "$ref": "#/definitions/commonNodeSelectorRequirement" - } - }, - "matchFields": { - "description": "A list of node selector requirements by node's fields.", - "type": "array", - "items": { - "$ref": "#/definitions/commonNodeSelectorRequirement" - } - } - } - }, - "commonPagination": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32", - "title": "当前页索引,从 1 开始,为 0 时,会自动重置为默认值 constants.DefaultPage" - }, - "pageSize": { - "type": "integer", - "format": "int32", - "title": "每页数据量,为 -1 时表示查询全部,为 0 时会重置为默认值\nconstants.DefaultPageSize" - }, - "search": { - "description": "搜索关键字,支持模糊搜索,精准匹配和高级搜索.", - "type": "string" - }, - "sort": { - "type": "string", - "title": "排序规则,支持字符串和数字类型的字段进行排序" - }, - "total": { - "type": "integer", - "format": "int64", - "title": "总共有多少条目,请求时可以不用传递" - } - } - }, - "commonPodAffinity": { - "description": "Pod affinity is a group of inter pod affinity scheduling rules.", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/commonWeightedPodAffinityTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/commonPodAffinityTerm" - } - } - } - }, - "commonPodAffinityTerm": { - "type": "object", - "properties": { - "labelSelector": { - "description": "A label query over a set of resources, in this case pods.", - "$ref": "#/definitions/commonLabelSelector" - }, - "namespaceSelector": { - "description": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's namespace\".\nAn empty selector ({}) matches all namespaces.\nThis field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled.", - "$ref": "#/definitions/commonLabelSelector" - }, - "namespaces": { - "type": "array", - "title": "namespaces specifies a static list of namespace names that the term applies to.\nThe term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", - "items": { - "type": "string" - } - }, - "topologyKey": { - "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching\nthe labelSelector in the specified namespaces, where co-located is defined as running on a node\nwhose value of the label with key topologyKey matches that of any node on which any of the\nselected pods is running.\nEmpty topologyKey is not allowed.", - "type": "string" - } - } - }, - "commonPodAntiAffinity": { - "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", - "type": "object", - "properties": { - "preferredDuringSchedulingIgnoredDuringExecution": { - "description": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe anti-affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling anti-affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the\nnode(s) with the highest sum are the most preferred.", - "type": "array", - "items": { - "$ref": "#/definitions/commonWeightedPodAffinityTerm" - } - }, - "requiredDuringSchedulingIgnoredDuringExecution": { - "description": "If the anti-affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the anti-affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.", - "type": "array", - "items": { - "$ref": "#/definitions/commonPodAffinityTerm" - } - } - } - }, - "commonPodConfig": { - "type": "object", - "title": "PodTemplateConfig is a configuration for a pod template,\nit includes the environment variables, volumes, resources, affinity and schedulerName.\nThe configuration is used to create a pod template for serving or job?", - "properties": { - "affinity": { - "description": "The affinity of the pod.", - "$ref": "#/definitions/commonAffinity" - }, - "kubeEnvs": { - "description": "The environment variables of the pod.", - "type": "array", - "items": { - "$ref": "#/definitions/commonKubeEnv" - } - }, - "kubeVolumes": { - "description": "The volumes of the pod.", - "type": "array", - "items": { - "$ref": "#/definitions/commonKubeVolume" - } - }, - "priorityClass": { - "type": "string", - "title": "the priority class of pod.\nbaize-high-priority\nbaize-medium-priority\nbaize-low-priority\n目前只支持这三个,后续可能会支持系统其他优先级。" - }, - "queue": { - "type": "string", - "title": "queue name" - }, - "resources": { - "description": "The resources of the pod.", - "$ref": "#/definitions/commonResources" - }, - "schedulerName": { - "description": "The name of the scheduler to use.", - "type": "string" - }, - "tolerationSeconds": { - "type": "string", - "format": "int64" - } - } - }, - "commonPreferredSchedulingTerm": { - "description": "An empty preferred scheduling term matches all objects with implicit weight 0\n(i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", - "type": "object", - "properties": { - "preference": { - "description": "A node selector term, associated with the corresponding weight.", - "$ref": "#/definitions/commonNodeSelectorTerm" - }, - "weight": { - "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "commonResources": { - "type": "object", - "properties": { - "limits": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "requests": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "commonWeightedPodAffinityTerm": { - "type": "object", - "title": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - "properties": { - "podAffinityTerm": { - "description": "Required. A pod affinity term, associated with the corresponding weight.", - "$ref": "#/definitions/commonPodAffinityTerm" - }, - "weight": { - "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100.", - "type": "integer", - "format": "int32" - } - } - }, - "googlerpcStatus": { - "type": "object", - "properties": { - "id": { - "description": "错误 ID,用于判断错误类型", - "type": "string" - }, - "message": { - "description": "错误消息,会自动切换中英文", - "type": "string" - } - } - }, - "protobufAny": { - "type": "object", - "properties": { - "@type": { - "type": "string" - } - }, - "additionalProperties": {} - }, - "protobufNullValue": { - "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value.", - "type": "string", - "default": "NULL_VALUE", - "enum": [ - "NULL_VALUE" - ] - }, - "rpcStatus": { - "type": "object", - "properties": { - "id": { - "description": "错误 ID,用于判断错误类型", - "type": "string" - }, - "message": { - "description": "错误消息,会自动切换中英文", - "type": "string" - } - } - }, - "tritonDataType": { - "description": "- TYPE_INVALID: @@ .. cpp:enumerator:: DataType::INVALID = 0\n - TYPE_BOOL: @@ .. cpp:enumerator:: DataType::BOOL = 1\n - TYPE_UINT8: @@ .. cpp:enumerator:: DataType::UINT8 = 2\n - TYPE_UINT16: @@ .. cpp:enumerator:: DataType::UINT16 = 3\n - TYPE_UINT32: @@ .. cpp:enumerator:: DataType::UINT32 = 4\n - TYPE_UINT64: @@ .. cpp:enumerator:: DataType::UINT64 = 5\n - TYPE_INT8: @@ .. cpp:enumerator:: DataType::INT8 = 6\n - TYPE_INT16: @@ .. cpp:enumerator:: DataType::INT16 = 7\n - TYPE_INT32: @@ .. cpp:enumerator:: DataType::INT32 = 8\n - TYPE_INT64: @@ .. cpp:enumerator:: DataType::INT64 = 9\n - TYPE_FP16: @@ .. cpp:enumerator:: DataType::FP16 = 10\n - TYPE_FP32: @@ .. cpp:enumerator:: DataType::FP32 = 11\n - TYPE_FP64: @@ .. cpp:enumerator:: DataType::FP64 = 12\n - TYPE_STRING: @@ .. cpp:enumerator:: DataType::STRING = 13\n - TYPE_BF16: @@ .. cpp:enumerator:: DataType::BF16 = 14", - "type": "string", - "title": "@@\n@@.. cpp:enum:: DataType\n@@\n@@ Data types supported for input and output tensors.\n@@", - "default": "TYPE_INVALID", - "enum": [ - "TYPE_INVALID", - "TYPE_BOOL", - "TYPE_UINT8", - "TYPE_UINT16", - "TYPE_UINT32", - "TYPE_UINT64", - "TYPE_INT8", - "TYPE_INT16", - "TYPE_INT32", - "TYPE_INT64", - "TYPE_FP16", - "TYPE_FP32", - "TYPE_FP64", - "TYPE_STRING", - "TYPE_BF16" - ] - }, - "tritonModelInput": { - "type": "object", - "title": "@@\n@@.. cpp:var:: message ModelInput\n@@\n@@ An input required by the model.\n@@", - "properties": { - "allowRaggedBatch": { - "type": "boolean", - "title": "@@ .. cpp:var:: bool allow_ragged_batch\n@@\n@@ Whether or not the input is allowed to be \"ragged\" in a dynamically\n@@ created batch. Default is false indicating that two requests will\n@@ only be batched if this tensor has the same shape in both requests.\n@@ True indicates that two requests can be batched even if this tensor\n@@ has a different shape in each request.\n@@" - }, - "dataType": { - "title": "@@ .. cpp:var:: DataType data_type\n@@\n@@ The data-type of the input.\n@@", - "$ref": "#/definitions/tritonDataType" - }, - "dims": { - "type": "array", - "title": "@@ .. cpp:var:: int64 dims (repeated)\n@@\n@@ The dimensions/shape of the input tensor that must be provided\n@@ when invoking the inference API for this model.\n@@", - "items": { - "type": "string", - "format": "int64" - } - }, - "format": { - "title": "@@ .. cpp:var:: Format format\n@@\n@@ The format of the input. Optional.\n@@", - "$ref": "#/definitions/ModelInputFormat" - }, - "isShapeTensor": { - "type": "boolean", - "title": "@@ .. cpp:var:: bool is_shape_tensor\n@@\n@@ Whether or not the input is a shape tensor to the model. This field\n@@ is currently supported only for the TensorRT model. An error will be\n@@ generated if this specification does not comply with underlying\n@@ model.\n@@" - }, - "name": { - "type": "string", - "title": "@@ .. cpp:var:: string name\n@@\n@@ The name of the input.\n@@" - }, - "optional": { - "type": "boolean", - "title": "@@ .. cpp:var:: bool optional\n@@\n@@ Whether or not the input is optional for the model execution.\n@@ If true, the input is not required in the inference request.\n@@ Default value is false.\n@@" - }, - "reshape": { - "title": "@@ .. cpp:var:: ModelTensorReshape reshape\n@@\n@@ The shape expected for this input by the backend. The input will\n@@ be reshaped to this before being presented to the backend. The\n@@ reshape must have the same number of elements as the input shape\n@@ specified by 'dims'. Optional.\n@@", - "$ref": "#/definitions/tritonModelTensorReshape" - } - } - }, - "tritonModelOutput": { - "type": "object", - "title": "@@\n@@.. cpp:var:: message ModelOutput\n@@\n@@ An output produced by the model.\n@@", - "properties": { - "dataType": { - "title": "@@ .. cpp:var:: DataType data_type\n@@\n@@ The data-type of the output.\n@@", - "$ref": "#/definitions/tritonDataType" - }, - "dims": { - "type": "array", - "title": "@@ .. cpp:var:: int64 dims (repeated)\n@@\n@@ The dimensions/shape of the output tensor.\n@@", - "items": { - "type": "string", - "format": "int64" - } - }, - "isShapeTensor": { - "type": "boolean", - "title": "@@ .. cpp:var:: bool is_shape_tensor\n@@\n@@ Whether or not the output is a shape tensor to the model. This field\n@@ is currently supported only for the TensorRT model. An error will be\n@@ generated if this specification does not comply with underlying\n@@ model.\n@@" - }, - "labelFilename": { - "type": "string", - "title": "@@ .. cpp:var:: string label_filename\n@@\n@@ The label file associated with this output. Should be specified only\n@@ for outputs that represent classifications. Optional.\n@@" - }, - "name": { - "type": "string", - "title": "@@ .. cpp:var:: string name\n@@\n@@ The name of the output.\n@@" - }, - "reshape": { - "title": "@@ .. cpp:var:: ModelTensorReshape reshape\n@@\n@@ The shape produced for this output by the backend. The output will\n@@ be reshaped from this to the shape specified in 'dims' before being\n@@ returned in the inference response. The reshape must have the same\n@@ number of elements as the output shape specified by 'dims'. Optional.\n@@", - "$ref": "#/definitions/tritonModelTensorReshape" - } - } - }, - "tritonModelTensorReshape": { - "type": "object", - "title": "@@\n@@.. cpp:var:: message ModelTensorReshape\n@@\n@@ Reshape specification for input and output tensors.\n@@", - "properties": { - "shape": { - "type": "array", - "title": "@@ .. cpp:var:: int64 shape (repeated)\n@@\n@@ The shape to use for reshaping.\n@@", - "items": { - "type": "string", - "format": "int64" - } - } - } - }, - "v1alpha1AICluster": { - "type": "object", - "properties": { - "clusterStatus": { - "$ref": "#/definitions/v1alpha1ClusterStatus" - }, - "name": { - "type": "string" - }, - "withAiSuite": { - "type": "boolean" - } - } - }, - "v1alpha1Analysis": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "creationTimestamp": { - "type": "string", - "format": "date-time" - }, - "kubeVolumes": { - "description": "Which volume to mount to the monitor.", - "type": "array", - "items": { - "$ref": "#/definitions/commonKubeVolume" - } - }, - "logPath": { - "description": "The path that contains the tensorboard, visualdl, or other monitor logs.", - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "queueName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha1AnalysisStatus" - }, - "type": { - "description": "The type of the monitor.", - "$ref": "#/definitions/v1alpha1AnalysisType" - }, - "workspace": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1AnalysisConfig": { - "type": "object", - "properties": { - "enabled": { - "description": "Whether to enable the monitor.", - "type": "boolean" - }, - "kubeVolumes": { - "description": "Which volume to mount to the monitor.", - "type": "array", - "items": { - "$ref": "#/definitions/commonKubeVolume" - } - }, - "logPath": { - "description": "The path that contains the tensorboard, visualdl, or other monitor logs.", - "type": "string" - }, - "type": { - "description": "The type of the monitor.", - "$ref": "#/definitions/v1alpha1AnalysisType" - } - } - }, - "v1alpha1AnalysisStatus": { - "type": "object", - "properties": { - "accessUrl": { - "description": "The url of the analysis (tensorboard, visualdl) panel.", - "type": "string" - }, - "message": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/StatusPhase" - } - } - }, - "v1alpha1AnalysisType": { - "description": "Different types of monitor.\n\n - TENSORBOARD: The monitor as TensorBoard.", - "type": "string", - "default": "TYPE_UNSPECIFIED", - "enum": [ - "TYPE_UNSPECIFIED", - "TENSORBOARD" - ] - }, - "v1alpha1CheckQueueResponse": { - "type": "object", - "properties": { - "exist": { - "type": "boolean" - }, - "type": { - "title": "队列类型", - "$ref": "#/definitions/v1alpha1QueueType" - } - } - }, - "v1alpha1ClusterNamespace": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "clusterStatus": { - "$ref": "#/definitions/v1alpha1ClusterStatus" - }, - "name": { - "type": "string" - } - } - }, - "v1alpha1ClusterStatus": { - "type": "string", - "default": "CLUSTER_STATUS_UNSPECIFIED", - "enum": [ - "CLUSTER_STATUS_UNSPECIFIED", - "CLUSTER_STATUS_RUNNING", - "CLUSTER_STATUS_NOT_RUNNING", - "CLUSTER_STATUS_UNKNOWN" - ] - }, - "v1alpha1CreateLocalQueueResponse": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha1QueueStatus" - }, - "type": { - "title": "队列类型", - "$ref": "#/definitions/v1alpha1QueueType" - }, - "workspace": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1DataSource": { - "type": "object", - "properties": { - "options": { - "title": "非敏感数据配置参数", - "$ref": "#/definitions/v1alpha1DataSourceOptions" - }, - "type": { - "title": "数据源类型", - "$ref": "#/definitions/v1alpha1DataSourceType" - }, - "uri": { - "type": "string", - "title": "数据源地址,除去 GIT 类型之外的数据集都需要以协议开头,如:http://、https://、s3://、pvc://、nfs://" - } - } - }, - "v1alpha1DataSourceOptions": { - "type": "object", - "properties": { - "conda": { - "$ref": "#/definitions/v1alpha1DataSourceOptionsConda" - }, - "git": { - "$ref": "#/definitions/DataSourceOptionsGit" - }, - "http": { - "$ref": "#/definitions/v1alpha1DataSourceOptionsHttp" - }, - "s3": { - "$ref": "#/definitions/DataSourceOptionsS3" - } - } - }, - "v1alpha1DataSourceOptionsConda": { - "type": "object", - "properties": { - "condaEnvironmentYml": { - "type": "string" - }, - "gpuType": { - "type": "string", - "title": "是否使用 GPU, 为空表示不使用 GPU\n直接传 GPU 卡的 Resources name, 比如 nvidia.com/gpu, 或者 nvidia.com/vgpu" - }, - "packageManager": { - "$ref": "#/definitions/DataSourceOptionsCondaPackageManager" - }, - "pipExtraIndexUrl": { - "type": "string" - }, - "pipIndexUrl": { - "type": "string" - }, - "pipRequirementsTxt": { - "type": "string" - }, - "pythonVersion": { - "type": "string" - } - } - }, - "v1alpha1DataSourceOptionsHttp": { - "type": "object", - "properties": { - "headers": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1DataSourceType": { - "type": "string", - "default": "DATA_SOURCE_TYPE_UNSPECIFIED", - "enum": [ - "DATA_SOURCE_TYPE_UNSPECIFIED", - "GIT", - "S3", - "HTTP", - "PVC", - "NFS", - "CONDA" - ] - }, - "v1alpha1Dataset": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "cluster": { - "type": "string" - }, - "creationTimestamp": { - "type": "string", - "format": "date-time" - }, - "description": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string", - "required": [ - "name" - ] - }, - "namespace": { - "type": "string" - }, - "pvcName": { - "type": "string", - "title": "需要挂载的 PVC 名称" - }, - "secretRef": { - "type": "string", - "title": "数据源敏感数据存储的 Secret 名称。" - }, - "source": { - "title": "定义数据源", - "$ref": "#/definitions/v1alpha1DataSource" - }, - "status": { - "$ref": "#/definitions/v1alpha1DatasetStatus" - } - } - }, - "v1alpha1DatasetBoundPVC": { - "type": "object", - "properties": { - "accessMode": { - "$ref": "#/definitions/DatasetBoundPVCAccessMode" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "capacity": { - "type": "string", - "format": "int64", - "title": "PVC 容量,单位为 bytes。" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "storageClassName": { - "type": "string", - "title": "currently we do not support custom pvc name.\n string name = 1;" - } - } - }, - "v1alpha1DatasetStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/DatasetStatusPhase" - } - } - }, - "v1alpha1DatasetSyncProcess": { - "type": "object", - "properties": { - "status": { - "title": "Dataset 状态,只有到 phase 为 PROCESSING 时,才需要展示", - "$ref": "#/definitions/v1alpha1DatasetStatus" - }, - "syncProcess": { - "type": "number", - "format": "float", - "title": "预热进度,0 - 100 之间的值,表示百分比。" - } - } - }, - "v1alpha1DevDashboardQueryMetric": { - "type": "string", - "default": "DEV_DASH_QUERY_METRIC_UNSPECIFIED", - "enum": [ - "DEV_DASH_QUERY_METRIC_UNSPECIFIED", - "DEV_DASH_QUERY_RUNNING_NOTEBOOKS", - "DEV_DASH_QUERY_TOTAL_NOTEBOOKS", - "DEV_DASH_QUERY_RUNNING_PYTORCH_JOBS", - "DEV_DASH_QUERY_TOTAL_PYTORCH_JOBS", - "DEV_DASH_QUERY_RUNNING_TENSORFLOW_JOBS", - "DEV_DASH_QUERY_TOTAL_TENSORFLOW_JOBS", - "DEV_DASH_QUERY_TOTAL_DATASETS", - "DEV_DASH_TASKS_STATS" - ] - }, - "v1alpha1DevDashboardVectorQueryResponse": { - "type": "object", - "properties": { - "error": { - "type": "string" - }, - "metric": { - "$ref": "#/definitions/v1alpha1DevDashboardQueryMetric" - }, - "status": { - "$ref": "#/definitions/v1alpha1DevDashboardVectorQueryResponseStatus" - }, - "vector": { - "$ref": "#/definitions/v1alpha1Vector" - } - } - }, - "v1alpha1DevDashboardVectorQueryResponseStatus": { - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "SUCCESS", - "FAILURE" - ] - }, - "v1alpha1DeviceGPU": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "deviceUUID": { - "type": "string" - }, - "modelName": { - "type": "string" - }, - "nodeIP": { - "type": "string" - }, - "serialNumber": { - "type": "string" - }, - "totalFrameBufferMemory": { - "type": "string", - "format": "int64" - }, - "usedFrameBufferMemory": { - "type": "string", - "format": "int64" - }, - "vendor": { - "type": "string" - } - } - }, - "v1alpha1Framework": { - "type": "object", - "properties": { - "triton": { - "title": "Triton配置", - "$ref": "#/definitions/FrameworkTriton" - }, - "type": { - "title": "推理框架类型,目前支持Triton", - "$ref": "#/definitions/v1alpha1FrameworkType" - }, - "vllm": { - "$ref": "#/definitions/v1alpha1FrameworkVLLM" - } - } - }, - "v1alpha1FrameworkType": { - "type": "string", - "default": "FRAMEWORK_TYPE_UNSPECIFIED", - "enum": [ - "FRAMEWORK_TYPE_UNSPECIFIED", - "FRAMEWORK_TYPE_TRITON", - "FRAMEWORK_TYPE_VLLM" - ] - }, - "v1alpha1FrameworkVLLM": { - "type": "object", - "title": "VLLM Engine args" - }, - "v1alpha1GPUResourceSetting": { - "type": "object", - "properties": { - "alias": { - "type": "string", - "title": "gpu workload type resources alias" - }, - "aliasZh": { - "type": "string", - "title": "gpu workload type resources zh alias" - }, - "description": { - "type": "string", - "title": "gpu workload type resources description" - }, - "isAllocatable": { - "type": "boolean", - "title": "Resource quota can be allocated" - }, - "key": { - "type": "string", - "title": "gpu workload type resources key" - }, - "range": { - "title": "gpu resource range", - "$ref": "#/definitions/v1alpha1ResourceRange" - } - } - }, - "v1alpha1GPUSetting": { - "type": "object", - "properties": { - "alias": { - "type": "string", - "title": "alias is gpu card alias" - }, - "resource": { - "type": "array", - "title": "gpu card resource setting", - "items": { - "$ref": "#/definitions/v1alpha1GPUResourceSetting" - } - }, - "type": { - "type": "string", - "title": "type is gpu card type" - } - } - }, - "v1alpha1GPUSettingsResponse": { - "type": "object", - "title": "GPUSettingResponse is the response message for GPUSetting", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1GPUSetting" - } - } - } - }, - "v1alpha1GetDatasetCondaOptionsResponse": { - "type": "object", - "properties": { - "pythonVersions": { - "type": "array", - "title": "支持的 Python 版本", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1GrafanaDashboard": { - "type": "object", - "properties": { - "urlEN": { - "type": "string", - "title": "英文面板的 URL" - }, - "urlZH": { - "type": "string", - "title": "中文面板的 URL" - } - } - }, - "v1alpha1InferenceServing": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "authType": { - "$ref": "#/definitions/ServingAuthAuthType" - }, - "cluster": { - "type": "string" - }, - "framework": { - "$ref": "#/definitions/v1alpha1Framework" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastUpdated": { - "type": "string", - "format": "date-time" - }, - "models": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ServingConfig" - } - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "podConfig": { - "title": "kubernetes pod 配置", - "$ref": "#/definitions/commonPodConfig" - }, - "replicas": { - "type": "integer", - "format": "int32" - }, - "serviceConfig": { - "$ref": "#/definitions/v1alpha1ServiceConfig" - }, - "status": { - "$ref": "#/definitions/v1alpha1InferenceServingStatus" - } - } - }, - "v1alpha1InferenceServingStatus": { - "type": "object", - "properties": { - "accessBaseUrl": { - "type": "string", - "title": "服务访问地址" - }, - "availableReplicas": { - "type": "integer", - "format": "int32" - }, - "models": { - "type": "array", - "title": "模型状态,暂时只支持一个,这里用数组只是为了扩展", - "items": { - "$ref": "#/definitions/InferenceServingStatusModelStatus" - } - }, - "phase": { - "title": "推理服务状态", - "$ref": "#/definitions/InferenceServingStatusPhase" - } - } - }, - "v1alpha1Job": { - "type": "object", - "properties": { - "analysis": { - "title": "任务分析", - "$ref": "#/definitions/v1alpha1AnalysisConfig" - }, - "baseConfig": { - "$ref": "#/definitions/v1alpha1JobCreationBaseConfig" - }, - "cluster": { - "type": "string" - }, - "creationTimestamp": { - "type": "string", - "format": "date-time" - }, - "description": { - "type": "string" - }, - "jobSpec": { - "type": "object" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1JobPhase" - }, - "roleConfig": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1JobRoleDifferenceConfig" - } - }, - "runningDuration": { - "type": "integer", - "format": "int32", - "title": "任务运行时长" - }, - "totalResources": { - "title": "任务总资源(对所有容器做统计)", - "$ref": "#/definitions/commonResources" - }, - "trainingConfig": { - "title": "训练配置", - "$ref": "#/definitions/v1alpha1TrainingConfig" - }, - "trainingMode": { - "$ref": "#/definitions/v1alpha1TrainingMode" - }, - "type": { - "$ref": "#/definitions/v1alpha1JobType" - } - } - }, - "v1alpha1JobCreationBaseConfig": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "args": { - "type": "array", - "items": { - "type": "string" - } - }, - "command": { - "type": "array", - "items": { - "type": "string" - } - }, - "image": { - "type": "string" - }, - "imagePullSecret": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "noOverrideEnvPath": { - "type": "boolean" - }, - "podConfig": { - "$ref": "#/definitions/commonPodConfig" - }, - "shmSize": { - "type": "integer", - "format": "int32", - "title": "SHM 空间的大小,单位 MB\n为 0 表示不分配 SHM 空间" - }, - "workingDir": { - "type": "string" - } - } - }, - "v1alpha1JobPhase": { - "type": "string", - "title": "- JOB_PHASE_UNSPECIFIED: Unspecified type.\n - CREATED: 任务创建成功。\n - RUNNING: 任务运行中。\n - FAILED: 任务运行失败。\n - SUCCEEDED: 任务运行成功。\n - SUSPENDED: 任务停止。", - "default": "JOB_PHASE_UNSPECIFIED", - "enum": [ - "JOB_PHASE_UNSPECIFIED", - "CREATED", - "RUNNING", - "FAILED", - "SUCCEEDED", - "SUSPENDED" - ] - }, - "v1alpha1JobRoleDifferenceConfig": { - "type": "object", - "properties": { - "replicas": { - "type": "integer", - "format": "int32" - }, - "resources": { - "$ref": "#/definitions/commonResources" - } - } - }, - "v1alpha1JobSchedulersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/JobSchedulersResponseScheduler" - } - } - } - }, - "v1alpha1JobType": { - "type": "string", - "title": "- MPI: XGBOOST = 4;", - "default": "JOB_TYPE_UNSPECIFIED", - "enum": [ - "JOB_TYPE_UNSPECIFIED", - "PYTORCH", - "TENSORFLOW", - "PADDLE", - "MPI", - "MXNET" - ] - }, - "v1alpha1ListAIClustersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1AICluster" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListAnalysisResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Analysis" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListClusterNamespaceResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ClusterNamespace" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListDatasetResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Dataset" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListDevicesGPUsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1DeviceGPU" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListInferenceServingsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1InferenceServing" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListJobsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Job" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListNotebooksResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Notebook" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListPVCsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaims" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListQueueResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Queue" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListStorageClassesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1StorageClass" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ListWorkspacesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Workspace" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1Matrix": { - "type": "object", - "properties": { - "matrix": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1SampleStream" - } - } - } - }, - "v1alpha1MultipleDevDashboardVectorQueryResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1DevDashboardVectorQueryResponse" - } - } - } - }, - "v1alpha1MultipleVectorQueryResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1VectorQueryResponse" - } - } - } - }, - "v1alpha1Notebook": { - "type": "object", - "properties": { - "analysis": { - "title": "任务分析", - "$ref": "#/definitions/v1alpha1AnalysisConfig" - }, - "cluster": { - "type": "string" - }, - "config": { - "$ref": "#/definitions/v1alpha1NotebookConfig" - }, - "creationTimestamp": { - "type": "string", - "format": "date-time" - }, - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "priorityClass": { - "type": "string" - }, - "queueName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha1NotebookStatus" - }, - "type": { - "$ref": "#/definitions/v1alpha1NotebookType" - }, - "workspace": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1NotebookConfig": { - "type": "object", - "properties": { - "affinity": { - "description": "The affinity of the pod.", - "$ref": "#/definitions/commonAffinity" - }, - "enableSSH": { - "type": "boolean", - "title": "Control whether ssh service is enabled on notebooks" - }, - "image": { - "type": "string" - }, - "kubeEnvs": { - "type": "array", - "items": { - "$ref": "#/definitions/commonKubeEnv" - } - }, - "kubeMetadata": { - "$ref": "#/definitions/NotebookConfigKubeMetadata" - }, - "kubeVolumes": { - "type": "array", - "items": { - "$ref": "#/definitions/commonKubeVolume" - } - }, - "resources": { - "$ref": "#/definitions/commonResources" - }, - "runAsRoot": { - "type": "boolean" - }, - "serviceType": { - "title": "deprecated", - "$ref": "#/definitions/NotebookConfigServiceType" - }, - "token": { - "type": "string", - "title": "deprecated" - }, - "tolerationSeconds": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1NotebookImage": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/v1alpha1NotebookType" - } - } - }, - "v1alpha1NotebookImageListResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NotebookImage" - } - } - } - }, - "v1alpha1NotebookStatus": { - "type": "object", - "properties": { - "accessUrl": { - "description": "The url of the notebook.", - "type": "string" - }, - "message": { - "description": "A human readable message indicating details about why the notebook is\nin this condition.", - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1NotebookStatusPhase" - } - } - }, - "v1alpha1NotebookStatusPhase": { - "description": " - PENDING: The notebook is being prepared for use.\n - RUNNING: The notebook is active and ready to use.\n - STOPPED: The notebook is being stopped.\n - FAILED: The notebook is failed.", - "type": "string", - "default": "PHASE_UNSPECIFIED", - "enum": [ - "PHASE_UNSPECIFIED", - "PENDING", - "RUNNING", - "STOPPED", - "FAILED" - ] - }, - "v1alpha1NotebookType": { - "type": "string", - "default": "TYPE_UNSPECIFIED", - "enum": [ - "TYPE_UNSPECIFIED", - "JUPYTER", - "CODE" - ] - }, - "v1alpha1PersistentVolumeClaims": { - "type": "object", - "properties": { - "capacity": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "storageClass": { - "type": "string" - } - } - }, - "v1alpha1PodInstance": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "containerReadyCount": { - "type": "integer", - "format": "int32" - }, - "containerTotalCount": { - "type": "integer", - "format": "int32" - }, - "containers": { - "type": "array", - "items": { - "$ref": "#/definitions/PodInstanceContainer" - } - }, - "creationTimestamp": { - "type": "string", - "format": "date-time" - }, - "name": { - "type": "string", - "title": "pod name" - }, - "namespace": { - "type": "string" - }, - "nodeName": { - "type": "string" - }, - "phase": { - "type": "string", - "title": "Pod phase" - }, - "podIp": { - "type": "string" - }, - "resources": { - "$ref": "#/definitions/commonResources" - } - } - }, - "v1alpha1PodInstanceListResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PodInstance" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1QueryMetric": { - "type": "string", - "default": "QUERY_METRIC_UNSPECIFIED", - "enum": [ - "QUERY_METRIC_UNSPECIFIED", - "QUERY_METRIC_GPU_INSTALLED_NODES", - "QUERY_METRIC_TOTAL_NODES", - "QUERY_METRIC_INUSE_GPUS", - "QUERY_METRIC_TOTAL_GPUS", - "QUERY_METRIC_INUSE_CPUS", - "QUERY_METRIC_TOTAL_CPUS", - "QUERY_METRIC_INUSE_MEM", - "QUERY_METRIC_TOTAL_MEM", - "QUERY_METRIC_INUSE_VGPU_MEM", - "QUERY_METRIC_TOTAL_VGPU_MEM", - "QUERY_METRIC_TOTAL_CLUSTERS" - ] - }, - "v1alpha1QueryTimeSeriesMetric": { - "type": "string", - "default": "QUERY_TIME_SERIES_UNSPECIFIED", - "enum": [ - "QUERY_TIME_SERIES_UNSPECIFIED", - "QUERY_TIME_SERIES_METRIC_GPU_DISTRIBUTION", - "QUERY_TIME_SERIES_METRIC_GPU_UTILIZATION" - ] - }, - "v1alpha1QueryTimeSeriesMetricRange": { - "type": "string", - "default": "QUERY_TIME_SERIES_METRIC_RANGES_UNSPECIFIED", - "enum": [ - "QUERY_TIME_SERIES_METRIC_RANGES_UNSPECIFIED", - "QUERY_TIME_SERIES_METRIC_RANGES_LAST_3_DAYS", - "QUERY_TIME_SERIES_METRIC_RANGES_LAST_7_DAYS", - "QUERY_TIME_SERIES_METRIC_RANGES_LAST_15_DAYS" - ] - }, - "v1alpha1QueryTimeSeriesVectorsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1TimeSeriesVectorQueryResponse" - } - } - } - }, - "v1alpha1Queue": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "cluster": { - "type": "string" - }, - "description": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "resources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1QueueResource" - } - }, - "resourcesAvailable": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1QueueResource" - } - }, - "status": { - "$ref": "#/definitions/v1alpha1QueueStatus" - }, - "strategy": { - "title": "队列策略", - "$ref": "#/definitions/v1alpha1QueueStrategy" - }, - "type": { - "title": "队列类型", - "$ref": "#/definitions/v1alpha1QueueType" - }, - "workspace": { - "type": "integer", - "format": "int32" - }, - "workspaceAlias": { - "type": "string" - } - } - }, - "v1alpha1QueueJSON": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - } - }, - "v1alpha1QueuePhase": { - "type": "string", - "default": "QUEUE_PHASE_UNSPECIFIED", - "enum": [ - "QUEUE_PHASE_UNSPECIFIED", - "READY" - ] - }, - "v1alpha1QueueResource": { - "type": "object", - "properties": { - "borrowingLimit": { - "type": "string" - }, - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "v1alpha1QueueStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1QueuePhase" - } - } - }, - "v1alpha1QueueStrategy": { - "type": "string", - "default": "QUEUE_STRATEGY_UNSPECIFIED", - "enum": [ - "QUEUE_STRATEGY_UNSPECIFIED", - "STRICT_FIFO", - "BEST_EFFORT_FIFO" - ] - }, - "v1alpha1QueueType": { - "type": "string", - "default": "QUEUE_TYPE_UNSPECIFIED", - "enum": [ - "QUEUE_TYPE_UNSPECIFIED", - "KUEUE" - ] - }, - "v1alpha1RelatedInstancesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/RelatedInstancesResponseInstance" - } - }, - "page": { - "$ref": "#/definitions/commonPagination" - } - } - }, - "v1alpha1ResourceRange": { - "type": "object", - "properties": { - "max": { - "type": "integer", - "format": "int32", - "title": "resource max value" - }, - "maxDesc": { - "type": "string", - "title": "max resource description" - }, - "min": { - "type": "integer", - "format": "int32", - "title": "resource min value" - }, - "minDesc": { - "type": "string", - "title": "min resource description" - } - } - }, - "v1alpha1ResourceType": { - "type": "string", - "default": "JOB_TYPE_UNSPECIFIED", - "enum": [ - "JOB_TYPE_UNSPECIFIED", - "PYTORCH", - "TENSORFLOW", - "PADDLE", - "NOTEBOOK", - "INFERENCE", - "MXNET", - "MPI" - ] - }, - "v1alpha1RestartPolicy": { - "type": "string", - "title": "- RESTART_POLICY_NEVER: 如果任务失败,则不重启任务。\n - RESTART_POLICY_ON_FAILURE: 如果任务失败,则重启任务,", - "default": "RESTART_POLICY_UNSPECIFIED", - "enum": [ - "RESTART_POLICY_UNSPECIFIED", - "RESTART_POLICY_NEVER", - "RESTART_POLICY_ON_FAILURE" - ] - }, - "v1alpha1Sample": { - "type": "object", - "properties": { - "metric": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "values": { - "$ref": "#/definitions/v1alpha1SamplePair" - } - } - }, - "v1alpha1SamplePair": { - "type": "object", - "properties": { - "timestamp": { - "type": "string", - "format": "int64" - }, - "value": { - "type": "string" - } - } - }, - "v1alpha1SampleStream": { - "type": "object", - "properties": { - "metric": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "values": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1SamplePair" - } - } - } - }, - "v1alpha1SecretOptions": { - "type": "object", - "properties": { - "akSk": { - "$ref": "#/definitions/SecretOptionsAkSkAuth" - }, - "authType": { - "title": "认证类型", - "$ref": "#/definitions/SecretOptionsAuthType" - }, - "basic": { - "$ref": "#/definitions/SecretOptionsBasicAuth" - }, - "ssh": { - "$ref": "#/definitions/SecretOptionsSSHAuth" - }, - "token": { - "$ref": "#/definitions/SecretOptionsTokenAuth" - } - } - }, - "v1alpha1ServiceConfig": { - "type": "object", - "properties": { - "serviceType": { - "$ref": "#/definitions/v1alpha1ServiceType" - } - } - }, - "v1alpha1ServiceType": { - "type": "string", - "default": "SERVICE_TYPE_UNSPECIFIED", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "NODE_PORT", - "LOAD_BALANCER", - "CLUSTER_IP" - ] - }, - "v1alpha1ServingAuth": { - "type": "object", - "properties": { - "authType": { - "title": "推理服务的认证方式", - "$ref": "#/definitions/ServingAuthAuthType" - }, - "tritonRestrictedKeyValue": { - "title": "Triton 服务的认证方式", - "$ref": "#/definitions/ServingAuthTritonRestrictedKeyValue" - } - } - }, - "v1alpha1ServingConfig": { - "type": "object", - "properties": { - "modelPath": { - "type": "string" - }, - "name": { - "type": "string" - }, - "triton": { - "$ref": "#/definitions/ServingConfigTritonServingConfig" - }, - "version": { - "type": "string" - }, - "vllm": { - "$ref": "#/definitions/v1alpha1ServingConfigVLLM" - } - } - }, - "v1alpha1ServingConfigVLLM": { - "type": "object", - "properties": { - "enableLora": { - "type": "boolean" - }, - "loraModels": { - "type": "array", - "items": { - "$ref": "#/definitions/VLLMLoraModel" - } - }, - "maxCpuLoras": { - "type": "integer", - "format": "int32" - }, - "maxLoras": { - "type": "integer", - "format": "int32" - }, - "maxLorasRank": { - "type": "integer", - "format": "int32" - }, - "tensorParallelSize": { - "type": "integer", - "format": "int32" - }, - "trustRemoteCode": { - "type": "boolean", - "title": "VLLM 模型的配置" - } - } - }, - "v1alpha1StorageClass": { - "type": "object", - "properties": { - "allowReclaim": { - "type": "boolean", - "title": "是否允许扩容" - }, - "cluster": { - "type": "string" - }, - "isDefault": { - "type": "boolean", - "title": "是否默认存储类" - }, - "name": { - "type": "string" - }, - "provisioner": { - "type": "string" - } - } - }, - "v1alpha1TimeSeriesVectorQueryResponse": { - "type": "object", - "properties": { - "error": { - "type": "string" - }, - "matrix": { - "$ref": "#/definitions/v1alpha1Matrix" - }, - "metric": { - "$ref": "#/definitions/v1alpha1QueryTimeSeriesMetric" - }, - "status": { - "$ref": "#/definitions/v1alpha1TimeSeriesVectorQueryResponseStatus" - } - } - }, - "v1alpha1TimeSeriesVectorQueryResponseStatus": { - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "SUCCESS", - "FAILURE" - ] - }, - "v1alpha1TrainingConfig": { - "type": "object", - "properties": { - "maxRetries": { - "type": "integer", - "format": "int32", - "title": "最大重启次数" - }, - "maxTrainingDuration": { - "type": "string", - "format": "int64", - "title": "最大训练时长,以秒为单位" - }, - "restartPolicy": { - "$ref": "#/definitions/v1alpha1RestartPolicy" - } - } - }, - "v1alpha1TrainingMode": { - "type": "string", - "title": "- TRAINING_MODE_UNSPECIFIED: Unspecified type.\n - SINGLE: 单机模式。\n - DISTRIBUTED: 分布式模式。", - "default": "TRAINING_MODE_UNSPECIFIED", - "enum": [ - "TRAINING_MODE_UNSPECIFIED", - "SINGLE", - "DISTRIBUTED" - ] - }, - "v1alpha1UserPermission": { - "type": "object", - "properties": { - "isBaizeOwner": { - "type": "boolean", - "title": "string name =1;\n是否是 Baize 平台管理员" - } - } - }, - "v1alpha1Vector": { - "type": "object", - "properties": { - "vector": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Sample" - } - } - } - }, - "v1alpha1VectorQueryResponse": { - "type": "object", - "properties": { - "error": { - "type": "string" - }, - "metric": { - "$ref": "#/definitions/v1alpha1QueryMetric" - }, - "status": { - "$ref": "#/definitions/v1alpha1VectorQueryResponseStatus" - }, - "vector": { - "$ref": "#/definitions/v1alpha1Vector" - } - } - }, - "v1alpha1VectorQueryResponseStatus": { - "type": "string", - "default": "STATUS_UNSPECIFIED", - "enum": [ - "STATUS_UNSPECIFIED", - "SUCCESS", - "FAILURE" - ] - }, - "v1alpha1Workspace": { - "type": "object", - "properties": { - "alias": { - "type": "string" - }, - "workspaceId": { - "type": "integer", - "format": "int32" - } - } - } - }, - "tags": [ - { - "name": "AnalysisManagement" - }, - { - "name": "ClusterService" - }, - { - "name": "DatasetManagement" - }, - { - "name": "DeviceService" - }, - { - "name": "JobsManagement" - }, - { - "name": "MetricsService" - }, - { - "name": "NotebookService" - }, - { - "name": "PermissionService" - }, - { - "name": "PodsManagement" - }, - { - "name": "QueueManagement" - }, - { - "name": "InferenceServingManagement" - }, - { - "name": "WorkspaceService" - } - ] -} diff --git a/site/openapi/ghippo/index.html b/site/openapi/ghippo/index.html deleted file mode 100644 index 3e4327a..0000000 --- a/site/openapi/ghippo/index.html +++ /dev/null @@ -1,398 +0,0 @@ - - - - - - - - - - - - - -全局管理 OpenAPI 文档 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/openapi/ghippo/swagger-d958dec0.html b/site/openapi/ghippo/swagger-d958dec0.html deleted file mode 100644 index ee89f56..0000000 --- a/site/openapi/ghippo/swagger-d958dec0.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - Swagger UI - - - - - - -
- - - - - - \ No newline at end of file diff --git a/site/openapi/ghippo/v0.31.0.json b/site/openapi/ghippo/v0.31.0.json deleted file mode 100644 index 1babbff..0000000 --- a/site/openapi/ghippo/v0.31.0.json +++ /dev/null @@ -1,12574 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "全局管理", - "version": "v0.31.0" - }, - "tags": [ - { - "name": "About" - }, - { - "name": "Audit" - }, - { - "name": "BatchAudits" - }, - { - "name": "Client" - }, - { - "name": "Account" - }, - { - "name": "FeatureGate" - }, - { - "name": "GProducts" - }, - { - "name": "GProductLicenses" - }, - { - "name": "Group" - }, - { - "name": "IDP" - }, - { - "name": "KeycloakEvent" - }, - { - "name": "Login" - }, - { - "name": "LoginPage" - }, - { - "name": "Message" - }, - { - "name": "Oauth2" - }, - { - "name": "OIDC" - }, - { - "name": "Openapi" - }, - { - "name": "ProductNavigator" - }, - { - "name": "Publish" - }, - { - "name": "Role" - }, - { - "name": "SecurityPolicy" - }, - { - "name": "SmtpSetting" - }, - { - "name": "Theme" - }, - { - "name": "TopNavigator" - }, - { - "name": "Users" - }, - { - "name": "Webhook" - }, - { - "name": "Workspace" - }, - { - "name": "Ldap" - }, - { - "name": "Audit" - } - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "paths": { - "/apis/ghippo.io/v1alpha1/.well-known/openid-configuration": { - "get": { - "operationId": "OIDC_WellKnown", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oidcWellKnownResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "OIDC" - ] - } - }, - "/apis/ghippo.io/v1alpha1/about/developers": { - "get": { - "operationId": "About_ListDevelopers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/aboutListDevelopersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "About" - ] - } - }, - "/apis/ghippo.io/v1alpha1/about/opensources": { - "get": { - "operationId": "About_ListOpenSources", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/aboutListOpenSourcesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "page", - "description": "page: 当前页码,默认值为1", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "每页数量,默认为 10", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "About" - ] - } - }, - "/apis/ghippo.io/v1alpha1/about/versions": { - "get": { - "operationId": "About_ListGProductVersions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/aboutListGProductVersionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "About" - ] - } - }, - "/apis/ghippo.io/v1alpha1/audits/batch": { - "post": { - "operationId": "BatchAudits_BatchInsertAudits", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/batchauditBatchInsertAuditsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/batchauditBatchInsertAuditsRequest" - } - } - ], - "tags": [ - "BatchAudits" - ] - } - }, - "/apis/ghippo.io/v1alpha1/audits/clear": { - "get": { - "operationId": "Audit_GetAutoClearAuditTime", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditGetAutoClearAuditTimeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha1/audits/external": { - "get": { - "summary": "来自外部传递进来的审计日志,用于不经过apiserver的请求,例如直接请求keycloak的请求,由前端埋点调用", - "operationId": "Audit_ExternalAudit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditExternalAuditResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "externalType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "loginFailed", - "forgetPassword", - "resetPassword" - ], - "default": "loginFailed" - }, - { - "name": "resourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "code", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha1/audits/limit-range": { - "get": { - "operationId": "Audit_GetLimitRangeTime", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditGetLimitRangeTimeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha1/audits/reports/resources": { - "get": { - "operationId": "Audit_GetAuditResourceReport", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditGetAuditResourceReportResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "start", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha1/audits/reports/users": { - "get": { - "operationId": "Audit_GetAuditUserReport", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditGetAuditUserReportResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "start", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha1/auth-token": { - "get": { - "operationId": "Openapi_AuthToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditAuthTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Openapi" - ] - } - }, - "/apis/ghippo.io/v1alpha1/authenticate-with-password": { - "post": { - "summary": "gRPC 调用,不暴露给 OpenAPI", - "operationId": "Login_AuthenticateWithPassword", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginAuthenticateWithPasswordResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginAuthenticateWithPasswordRequest" - } - } - ], - "tags": [ - "Login" - ] - } - }, - "/apis/ghippo.io/v1alpha1/certs": { - "get": { - "operationId": "Openapi_Certs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditCertsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Openapi" - ] - } - }, - "/apis/ghippo.io/v1alpha1/clients": { - "get": { - "operationId": "Client_ListClients", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clientListClientsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clientId", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Client" - ] - }, - "post": { - "operationId": "Client_CreateClient", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clientCreateClientResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/clientCreateClientRequest" - } - } - ], - "tags": [ - "Client" - ] - } - }, - "/apis/ghippo.io/v1alpha1/clients/{id}": { - "get": { - "operationId": "Client_GetClient", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clientGetClientResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Client" - ] - }, - "delete": { - "operationId": "Client_DeleteClient", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clientDeleteClientResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Client" - ] - }, - "put": { - "operationId": "Client_UpdateClient", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clientUpdateClientResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "clientId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "baseUrl": { - "type": "string", - "title": "repeated string redirect_uris = 4 [(validate.rules).repeated.min_items = 1];" - } - } - } - } - ], - "tags": [ - "Client" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user": { - "get": { - "operationId": "Account_GetUser", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1currentuserGetUserResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/accesstoken": { - "post": { - "operationId": "Account_CreateAccessToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserCreateAccessTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/currentuserCreateAccessTokenRequest" - } - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/accesstokens": { - "get": { - "operationId": "Account_ListAccessTokens", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserListAccessTokensResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/accesstokens/{id}": { - "delete": { - "operationId": "Account_DeleteAccessToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserDeleteAccessTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/email": { - "put": { - "operationId": "Account_UpdateEmail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserUpdateEmailResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/currentuserUpdateEmailRequest" - } - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/global-permissions": { - "get": { - "operationId": "Account_GetGlobalPermissions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserGetGlobalPermissionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/language": { - "put": { - "operationId": "Account_UpdateLanguage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserUpdateLanguageResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/currentuserUpdateLanguageRequest" - } - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/password": { - "put": { - "operationId": "Account_UpdatePassword", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserUpdatePasswordResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/currentuserUpdatePasswordRequest" - } - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/password-description": { - "get": { - "operationId": "Account_PasswordDescription", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserPasswordDescriptionResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/set-password": { - "put": { - "operationId": "Account_SetCurrentUserPassword", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserSetCurrentUserPasswordResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/currentuserSetCurrentUserPasswordRequest" - } - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/sshkeys": { - "get": { - "operationId": "Account_ListSSHKeys", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserListSSHKeysResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Account" - ] - }, - "post": { - "operationId": "Account_CreateSSHKey", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserCreateSSHKeyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/currentuserCreateSSHKeyRequest" - } - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/current-user/sshkeys/{sshkeyId}": { - "delete": { - "operationId": "Account_DeleteSSHKey", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserDeleteSSHKeyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "sshkeyId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "id", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Account" - ] - }, - "put": { - "operationId": "Account_UpdateSSHKey", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/currentuserUpdateSSHKeyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "sshkeyId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "sshKeyName": { - "type": "string" - }, - "publicKey": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Account" - ] - } - }, - "/apis/ghippo.io/v1alpha1/exclusiveresource-types": { - "get": { - "operationId": "Workspace_ListExclusiveResourceTypes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListExclusiveResourceTypesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/feature-gate": { - "get": { - "operationId": "FeatureGate_ListFeatureGates", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/feature_gateListFeatureGatesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "FeatureGate" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folderrolenames": { - "get": { - "operationId": "Role_ListFolderRoleNames", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleListFolderRoleNamesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folderroles/{name}/members-folders": { - "get": { - "operationId": "Role_ListMembersFoldersByFolderRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleListMembersFoldersByFolderRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders": { - "get": { - "operationId": "Workspace_ListFolders", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListFoldersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - }, - "post": { - "operationId": "Workspace_CreateFolder", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceCreateFolderResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/workspaceCreateFolderRequest" - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders-tree": { - "get": { - "operationId": "Workspace_ListFolderTree", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListFolderTreeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}": { - "get": { - "operationId": "Workspace_GetFolder", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceGetFolderResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - }, - "delete": { - "summary": "TODO: sub folder删不删?", - "operationId": "Workspace_DeleteFolder", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceDeleteFolderResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - }, - "put": { - "operationId": "Workspace_UpdateFolder", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceUpdateFolderResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "alias": { - "type": "string", - "title": "string name = 1 [(validate.rules).string.min_len = 1];" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}/authorize": { - "post": { - "operationId": "Workspace_Authorize", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceAuthorizeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "memberName": { - "type": "string", - "title": "string role_name = 2;" - }, - "memberType": { - "type": "string" - }, - "memberId": { - "type": "string" - }, - "roleNames": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}/deauthorize": { - "put": { - "operationId": "Workspace_Deauthorize", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceDeauthorizeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "roleName": { - "type": "string" - }, - "memberName": { - "type": "string" - }, - "memberType": { - "type": "string" - }, - "memberId": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}/groups": { - "get": { - "operationId": "Workspace_FolderListGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceFolderListGroupsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}/members-roles": { - "get": { - "operationId": "Workspace_ListMembersRolesByFolder", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListMembersRolesByFolderResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "memberName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "memberType", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "roleName", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}/permissions": { - "get": { - "operationId": "Workspace_FolderListPermissions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceFolderListPermissionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}/reauthorize": { - "put": { - "operationId": "Workspace_Reauthorize", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceReauthorizeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "oldRoleName": { - "type": "string" - }, - "newRoleName": { - "type": "string" - }, - "memberName": { - "type": "string" - }, - "memberType": { - "type": "string" - }, - "memberId": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/folders/{folderId}/users": { - "get": { - "operationId": "Workspace_FolderListUsers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceFolderListUsersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "folderId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "pageSize", - "description": "每页条数", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "description": "当前页", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/gproduct-licenses": { - "get": { - "operationId": "GProductLicenses_ListGProductLicenses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductlicenseListGProductLicensesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "GProductLicenses" - ] - }, - "put": { - "operationId": "GProductLicenses_UpdateGProductLicenses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductlicenseUpdateGProductLicensesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/gproductlicenseUpdateGProductLicensesRequest" - } - } - ], - "tags": [ - "GProductLicenses" - ] - } - }, - "/apis/ghippo.io/v1alpha1/gproduct-licenses/esn": { - "get": { - "operationId": "GProductLicenses_GetGProductLicensesESN", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductlicenseGetGProductLicensesESNResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "GProductLicenses" - ] - } - }, - "/apis/ghippo.io/v1alpha1/gproduct-licenses/over-quota": { - "get": { - "operationId": "GProductLicenses_GetGProductLicensesOverQuota", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductlicenseGetGProductLicensesOverQuotaResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "GProductLicenses" - ] - } - }, - "/apis/ghippo.io/v1alpha1/gproduct-licenses/yaml": { - "get": { - "operationId": "GProductLicenses_GetGProductLicensesYaml", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductlicenseGetGProductLicenseYamlResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "GProductLicenses" - ] - } - }, - "/apis/ghippo.io/v1alpha1/gproduct-licenses/{id}": { - "get": { - "operationId": "GProductLicenses_GetGProductLicenses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductlicenseGetGProductLicensesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "GProductLicenses" - ] - }, - "delete": { - "operationId": "GProductLicenses_DeleteGProductLicenses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductlicenseDeleteProductLicensesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "GProductLicenses" - ] - } - }, - "/apis/ghippo.io/v1alpha1/gproducts": { - "get": { - "operationId": "GProducts_ListGProducts", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/gproductListGProductsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "GProducts" - ] - } - }, - "/apis/ghippo.io/v1alpha1/groups": { - "get": { - "operationId": "Group_ListGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupListGroupsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Group" - ] - }, - "post": { - "operationId": "Group_CreateGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupCreateGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/groupCreateGroupRequest" - } - } - ], - "tags": [ - "Group" - ] - } - }, - "/apis/ghippo.io/v1alpha1/groups/{id}": { - "get": { - "operationId": "Group_GetGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupGetGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Group" - ] - }, - "delete": { - "operationId": "Group_DeleteGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupDeleteGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Group" - ] - }, - "put": { - "operationId": "Group_UpdateGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupUpdateGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Group" - ] - } - }, - "/apis/ghippo.io/v1alpha1/groups/{id}/members": { - "get": { - "operationId": "Group_GroupMembers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupGroupMembersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Group" - ] - } - }, - "/apis/ghippo.io/v1alpha1/groups/{id}/members/{userId}": { - "delete": { - "operationId": "Group_DeleteUserFromGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupDeleteUserFromGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "userId", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Group" - ] - }, - "post": { - "operationId": "Group_AddUserToGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupAddUserToGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "userId", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Group" - ] - } - }, - "/apis/ghippo.io/v1alpha1/groups/{id}/roles": { - "get": { - "operationId": "Group_ListGroupRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupListGroupRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "type", - "description": "role type", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "authorized", - "description": "是否授权", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Group" - ] - }, - "put": { - "operationId": "Group_UpdateGroupRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupUpdateGroupRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "addRoles": { - "type": "array", - "items": { - "type": "string" - } - }, - "removeRoles": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - ], - "tags": [ - "Group" - ] - } - }, - "/apis/ghippo.io/v1alpha1/groups/{id}/subjects": { - "get": { - "operationId": "Group_ListGroupSubjects", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/groupListGroupSubjectResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Group" - ] - } - }, - "/apis/ghippo.io/v1alpha1/idp": { - "get": { - "operationId": "IDP_ListIDPs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpListIDPsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "IDP" - ] - }, - "post": { - "operationId": "IDP_CreateIDP", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpCreateIDPResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/idpCreateIDPRequest" - } - } - ], - "tags": [ - "IDP" - ] - } - }, - "/apis/ghippo.io/v1alpha1/idp/wellknown-url": { - "get": { - "operationId": "IDP_GetWellKnownUrl", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpGetWellKnownUrlResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "IDP" - ] - } - }, - "/apis/ghippo.io/v1alpha1/idp/{alias}": { - "get": { - "operationId": "IDP_GetIDP", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpGetIDPResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "alias", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "IDP" - ] - }, - "delete": { - "operationId": "IDP_DeleteIDP", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpDeleteIDPResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "alias", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "IDP" - ] - }, - "put": { - "operationId": "IDP_UpdateIDP", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpUpdateIDPResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "alias", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "clientAuthentications": { - "$ref": "#/definitions/idpClientAuthentications" - }, - "providerId": { - "$ref": "#/definitions/v1alpha1idpProviderType" - }, - "authorizationUrl": { - "type": "string" - }, - "userInfoUrl": { - "type": "string" - }, - "tokenUrl": { - "type": "string" - }, - "logoutUrl": { - "type": "string" - }, - "enableAutoLinkFlow": { - "type": "boolean" - }, - "enabled": { - "type": "boolean" - } - } - } - } - ], - "tags": [ - "IDP" - ] - } - }, - "/apis/ghippo.io/v1alpha1/idp/{alias}/redirect-url": { - "get": { - "operationId": "IDP_GetRedirectUrl", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/idpGetRedirectUrlResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "alias", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "IDP" - ] - } - }, - "/apis/ghippo.io/v1alpha1/keycloak-event": { - "post": { - "operationId": "KeycloakEvent_KeycloakEvent", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/keycloakeventKeycloakEventResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/keycloakeventKeycloakEventRequest" - } - } - ], - "tags": [ - "KeycloakEvent" - ] - } - }, - "/apis/ghippo.io/v1alpha1/login": { - "get": { - "operationId": "Login_RedirectLogin", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginLoginGetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "callbackUrl", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Login" - ] - }, - "post": { - "operationId": "Login_OIDCLogin", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginLoginPostResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginLoginPostRequest" - } - } - ], - "tags": [ - "Login" - ] - } - }, - "/apis/ghippo.io/v1alpha1/login-page/info": { - "get": { - "operationId": "LoginPage_GetInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginpageGetLoginPageInfoResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "LoginPage" - ] - }, - "put": { - "operationId": "LoginPage_UpdateInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginpageUpdateLoginPageInfoResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginpageUpdateLoginPageInfoRequest" - } - } - ], - "tags": [ - "LoginPage" - ] - } - }, - "/apis/ghippo.io/v1alpha1/login-page/reset": { - "post": { - "operationId": "LoginPage_ResetInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginpageResetLoginPageInfoResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "LoginPage" - ] - } - }, - "/apis/ghippo.io/v1alpha1/login-page/version": { - "get": { - "operationId": "LoginPage_GetVersion", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginpageGetLoginPageVersionResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "LoginPage" - ] - } - }, - "/apis/ghippo.io/v1alpha1/logout": { - "delete": { - "operationId": "Login_OIDCLogout", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginLogoutResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Login" - ] - } - }, - "/apis/ghippo.io/v1alpha1/messages": { - "get": { - "operationId": "Message_ListMessages", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/messageListMessagesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "unreadCount", - "description": "是否只返回统计未读数量", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "read", - "description": "是否只返回已读或未读,传\"read\"或\"unread\"来区分,不传返回已读和未读的消息", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "all", - "read", - "unread" - ], - "default": "all" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Message" - ] - } - }, - "/apis/ghippo.io/v1alpha1/messages/count": { - "get": { - "operationId": "Message_GetMessagesCount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/messageGetMessagesCountResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Message" - ] - } - }, - "/apis/ghippo.io/v1alpha1/messages/delete": { - "post": { - "operationId": "Message_DeleteMessages", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/messageDeleteMessagesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/messageDeleteMessagesRequest" - } - } - ], - "tags": [ - "Message" - ] - } - }, - "/apis/ghippo.io/v1alpha1/messages/system/system-message": { - "get": { - "operationId": "Message_GetSystemMessage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/messageGetSystemMessageResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Message" - ] - } - }, - "/apis/ghippo.io/v1alpha1/messages/toggle-unread": { - "get": { - "operationId": "Message_ToggleUnreadMessage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/messageToggleUnreadMessageResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "next", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Message" - ] - } - }, - "/apis/ghippo.io/v1alpha1/messages/{id}": { - "get": { - "operationId": "Message_GetMessage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/messageGetMessageResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Message" - ] - } - }, - "/apis/ghippo.io/v1alpha1/oauth2": { - "get": { - "operationId": "Oauth2_GetOauth2", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oauthGetOauth2Response" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Oauth2" - ] - }, - "delete": { - "operationId": "Oauth2_DeleteOauth2", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oauthDeleteOauth2Response" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "providerType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "wechatwork" - ], - "default": "wechatwork" - } - ], - "tags": [ - "Oauth2" - ] - }, - "post": { - "operationId": "Oauth2_CreateOauth2", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oauthCreateOauth2Response" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/oauthCreateOauth2Request" - } - } - ], - "tags": [ - "Oauth2" - ] - }, - "put": { - "operationId": "Oauth2_UpdateOauth2", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oauthUpdateOauth2Response" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/oauthUpdateOauth2Request" - } - } - ], - "tags": [ - "Oauth2" - ] - } - }, - "/apis/ghippo.io/v1alpha1/oauth2/redirect-domain": { - "get": { - "operationId": "Oauth2_GetOauth2RedirectDomain", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oauthGetOauth2RedirectDomainResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Oauth2" - ] - } - }, - "/apis/ghippo.io/v1alpha1/oidc/ghippo-client-config": { - "get": { - "operationId": "OIDC_GhippoClientConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oidcGhippoClientConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "OIDC" - ] - } - }, - "/apis/ghippo.io/v1alpha1/oidc/logout": { - "get": { - "operationId": "OIDC_RedirectFrontendLogout", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oidcRedirectFrontendLogoutResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "OIDC" - ] - }, - "delete": { - "operationId": "OIDC_OIDCLogout", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oidcOIDCLogoutResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "OIDC" - ] - } - }, - "/apis/ghippo.io/v1alpha1/oidc/token": { - "post": { - "operationId": "OIDC_OIDCToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oidcOIDCTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/oidcOIDCTokenRequest" - } - } - ], - "tags": [ - "OIDC" - ] - } - }, - "/apis/ghippo.io/v1alpha1/oidc/userinfo": { - "get": { - "operationId": "OIDC_OIDCUserInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/oidcOIDCUserInfoResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "OIDC" - ] - } - }, - "/apis/ghippo.io/v1alpha1/permissions": { - "get": { - "operationId": "Role_ListAllPermissions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleListAllPermissionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/platformroles/{name}/members": { - "get": { - "operationId": "Role_ListMembersByPlatformRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleListMembersByPlatformRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/product-nav/info": { - "get": { - "operationId": "ProductNavigator_Info", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/productnavProductNavResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "ProductNavigator" - ] - } - }, - "/apis/ghippo.io/v1alpha1/publish/messages": { - "post": { - "operationId": "Publish_PublishMessage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/publishPublishMessageResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/publishPublishMessageRequest" - } - } - ], - "tags": [ - "Publish" - ] - } - }, - "/apis/ghippo.io/v1alpha1/read-messages": { - "post": { - "operationId": "Message_SetReadMessages", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/messageSetReadMessagesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/messageSetReadMessagesRequest" - } - } - ], - "tags": [ - "Message" - ] - } - }, - "/apis/ghippo.io/v1alpha1/refresh-token": { - "post": { - "operationId": "Login_RefreshToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginRefreshTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginRefreshTokenRequest" - } - } - ], - "tags": [ - "Login" - ] - } - }, - "/apis/ghippo.io/v1alpha1/resourcequota-types": { - "get": { - "operationId": "Workspace_ListResourceQuotaTypes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListResourceQuotaTypesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/roles": { - "get": { - "operationId": "Role_ListRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleListRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "pageSize", - "description": "每页条数", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "description": "当前页", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "roleType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "query_all_role_type", - "query_system", - "query_custom" - ], - "default": "query_all_role_type" - }, - { - "name": "scope", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "query_all_auth_scope", - "query_platform", - "query_folder", - "query_workspace" - ], - "default": "query_all_auth_scope" - } - ], - "tags": [ - "Role" - ] - }, - "post": { - "operationId": "Role_CreateRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleCreateRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/roleCreateRoleRequest" - } - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/roles/check-role-name/{name}": { - "get": { - "operationId": "Role_CheckRoleName", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleCheckRoleNameResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/roles/role-member-count/{name}": { - "get": { - "operationId": "Role_GetRoleMemberCount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleGetRoleMemberCountResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/roles/{name}": { - "get": { - "operationId": "Role_GetRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleGetRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Role" - ] - }, - "delete": { - "operationId": "Role_DeleteRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleDeleteRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Role" - ] - }, - "put": { - "operationId": "Role_UpdateRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleUpdateRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "description": { - "type": "string", - "title": "globalRoleType type = 2;" - }, - "perms": { - "type": "array", - "items": { - "$ref": "#/definitions/rolePermission" - }, - "title": "AuthScope scope = 3;" - } - } - } - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/accountlockout": { - "get": { - "operationId": "SecurityPolicy_GetAccountLockoutPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetAccountLockoutPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetAccountLockoutPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetAccountLockoutPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetAccountLockoutPolicyRequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/logout": { - "get": { - "operationId": "SecurityPolicy_GetLogoutPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetLogoutPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetLogoutPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetLogoutPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetLogoutPolicyRequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/mfa": { - "get": { - "operationId": "SecurityPolicy_GetMFA", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetMFAResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetMFA", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetMFAResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetMFARequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/password": { - "get": { - "operationId": "SecurityPolicy_GetPasswordPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetPasswordPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetPasswordPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetPasswordPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetPasswordPolicyRequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/sessionlimit/system": { - "get": { - "operationId": "SecurityPolicy_GetSystemSessionLimit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetSystemSessionLimitResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetSystemSessionLimit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetSystemSessionLimitResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetSystemSessionLimitRequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/sessionlimit/time": { - "get": { - "operationId": "SecurityPolicy_GetTimeSessionLimit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetTimeSessionLimitResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetTimeSessionLimit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetTimeSessionLimitResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetTimeSessionLimitRequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/sessionlimit/user": { - "get": { - "operationId": "SecurityPolicy_GetUserSessionLimit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetUserSessionLimitResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetUserSessionLimit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetUserSessionLimitResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetUserSessionLimitRequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/securitypolicy/sessiontimeout": { - "get": { - "operationId": "SecurityPolicy_GetSessionTimeout", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicyGetSessionTimeoutResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SecurityPolicy" - ] - }, - "put": { - "operationId": "SecurityPolicy_SetSessionTimeout", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/securitypolicySetSessionTimeoutResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/securitypolicySetSessionTimeoutRequest" - } - } - ], - "tags": [ - "SecurityPolicy" - ] - } - }, - "/apis/ghippo.io/v1alpha1/session-limit": { - "post": { - "operationId": "Login_CheckSessionLimit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/loginCheckSessionLimitResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/loginCheckSessionLimitRequest" - } - } - ], - "tags": [ - "Login" - ] - } - }, - "/apis/ghippo.io/v1alpha1/sharedresource-types": { - "get": { - "operationId": "Workspace_ListSharedResourceTypes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListSharedResourceTypesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/smtp-setting": { - "get": { - "operationId": "SmtpSetting_GetSmtpServer", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/smtpsettingGetSmtpServerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SmtpSetting" - ] - }, - "put": { - "operationId": "SmtpSetting_SetSmtpServer", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/smtpsettingSetSmtpServerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/smtpsettingSetSmtpServerRequest" - } - } - ], - "tags": [ - "SmtpSetting" - ] - } - }, - "/apis/ghippo.io/v1alpha1/smtp-setting/conn-test": { - "post": { - "operationId": "SmtpSetting_SmtpServerConnTest", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/smtpsettingSmtpConnTestResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/smtpsettingSmtpConnTestRequest" - } - } - ], - "tags": [ - "SmtpSetting" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/footer-theme": { - "get": { - "operationId": "Theme_GetFooterThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeGetFooterThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - }, - "post": { - "operationId": "Theme_SetFooterThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeSetFooterThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/themeSetFooterThemeConfigRequest" - } - } - ], - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/footer/reset": { - "post": { - "operationId": "Theme_ResetFooterThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeResetFooterThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/login_page": { - "get": { - "operationId": "Theme_GetLoginThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeGetLoginThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - }, - "post": { - "operationId": "Theme_SetLoginThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeSetLoginThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/themeSetLoginThemeConfigRequest" - } - } - ], - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/login_page.css": { - "get": { - "operationId": "Theme_GetLoginThemeCSS", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/apiHttpBody" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/login_page/reset": { - "post": { - "operationId": "Theme_ResetLoginThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeResetLoginThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/theme": { - "get": { - "operationId": "Theme_GetThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeGetThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - }, - "post": { - "operationId": "Theme_SetThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeSetThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/themeSetThemeConfigRequest" - } - } - ], - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/theme.css": { - "get": { - "operationId": "Theme_GetThemeCSS", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/apiHttpBody" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/themes/theme/reset": { - "post": { - "operationId": "Theme_ResetThemeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/themeResetThemeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Theme" - ] - } - }, - "/apis/ghippo.io/v1alpha1/top-nav": { - "post": { - "operationId": "TopNavigator_SetTopNav", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/topnavSetTopNavResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/topnavSetTopNavRequest" - } - } - ], - "tags": [ - "TopNavigator" - ] - } - }, - "/apis/ghippo.io/v1alpha1/top-nav/info": { - "get": { - "operationId": "TopNavigator_Info", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/topnavTopNavResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "TopNavigator" - ] - } - }, - "/apis/ghippo.io/v1alpha1/top-nav/reset": { - "post": { - "operationId": "TopNavigator_ResetTopNav", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/topnavResetTopNavResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "TopNavigator" - ] - } - }, - "/apis/ghippo.io/v1alpha1/update-quota-check": { - "post": { - "operationId": "Workspace_UpdateQuotaCheck", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceUpdateQuotaCheckResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/workspaceUpdateQuotaCheckRequest" - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users": { - "get": { - "operationId": "Users_ListUsers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userListUsersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "pageSize", - "description": "每页条数", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "description": "当前页", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Users" - ] - }, - "post": { - "operationId": "Users_CreateUser", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userCreateUserResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/userCreateUserRequest" - } - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/check-user-email/{username}": { - "get": { - "operationId": "Users_CheckUserEmail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userCheckUserEmailResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "username", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/check/{username}": { - "get": { - "operationId": "Users_CheckUser", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userCheckUserResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "username", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/username/{username}": { - "get": { - "operationId": "Users_GetUserByName", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1userGetUserResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "username", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/without-password": { - "post": { - "operationId": "Users_CreateUserWithoutPassword", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userCreateUserWithoutPasswordResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/userCreateUserWithoutPasswordRequest" - } - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}": { - "get": { - "operationId": "Users_GetUser", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1userGetUserResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - }, - "delete": { - "operationId": "Users_DeleteUser", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userDeleteUserResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - }, - "put": { - "operationId": "Users_UpdateUser", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userUpdateUserResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "email": { - "type": "string" - }, - "description": { - "type": "string" - }, - "firstname": { - "type": "string" - }, - "lastname": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/accesstoken": { - "post": { - "operationId": "Users_CreateUserAccessToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userCreateUserAccessTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "expiredAt": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/accesstokens": { - "get": { - "operationId": "Users_ListUserAccessTokens", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userListUserAccessTokensResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/accesstokens/{aid}": { - "delete": { - "operationId": "Users_DeleteUserAccessToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userDeleteUserAccessTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "aid", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/groups": { - "get": { - "operationId": "Users_ListUserGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userListUserGroupsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/mfa": { - "delete": { - "operationId": "Users_ResetUserMFA", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userResetUserMFAResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/password": { - "put": { - "operationId": "Users_SetUserPassword", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userSetUserPasswordResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "password": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/roles": { - "get": { - "operationId": "Users_ListUserRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userListUserRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "search", - "description": "搜索关键字", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "type", - "description": "role type", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "authorized", - "description": "是否授权", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Users" - ] - }, - "put": { - "operationId": "Users_UpdateUserRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userUpdateUserRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "addRoles": { - "type": "array", - "items": { - "type": "string" - } - }, - "removeRoles": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{id}/subjects": { - "get": { - "operationId": "Users_ListUserSubjects", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userListUserSubjectResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/users/{username}/sshkeys/verify": { - "post": { - "operationId": "Users_VerifyUserSSHPublicKey", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/userVerifyUserSSHPublicKeyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "username", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "publicKey": { - "type": "string", - "format": "byte" - } - } - } - } - ], - "tags": [ - "Users" - ] - } - }, - "/apis/ghippo.io/v1alpha1/webhook": { - "get": { - "operationId": "Webhook_ListWebhooksByClientId", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/webhookListWebhooksByClientIdResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "clientId", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Webhook" - ] - }, - "post": { - "operationId": "Webhook_CreateWebhook", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/webhookCreateWebhookResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/webhookCreateWebhookRequest" - } - } - ], - "tags": [ - "Webhook" - ] - } - }, - "/apis/ghippo.io/v1alpha1/webhook-record": { - "get": { - "operationId": "Webhook_ListWebhookRecordsByClientId", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/webhookListWebhookRecordsByClientIdResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clientId", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "all", - "successful", - "failed" - ], - "default": "all" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Webhook" - ] - } - }, - "/apis/ghippo.io/v1alpha1/webhook-record/{id}": { - "get": { - "operationId": "Webhook_GetWebhookRecord", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/webhookGetWebhookRecordResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Webhook" - ] - } - }, - "/apis/ghippo.io/v1alpha1/webhook/{id}": { - "get": { - "operationId": "Webhook_GetWebhook", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/webhookGetWebhookResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Webhook" - ] - }, - "delete": { - "operationId": "Webhook_DeleteWebhook", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/webhookDeleteWebhookResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Webhook" - ] - }, - "put": { - "operationId": "Webhook_UpdateWebhook", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/webhookUpdateWebhookResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "resourceType": { - "$ref": "#/definitions/v1alpha1webhookResourceType" - }, - "action": { - "$ref": "#/definitions/webhookAction" - }, - "url": { - "type": "string" - }, - "method": { - "$ref": "#/definitions/webhookMethod" - }, - "headers": { - "type": "string", - "title": "map headers = 8;" - }, - "requestParameter": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Webhook" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspace-sharedresource-quota": { - "get": { - "operationId": "Workspace_GetWorkspaceSharedResourceQuota", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceGetWorkspaceSharedResourceQuotaResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "resourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "resourceType", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "notFormatted", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspace-sharedresource-quota-hard": { - "put": { - "operationId": "Workspace_SetQuotaHardForWorkspaceSharedResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceSetQuotaHardForWorkspaceSharedResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/workspaceSetQuotaHardForWorkspaceSharedResourceRequest" - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspacerolenames": { - "get": { - "operationId": "Role_ListWorkspaceRoleNames", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleListWorkspaceRoleNamesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaceroles/{name}/members-workspaces": { - "get": { - "operationId": "Role_ListMembersWorkspacesByWorkspaceRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleListMembersWorkspacesByWorkspaceRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Role" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces": { - "get": { - "operationId": "Workspace_ListWorkspaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListWorkspacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - }, - "post": { - "operationId": "Workspace_CreateWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceCreateWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/workspaceCreateWorkspaceRequest" - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}": { - "get": { - "operationId": "Workspace_GetWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceGetWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - }, - "delete": { - "summary": "TODO: sub ws删不删?", - "operationId": "Workspace_DeleteWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceDeleteWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/available-exclusiveresources": { - "get": { - "operationId": "Workspace_ListAvailableExclusiveResourcesByWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListAvailableExclusiveResourcesByWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "resourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "resourceType", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "resourceScope", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/available-sharedresources": { - "get": { - "operationId": "Workspace_ListAvailableSharedResourcesByWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListAvailableSharedResourcesByWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "resourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "resourceType", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/bind-exclusiveresource": { - "post": { - "operationId": "Workspace_BindExclusiveResourceToWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceBindExclusiveResourceToWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "resourceName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "resourceScope": { - "type": "string" - }, - "gproduct": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/bind-sharedresource": { - "post": { - "operationId": "Workspace_BindSharedResourceToWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceBindSharedResourceToWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "resourceName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "resourceScope": { - "type": "string" - }, - "gproduct": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/bind-sharedresource-setquota": { - "post": { - "operationId": "Workspace_BindSharedResourceAndSetQuotaHardToWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceBindSharedResourceAndSetQuotaHardToWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "description": "cluster 资源 resource_scope 为空\nstring resource_scope = 4 [(validate.rules).string.min_len = 1];", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "resourceName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "gproduct": { - "type": "string" - }, - "quotaHard": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/exclusiveresources": { - "get": { - "operationId": "Workspace_ListExclusiveResourcesByWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListExclusiveResourcesByWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "resourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "resourceType", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/members-roles": { - "get": { - "operationId": "Workspace_ListMembersRolesByWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListMembersRolesByWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "memberName", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/move": { - "post": { - "operationId": "Workspace_MoveWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceMoveWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "destFolderId": { - "type": "integer", - "format": "int32" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/move-folders": { - "get": { - "operationId": "Workspace_MoveWorkspaceFolderList", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceMoveWorkspaceFolderListResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "folder", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/sharedresource/{resourceName}/quota-types": { - "get": { - "operationId": "Workspace_ListWorkspaceShareResourceQuotaTypes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListWorkspaceShareResourceQuotaTypesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "resourceName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/sharedresources": { - "get": { - "operationId": "Workspace_ListSharedResourcesByWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceListSharedResourcesByWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "resourceName", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha1/workspaces/{workspaceId}/unbind-resource": { - "put": { - "operationId": "Workspace_UnbindResourceFromWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/workspaceUnbindResourceFromWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "resourceName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "resourceScope": { - "type": "string" - }, - "gproduct": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/ghippo.io/v1alpha2/ldap": { - "post": { - "operationId": "Ldap_CreateLdap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapCreateLdapResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ldapCreateLdapRequest" - } - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/ldaps": { - "get": { - "operationId": "Ldap_ListLdaps", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapListLdapsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/ldaps/{id}": { - "get": { - "operationId": "Ldap_GetLdap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapGetLdapResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Ldap" - ] - }, - "delete": { - "operationId": "Ldap_DeleteLdap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapDeleteLdapResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Ldap" - ] - }, - "put": { - "operationId": "Ldap_UpdateLdap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapUpdateLdapResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "vendor": { - "$ref": "#/definitions/ldapLdapVendor" - }, - "startTls": { - "type": "string", - "description": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling." - }, - "connectionUrl": { - "type": "string" - }, - "usersDn": { - "type": "string", - "title": "Full DN of LDAP tree where your users are. This DN is the parent of LDAP users.\nIt could be for example 'ou=users,dc=example,dc=com' assuming that your typical user will have DN like 'uid=john,ou=users,dc=example,dc=com'" - }, - "bindDn": { - "type": "string", - "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server" - }, - "bindCredential": { - "type": "string", - "description": "Password of LDAP admin." - }, - "userObjectClasses": { - "type": "string", - "description": "All values of LDAP objectClass attribute for users in LDAP divided by comma.\nFor example: 'inetOrgPerson, organizationalPerson' .\nNewly created Keycloak users will be written to LDAP with all those object classes and existing LDAP user records are found just if they contain all those object classes." - }, - "usernameLdapAttribute": { - "type": "string", - "title": "Name of LDAP attribute, which is mapped as Keycloak username. For many LDAP server vendors it can be 'uid'.\nFor Active directory it can be 'sAMAccountName' or 'cn'.\nThe attribute should be filled for all LDAP user records you want to import from LDAP to Keycloak" - }, - "fullSyncPeriod": { - "type": "string", - "title": "Period for full synchronization in seconds: -1 手动同步" - }, - "rdnLdapAttribute": { - "type": "string", - "description": "Name of the LDAP attribute, which is used as RDN (top attribute) of typical user DN.\nUsually it's the same as the Username LDAP attribute, however it is not required.\nFor example for Active directory, it is common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'." - }, - "uuidLdapAttribute": { - "type": "string", - "description": "Name of the LDAP attribute, which is used as a unique object identifier (UUID) for objects in LDAP.\nFor many LDAP server vendors, it is 'entryUUID'; however some are different.\nFor example, for Active directory it should be 'objectGUID'.\nIf your LDAP server does not support the notion of UUID, you can use any other attribute that is supposed to be unique among LDAP users in tree.\nFor example 'uid' or 'entryDN'." - }, - "editMode": { - "type": "string", - "description": "READ_ONLY is a read-only LDAP store.\nWRITABLE means data will be synced back to LDAP on demand." - }, - "readTimeout": { - "type": "string", - "description": "LDAP read timeout in milliseconds. This timeout applies for LDAP read operations." - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "email": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "username": { - "type": "string" - }, - "userLdapFilter": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/ldaps/{id}/group": { - "get": { - "operationId": "Ldap_GetLdapGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapGetLdapGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Ldap" - ] - }, - "post": { - "operationId": "Ldap_CreateLdapGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapCreateLdapGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "groupDn": { - "type": "string" - }, - "groupObjectClasses": { - "type": "string" - }, - "groupNameLdapAttribute": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/ldaps/{id}/sync": { - "get": { - "operationId": "Ldap_SyncUsers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapSyncUsersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/ldaps/{ldapId}/group/{id}": { - "delete": { - "operationId": "Ldap_DeleteLdapGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapDeleteLdapGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "ldapId", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Ldap" - ] - }, - "put": { - "operationId": "Ldap_UpdateLdapGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapUpdateLdapGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "ldapId", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "groupDn": { - "type": "string" - }, - "groupObjectClasses": { - "type": "string" - }, - "groupNameLdapAttribute": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/ldaps/{ldapId}/group/{id}/sync": { - "get": { - "operationId": "Ldap_SyncLdapGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapSyncLdapGroupsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "ldapId", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/testLdapAuthentication": { - "post": { - "operationId": "Ldap_TestLdapAuthentication", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapTestLdapAuthenticationResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ldapTestLdapAuthenticationRequest" - } - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha2/testLdapConnection": { - "post": { - "operationId": "Ldap_TestLdapConnection", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ldapTestLdapConnectionResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ldapTestLdapConnectionRequest" - } - } - ], - "tags": [ - "Ldap" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits": { - "get": { - "operationId": "Audit_ListAudits", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditListAuditsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "sourceType", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "all", - "succeeded", - "failed" - ], - "default": "all" - }, - { - "name": "searchType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "fuzzy", - "exact" - ], - "default": "fuzzy" - }, - { - "name": "searchUser", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "gproduct", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "start", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/clear": { - "post": { - "operationId": "Audit_ClearAuditsNow", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditClearAuditsNowResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/auditClearAuditsNowRequest" - } - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/export": { - "get": { - "operationId": "Audit_ExportAudits", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/apiHttpBody" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "start", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sourceType", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "gproduct", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "all", - "succeeded", - "failed" - ], - "default": "all" - }, - { - "name": "searchType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "fuzzy", - "exact" - ], - "default": "fuzzy" - }, - { - "name": "searchUser", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "exportType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "Csv", - "Excel" - ], - "default": "Csv" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/export/uri": { - "get": { - "operationId": "Audit_GetExportURI", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditGetExportURIResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "module", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "audit", - "kube_audit" - ], - "default": "audit" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/kube": { - "get": { - "operationId": "Audit_ListKubeAudits", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditListKubeAuditsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "sourceType", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "all", - "succeeded", - "failed" - ], - "default": "all" - }, - { - "name": "searchType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "fuzzy", - "exact" - ], - "default": "fuzzy" - }, - { - "name": "searchUser", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "start", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "搜索偏移量", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "分页大小", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/kube/clear": { - "post": { - "operationId": "Audit_ClearKubeAuditsNow", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditClearKubeAuditsNowResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/auditClearKubeAuditsNowRequest" - } - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/kube/export": { - "get": { - "operationId": "Audit_ExportKubeAudits", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/apiHttpBody" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "start", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sourceType", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sourceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "all", - "succeeded", - "failed" - ], - "default": "all" - }, - { - "name": "searchType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "fuzzy", - "exact" - ], - "default": "fuzzy" - }, - { - "name": "searchUser", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "exportType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "Csv", - "Excel" - ], - "default": "Csv" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/kube/{id}": { - "get": { - "operationId": "Audit_GetKubeAuditDetail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditGetKubeAuditDetailResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/set-auto-clear": { - "put": { - "operationId": "Audit_SetAutoClearAuditSetting", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditSetAutoClearAuditSettingResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/auditSetAutoClearAuditSettingRequest" - } - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/set-auto-clear/kube": { - "put": { - "operationId": "Audit_SetAutoClearKubeAuditSetting", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditSetAutoClearKubeAuditSettingResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/auditSetAutoClearKubeAuditSettingRequest" - } - } - ], - "tags": [ - "Audit" - ] - } - }, - "/apis/ghippo.io/v1alpha3/audits/{id}": { - "get": { - "operationId": "Audit_GetAuditDetail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/auditGetAuditDetailResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Audit" - ] - } - } - }, - "definitions": { - "aboutDeveloper": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "message": { - "type": "string" - } - } - }, - "aboutGProductVersion": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "aboutListDevelopersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/aboutDeveloper" - } - } - } - }, - "aboutListGProductVersionsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/aboutGProductVersion" - } - } - } - }, - "aboutListOpenSourcesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/aboutOpenSource" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1aboutPagination" - } - } - }, - "aboutOpenSource": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "开源软件名称" - }, - "license": { - "type": "string", - "title": "开源协议" - } - } - }, - "apiHttpBody": { - "type": "object", - "properties": { - "contentType": { - "type": "string", - "description": "The HTTP Content-Type header value specifying the content type of the body." - }, - "data": { - "type": "string", - "format": "byte", - "description": "The HTTP request/response body as raw binary." - }, - "extensions": { - "type": "array", - "items": { - "$ref": "#/definitions/protobufAny" - }, - "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs." - } - }, - "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." - }, - "auditAuditInfo": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "auditName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "resourceName": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "gproduct": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha3auditStatusType" - }, - "user": { - "type": "string" - }, - "client": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "createdAt": { - "type": "string" - } - } - }, - "auditAuthTokenResponse": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - }, - "auditCertsResponse": { - "type": "object", - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/definitions/auditKey" - } - } - } - }, - "auditClearAuditsNowRequest": { - "type": "object", - "properties": { - "days": { - "type": "integer", - "format": "int32" - } - } - }, - "auditClearAuditsNowResponse": { - "type": "object" - }, - "auditClearKubeAuditsNowRequest": { - "type": "object", - "properties": { - "days": { - "type": "integer", - "format": "int32" - } - } - }, - "auditClearKubeAuditsNowResponse": { - "type": "object" - }, - "auditExportTypes": { - "type": "string", - "enum": [ - "Csv", - "Excel" - ], - "default": "Csv" - }, - "auditExternalAuditResponse": { - "type": "object" - }, - "auditExternalType": { - "type": "string", - "enum": [ - "loginFailed", - "forgetPassword", - "resetPassword" - ], - "default": "loginFailed" - }, - "auditGetAuditDetailResponse": { - "type": "object", - "properties": { - "audit": { - "type": "string" - } - } - }, - "auditGetAuditResourceReportResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/auditResourceReport" - } - } - } - }, - "auditGetAuditUserReportResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/auditUserReport" - } - } - } - }, - "auditGetAutoClearAuditTimeResponse": { - "type": "object", - "properties": { - "kubeDays": { - "type": "integer", - "format": "int32" - }, - "ghippoDays": { - "type": "integer", - "format": "int32" - } - } - }, - "auditGetExportURIResponse": { - "type": "object", - "properties": { - "uri": { - "type": "string" - }, - "method": { - "$ref": "#/definitions/auditRequestMethod" - } - } - }, - "auditGetKubeAuditDetailResponse": { - "type": "object", - "properties": { - "audit": { - "type": "string" - } - } - }, - "auditGetLimitRangeTimeResponse": { - "type": "object", - "properties": { - "day": { - "type": "integer", - "format": "int32" - } - } - }, - "auditKey": { - "type": "object", - "properties": { - "kid": { - "type": "string" - }, - "kty": { - "type": "string" - }, - "e": { - "type": "string" - }, - "n": { - "type": "string" - }, - "alg": { - "type": "string" - }, - "use": { - "type": "string" - } - } - }, - "auditKubeAuditInfo": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "auditName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "resourceName": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha3auditStatusType" - }, - "user": { - "type": "string" - }, - "client": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "createdAt": { - "type": "string" - } - } - }, - "auditListAuditsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/auditAuditInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha3auditPagination" - } - } - }, - "auditListKubeAuditsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/auditKubeAuditInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha3auditPagination" - } - } - }, - "auditModules": { - "type": "string", - "enum": [ - "audit", - "kube_audit" - ], - "default": "audit" - }, - "auditRequestMethod": { - "type": "string", - "enum": [ - "GET", - "POST", - "PUT", - "DELETE", - "PATCH" - ], - "default": "GET" - }, - "auditResourceReport": { - "type": "object", - "properties": { - "ResourceType": { - "type": "string" - }, - "EventName": { - "type": "string" - }, - "Count": { - "type": "integer", - "format": "int32" - } - } - }, - "auditSetAutoClearAuditSettingRequest": { - "type": "object", - "properties": { - "days": { - "type": "integer", - "format": "int32" - } - } - }, - "auditSetAutoClearAuditSettingResponse": { - "type": "object" - }, - "auditSetAutoClearKubeAuditSettingRequest": { - "type": "object", - "properties": { - "days": { - "type": "integer", - "format": "int32" - } - } - }, - "auditSetAutoClearKubeAuditSettingResponse": { - "type": "object" - }, - "auditUserReport": { - "type": "object", - "properties": { - "UserName": { - "type": "string" - }, - "TotalCount": { - "type": "integer", - "format": "int32" - }, - "SuccessCount": { - "type": "integer", - "format": "int32" - }, - "FailedCount": { - "type": "integer", - "format": "int32" - } - } - }, - "batchauditBatchInsertAuditsRequest": { - "type": "object", - "properties": { - "audits": { - "type": "string" - } - }, - "title": "@openapiv2-ignore" - }, - "batchauditBatchInsertAuditsResponse": { - "type": "object", - "title": "@openapiv2-ignore" - }, - "clientClientInfo": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "secret": { - "type": "string", - "title": "bool enabled = 4;\nrepeated string redirect_uris = 5;" - }, - "baseUrl": { - "type": "string" - } - } - }, - "clientCreateClientRequest": { - "type": "object", - "properties": { - "clientId": { - "type": "string" - }, - "baseUrl": { - "type": "string" - } - } - }, - "clientCreateClientResponse": { - "type": "object" - }, - "clientDeleteClientResponse": { - "type": "object" - }, - "clientGetClientResponse": { - "type": "object", - "properties": { - "client": { - "$ref": "#/definitions/clientClientInfo" - } - } - }, - "clientListClientsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/clientClientInfo" - } - } - } - }, - "clientUpdateClientResponse": { - "type": "object" - }, - "currentuserCreateAccessTokenRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "expiredAt": { - "type": "string" - } - } - }, - "currentuserCreateAccessTokenResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "currentuserCreateSSHKeyRequest": { - "type": "object", - "properties": { - "sshKeyName": { - "type": "string" - }, - "publicKey": { - "type": "string" - }, - "expiredAt": { - "type": "string" - } - } - }, - "currentuserCreateSSHKeyResponse": { - "type": "object" - }, - "currentuserDeleteAccessTokenResponse": { - "type": "object" - }, - "currentuserDeleteSSHKeyResponse": { - "type": "object" - }, - "currentuserGetGlobalPermissionsResponse": { - "type": "object", - "properties": { - "permissions": { - "type": "array", - "items": { - "$ref": "#/definitions/currentuserGlobalPermission" - } - } - } - }, - "currentuserGlobalPermission": { - "type": "string", - "enum": [ - "Unknown", - "ListUser", - "CreateUser", - "UpdateUser", - "DeleteUser", - "AuthorizeUser", - "ListGroup", - "CreateGroup", - "UpdateGroup", - "DeleteGroup", - "UpdateGroupUser", - "AuthorizeGroup", - "GetRole", - "GetIdp", - "CreateIdp", - "UpdateIdp", - "DeleteIdp", - "GetAudit", - "DeleteAudit", - "GetSecurityPolicy", - "UpdateSecurityPolicy", - "GetSMTP", - "UpdateSMTP", - "GetAppearance", - "UpdateAppearance", - "GetLicense", - "UpdateLicense", - "DeleteLicense", - "GetWorkspace", - "GetAboutPlatform", - "DeleteRole", - "UpdateRole", - "CreateRole", - "AccountingAndBilling", - "ReportManagement", - "GetClient", - "DeleteClient", - "UpdateClient", - "CreateClient", - "EditCluster", - "GetAccountingBilling", - "UpdateAccountingBilling", - "GetReportManagement", - "UpdateReportManagement", - "GetBillingSetting", - "UpdateBillingSetting" - ], - "default": "Unknown" - }, - "currentuserListAccessTokensResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1currentuserAccessToken" - } - } - } - }, - "currentuserListSSHKeysResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/currentuserSSHKey" - } - } - } - }, - "currentuserPasswordDescriptionResponse": { - "type": "object", - "properties": { - "allowModify": { - "type": "boolean" - }, - "emptyPassword": { - "type": "boolean" - } - } - }, - "currentuserSSHKey": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "sshKeyName": { - "type": "string" - }, - "publicKey": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "expiredAt": { - "type": "string" - } - } - }, - "currentuserSetCurrentUserPasswordRequest": { - "type": "object", - "properties": { - "oldPassword": { - "type": "string" - }, - "newPassword": { - "type": "string" - } - } - }, - "currentuserSetCurrentUserPasswordResponse": { - "type": "object" - }, - "currentuserUpdateEmailRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - } - } - }, - "currentuserUpdateEmailResponse": { - "type": "object" - }, - "currentuserUpdateLanguageRequest": { - "type": "object", - "properties": { - "locale": { - "type": "string" - } - } - }, - "currentuserUpdateLanguageResponse": { - "type": "object" - }, - "currentuserUpdatePasswordRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - } - } - }, - "currentuserUpdatePasswordResponse": { - "type": "object" - }, - "currentuserUpdateSSHKeyResponse": { - "type": "object" - }, - "feature_gateFeatureGateID": { - "type": "string", - "enum": [ - "CreateUserInWorkspace" - ], - "default": "CreateUserInWorkspace" - }, - "feature_gateFeatureGateInfo": { - "type": "object", - "properties": { - "id": { - "$ref": "#/definitions/feature_gateFeatureGateID", - "title": "唯一标志符" - }, - "description": { - "type": "string", - "title": "关于此 FeatureGate 的描述" - }, - "enabled": { - "type": "boolean", - "title": "是否启用" - } - } - }, - "feature_gateListFeatureGatesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/feature_gateFeatureGateInfo" - } - } - } - }, - "googlerpcStatus": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "details": { - "type": "array", - "items": { - "$ref": "#/definitions/protobufAny" - } - } - } - }, - "gproductListGProductsResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1gproductGProduct" - } - } - } - }, - "gproductlicenseDeleteProductLicensesResponse": { - "type": "object" - }, - "gproductlicenseGProductLicense": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "module": { - "type": "string" - }, - "level": { - "type": "string" - }, - "status": { - "type": "string" - }, - "expiredAt": { - "type": "string" - } - } - }, - "gproductlicenseGProductLicenseInfo": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "module": { - "type": "string" - }, - "licenseKey": { - "type": "string" - }, - "licenseLevel": { - "type": "string" - }, - "physicalUsedCpu": { - "type": "string" - }, - "physicalMaxCpu": { - "type": "string" - }, - "virtualUsedCpu": { - "type": "string" - }, - "virtualMaxCpu": { - "type": "string" - }, - "expiredAt": { - "type": "string" - }, - "usedNode": { - "type": "string" - }, - "maxNode": { - "type": "string" - }, - "physicalUsedGpu": { - "type": "string" - }, - "physicalMaxGpu": { - "type": "string" - } - } - }, - "gproductlicenseGetGProductLicenseYamlResponse": { - "type": "object", - "properties": { - "yaml": { - "type": "string" - } - } - }, - "gproductlicenseGetGProductLicensesESNResponse": { - "type": "object", - "properties": { - "esn": { - "type": "string" - } - } - }, - "gproductlicenseGetGProductLicensesOverQuotaResponse": { - "type": "object", - "properties": { - "expireSoonLicenses": { - "type": "array", - "items": { - "$ref": "#/definitions/gproductlicenseGProductLicense" - } - }, - "expiredLicenses": { - "type": "array", - "items": { - "$ref": "#/definitions/gproductlicenseGProductLicense" - } - } - } - }, - "gproductlicenseGetGProductLicensesResponse": { - "type": "object", - "properties": { - "license": { - "$ref": "#/definitions/gproductlicenseGProductLicenseInfo" - } - } - }, - "gproductlicenseListGProductLicensesResponse": { - "type": "object", - "properties": { - "licenses": { - "type": "array", - "items": { - "$ref": "#/definitions/gproductlicenseGProductLicense" - } - } - } - }, - "gproductlicenseUpdateGProductLicensesRequest": { - "type": "object", - "properties": { - "yaml": { - "type": "string" - } - } - }, - "gproductlicenseUpdateGProductLicensesResponse": { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "licenses": { - "type": "array", - "items": { - "$ref": "#/definitions/gproductlicenseGProductLicense" - } - } - } - }, - "groupAddUserToGroupResponse": { - "type": "object" - }, - "groupCreateGroupRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - } - } - }, - "groupCreateGroupResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "groupDeleteGroupResponse": { - "type": "object" - }, - "groupDeleteUserFromGroupResponse": { - "type": "object" - }, - "groupGetGroupResponse": { - "type": "object", - "properties": { - "group": { - "$ref": "#/definitions/groupGroupInfo" - } - } - }, - "groupGroupInfo": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "userCount": { - "type": "integer", - "format": "int64" - }, - "description": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "canAuthorize": { - "type": "boolean" - } - } - }, - "groupGroupMembersResponse": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/definitions/v1alpha1groupPagination" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1groupUser" - } - } - } - }, - "groupGroupSubject": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "roleId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "roleName": { - "type": "string" - }, - "subjectName": { - "type": "string" - } - } - }, - "groupListGroupRolesResponse": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/definitions/v1alpha1groupPagination" - }, - "authorizedCount": { - "type": "integer", - "format": "int64" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1groupRoleInfo" - } - } - } - }, - "groupListGroupSubjectResponse": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/definitions/v1alpha1groupPagination" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/groupGroupSubject" - } - } - } - }, - "groupListGroupsResponse": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/definitions/v1alpha1groupPagination" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/groupGroupInfo" - } - } - } - }, - "groupUpdateGroupResponse": { - "type": "object" - }, - "groupUpdateGroupRolesResponse": { - "type": "object" - }, - "idpClientAuthentications": { - "type": "string", - "enum": [ - "client_secret_post", - "client_secret_basic", - "client_secret_jwt", - "private_key_jwt" - ], - "default": "client_secret_post" - }, - "idpCreateIDPRequest": { - "type": "object", - "properties": { - "displayName": { - "type": "string", - "title": "string id = 1;" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "clientAuthentications": { - "$ref": "#/definitions/idpClientAuthentications" - }, - "providerId": { - "$ref": "#/definitions/v1alpha1idpProviderType" - }, - "authorizationUrl": { - "type": "string" - }, - "userInfoUrl": { - "type": "string" - }, - "tokenUrl": { - "type": "string" - }, - "logoutUrl": { - "type": "string" - }, - "enableAutoLinkFlow": { - "type": "boolean" - }, - "alias": { - "type": "string" - }, - "enabled": { - "type": "boolean" - } - } - }, - "idpCreateIDPResponse": { - "type": "object" - }, - "idpDeleteIDPResponse": { - "type": "object" - }, - "idpGetIDPResponse": { - "type": "object", - "properties": { - "idpInfo": { - "$ref": "#/definitions/idpIDPInfo" - } - } - }, - "idpGetRedirectUrlResponse": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - } - }, - "idpGetWellKnownUrlResponse": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - } - }, - "idpIDPInfo": { - "type": "object", - "properties": { - "displayName": { - "type": "string", - "title": "string id = 1;" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "clientAuthentications": { - "$ref": "#/definitions/idpClientAuthentications" - }, - "providerId": { - "$ref": "#/definitions/v1alpha1idpProviderType" - }, - "authorizationUrl": { - "type": "string" - }, - "userInfoUrl": { - "type": "string" - }, - "tokenUrl": { - "type": "string" - }, - "logoutUrl": { - "type": "string" - }, - "enableAutoLinkFlow": { - "type": "boolean" - }, - "alias": { - "type": "string" - }, - "enabled": { - "type": "boolean" - } - } - }, - "idpListIDPsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/idpIDPInfo" - } - } - } - }, - "idpUpdateIDPResponse": { - "type": "object", - "properties": { - "alias": { - "type": "string" - } - } - }, - "keycloakeventAuthDetails": { - "type": "object", - "properties": { - "clientId": { - "type": "string" - }, - "ipAddress": { - "type": "string" - }, - "realmId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "username": { - "type": "string" - }, - "sessionId": { - "type": "string" - } - }, - "title": "参考 ExtendedAuthDetails 类的定义" - }, - "keycloakeventKeycloakEventRequest": { - "type": "object", - "properties": { - "realmId": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "operationType": { - "type": "string" - }, - "resourcePath": { - "type": "string" - }, - "representation": { - "type": "string", - "title": "json string" - }, - "uid": { - "type": "string" - }, - "authDetails": { - "$ref": "#/definitions/keycloakeventAuthDetails" - }, - "type": { - "type": "string" - }, - "details": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "error": { - "type": "string" - } - } - }, - "keycloakeventKeycloakEventResponse": { - "type": "object" - }, - "ldapCreateLdapGroupResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "ldapCreateLdapRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "vendor": { - "$ref": "#/definitions/ldapLdapVendor", - "title": "LDAP vendor (provider), only is other" - }, - "startTls": { - "type": "string", - "description": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling." - }, - "connectionUrl": { - "type": "string" - }, - "usersDn": { - "type": "string", - "title": "Full DN of LDAP tree where your users are. This DN is the parent of LDAP users.\nIt could be for example 'ou=users,dc=example,dc=com' assuming that your typical user will have DN like 'uid=john,ou=users,dc=example,dc=com'" - }, - "bindDn": { - "type": "string", - "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server" - }, - "bindCredential": { - "type": "string", - "description": "Password of LDAP admin." - }, - "userObjectClasses": { - "type": "string", - "description": "All values of LDAP objectClass attribute for users in LDAP divided by comma.\nFor example: 'inetOrgPerson, organizationalPerson' .\nNewly created Keycloak users will be written to LDAP with all those object classes and existing LDAP user records are found just if they contain all those object classes." - }, - "usernameLdapAttribute": { - "type": "string", - "title": "Name of LDAP attribute, which is mapped as Keycloak username. For many LDAP server vendors it can be 'uid'.\nFor Active directory it can be 'sAMAccountName' or 'cn'.\nThe attribute should be filled for all LDAP user records you want to import from LDAP to Keycloak" - }, - "fullSyncPeriod": { - "type": "string", - "title": "Period for full synchronization in seconds: -1 手动同步" - }, - "rdnLdapAttribute": { - "type": "string", - "description": "Name of the LDAP attribute, which is used as RDN (top attribute) of typical user DN.\nUsually it's the same as the Username LDAP attribute, however it is not required.\nFor example for Active directory, it is common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'." - }, - "uuidLdapAttribute": { - "type": "string", - "description": "Name of the LDAP attribute, which is used as a unique object identifier (UUID) for objects in LDAP.\nFor many LDAP server vendors, it is 'entryUUID'; however some are different.\nFor example, for Active directory it should be 'objectGUID'.\nIf your LDAP server does not support the notion of UUID, you can use any other attribute that is supposed to be unique among LDAP users in tree.\nFor example 'uid' or 'entryDN'." - }, - "editMode": { - "type": "string", - "description": "READ_ONLY is a read-only LDAP store.\nWRITABLE means data will be synced back to LDAP on demand." - }, - "readTimeout": { - "type": "string", - "description": "LDAP read timeout in milliseconds. This timeout applies for LDAP read operations." - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "email": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "username": { - "type": "string" - }, - "userLdapFilter": { - "type": "string" - } - } - }, - "ldapCreateLdapResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "ldapDeleteLdapGroupResponse": { - "type": "object" - }, - "ldapDeleteLdapResponse": { - "type": "object" - }, - "ldapGetLdapGroupResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "groupDn": { - "type": "string" - }, - "groupObjectClasses": { - "type": "string" - }, - "groupNameLdapAttribute": { - "type": "string" - } - } - }, - "ldapGetLdapResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "vendor": { - "$ref": "#/definitions/ldapLdapVendor" - }, - "startTls": { - "type": "string" - }, - "connectionUrl": { - "type": "string" - }, - "usersDn": { - "type": "string" - }, - "bindDn": { - "type": "string" - }, - "bindCredential": { - "type": "string" - }, - "userObjectClasses": { - "type": "string" - }, - "usernameLdapAttribute": { - "type": "string" - }, - "fullSyncPeriod": { - "type": "string" - }, - "rdnLdapAttribute": { - "type": "string" - }, - "uuidLdapAttribute": { - "type": "string" - }, - "editMode": { - "type": "string" - }, - "readTimeout": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "email": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "username": { - "type": "string" - }, - "userLdapFilter": { - "type": "string" - } - } - }, - "ldapLdapVendor": { - "type": "string", - "enum": [ - "other", - "ad" - ], - "default": "other" - }, - "ldapListLdap": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "vendor": { - "type": "string" - }, - "enabled": { - "type": "boolean" - } - } - }, - "ldapListLdapsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/ldapListLdap" - } - } - } - }, - "ldapSyncLdapGroupsResponse": { - "type": "object", - "properties": { - "ignored": { - "type": "boolean" - }, - "added": { - "type": "integer", - "format": "int32" - }, - "updated": { - "type": "integer", - "format": "int32" - }, - "removed": { - "type": "integer", - "format": "int32" - }, - "failed": { - "type": "integer", - "format": "int32" - }, - "status": { - "type": "string" - } - } - }, - "ldapSyncUsersResponse": { - "type": "object", - "properties": { - "ignored": { - "type": "boolean" - }, - "added": { - "type": "integer", - "format": "int32" - }, - "updated": { - "type": "integer", - "format": "int32" - }, - "removed": { - "type": "integer", - "format": "int32" - }, - "failed": { - "type": "integer", - "format": "int32" - }, - "status": { - "type": "string" - } - } - }, - "ldapTestLdapAuthenticationRequest": { - "type": "object", - "properties": { - "bindDn": { - "type": "string", - "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server" - }, - "bindCredential": { - "type": "string", - "description": "Password of LDAP admin." - }, - "connectionUrl": { - "type": "string", - "title": "Connection URL to your LDAP server" - }, - "connectionTimeout": { - "type": "string", - "title": "LDAP Connection Timeout in milliseconds: 选填" - }, - "action": { - "type": "string", - "title": "测试事件类型: 选填, testAuthentication" - }, - "startTls": { - "type": "string", - "title": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling. 选填" - }, - "useTruststoreSpi": { - "type": "string", - "title": "Specifies whether LDAP connection will use the truststore SPI with the truststore configured.\n'Always' means that it will always use it.\n'Never' means that it will not use it.\n'Only for ldaps' means that it will use if your connection URL use ldaps.\n选填" - }, - "componentId": { - "type": "string", - "title": "Ldap id: 选填, uuid. 如果 bind_credential 的值等于 \"**********\", 则此字段是必填参" - } - } - }, - "ldapTestLdapAuthenticationResponse": { - "type": "object" - }, - "ldapTestLdapConnectionRequest": { - "type": "object", - "properties": { - "connectionUrl": { - "type": "string", - "title": "Connection URL to your LDAP server" - }, - "bindDn": { - "type": "string", - "title": "DN of LDAP admin, which will be used by Keycloak to access LDAP server: 选填" - }, - "bindCredential": { - "type": "string", - "title": "Password of LDAP admin. 选填" - }, - "connectionTimeout": { - "type": "string", - "title": "LDAP Connection Timeout in milliseconds: 选填" - }, - "action": { - "type": "string", - "title": "测试事件类型: 选填, testConnection" - }, - "startTls": { - "type": "string", - "description": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling." - }, - "useTruststoreSpi": { - "type": "string", - "title": "Specifies whether LDAP connection will use the truststore SPI with the truststore configured.\n'Always' means that it will always use it.\n'Never' means that it will not use it.\n'Only for ldaps' means that it will use if your connection URL use ldaps.\n选填" - }, - "componentId": { - "type": "string", - "title": "Ldap id: 选填, uuid" - } - } - }, - "ldapTestLdapConnectionResponse": { - "type": "object" - }, - "ldapUpdateLdapGroupResponse": { - "type": "object" - }, - "ldapUpdateLdapResponse": { - "type": "object" - }, - "loginAuthenticateWithPasswordRequest": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "loginAuthenticateWithPasswordResponse": { - "type": "object", - "properties": { - "idToken": { - "type": "string" - }, - "refreshToken": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "loginCheckSessionLimitRequest": { - "type": "object", - "properties": { - "username": { - "type": "string" - } - } - }, - "loginCheckSessionLimitResponse": { - "type": "object" - }, - "loginLoginGetResponse": { - "type": "object" - }, - "loginLoginPostRequest": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "state": { - "type": "string" - }, - "sessionState": { - "type": "string" - }, - "callbackUrl": { - "type": "string" - }, - "useSso": { - "type": "string" - } - } - }, - "loginLoginPostResponse": { - "type": "object", - "properties": { - "idToken": { - "type": "string" - }, - "refreshToken": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "loginLogoutResponse": { - "type": "object", - "properties": { - "externalLogoutUrl": { - "type": "string" - } - } - }, - "loginRefreshTokenRequest": { - "type": "object", - "properties": { - "refreshToken": { - "type": "string" - } - } - }, - "loginRefreshTokenResponse": { - "type": "object", - "properties": { - "idToken": { - "type": "string" - }, - "refreshToken": { - "type": "string" - } - } - }, - "loginpageGetLoginPageInfoResponse": { - "type": "object", - "properties": { - "version": { - "type": "integer", - "format": "int32" - }, - "platformName": { - "type": "string" - }, - "copyright": { - "type": "string" - }, - "tabName": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "favicon": { - "type": "string" - }, - "background": { - "type": "string" - }, - "customBg": { - "type": "boolean" - }, - "isVideo": { - "type": "boolean" - } - } - }, - "loginpageGetLoginPageVersionResponse": { - "type": "object", - "properties": { - "version": { - "type": "integer", - "format": "int32" - } - } - }, - "loginpageResetLoginPageInfoResponse": { - "type": "object" - }, - "loginpageUpdateLoginPageInfoRequest": { - "type": "object", - "properties": { - "platformName": { - "type": "string" - }, - "copyright": { - "type": "string" - }, - "tabName": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "favicon": { - "type": "string" - }, - "background": { - "type": "string" - }, - "isVideo": { - "type": "boolean" - } - } - }, - "loginpageUpdateLoginPageInfoResponse": { - "type": "object" - }, - "messageDeleteMessagesRequest": { - "type": "object", - "properties": { - "ids": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - } - } - } - }, - "messageDeleteMessagesResponse": { - "type": "object" - }, - "messageGetMessageResponse": { - "type": "object", - "properties": { - "message": { - "$ref": "#/definitions/messageMessageInfo" - } - } - }, - "messageGetMessagesCountResponse": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32" - }, - "readTotal": { - "type": "integer", - "format": "int32" - }, - "unreadTotal": { - "type": "integer", - "format": "int32" - } - } - }, - "messageGetSystemMessageResponse": { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "show": { - "type": "boolean" - } - } - }, - "messageListMessagesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/messageMessageInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1messagePagination" - } - } - }, - "messageMessageInfo": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "message": { - "type": "string" - }, - "read": { - "$ref": "#/definitions/messageReadType" - }, - "createdAt": { - "type": "string" - } - } - }, - "messageReadType": { - "type": "string", - "enum": [ - "all", - "read", - "unread" - ], - "default": "all" - }, - "messageSetReadMessagesRequest": { - "type": "object", - "properties": { - "all": { - "type": "boolean" - }, - "ids": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - } - } - } - }, - "messageSetReadMessagesResponse": { - "type": "object" - }, - "messageToggleUnreadMessageResponse": { - "type": "object", - "properties": { - "message": { - "$ref": "#/definitions/messageMessageInfo" - } - } - }, - "oauthCreateOauth2Request": { - "type": "object", - "properties": { - "providerType": { - "$ref": "#/definitions/v1alpha1oauthProviderType" - }, - "displayName": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "agentId": { - "type": "string" - } - } - }, - "oauthCreateOauth2Response": { - "type": "object" - }, - "oauthDeleteOauth2Response": { - "type": "object" - }, - "oauthGetOauth2RedirectDomainResponse": { - "type": "object", - "properties": { - "redirectDomain": { - "type": "string" - } - } - }, - "oauthGetOauth2Response": { - "type": "object", - "properties": { - "providerType": { - "$ref": "#/definitions/v1alpha1oauthProviderType" - }, - "displayName": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "agentId": { - "type": "string" - } - } - }, - "oauthUpdateOauth2Request": { - "type": "object", - "properties": { - "providerType": { - "$ref": "#/definitions/v1alpha1oauthProviderType" - }, - "displayName": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "agentId": { - "type": "string" - } - } - }, - "oauthUpdateOauth2Response": { - "type": "object" - }, - "oidcGhippoClientConfigResponse": { - "type": "object", - "properties": { - "clientId": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "groupsClaim": { - "type": "string" - }, - "name": { - "type": "string" - }, - "scope": { - "type": "string" - }, - "userClaim": { - "type": "string" - }, - "clientSecret": { - "type": "string" - } - } - }, - "oidcOIDCLogoutResponse": { - "type": "object" - }, - "oidcOIDCTokenRequest": { - "type": "object", - "properties": { - "clientId": { - "type": "string" - }, - "grantType": { - "type": "string" - }, - "clientSecret": { - "type": "string" - }, - "code": { - "type": "string", - "title": "string response_type = 4 [(validate.rules).string.min_len = 1];" - }, - "redirectUri": { - "type": "string" - }, - "username": { - "type": "string" - }, - "password": { - "type": "string" - }, - "refreshToken": { - "type": "string" - }, - "scope": { - "type": "string" - } - } - }, - "oidcOIDCTokenResponse": { - "type": "object", - "properties": { - "accessToken": { - "type": "string" - }, - "idToken": { - "type": "string" - }, - "expiresIn": { - "type": "integer", - "format": "int32" - }, - "refreshExpiresIn": { - "type": "integer", - "format": "int32" - }, - "refreshToken": { - "type": "string" - }, - "tokenType": { - "type": "string" - }, - "notBeforePolicy": { - "type": "integer", - "format": "int32" - }, - "sessionState": { - "type": "string" - }, - "scope": { - "type": "string" - } - } - }, - "oidcOIDCUserInfoResponse": { - "type": "object", - "properties": { - "sub": { - "type": "string" - }, - "preferredUsername": { - "type": "string" - }, - "email": { - "type": "string" - }, - "locale": { - "type": "string" - } - } - }, - "oidcRedirectFrontendLogoutResponse": { - "type": "object" - }, - "oidcWellKnownResponse": { - "type": "object", - "properties": { - "issuer": { - "type": "string" - }, - "authorizationEndpoint": { - "type": "string" - }, - "tokenEndpoint": { - "type": "string" - }, - "jwksUri": { - "type": "string" - }, - "userinfoEndpoint": { - "type": "string" - }, - "introspectionEndpoint": { - "type": "string" - }, - "idTokenSigningAlgValuesSupported": { - "type": "array", - "items": { - "type": "string" - } - }, - "endSessionEndpoint": { - "type": "string" - } - } - }, - "productnavProductMenu": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "iconUrl": { - "type": "string" - }, - "target": { - "type": "string" - }, - "menus": { - "type": "array", - "items": { - "$ref": "#/definitions/productnavProductMenu" - } - } - } - }, - "productnavProductNavCategory": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "menus": { - "type": "array", - "items": { - "$ref": "#/definitions/productnavProductMenu" - } - } - } - }, - "productnavProductNavResponse": { - "type": "object", - "properties": { - "categories": { - "type": "array", - "items": { - "$ref": "#/definitions/productnavProductNavCategory" - } - } - } - }, - "protobufAny": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - } - }, - "additionalProperties": {}, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" - }, - "publishPublishMessageRequest": { - "type": "object", - "properties": { - "userId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "message": { - "type": "string" - }, - "messageUid": { - "type": "string" - } - } - }, - "publishPublishMessageResponse": { - "type": "object" - }, - "roleAuthScope": { - "type": "string", - "enum": [ - "platform", - "folder", - "workspace" - ], - "default": "platform", - "title": "- platform: unknown_auth_scope = 0;" - }, - "roleAuthScopeAllPermissions": { - "type": "object", - "properties": { - "authScope": { - "$ref": "#/definitions/roleAuthScope" - }, - "categoryPerms": { - "type": "array", - "items": { - "$ref": "#/definitions/roleCategoryAllPermissions" - } - } - } - }, - "roleCategory": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "localizedName": { - "type": "string" - } - } - }, - "roleCategoryAllPermissions": { - "type": "object", - "properties": { - "category": { - "$ref": "#/definitions/roleCategory" - }, - "resourcePerms": { - "type": "array", - "items": { - "$ref": "#/definitions/roleResourceAllPermissions" - } - } - } - }, - "roleCategoryPermissions": { - "type": "object", - "properties": { - "category": { - "$ref": "#/definitions/roleCategory" - }, - "resourcePerms": { - "type": "array", - "items": { - "$ref": "#/definitions/roleResourcePermissions" - } - } - } - }, - "roleCheckRoleNameResponse": { - "type": "object", - "properties": { - "exist": { - "type": "boolean" - } - } - }, - "roleCreateRoleRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string", - "title": "string gproduct = 2 [(validate.rules).string = {min_len: 1, max_len: 63}];\nglobalRoleType type = 3;" - }, - "scope": { - "$ref": "#/definitions/roleAuthScope" - }, - "perms": { - "type": "array", - "items": { - "$ref": "#/definitions/rolePermission" - } - } - } - }, - "roleCreateRoleResponse": { - "type": "object" - }, - "roleDeleteRoleResponse": { - "type": "object" - }, - "roleGProductAllPermissions": { - "type": "object", - "properties": { - "gproduct": { - "$ref": "#/definitions/v1alpha1roleGProduct" - }, - "authscopePerms": { - "type": "array", - "items": { - "$ref": "#/definitions/roleAuthScopeAllPermissions" - }, - "title": "map gproduct = 1;" - } - } - }, - "roleGProductPermissions": { - "type": "object", - "properties": { - "gproduct": { - "$ref": "#/definitions/v1alpha1roleGProduct", - "title": "string gproduct = 1;" - }, - "categoryPerms": { - "type": "array", - "items": { - "$ref": "#/definitions/roleCategoryPermissions" - } - } - } - }, - "roleGetRoleMemberCountResponse": { - "type": "object", - "properties": { - "userCount": { - "type": "integer", - "format": "int32" - }, - "groupCount": { - "type": "integer", - "format": "int32" - } - } - }, - "roleGetRoleResponse": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/roleglobalRoleType" - }, - "description": { - "type": "string" - }, - "scope": { - "$ref": "#/definitions/roleAuthScope" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "gproductPerms": { - "type": "array", - "items": { - "$ref": "#/definitions/roleGProductPermissions" - } - } - } - }, - "roleListAllPermissionsResponse": { - "type": "object", - "properties": { - "gproductPerms": { - "type": "array", - "items": { - "$ref": "#/definitions/roleGProductAllPermissions" - } - } - } - }, - "roleListFolderRoleNamesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/roleRoleName" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1rolePagination" - } - } - }, - "roleListMembersByPlatformRoleResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/roleMember" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1rolePagination" - } - } - }, - "roleListMembersFoldersByFolderRoleResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/roleMemberFolder" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1rolePagination" - } - } - }, - "roleListMembersWorkspacesByWorkspaceRoleResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/roleMemberWorkspace" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1rolePagination" - } - } - }, - "roleListRolesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1roleRoleInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1rolePagination" - } - } - }, - "roleListWorkspaceRoleNamesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/roleRoleName" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1rolePagination" - } - } - }, - "roleMember": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "roleMemberFolder": { - "type": "object", - "properties": { - "memberName": { - "type": "string" - }, - "memberType": { - "type": "string" - }, - "folderId": { - "type": "integer", - "format": "int32" - }, - "folderAlias": { - "type": "string" - }, - "memberId": { - "type": "string" - } - } - }, - "roleMemberWorkspace": { - "type": "object", - "properties": { - "memberName": { - "type": "string" - }, - "memberType": { - "type": "string" - }, - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "workspaceAlias": { - "type": "string" - }, - "memberId": { - "type": "string" - } - } - }, - "rolePermission": { - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "gproduct": { - "type": "string" - } - } - }, - "roleQueryAuthScope": { - "type": "string", - "enum": [ - "query_all_auth_scope", - "query_platform", - "query_folder", - "query_workspace" - ], - "default": "query_all_auth_scope" - }, - "roleQueryRoleType": { - "type": "string", - "enum": [ - "query_all_role_type", - "query_system", - "query_custom" - ], - "default": "query_all_role_type" - }, - "roleResourceAction": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "localizedName": { - "type": "string" - }, - "tips": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "roleResourceActionWithDependency": { - "type": "object", - "properties": { - "action": { - "$ref": "#/definitions/roleResourceAction" - }, - "dependPerms": { - "type": "array", - "items": { - "$ref": "#/definitions/rolePermission" - } - } - } - }, - "roleResourceAllPermissions": { - "type": "object", - "properties": { - "resourceType": { - "$ref": "#/definitions/v1alpha1roleResourceType" - }, - "actions": { - "type": "array", - "items": { - "$ref": "#/definitions/roleResourceActionWithDependency" - } - } - } - }, - "roleResourcePermissions": { - "type": "object", - "properties": { - "resourceType": { - "$ref": "#/definitions/v1alpha1roleResourceType" - }, - "actions": { - "type": "array", - "items": { - "$ref": "#/definitions/roleResourceAction" - } - } - } - }, - "roleRoleName": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "authScope": { - "$ref": "#/definitions/roleAuthScope" - }, - "description": { - "type": "string" - } - } - }, - "roleUpdateRoleResponse": { - "type": "object" - }, - "roleglobalRoleType": { - "type": "string", - "enum": [ - "system", - "custom" - ], - "default": "system", - "title": "TODO: 改为 RoleType" - }, - "securitypolicyGetAccountLockoutPolicyResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxLoginFailures": { - "type": "integer", - "format": "int32" - }, - "maxFailuresWaitSeconds": { - "type": "integer", - "format": "int32" - }, - "failureResetSeconds": { - "type": "integer", - "format": "int32" - } - } - }, - "securitypolicyGetLogoutPolicyResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "securitypolicyGetMFAResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "securitypolicyGetPasswordPolicyResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/securitypolicyPasswordPolicyInfo" - } - } - } - }, - "securitypolicyGetSessionTimeoutResponse": { - "type": "object", - "properties": { - "timeoutSeconds": { - "type": "integer", - "format": "int32" - } - } - }, - "securitypolicyGetSystemSessionLimitResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "number": { - "type": "integer", - "format": "int32" - } - } - }, - "securitypolicyGetTimeSessionLimitResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "start": { - "type": "string" - }, - "end": { - "type": "string" - } - } - }, - "securitypolicyGetUserSessionLimitResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "number": { - "type": "integer", - "format": "int32" - } - } - }, - "securitypolicyPasswordPolicyInfo": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/securitypolicyPasswordPolicyType" - }, - "value": { - "type": "string" - } - } - }, - "securitypolicyPasswordPolicyType": { - "type": "string", - "enum": [ - "MinimumLengthLabel", - "NotRecentlyUsedLabel", - "NotUsernameLabel", - "NotEmailLabel", - "DigitsLabel", - "UppercaseCharactersLabel", - "LowercaseCharactersLabel", - "SpecialCharactersLabel", - "ExpirePasswordLabel" - ], - "default": "MinimumLengthLabel" - }, - "securitypolicySetAccountLockoutPolicyRequest": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "maxLoginFailures": { - "type": "integer", - "format": "int32", - "title": "failures count >= 0" - }, - "maxFailuresWaitSeconds": { - "type": "integer", - "format": "int32", - "title": "Lock time >= 60s" - }, - "failureResetSeconds": { - "type": "integer", - "format": "int32", - "title": "reset time >= 60s" - } - } - }, - "securitypolicySetAccountLockoutPolicyResponse": { - "type": "object" - }, - "securitypolicySetLogoutPolicyRequest": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "securitypolicySetLogoutPolicyResponse": { - "type": "object" - }, - "securitypolicySetMFARequest": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "securitypolicySetMFAResponse": { - "type": "object" - }, - "securitypolicySetPasswordPolicyRequest": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/securitypolicyPasswordPolicyInfo" - } - } - } - }, - "securitypolicySetPasswordPolicyResponse": { - "type": "object" - }, - "securitypolicySetSessionTimeoutRequest": { - "type": "object", - "properties": { - "timeoutSeconds": { - "type": "integer", - "format": "int32", - "title": "timeout > 3600s" - } - } - }, - "securitypolicySetSessionTimeoutResponse": { - "type": "object" - }, - "securitypolicySetSystemSessionLimitRequest": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "number": { - "type": "integer", - "format": "int32" - } - } - }, - "securitypolicySetSystemSessionLimitResponse": { - "type": "object" - }, - "securitypolicySetTimeSessionLimitRequest": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "start": { - "type": "string" - }, - "end": { - "type": "string" - } - } - }, - "securitypolicySetTimeSessionLimitResponse": { - "type": "object" - }, - "securitypolicySetUserSessionLimitRequest": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "number": { - "type": "integer", - "format": "int32" - } - } - }, - "securitypolicySetUserSessionLimitResponse": { - "type": "object" - }, - "smtpsettingGetSmtpServerResponse": { - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int32" - }, - "ssl": { - "type": "boolean" - }, - "starttls": { - "type": "boolean" - }, - "from": { - "type": "string" - }, - "user": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "smtpsettingSetSmtpServerRequest": { - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int32" - }, - "ssl": { - "type": "boolean" - }, - "starttls": { - "type": "boolean" - }, - "from": { - "type": "string" - }, - "user": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "smtpsettingSetSmtpServerResponse": { - "type": "object" - }, - "smtpsettingSmtpConnTestRequest": { - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int32" - }, - "ssl": { - "type": "boolean" - }, - "starttls": { - "type": "boolean" - }, - "from": { - "type": "string" - }, - "to": { - "type": "string" - }, - "user": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "smtpsettingSmtpConnTestResponse": { - "type": "object" - }, - "themeGetFooterThemeConfigResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "css": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "themeGetLoginThemeConfigResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "css": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "themeGetThemeConfigResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "css": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "themeResetFooterThemeConfigResponse": { - "type": "object" - }, - "themeResetLoginThemeConfigResponse": { - "type": "object" - }, - "themeResetThemeConfigResponse": { - "type": "object" - }, - "themeSetFooterThemeConfigRequest": { - "type": "object", - "properties": { - "css": { - "type": "string" - } - } - }, - "themeSetFooterThemeConfigResponse": { - "type": "object" - }, - "themeSetLoginThemeConfigRequest": { - "type": "object", - "properties": { - "css": { - "type": "string" - } - } - }, - "themeSetLoginThemeConfigResponse": { - "type": "object" - }, - "themeSetThemeConfigRequest": { - "type": "object", - "properties": { - "css": { - "type": "string" - } - } - }, - "themeSetThemeConfigResponse": { - "type": "object" - }, - "topnavResetTopNavResponse": { - "type": "object" - }, - "topnavSetTopNavRequest": { - "type": "object", - "properties": { - "icon": { - "type": "string" - }, - "favicon": { - "type": "string" - }, - "tabName": { - "type": "string" - } - } - }, - "topnavSetTopNavResponse": { - "type": "object" - }, - "topnavTopNavResponse": { - "type": "object", - "properties": { - "icon": { - "type": "string" - }, - "favicon": { - "type": "string" - }, - "tabName": { - "type": "string" - } - } - }, - "userCheckUserEmailResponse": { - "type": "object", - "properties": { - "existed": { - "type": "boolean" - } - } - }, - "userCheckUserResponse": { - "type": "object", - "properties": { - "existed": { - "type": "boolean" - } - } - }, - "userCreateUserAccessTokenResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "userCreateUserRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "password": { - "type": "string" - }, - "description": { - "type": "string" - }, - "temporary": { - "type": "boolean" - } - } - }, - "userCreateUserResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "userCreateUserWithoutPasswordRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - }, - "userCreateUserWithoutPasswordResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "userDeleteUserAccessTokenResponse": { - "type": "object" - }, - "userDeleteUserResponse": { - "type": "object" - }, - "userListUserAccessTokensResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1userAccessToken" - } - } - } - }, - "userListUserGroupsResponse": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/definitions/v1alpha1userPagination" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1userGroup" - } - } - } - }, - "userListUserRolesResponse": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/definitions/v1alpha1userPagination" - }, - "authorizedCount": { - "type": "integer", - "format": "int64" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1userRoleInfo" - } - } - } - }, - "userListUserSubjectResponse": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/definitions/v1alpha1userPagination" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/userUserSubject" - } - } - } - }, - "userListUsersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1userGetUserResponse" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1userPagination" - } - } - }, - "userResetUserMFAResponse": { - "type": "object" - }, - "userSetUserPasswordResponse": { - "type": "object" - }, - "userUpdateUserResponse": { - "type": "object" - }, - "userUpdateUserRolesResponse": { - "type": "object" - }, - "userUserSubject": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - }, - "roleName": { - "type": "string" - }, - "subjectName": { - "type": "string" - } - } - }, - "userVerifyUserSSHPublicKeyResponse": { - "type": "object" - }, - "v1alpha1aboutPagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32" - }, - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1currentuserAccessToken": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "expiredAt": { - "type": "string" - } - } - }, - "v1alpha1currentuserGetUserResponse": { - "type": "object", - "properties": { - "uid": { - "type": "string" - }, - "username": { - "type": "string" - }, - "email": { - "type": "string" - }, - "locale": { - "type": "string" - }, - "source": { - "type": "string" - } - } - }, - "v1alpha1gproductGProduct": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - }, - "uiAssetsUrl": { - "type": "string" - }, - "needImportLicense": { - "type": "boolean" - }, - "needUpdateExpiredLicense": { - "type": "boolean" - } - } - }, - "v1alpha1groupPagination": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - }, - "total": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1groupRoleInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "description": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "authorized": { - "type": "boolean" - } - } - }, - "v1alpha1groupUser": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "description": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "v1alpha1idpProviderType": { - "type": "string", - "enum": [ - "oidc" - ], - "default": "oidc" - }, - "v1alpha1messagePagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32" - }, - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1oauthProviderType": { - "type": "string", - "enum": [ - "wechatwork" - ], - "default": "wechatwork" - }, - "v1alpha1roleGProduct": { - "type": "object", - "properties": { - "gproduct": { - "type": "string" - }, - "localizedName": { - "type": "string" - } - } - }, - "v1alpha1rolePagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32" - }, - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1roleResourceType": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "localizedName": { - "type": "string" - } - } - }, - "v1alpha1roleRoleInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/roleglobalRoleType" - }, - "description": { - "type": "string" - }, - "scope": { - "$ref": "#/definitions/roleAuthScope" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "v1alpha1userAccessToken": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "expiredAt": { - "type": "string" - } - } - }, - "v1alpha1userGetUserResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "description": { - "type": "string" - }, - "firstname": { - "type": "string" - }, - "lastname": { - "type": "string" - }, - "source": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastLoginAt": { - "type": "string" - }, - "canAuthorize": { - "type": "boolean" - } - } - }, - "v1alpha1userGroup": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "v1alpha1userPagination": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - }, - "total": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1userRoleInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "description": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "authorized": { - "type": "boolean" - } - } - }, - "v1alpha1webhookPagination": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - }, - "total": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1webhookResourceType": { - "type": "string", - "enum": [ - "resource_type_user" - ], - "default": "resource_type_user" - }, - "v1alpha1webhookStatus": { - "type": "string", - "enum": [ - "all", - "successful", - "failed" - ], - "default": "all" - }, - "v1alpha1workspaceGroup": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "userCount": { - "type": "integer", - "format": "int64" - }, - "description": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "canAuthorize": { - "type": "boolean" - }, - "authorized": { - "type": "boolean" - } - } - }, - "v1alpha1workspacePagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32" - }, - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1workspaceUser": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "description": { - "type": "string" - }, - "firstname": { - "type": "string" - }, - "lastname": { - "type": "string" - }, - "source": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "canAuthorize": { - "type": "boolean" - }, - "authorized": { - "type": "boolean" - } - } - }, - "v1alpha3auditPagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32" - }, - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha3auditSearchType": { - "type": "string", - "enum": [ - "fuzzy", - "exact" - ], - "default": "fuzzy" - }, - "v1alpha3auditStatusType": { - "type": "string", - "enum": [ - "all", - "succeeded", - "failed" - ], - "default": "all" - }, - "webhookAction": { - "type": "string", - "enum": [ - "action_create", - "action_update", - "action_delete", - "action_login", - "action_logout" - ], - "default": "action_create" - }, - "webhookCreateWebhookRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "resourceType": { - "$ref": "#/definitions/v1alpha1webhookResourceType" - }, - "action": { - "$ref": "#/definitions/webhookAction" - }, - "url": { - "type": "string" - }, - "method": { - "$ref": "#/definitions/webhookMethod" - }, - "headers": { - "type": "string" - }, - "requestParameter": { - "type": "string" - } - } - }, - "webhookCreateWebhookResponse": { - "type": "object" - }, - "webhookDeleteWebhookResponse": { - "type": "object" - }, - "webhookGetWebhookRecordResponse": { - "type": "object", - "properties": { - "webhookRecordInfo": { - "$ref": "#/definitions/webhookWebhookRecordInfo" - } - } - }, - "webhookGetWebhookResponse": { - "type": "object", - "properties": { - "webhookInfo": { - "$ref": "#/definitions/webhookWebhookInfo" - } - } - }, - "webhookListWebhookRecordsByClientIdResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/webhookWebhookRecordInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1webhookPagination" - } - } - }, - "webhookListWebhooksByClientIdResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/webhookWebhookInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1webhookPagination" - } - } - }, - "webhookMethod": { - "type": "string", - "enum": [ - "method_get", - "method_post", - "method_put", - "method_delete", - "method_patch" - ], - "default": "method_get" - }, - "webhookStatusResponse": { - "type": "string", - "enum": [ - "response_unknown", - "response_successful", - "response_failed" - ], - "default": "response_unknown" - }, - "webhookUpdateWebhookResponse": { - "type": "object" - }, - "webhookWebhookInfo": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "clientId": { - "type": "string" - }, - "resourceType": { - "$ref": "#/definitions/v1alpha1webhookResourceType" - }, - "action": { - "$ref": "#/definitions/webhookAction" - }, - "url": { - "type": "string" - }, - "method": { - "$ref": "#/definitions/webhookMethod" - }, - "headers": { - "type": "string" - }, - "requestParameter": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - } - }, - "webhookWebhookRecordInfo": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "clientId": { - "type": "string" - }, - "webhookId": { - "type": "integer", - "format": "int32" - }, - "webhookName": { - "type": "string" - }, - "resourceType": { - "$ref": "#/definitions/v1alpha1webhookResourceType" - }, - "action": { - "$ref": "#/definitions/webhookAction" - }, - "url": { - "type": "string" - }, - "method": { - "$ref": "#/definitions/webhookMethod" - }, - "eventTime": { - "type": "string" - }, - "eventData": { - "type": "string" - }, - "statusCode": { - "type": "integer", - "format": "int32" - }, - "status": { - "$ref": "#/definitions/webhookStatusResponse" - }, - "requestedAt": { - "type": "string" - }, - "request": { - "type": "string" - }, - "respondedAt": { - "type": "string" - }, - "response": { - "type": "string" - }, - "errMessage": { - "type": "string" - } - } - }, - "workspaceAuthorizeResponse": { - "type": "object" - }, - "workspaceBindExclusiveResourceToWorkspaceResponse": { - "type": "object" - }, - "workspaceBindSharedResourceAndSetQuotaHardToWorkspaceResponse": { - "type": "object" - }, - "workspaceBindSharedResourceToWorkspaceResponse": { - "type": "object" - }, - "workspaceClusterStatus": { - "type": "string", - "enum": [ - "StatusUnknown", - "StatusRunning", - "StatusNotRunning" - ], - "default": "StatusUnknown" - }, - "workspaceCreateFolderRequest": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Deprecated: Do not use." - }, - "alias": { - "type": "string" - }, - "parentFolderId": { - "type": "integer", - "format": "int32" - } - } - }, - "workspaceCreateFolderResponse": { - "type": "object", - "properties": { - "folderId": { - "type": "integer", - "format": "int32" - } - } - }, - "workspaceCreateWorkspaceRequest": { - "type": "object", - "properties": { - "alias": { - "type": "string", - "title": "string name = 1 [(validate.rules).string.max_len = 64];" - }, - "parentFolderId": { - "type": "integer", - "format": "int32" - } - } - }, - "workspaceCreateWorkspaceResponse": { - "type": "object", - "properties": { - "workspaceId": { - "type": "integer", - "format": "int32" - } - } - }, - "workspaceDeauthorizeResponse": { - "type": "object" - }, - "workspaceDeleteFolderResponse": { - "type": "object" - }, - "workspaceDeleteWorkspaceResponse": { - "type": "object" - }, - "workspaceFolderInfo": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string", - "description": "Deprecated: Do not use." - }, - "alias": { - "type": "string" - } - } - }, - "workspaceFolderListGroupsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1workspaceGroup" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceFolderListPermissionsResponse": { - "type": "object", - "properties": { - "permissions": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceFolderPermission" - } - } - } - }, - "workspaceFolderListUsersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1workspaceUser" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceFolderPermission": { - "type": "string", - "enum": [ - "Unknown", - "CreateFolder", - "UpdateFolder", - "GetFolder", - "DeleteFolder", - "AuthorizeFolder", - "CreateWorkspace", - "UpdateWorkspace", - "GetWorkspace", - "DeleteWorkspace", - "AuthorizeWorkspace", - "ResourceBindingWorkspace", - "UpdateResourceQuotaWorkspace" - ], - "default": "Unknown" - }, - "workspaceFolderTree": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "alias": { - "type": "string" - }, - "isWorkspace": { - "type": "boolean" - }, - "parentId": { - "type": "integer", - "format": "int32" - }, - "children": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceFolderTree" - } - }, - "permissions": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceFolderPermission" - } - }, - "resourceKind": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceWorkspaceResourceKindEnum" - } - } - } - }, - "workspaceGetFolderResponse": { - "type": "object", - "properties": { - "folder": { - "$ref": "#/definitions/workspaceFolderInfo" - } - } - }, - "workspaceGetWorkspaceResponse": { - "type": "object", - "properties": { - "workspace": { - "$ref": "#/definitions/workspaceWorkspaceInfo" - } - } - }, - "workspaceGetWorkspaceSharedResourceQuotaResponse": { - "type": "object", - "properties": { - "setting": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "allocatable": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "used": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "workspaceListAvailableExclusiveResourcesByWorkspaceResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceResourceInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceListAvailableSharedResourcesByWorkspaceResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceResourceInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceListExclusiveResourceTypesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "workspaceListExclusiveResourcesByWorkspaceResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceWorkspacesResourceInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceListFolderTreeResponse": { - "type": "object", - "properties": { - "folderTree": { - "$ref": "#/definitions/workspaceFolderTree" - }, - "defaultId": { - "type": "integer", - "format": "int32" - } - } - }, - "workspaceListFoldersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceFolderInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceListMembersRolesByFolderResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceMemberRoleFolderInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceListMembersRolesByWorkspaceResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceMemberRoleWorkspaceInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceListResourceQuotaTypesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "workspaceListSharedResourceTypesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "workspaceListSharedResourcesByWorkspaceResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceWorkspacesResourceInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceListWorkspaceShareResourceQuotaTypesResponse": { - "type": "object", - "properties": { - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceResourceQuotaType" - } - } - } - }, - "workspaceListWorkspacesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceWorkspaceInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceMemberRoleFolderInfo": { - "type": "object", - "properties": { - "memberName": { - "type": "string" - }, - "memberType": { - "type": "string" - }, - "roleName": { - "type": "string" - }, - "folderId": { - "type": "integer", - "format": "int32" - }, - "memberId": { - "type": "string" - } - } - }, - "workspaceMemberRoleWorkspaceInfo": { - "type": "object", - "properties": { - "memberName": { - "type": "string" - }, - "memberType": { - "type": "string" - }, - "roleName": { - "type": "string" - }, - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "memberId": { - "type": "string" - } - } - }, - "workspaceMoveWorkspaceFolderListResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceMoverWorkspaceFolder" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1workspacePagination" - } - } - }, - "workspaceMoveWorkspaceResponse": { - "type": "object" - }, - "workspaceMoverWorkspaceFolder": { - "type": "object", - "properties": { - "folderId": { - "type": "integer", - "format": "int32" - }, - "folderAlias": { - "type": "string" - }, - "parentId": { - "type": "integer", - "format": "int32" - }, - "parentAlias": { - "type": "string" - } - } - }, - "workspaceReauthorizeResponse": { - "type": "object" - }, - "workspaceResourceInfo": { - "type": "object", - "properties": { - "resourceName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "gproduct": { - "type": "string" - }, - "resourceScope": { - "type": "string" - }, - "bound": { - "type": "boolean" - }, - "clusterStatus": { - "$ref": "#/definitions/workspaceClusterStatus" - } - } - }, - "workspaceResourceQuotaType": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "alias": { - "type": "string" - }, - "resource": { - "type": "array", - "items": { - "$ref": "#/definitions/workspaceResourceQuotaTypeKey" - } - } - } - }, - "workspaceResourceQuotaTypeKey": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "alias": { - "type": "string" - }, - "aliasZh": { - "type": "string" - } - } - }, - "workspaceSetQuotaHardForWorkspaceSharedResourceRequest": { - "type": "object", - "properties": { - "workspaceResourceId": { - "type": "integer", - "format": "int32" - }, - "quotaHard": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "workspaceSetQuotaHardForWorkspaceSharedResourceResponse": { - "type": "object" - }, - "workspaceUnbindResourceFromWorkspaceResponse": { - "type": "object" - }, - "workspaceUpdateFolderResponse": { - "type": "object" - }, - "workspaceUpdateQuotaCheckRequest": { - "type": "object", - "properties": { - "resourceName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "gproduct": { - "type": "string" - }, - "resourceScope": { - "type": "string", - "title": "cluster 资源 resource_scope 为空" - }, - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "quotaHard": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "workspaceUpdateQuotaCheckResponse": { - "type": "object", - "properties": { - "passed": { - "type": "boolean" - }, - "reason": { - "type": "string" - } - } - }, - "workspaceWorkspaceInfo": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "alias": { - "type": "string" - } - } - }, - "workspaceWorkspaceResourceKindEnum": { - "type": "string", - "enum": [ - "resource_group", - "shared_resource", - "registry", - "kangaroo_registry", - "kangaroo_project" - ], - "default": "resource_group" - }, - "workspaceWorkspacesResourceInfo": { - "type": "object", - "properties": { - "resourceName": { - "type": "string" - }, - "resourceType": { - "type": "string" - }, - "resourceScope": { - "type": "string" - }, - "gproduct": { - "type": "string" - }, - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "workspaceResourceId": { - "type": "integer", - "format": "int32" - }, - "module": { - "type": "string" - }, - "clusterStatus": { - "$ref": "#/definitions/workspaceClusterStatus" - } - } - } - } -} diff --git a/site/openapi/index.html b/site/openapi/index.html deleted file mode 100644 index 229c613..0000000 --- a/site/openapi/index.html +++ /dev/null @@ -1,465 +0,0 @@ - - - - - - - - - - - - - - -OpenAPI 访问密钥 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
- -
-
-
-

OpenAPI 文档

-

这是面向开发者的一些 OpenAPI 文档。

- -

获取 OpenAPI 访问密钥

-

访问密钥(Access Key)可用于访问 OpenAPI 和持续发布,用户可在个人中心参照以下步骤获取密钥并访问 API。

-

登录 AI 算力平台,在右上角的下拉菜单中找到 个人中心 ,可以在 访问密钥 页面管理账号的访问密钥。

-

ak list

-

created a key

-
-

Info

-

访问密钥信息仅显示一次。如果您忘记了访问密钥信息,您需要重新创建新的访问密钥。

-
-

使用密钥访问 API

-

在访问算丰 AI 算力平台openAPI 时,在请求中加上请求头 Authorization:Bearer ${token} 以标识访问者的身份, -其中 ${token} 是上一步中获取到的密钥。

-

请求示例

-
curl -X GET -H 'Authorization:Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkRKVjlBTHRBLXZ4MmtQUC1TQnVGS0dCSWc1cnBfdkxiQVVqM2U3RVByWnMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NjE0MTU5NjksImlhdCI6MTY2MDgxMTE2OSwiaXNzIjoiZ2hpcHBvLmlvIiwic3ViIjoiZjdjOGIxZjUtMTc2MS00NjYwLTg2MWQtOWI3MmI0MzJmNGViIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4iLCJncm91cHMiOltdfQ.RsUcrAYkQQ7C6BxMOrdD3qbBRUt0VVxynIGeq4wyIgye6R8Ma4cjxG5CbU1WyiHKpvIKJDJbeFQHro2euQyVde3ygA672ozkwLTnx3Tu-_mB1BubvWCBsDdUjIhCQfT39rk6EQozMjb-1X1sbLwzkfzKMls-oxkjagI_RFrYlTVPwT3Oaw-qOyulRSw7Dxd7jb0vINPq84vmlQIsI3UuTZSNO5BCgHpubcWwBss-Aon_DmYA-Et_-QtmPBA3k8E2hzDSzc7eqK0I68P25r9rwQ3DeKwD1dbRyndqWORRnz8TLEXSiCFXdZT2oiMrcJtO188Ph4eLGut1-4PzKhwgrQ' https://demo-dev.daocloud.io/apis/ghippo.io/v1alpha1/users?page=1&pageSize=10 -k
-
-

请求结果

-
{
-    "items": [
-        {
-            "id": "a7cfd010-ebbe-4601-987f-d098d9ef766e",
-            "name": "a",
-            "email": "",
-            "description": "",
-            "firstname": "",
-            "lastname": "",
-            "source": "locale",
-            "enabled": true,
-            "createdAt": "1660632794800",
-            "updatedAt": "0",
-            "lastLoginAt": ""
-        }
-    ],
-    "pagination": {
-        "page": 1,
-        "pageSize": 10,
-        "total": 1
-    }
-}
-
-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/openapi/insight/index.html b/site/openapi/insight/index.html deleted file mode 100644 index 0ea92a2..0000000 --- a/site/openapi/insight/index.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - -可观测性 OpenAPI 文档 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/openapi/insight/swagger-8364a759.html b/site/openapi/insight/swagger-8364a759.html deleted file mode 100644 index 362d094..0000000 --- a/site/openapi/insight/swagger-8364a759.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - Swagger UI - - - - - - -
- - - - - - \ No newline at end of file diff --git a/site/openapi/insight/v0.28.0.json b/site/openapi/insight/v0.28.0.json deleted file mode 100644 index b6a00bc..0000000 --- a/site/openapi/insight/v0.28.0.json +++ /dev/null @@ -1,11427 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "可观测性", - "version": "v0.28.0" - }, - "tags": [ - { - "name": "Insight" - }, - { - "name": "FeatureGate" - }, - { - "name": "Alert" - }, - { - "name": "Log" - }, - { - "name": "Metric" - }, - { - "name": "Resource" - }, - { - "name": "Tracing" - }, - { - "name": "ServiceGraph" - }, - { - "name": "Event" - }, - { - "name": "Probe" - }, - { - "name": "Overview" - }, - { - "name": "NetFlow" - } - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "paths": { - "/apis/insight.io/v1alpha1/agentinstallparam": { - "post": { - "operationId": "Insight_GetHelmInstallConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1helmInstallConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1helmInstallConfigRequest" - } - } - ], - "tags": [ - "Insight" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/alertcount": { - "get": { - "operationId": "Alert_CountAlert", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CountAlertResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "resolved", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "targetType", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TARGET_TYPE_UNSPECIFIED", - "GLOBAL", - "CLUSTER", - "NAMESPACE", - "NODE", - "DEPLOYMENT", - "STATEFULSET", - "DAEMONSET", - "POD" - ], - "default": "TARGET_TYPE_UNSPECIFIED" - }, - { - "name": "target", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "severity", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SEVERITY_UNSPECIFIED", - "CRITICAL", - "WARNING", - "INFO" - ], - "default": "SEVERITY_UNSPECIFIED" - }, - { - "name": "start", - "description": "start == 0 means from 1970.01.01", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "step", - "description": "step unit is minute\nstep == 0 means return total alert count num", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "groupByType", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/alerts": { - "get": { - "operationId": "Alert_ListAlerts", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAlertsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "resolved", - "description": "set resolved to True shows alert histories", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "groupName", - "description": "filter alerts by group name fuzzily", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "groupId", - "description": "filter alerts by group id", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "ruleName", - "description": "filter alerts by rule name fuzzily", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "ruleId", - "description": "filter alerts by rule id", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "description": "filter alerts by cluster name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "filter alerts by namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "severity", - "description": "filter alerts by severity", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SEVERITY_UNSPECIFIED", - "CRITICAL", - "WARNING", - "INFO" - ], - "default": "SEVERITY_UNSPECIFIED" - }, - { - "name": "targetType", - "description": "filter alerts by target_type", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TARGET_TYPE_UNSPECIFIED", - "GLOBAL", - "CLUSTER", - "NAMESPACE", - "NODE", - "DEPLOYMENT", - "STATEFULSET", - "DAEMONSET", - "POD" - ], - "default": "TARGET_TYPE_UNSPECIFIED" - }, - { - "name": "target", - "description": "filter alerts by target", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- start_at,desc or start_at\n- start_at,asc\n- severity,desc or severity\n- severity,asc\n- rule_name,desc or rule_name\n- rule_name,asc\n\nthe default sort is start_at,desc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/alerts/{id}": { - "get": { - "operationId": "Alert_GetAlert", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Alert" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string", - "format": "int64" - }, - { - "name": "resolved", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/groups": { - "get": { - "operationId": "Alert_ListGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListGroupsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "builtin", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "name", - "description": "filter group by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "description": "filter alerts by cluster name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "filter alerts by namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- name,desc or name\n- name,asc\n- create_at,desc or create_at\n- create_at,asc\n\nthe default sort is name,asc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_CreateGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/alertv1alpha1Group" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1CreateGroupRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/groups/validate": { - "post": { - "operationId": "Alert_ValidateGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ValidateGroupResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1ValidateGroupRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/groups/{id}": { - "get": { - "operationId": "Alert_GetGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/alertv1alpha1Group" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "summary": "UpdateGroup only can update group description and notify", - "operationId": "Alert_UpdateGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/alertv1alpha1Group" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateGroupBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/groups/{id}/rules": { - "get": { - "operationId": "Alert_ListGroupRules", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRulesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "filter rule by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "severity", - "description": "filter rules by severity", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SEVERITY_UNSPECIFIED", - "CRITICAL", - "WARNING", - "INFO" - ], - "default": "SEVERITY_UNSPECIFIED" - }, - { - "name": "status", - "description": "filter rules by status", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "UNSPECIFIED", - "FIRING", - "ENABLED" - ], - "default": "UNSPECIFIED" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- name,desc or name\n- rule_name,asc\n- severity,desc or severity\n- severity,asc\n- status,desc or status\n- status,asc\n- source,desc or source\n- source,asc\n- create_at,desc or create_at\n- create_at,asc\n\nthe default sort is name,asc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_AddGroupRule", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Rule" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "description": "required;", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertAddGroupRuleBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/groups/{id}/rules/{name}": { - "get": { - "operationId": "Alert_GetGroupRule", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Rule" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "description": "required; id is group id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "required; name is rule name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteGroupRule", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "description": "required; id is group id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "required; name is rule name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateGroupRule", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Rule" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "description": "required; id is group id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "required;", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateGroupRuleBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/history/clean": { - "put": { - "operationId": "Alert_CleanAlertHistory", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CleanAlertHistoryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/history/retentionperiod": { - "get": { - "operationId": "Alert_GetAlertHistoryRetentionPeriod", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1AlertHistoryRetentionPeriod" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateAlertHistoryRetentionPeriod", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1AlertHistoryRetentionPeriod" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/hook": { - "post": { - "operationId": "Alert_AlertHook", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1AMHookRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/inhibitions": { - "get": { - "summary": "Inhibition", - "operationId": "Alert_ListInhibitions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1InhibitionList" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- name,desc or name\n- name,asc\n- create_at,desc or create_at\n- create_at,asc\n\nthe default sort is name,asc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_CreateInhibition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Inhibition" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1CreateInhibitionRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/inhibitions/{id}": { - "get": { - "operationId": "Alert_GetInhibition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Inhibition" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteInhibition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateInhibition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Inhibition" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateInhibitionBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/providers": { - "get": { - "operationId": "Alert_ListProviders", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListProvidersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "filter template by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- update_at,desc or update_at\n- update_at,asc\n\nthe default sort is update_at,desc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "exactSearch", - "description": "exact search by name", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_CreateProvider", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ProviderDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1Provider" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/providers/{name}": { - "get": { - "operationId": "Alert_GetProvider", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ProviderDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "ProviderType type = 2 [ (validate.rules).enum.defined_only = true ];", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteProvider", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ProviderDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "ProviderType type = 2 [ (validate.rules).enum.defined_only = true ];", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateProvider", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ProviderDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateProviderBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/receivers": { - "get": { - "operationId": "Alert_ListReceivers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListReceiverResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "type", - "description": "filter receivers by type", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "RECEIVER_TYPE_UNSPECIFIED", - "webhook", - "email", - "dingtalk", - "wecom", - "sms" - ], - "default": "RECEIVER_TYPE_UNSPECIFIED" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- create_at,desc or create_at\n- create_at,asc\n\nthe default sort is create_at,desc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "exactSearch", - "description": "exact search by name", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_CreateReceiver", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ReceiverDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1Receiver" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/receivers/test": { - "post": { - "operationId": "Alert_TestReceiver", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1Receiver" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/receivers/{name}": { - "get": { - "operationId": "Alert_GetReceiver", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ReceiverDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "type", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "RECEIVER_TYPE_UNSPECIFIED", - "webhook", - "email", - "dingtalk", - "wecom", - "sms" - ], - "default": "RECEIVER_TYPE_UNSPECIFIED" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteReceiver", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ReceiverDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateReceiver", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ReceiverDataResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateReceiverBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/rule-template-summary": { - "get": { - "summary": "RuleTemplate", - "operationId": "Alert_ListRuleTemplateSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRuleTemplateSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "targetType", - "description": "filter by target type", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TARGET_TYPE_UNSPECIFIED", - "GLOBAL", - "CLUSTER", - "NAMESPACE", - "NODE", - "DEPLOYMENT", - "STATEFULSET", - "DAEMONSET", - "POD" - ], - "default": "TARGET_TYPE_UNSPECIFIED" - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/rule-templates": { - "get": { - "operationId": "Alert_ListRuleTemplates", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRuleTemplatesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "builtin", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "name", - "description": "filter group by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- name,desc or name\n- name,asc\n- create_at,desc or create_at\n- create_at,asc\n- update_at,desc or update_at\n- update_at,asc\n\nthe default sort is name,asc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "targetType", - "description": "filter by target type", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TARGET_TYPE_UNSPECIFIED", - "GLOBAL", - "CLUSTER", - "NAMESPACE", - "NODE", - "DEPLOYMENT", - "STATEFULSET", - "DAEMONSET", - "POD" - ], - "default": "TARGET_TYPE_UNSPECIFIED" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_CreateRuleTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RuleTemplate" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1CreateRuleTemplateRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/rule-templates/{id}": { - "get": { - "operationId": "Alert_GetRuleTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RuleTemplate" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteRuleTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateRuleTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RuleTemplate" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateRuleTemplateBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/rules/preview": { - "post": { - "operationId": "Alert_PreviewRule", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PreviewRuleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1PreviewRuleRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/silences": { - "get": { - "operationId": "Alert_ListSilences", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListSilencesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "expired", - "description": "set \"expired\" to false show silences that vaild for now, otherwise show\nexpired silences", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_CreateSilence", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Silence" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1CreateSilenceRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/silences/preview": { - "post": { - "operationId": "Alert_PreviewSilence", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PreviewSilenceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1PreviewSilenceRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/silences/{id}": { - "get": { - "operationId": "Alert_GetSilence", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Silence" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteSilence", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateSilence", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Silence" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateSilenceBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/smtp": { - "get": { - "operationId": "Alert_GetSMTPStatus", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetSMTPStatusResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/templates": { - "get": { - "operationId": "Alert_ListTemplates", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListTemplatesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "filter template by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- update_at,desc or update_at\n- update_at,asc\n\nthe default sort is update_at,desc", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "exactSearch", - "description": "exact search by name", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Alert" - ] - }, - "post": { - "operationId": "Alert_CreateTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Template" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1CreateTemplateRequest" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/alert/templates/{name}": { - "get": { - "operationId": "Alert_GetTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Template" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "delete": { - "operationId": "Alert_DeleteTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Alert" - ] - }, - "put": { - "operationId": "Alert_UpdateTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Template" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AlertUpdateTemplateBody" - } - } - ], - "tags": [ - "Alert" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters": { - "get": { - "operationId": "Resource_ListClusters", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClustersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "showAllCluster", - "description": "show_all_cluster default is false, will only return cluster with\ninsight-agent installed; if set to true, will return all cluster.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{clusterName}/namespaces/{namespace}/probes": { - "get": { - "summary": "get the list of probes of cluster and namespace scope", - "operationId": "Probe_ListProbes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListProbesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sorts", - "description": "sorts determines the data list order, do not support multiple sort option.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- job_name,desc or job_name\n- job_name,asc\n- create_at,desc or create_at\n- create_at,asc\n\nthe default sort is create_at,desc", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Probe" - ] - }, - "post": { - "summary": "create one probe of cluster and namespace scope", - "operationId": "Probe_AddProbe", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Probe" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ProbeAddProbeBody" - } - } - ], - "tags": [ - "Probe" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{clusterName}/namespaces/{namespace}/probes/{jobName}": { - "get": { - "summary": "get one probe by probe name of cluster and namespace scope", - "operationId": "Probe_GetProbe", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Probe" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "jobName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Probe" - ] - }, - "delete": { - "summary": "delete one probe by probe name of cluster and namespace scope", - "operationId": "Probe_DeleteProbe", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "jobName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Probe" - ] - }, - "put": { - "summary": "update probe content of cluster and namespace scope", - "operationId": "Probe_UpdateProbe", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1empty" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "jobName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ProbeUpdateProbeBody" - } - } - ], - "tags": [ - "Probe" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{clusterName}/probers": { - "get": { - "summary": "get the list of prober(blackbox-exporter) of cluster scope", - "operationId": "Probe_ListProbers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterProbersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Probe" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/agent": { - "get": { - "operationId": "Resource_GetAgentSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1AgentSummary" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "use cluster_name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/cronjobs": { - "get": { - "operationId": "Resource_ListCronjobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListCronJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter jobs by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter jobs by namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "filter jobs by phase\n\n - JOB_STATE_UNSPECIFIED: Job is unspecified.\n - JOB_STATE_WAITING: Waiting for job ready.\n - JOB_STATE_RUNNING: Job is working.\n - JOB_STATE_COMPLETED: Jobs has completed.\n - JOB_STATE_DELETING: Jobs is being deleted.\n - JOB_STATE_FAILED: Jobs is not ready to work .", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "JOB_STATE_UNSPECIFIED", - "JOB_STATE_WAITING", - "JOB_STATE_RUNNING", - "JOB_STATE_COMPLETED", - "JOB_STATE_DELETING", - "JOB_STATE_FAILED" - ], - "default": "JOB_STATE_UNSPECIFIED" - }, - { - "name": "name", - "description": "filter jobs by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/daemonsets": { - "get": { - "operationId": "Resource_ListDaemonsets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListWorkloadsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter workloads by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter workloads by namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "filter workloads by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "filter workloads by phase", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNKNOWN", - "WORKLOAD_STATE_RUNNING", - "WORKLOAD_STATE_DELETING", - "WORKLOAD_STATE_NOT_READY", - "WORKLOAD_STATE_STOPPED", - "WORKLOAD_STATE_WAITING" - ], - "default": "WORKLOAD_STATE_UNKNOWN" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/deployments": { - "get": { - "operationId": "Resource_ListDeployments", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListWorkloadsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter workloads by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter workloads by namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "filter workloads by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "filter workloads by phase", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNKNOWN", - "WORKLOAD_STATE_RUNNING", - "WORKLOAD_STATE_DELETING", - "WORKLOAD_STATE_NOT_READY", - "WORKLOAD_STATE_STOPPED", - "WORKLOAD_STATE_WAITING" - ], - "default": "WORKLOAD_STATE_UNKNOWN" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/jobs": { - "get": { - "operationId": "Resource_ListJobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter jobs by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter jobs by namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "filter jobs by phase\n\n - JOB_STATE_UNSPECIFIED: Job is unspecified.\n - JOB_STATE_WAITING: Waiting for job ready.\n - JOB_STATE_RUNNING: Job is working.\n - JOB_STATE_COMPLETED: Jobs has completed.\n - JOB_STATE_DELETING: Jobs is being deleted.\n - JOB_STATE_FAILED: Jobs is not ready to work .", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "JOB_STATE_UNSPECIFIED", - "JOB_STATE_WAITING", - "JOB_STATE_RUNNING", - "JOB_STATE_COMPLETED", - "JOB_STATE_DELETING", - "JOB_STATE_FAILED" - ], - "default": "JOB_STATE_UNSPECIFIED" - }, - { - "name": "name", - "description": "filter jobs by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces": { - "get": { - "operationId": "Resource_ListNamespaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNamespacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{name}": { - "get": { - "operationId": "Resource_GetCronjob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CronJob" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{name}/pods": { - "get": { - "operationId": "Resource_GetCronjobPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "operationId": "Resource_GetDaemonset", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Workload" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets/{name}/pods": { - "get": { - "operationId": "Resource_GetDaemonsetPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}": { - "get": { - "operationId": "Resource_GetDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Workload" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}/pods": { - "get": { - "operationId": "Resource_GetDeploymentPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/jobs/{name}": { - "get": { - "operationId": "Resource_GetJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Job" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/jobs/{name}/pods": { - "get": { - "operationId": "Resource_GetJobPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods/{name}": { - "get": { - "operationId": "Resource_GetPod", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Pod" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods/{name}/containers": { - "get": { - "operationId": "Resource_ListPodContainers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListContainersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter nodes by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter nodes by namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "filter containers by name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/services/{name}": { - "get": { - "operationId": "Resource_GetService", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Service" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "operationId": "Resource_GetStatefulset", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Workload" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}/pods": { - "get": { - "operationId": "Resource_GetStatefulsetPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/namespaces/{name}": { - "get": { - "operationId": "Resource_GetNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1NamespaceDetail" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/nodes": { - "get": { - "operationId": "Resource_ListNodes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNodesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter nodes by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "phase", - "description": "filter nodes by phase\n\n - NODE_PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - NODE_PHASE_READY: The node is ready to work.\n - NODE_PHASE_NOT_READY: The node is not ready.\n - NODE_PHASE_UNKNOWN: The node state is unknown.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "NODE_PHASE_UNSPECIFIED", - "NODE_PHASE_READY", - "NODE_PHASE_NOT_READY", - "NODE_PHASE_UNKNOWN" - ], - "default": "NODE_PHASE_UNSPECIFIED" - }, - { - "name": "name", - "description": "filter nodes by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/nodes/{name}": { - "get": { - "operationId": "Resource_GetNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/apiresourcev1alpha1Node" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/nodes/{name}/gpu": { - "get": { - "operationId": "Resource_GetNodeGPUDashboard", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetGPUResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "gpuVendors", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "start", - "description": "start unix timestamp with seconds unit\ndefault now - 1h", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "end", - "description": "end unix timestamp with seconds unit\ndefault now", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/pods": { - "get": { - "operationId": "Resource_ListPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter nodes by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter nodes by namespaces", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "filter nodes by status\n\n - POD_PHASE_UNKNOWN: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - POD_PHASE_PENDING: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - POD_PHASE_RUNNING: PodRunning means the pod has been bound to a node and all of the containers\nhave been started. At least one container is still running or is in the\nprocess of being restarted. PodSucceeded means that all containers in the\npod have voluntarily terminated with a container exit code of 0, and the\nsystem is not going to restart any of these containers.\n - POD_PHASE_SUCCEED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - POD_PHASE_FAILED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "POD_PHASE_UNSPECIFIED", - "POD_PHASE_UNKNOWN", - "POD_PHASE_PENDING", - "POD_PHASE_RUNNING", - "POD_PHASE_SUCCEED", - "POD_PHASE_FAILED" - ], - "default": "POD_PHASE_UNSPECIFIED" - }, - { - "name": "name", - "description": "filter pods by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/services": { - "get": { - "operationId": "Resource_ListServices", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListServicesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter services by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter services by namespaces", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "filter services by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{cluster}/statefulsets": { - "get": { - "operationId": "Resource_ListStatefulsets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListWorkloadsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "filter workloads by cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "filter workloads by namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "filter workloads by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "filter workloads by phase", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNKNOWN", - "WORKLOAD_STATE_RUNNING", - "WORKLOAD_STATE_DELETING", - "WORKLOAD_STATE_NOT_READY", - "WORKLOAD_STATE_STOPPED", - "WORKLOAD_STATE_WAITING" - ], - "default": "WORKLOAD_STATE_UNKNOWN" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clusters/{name}": { - "get": { - "operationId": "Resource_GetCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterDetail" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/clustersummary": { - "get": { - "operationId": "Resource_ListClusterSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "filter cluster by name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "version", - "description": "filter cluster by k8s version", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "filter cluster by phase\n\n - CLUSTER_PHASE_UNSPECIFIED: The cluster state is unspecified.\n - UNKNOWN: The cluster state is unknown.\n - CREATING: The cluster is being created.\n - RUNNING: The cluster is running.\n - UPDATING: The cluster is updating.\n - DELETING: The cluster is being deleted.\n - FAILED: The cluster operations failed.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "CLUSTER_PHASE_UNSPECIFIED", - "UNKNOWN", - "CREATING", - "RUNNING", - "UPDATING", - "DELETING", - "FAILED" - ], - "default": "CLUSTER_PHASE_UNSPECIFIED" - }, - { - "name": "showAllCluster", - "description": "show_all_cluster default is false, will only return cluster with\ninsight-agent installed; if set to true, will return all cluster.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/config": { - "get": { - "operationId": "Insight_GetGlobalConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GlobalConfig" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Insight" - ] - } - }, - "/apis/insight.io/v1alpha1/event/cluster/{clusterName}/events": { - "get": { - "operationId": "Event_QueryEvents", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryEventResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "description": "Required.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "startTime", - "description": "startTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now-24 hour.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "endTime", - "description": "endTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.type", - "description": " - Normal: use lowercase to keep the same as the original Kubernetes event data", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TYPE_UNSPECIFIED", - "Normal", - "Warning" - ], - "default": "TYPE_UNSPECIFIED" - }, - { - "name": "filter.involveObjectKind", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.reason", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.involveObjectName", - "description": "fuzzy search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.message", - "description": "fuzzy search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sort", - "description": "sort determines the data list order.\nparameter and sort direction divided by comma.\nsupport sorts:\n- timestamp,desc\n- timestamp,asc\n- type,desc\n- type,asc\n\nOptional.\nDefault = timestamp,desc", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.\nOptional.\nDefault = 1.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.\nOptional.\nDefault = 10.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Event" - ] - } - }, - "/apis/insight.io/v1alpha1/event/cluster/{clusterName}/events/context": { - "get": { - "operationId": "Event_QueryEventContext", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryEventResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "description": "Required.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "timestamp", - "description": "timestamp e.g. 2023-06-20T16:05:16.887681657Z\nRequired.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Optional.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.type", - "description": " - Normal: use lowercase to keep the same as the original Kubernetes event data", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "TYPE_UNSPECIFIED", - "Normal", - "Warning" - ], - "default": "TYPE_UNSPECIFIED" - }, - { - "name": "filter.involveObjectKind", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.reason", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.involveObjectName", - "description": "fuzzy search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "filter.message", - "description": "fuzzy search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "before", - "description": "Optional.\ndefault = 50", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "after", - "description": "Optional.\ndefault = 50", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Event" - ] - } - }, - "/apis/insight.io/v1alpha1/event/cluster/{clusterName}/events/count": { - "post": { - "operationId": "Event_QueryEventCount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryEventCountResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "description": "Required.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/EventQueryEventCountBody" - } - } - ], - "tags": [ - "Event" - ] - } - }, - "/apis/insight.io/v1alpha1/event/cluster/{clusterName}/events/filter-options": { - "get": { - "operationId": "Event_QueryEventFilterOptions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryEventFilterOptionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "description": "Required.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "startTime", - "description": "startTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now-24 hour.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "endTime", - "description": "endTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Optional.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Event" - ] - } - }, - "/apis/insight.io/v1alpha1/event/cluster/{clusterName}/events/histogram": { - "get": { - "operationId": "Event_QueryEventHistogram", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryEventHistogramResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "description": "Required.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "startTime", - "description": "startTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now-24 hour.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "endTime", - "description": "endTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "interval", - "description": "interval e.g 1440s\nRequired.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Optional.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Event" - ] - } - }, - "/apis/insight.io/v1alpha1/event/reasons": { - "get": { - "operationId": "Event_GetReasons", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetReasonsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Event" - ] - } - }, - "/apis/insight.io/v1alpha1/feature-gates": { - "get": { - "operationId": "FeatureGate_GetFeatureGates", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1FeatureGatesResp" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "FeatureGate" - ] - } - }, - "/apis/insight.io/v1alpha1/feature-gates/{id}": { - "get": { - "operationId": "FeatureGate_GetFeatureGateByID", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1FeatureGate" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string", - "enum": [ - "METRICS", - "LOGGING", - "TRACING", - "GRAPH_VIRTUAL_NODE", - "LOG_ALERT", - "NET_FLOW" - ] - } - ], - "tags": [ - "FeatureGate" - ] - } - }, - "/apis/insight.io/v1alpha1/jaeger/v2/traces": { - "get": { - "operationId": "Tracing_FindJaegerTraces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1TracesResponseChunk" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "serviceName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "operationName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "tags", - "description": "e.g. tags[host.name]=localhost&tags[url]=http://test/test\n\nThis is a request variable of the map type. The query format is \"map_name[key]=value\", e.g. If the map name is Age, the key type is string, and the value type is integer, the query parameter is expressed as Age[\"bob\"]=18", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "start", - "description": "e.g. 2022-06-24T08:00:47.850Z", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "end", - "description": "e.g. 2022-06-24T08:00:47.850Z", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "durationMin", - "description": "Span min duration. such as \"300ms\", \"-1.5h\" or \"2h45m\". Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\".", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "durationMax", - "description": "Span min duration. such as \"300ms\", \"-1.5h\" or \"2h45m\". Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\".", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "only for auth", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/jaeger/v2/traces/{traceId}": { - "get": { - "operationId": "Tracing_FindJaegerTrace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1TracesResponseChunk" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "traceId", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "only for auth", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/log/context": { - "post": { - "operationId": "Log_QueryLogContext", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryLogResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1QueryLogContextRequest" - } - } - ], - "tags": [ - "Log" - ] - } - }, - "/apis/insight.io/v1alpha1/log/export": { - "post": { - "operationId": "Log_DownloadLog", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1DownloadLogResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1DownloadLogRequest" - } - } - ], - "tags": [ - "Log" - ] - } - }, - "/apis/insight.io/v1alpha1/log/filepaths": { - "get": { - "operationId": "Log_ListLogFilePaths", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListLogFilePathsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "node", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Log" - ] - } - }, - "/apis/insight.io/v1alpha1/log/histogram": { - "post": { - "operationId": "Log_QueryLogHistogram", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryLogHistogramResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1QueryLogHistogramRequest" - } - } - ], - "tags": [ - "Log" - ] - } - }, - "/apis/insight.io/v1alpha1/log/query": { - "post": { - "operationId": "Log_QueryLog", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryLogResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1QueryLogRequest" - } - } - ], - "tags": [ - "Log" - ] - } - }, - "/apis/insight.io/v1alpha1/log/search": { - "get": { - "operationId": "Log_SearchLog", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1SearchLogResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "index", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Log" - ] - } - }, - "/apis/insight.io/v1alpha1/metric/query": { - "get": { - "operationId": "Metric_QueryMetric", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PrometheusQueryResult" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "time", - "description": "Optional, current server time is used if the time parameter is omitted.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - } - ], - "tags": [ - "Metric" - ] - }, - "post": { - "operationId": "Metric_BatchQueryMetric", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1BatchQueryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1BatchQueryRequest" - } - } - ], - "tags": [ - "Metric" - ] - } - }, - "/apis/insight.io/v1alpha1/metric/queryrange": { - "get": { - "operationId": "Metric_QueryRangeMetric", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PrometheusQueryRangeResult" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "query", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "start", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "end", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "step", - "in": "query", - "required": false, - "type": "number", - "format": "double" - } - ], - "tags": [ - "Metric" - ] - }, - "post": { - "operationId": "Metric_BatchQueryRangeMetric", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1BatchQueryRangeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1BatchQueryRangeRequest" - } - } - ], - "tags": [ - "Metric" - ] - } - }, - "/apis/insight.io/v1alpha1/net_flow/config": { - "get": { - "operationId": "NetFlow_GetNetFlow", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "NetFlow" - ] - } - }, - "/apis/insight.io/v1alpha1/overview/resources/count": { - "get": { - "operationId": "Overview_GetResourcesCount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetResourcesCountResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "time", - "description": "time unix timestamp .e.g. 1697597347\ndefault now", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "filters", - "description": "default [CLUSTER_NORMAL_TOTAL, CLUSTER_TOTAL, NODE_NORMAL_TOTAL, NODE_TOTAL, DEPLOYMENT_NORMAL_TOTAL, DEPLOYMENT_TOTAL\nSTATEFULSET_NORMAL_TOTAL, STATEFULSET_TOTAL, DAEMONSET_NORMAL_TOTAL, DAEMONSET_TOTAL, JOB_NORMAL_TOTAL, JOB_TOTAL\nPOD_NORMAL_TOTAL, POD_TOTAL, LOG_TOTAL, TRACE_TOTAL]", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "RESOURCE_TYPE_UNSPECIFIED", - "CLUSTER_NORMAL_TOTAL", - "CLUSTER_TOTAL", - "NODE_NORMAL_TOTAL", - "NODE_TOTAL", - "DEPLOYMENT_NORMAL_TOTAL", - "DEPLOYMENT_TOTAL", - "STATEFULSET_NORMAL_TOTAL", - "STATEFULSET_TOTAL", - "DAEMONSET_NORMAL_TOTAL", - "DAEMONSET_TOTAL", - "JOB_NORMAL_TOTAL", - "JOB_TOTAL", - "POD_NORMAL_TOTAL", - "POD_TOTAL", - "LOG_TOTAL", - "TRACE_TOTAL" - ] - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Overview" - ] - } - }, - "/apis/insight.io/v1alpha1/overview/resources/range": { - "get": { - "operationId": "Overview_GetResourcesRange", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetResourcesRangeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "filters", - "description": "default [NODE_TOTAL, POD_NORMAL_TOTAL, POD_ABNORMAL_TOTAL]", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "RESOURCE_TYPE_UNSPECIFIED", - "NODE_TOTAL", - "POD_TOTAL", - "POD_ABNORMAL_TOTAL", - "POD_NORMAL_TOTAL" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "start", - "description": "start unix timestamp .e.g. 1697597347\ndefault end - 1hour", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "end", - "description": "end unix timestamp .e.g. 1697597347\ndefault now", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "step", - "description": "step time step in second, default 60", - "in": "query", - "required": false, - "type": "number", - "format": "double" - } - ], - "tags": [ - "Overview" - ] - } - }, - "/apis/insight.io/v1alpha1/overview/resources/usage": { - "get": { - "operationId": "Overview_GetResourcesUsage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetResourcesUsageResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "filters", - "description": "default [CLUSTER_CPU_USAGE, NODE_CPU_USAGE]", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "RESOURCE_TYPE_UNSPECIFIED", - "CLUSTER_CPU_USAGE", - "CLUSTER_MEM_USAGE", - "CLUSTER_DISK_USAGE", - "NODE_CPU_USAGE", - "NODE_MEM_USAGE", - "NODE_DISK_USAGE" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "limit", - "description": "limit The max element of result in desc order\ndefault 5", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "start", - "description": "start unix timestamp .e.g. 1697597347\ndefault end - 1hour", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "end", - "description": "end unix timestamp .e.g. 1697597347\ndefault now", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "step", - "description": "step time step in second, default 60", - "in": "query", - "required": false, - "type": "number", - "format": "double" - } - ], - "tags": [ - "Overview" - ] - } - }, - "/apis/insight.io/v1alpha1/overview/services/monitor": { - "get": { - "operationId": "Overview_GetServicesMonitor", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetServicesMonitorResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "filters", - "description": "filter\ndefault [AVG_LATENCY, ERR_RATE]\nif It's AVG_LATENCY the result value uses ms as unit otherwise uses percentage as unit", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "MONITOR_TYPE_UNSPECIFIED", - "AVG_LATENCY", - "ERR_RATE" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "limit", - "description": "limit The max element of result in desc order\ndefault 5", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "time", - "description": "timestamp unix timestamp .e.g. 1697597347\ndefault now", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "spanKinds", - "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. Default = [SPAN_KIND_SERVER, SPAN_KIND_CLIENT].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "SPAN_KIND_UNSPECIFIED", - "SPAN_KIND_INTERNAL", - "SPAN_KIND_SERVER", - "SPAN_KIND_CLIENT", - "SPAN_KIND_PRODUCER", - "SPAN_KIND_CONSUMER" - ] - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Overview" - ] - } - }, - "/apis/insight.io/v1alpha1/pods/{name}/gpu": { - "get": { - "operationId": "Resource_GetPodGPUDashboard", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetGPUResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "start", - "description": "start unix timestamp with seconds unit\ndefault now - 1h", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "end", - "description": "end unix timestamp with seconds unit\ndefault now", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/pods/{name}/jvm": { - "post": { - "operationId": "Resource_GetPodJVMInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PodJVMInfo" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "required;", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ResourceGetPodJVMInfoBody" - } - } - ], - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/server/component": { - "get": { - "operationId": "Resource_GetServerComponentSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ServerComponentSummary" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Resource" - ] - } - }, - "/apis/insight.io/v1alpha1/service-graph/graph": { - "post": { - "operationId": "ServiceGraph_GetGraph", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Graph" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1BaseGraphQuery" - } - } - ], - "tags": [ - "ServiceGraph" - ] - } - }, - "/apis/insight.io/v1alpha1/service-graph/node-metrics": { - "get": { - "operationId": "ServiceGraph_GetNodeMetrics", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1NodeMetricResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Required. e.g. cluster = 7760a3f4-bfca-4c1e-8731-aea80838525f", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "service", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "extensionFilters", - "description": "extension_filters eg. skoala_registry=ire-111,instance=xxx", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "endTime", - "description": "end_time 结束时间 unix timestamp,单位 ms", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "lookback", - "description": "lookback 回退时间 unix timestamp,单位 ms", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "step", - "description": "step 时间步长 unix timestamp,单位 ms", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "ratePer", - "description": "ratePer 变化率计算步长 unix timestamp,单位 ms", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "clusterName", - "description": "Required. e.g. clusterName=kpanda-global-cluster must give one of\ncluster,clusterName in a query", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "spanKinds", - "description": "spanKinds is the list of span kinds to include (logical OR) in the\nresulting metrics aggregation. Optional. Default = [SPAN_KIND_SERVER].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "SPAN_KIND_UNSPECIFIED", - "SPAN_KIND_INTERNAL", - "SPAN_KIND_SERVER", - "SPAN_KIND_CLIENT", - "SPAN_KIND_PRODUCER", - "SPAN_KIND_CONSUMER" - ] - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "ServiceGraph" - ] - } - }, - "/apis/insight.io/v1alpha1/traces/apdex": { - "get": { - "operationId": "Tracing_GetServiceApdex", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PrometheusQueryResult" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "apdexThreshold", - "description": "Unit is milseconds.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "startTime", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "endTime", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "extensionFilters", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/traces/clusters/{clusterName}/operations": { - "get": { - "operationId": "Tracing_QueryOperations", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1QueryOperationsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "serviceName", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/traces/operation-detail": { - "get": { - "operationId": "Tracing_GetOperationDetail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetOperationDetailResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusterName", - "description": "Required.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Required. namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "serviceName", - "description": "Required. At least one service name must be provided.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sort", - "description": "Optional.\nsort determines the data list order.\nparameter and sort direction divided by comma.\nsupport sorts:\n- reqRate,desc\n- reqRate,asc\n- errRate,desc\n- errRate,asc\n- p50Latency,desc\n- p50Latency,asc\n- p95Latency,desc\n- p95Latency,asc\n- p99Latency,desc\n- p99Latency,asc\n\nthe default sort is P95_latency,desc", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Optional. page is current page.\nDefault = 1.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Optional. size is the data number shown per page.\nDefault = 10.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "extensionFilters", - "description": "Optional. support extension labels search\nsupport multiple labels, split by comma\neg. span_name=HTTP", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "endTime", - "description": "end_time is the ending time of the time series query range.\nOptional. Default = now.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "lookback", - "description": "lookback is the duration from the end_time to look back on for metrics data points.\nFor example, if set to 1h, the query would span from end_time-1h to end_time.\nOptional. Default = 1h.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "step", - "description": "step size is the duration between data points of the query results.\nFor example, if set to 5s, the results would produce a data point every 5 seconds\nfrom the start_time to end_time.\nOptional. Default = 1m.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "ratePer", - "description": "ratePer is the duration in which the per-second rate of change is calculated for a cumulative counter metric.\nOptional. Default = 1m.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "spanKinds", - "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. Default = [SPAN_KIND_SERVER, SPAN_KIND_CLIENT].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "SPAN_KIND_UNSPECIFIED", - "SPAN_KIND_INTERNAL", - "SPAN_KIND_SERVER", - "SPAN_KIND_CLIENT", - "SPAN_KIND_PRODUCER", - "SPAN_KIND_CONSUMER" - ] - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/traces/service-detail": { - "get": { - "operationId": "Tracing_GetServiceDetail", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetServiceDetailResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Optional. namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "instanceName", - "description": "Optional. instance name(k8s.pod.name)", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "extensionFilters", - "description": "Optional. support extension search\neg.service_name=my-otel-demo-adservice", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "serviceNames", - "description": "service_names are the service names to fetch metrics from.\nThe results will be grouped by service_name.\nRequired. At least one service name must be provided.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "groupByOperation", - "description": "groupByOperation determines if the metrics returned should be grouped by operation.\nOptional. Default = false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "endTime", - "description": "end_time is the ending time of the time series query range.\nOptional. Default = now.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "lookback", - "description": "lookback is the duration from the end_time to look back on for metrics data points.\nFor example, if set to 1h, the query would span from end_time-1h to end_time.\nOptional. Default = 1h.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "step", - "description": "step size is the duration between data points of the query results.\nFor example, if set to 5s, the results would produce a data point every 5 seconds\nfrom the start_time to end_time.\nOptional. Default = 5s.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "ratePer", - "description": "ratePer is the duration in which the per-second rate of change is calculated for a cumulative counter metric.\nOptional. Default = 10m.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "spanKinds", - "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. Default = [SPAN_KIND_SERVER].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "SPAN_KIND_UNSPECIFIED", - "SPAN_KIND_INTERNAL", - "SPAN_KIND_SERVER", - "SPAN_KIND_CLIENT", - "SPAN_KIND_PRODUCER", - "SPAN_KIND_CONSUMER" - ] - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/traces/service-names": { - "get": { - "operationId": "Tracing_ListServiceNames", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetServiceNamesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/traces/services": { - "get": { - "operationId": "Tracing_GetServices", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetServicesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "namespace", - "description": "Optional. namespace", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "extensionFilters", - "description": "Optional. support extension search\neg.service_name=my-otel-demo-adservice", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "endTime", - "description": "end_time is the ending time of the time series query range.\nOptional. Default = now.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "lookback", - "description": "lookback is the duration from the end_time to look back on for metrics data points.\nFor example, if set to 1h, the query would span from end_time-1h to end_time.\nOptional. Default = 1h.", - "in": "query", - "required": false, - "type": "string", - "format": "int64" - }, - { - "name": "spanKinds", - "description": "spanKinds is the list of span kinds to include (logical OR) in the resulting metrics aggregation.\nOptional. Default = [SPAN_KIND_SERVER, SPAN_KIND_CLIENT].\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "SPAN_KIND_UNSPECIFIED", - "SPAN_KIND_INTERNAL", - "SPAN_KIND_SERVER", - "SPAN_KIND_CLIENT", - "SPAN_KIND_PRODUCER", - "SPAN_KIND_CONSUMER" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sort", - "description": "sorts determines the data list order.\nparameter and sort direction divided by comma.\nyou can also only give the parameter,the desc sort will apply it by default\nsupport sorts:\n- service_name,desc or service_name\n- service_name,asc\n- req_rate,desc or req_rate\n- req_rate,asc\n- rep_latency,desc or rep_latency\n- rep_latency,asc\n- error_rate,desc or error_rate\n- error_rate,asc\n\nthe default sort is service_name,asc", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "clusterName", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Tracing" - ] - } - }, - "/apis/insight.io/v1alpha1/userinfo": { - "get": { - "operationId": "Insight_GetUserinfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1userinfo" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Insight" - ] - } - }, - "/apis/insight.io/v1alpha1/version": { - "get": { - "operationId": "Insight_GetVersion", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1VersionInfo" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Insight" - ] - } - } - }, - "definitions": { - "AlertAddGroupRuleBody": { - "type": "object", - "properties": { - "rule": { - "$ref": "#/definitions/v1alpha1CreateGroupRule" - } - } - }, - "AlertUpdateGroupBody": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "notificationTemplate": { - "type": "string" - }, - "receivers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1groupReceiver" - } - }, - "notifyRepeatConfig": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1repeatConfig" - } - } - } - }, - "AlertUpdateGroupRuleBody": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "expr": { - "type": "string" - }, - "thresholdSymbol": { - "type": "string", - "title": "when create rule from metric_tpl,use thresholdSymbol and thresholdNum to\ncomplete the promql" - }, - "thresholdNum": { - "type": "number", - "format": "float" - }, - "duration": { - "type": "string", - "title": "For evaluation interval in time.Duration format,like 30s, 1m, 1h" - }, - "severity": { - "$ref": "#/definitions/v1alpha1Severity" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "customized labels" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "customized annotations" - }, - "logFilterCondition": { - "$ref": "#/definitions/v1alpha1RuleFilterCondition", - "description": "logs alert part\nonly need when rule source is LOG_TPL." - }, - "logQueryString": { - "type": "string" - } - } - }, - "AlertUpdateInhibitionBody": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "sourceMatchers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - }, - "title": "required; support maxium 100 matches" - }, - "targetMatchers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - }, - "title": "required; support maxium 100 matches" - }, - "equal": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "AlertUpdateProviderBody": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1ProviderType" - }, - "aliyun": { - "$ref": "#/definitions/ProviderAliyunConfig" - }, - "tencent": { - "$ref": "#/definitions/ProviderTencentConfig" - }, - "custom": { - "$ref": "#/definitions/ProviderCustomConfig" - }, - "template": { - "type": "string" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "AlertUpdateReceiverBody": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1ReceiverType" - }, - "webhook": { - "$ref": "#/definitions/v1alpha1WebhookConfig" - }, - "email": { - "$ref": "#/definitions/v1alpha1EmailConfig" - }, - "wecom": { - "$ref": "#/definitions/v1alpha1WecomConfig" - }, - "dingtalk": { - "$ref": "#/definitions/v1alpha1DingtalkConfig" - }, - "sms": { - "$ref": "#/definitions/v1alpha1SmsConfig" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "AlertUpdateRuleTemplateBody": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "rules": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1CreateGroupRule" - } - } - } - }, - "AlertUpdateSilenceBody": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "matches": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - }, - "title": "required; support maxium 100 matches" - }, - "activeTimeInterval": { - "$ref": "#/definitions/v1alpha1timeInterval", - "title": "optional; null means rule always valid" - } - } - }, - "AlertUpdateTemplateBody": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "body": { - "$ref": "#/definitions/v1alpha1TemplateBody" - } - } - }, - "ClusterProbersResponseConfigmapMeta": { - "type": "object", - "properties": { - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "name": { - "type": "string" - }, - "data": { - "type": "string" - } - } - }, - "ClusterProbersResponseProber": { - "type": "object", - "properties": { - "prober": { - "$ref": "#/definitions/v1alpha1ProberSpec" - }, - "modules": { - "type": "array", - "items": { - "type": "string" - } - }, - "configmapMeta": { - "$ref": "#/definitions/ClusterProbersResponseConfigmapMeta" - } - } - }, - "EventInvolvedObject": { - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "EventQueryEventCountBody": { - "type": "object", - "properties": { - "startTime": { - "type": "string", - "description": "startTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now-24 hour." - }, - "endTime": { - "type": "string", - "description": "endTime e.g. 2006-01-02T15:04:05.999999999Z07:00\nOptional.\nDefault = now." - }, - "namespace": { - "type": "string", - "description": "Optional." - }, - "filters": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1EventFilter" - }, - "description": "support key value:\n- name: imagePullFail\n value: {\"reason\":\"BackOff\",\"message\":\"Back-off pulling image\"}\n- name: healthyCheckFail\n value: {\"reason\":\"Unhealthy\"}\n- name: podFailed\n value: {\"involve_object_kind\":\"Pod\",\"reason\":\"Failed\"}\n- name: podFailedScheduling\n value: {\"involve_object_kind\":\"Pod\",\"reason\":\"FailedScheduling\"}\n- name: podOOMKilling\n value: {\"involve_object_kind\":\"Pod\",\"reason\":\"OOMKilling\"}\n- name: podFailedMount\n value: {\"reason\":\"FailedMount\"}\nRequired.\nDefault = [imagePullFail, healthyCheckFail, podFailed, podFailedScheduling, podOOMKilling, podFailedMount]." - } - } - }, - "EventSource": { - "type": "object", - "properties": { - "component": { - "type": "string" - }, - "host": { - "type": "string" - } - } - }, - "GetResourcesCountRequestResourcesFilter": { - "type": "string", - "enum": [ - "RESOURCE_TYPE_UNSPECIFIED", - "CLUSTER_NORMAL_TOTAL", - "CLUSTER_TOTAL", - "NODE_NORMAL_TOTAL", - "NODE_TOTAL", - "DEPLOYMENT_NORMAL_TOTAL", - "DEPLOYMENT_TOTAL", - "STATEFULSET_NORMAL_TOTAL", - "STATEFULSET_TOTAL", - "DAEMONSET_NORMAL_TOTAL", - "DAEMONSET_TOTAL", - "JOB_NORMAL_TOTAL", - "JOB_TOTAL", - "POD_NORMAL_TOTAL", - "POD_TOTAL", - "LOG_TOTAL", - "TRACE_TOTAL" - ], - "default": "RESOURCE_TYPE_UNSPECIFIED" - }, - "GetResourcesRangeRequestResourceFilter": { - "type": "string", - "enum": [ - "RESOURCE_TYPE_UNSPECIFIED", - "NODE_TOTAL", - "POD_TOTAL", - "POD_ABNORMAL_TOTAL", - "POD_NORMAL_TOTAL" - ], - "default": "RESOURCE_TYPE_UNSPECIFIED" - }, - "GetResourcesUsageRequestResourceFilters": { - "type": "string", - "enum": [ - "RESOURCE_TYPE_UNSPECIFIED", - "CLUSTER_CPU_USAGE", - "CLUSTER_MEM_USAGE", - "CLUSTER_DISK_USAGE", - "NODE_CPU_USAGE", - "NODE_MEM_USAGE", - "NODE_DISK_USAGE" - ], - "default": "RESOURCE_TYPE_UNSPECIFIED" - }, - "GetServicesMonitorRequestMonitorFilter": { - "type": "string", - "enum": [ - "MONITOR_TYPE_UNSPECIFIED", - "AVG_LATENCY", - "ERR_RATE" - ], - "default": "MONITOR_TYPE_UNSPECIFIED" - }, - "NodePosition": { - "type": "object", - "properties": { - "x": { - "type": "number", - "format": "float" - }, - "y": { - "type": "number", - "format": "float" - } - }, - "title": "Position 可用于标记节点在画布中的位置。\n如果存在此值,那么就是后端计算出位置之后前端直接渲染。\n如果不需要,也可以不实现,由前端选择合适的方式进行展现,或者自己实现。" - }, - "PreviewRuleRequestParams": { - "type": "object", - "properties": { - "start": { - "type": "string", - "format": "int64", - "title": "default end - 1h" - }, - "end": { - "type": "string", - "format": "int64", - "title": "default now" - }, - "step": { - "type": "number", - "format": "double", - "title": "default 60" - } - }, - "title": "Describes querying data size paramaters" - }, - "ProbeAddProbeBody": { - "type": "object", - "properties": { - "probe": { - "$ref": "#/definitions/v1alpha1ProbeSpec" - } - } - }, - "ProbeUpdateProbeBody": { - "type": "object", - "properties": { - "module": { - "type": "string" - }, - "targets": { - "$ref": "#/definitions/v1alpha1Targets" - }, - "interval": { - "type": "string" - }, - "scrapeTimeout": { - "type": "string" - } - } - }, - "ProviderAliyunConfig": { - "type": "object", - "properties": { - "signName": { - "type": "string" - }, - "templateCode": { - "type": "string" - }, - "accessKeyId": { - "type": "string" - }, - "accessKeySecret": { - "type": "string" - } - } - }, - "ProviderCustomConfig": { - "type": "object" - }, - "ProviderTencentConfig": { - "type": "object", - "properties": { - "templateId": { - "type": "string" - }, - "smsSdkAppId": { - "type": "string" - }, - "sign": { - "type": "string" - }, - "secretId": { - "type": "string" - }, - "secretKey": { - "type": "string" - } - } - }, - "ResourceGetPodJVMInfoBody": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string", - "title": "required;" - }, - "start": { - "type": "string", - "format": "int64" - }, - "end": { - "type": "string", - "format": "int64" - }, - "step": { - "type": "number", - "format": "double" - } - } - }, - "StatusPhase": { - "type": "string", - "enum": [ - "Pending", - "Running", - "Failed" - ], - "default": "Pending" - }, - "TargetsStaticConfig": { - "type": "object", - "properties": { - "static": { - "type": "array", - "items": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "relabelingConfigs": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1RelabelConfig" - } - } - } - }, - "TraceProcessMapping": { - "type": "object", - "properties": { - "processId": { - "type": "string" - }, - "process": { - "$ref": "#/definitions/v1alpha1Process" - } - } - }, - "TraceTraceStatus": { - "type": "string", - "enum": [ - "UNHEALTHY", - "HEALTHY" - ], - "default": "UNHEALTHY" - }, - "WorkloadSumKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "DEPLOYMENT", - "STATEFULSET", - "DAEMONSET" - ], - "default": "KIND_UNSPECIFIED" - }, - "alertv1alpha1CountAlert": { - "type": "object", - "properties": { - "start": { - "type": "string", - "format": "int64" - }, - "end": { - "type": "string", - "format": "int64" - }, - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1countInfo" - } - } - } - }, - "alertv1alpha1Group": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "builtin": { - "type": "boolean" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "targets": { - "type": "array", - "items": { - "type": "string" - } - }, - "description": { - "type": "string" - }, - "notificationTemplate": { - "type": "string" - }, - "receivers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1groupReceiver" - } - }, - "notifyRepeatConfig": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1repeatConfig" - } - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "apigraphv1alpha1Node": { - "type": "object", - "properties": { - "id": { - "type": "string", - "title": "节点 ID,不可重复,可以按照一定规则生成。" - }, - "parent": { - "type": "string", - "title": "父节点的 ID,可选实现,可能在做一些依赖关系的时候会用到。\n也可以用在,比如将多个服务放在一个 Namespace 的匡中这种场景。" - }, - "type": { - "$ref": "#/definitions/v1alpha1NodeType", - "title": "节点类型,可用于前端展现不同的图标,或者进行后一步操作。" - }, - "metadata": { - "$ref": "#/definitions/v1alpha1NodeMetadata" - }, - "position": { - "$ref": "#/definitions/NodePosition", - "title": "节点的位置标记" - }, - "statuses": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/apigraphv1alpha1Status" - }, - "title": "当前节点各种状态" - } - }, - "title": "Node 表示图上的每一个实体点" - }, - "apigraphv1alpha1Status": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "可以定义一些初步的 name 共识:\nreplicas 表示副本数\navailableReplicas 表示可用副本数\nrequestsPerMinute 请求速率(RPM)\nerrorRate 错误率(%)\navgLatency 平均延迟(ms)\nconnections 连接数\nreceiveBytes 接收吞吐(B/S)\nsendBytes 发送吞吐(B/S)\nhealthyStatus 健康状态;0(未知) | 1(健康) | 2(告警) | 3(异常)" - }, - "value": { - "type": "number", - "format": "float", - "title": "具体的值,只能用浮点数来表示状态。" - }, - "properties": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "properties 可以给这个 Status 增加一些扩展的参数,\n比如在网格中,流量可能可以分为入口或者出口流量。" - } - }, - "title": "Status 用于定义节点或连线的状态。\n比如希望展示当前服务的 QPS,那么可以如下:\n{ name: qps, value: 100, properties: {protocol: http}}\n如果想要展示命名空间的服务数量:\n{ name: service_count, value: 5}\n具体的释义可以根据各个产品决定。" - }, - "apiprobesv1alpha1Status": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/StatusPhase" - } - } - }, - "apiresourcev1alpha1Condition": { - "type": "object", - "properties": { - "lastTransitionTime": { - "type": "string", - "title": "Last time the condition transitioned from one status to another.\n+optional" - }, - "lastUpdateTime": { - "type": "string", - "title": "Last time we got an update on a given condition.\n+optional" - }, - "message": { - "type": "string", - "title": "A human readable message indicating details about the transition.\n+optional" - }, - "reason": { - "type": "string", - "title": "The reason for the condition's last transition.\n+optional" - }, - "status": { - "type": "string", - "description": "Status of the condition, one of True, False, Unknown." - }, - "type": { - "type": "string", - "description": "Type of condition." - } - }, - "description": "Condition describes the state of a referent at a certain point." - }, - "apiresourcev1alpha1Node": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "operatingSystem": { - "type": "string" - }, - "address": { - "type": "string" - }, - "creationTimestamp": { - "type": "string", - "format": "int64" - }, - "nodeStatus": { - "$ref": "#/definitions/v1alpha1NodeStatus" - }, - "podSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "usage": { - "$ref": "#/definitions/v1alpha1usage" - } - } - }, - "googlerpcStatus": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "details": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/protobufAny" - } - } - } - }, - "protobufAny": { - "type": "object", - "properties": { - "@type": { - "type": "string" - } - }, - "additionalProperties": {} - }, - "timeIntervaltimeRange": { - "type": "object", - "properties": { - "start": { - "type": "string", - "format": "int64" - }, - "end": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1AMHookRequest": { - "type": "object", - "properties": { - "version": { - "type": "string" - }, - "groupKey": { - "type": "string" - }, - "status": { - "type": "string" - }, - "receiver": { - "type": "string" - }, - "groupLabels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "commonLabels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "commonAnnotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "externalURL": { - "type": "string" - }, - "alerts": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1AmAlert" - } - }, - "truncatedAlerts": { - "type": "string", - "format": "int64" - } - }, - "title": "alert message send by alertmanager" - }, - "v1alpha1AgentSummary": { - "type": "object", - "properties": { - "insightAgentState": { - "$ref": "#/definitions/v1alpha1insightAgentState" - }, - "agentModuleStatus": { - "$ref": "#/definitions/v1alpha1agentModuleStatus" - } - } - }, - "v1alpha1AggType": { - "type": "string", - "enum": [ - "INTERSECTION", - "UNION" - ], - "default": "INTERSECTION", - "title": "- INTERSECTION: INTERSECTION preform a intersection operation after FilterOperator\n - UNION: UNION preform a union operation after FilterOperator\nCURRENT NOT SUPPORT" - }, - "v1alpha1Alert": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "int64" - }, - "groupName": { - "type": "string" - }, - "groupId": { - "type": "string" - }, - "ruleName": { - "type": "string" - }, - "ruleId": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "target": { - "type": "string" - }, - "severity": { - "$ref": "#/definitions/v1alpha1Severity" - }, - "value": { - "type": "string" - }, - "notifyResponse": { - "type": "string" - }, - "description": { - "type": "string" - }, - "promQL": { - "type": "string", - "title": "real sql that used to query, add info like cluster, namespaces" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "startAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - }, - "lastSent": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1AlertHistoryRetentionPeriod": { - "type": "object", - "properties": { - "retentionTime": { - "type": "integer", - "format": "int32", - "title": "retention_time unit is day, 0 means no need to clean" - } - } - }, - "v1alpha1AlertSummary": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "int64" - }, - "groupName": { - "type": "string" - }, - "groupId": { - "type": "string" - }, - "ruleName": { - "type": "string" - }, - "ruleId": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "target": { - "type": "string" - }, - "severity": { - "$ref": "#/definitions/v1alpha1Severity" - }, - "value": { - "type": "string" - }, - "notifyResponse": { - "type": "string" - }, - "description": { - "type": "string" - }, - "startAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - }, - "lastSent": { - "type": "string", - "format": "int64" - }, - "builtin": { - "type": "boolean", - "title": "inherits from group" - } - } - }, - "v1alpha1AmAlert": { - "type": "object", - "properties": { - "status": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "startsAt": { - "type": "string" - }, - "endsAt": { - "type": "string" - }, - "generatorURL": { - "type": "string" - }, - "fingerprint": { - "type": "string" - } - } - }, - "v1alpha1BaseGraphQuery": { - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "type": "string" - } - }, - "namespaces": { - "type": "array", - "items": { - "type": "string" - } - }, - "services": { - "type": "array", - "items": { - "type": "string" - } - }, - "layer": { - "$ref": "#/definitions/v1alpha1Layer", - "title": "期望展示的 layer 层级,比如 MESH, TRACING" - }, - "start": { - "type": "string", - "format": "int64", - "title": "start 开始时间 unix timestamp,单位 ms" - }, - "end": { - "type": "string", - "format": "int64", - "title": "end 结束时间 unix timestamp,单位 ms" - }, - "extensionLabels": { - "type": "string", - "title": "eg. \"skoala_registry=ireg-1233,instance_name=xxxxx\"" - }, - "graphType": { - "$ref": "#/definitions/v1alpha1GraphType" - }, - "clusterNames": { - "type": "array", - "items": { - "type": "string" - }, - "title": "cluster_names 集群名字列表" - }, - "filters": { - "$ref": "#/definitions/v1alpha1Filter", - "title": "filters optional. Filter defines some filter operation to the graph data\nindependently. After filter operators done, there is a collection operation\non filtered graph data depending on filters.agg_type, finally, there is a\ndependency fetch operation on the second step result as a root graph to\nfetch its dependent data(downstream node or upstream node) from the origin\nGraph with dependency_max_depth depth the root node data will have a\nproperty DEPENDENT_TYPE = ROOT the dependency node data will have a\nproperty DEPENDENT_TYPE = DEPENDENT" - }, - "showVirtualNode": { - "type": "boolean", - "title": "TODO(jian): remove this in next milestone.\nshow virtual node in service graph or not. Default: false" - }, - "showUpDownRelatedNode": { - "type": "boolean", - "title": "show upstream and downstream node. Default: false" - }, - "workloads": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1BasicAuth": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "v1alpha1BatchQueryRangeRequest": { - "type": "object", - "properties": { - "param": { - "$ref": "#/definitions/v1alpha1BatchQueryRangeRequestParam" - }, - "matchLabel": { - "$ref": "#/definitions/v1alpha1MatchLabel" - }, - "queryList": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1BatchQueryRangeRequestParam": { - "type": "object", - "properties": { - "start": { - "type": "string", - "format": "int64" - }, - "end": { - "type": "string", - "format": "int64" - }, - "step": { - "type": "number", - "format": "double" - } - } - }, - "v1alpha1BatchQueryRangeResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1BatchQueryRangeResult" - } - } - } - }, - "v1alpha1BatchQueryRangeResult": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1PrometheusQueryRangeResult" - }, - "status": { - "$ref": "#/definitions/v1alpha1requestStatus" - }, - "errorMessage": { - "type": "string" - } - } - }, - "v1alpha1BatchQueryRequest": { - "type": "object", - "properties": { - "param": { - "$ref": "#/definitions/v1alpha1BatchQueryRequestParam" - }, - "matchLabel": { - "$ref": "#/definitions/v1alpha1MatchLabel" - }, - "queryList": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1BatchQueryRequestParam": { - "type": "object", - "properties": { - "time": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1BatchQueryResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1BatchQueryResult" - } - } - } - }, - "v1alpha1BatchQueryResult": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1PrometheusQueryResult" - }, - "status": { - "$ref": "#/definitions/v1alpha1requestStatus" - }, - "errorMessage": { - "type": "string" - } - } - }, - "v1alpha1CleanAlertHistoryResponse": { - "type": "object", - "properties": { - "num": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1Cluster": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "kubeSystemId": { - "type": "string", - "title": "kube-system id" - }, - "phase": { - "$ref": "#/definitions/v1alpha1ClusterPhase" - }, - "role": { - "$ref": "#/definitions/v1alpha1Role" - } - } - }, - "v1alpha1ClusterDetail": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "kubeSystemId": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1ClusterPhase" - }, - "provider": { - "$ref": "#/definitions/v1alpha1ClusterProvider", - "description": "Provider represents the cloud provider name of the member cluster." - }, - "kubernetesVersion": { - "type": "string", - "description": "KubernetesVersion represents version of the cluster." - }, - "creationTimestamp": { - "type": "string", - "format": "int64" - }, - "nodeNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "deploymentNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "statefulsetNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "daemonsetNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "podNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "insightAgentStatus": { - "$ref": "#/definitions/v1alpha1insightAgentState" - } - } - }, - "v1alpha1ClusterPhase": { - "type": "string", - "enum": [ - "CLUSTER_PHASE_UNSPECIFIED", - "UNKNOWN", - "CREATING", - "RUNNING", - "UPDATING", - "DELETING", - "FAILED" - ], - "default": "CLUSTER_PHASE_UNSPECIFIED", - "description": " - CLUSTER_PHASE_UNSPECIFIED: The cluster state is unspecified.\n - UNKNOWN: The cluster state is unknown.\n - CREATING: The cluster is being created.\n - RUNNING: The cluster is running.\n - UPDATING: The cluster is updating.\n - DELETING: The cluster is being deleted.\n - FAILED: The cluster operations failed." - }, - "v1alpha1ClusterProbersResponse": { - "type": "object", - "properties": { - "probers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ClusterProbersResponseProber" - } - } - } - }, - "v1alpha1ClusterProvider": { - "type": "string", - "enum": [ - "GENERIC", - "DAOCLOUD_KUBESPRAY", - "DAOCLOUD_CLUSTER_API", - "DAOCLOUD_DCE4", - "REDHAT_OPENSHIFT4", - "SUSE_RANCHER", - "VMWARE_TANZU", - "AWS_EKS", - "ALIYUN_ACK", - "TENCENT_TKE", - "HUAWEI_CCE", - "MICROSOFT_AZURE" - ], - "default": "GENERIC", - "description": " - GENERIC: GENERIC indicates other providers\n - DAOCLOUD_KUBESPRAY: 1.DaoCloud\nDAOCLOUD_KUBESPRAY indicates a provider of DaoCloud's KubeSpray Engine\n - DAOCLOUD_CLUSTER_API: DAOCLOUD_CLUSTER_API indicates a provider of DaoCloud's Cluster API Engine\n - DAOCLOUD_DCE4: DAOCLOUD_DCE4 indicates a provider of DaoCloud's DCE4 Engine\n - REDHAT_OPENSHIFT4: 2.OverSea Distribtion\nREDHAT_OPENSHIFT4 indicates a provider of RedHat Openshift4\n - SUSE_RANCHER: SUSE_RANCHER indicates a provider of SUSE Rancher\n - VMWARE_TANZU: VMWARE_TANZU indicates a provider of VMware Tanzu\n - AWS_EKS: 3.Public Cloud\nAWS_EKS indicates a provider of AWS EKS\n - ALIYUN_ACK: ALIYUN_ACK indicates a provider of Aliyun ACK\n - TENCENT_TKE: TENCENT_TKE indicates a provider of Tencent TKE.\n - HUAWEI_CCE: TENCENT_TKE indicates a provider of Huawei CCE.\n - MICROSOFT_AZURE: MICROSOFT_AZURE=11; indicates a provider of Microsoft Azure." - }, - "v1alpha1ClusterSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "kubeSystemId": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1ClusterPhase" - }, - "nodeNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "insightAgentStatus": { - "$ref": "#/definitions/v1alpha1insightAgentState" - }, - "role": { - "$ref": "#/definitions/v1alpha1Role" - } - } - }, - "v1alpha1ConditionStatus": { - "type": "string", - "enum": [ - "CONDITION_STATUS_UNSPECIFIED", - "True", - "False", - "Unknown" - ], - "default": "CONDITION_STATUS_UNSPECIFIED", - "description": "These are valid condition statuses.\n\n - CONDITION_STATUS_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - True: True means a resource is in the condition.\n - False: False means a resource is not in the condition.\n - Unknown: Unknown means kubernetes can't decide if a resource is in the condition or\nnot." - }, - "v1alpha1ContainerPhase": { - "type": "string", - "enum": [ - "CONTAINER_PHASE_UNSPECIFIED", - "CONTAINER_PHASE_WAITING", - "CONTAINER_PHASE_RUNNING", - "CONTAINER_PHASE_TERMINATED" - ], - "default": "CONTAINER_PHASE_UNSPECIFIED" - }, - "v1alpha1ContainerSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1ContainerPhase" - } - } - }, - "v1alpha1CountAlertResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/alertv1alpha1CountAlert" - } - } - } - }, - "v1alpha1CreateGroupRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "targets": { - "type": "array", - "items": { - "type": "string" - } - }, - "rules": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1CreateGroupRule" - } - }, - "notificationTemplate": { - "type": "string" - }, - "receivers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1groupReceiver" - } - }, - "notifyRepeatConfig": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1repeatConfig" - } - } - } - }, - "v1alpha1CreateGroupRule": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "required" - }, - "description": { - "type": "string" - }, - "source": { - "$ref": "#/definitions/v1alpha1RuleSource", - "title": "required" - }, - "expr": { - "type": "string" - }, - "thresholdSymbol": { - "type": "string", - "title": "when create rule from metric_tpl,use thresholdSymbol and thresholdNum to\ncomplete the promql" - }, - "thresholdNum": { - "type": "number", - "format": "float" - }, - "duration": { - "type": "string", - "title": "Supported units: h, m, s" - }, - "severity": { - "$ref": "#/definitions/v1alpha1Severity" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "customized labels" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "customized annotations" - }, - "logFilterCondition": { - "$ref": "#/definitions/v1alpha1RuleFilterCondition", - "description": "logs alert part\nonly need when rule source is LOG_TPL." - }, - "logQueryString": { - "type": "string" - } - } - }, - "v1alpha1CreateInhibitionRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "description": { - "type": "string" - }, - "sourceMatchers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - }, - "title": "required; support maxium 100 matches" - }, - "targetMatchers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - }, - "title": "required; support maxium 100 matches" - }, - "equal": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1CreateRuleTemplateRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "rules": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1CreateGroupRule" - } - } - } - }, - "v1alpha1CreateSilenceRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "description": { - "type": "string" - }, - "matches": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - }, - "title": "required; support maxium 100 matches" - }, - "activeTimeInterval": { - "$ref": "#/definitions/v1alpha1timeInterval", - "title": "optional; null means rule always valid" - } - } - }, - "v1alpha1CreateTemplateRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "body": { - "$ref": "#/definitions/v1alpha1TemplateBody" - } - } - }, - "v1alpha1CronJob": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1CronJobPhase" - }, - "createTimestamp": { - "type": "string", - "format": "int64" - }, - "jobNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "conditions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/apiresourcev1alpha1Condition" - }, - "description": "conditions of current cronjob." - } - } - }, - "v1alpha1CronJobPhase": { - "type": "string", - "enum": [ - "CRONJOB_STATE_UNSPECIFIED", - "CRONJOB_STATE_WAITING", - "CRONJOB_STATE_ACTIVATED", - "CRONJOB_STATE_STOPPED", - "CRONJOB_STATE_DELETING" - ], - "default": "CRONJOB_STATE_UNSPECIFIED", - "description": " - CRONJOB_STATE_UNSPECIFIED: CronJob is unspecified.\n - CRONJOB_STATE_WAITING: Waiting for cronjob ready.\n - CRONJOB_STATE_ACTIVATED: The number of pending and running pods.\n - CRONJOB_STATE_STOPPED: CronJob has stopped.\n - CRONJOB_STATE_DELETING: CronJob is being deleted." - }, - "v1alpha1CronJobSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1CronJobPhase" - }, - "jobNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - } - } - }, - "v1alpha1DingtalkConfig": { - "type": "object", - "properties": { - "webhook": { - "type": "string" - }, - "secret": { - "type": "string" - } - } - }, - "v1alpha1DownloadFileType": { - "type": "string", - "enum": [ - "TEXT", - "CSV", - "JSON" - ], - "default": "TEXT" - }, - "v1alpha1DownloadLogRequest": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1DownloadFileType" - }, - "queryLog": { - "$ref": "#/definitions/v1alpha1QueryLogRequest" - }, - "queryLogContext": { - "$ref": "#/definitions/v1alpha1QueryLogContextRequest" - }, - "fields": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1LogField" - } - } - } - }, - "v1alpha1DownloadLogResponse": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - } - }, - "v1alpha1Edge": { - "type": "object", - "properties": { - "id": { - "type": "string", - "title": "与 Node.id 一致,一个唯一标志符,理论上,Edge 的 ID 可以为空。" - }, - "source": { - "type": "string", - "title": "source 表示当前连线的起始节点 ID" - }, - "target": { - "type": "string", - "title": "target 表示当前连线的目标节点 ID" - }, - "statuses": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/apigraphv1alpha1Status" - }, - "title": "当前连线各种状态" - }, - "properties": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "当前连线的一些扩展状态,比如可以展示当前协议,线的展示类型等。\n根据各个产品商议。" - } - }, - "title": "Edge 表示连线,用于连接两个 Node。" - }, - "v1alpha1EmailConfig": { - "type": "object", - "properties": { - "to": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1Event": { - "type": "object", - "properties": { - "reportingComponent": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "lastTimestamp": { - "type": "string", - "title": "e.g. 2023-06-21T01:16:56.000Z" - }, - "count": { - "type": "string", - "format": "int64" - }, - "message": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "source": { - "$ref": "#/definitions/EventSource" - }, - "reportingInstance": { - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/v1alpha1EventMetadata" - }, - "type": { - "$ref": "#/definitions/v1alpha1EventType" - }, - "firstTimestamp": { - "type": "string", - "title": "e.g. 2023-06-21T01:16:56.000Z" - }, - "involveObject": { - "$ref": "#/definitions/EventInvolvedObject" - }, - "clusterUuid": { - "type": "string" - }, - "timestamp": { - "type": "string", - "title": "unique primary key, e.g. 2023-06-20T16:05:16.887681657Z" - }, - "action": { - "type": "string" - }, - "eventTime": { - "type": "string" - } - } - }, - "v1alpha1EventFilter": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1EventType" - }, - "involveObjectKind": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "involveObjectName": { - "type": "string", - "title": "fuzzy search" - }, - "message": { - "type": "string", - "title": "fuzzy search" - } - } - }, - "v1alpha1EventHistogram": { - "type": "object", - "properties": { - "timestamp": { - "type": "string", - "title": "timestamp e.g. 2023-06-21T01:48:00.000Z" - }, - "normalCount": { - "type": "string", - "format": "int64" - }, - "warningCount": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1EventMetadata": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "resourceVersion": { - "type": "string" - }, - "creationTimestamp": { - "type": "string" - } - } - }, - "v1alpha1EventType": { - "type": "string", - "enum": [ - "TYPE_UNSPECIFIED", - "Normal", - "Warning" - ], - "default": "TYPE_UNSPECIFIED", - "title": "- Normal: use lowercase to keep the same as the original Kubernetes event data" - }, - "v1alpha1FeatureGate": { - "type": "object", - "properties": { - "id": { - "$ref": "#/definitions/v1alpha1FeatureGateIDEnum", - "title": "唯一标志符" - }, - "name": { - "type": "string", - "title": "名字" - }, - "description": { - "type": "string", - "title": "关于此 FeatureGate 的描述" - }, - "enabled": { - "type": "boolean", - "title": "是否启用" - }, - "status": { - "type": "string" - } - } - }, - "v1alpha1FeatureGateIDEnum": { - "type": "string", - "enum": [ - "METRICS", - "LOGGING", - "TRACING", - "GRAPH_VIRTUAL_NODE", - "LOG_ALERT", - "NET_FLOW" - ], - "default": "METRICS" - }, - "v1alpha1FeatureGatesResp": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1FeatureGate" - } - } - } - }, - "v1alpha1Filter": { - "type": "object", - "properties": { - "clauses": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1OperatorClause" - }, - "title": "clause define a list of filter clause" - }, - "aggType": { - "$ref": "#/definitions/v1alpha1AggType", - "title": "agg_type define a type of set operation" - }, - "dependencyMaxDepth": { - "type": "integer", - "format": "int32", - "title": "dependency_max_depth display the dependency graph with max depth\ndefault value is 1" - } - } - }, - "v1alpha1FilterDataType": { - "type": "string", - "enum": [ - "NODE_DATA", - "EDGE_DATA" - ], - "default": "NODE_DATA", - "title": "- EDGE_DATA: CURRENT NOT SUPPORT" - }, - "v1alpha1FilterField": { - "type": "string", - "enum": [ - "SERVICE_NAME", - "STATUS_ERROR_RATE", - "STATUS_LATENCY", - "CUSTOM_LABEL" - ], - "default": "SERVICE_NAME", - "title": "- SERVICE_NAME: SERVICE_NAME support operation:\n- FilterOperator_CONTAIN\n- FilterOperator_NOT_CONTAIN\n- FilterOperator_EQUAL\n- FilterOperator_NOT_EQUAL\n- FilterOperator_REGEX_PATTERN\n - STATUS_ERROR_RATE: STATUS_ERROR_RATE support operation:\n- FilterOperator_LE\n- FilterOperator_GE\n - STATUS_LATENCY: STATUS_LATENCY support operation:\n- FilterOperator_LE\n- FilterOperator_GE\n - CUSTOM_LABEL: CURRENT NOT SUPPORT" - }, - "v1alpha1FilterOperator": { - "type": "string", - "enum": [ - "EQ", - "NE", - "LT", - "LE", - "GT", - "GE", - "CONTAIN", - "NOT_CONTAIN", - "EQUAL", - "NOT_EQUAL", - "REGEX_PATTERN" - ], - "default": "EQ", - "title": "- EQ: EQ only support apply on numerical data\n= Equality relation between numerics\n - NE: NE only support apply on numerical data\n!= Inequality relation between numerics\n - LT: LT only support apply on numerical data\n< Less than relation between numerics\n - LE: LE only support apply on numerical data\n<= Less than or equal relation between numerics\n - GT: GT only support apply on numerical data\n> Greater than relation between numerics\n - GE: GE only support apply on numerical data\n>= Greater than or equal relation between numerics\n - CONTAIN: CONTAIN only support apply on string data\nRegularExpression\n - NOT_CONTAIN: NOT_CONTAIN only support apply on string data\nRegularExpression operation\n - EQUAL: EQUAL only support apply on string data\nRegularExpression operation\n - NOT_EQUAL: only support apply on string data\nRegularExpression operation\n - REGEX_PATTERN: only support apply on string data\nRegularExpression operation" - }, - "v1alpha1GetConfigResponse": { - "type": "object", - "properties": { - "grafanaUrl": { - "type": "string" - } - } - }, - "v1alpha1GetGPUResponse": { - "type": "object", - "properties": { - "urls": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1dashboardURL" - } - } - } - }, - "v1alpha1GetOperationDetailResponse": { - "type": "object", - "properties": { - "metrics": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1MetricsWithOperation" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1GetReasonsResponse": { - "type": "object", - "properties": { - "node": { - "type": "array", - "items": { - "type": "string" - } - }, - "daemonSet": { - "type": "array", - "items": { - "type": "string" - } - }, - "deployment": { - "type": "array", - "items": { - "type": "string" - } - }, - "job": { - "type": "array", - "items": { - "type": "string" - } - }, - "pod": { - "type": "array", - "items": { - "type": "string" - } - }, - "statefulSet": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1GetResourcesCountResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1BatchQueryResult" - }, - "title": "data contain difference metric with a __name__ label which describe the name of metric" - } - } - }, - "v1alpha1GetResourcesRangeResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1BatchQueryRangeResult" - } - } - } - }, - "v1alpha1GetResourcesUsageResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1BatchQueryRangeResult" - } - } - } - }, - "v1alpha1GetSMTPStatusResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "v1alpha1GetServiceDetailResponse": { - "type": "object", - "properties": { - "p95Metrics": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "请求时延 95 百分位趋势图,时间范围内的" - }, - "p75Metrics": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "请求时延 75 百分位趋势图,时间范围内的" - }, - "p50Metrics": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "请求时延 50 百分位趋势图,时间范围内的" - }, - "reqRateMetric": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "吞吐率趋势图,时间范围内的" - }, - "errorsRateMetrics": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "错误率延趋势图,时间范围内的" - } - } - }, - "v1alpha1GetServiceNamesResponse": { - "type": "object", - "properties": { - "services": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1GetServicesMonitorResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1BatchQueryResult" - } - } - } - }, - "v1alpha1GetServicesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1ServiceItem" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1GlobalConfig": { - "type": "object", - "properties": { - "vmStorageRetentionTime": { - "type": "string" - }, - "logRetentionTime": { - "type": "string" - }, - "traceDataRetentionTime": { - "type": "string" - }, - "traceApdexThreshold": { - "type": "string" - }, - "k8sEventLogRetentionTime": { - "type": "string" - }, - "skoalaLogRetentionTime": { - "type": "string" - } - } - }, - "v1alpha1Graph": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/apigraphv1alpha1Node" - } - }, - "edges": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Edge" - } - }, - "layer": { - "$ref": "#/definitions/v1alpha1Layer" - }, - "graphType": { - "$ref": "#/definitions/v1alpha1GraphType" - } - }, - "description": "样例 2,根据服务网格的观测数据,画出拓扑图\n{\n\"nodes\": [\n{\n\"id\": \"test-cluster/test-ns\",\n\"type\": \"NAMESPACE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"name\": \"test-ns\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 10,\n\"properties\": {\n\"type\": \"pod\"\n}\n},\n{\n\"name\": \"service_count\",\n\"value\": 5\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 133.5,\n\"properties\": {\n\"direction\": \"in\"\n}\n},\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 2,\n\"properties\": {\n\"direction\": \"out\"\n}\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo-client\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo-client\",\n\"layer\": \"MESH\",\n\"properties\": {\n\"mesh_id\": \"demo-dev\"\n}\n},\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 100,\n\"properties\": {\n\"direction\": \"out\"\n}\n}\n]\n}\n],\n\"edges\": [\n{\n\"id\":\n\"test-cluster/test-ns/services/echo-client---test-cluster/test-ns/services/echo\"\n\"source\": \"test-cluster/test-ns/services/echo-client\",\n\"target\": \"test-cluster/test-ns/services/echo\",\n\"status\": [\n{\n\"name\": \"requestsPerMinute\",\n\"value\": 100\n}\n],\n\"properties\": {\n\"protocol\": \"HTTP\"\n}\n}\n],\n\"type\": \"SERVICE_SCOPE\"\n}", - "title": "样例 1,根据 Kubernetes 的资源结构,画出拓扑图(可能不存在节点连线)\n{\n\"nodes\": [\n{\n\"id\": \"test-cluster/test-ns\",\n\"type\": \"NAMESPACE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"name\": \"test-ns\",\n\"layer\": \"KUBERNETES\"\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 10,\n\"properties\": {\n\"type\": \"pod\"\n}\n},\n{\n\"name\": \"service_count\",\n\"value\": 5\n}\n]\n},\n{\n\"id\": \"test-cluster/test-ns/services/echo\",\n\"parent\": \"test-cluster/test-ns\",\n\"type\": \"SERVICE\",\n\"metadata\": {\n\"cluster\": \"test-cluster\",\n\"namespace\": \"test-ns\",\n\"name\": \"echo\",\n\"layer\": \"KUBERNETES\"\n},\n\"status\": [\n{\n\"name\": \"replicas\",\n\"value\": 3,\n\"properties\": {\n\"type\": \"pod\"\n}\n}\n]\n}\n],\n\"type\": \"SERVICE_SCOPE\"\n}" - }, - "v1alpha1GraphType": { - "type": "string", - "enum": [ - "GRAPH_UNSPECIFIED", - "CLUSTER_SCOPE", - "NAMESPACE_SCOPE", - "SERVICE_SCOPE", - "WORKLOAD_SCOPE", - "INSTANCE_SCOPE", - "MIXED" - ], - "default": "GRAPH_UNSPECIFIED", - "description": "- CLUSTER_SCOPE: 用于展现集群之间的拓扑关系\n - NAMESPACE_SCOPE: 用于展示命名空间之间的拓扑关系", - "title": "图的展示类型\n与节点类型 NodeType 不同的是,如果 GraphType 为 WORKLOAD,\n但是也可以在接口中返回 Namespace 的 Node 可能用于用户手动展开等场景。" - }, - "v1alpha1GroupSummary": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "builtin": { - "type": "boolean" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "targets": { - "type": "array", - "items": { - "type": "string" - } - }, - "groupRuleStatus": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1groupRuleStatus" - } - }, - "description": { - "type": "string" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1HTTPConfig": { - "type": "object", - "properties": { - "basicAuth": { - "$ref": "#/definitions/v1alpha1BasicAuth" - }, - "bearerToken": { - "type": "string" - }, - "tlsConfig": { - "$ref": "#/definitions/v1alpha1SafeTLSConfig" - }, - "headers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1HTTPHeader" - } - } - } - }, - "v1alpha1HTTPHeader": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "description": "See k8s.io.api.core.v1.HTTPHeader." - }, - "v1alpha1Inhibition": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "description": { - "type": "string" - }, - "sourceMatchers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - } - }, - "targetMatchers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - } - }, - "equal": { - "type": "array", - "items": { - "type": "string" - } - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1InhibitionList": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Inhibition" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1InsightAgentStatus": { - "type": "string", - "enum": [ - "NOT_INSTALLED", - "HEALTHY", - "UNHEALTHY", - "OFFLINE" - ], - "default": "NOT_INSTALLED" - }, - "v1alpha1JVMType": { - "type": "string", - "enum": [ - "JMX", - "OTEL", - "NONE" - ], - "default": "JMX", - "description": " - JMX: metrics exposed by JMX exporter\n - OTEL: metrics exposed by OTEL Java Agent\n - NONE: empty metrics, no jvm collected." - }, - "v1alpha1JVMUrls": { - "type": "object", - "properties": { - "en": { - "type": "string", - "title": "English grafana dashboard url" - }, - "zh": { - "type": "string", - "title": "Chinese grafana dashboard url" - } - } - }, - "v1alpha1Job": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha1JobStatus" - }, - "createTimestamp": { - "type": "string", - "format": "int64" - }, - "jobPodNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "conditions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/apiresourcev1alpha1Condition" - }, - "description": "conditions of current job." - } - } - }, - "v1alpha1JobState": { - "type": "string", - "enum": [ - "JOB_STATE_UNSPECIFIED", - "JOB_STATE_WAITING", - "JOB_STATE_RUNNING", - "JOB_STATE_COMPLETED", - "JOB_STATE_DELETING", - "JOB_STATE_FAILED" - ], - "default": "JOB_STATE_UNSPECIFIED", - "description": " - JOB_STATE_UNSPECIFIED: Job is unspecified.\n - JOB_STATE_WAITING: Waiting for job ready.\n - JOB_STATE_RUNNING: Job is working.\n - JOB_STATE_COMPLETED: Jobs has completed.\n - JOB_STATE_DELETING: Jobs is being deleted.\n - JOB_STATE_FAILED: Jobs is not ready to work ." - }, - "v1alpha1JobStatus": { - "type": "object", - "properties": { - "active": { - "type": "integer", - "format": "int32" - }, - "succeed": { - "type": "integer", - "format": "int32" - }, - "failed": { - "type": "integer", - "format": "int32" - }, - "phase": { - "$ref": "#/definitions/v1alpha1JobState" - } - } - }, - "v1alpha1JobSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha1JobStatus" - }, - "jobPodNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - } - } - }, - "v1alpha1KeyValue": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "vType": { - "$ref": "#/definitions/v1alpha1ValueType" - }, - "vStr": { - "type": "string" - }, - "vBool": { - "type": "boolean" - }, - "vInt64": { - "type": "string", - "format": "int64" - }, - "vFloat64": { - "type": "number", - "format": "double" - }, - "vBinary": { - "type": "string", - "format": "byte" - } - } - }, - "v1alpha1Layer": { - "type": "string", - "enum": [ - "LAYER_UNSPECIFIED", - "KUBERNETES", - "MESH", - "OS_LINUX", - "VM", - "INFRA", - "GENERAL" - ], - "default": "LAYER_UNSPECIFIED", - "description": "- KUBERNETES: 直接部署在 Kubernetes 上\n - MESH: 服务网格层级\n - OS_LINUX: 云主机或操作系统层级\n - INFRA: 基础设施层级,\n - GENERAL: 通用层级,可能是传统应用上报的数据", - "title": "像 Skywalking 一样,表示当前所处的层级\n用于展示不同的视图模型,甚至可以展示不同层级之间的关系。" - }, - "v1alpha1ListAlertsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1AlertSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListClusterSummaryResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1ClusterSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListClustersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Cluster" - } - } - } - }, - "v1alpha1ListContainersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1ContainerSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListCronJobsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1CronJobSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListGroupsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1GroupSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListJobsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1JobSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListLogFilePathsResponse": { - "type": "object", - "properties": { - "paths": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1ListNamespacesResponse": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Namespace" - } - } - } - }, - "v1alpha1ListNodesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1NodeSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListPodsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1PodSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListProbesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Probe" - }, - "title": "items represents the response of CustomResource" - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListProbesResponse represents list all of the Probe of namespaced scope in cluster" - }, - "v1alpha1ListProvidersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Provider" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListReceiverResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Receiver" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - }, - "title": "list receiver" - }, - "v1alpha1ListRuleTemplateSummaryResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1RuleTemplateSummary" - } - } - } - }, - "v1alpha1ListRuleTemplatesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1RuleTemplate" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListRulesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1RuleSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListServicesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1serviceSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListSilencesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Silence" - } - } - } - }, - "v1alpha1ListTemplatesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1TemplateSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1ListWorkloadsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1workloadSummary" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1LogContextEventFilter": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - } - } - }, - "v1alpha1LogContextResourceFilter": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "pod": { - "type": "string" - }, - "container": { - "type": "string" - }, - "namespace": { - "type": "string" - } - } - }, - "v1alpha1LogContextSystemFilter": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "node": { - "type": "string" - }, - "file": { - "type": "string" - } - } - }, - "v1alpha1LogField": { - "type": "string", - "enum": [ - "LOG_FIELD_UNSPECIFIED", - "Timestamp", - "Cluster", - "Namespace", - "Pod", - "Container", - "Node", - "File" - ], - "default": "LOG_FIELD_UNSPECIFIED", - "title": "- Namespace: container log only\n - Node: system log only" - }, - "v1alpha1LogHistogramResult": { - "type": "object", - "properties": { - "timestamp": { - "type": "string" - }, - "count": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1LogQueryEventFilter": { - "type": "object", - "properties": { - "logSearch": { - "type": "array", - "items": { - "type": "string" - } - }, - "clusterFilter": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1LogQueryResourceFilter": { - "type": "object", - "properties": { - "logSearch": { - "type": "array", - "items": { - "type": "string" - } - }, - "clusterFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "namespaceFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "workloadSearch": { - "type": "array", - "items": { - "type": "string" - } - }, - "workloadFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "podSearch": { - "type": "array", - "items": { - "type": "string" - } - }, - "podFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "containerSearch": { - "type": "array", - "items": { - "type": "string" - } - }, - "containerFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "traceIdSearch": { - "type": "string" - }, - "luceneFilter": { - "type": "string", - "title": "lucene_filter is a string that contains the lucene query string\nthe syntax is define in https://www.elastic.co/guide/en/elasticsearch/reference/7.16/query-dsl-query-string-query.html#query-string-syntax\nsupport key list:\n- `kubernetes.namespace_name.keyword`\n- `kubernetes.pod_name.keyword`\n- `trace_id.keyword`\n- `kubernetes.container_name.keyword`\n- `log`" - } - } - }, - "v1alpha1LogQueryResult": { - "type": "object", - "properties": { - "log": { - "type": "string" - }, - "timestamp": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1LogQuerySystemFilter": { - "type": "object", - "properties": { - "logSearch": { - "type": "array", - "items": { - "type": "string" - } - }, - "clusterFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "nodeFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "fileFilter": { - "type": "array", - "items": { - "type": "string" - } - }, - "luceneFilter": { - "type": "string", - "title": "lucene_filter is a string that contains the lucene query string\nthe syntax is define in https://www.elastic.co/guide/en/elasticsearch/reference/7.16/query-dsl-query-string-query.html#query-string-syntax\nsupport key list:\n- `syslog.host.keyword`\n- `syslog.file.keyword`\n- `syslog.ident.keyword`\n- `log`" - } - } - }, - "v1alpha1MatchLabel": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "extraLabel": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1MetricsEntity": { - "type": "object", - "properties": { - "metrics": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1samplePair" - } - }, - "metricsAvg": { - "type": "number", - "format": "double" - } - } - }, - "v1alpha1MetricsWithOperation": { - "type": "object", - "properties": { - "operationName": { - "type": "string" - }, - "metricsMap": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1MetricsEntity" - }, - "title": "available keys:\n- reqRate\n- errRate\n- p50Latency\n- p95Latency\n- p99Latency" - }, - "spanKind": { - "$ref": "#/definitions/v1alpha1SpanKind" - } - } - }, - "v1alpha1Namespace": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "role": { - "$ref": "#/definitions/v1alpha1Role" - } - } - }, - "v1alpha1NamespaceDetail": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1NamespacePhase" - }, - "creationTimestamp": { - "type": "string", - "format": "int64" - }, - "deploymentNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "statefulsetNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "daemonsetNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "podNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - } - } - }, - "v1alpha1NamespacePhase": { - "type": "string", - "enum": [ - "NAMESPACE_PHASE_UNSPECIFIED", - "Active", - "Terminating" - ], - "default": "NAMESPACE_PHASE_UNSPECIFIED", - "title": "- NAMESPACE_PHASE_UNSPECIFIED: The namespace state is unspecified.\n - Active: NamespaceActive means the namespace is available for use in the system\n - Terminating: NamespaceTerminating means the namespace is undergoing graceful termination" - }, - "v1alpha1NodeCondition": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type of node condition. The built-in set of conditions are: Ready,\nMemoryPressure, DiskPressure, PIDPressure,\nNetworkUnavailable, and SchedulingDisabled." - }, - "status": { - "$ref": "#/definitions/v1alpha1ConditionStatus", - "description": "Status of the condition, one of True, False, Unknown." - }, - "reason": { - "type": "string", - "description": "(brief) reason for the condition's last transition." - }, - "message": { - "type": "string", - "description": "Human readable message indicating details about last transition." - } - }, - "description": "NodeCondition contains condition information for a node." - }, - "v1alpha1NodeMetadata": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "service": { - "type": "string", - "title": "预定义的所属服务信息,可以为空。" - }, - "name": { - "type": "string", - "title": "当前节点需要显示的名字。" - }, - "layer": { - "$ref": "#/definitions/v1alpha1Layer", - "title": "所述层级" - }, - "properties": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "存储额外的信息,比如版本信息之类的。" - }, - "clusterName": { - "type": "string" - } - } - }, - "v1alpha1NodeMetricResponse": { - "type": "object", - "properties": { - "reqRateMetric": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "吞吐率趋势图,时间范围内的" - }, - "errorsRateMetrics": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "错误率延趋势图,时间范围内的" - }, - "repLatencyMetric": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "平均请求时延趋势图,时间范围内的" - } - } - }, - "v1alpha1NodePhase": { - "type": "string", - "enum": [ - "NODE_PHASE_UNSPECIFIED", - "NODE_PHASE_READY", - "NODE_PHASE_NOT_READY", - "NODE_PHASE_UNKNOWN" - ], - "default": "NODE_PHASE_UNSPECIFIED", - "description": "status includes Ready, NotReady, and Unknown.\n\n - NODE_PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - NODE_PHASE_READY: The node is ready to work.\n - NODE_PHASE_NOT_READY: The node is not ready.\n - NODE_PHASE_UNKNOWN: The node state is unknown." - }, - "v1alpha1NodeStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1NodePhase" - }, - "conditions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1NodeCondition" - } - } - } - }, - "v1alpha1NodeSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1NodePhase" - }, - "podNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "gpuVendors": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "title": "NodeSummary only return node name,status and podSummary" - }, - "v1alpha1NodeType": { - "type": "string", - "enum": [ - "NODE_TYPE_UNSPECIFIED", - "CLUSTER", - "NAMESPACE", - "SERVICE", - "WORKLOAD", - "INSTANCE", - "NODE", - "CUSTOM" - ], - "default": "NODE_TYPE_UNSPECIFIED", - "title": "- WORKLOAD: 比如需要展示 Deployment 之类的 Workload\n - INSTANCE: 实例,比如 Pod 的时候可以展示\n - NODE: 节点,如果需要的话\n - CUSTOM: 自定义类型,如果需要的话,推荐通过 metadata.properties.type\n进行详细说明。" - }, - "v1alpha1ObjectMeta": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name must be unique within a namespace. Is required when creating\nresources, although some resources may allow a client to request the\ngeneration of an appropriate name automatically. Name is primarily intended\nfor creation idempotence and configuration definition. Cannot be updated.\nMore info: http://kubernetes.io/docs/identifiers#names\n+optional" - }, - "namespace": { - "type": "string", - "description": "Namespace defines the space within each name must be unique. An empty\nnamespace is equivalent to the \"default\" namespace, but \"default\" is the\ncanonical representation. Not all objects are required to be scoped to a\nnamespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: http://kubernetes.io/docs/namespaces\n+optional" - }, - "uid": { - "type": "string", - "description": "UID is the unique in time and space value for this object. It is typically\ngenerated by the server on successful creation of a resource and is not\nallowed to change on PUT operations.\n\nPopulated by the system.\nRead-only.\nMore info: http://kubernetes.io/docs/identifiers#uids\n+optional" - }, - "resourceVersion": { - "type": "string", - "description": "An opaque value that represents the internal version of this object that\ncan be used by clients to determine when objects have changed. May be used\nfor optimistic concurrency, change detection, and the watch operation on a\nresource or set of resources. Clients must treat these values as opaque and\npassed unmodified back to the server. They may only be valid for a\nparticular resource or set of resources.\n\nPopulated by the system.\nRead-only.\nValue must be treated as opaque by clients and .\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency" - }, - "creationTimestamp": { - "type": "string", - "description": "CreationTimestamp is a timestamp representing the server time when this\nobject was created. It is not guaranteed to be set in happens-before order\nacross separate operations. Clients may not set this value. It is\nrepresented in RFC3339 form and is in UTC.\n\nPopulated by the system.\nRead-only.\nNull for lists.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional" - }, - "deletionTimestamp": { - "type": "string", - "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be\ndeleted. This field is set by the server when a graceful deletion is\nrequested by the user, and is not directly settable by a client. The\nresource is expected to be deleted (no longer visible from resource lists,\nand not reachable by name) after the time in this field, once the\nfinalizers list is empty. As long as the finalizers list contains items,\ndeletion is blocked. Once the deletionTimestamp is set, this value may not\nbe unset or be set further into the future, although it may be shortened or\nthe resource may be deleted prior to this time. For example, a user may\nrequest that a pod is deleted in 30 seconds. The kubelet will react by\nsending a graceful termination signal to the containers in the pod. After\nthat 30 seconds, the kubelet will send a hard termination signal (SIGKILL)\nto the container and after cleanup, remove the pod from the API. In the\npresence of network partitions, this object may still exist after this\ntimestamp, until an administrator or automated process can determine the\nresource is fully terminated.\nIf not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested.\nRead-only.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: http://kubernetes.io/docs/labels\n+optional" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Annotations is an unstructured key value map stored with a resource that\nmay be set by external tools to store and retrieve arbitrary metadata. They\nare not queryable and should be preserved when modifying objects. More\ninfo: http://kubernetes.io/docs/annotations +optional" - }, - "ownerReferences": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1OwnerReference" - }, - "title": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is\nmanaged by a controller, then an entry in this list will point to this\ncontroller, with the controller field set to true. There cannot be more\nthan one managing controller. +optional +patchMergeKey=uid\n+patchStrategy=merge" - } - }, - "description": "ObjectMeta is metadata that all persisted resources must have, which includes\nall objects users must create." - }, - "v1alpha1OperatorClause": { - "type": "object", - "properties": { - "dataType": { - "$ref": "#/definitions/v1alpha1FilterDataType", - "title": "data_type define the data type that can be used in filter" - }, - "field": { - "$ref": "#/definitions/v1alpha1FilterField", - "title": "field define the field that can be used in filter" - }, - "operation": { - "$ref": "#/definitions/v1alpha1FilterOperator", - "title": "operation define the operation that can be used in filter" - }, - "stringValue": { - "type": "string" - }, - "floatValue": { - "type": "number", - "format": "float" - } - }, - "title": "OperatorClause definition" - }, - "v1alpha1OwnerReference": { - "type": "object", - "properties": { - "uid": { - "type": "string", - "title": "UID of the referent.\nMore info: http://kubernetes.io/docs/identifiers#uids" - }, - "controller": { - "type": "boolean", - "title": "If true, this reference points to the managing controller.\n+optional" - }, - "name": { - "type": "string", - "description": "Name of the referent." - }, - "kind": { - "type": "string", - "description": "Kind of the referent." - } - }, - "description": "OwnerReference contains enough information to let you identify an owning\nobject. An owning object must be in the same namespace as the dependent, or\nbe cluster-scoped, so there is no namespace field." - }, - "v1alpha1Pagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32", - "description": "Total is the total number of referents." - }, - "page": { - "type": "integer", - "format": "int32", - "description": "Page is current page." - }, - "pageSize": { - "type": "integer", - "format": "int32", - "description": "PageSize is the data number shown per page." - }, - "pages": { - "type": "integer", - "format": "int32", - "description": "Pages is the number of pages." - } - } - }, - "v1alpha1Pod": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1PodPhase" - }, - "createTimestamp": { - "type": "string", - "format": "int64" - }, - "containerNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "podIp": { - "type": "string" - }, - "hostIp": { - "type": "string" - }, - "conditions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/apiresourcev1alpha1Condition" - }, - "description": "conditions of current pod." - } - } - }, - "v1alpha1PodJVMInfo": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1JVMType", - "title": "type means pod exposed by JMX/OTEL/NONE" - }, - "urls": { - "$ref": "#/definitions/v1alpha1JVMUrls", - "title": "jvm grafana dashboard urls" - } - } - }, - "v1alpha1PodPhase": { - "type": "string", - "enum": [ - "POD_PHASE_UNSPECIFIED", - "POD_PHASE_UNKNOWN", - "POD_PHASE_PENDING", - "POD_PHASE_RUNNING", - "POD_PHASE_SUCCEED", - "POD_PHASE_FAILED" - ], - "default": "POD_PHASE_UNSPECIFIED", - "description": " - POD_PHASE_UNKNOWN: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - POD_PHASE_PENDING: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - POD_PHASE_RUNNING: PodRunning means the pod has been bound to a node and all of the containers\nhave been started. At least one container is still running or is in the\nprocess of being restarted. PodSucceeded means that all containers in the\npod have voluntarily terminated with a container exit code of 0, and the\nsystem is not going to restart any of these containers.\n - POD_PHASE_SUCCEED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - POD_PHASE_FAILED: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." - }, - "v1alpha1PodSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1PodPhase" - }, - "containerNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "podIp": { - "type": "string" - } - } - }, - "v1alpha1PreviewRuleRequest": { - "type": "object", - "properties": { - "params": { - "$ref": "#/definitions/PreviewRuleRequestParams" - }, - "group": { - "$ref": "#/definitions/v1alpha1PreviewRuleRequestGroup" - }, - "rule": { - "$ref": "#/definitions/v1alpha1CreateGroupRule" - } - } - }, - "v1alpha1PreviewRuleRequestGroup": { - "type": "object", - "properties": { - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "targets": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "title": "Describes rule's owner group info" - }, - "v1alpha1PreviewRuleResponse": { - "type": "object", - "properties": { - "matrix": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - } - } - } - }, - "v1alpha1PreviewSilenceRequest": { - "type": "object", - "properties": { - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "matches": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - } - }, - "size": { - "type": "string", - "format": "int64", - "title": "size limits the preview result,\nif not set, will use default 200" - } - } - }, - "v1alpha1PreviewSilenceResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1AlertSummary" - } - } - } - }, - "v1alpha1Probe": { - "type": "object", - "properties": { - "kind": { - "type": "string", - "description": "Kind represents the kind of CustomResource." - }, - "apiVersion": { - "type": "string", - "description": "APIVersion represents the apiVersion of CustomResource." - }, - "metadata": { - "$ref": "#/definitions/v1alpha1ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/v1alpha1ProbeSpec" - }, - "status": { - "$ref": "#/definitions/apiprobesv1alpha1Status" - } - } - }, - "v1alpha1ProbeSpec": { - "type": "object", - "properties": { - "jobName": { - "type": "string" - }, - "module": { - "type": "string" - }, - "prober": { - "$ref": "#/definitions/v1alpha1ProberSpec" - }, - "targets": { - "$ref": "#/definitions/v1alpha1Targets" - }, - "interval": { - "type": "string" - }, - "scrapeTimeout": { - "type": "string" - }, - "relabelings": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1RelabelConfig" - } - }, - "proxyUrl": { - "type": "string" - }, - "enableHttp2": { - "type": "boolean" - }, - "filterRunning": { - "type": "boolean" - }, - "honorTimestamps": { - "type": "boolean" - }, - "honorLabels": { - "type": "boolean" - }, - "metricRelabelings": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1RelabelConfig" - } - }, - "followRedirects": { - "type": "boolean" - }, - "sampleLimit": { - "type": "string", - "format": "uint64", - "title": "TODO: add more: https://github.com/prometheus-operator/prometheus-operator/blob/52d1e55af2d223474aab35bf54bd56c2b9b22385/pkg/apis/monitoring/v1/probe_types.go#L48\ntlsConfig\nbearerTokenSecret\nauthorization\noauth2\nbasicAuth" - } - }, - "title": "Probe represents all fileds of probe rule" - }, - "v1alpha1ProberSpec": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "scheme": { - "type": "string" - }, - "path": { - "type": "string" - }, - "proxyUrl": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "v1alpha1Process": { - "type": "object", - "properties": { - "serviceName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1KeyValue" - } - } - } - }, - "v1alpha1PrometheusQueryRangeResult": { - "type": "object", - "properties": { - "matrix": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SampleStream" - } - } - } - }, - "v1alpha1PrometheusQueryResult": { - "type": "object", - "properties": { - "vector": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Sample" - } - } - } - }, - "v1alpha1Provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/v1alpha1ProviderType" - }, - "aliyun": { - "$ref": "#/definitions/ProviderAliyunConfig" - }, - "tencent": { - "$ref": "#/definitions/ProviderTencentConfig" - }, - "custom": { - "$ref": "#/definitions/ProviderCustomConfig" - }, - "template": { - "type": "string" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1ProviderDataResponse": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1Provider" - } - } - }, - "v1alpha1ProviderType": { - "type": "string", - "enum": [ - "PROVIDER_TYPE_UNSPECIFIED", - "aliyun", - "tencent", - "custom" - ], - "default": "PROVIDER_TYPE_UNSPECIFIED" - }, - "v1alpha1QueryEventCountResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string", - "format": "int64" - } - } - } - }, - "v1alpha1QueryEventFilterOptionsResponse": { - "type": "object", - "properties": { - "reasons": { - "type": "array", - "items": { - "type": "string" - } - }, - "involvedObjectKinds": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1QueryEventHistogramResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1EventHistogram" - } - }, - "totalNormal": { - "type": "string", - "format": "int64" - }, - "totalWarning": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1QueryEventResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Event" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1QueryLogContextRequest": { - "type": "object", - "properties": { - "startTime": { - "type": "string" - }, - "endTime": { - "type": "string" - }, - "before": { - "type": "integer", - "format": "int32" - }, - "after": { - "type": "integer", - "format": "int32" - }, - "nanotimestamp": { - "type": "string" - }, - "resource": { - "$ref": "#/definitions/v1alpha1LogContextResourceFilter" - }, - "system": { - "$ref": "#/definitions/v1alpha1LogContextSystemFilter" - }, - "event": { - "$ref": "#/definitions/v1alpha1LogContextEventFilter" - } - } - }, - "v1alpha1QueryLogHistogramRequest": { - "type": "object", - "properties": { - "startTime": { - "type": "string" - }, - "endTime": { - "type": "string" - }, - "interval": { - "type": "string" - }, - "resource": { - "$ref": "#/definitions/v1alpha1LogQueryResourceFilter" - }, - "system": { - "$ref": "#/definitions/v1alpha1LogQuerySystemFilter" - }, - "event": { - "$ref": "#/definitions/v1alpha1LogQueryEventFilter" - } - } - }, - "v1alpha1QueryLogHistogramResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1LogHistogramResult" - } - } - } - }, - "v1alpha1QueryLogRequest": { - "type": "object", - "properties": { - "startTime": { - "type": "string", - "title": "startTime e.g. 2006-01-02T15:04:05.999999999Z07:00" - }, - "endTime": { - "type": "string", - "title": "startTime e.g. 2006-01-02T15:04:05.999999999Z07:00" - }, - "page": { - "type": "integer", - "format": "int32", - "description": "Page is current page." - }, - "pageSize": { - "type": "integer", - "format": "int32", - "description": "Size is the data number shown per page." - }, - "sorts": { - "type": "array", - "items": { - "type": "string" - } - }, - "resource": { - "$ref": "#/definitions/v1alpha1LogQueryResourceFilter" - }, - "system": { - "$ref": "#/definitions/v1alpha1LogQuerySystemFilter" - }, - "event": { - "$ref": "#/definitions/v1alpha1LogQueryEventFilter" - } - } - }, - "v1alpha1QueryLogResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1LogQueryResult" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1Pagination" - } - } - }, - "v1alpha1QueryOperationsResponse": { - "type": "object", - "properties": { - "operations": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1Receiver": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/v1alpha1ReceiverType" - }, - "webhook": { - "$ref": "#/definitions/v1alpha1WebhookConfig" - }, - "email": { - "$ref": "#/definitions/v1alpha1EmailConfig" - }, - "wecom": { - "$ref": "#/definitions/v1alpha1WecomConfig" - }, - "dingtalk": { - "$ref": "#/definitions/v1alpha1DingtalkConfig" - }, - "sms": { - "$ref": "#/definitions/v1alpha1SmsConfig" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1ReceiverDataResponse": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1Receiver" - } - } - }, - "v1alpha1ReceiverType": { - "type": "string", - "enum": [ - "RECEIVER_TYPE_UNSPECIFIED", - "webhook", - "email", - "dingtalk", - "wecom", - "sms" - ], - "default": "RECEIVER_TYPE_UNSPECIFIED" - }, - "v1alpha1RelabelConfig": { - "type": "object", - "properties": { - "sourceLabels": { - "type": "array", - "items": { - "type": "string" - } - }, - "separator": { - "type": "string" - }, - "targetLabel": { - "type": "string" - }, - "regex": { - "type": "string" - }, - "modulus": { - "type": "string", - "format": "uint64" - }, - "replacement": { - "type": "string" - }, - "action": { - "type": "string" - } - } - }, - "v1alpha1ResourceNumSummary": { - "type": "object", - "properties": { - "totalNum": { - "type": "integer", - "format": "int32" - }, - "readyNum": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1Role": { - "type": "string", - "enum": [ - "ROLE_UNSPECIFIED", - "ROLE_VIEWER", - "ROLE_ADMIN" - ], - "default": "ROLE_UNSPECIFIED" - }, - "v1alpha1Rule": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "groupId": { - "type": "string" - }, - "groupName": { - "type": "string" - }, - "expr": { - "type": "string" - }, - "thresholdSymbol": { - "type": "string", - "title": "when create rule from metric_tpl,use thresholdSymbol and thresholdNum to\ncomplete the promql" - }, - "thresholdNum": { - "type": "number", - "format": "float" - }, - "duration": { - "type": "string", - "title": "For evaluation interval in time.Duration format,like 30s, 1m, 1h" - }, - "severity": { - "$ref": "#/definitions/v1alpha1Severity" - }, - "source": { - "$ref": "#/definitions/v1alpha1RuleSource" - }, - "status": { - "$ref": "#/definitions/v1alpha1RuleStatus" - }, - "promQL": { - "type": "string", - "title": "real sql that used to query, add info like cluster, namespaces" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "customized labels" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "customized annotations" - }, - "description": { - "type": "string" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - }, - "logFilterCondition": { - "$ref": "#/definitions/v1alpha1RuleFilterCondition", - "description": "logs alert part\nonly need when rule source is LOG_TPL." - }, - "logQueryString": { - "type": "string" - } - } - }, - "v1alpha1RuleFilterCondition": { - "type": "string", - "enum": [ - "FILTER_CONDITION_UNSPECIFIED", - "AND", - "OR", - "REG", - "FUZZINESS", - "WILD_CARD" - ], - "default": "FILTER_CONDITION_UNSPECIFIED", - "description": "- AND: union\n - OR: Intersection\n - REG: Regular expressions\n - FUZZINESS: Fuzziness\n - WILD_CARD: Wildcards", - "title": "condition for logs filter string" - }, - "v1alpha1RuleSource": { - "type": "string", - "enum": [ - "RULE_SOURCE_UNSPECIFIED", - "METRIC_TPL", - "PROMQL", - "LOG_TPL", - "EVENT_TPL" - ], - "default": "RULE_SOURCE_UNSPECIFIED" - }, - "v1alpha1RuleStatus": { - "type": "string", - "enum": [ - "UNSPECIFIED", - "FIRING", - "ENABLED" - ], - "default": "UNSPECIFIED" - }, - "v1alpha1RuleSummary": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "groupId": { - "type": "string" - }, - "groupName": { - "type": "string" - }, - "severity": { - "$ref": "#/definitions/v1alpha1Severity" - }, - "source": { - "$ref": "#/definitions/v1alpha1RuleSource" - }, - "expr": { - "type": "string" - }, - "thresholdSymbol": { - "type": "string" - }, - "thresholdNum": { - "type": "number", - "format": "float" - }, - "status": { - "$ref": "#/definitions/v1alpha1RuleStatus" - }, - "description": { - "type": "string" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "logFilterCondition": { - "$ref": "#/definitions/v1alpha1RuleFilterCondition", - "description": "logs alert part\nonly need when rule source is LOG_TPL." - }, - "logQueryString": { - "type": "string" - }, - "duration": { - "type": "string" - } - } - }, - "v1alpha1RuleTemplate": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - }, - "count": { - "type": "integer", - "format": "int32" - }, - "rules": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1CreateGroupRule" - } - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1RuleTemplateSummary": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "targetType": { - "$ref": "#/definitions/v1alpha1TargetType" - } - } - }, - "v1alpha1SafeTLSConfig": { - "type": "object", - "properties": { - "insecureSkipVerify": { - "type": "boolean" - } - } - }, - "v1alpha1Sample": { - "type": "object", - "properties": { - "metric": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "values": { - "$ref": "#/definitions/v1alpha1samplePair" - } - } - }, - "v1alpha1SampleStream": { - "type": "object", - "properties": { - "metric": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "values": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1samplePair" - } - } - } - }, - "v1alpha1SearchLogResponse": { - "type": "object", - "properties": { - "response": { - "type": "string" - } - } - }, - "v1alpha1ServerComponentSummary": { - "type": "object", - "properties": { - "summary": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1serverComponent" - } - } - } - }, - "v1alpha1Service": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "createTimestamp": { - "type": "string", - "format": "int64" - }, - "serviceType": { - "$ref": "#/definitions/v1alpha1ServiceType" - }, - "clusterIp": { - "type": "string" - }, - "workloadData": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1WorkloadSum" - } - } - } - }, - "v1alpha1ServiceItem": { - "type": "object", - "properties": { - "serviceName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "reqRate": { - "type": "number", - "format": "double" - }, - "repLatency": { - "type": "number", - "format": "double" - }, - "errorRate": { - "type": "number", - "format": "double" - } - } - }, - "v1alpha1ServiceType": { - "type": "string", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "CLUSTER_IP", - "NODE_PORT", - "LOAD_BALANCER", - "EXTERNAL_NAME" - ], - "default": "SERVICE_TYPE_UNSPECIFIED", - "description": "- SERVICE_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - CLUSTER_IP: ClusterIP means a service will only be accessible inside the cluster, via\nthe cluster IP.\n - NODE_PORT: NodePort means a service will be exposed on one port of every node, in\naddition to 'ClusterIP' type.\n - LOAD_BALANCER: LoadBalancer means a service will be exposed via an external load balancer\n(if the cloud provider supports it), in addition to 'NodePort' type.\n - EXTERNAL_NAME: ExternalName means a service consists of only a reference to an external\nname that kubedns or equivalent will return as a CNAME record, with no\nexposing or proxying of any pods involved.", - "title": "ServiceType string describes ingress methods for a service" - }, - "v1alpha1Severity": { - "type": "string", - "enum": [ - "SEVERITY_UNSPECIFIED", - "CRITICAL", - "WARNING", - "INFO" - ], - "default": "SEVERITY_UNSPECIFIED" - }, - "v1alpha1Silence": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "description": { - "type": "string" - }, - "matches": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1match" - } - }, - "activeTimeInterval": { - "$ref": "#/definitions/v1alpha1timeInterval" - }, - "expired": { - "type": "boolean" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1SmsConfig": { - "type": "object", - "properties": { - "contact": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1SmsConfigContact" - } - }, - "provider": { - "type": "string", - "title": "provider" - } - } - }, - "v1alpha1SmsConfigContact": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "phone": { - "type": "string" - } - } - }, - "v1alpha1SpanKind": { - "type": "string", - "enum": [ - "SPAN_KIND_UNSPECIFIED", - "SPAN_KIND_INTERNAL", - "SPAN_KIND_SERVER", - "SPAN_KIND_CLIENT", - "SPAN_KIND_PRODUCER", - "SPAN_KIND_CONSUMER" - ], - "default": "SPAN_KIND_UNSPECIFIED", - "description": "SpanKind is the type of span. Can be used to specify additional relationships between spans\nin addition to a parent/child relationship.\n\n - SPAN_KIND_UNSPECIFIED: Unspecified. Do NOT use as default.\nImplementations MAY assume SpanKind to be INTERNAL when receiving UNSPECIFIED.\n - SPAN_KIND_INTERNAL: Indicates that the span represents an internal operation within an application,\nas opposed to an operation happening at the boundaries. Default value.\n - SPAN_KIND_SERVER: Indicates that the span covers server-side handling of an RPC or other\nremote network request.\n - SPAN_KIND_CLIENT: Indicates that the span describes a request to some remote service.\n - SPAN_KIND_PRODUCER: Indicates that the span describes a producer sending a message to a broker.\nUnlike CLIENT and SERVER, there is often no direct critical path latency relationship\nbetween producer and consumer spans. A PRODUCER span ends when the message was accepted\nby the broker while the logical processing of the message might span a much longer time.\n - SPAN_KIND_CONSUMER: Indicates that the span describes consumer receiving a message from a broker.\nLike the PRODUCER kind, there is often no direct critical path latency relationship\nbetween producer and consumer spans." - }, - "v1alpha1TargetType": { - "type": "string", - "enum": [ - "TARGET_TYPE_UNSPECIFIED", - "GLOBAL", - "CLUSTER", - "NAMESPACE", - "NODE", - "DEPLOYMENT", - "STATEFULSET", - "DAEMONSET", - "POD" - ], - "default": "TARGET_TYPE_UNSPECIFIED" - }, - "v1alpha1Targets": { - "type": "object", - "properties": { - "staticConfig": { - "$ref": "#/definitions/TargetsStaticConfig" - } - } - }, - "v1alpha1Template": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "body": { - "$ref": "#/definitions/v1alpha1TemplateBody" - }, - "builtin": { - "type": "boolean" - }, - "createAt": { - "type": "string", - "format": "int64" - }, - "updateAt": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1TemplateBody": { - "type": "object", - "properties": { - "email": { - "$ref": "#/definitions/v1alpha1emailBody" - }, - "wecom": { - "type": "string" - }, - "dingtalk": { - "type": "string" - }, - "webhook": { - "type": "string" - } - } - }, - "v1alpha1TemplateSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "updateAt": { - "type": "string", - "format": "int64" - }, - "builtin": { - "type": "boolean" - } - } - }, - "v1alpha1Trace": { - "type": "object", - "properties": { - "operationName": { - "type": "string" - }, - "processMap": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/TraceProcessMapping" - } - }, - "warnings": { - "type": "array", - "items": { - "type": "string" - } - }, - "traceId": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/TraceTraceStatus" - }, - "spanCount": { - "type": "integer", - "format": "int64" - }, - "startTime": { - "type": "string" - }, - "duration": { - "type": "string" - } - } - }, - "v1alpha1TracesResponseChunk": { - "type": "object", - "properties": { - "traces": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Trace" - } - } - } - }, - "v1alpha1ValidateGroupCode": { - "type": "string", - "enum": [ - "ERR_CODE_UNSPECIFIED", - "ERR_YAML_UNMARSHAL", - "ERR_GROUP_NAME", - "ERR_GROUP_RULES", - "ERR_GROUP_NAME_DUPLICATED", - "ERR_RULE", - "ERR_RULE_ALERT", - "ERR_RULE_RECORD", - "ERR_RULE_FOR", - "ERR_RULE_EXPR", - "ERR_RULE_SEVERITY", - "ERR_RULE_ANNOTATIONS", - "ERR_RULE_LABELS", - "ERR_RULE_ALERT_DUPLICATED", - "ERR_RULE_DESCRIPTION" - ], - "default": "ERR_CODE_UNSPECIFIED", - "title": "- ERR_YAML_UNMARSHAL: VMRule YAML format error\n - ERR_GROUP_NAME: Alert Group's name has error\n - ERR_GROUP_RULES: Alert Group's rule list is empty or more than one\n - ERR_GROUP_NAME_DUPLICATED: Alert Group's name was duplicated\n - ERR_RULE: Alert rule has error\n - ERR_RULE_ALERT: Alert rule's alert name has error\n - ERR_RULE_RECORD: Alert rule's alert name has error\n - ERR_RULE_FOR: Alert rule's for time has error\n - ERR_RULE_EXPR: Alert rule's promql expression has error\n - ERR_RULE_SEVERITY: Alert rule's severity has error\n - ERR_RULE_ANNOTATIONS: Alert rule's annotations has error\n - ERR_RULE_LABELS: Alert rule's labels has error\n - ERR_RULE_ALERT_DUPLICATED: Alert rule's alert was duplicated\n - ERR_RULE_DESCRIPTION: Alert rule's description has error" - }, - "v1alpha1ValidateGroupError": { - "type": "object", - "properties": { - "code": { - "$ref": "#/definitions/v1alpha1ValidateGroupCode" - }, - "message": { - "type": "string" - } - } - }, - "v1alpha1ValidateGroupRequest": { - "type": "object", - "properties": { - "yamlString": { - "type": "string" - }, - "clusterName": { - "type": "string" - }, - "namespace": { - "type": "string" - } - } - }, - "v1alpha1ValidateGroupResponse": { - "type": "object", - "properties": { - "valid": { - "type": "boolean" - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1ValidateGroupError" - } - }, - "params": { - "$ref": "#/definitions/v1alpha1CreateGroupRequest" - } - } - }, - "v1alpha1ValueType": { - "type": "string", - "enum": [ - "STRING", - "BOOL", - "INT64", - "FLOAT64", - "BINARY" - ], - "default": "STRING" - }, - "v1alpha1VersionInfo": { - "type": "object", - "properties": { - "gitVersion": { - "type": "string" - }, - "gitCommit": { - "type": "string" - }, - "buildDate": { - "type": "string" - }, - "goVersion": { - "type": "string" - }, - "compiler": { - "type": "string" - }, - "platform": { - "type": "string" - } - } - }, - "v1alpha1WebhookConfig": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "httpConfig": { - "$ref": "#/definitions/v1alpha1HTTPConfig" - } - } - }, - "v1alpha1WecomConfig": { - "type": "object", - "properties": { - "webhook": { - "type": "string" - } - } - }, - "v1alpha1Workload": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1WorkloadPhase" - }, - "createTimestamp": { - "type": "string", - "format": "int64" - }, - "podNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "conditions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/apiresourcev1alpha1Condition" - }, - "description": "conditions of current workload." - } - } - }, - "v1alpha1WorkloadKind": { - "type": "string", - "enum": [ - "WORKLOAD_KIND_UNKNOWN", - "WORKLOAD_KIND_DEPLOYMENT", - "WORKLOAD_KIND_STATEFULSET", - "WORKLOAD_KIND_DAEMONSET" - ], - "default": "WORKLOAD_KIND_UNKNOWN" - }, - "v1alpha1WorkloadPhase": { - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNKNOWN", - "WORKLOAD_STATE_RUNNING", - "WORKLOAD_STATE_DELETING", - "WORKLOAD_STATE_NOT_READY", - "WORKLOAD_STATE_STOPPED", - "WORKLOAD_STATE_WAITING" - ], - "default": "WORKLOAD_STATE_UNKNOWN", - "title": "WorkloadPhase describes the state of\nworkload(deployments/daemonsets/statefulsets)" - }, - "v1alpha1WorkloadSum": { - "type": "object", - "properties": { - "workloadKind": { - "$ref": "#/definitions/WorkloadSumKind" - }, - "name": { - "type": "string" - } - } - }, - "v1alpha1agentModuleStatus": { - "type": "object", - "properties": { - "pods": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v1alpha1Pod" - } - } - } - }, - "v1alpha1countInfo": { - "type": "object", - "properties": { - "target": { - "type": "string", - "description": "target is the object that match the targetType, null means no specific\ntarget or not group_by_type." - }, - "sum": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "int64" - } - } - } - }, - "v1alpha1dashboardURL": { - "type": "object", - "properties": { - "en": { - "type": "string" - }, - "zh": { - "type": "string" - } - } - }, - "v1alpha1emailBody": { - "type": "object", - "properties": { - "subject": { - "type": "string" - }, - "body": { - "type": "string" - } - } - }, - "v1alpha1empty": { - "type": "object" - }, - "v1alpha1groupReceiver": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1ReceiverType" - }, - "names": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1groupRuleStatus": { - "type": "object", - "properties": { - "status": { - "$ref": "#/definitions/v1alpha1RuleStatus" - }, - "count": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1helmInstallConfigRequest": { - "type": "object", - "properties": { - "chartName": { - "type": "string" - }, - "version": { - "type": "string" - }, - "extra": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "key:registry_host,val:registry_url" - } - } - }, - "v1alpha1helmInstallConfigResponse": { - "type": "object", - "properties": { - "values": { - "type": "string" - } - } - }, - "v1alpha1insightAgentState": { - "type": "object", - "properties": { - "status": { - "$ref": "#/definitions/v1alpha1InsightAgentStatus" - }, - "version": { - "type": "string" - }, - "createTime": { - "type": "string", - "format": "int64" - }, - "traceStatus": { - "$ref": "#/definitions/v1alpha1InsightAgentStatus" - } - } - }, - "v1alpha1match": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1matchType" - }, - "key": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "v1alpha1matchType": { - "type": "string", - "enum": [ - "MATCH_TYPE_UNSPECIFIED", - "EQUAL", - "NOT_EQUAL", - "REGEXP" - ], - "default": "MATCH_TYPE_UNSPECIFIED" - }, - "v1alpha1repeatConfig": { - "type": "object", - "properties": { - "severity": { - "$ref": "#/definitions/v1alpha1Severity" - }, - "interval": { - "type": "integer", - "format": "int32", - "title": "interval unit is hour" - } - } - }, - "v1alpha1requestStatus": { - "type": "string", - "enum": [ - "STATUS_UNSPECIFIED", - "SUCCESS", - "FAIL" - ], - "default": "STATUS_UNSPECIFIED" - }, - "v1alpha1resourceType": { - "type": "string", - "enum": [ - "overview", - "dashboard", - "resourceInsight", - "scenarioInsight", - "dataQuery", - "alertList", - "alertRules", - "notificationSettings", - "alertSilence", - "notificationTemplates", - "dataCollection", - "systemComponents", - "systemSettings", - "netFlow", - "alertInhibition" - ], - "default": "overview", - "title": "refs:\ncharts/insight/templates/ghippo/gproduct-resource-permissions.yaml#resourceTypes" - }, - "v1alpha1samplePair": { - "type": "object", - "properties": { - "timestamp": { - "type": "string", - "format": "int64" - }, - "value": { - "type": "string" - } - } - }, - "v1alpha1serverComponent": { - "type": "object", - "properties": { - "name": { - "$ref": "#/definitions/v1alpha1serverComponentName", - "title": "serverComponentName is service name" - }, - "workloadName": { - "type": "string", - "title": "workloadName is full workload name in cluster" - }, - "workloadNamespace": { - "type": "string", - "description": "workloadNamespace is namespace that workload installed, null means not in\nthis cluster." - }, - "workloadKind": { - "$ref": "#/definitions/v1alpha1WorkloadKind" - }, - "phase": { - "$ref": "#/definitions/v1alpha1WorkloadPhase" - }, - "availability": { - "type": "boolean" - }, - "message": { - "type": "string", - "title": "message give the reason when service is unavailable" - }, - "version": { - "type": "string" - }, - "podNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - }, - "creationTimestamp": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1serverComponentName": { - "type": "string", - "enum": [ - "NAME_UNSPECIFIED", - "VMINSERT", - "VMALERT", - "VMALERTMANAGER", - "VMSELECT", - "VMSTORAGE", - "GRAFANA", - "JAEGER_COLLECTOR", - "JAEGER_QUERY", - "OPENTELEMETRY_COLLECTOR", - "ELASTICSEARCH" - ], - "default": "NAME_UNSPECIFIED" - }, - "v1alpha1serviceSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "tracingEnabled": { - "type": "boolean", - "title": "tracing enabled" - } - } - }, - "v1alpha1timeInterval": { - "type": "object", - "properties": { - "timeRanges": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/timeIntervaltimeRange" - }, - "description": "if weekday_range is null, start and end is the unix timestamp like\n1678350699;\nif weekday_range is not null, start and end represents a range\nof seconds within a 86400 second day.In this case, start can be greater\nthan end; For example, 17:00 to End of the day would Start at 61200 and End\nat 86400.[default timezone is UTC]\nsupport multiple timerange if weekday_range is not null." - }, - "weekdayRange": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - }, - "description": "A list ranges between [0, 6] where 0 = Sunday.\nFor example: [1,2] means Monday and Tuesday.\n[0,1,2,3,4,5,6] means all week." - } - } - }, - "v1alpha1usage": { - "type": "object", - "properties": { - "cpuCapacity": { - "type": "string", - "format": "int64", - "description": "CpuCapacity is the total cpu of the node. Unit: m." - }, - "cpuAllocated": { - "type": "number", - "format": "double", - "description": "CpuAllocated is the total pod cpu request on the node. Unit: m." - }, - "cpuUsage": { - "type": "number", - "format": "double", - "description": "CpuUsage is the actual total pod cpu usage on the node. Unit: m." - }, - "memoryCapacity": { - "type": "string", - "format": "int64", - "description": "MemoryCapacity is the total memory of the node. Unit: byte." - }, - "memoryAllocated": { - "type": "number", - "format": "double", - "description": "MemoryAllocated is the total pod memory request on the node. Unit: byte." - }, - "memoryUsage": { - "type": "number", - "format": "double", - "description": "MemoryUsage is the actual total pod memory usage on the node. Unit: byte." - }, - "storageCapacity": { - "type": "string", - "format": "int64", - "description": "StorageCapacity is the total storage of the node. Unit: byte." - }, - "storageAllocated": { - "type": "string", - "format": "int64", - "description": "StorageAllocated is the total pod storage request on the node. Unit: byte." - }, - "storageUsage": { - "type": "number", - "format": "double", - "description": "StorageUsage is the actual total storage usage on the node. Unit: byte." - } - } - }, - "v1alpha1userinfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "isAdmin": { - "type": "boolean" - }, - "canViewCluster": { - "type": "boolean" - }, - "canViewNs": { - "type": "boolean" - }, - "resourceTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1resourceType" - } - } - } - }, - "v1alpha1workloadSummary": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/v1alpha1WorkloadPhase" - }, - "podNumSummary": { - "$ref": "#/definitions/v1alpha1ResourceNumSummary" - } - } - } - } -} diff --git a/site/openapi/kpanda/index.html b/site/openapi/kpanda/index.html deleted file mode 100644 index 45dc04d..0000000 --- a/site/openapi/kpanda/index.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - -容器管理 OpenAPI 文档 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/openapi/kpanda/swagger-ad6617d4.html b/site/openapi/kpanda/swagger-ad6617d4.html deleted file mode 100644 index 0b5df4b..0000000 --- a/site/openapi/kpanda/swagger-ad6617d4.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - Swagger UI - - - - - - -
- - - - - - \ No newline at end of file diff --git a/site/openapi/kpanda/v0.32.2.json b/site/openapi/kpanda/v0.32.2.json deleted file mode 100644 index 5440a04..0000000 --- a/site/openapi/kpanda/v0.32.2.json +++ /dev/null @@ -1,34200 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "容器管理", - "version": "v0.32.2" - }, - "tags": [ - { - "name": "Apiextensions" - }, - { - "name": "Apps" - }, - { - "name": "Batch" - }, - { - "name": "Cluster" - }, - { - "name": "insight" - }, - { - "name": "Core" - }, - { - "name": "Networking" - }, - { - "name": "RBAC" - }, - { - "name": "Autoscaling" - }, - { - "name": "Storage" - }, - { - "name": "Registry" - }, - { - "name": "Image" - }, - { - "name": "Workspace" - }, - { - "name": "ClusterSetting" - }, - { - "name": "CloudShell" - }, - { - "name": "Clusterlcm" - }, - { - "name": "Addon" - }, - { - "name": "EtcdBackupRestore" - }, - { - "name": "StreamService" - }, - { - "name": "SettingService" - }, - { - "name": "FeatureGate" - } - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "paths": { - "/apis/kpanda.io/v1alpha1/admincluster": { - "get": { - "summary": "ListAdminClusterSummary List cluster summary by adminCluster", - "operationId": "RBAC_ListAdminClusterSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAdminClusterSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "user", - "description": "user is the cluster's user", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "userGroup", - "description": "userGroup is the cluster user's belong group", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/clusterrolebindings": { - "get": { - "summary": "ListClusterRoleBindings lists a cluster RoleBinding", - "operationId": "RBAC_ListClusterRoleBindings", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterRoleBindingsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the roleBinding belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of the user", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "roleRef", - "description": "RoleRef is the role of the user, it should be the same as when it is created.\nSuch as: cluster-admin, ns-admin, ns-view, ns-edit, ns-admin", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/cronjobs": { - "get": { - "summary": "ListAllCronJobs lists all clusters cronjob", - "operationId": "Batch_ListAllCronJobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterCronJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusters", - "description": "Cluster the specified job belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Current status of a cron job.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status\n+optional\ntodo: split list all jobs and list all cron jobs.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name of the job.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether to return data that belongs to a virtual cluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/daemonsets": { - "get": { - "summary": "ListAllDaemonSets lists all daemonSet in all clusters", - "operationId": "Apps_ListAllDaemonSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDaemonSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the workloads belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "namespace", - "description": "Cluster represents which namespace the workloads belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether to return data that belongs to a virtual cluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/deployments": { - "get": { - "summary": "ListAllDeployments lists all deployment in all clusters", - "operationId": "Apps_ListAllDeployments", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDeploymentsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the workloads belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "namespace", - "description": "Cluster represents which namespace the workloads belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether to return data that belongs to a virtual cluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/groups": { - "get": { - "summary": "ListGroups lists the groups in the system.", - "operationId": "RBAC_ListGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListGroupsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/jobs": { - "get": { - "summary": "ListAllJobs lists all cluster jobs", - "operationId": "Batch_ListAllJobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "clusters", - "description": "Cluster the specified job belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Current status of a cron job.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status\n+optional\ntodo: split list all jobs and list all cron jobs.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name of the job.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether to return data that belongs to a virtual cluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/namespaces": { - "get": { - "summary": "ListNamespaces gets all the namespaces across clusters", - "operationId": "Core_ListNamespaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNamespacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Clusters is to filter namespaces by cluster names", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "workspaceId", - "description": "workspace_id the specified namespace belongs to.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "workspaceAlias", - "description": "workspace_alias the specified namespace belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name is to filter namespaces by namespace name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the job list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the job list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "onlyUnassign", - "description": "Only_unassign is used to distinguish workspaces that are not assigned.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "excludeSystem", - "description": "ExcludeSystem determines to exclude system namespaces, defaults to False.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether to return data that belongs to a virtual cluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "includeResourceQuota", - "description": "IncludeQuota used to control whether return namespace resource quota, default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/pods": { - "get": { - "summary": "ListAllPods will list all pod by given cluster and namespace,\nif you want list pods regardless of namespace, please given specify\nnamespace as \"\" and it supports across cluster.", - "operationId": "Core_ListAllPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents the pods belongs to, it is a array\nif you want to query cluster more than one, please use query\nlike '?cluster=cluster1&cluster=cluster2'.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phases is used for filter.\n\n - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Unknown", - "Pending", - "Running", - "Succeeded", - "Failed" - ], - "default": "PHASE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "gpuType", - "description": "gpu_type is filter with pods resources, when value is * search all", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/rolebindings": { - "get": { - "summary": "ListRoleBindings lists the rolebidings created by frontend.", - "operationId": "RBAC_ListRoleBindings", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRoleBindingsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the roleBinding belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the roleBinding belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of the user", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "roleRef", - "description": "RoleRef is the role of the user, it should be the same as when it is created.\nSuch as: cluster-admin, ns-admin, ns-view, ns-edit, ns-admin", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/statefulsets": { - "get": { - "summary": "ListAllStatefulSets lists all statefulSet in all clusters", - "operationId": "Apps_ListAllStatefulSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListStatefulSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the workloads belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "namespace", - "description": "Cluster represents which namespace the workloads belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether to return data that belongs to a virtual cluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/asl/users": { - "get": { - "summary": "ListUsers lists the users in the system.", - "operationId": "RBAC_ListUsers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListUsersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cloudshells": { - "post": { - "summary": "CreateCloudShell create a cloudshell in golobal cluster.", - "operationId": "CloudShell_CreateCloudShell", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CloudShell" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1CreateCloudShellRequest" - } - } - ], - "tags": [ - "CloudShell" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cloudshells/{name}": { - "get": { - "summary": "GetCloudShell get a cloudshell in golobal cluster.", - "operationId": "CloudShell_GetCloudShell", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CloudShell" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "name specified the cloudshell name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "CloudShell" - ] - }, - "delete": { - "summary": "DeleteCloudShell delete a cloudshell in golobal cluster.", - "operationId": "CloudShell_DeleteCloudShell", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "name specified the cloudshell name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1CloudShellType", - "description": "type specified the cloudshell command type (exec, logs, bash)." - }, - "cluster": { - "type": "string", - "description": "cluster specified the cluster name for cloudshell." - } - }, - "description": "DeleteCloudShellResponse defines the delete api request." - } - } - ], - "tags": [ - "CloudShell" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm": { - "post": { - "operationId": "Clusterlcm_CreateCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterlcmResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1CreateClusterRequest" - } - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/available-kube-versions": { - "get": { - "operationId": "Clusterlcm_ListKubeVersions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListKubeVersionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/available-runtime-versions": { - "get": { - "operationId": "Clusterlcm_ListRuntimeVersions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRuntimeVersionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kubeVersion", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/nodes": { - "post": { - "operationId": "Clusterlcm_BatchAddNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterlcmResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "role": { - "$ref": "#/definitions/v1alpha1NodeInfoRole" - }, - "nodeInfos": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeInfo" - } - }, - "type": { - "$ref": "#/definitions/v1alpha1SSHInfoType" - }, - "kubesprayArgs": { - "$ref": "#/definitions/v1alpha1NodeKubesprayArgs" - } - } - } - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/nodes/{name}": { - "delete": { - "operationId": "Clusterlcm_RemoveNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterlcmResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/ops": { - "get": { - "operationId": "Clusterlcm_ListClusterlcmOps", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterlcmOpsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The name of the cluster.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The fuzzy-name of the clusterclmOps.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "SortDir determines the order of the data.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "targetCluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "action", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "ACTION_UNSPECIFIED", - "CREATE_CLUSTER", - "UPGRADE_CLUSTER", - "RESET_CLUSTER", - "ADD_NODE", - "REMOVE_NODE" - ], - "default": "ACTION_UNSPECIFIED" - }, - { - "name": "phase", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "STATUS_UNSPECIFIED", - "Running", - "Succeeded", - "Failed", - "Blocked" - ], - "default": "STATUS_UNSPECIFIED" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by cluster name or cluster alias name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/ops/{name}": { - "get": { - "operationId": "Clusterlcm_GetClusterlcmOps", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterlcmOps" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The name of the cluster.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the clusterclmOps.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - }, - "delete": { - "operationId": "Clusterlcm_DeleteClusterlcmOps", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The name of the manger cluster.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the cluster which needs to be create.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/ops/{name}/json": { - "get": { - "operationId": "Clusterlcm_GetClusterlcmOpsJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetClusterlcmOpsJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The name of the cluster.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the clusterclmOps.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{cluster}/settings": { - "get": { - "operationId": "Clusterlcm_GetClusterlcmSettings", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterSettings" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The name of the cluster which needs to be create.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{name}/precheck-infos": { - "post": { - "operationId": "Clusterlcm_GetPreCheckClusterInfo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetPreCheckClusterInfoResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "The name of the cluster which needs to be create.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "dkgClusterName": { - "type": "string", - "description": "The name of the manger cluster." - }, - "kubeVersion": { - "type": "string", - "title": "kubernetes version of cluster to be created" - }, - "operation": { - "type": "string", - "description": "operation represents the kubean operation name." - } - } - } - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{name}:check": { - "post": { - "operationId": "Clusterlcm_CheckCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CheckClusterResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object" - } - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{name}:precheck": { - "post": { - "operationId": "Clusterlcm_PreCheckCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterlcmResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "The name of the cluster which needs to be create.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "dkgClusterName": { - "type": "string", - "description": "The name of the manger cluster." - }, - "kubeVersion": { - "type": "string" - }, - "nodeConfig": { - "$ref": "#/definitions/v1alpha1NodeConfig" - } - } - } - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{name}:reset": { - "post": { - "operationId": "Clusterlcm_ResetCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterlcmResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object" - } - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/cluster-lcm/{name}:upgrade": { - "post": { - "operationId": "Clusterlcm_UpgradeCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterlcmResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "The name of the cluster which needs to upgrade.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "kubernetesVersion": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Clusterlcm" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters": { - "get": { - "summary": "ListClusters lists kpanda cr resources", - "operationId": "Cluster_ListClusters", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClustersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "role", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "CLUSTER_ROLE_UNSPECIFIED", - "CLUSTER_ROLE_MANAGER", - "CLUSTER_ROLE_GLOBAL_SERVICE", - "CLUSTER_ROLE_WORKER", - "CLUSTER_ROLE_THIRD_PARTY" - ], - "default": "CLUSTER_ROLE_UNSPECIFIED" - }, - { - "name": "kubernetesVersion", - "description": "KUBERNETESVERSION cluster k8s version use to support search sub cluster at\nListClusters", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase is used for filter.\n\n - CLUSTER_PHASE_UNSPECIFIED: The cluster state is unspecified.\n - Unknown: The cluster state is unknown.\n - Creating: The cluster is being created.\n - Running: The cluster is running.\n - Updating: The cluster is updating.\n - Deleting: The cluster is being deleted.\n - Failed: The cluster create failed.\n - DeleteFailed: The cluster delete failed.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "CLUSTER_PHASE_UNSPECIFIED", - "Unknown", - "Creating", - "Running", - "Updating", - "Deleting", - "Failed", - "DeleteFailed" - ], - "default": "CLUSTER_PHASE_UNSPECIFIED" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter clusters.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter the clusters.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "managedBy", - "description": "ManagedBy represents who manages the cluster", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the cluster list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the cluster list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether returned data contains\nvirtualCluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by cluster name or cluster alias name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "excludeMetrics", - "description": "exclude_metrics\nIf false, contains metrics-related information\nIf true, metrics-related information is not included", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Cluster" - ] - }, - "post": { - "summary": "CreateCluster creates a cluster", - "operationId": "Cluster_CreateCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateOrUpdateClusterResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1IntegrateClusterRequest" - } - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/validate": { - "post": { - "operationId": "Cluster_ValidateKubeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ValidateKubeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1ValidateKubeConfigRequest" - } - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/accessiblestorageclasses": { - "get": { - "summary": "ListAccessibleStorageClasses lists all storageclasses in accessible clusters", - "operationId": "Storage_ListAccessibleStorageClasses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAllStorageClassesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "provisioner", - "description": "Provisioner is used for fuzzy search by provisioner.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "reclaimPolicy", - "description": "ReclaimPolicy is used for fuzzy search by reclaimPolicy.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/clustercert": { - "post": { - "summary": "CreateOpenAPIClusterCert creates openAPI cluster cert", - "operationId": "Cluster_CreateOpenAPIClusterCert", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateOpenAPIClusterCertResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "one of cluster or kubeSystemID has value", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "kubeSystemID": { - "type": "string", - "description": "kubeSystemID is the cluster system ID." - }, - "expirationSeconds": { - "type": "integer", - "format": "int32", - "description": "ExpirationSeconds is the requested duration of validity of the request." - } - } - } - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/clusterresourceoverride": { - "post": { - "summary": "CreateClusterResourceOverride creates a cro by given json.", - "operationId": "Autoscaling_CreateClusterResourceOverride", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterResourceOverride" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster defines the cluster name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1ClusterResourceOverride", - "description": "date defines the content of ClusterResourceOverride." - } - } - } - } - ], - "tags": [ - "Autoscaling" - ] - }, - "put": { - "summary": "UpdateClusterResourceOverride updates a cro by given json.", - "operationId": "Autoscaling_UpdateClusterResourceOverride", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterResourceOverride" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster defines the cluster name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1ClusterResourceOverride", - "description": "date defines the content of ClusterResourceOverride." - } - } - } - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/clusterresourceoverride/{name}": { - "get": { - "summary": "GetClusterResourceOverride gets a cro by name.", - "operationId": "Autoscaling_GetClusterResourceOverride", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterResourceOverride" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster defines the cluster name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name defines the name of ClusterResourceOverride.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - }, - "delete": { - "summary": "DeleteClusterResourceOverride deletes a cro by name.", - "operationId": "Autoscaling_DeleteClusterResourceOverride", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster defines the cluster name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name defines the name of ClusterResourceOverride.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/clusterrolebindings": { - "post": { - "summary": "CreateClusterRoleBinding creates a cluster roleBinding batch", - "operationId": "RBAC_CreateClusterRoleBinding", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterRoleBinding" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the clusterRoleBinding belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "subject": { - "$ref": "#/definitions/v1alpha1Subject", - "description": "Subject holds references to the objects the role applies to." - }, - "roleRef": { - "$ref": "#/definitions/v1alpha1RoleRef", - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in\nthe global namespace. If the RoleRef cannot be resolved, the Authorizer\nmust return an error." - }, - "name": { - "type": "string", - "title": "the name of ClusterRole" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "ownerReferences": { - "type": "array", - "items": { - "$ref": "#/definitions/typesOwnerReference" - } - } - } - } - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/clusterrolebindings/{name}": { - "delete": { - "summary": "DeleteClusterRoleBinding deletes a cluster RoleBinding", - "operationId": "RBAC_DeleteClusterRoleBinding", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the roleBinding belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the clusterrolebinding to delete.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/clusterroles": { - "get": { - "summary": "ListClusterRoles lists the clusterroles", - "operationId": "RBAC_ListClusterRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of the user", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/clusterroles/{name}": { - "get": { - "summary": "GetClusterRole gets a ClusterRole", - "operationId": "RBAC_GetClusterRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/apirbacv1alpha1ClusterRole" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the clusterrole belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the clusterrole to delete.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - }, - "delete": { - "summary": "DeleteClusterRole deletes a ClusterRole", - "operationId": "RBAC_DeleteClusterRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the clusterrole belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the clusterrole to delete.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - }, - "post": { - "summary": "CreateClusterRole creates a ClusterRole", - "operationId": "RBAC_CreateClusterRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/apirbacv1alpha1ClusterRole" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the clusterrole belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "the name of role.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - } - } - } - ], - "tags": [ - "RBAC" - ] - }, - "put": { - "summary": "UpdateClusterRole updates a ClusterRole", - "operationId": "RBAC_UpdateClusterRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateClusterRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the clusterrole belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the clusterrole to delete.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - }, - "title": "UpdateClusterRoleRequest the request of update clusterrole" - } - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/configmaps": { - "get": { - "summary": "ListClusterConfigMaps lists all configmaps in the specified cluster,\nregardless of namespace.", - "operationId": "Core_ListClusterConfigMaps", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterConfigMapsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the event list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "name is used for query.\n+optional", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "onlyMetadata", - "description": "OnlyMetadata lists only metadata of configmaps, default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/crd-groups": { - "get": { - "summary": "ListCustomResourceDefinitionGroups lists all groups of customResourceDefinitions in the specified cluster", - "operationId": "Apiextensions_ListCustomResourceDefinitionGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListCustomResourceDefinitionGroupsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster to request", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/cronjobs": { - "get": { - "summary": "ListCronJobs Lists cronJobs in a specific cluster", - "operationId": "Batch_ListCronJobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListCronJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of Workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search.\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/custommetricsummary": { - "get": { - "summary": "ListCustomMetricsSummary return the custom metrics for specified\nresource.", - "operationId": "Autoscaling_ListCustomMetricSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListCustomMetricSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the custom metrics belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "The kind of hpa targetRef.\n\n - Pod: The custom metrics for service.\n - Service: The custom metrics for service.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Pod", - "Service" - ], - "default": "KIND_UNSPECIFIED" - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/customresourcedefinitions": { - "get": { - "summary": "ListCustomResourceDefinitions lists customResourceDefinitions in the specified cluster", - "operationId": "Apiextensions_ListCustomResourceDefinitions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListCustomResourceDefinitionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster cluster to be queried", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name search the custom resource definitions fo name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "description": "Status search the custom resource definitions fo status", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "group", - "description": "Group is to filter customResourceDefinitions by group.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "post": { - "summary": "CreateCustomResourceDefinition creates a customResourceDefinition to the\nsystem by given customResourceDefinition data", - "operationId": "Apiextensions_CreateCustomResourceDefinition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateCustomResourceDefinitionResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified customResourceDefinition belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the customResourceDefinition YAML details." - } - }, - "title": "CreateCustomResourceDefinitionRequest represents post request to a\ncustomResourceDefinition" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/customresourcedefinitions/{name}": { - "get": { - "summary": "GetCustomResourceDefinition gets a customResourceDefinition from\nthe system by given customResourceDefinition name", - "operationId": "Apiextensions_GetCustomResourceDefinition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CustomResourceDefinition" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResourceDefinition belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResourceDefinition.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "delete": { - "summary": "DeleteCustomResourceDefinition deletes a customResourceDefinition from the\nsystem by given customResourceDefinition name", - "operationId": "Apiextensions_DeleteCustomResourceDefinition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified customResourceDefinition belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the metadata.name of the referenced customResourceDefinition.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "put": { - "summary": "UpdateCustomResourceDefinition updates a customResourceDefinition from the\nsystem by given customResourceDefinition name", - "operationId": "Apiextensions_UpdateCustomResourceDefinition", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateCustomResourceDefinitionResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified customResourceDefinition belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the customResourceDefinition YAML details." - } - }, - "title": "UpdateCustomResourceDefinitionRequest represents put request to a\ncustomResourceDefinition" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/customresourcedefinitions/{name}/json": { - "get": { - "summary": "GetCustomResourceDefinitionJSON gets a customResourceDefinition json from\nthe system by given customResourceDefinition name", - "operationId": "Apiextensions_GetCustomResourceDefinitionJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetCustomResourceDefinitionJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResourceDefinition belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResourceDefinition.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/daemonsets": { - "get": { - "summary": "ListClusterDaemonSets lists DaemonSet in one cluster", - "operationId": "Apps_ListClusterDaemonSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDaemonSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of Workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/deployments": { - "get": { - "summary": "ListClusterDeployments lists one cluster all namespace's deployments", - "operationId": "Apps_ListClusterDeployments", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDeploymentsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of Workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/etcd:verify": { - "post": { - "summary": "VerifyEtcdConnection verifies the etcd connection.", - "operationId": "EtcdBackupRestore_VerifyEtcdConnection", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1VerifyEtcdConnectionResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd snapstore belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "etcdConnectionConfig": { - "$ref": "#/definitions/v1alpha1EtcdConnectionConfig", - "description": "config for etcd connection." - } - } - } - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/snapstores:verify": { - "post": { - "summary": "VerifySnapStore verifies the SnapStore config.", - "operationId": "EtcdBackupRestore_VerifySnapStoreConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1VerifySnapStoreConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd snapstore belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "accessKeyId": { - "type": "string", - "description": "username or access key id for S3." - }, - "secretAccessKey": { - "type": "string", - "description": "password or secret key for S3." - }, - "bucket": { - "type": "string", - "description": "the bucket name for S3." - }, - "endpoint": { - "type": "string", - "description": "endpoint for S3." - }, - "region": { - "type": "string", - "description": "region for S3." - } - } - } - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies": { - "post": { - "summary": "CreateEtcdBackupStrategy creates a etcd backup strategy.", - "operationId": "EtcdBackupRestore_CreateEtcdBackupStrategy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name for EtcdBackupStrategy." - }, - "strategy": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy", - "description": "The data for the etcd backup strategy." - } - } - } - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies/{name}": { - "get": { - "summary": "GetEtcdBackupStrategy get a etcd backup strategy in cluster.", - "operationId": "EtcdBackupRestore_GetEtcdBackupStrategy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the etcd backup strategy name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - }, - "delete": { - "summary": "DeleteEtcdBackupStrategy delete a etcd backup strategy in cluster.", - "operationId": "EtcdBackupRestore_DeleteEtcdBackupStrategy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of etcd backup strategy", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - }, - "put": { - "summary": "UpdateEtcdBackupStrategy updates tcd backup strategy under the cluster", - "operationId": "EtcdBackupRestore_UpdateEtcdBackupStrategy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name for EtcdBackupStrategy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "strategy": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy", - "description": "The data for the etcd backup strategy." - } - } - } - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies/{name}/json": { - "get": { - "summary": "GetEtcdBackupStrategyJSON get a etcd backup strategy json in cluster.", - "operationId": "EtcdBackupRestore_GetEtcdBackupStrategyJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetEtcdBackupStrategyJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the etcd backup strategy name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies/{name}:execute": { - "post": { - "summary": "ExecuteEtcdBackupStrategy executes a etcd backup strategy under the cluster", - "operationId": "EtcdBackupRestore_ExecuteEtcdBackupStrategy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ExecuteEtcdBackupStrategyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of etcd backup strategy.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies/{name}:pause": { - "post": { - "summary": "PauseEtcdBackupStrategy pauses a etcd backup strategy under the cluster", - "operationId": "EtcdBackupRestore_PauseEtcdBackupStrategy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PauseEtcdBackupStrategyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of etcd backup strategy", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies/{name}:resume": { - "post": { - "summary": "ResumeEtcdBackupStrategy resumes a etcd backup strategy under the cluster", - "operationId": "EtcdBackupRestore_ResumeEtcdBackupStrategy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ResumeEtcdBackupStrategyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of etcd backup strategy", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies/{strategy}/snapshots": { - "get": { - "summary": "ListEtcdSnapshots list etcd backup snapshots .", - "operationId": "EtcdBackupRestore_ListEtcdSnapshots", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListEtcdSnapshotsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "strategy", - "description": "strategy represents the name of etcd backup strategy.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/etcdbackuprestore/strategies/{strategy}/snapshots/{name}": { - "delete": { - "summary": "DeleteEtcdBackup delete a etcd backup.", - "operationId": "EtcdBackupRestore_DeleteEtcdSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the etcd backup strategy belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "strategy", - "description": "strategy represents the name of etcd backup strategy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of etcd snapshot.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/events": { - "get": { - "summary": "ListClusterEvents lists all events in the specified cluster,\nregardless of namespace.", - "operationId": "Core_ListClusterEvents", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterEventsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the events belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "type", - "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "EVENT_TYPE_UNSPECIFIED", - "Normal", - "Warning" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "kind", - "description": "Kind is used for query, showing events of specified involvedObject kind,\ne.g. Node.\n+optional", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name is used for query, showing events of specified involvedObject name,\ne.g. node‘s name when kind is Node.\n+optional", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/events/kinds": { - "get": { - "summary": "ListClusterEventKinds lists all involvedObject's kinds of events in the\nspecified cluster, regardless of namespace", - "operationId": "Core_ListClusterEventKinds", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterEventKindsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the events belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gpusummary": { - "get": { - "summary": "ListClusterGPUSummary lists gpu summary of all nodes of the specified cluster.", - "operationId": "Core_ListClusterGPUSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterGPUSummaryResponese" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster defines the cluster name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/namespaces/{namespace}/{resource}": { - "get": { - "summary": "ListCustomResources lists customResources of namespaced scope from the\nsystem", - "operationId": "Apiextensions_ListCustomResources", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListCustomResourcesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResources belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResources.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResources.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResources belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResources, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "name is used for query.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "showDetail", - "description": "ShowDetail is the presentation details, including metadata, spec, and status", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "ownerReference", - "description": "OwnerReference indicates that the query is based on the OwnerReference.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "post": { - "summary": "CreateCustomResource creates a customResource of namespaced scope to the\nsystem by given customResource data", - "operationId": "Apiextensions_CreateCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "CreateCustomResourceRequest represents create request to create one\nCustomResource of namespaced scope" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/namespaces/{namespace}/{resource}/{name}": { - "get": { - "summary": "GetCustomResource gets a customResource of namespaced scope from\nthe system", - "operationId": "Apiextensions_GetCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CustomResource" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "showDetail", - "description": "ShowDetail is the presentation details, including metadata, spec, and status", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "delete": { - "summary": "DeleteCustomResource deletes a customResource of namespaced scope from the\nsystem by given customResource name", - "operationId": "Apiextensions_DeleteCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "deletionPropagation", - "description": " - DELETION_PROPAGATION_ORPHAN: Orphans the dependents.\n - DELETION_PROPAGATION_BACKGROUND: Deletes the object from the key-value store, the garbage collector will\ndelete the dependents in the background.\n - DELETION_PROPAGATION_FOREGROUND: The object exists in the key-value store until the garbage collector\ndeletes all the dependents whose ownerReference.blockOwnerDeletion=true\nfrom the key-value store. API sever will put the \"foregroundDeletion\"\nfinalizer on the object, and sets its deletionTimestamp. This policy is\ncascading, i.e., the dependents will be deleted with Foreground.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "DELETION_PROPAGATION_UNSPECIFIED", - "DELETION_PROPAGATION_ORPHAN", - "DELETION_PROPAGATION_BACKGROUND", - "DELETION_PROPAGATION_FOREGROUND" - ], - "default": "DELETION_PROPAGATION_UNSPECIFIED" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "put": { - "summary": "UpdateCustomResource updates a customResource of namespaced scope from the\nsystem by given customResource name", - "operationId": "Apiextensions_UpdateCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateCustomResourceRequest represents update request to update one\nCustomResource of namespaced scope" - } - } - ], - "tags": [ - "Apiextensions" - ] - }, - "patch": { - "summary": "PatchCustomResource patches a customResource of cluster scope from\nthe system by given customResource name", - "operationId": "Apiextensions_PatchCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "patchType": { - "$ref": "#/definitions/PatchCustomResourceRequestPatchType", - "description": "The patch type for patching the resources." - }, - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - }, - "subResources": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "title": "PatchCustomResourceRequest represents patch request to update one\nCustomResource of cluster scope" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/namespaces/{namespace}/{resource}/{name}/json": { - "get": { - "summary": "GetCustomResourceJSON gets a customResource of namespaced scope json from\nthe system", - "operationId": "Apiextensions_GetCustomResourceJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetCustomResourceJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/namespaces/{namespace}/{resource}/{name}/status": { - "put": { - "summary": "UpdateCustomResourceStatus updates the status of a customResource", - "operationId": "Apiextensions_UpdateCustomResourceStatus", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateCustomResourceStatusResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateCustomResourceStatusRequest requests to update the status of a customResource of namespaced scope" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/{resource}": { - "get": { - "summary": "ListClusterCustomResources lists customResources of cluster scope", - "operationId": "Apiextensions_ListClusterCustomResources", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterCustomResourcesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResources belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResources.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResources.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResources, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "name is used for query.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "showDetail", - "description": "ShowDetail is the presentation details, including metadata, spec, and status", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "post": { - "summary": "CreateClusterCustomResource creates a customResource of cluster scope to\nthe system by given customResource data", - "operationId": "Apiextensions_CreateClusterCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateClusterCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "CreateClusterCustomResourceRequest represents create request to create one\nCustomResource of cluster scope" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/{resource}/{name}": { - "get": { - "summary": "GetClusterCustomResource gets a customResource of cluster scope", - "operationId": "Apiextensions_GetClusterCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CustomResource" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "showDetail", - "description": "ShowDetail is the presentation details, including metadata, spec, and status", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "delete": { - "summary": "DeleteClusterCustomResource deletes a customResource of cluster scope from\nthe system by given customResource name", - "operationId": "Apiextensions_DeleteClusterCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "deletionPropagation", - "description": " - DELETION_PROPAGATION_ORPHAN: Orphans the dependents.\n - DELETION_PROPAGATION_BACKGROUND: Deletes the object from the key-value store, the garbage collector will\ndelete the dependents in the background.\n - DELETION_PROPAGATION_FOREGROUND: The object exists in the key-value store until the garbage collector\ndeletes all the dependents whose ownerReference.blockOwnerDeletion=true\nfrom the key-value store. API sever will put the \"foregroundDeletion\"\nfinalizer on the object, and sets its deletionTimestamp. This policy is\ncascading, i.e., the dependents will be deleted with Foreground.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "DELETION_PROPAGATION_UNSPECIFIED", - "DELETION_PROPAGATION_ORPHAN", - "DELETION_PROPAGATION_BACKGROUND", - "DELETION_PROPAGATION_FOREGROUND" - ], - "default": "DELETION_PROPAGATION_UNSPECIFIED" - } - ], - "tags": [ - "Apiextensions" - ] - }, - "put": { - "summary": "UpdateClusterCustomResource updates a customResource of cluster scope from\nthe system by given customResource name", - "operationId": "Apiextensions_UpdateClusterCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateClusterCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateClusterCustomResourceRequest represents update request to update one\nCustomResource of cluster scope" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/{resource}/{name}/json": { - "get": { - "summary": "GetClusterCustomResourceJSON gets a customResource json of cluster scope", - "operationId": "Apiextensions_GetClusterCustomResourceJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetClusterCustomResourceJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/gvr/{group}/{version}/{resource}/{name}/status": { - "put": { - "summary": "UpdateClusterCustomResourceStatus updates the status of a customResource of cluster scope", - "operationId": "Apiextensions_UpdateClusterCustomResourceStatus", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateClusterCustomResourceStatusResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the CustomResource belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "group", - "description": "Group represents the resource group of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "Version represents the resource version of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "resource", - "description": "Resource represents the resource name of CustomResource, which is plural.\nYou can find it in plural field of related CRD definition.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of CustomResource.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateClusterCustomResourceStatusRequest requests to update the status of a CustomResource of cluster scope" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmcharts": { - "get": { - "summary": "ListCharts list chart from repositories.", - "operationId": "Addon_ListHelmCharts", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListHelmChartsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Helm chart name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "category", - "description": "Category is used for query.\n\n - CATEGORY_UNSPECIFIED: The Category is unspecified.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "CATEGORY_UNSPECIFIED", - "CATEGORY_OTHERS", - "CATEGORY_STORAGE", - "CATEGORY_NETWORKING", - "CATEGORY_MONITORING", - "CATEGORY_DATABASE", - "CATEGORY_DATASERVICE", - "CATEGORY_ECOAPP", - "CATEGORY_BIGDATA", - "CATEGORY_SECURITY", - "CATEGORY_IOTEDGE", - "CATEGORY_INFRA" - ], - "default": "CATEGORY_UNSPECIFIED" - }, - { - "name": "repo", - "description": "The repo name which the charts belongs to.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "required", - "description": "Required indicates whether to display the charts, which are required to install the cluster.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmcharts/installed": { - "get": { - "summary": "ListClusterInstalledHelmChart list the charts which installed belong to repo", - "operationId": "Addon_ListClusterInstalledHelmChart", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterInstalledHelmChartResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repoName", - "description": "repo_name represents which helm repo's name use to list installed helm chart", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmoperations": { - "get": { - "summary": "ListClusterHelmOperations list operation in cluster.", - "operationId": "Addon_ListClusterHelmOperations", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterHelmOperationsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified operation belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the event list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "name is used for query.\n+optional", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "releaseName", - "description": "Filter helm_operation by release_name,\nThe release_name is exactly.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmreleases": { - "get": { - "summary": "ListClusterHelmReleases list apps in cluster.", - "operationId": "Addon_ListClusterHelmReleases", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterHelmReleasesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified operation belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the event list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "name is used for query.\n+optional", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "helmChartName", - "description": "the helm releases's chart name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "helmChartRepo", - "description": "the helm releases's chart repo name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos": { - "get": { - "summary": "ListHelmRepos list repo in cluster.", - "operationId": "Addon_ListHelmRepos", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListHelmReposResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the repository list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the repository list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "builtIn", - "description": "builtin indicates whether to display the repos required to install the cluster.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Addon" - ] - }, - "post": { - "summary": "CreateHelmRepo create a repo in cluster.", - "operationId": "Addon_CreateHelmRepo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1HelmRepo" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name represents for the resource name." - }, - "description": { - "type": "string", - "description": "The description represents for the resource." - }, - "url": { - "type": "string", - "title": "url A http url of the repo to connect to" - }, - "verificationMethod": { - "$ref": "#/definitions/v1alpha1VerificationMethod", - "title": "Repository verification method" - }, - "userName": { - "type": "string", - "title": "Repository user name" - }, - "password": { - "type": "string", - "title": "Repository user password" - }, - "token": { - "type": "string", - "title": "Repository token" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels are key/value pairs that are attached to objects." - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations to attach arbitrary metadata to objects." - }, - "insecureSkipTLSVerify": { - "type": "boolean", - "description": "InsecureSkipTLSVerify will use insecure HTTPS to download the helmrepo's index." - } - } - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{name}": { - "get": { - "summary": "GetHelmRepo get a repo in cluster.", - "operationId": "Addon_GetHelmRepo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1HelmRepo" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - }, - "delete": { - "summary": "DeleteHelmRepo delete a repo in cluster.", - "operationId": "Addon_DeleteHelmRepo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - }, - "put": { - "summary": "UpdateHelmRepo update repo", - "operationId": "Addon_UpdateHelmRepo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1HelmRepo" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "The description represents for the resource." - }, - "url": { - "type": "string", - "title": "url A http url of the repo to connect to" - }, - "verificationMethod": { - "$ref": "#/definitions/v1alpha1VerificationMethod", - "title": "Repository verification method" - }, - "userName": { - "type": "string", - "title": "Repository user name" - }, - "password": { - "type": "string", - "title": "Repository user password" - }, - "token": { - "type": "string", - "title": "Repository token" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels are key/value pairs that are attached to objects." - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations to attach arbitrary metadata to objects." - }, - "insecureSkipTLSVerify": { - "type": "boolean", - "description": "InsecureSkipTLSVerify will use insecure HTTPS to download the helmrepo's index." - } - } - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{name}/json": { - "get": { - "summary": "GetHelmRepoJSON get a repo json in cluster.", - "operationId": "Addon_GetHelmRepoJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmRepoJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{name}/validate": { - "post": { - "summary": "ValidateHelmRepo verifies if a repo is connectable.", - "operationId": "Addon_ValidateHelmRepo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ValidateHelmRepoResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster of the repo", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the repo", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "url": { - "type": "string", - "title": "Url of the repo to connect to" - }, - "verificationMethod": { - "$ref": "#/definitions/v1alpha1VerificationMethod", - "title": "Repository verification method" - }, - "userName": { - "type": "string", - "title": "Repository user name" - }, - "password": { - "type": "string", - "title": "Repository user password" - }, - "insecureSkipTLSVerify": { - "type": "boolean", - "description": "InsecureSkipTLSVerify will use insecure HTTPS to download the helmrepo's index." - } - }, - "title": "ValidateHelmRepoRequest requests to validate the connection to a helm repo" - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{name}:refresh": { - "post": { - "summary": "RefreshHelmRepo updates a helm repo's index.", - "operationId": "Addon_RefreshHelmRepo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1HelmRepo" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the helmrepo belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{repo}/helmcharts/{name}": { - "get": { - "summary": "GetHelmChartVersion get a chart version info from repository.", - "operationId": "Addon_GetHelmChart", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmChartResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repo", - "description": "The repo represents for the charts belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "The version represents for the resource version.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{repo}/helmcharts/{name}/display": { - "get": { - "summary": "GetHelmChartDisplay get a chart display info from repository.", - "operationId": "Addon_GetHelmChartDisplay", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmChartDisplayResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repo", - "description": "The repo represents for the charts belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "The version represents for the resource version.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{repo}/helmcharts/{name}/files": { - "get": { - "summary": "GetHelmChartFiles get a chart files from repository.", - "operationId": "Addon_GetHelmChartFiles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmChartFilesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repo", - "description": "The repo represents for the charts belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "The version represents for the resource version.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{repo}/helmcharts/{name}/manifests": { - "post": { - "summary": "GetHelmChartManifest get a chart manifests info from repository.", - "operationId": "Addon_GetHelmChartManifest", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmChartManifestResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repo", - "description": "The repo represents for the charts belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "version": { - "type": "string", - "description": "The version represents for the resource version." - }, - "releaseName": { - "type": "string", - "description": "release_name is the name of the release." - }, - "namespace": { - "type": "string", - "description": "release_name is the name of the release namspace." - }, - "values": { - "type": "string", - "description": "Config is the set of extra Values added to the chart.\nThese values override the default values inside of the chart." - } - } - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{repo}/helmcharts/{name}/resources": { - "get": { - "summary": "GetHelmChartResources get the resources contained in charts.", - "operationId": "Addon_GetHelmChartResources", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmChartResourcesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repo", - "description": "The repo represents for the charts belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "version", - "description": "The version represents for the resource version.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/helmrepos/{repo}/helmcharts/{name}:config": { - "post": { - "summary": "GetHelmInstallConfig create a Release.", - "operationId": "Addon_GetHelmInstallConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1HelmInstallConfig" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repo", - "description": "The repo represents for the charts belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of helmrelease", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "version": { - "type": "string", - "description": "Version is an int which represents the version of the chart." - } - } - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/ingressclasssummary": { - "get": { - "summary": "ListIngressClassSummary gets a list of ingressClass simple information\nfrom the system by given cluster name", - "operationId": "Networking_ListIngressClassSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListIngressClassSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the ingressClass belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the IngressClass to retrieve for a specific namespace scoped.\nIf left empty, it retrieves the cluster scoped IngressClass.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/ingresses": { - "get": { - "summary": "ListClusterIngresses lists all ingresses in the specified cluster.", - "operationId": "Networking_ListClusterIngresses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterIngressesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, must be specified,\nwill return all the ingress of the cluster.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is the number of pages at the beginning.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the number of every page displayed.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy defines sort field, please see message kpanda.io.api.types.SortBy.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy defines the type of sort, default type asc, can also specify desc.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is the name of the ingress.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/jobs": { - "get": { - "summary": "ListJobs lists jobs in a specific cluster", - "operationId": "Batch_ListJobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of Workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search.\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/kubeconfig": { - "get": { - "summary": "GetClusterKubeConfig gets the specified cluster's kubeconfig", - "operationId": "Cluster_GetClusterKubeConfig", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetClusterKubeConfigResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/limitranges": { - "get": { - "summary": "ListClusterLimitRanges lists all limitranges in the specified cluster.", - "operationId": "Core_ListClusterLimitRanges", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterLimitRangesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified LimitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the LimitRange list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the LimitRange list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by cluster name or cluster alias name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/metallb/check-serviceports": { - "post": { - "summary": "ValidateMetallbSharedIPPortConflict checks whether the service port of\nthe loadBalance service with using shared ip is conflict with other loadBalancer\nservices", - "operationId": "Networking_ValidateMetallbSharedIPPortConflict", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "sharedLoadBalancerIP": { - "type": "string", - "title": "sharedLoadBalancerIP is the shared IP address that needs to be checked\nfor service port conflicts" - }, - "servicePorts": { - "type": "array", - "items": { - "type": "integer", - "format": "int32" - }, - "title": "servicePorts is the list of service ports that need to be checked for\nconflicts" - } - } - } - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/metallb/ippools": { - "get": { - "summary": "ListMetallbIPPool lists all metallb in the specified cluster and namespace.", - "operationId": "Networking_ListMetallbIPAddressPools", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListMetallbIPPoolResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is the number of pages at the beginning.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the number of every page displayed.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy defines sort field, please see message kpanda.io.api.types.SortBy.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy defines the type of sort, default type asc, can also specify desc.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is the name of the ingress.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/metric": { - "post": { - "operationId": "insight_QueryClusterMetrics", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1MetricResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The name of the cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "param": { - "$ref": "#/definitions/v1alpha1BatchQueryRequestParam", - "title": "The query request param" - }, - "matchLabels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "The labels of match" - }, - "queryList": { - "type": "array", - "items": { - "type": "string" - }, - "title": "The query of List" - } - }, - "title": "ClusterMetricsRequest represents the request of get cluster metrics" - } - } - ], - "tags": [ - "insight" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/metricrange": { - "post": { - "operationId": "insight_QueryClusterMetricsRange", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1MetricRangeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "the name of the cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "param": { - "$ref": "#/definitions/v1alpha1BatchQueryRangeRequestParam", - "title": "The parameters of query request" - }, - "matchLabels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "The labels of match" - }, - "queryList": { - "type": "array", - "items": { - "type": "string" - }, - "title": "The query of List" - } - }, - "title": "ClusterMetricsRangeRequest represents the request of get cluster metrics range" - } - } - ], - "tags": [ - "insight" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces": { - "get": { - "summary": "ListClusterNamespaces gets all the namespaces of given cluster", - "operationId": "Core_ListClusterNamespaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterNamespacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the namespace list belong to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "workspaceId", - "description": "workspace_id the specified namespace belongs to.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "workspaceAlias", - "description": "workspace_alias the specified namespace belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name is to filter namespaces by namespace name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the job list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the job list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by cluster name or cluster alias name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phases is used for filter.\n\n - NAMESPACE_PHASE_UNSPECIFIED: The namespace state is unspecified.\n - Active: NamespaceActive means the namespace is available for use in the system\n - Terminating: NamespaceTerminating means the namespace is undergoing graceful termination", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "NAMESPACE_PHASE_UNSPECIFIED", - "Active", - "Terminating" - ], - "default": "NAMESPACE_PHASE_UNSPECIFIED" - }, - { - "name": "excludeSystem", - "description": "ExcludeSystem determines to exclude system namespaces, defaults to False.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreateNamespace creates a namespace from the system by given namespace name", - "operationId": "Core_CreateNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateNamespaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster the specified namespace belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "workspaceId": { - "type": "integer", - "format": "int32", - "description": "workspace_id the specified namespace belongs to." - }, - "workspaceAlias": { - "type": "string", - "description": "workspace_alias the specified namespace belongs to." - }, - "data": { - "type": "string", - "description": "The data is the service YAML details." - } - }, - "description": "Get Create Namespace information." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/configmaps": { - "get": { - "summary": "ListConfigMaps lists configmaps in the specified cluster and namespace.", - "operationId": "Core_ListConfigMaps", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListConfigMapsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "name is used for query.\n+optional", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "onlyMetadata", - "description": "OnlyMetadata lists only metadata of configmaps, default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreateConfigMap creates a configMap under the namespaces of a specific\ncluster", - "operationId": "Core_CreateConfigMap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateConfigMapResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "When the current namespace is named, the priority is higher than that in yaml", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the ConfigMap YAML details" - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/configmaps/{configmap}/related": { - "get": { - "summary": "ListConfigMapsRelatedWorkloads list all workloads associated with this cm", - "operationId": "Apps_ListConfigMapsRelatedWorkloads", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListConfigMapRelatedWorkloadsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "configmap", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/configmaps/{name}": { - "get": { - "summary": "GetConfigMap gets a configMap under the namespaces of a specific cluster", - "operationId": "Core_GetConfigMap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ConfigMap" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents for the resource name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeleteConfigMap deletes a configMap under the namespaces of a specific\ncluster", - "operationId": "Core_DeleteConfigMap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the metadata.name of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdateConfigMap updates a configMap under the namespaces of a specific\ncluster", - "operationId": "Core_UpdateConfigMap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateConfigMapResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents for the resource name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data The data field is the ConfigMap YAML details" - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/configmaps/{name}/json": { - "get": { - "summary": "GetConfigMapJSON gets a configMap json under the namespaces of a specific\ncluster", - "operationId": "Core_GetConfigMapJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetConfigMapJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents for the resource name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "patch": { - "summary": "PatchConfigMap patchs a configMap under the namespaces of a specific\ncluster", - "operationId": "Core_PatchConfigMap", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchConfigMapResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the configmap belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "The data is the YAML details" - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/controllerrevisions": { - "get": { - "summary": "query like controllerrevisions?kind=STATEFULSET\norcontrollerrevisions?kind=STATEFULSET", - "operationId": "Apps_ListControllerRevisions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListControllerRevisionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified controllerrevision belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified controllerrevision belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "Kind stands for what type of revisions are needed.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "StatefulSet", - "DaemonSet" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "kindName", - "description": "The name of involvedObject.\nIf the kind is StatefulSet,\nthis presents the name of statefulset.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for controllerrevision name, used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "SortDir determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronhorizontalpodautoscalers": { - "get": { - "summary": "ListCronHorizontalPodAutoscalers lists cron hpas in the specified cluster and namespace.", - "operationId": "Autoscaling_ListCronHorizontalPodAutoscalers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListCronHorizontalPodAutoscalersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "kind", - "description": "The kind of hpa targetRef.\n\n - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A hpa which targetRef kind is Deployment.\n - StatefulSet: A hpa which targetRef kind is StatefulSet.\n - ReplicaSet: A hpa which targetRef kind is ReplicaSet.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "ReplicaSet" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "name", - "description": "The workload name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - }, - "post": { - "summary": "CreateCronHorizontalPodAutoscaler creates a cron hpa by given json.", - "operationId": "Autoscaling_CreateCronHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateCronHorizontalPodAutoscalerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "When the current namespace is named, the priority is higher than that in yaml", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the hpa YAML details" - } - } - } - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronhorizontalpodautoscalers/{name}": { - "delete": { - "summary": "DeleteCronHorizontalPodAutoscaler deletes a cron hpa by given name.", - "operationId": "Autoscaling_DeleteCronHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the metadata.name of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - }, - "put": { - "summary": "UpdateCronHorizontalPodAutoscaler updates the specified cron hpa, the body must\nbe a JSON string.", - "operationId": "Autoscaling_UpdateCronHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateCronHorizontalPodAutoscalerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents for the resource name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data The data field is the hpa YAML details" - } - } - } - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronhorizontalpodautoscalers/{name}/json": { - "get": { - "summary": "GetCronHorizontalPodAutoscalerJSON gets the cron hpa by namespace and name,\nreturns a string in JSON format.", - "operationId": "Autoscaling_GetCronHorizontalPodAutoscalerJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetCronHorizontalPodAutoscalerJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced HorizontalPodAutoscaler.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "HorizontalPodAutoscaler name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "stable", - "description": "If stable is true, the v2 version under the corresponding package will be returned.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs": { - "get": { - "summary": "ListClusterCronJobs lists cluster cronJobs under the namespaces of a\nspecific cluster", - "operationId": "Batch_ListClusterCronJobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterCronJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified job belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "phase", - "description": "Status represents the current state of a job.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name of the job.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{cronjob}/jobs": { - "get": { - "summary": "ListJobsByCronJobsName lists Jobs By CronJobs's Name under the namespaces\nof a specific cluster", - "operationId": "Batch_ListJobsByCronJobsName", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListJobsByCronJobNameResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "cronjob", - "description": "Cronjob name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "phase", - "description": "Represents the current state of a cron job.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the job list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the job list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Cronjob name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{name}": { - "get": { - "summary": "GetCronJob gets a cronJob under the namespaces of a specific cluster", - "operationId": "Batch_GetCronJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CronJob" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Cronjob name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - }, - "delete": { - "summary": "DeleteCronJob deletes a cronJob under the namespaces of a specific cluster", - "operationId": "Batch_DeleteCronJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Cronjob name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{name}:pause": { - "post": { - "summary": "PauseCronJob pauses a cronjob under the namespaces of a specific\ncluster", - "operationId": "Batch_PauseCronJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PauseCronJobResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of cronjob", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "paused": { - "type": "boolean", - "description": "Paused indicates that the cronjob is paused." - } - }, - "title": "PauseCronJobRequest the request of pause cronjob" - } - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/cronjobs/{name}:resume": { - "post": { - "summary": "ResumeCronJob resumes a cronjob under the namespaces of a specific\ncluster", - "operationId": "Batch_ResumeCronJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ResumeCronJobResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the cronjob belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of cronjob", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "paused": { - "type": "boolean", - "description": "Paused indicates that the cronjob is paused." - } - }, - "title": "ResumeCronJobRequest the request of resume CronJob" - } - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets": { - "get": { - "summary": "ListDaemonSets lists daemonSet by JSON under the namespaces of a specific\ncluster", - "operationId": "Apps_ListDaemonSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDaemonSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets/{name}": { - "get": { - "summary": "GetDaemonSet gets a daemonSets under the namespaces of a specific cluster", - "operationId": "Apps_GetDaemonSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1DaemonSet" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which namespace the workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Cluster represents which namespace the workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "delete": { - "summary": "DeleteDaemonSet deletes a daemonSets under the namespaces of a specific\ncluster", - "operationId": "Apps_DeleteDaemonSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which namespace the daemonSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the daemonSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of daemonSet", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "patch": { - "summary": "PatchDaemonSet gets a daemonset under the namespaces of a specific cluster", - "operationId": "Apps_PatchDaemonSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchDaemonSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster which the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "The namespace which the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the deployment.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The json data of patch." - } - }, - "description": "The request of patching deployment." - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets/{name}:restart": { - "post": { - "summary": "RestartDaemonSet restarts a daemonSets under the namespaces of a specific\ncluster", - "operationId": "Apps_RestartDaemonSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RestartDaemonSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified daemonset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified daemonset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Daemonset name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/daemonsets/{name}:rollback": { - "post": { - "summary": "RollbackDaemonSet rollbacks a daemonSets under the namespaces of a specific\ncluster", - "operationId": "Apps_RollbackDaemonSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RollbackDaemonSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified daemonset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified daemonset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Daemonset name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "revision": { - "type": "string", - "format": "int64", - "description": "The version of Daemonset.\nRevision indicates the revision of the state represented by Data." - } - } - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments": { - "get": { - "summary": "ListDeployments lists deployment by JSON under the namespaces of a specific\ncluster", - "operationId": "Apps_ListDeployments", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListDeploymentsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}": { - "get": { - "summary": "GetDeployment gets a deployment under the namespaces of a specific cluster", - "operationId": "Apps_GetDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Deployment" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which namespace the workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Cluster represents which namespace the workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "delete": { - "summary": "DeleteDeployment deletes a deployment under the namespaces of a specific\ncluster", - "operationId": "Apps_DeleteDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "patch": { - "summary": "PatchDeployment patches a deployment under the namespaces of a\nspecific cluster", - "operationId": "Apps_PatchDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchDeploymentResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster which the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "The namespace which the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the deployment.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The json data of patch." - } - }, - "description": "The request of patching deployment." - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}:pause": { - "post": { - "summary": "PauseDeployment pauses a deployment under the namespaces of a specific\ncluster", - "operationId": "Apps_PauseDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PauseDeploymentResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}:restart": { - "post": { - "summary": "RestartDeployment restarts a deployment under the namespaces of a specific\ncluster", - "operationId": "Apps_RestartDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RestartDeploymentResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}:resume": { - "post": { - "summary": "ResumeDeployment resumes a deployment under the namespaces of a specific\ncluster", - "operationId": "Apps_ResumeDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ResumeDeploymentResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}:rollback": { - "post": { - "summary": "RollbackDeployment rollbacks a deployment under the namespaces of a\nspecific cluster", - "operationId": "Apps_RollbackDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RollbackDeploymentResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "revision": { - "type": "string", - "format": "int64", - "title": "The revision to rollback to. If set to 0, rollback to the last revision.\n+optional" - } - }, - "title": "RollbackDeploymentRequest the request of Rollback Deployment" - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}:start": { - "post": { - "summary": "StartDeployment starts a deployment under the namespace of a specific cluster", - "operationId": "Apps_StartDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1StartDeploymentResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/deployments/{name}:stop": { - "post": { - "summary": "StopDeployment starts a deployment under the namespace of a specific cluster", - "operationId": "Apps_StopDeployment", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1StopDeploymentResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/events": { - "get": { - "summary": "ListEvents lists events under the namespaces of a specific cluster", - "operationId": "Core_ListEvents", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListEventsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "Kind represents what type of event is needed.\n\n - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Deployment: ListEvents by deployment.\n - StatefulSet: ListEvents by statefulSet.\n - DaemonSet: ListEvents by daemonSet.\n - Pod: ListEvents by pod.\n - Service: ListEvents by service.\n - Ingress: ListEvents by ingress.\n - Job: ListEvents by job.\n - CronJob: ListEvents by cronJob.\n - HorizontalPodAutoscaler: ListEvents by HorizontalPodAutoscaler.\n - ReplicaSet: ListEvents by replicaset.\n - CronHPA: ListEvents by CronHPA.\n - PersistentVolumeClaim: ListEvents by PersistentVolumeClaim.\n - GroupVersionResource: ListEvents by GroupVersionResource. If kind is set to GroupVersionResource,\nyou must specify the value of group version resource.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet", - "Pod", - "Service", - "Ingress", - "Job", - "CronJob", - "HorizontalPodAutoscaler", - "ReplicaSet", - "CronHPA", - "PersistentVolumeClaim", - "GroupVersionResource" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "kindName", - "description": "The name of involvedObject.\nIf the kind is DEPLOYMENT,\nthis presents the name of deployments.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for event name, used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the event list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the event list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "type", - "description": "Type is used for query, showing events of specified type.\nUse example: type=WARNING&type=NORMAL.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "EVENT_TYPE_UNSPECIFIED", - "Normal", - "Warning" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "group", - "description": "resource group,used when the kind type is GroupVersionResource.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "version", - "description": "resource version,used when the kind type is GroupVersionResource.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "resource", - "description": "resource name,used when the kind type is GroupVersionResource.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmoperations": { - "get": { - "summary": "ListHelmOperations list operation in cluster.", - "operationId": "Addon_ListHelmOperations", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListHelmOperationsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the repository list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the repository list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "releaseName", - "description": "Filter helm_operation by release_name,\nThe release_name is exactly.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmoperations/{name}": { - "get": { - "summary": "GetHelmOperation get a operation in cluster.", - "operationId": "Addon_GetHelmOperation", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1HelmOperation" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the daemonSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - }, - "delete": { - "summary": "DeleteHelmOperation delete a operation in cluster.", - "operationId": "Addon_DeleteHelmOperation", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the daemonSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmoperations/{name}/json": { - "get": { - "summary": "GetHelmOperationJSON get a operation json in cluster.", - "operationId": "Addon_GetHelmOperationJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmOperationJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the daemonSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmreleases": { - "get": { - "summary": "ListHelmReleases lists apps in cluster.", - "operationId": "Addon_ListHelmReleases", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListHelmReleasesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the releases belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ConfigMap.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the release list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the release list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - }, - "post": { - "summary": "CreateHelmRelease creates a Release.", - "operationId": "Addon_CreateHelmRelease", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateHelmReleaseResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the chart belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helm release belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "repo": { - "type": "string", - "description": "The repo represents for the charts belongs to." - }, - "timeout": { - "type": "string", - "description": "Time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s)." - }, - "wait": { - "type": "boolean", - "description": "If set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as timeout." - }, - "atomic": { - "type": "boolean", - "description": "If set, the installation process deletes the installation on failure. The --wait flag will be set automatically if --atomic is used." - }, - "debug": { - "type": "boolean", - "description": "Enable verbose output." - }, - "disableHooks": { - "type": "boolean", - "description": "Prevent hooks from running during install." - }, - "disableOpenApiValidation": { - "type": "boolean", - "description": "If set, the installation process will not validate rendered templates against the Kubernetes OpenAPI Schema." - }, - "createNamespace": { - "type": "boolean", - "description": "Create the release namespace if not present." - }, - "checkReleaseName": { - "type": "boolean", - "description": "Check whether the release name entered during installation matches the release name in charts annotations." - }, - "chart": { - "$ref": "#/definitions/v1alpha1HelmChartInstall" - } - } - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmreleases/{helmrelease}/resources": { - "get": { - "summary": "ListHelmReleaseResources lists resources related to the specified helm release.", - "operationId": "Addon_ListHelmReleaseResources", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListHelmReleaseResourcesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "helmrelease", - "description": "Name of the helmrelease.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is used to fuzzy search resources which belongs to this helmrelease by resource name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "kind", - "description": "Kind is used to filter resources which belongs to this helmrelease by resource kind.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase is used to filter resources which belongs to this helmrelease by resource phase.\n\n - RESOURCE_PHASE_UNSPECIFIED: ResourcePhase unspecified.\n - InProgress: Resource in progress.\n - Failed: Resource failed.\n - Current: Resource current.\n - Terminating: Resource terminating.\n - Unknown: Resource unknown.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "RESOURCE_PHASE_UNSPECIFIED", - "InProgress", - "Failed", - "Current", - "Terminating", - "Unknown" - ], - "default": "RESOURCE_PHASE_UNSPECIFIED" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the resource list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "SortDir determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmreleases/{helmrelease}/revisions": { - "get": { - "summary": "ListHelmReleaseRevisions lists revisions of the specified helm release.", - "operationId": "Addon_ListHelmReleaseRevisions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListHelmReleaseRevisionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "helmrelease", - "description": "Name of the helmrelease.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmreleases/{name}": { - "get": { - "summary": "GetHelmRelease gets a release in cluster.", - "operationId": "Addon_GetHelmRelease", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1HelmRelease" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the helmrelease.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - }, - "delete": { - "summary": "DeleteHelmRelease delete a release.", - "operationId": "Addon_DeleteHelmRelease", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1DeleteHelmReleaseResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of helmrelease.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "disableHooks": { - "type": "boolean" - }, - "dryRun": { - "type": "boolean" - }, - "keepHistory": { - "type": "boolean" - }, - "timeout": { - "type": "string" - }, - "description": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Addon" - ] - }, - "put": { - "summary": "UpdateHelmRelease updates a release.", - "operationId": "Addon_UpdateHelmRelease", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateHelmReleaseResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of helmrelease.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "repo": { - "type": "string", - "description": "The repo represents for the charts belongs to." - }, - "timeout": { - "type": "string", - "description": "Time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s)." - }, - "wait": { - "type": "boolean", - "description": "If set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as timeout." - }, - "atomic": { - "type": "boolean", - "description": "If set, the installation process deletes the installation on failure. The --wait flag will be set automatically if --atomic is used." - }, - "debug": { - "type": "boolean", - "description": "Enable verbose output." - }, - "disableHooks": { - "type": "boolean", - "description": "Prevent hooks from running during install." - }, - "disableOpenApiValidation": { - "type": "boolean", - "description": "If set, the installation process will not validate rendered templates against the Kubernetes OpenAPI Schema." - }, - "force": { - "type": "boolean", - "description": "Force resource updates through a replacement strategy." - }, - "maxHistory": { - "type": "integer", - "format": "int32", - "description": "Limit the maximum number of revisions saved per release. Use 0 for no limit (default 10)." - }, - "install": { - "type": "boolean", - "description": "If a release by this name doesn't already exist, run an install." - }, - "cleanupOnFail": { - "type": "boolean", - "description": "Allow deletion of new resources created in this upgrade when upgrade fails." - }, - "chart": { - "$ref": "#/definitions/v1alpha1HelmChartUpgrade" - } - } - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmreleases/{name}/json": { - "get": { - "summary": "GetHelmReleaseJSON gets a release in cluster.", - "operationId": "Addon_GetHelmReleaseJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHelmReleaseJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the release belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/helmreleases/{name}:rollback": { - "post": { - "summary": "RollbackHelmRelease rollbacks a release.", - "operationId": "Addon_RollbackHelmRelease", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RollbackHelmReleaseResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the helmrelease belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of helmrelease.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "revision": { - "type": "integer", - "format": "int32", - "description": "Revision that needs to rollback to." - }, - "timeout": { - "type": "string", - "description": "Time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s)." - }, - "wait": { - "type": "boolean", - "description": "If set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as timeout." - }, - "debug": { - "type": "boolean", - "description": "Enable verbose output." - }, - "disableHooks": { - "type": "boolean", - "description": "Prevent hooks from running during install." - }, - "force": { - "type": "boolean", - "description": "Force resource updates through a replacement strategy." - }, - "maxHistory": { - "type": "integer", - "format": "int32", - "description": "Limit the maximum number of revisions saved per release. Use 0 for no limit (default 10)." - }, - "cleanupOnFail": { - "type": "boolean", - "description": "Allow deletion of new resources created in this upgrade when upgrade fails." - } - }, - "description": "RollbackHelmReleaseRequest rollbacks a release." - } - } - ], - "tags": [ - "Addon" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/horizontalpodautoscalers": { - "get": { - "summary": "ListHorizontalPodAutoscalers lists hpas in the specified cluster and namespace.", - "operationId": "Autoscaling_ListHorizontalPodAutoscalers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListHorizontalPodAutoscalersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "kind", - "description": "The kind of hpa targetRef.\n\n - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A hpa which targetRef kind is Deployment.\n - StatefulSet: A hpa which targetRef kind is StatefulSet.\n - ReplicaSet: A hpa which targetRef kind is ReplicaSet.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "ReplicaSet" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "name", - "description": "The workload name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - }, - "post": { - "summary": "CreateHorizontalPodAutoscaler creates a hpa by given json.", - "operationId": "Autoscaling_CreateHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateHorizontalPodAutoscalerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "When the current namespace is named, the priority is higher than that in yaml", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the hpa YAML details" - } - } - } - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/horizontalpodautoscalers/{name}": { - "delete": { - "summary": "DeleteHorizontalPodAutoscaler deletes a hpa by given name.", - "operationId": "Autoscaling_DeleteHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the metadata.name of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - }, - "put": { - "summary": "UpdateHorizontalPodAutoscaler updates the specified hpa, the body must\nbe a JSON string.", - "operationId": "Autoscaling_UpdateHorizontalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateHorizontalPodAutoscalerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced hpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents for the resource name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data The data field is the hpa YAML details" - } - } - } - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/horizontalpodautoscalers/{name}/json": { - "get": { - "summary": "GetHorizontalPodAutoscalerJSON gets the hpa by namespace and name,\nreturns a string in JSON format.", - "operationId": "Autoscaling_GetHorizontalPodAutoscalerJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetHorizontalPodAutoscalerJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced HorizontalPodAutoscaler.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "HorizontalPodAutoscaler name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "stable", - "description": "If stable is true, the v2 version under the corresponding package will be returned.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/ingresses": { - "get": { - "summary": "ListIngresses lists all ingresses in the specified cluster and namespace.", - "operationId": "Networking_ListIngresses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListIngressesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is the number of pages at the beginning.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the number of every page displayed.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy defines sort field, please see message kpanda.io.api.types.SortBy.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy defines the type of sort, default type asc, can also specify desc.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is the name of the ingress.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - }, - "post": { - "summary": "CreateIngress creates a ingress in the specified cluster and namespace.", - "operationId": "Networking_CreateIngress", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateIngressResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the ingress YAML details." - } - }, - "title": "CreateIngressRequest the request of create cluster ingresses" - } - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/ingresses/{name}": { - "get": { - "summary": "GetIngress gets the ingress by namespace and name.", - "operationId": "Networking_GetIngress", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Ingress" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of the ingress.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - }, - "delete": { - "summary": "DeleteIngress deletes the ingress by name.", - "operationId": "Networking_DeleteIngress", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of ingress.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - }, - "put": { - "summary": "UpdateIngress updates the specified ingress, the body must be a JSON\nstring.", - "operationId": "Networking_UpdateIngress", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateIngressResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the ingress YAML details." - } - }, - "title": "UpdateIngressRequest the request of update cluster ingresses" - } - } - ], - "tags": [ - "Networking" - ] - }, - "patch": { - "summary": "PatchIngress patches the specified ingress, the body must be a JSON string.", - "operationId": "Networking_PatchIngress", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchIngressResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "The data defines the update details of ingress." - } - }, - "title": "PatchIngressRequest the request of patch cluster ingresses" - } - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/ingresses/{name}/json": { - "get": { - "summary": "GetIngressJSON gets the ingress by namespace and name, returns a string in JSON\nformat.", - "operationId": "Networking_GetIngressJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetIngressJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the ingress of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of the ingress.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "stable", - "description": "If stable is true, the v1 version under the corresponding package will be returned.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/jobs": { - "get": { - "summary": "ListClusterJobs list cluster jobs under the namespaces of a specific\ncluster", - "operationId": "Batch_ListClusterJobs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterJobsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified job belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "phase", - "description": "Status represents the current state of a job.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name of the job.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/jobs/{name}": { - "get": { - "summary": "GetJob gets a job under the namespaces of a specific cluster", - "operationId": "Batch_GetJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Job" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified job belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the job.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - }, - "delete": { - "summary": "DeleteJob deletes a job under the namespaces of a specific cluster", - "operationId": "Batch_DeleteJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified job belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified job belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the job.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/jobs/{name}:restart": { - "post": { - "summary": "RestartJob restarts a job under the namespaces of a specific\ncluster", - "operationId": "Batch_RestartJob", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RestartJobResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified job belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified job belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the job.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "resourceVersion": { - "type": "string", - "description": "ResourceVersion of the job." - } - }, - "description": "Get restart job information." - } - } - ], - "tags": [ - "Batch" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/limitranges": { - "get": { - "summary": "ListLimitRanges lists all limitranges in the specified cluster and namespace.", - "operationId": "Core_ListLimitRanges", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListLimitRangesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the LimitRanges belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the LimitRanges belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for LimitRange name, used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the LimitRange list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the LimitRange list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by cluster name or cluster alias name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreateLimitRange creates a limitrange in the specified cluster and namespace.", - "operationId": "Core_CreateLimitRange", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateLimitRangeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the limitRange YAML details." - } - }, - "description": "Create LimitRange in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/limitranges/{name}": { - "get": { - "summary": "GetLimitRange gets the limitrange by namespace and name.", - "operationId": "Core_GetLimitRange", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1LimitRange" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified limitRange.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeleteLimitRange deletes the limitrange by name.", - "operationId": "Core_DeleteLimitRange", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the LimitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced LimitRange.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the LimitRange name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdateLimitRange updates the specified limitrange, the body must be a JSON\nstring.", - "operationId": "Core_UpdateLimitRange", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateLimitRangeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified limitRange.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the limitRange YAML details." - } - }, - "description": "Update LimitRange in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/limitranges/{name}/json": { - "get": { - "summary": "GetLimitRangeJSON gets the limitrange by namespace and name, returns a string in JSON format.", - "operationId": "Core_GetLimitRangeJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetLimitRangeJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified limitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the limitRange name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/limitranges:compute": { - "get": { - "summary": "ComputeLimitRange returns the final effective quota detail of multi limit range in specified namespace", - "operationId": "Core_ComputeLimitRange", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1LimitRange" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified LimitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified LimitRange belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/metricvalues": { - "get": { - "summary": "ListMetricValueList returns a list of metrics values for a given\nresource.", - "operationId": "Autoscaling_ListMetricValues", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListMetricValuesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the hpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "The kind of metrics.\n\n - Pod: The custom metrics for service.\n - Service: The custom metrics for service.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Pod", - "Service" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "kindName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "The exact name of metric.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/networkpolicies": { - "get": { - "summary": "ListNetworkPolicies lists all networkpolicies in the specified cluster and namespace.", - "operationId": "Networking_ListNetworkPolicies", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNetworkPoliciesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, return all the networkpolicies of the cluster\nbe specified.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace of networkpolicy list.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page number.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the number of every page displayed.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy defines sort field, please see message kpanda.io.api.types.SortBy.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy defines the type of sort, default type asc, can also specify desc.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is the name of the networkpolicy.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - }, - "post": { - "summary": "CreateNetworkPolicy creates a networkpolicy in the specified cluster and namespace.", - "operationId": "Networking_CreateNetworkPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateNetworkPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster to request.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of networkpolicy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the networkpolicy YAML details." - } - }, - "title": "CreateNetworkPolicyRequest the request of create cluster networkpolicies" - } - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/networkpolicies/{name}": { - "get": { - "summary": "GetNetworkPolicy gets the networkpolicy by namespace and name.", - "operationId": "Networking_GetNetworkPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1NetworkPolicy" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster to request.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specifies the namespace of networkpolicy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of the networkpolicy.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - }, - "delete": { - "summary": "DeleteNetworkPolicy deletes the networkpolicy by name.", - "operationId": "Networking_DeleteNetworkPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster to request.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of networkpolicy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of networkpolicy.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - }, - "put": { - "summary": "UpdateNetworkPolicy updates the specified networkpolicy, the body must be a JSON\nstring.", - "operationId": "Networking_UpdateNetworkPolicy", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateNetworkPolicyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster to request.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of networkpolicy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of networkpolicy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the networkpolicy YAML details." - } - }, - "title": "UpdateNetworkPolicyRequest the request of update cluster networkpolicies" - } - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/networkpolicies/{name}/json": { - "get": { - "summary": "GetNetworkPolicyJSON gets the networkpolicy by namespace and name, returns a string in JSON\nformat.", - "operationId": "Networking_GetNetworkPolicyJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetNetworkPolicyJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster to request.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace specified the namespace of networkpolicy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the name of the networkpolicy.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "stable", - "description": "If stable is true, the v1 version under the corresponding package will be returned.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/persistentvolumeclaims": { - "get": { - "summary": "ListPersistentVolumeClaims gets the pvcs from the system", - "operationId": "Core_ListPersistentVolumeClaims", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPersistentVolumeClaimsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for fuzzy search by name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phases is used for fuzzy search by phase.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "accessMode", - "description": " - PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - ReadWriteOnce: ReadWriteOnce can be mounted in read/write mode to exactly 1 host.\n - ReadOnlyMany: ReadOnlyMany can be mounted in read-only mode to many hosts.\n - ReadWriteMany: ReadWriteMany can be mounted in read/write mode to many hosts.\n - ReadWriteOncePod: ReadWriteOncePod can be mounted in read/write mode to exactly 1 pod.\nReadWriteOncePod cannot be used in combination with other access modes.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED", - "ReadWriteOnce", - "ReadOnlyMany", - "ReadWriteMany", - "ReadWriteOncePod" - ], - "default": "PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreatePersistentVolumeClaim create persistent volume claim", - "operationId": "Core_CreatePersistentVolumeClaim", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreatePersistentVolumeClaimResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the pvc YAML details" - } - }, - "description": "CreatePersistentVolumeClaimRequest represents the request of create PVC in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/persistentvolumeclaims/{name}": { - "get": { - "summary": "GetPersistentVolumeClaim gets a pvc from the system by given pvc-name;", - "operationId": "Core_GetPersistentVolumeClaim", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaim" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of PVC to search", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeletePersistentVolumeClaim delete the specified pvc", - "operationId": "Core_DeletePersistentVolumeClaim", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdatePersistentVolumeClaim update the persistent volume claim", - "operationId": "Core_UpdatePersistentVolumeClaim", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdatePersistentVolumeClaimResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data represents the data of PVC JSON" - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/persistentvolumeclaims/{name}/annotations": { - "put": { - "summary": "UpdatePersistentVolumeClaimAnnotations puts the specified pvc's annotations", - "operationId": "Core_UpdatePersistentVolumeClaimAnnotations", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdatePersistentVolumeClaimAnnotationsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "labels represents the labels of pvc" - } - }, - "title": "UpdatePersistentVolumeClaimAnnotationsRequest represents the request of put pvc's AnnotationsRequest" - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/persistentvolumeclaims/{name}/json": { - "get": { - "summary": "GetPersistentVolumeClaimJSON get the specified pvc's JSON", - "operationId": "Core_GetPersistentVolumeClaimJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetPersistentVolumeClaimJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of PVC to search", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/persistentvolumeclaims/{name}/labels": { - "put": { - "summary": "UpdatePersistentVolumeClaimLabels puts the specified pvc's labels", - "operationId": "Core_UpdatePersistentVolumeClaimLabels", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdatePersistentVolumeClaimLabelsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of PVC to search", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "labels represents the labels of pvc" - } - }, - "title": "UpdatePersistentVolumeClaimLabelsRequest represents the request of put pvc's labels" - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/persistentvolumeclaims/{name}:scale": { - "post": { - "summary": "ScalePersistentVolumeClaim post scale the persistent volume claim capacity", - "operationId": "Core_ScalePersistentVolumeClaim", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ScalePersistentVolumeClaimResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of PVC belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "capacity": { - "type": "string", - "title": "capacity represents the capacity of PVC" - } - }, - "title": "UpdateScalePersistentVolumeClaimRequest represents the request of scale Pvc" - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods": { - "get": { - "summary": "ListPods will list all pod by given cluster and namespace", - "operationId": "Core_ListPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "kind", - "description": "The kind of pod.\n\n - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A Deployment provides declarative updates for Pods and ReplicaSets.\n - StatefulSet: StatefulSet is the workload API object used to manage stateful\napplications.\n - DaemonSet: A DaemonSet ensures that all (or some) Nodes run a copy of a Pod.\n - Service: Service to expose an application running on a set of Pods.\n - Job: Job is used to express a one-time task.\n - CronJob: CronJob runs repeatedly according to its time schedule.\n - ReplicaSet: ReplicaSet is the workload API object used to manage pods\n - NetworkPolicy: NetworkPolicy uses podSelector to select pods.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet", - "Service", - "Job", - "CronJob", - "ReplicaSet", - "NetworkPolicy" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "kindName", - "description": "Name of kind.\nIf the kind is Deployment,\nthis presents the name of the deployment.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for pod name, used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phases is used for filter.\n\n - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Unknown", - "Pending", - "Running", - "Succeeded", - "Failed" - ], - "default": "PHASE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "description": "status is filter with pod status ,the status is composite state", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "FILTER_POD_STATUS_UNSPECIFIED", - "FILTER_POD_STATUS_RUNNING", - "FILTER_POD_STATUS_ERROR", - "FILTER_POD_STATUS_COMPLETED", - "FILTER_POD_STATUS_WAITING" - ], - "default": "FILTER_POD_STATUS_UNSPECIFIED" - }, - { - "name": "gpuType", - "description": "gpu_type is filter with pods resources, when value is * search all", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods/{name}": { - "get": { - "summary": "GetPods will get a pod under the namespaces of a specific cluster by pods", - "operationId": "Core_GetPod", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Pod" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Pod name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeletePod deletes a pod under the namespaces of a specific cluster", - "operationId": "Core_DeletePod", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Pod name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods/{name}/containers": { - "get": { - "summary": "ListContainersByPod lists containers under the namespaces of a specific\ncluster by pods", - "operationId": "Core_ListContainersByPod", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodContainerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of pod to search", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/pods/{name}/log": { - "get": { - "summary": "GetPodContainerLog gets pod contianer log", - "operationId": "insight_GetPodContainerLog", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetPodContainerLogResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Name of the cluster where the Pod is located", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Name of the namespace where the Pod is located", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of pod", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "workload", - "description": "workload refers to the name of a workload", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "container", - "description": "Name of the pod where the container is located", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "startTime", - "description": "Start time of get pod container log", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "endTime", - "description": "End time of get pod container log", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Number of page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Log number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "logSearch", - "description": "for fuzzy query", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "insight" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/replicasets": { - "get": { - "summary": "ListReplicaSets lists replicasets in specified namespace of a cluster", - "operationId": "Apps_ListReplicaSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListReplicaSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of replicaset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the replicaset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "Kind stands for what type of replicasets are needed.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "kindName", - "description": "The name of involvedObject.\nIf the kind is Deployment,\nthis presents the name of deployments.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for replicaset name, used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "SortDir determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "PageSize is size of every page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/replicasets/{name}": { - "get": { - "summary": "GetReplicaSet gets replicaset detail in specified namespace of a cluster", - "operationId": "Apps_GetReplicaSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ReplicaSet" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified replicaSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified replicaSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified replicaSet.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "delete": { - "summary": "DeleteReplicaSet deletes a replicaset in specified namespace of a cluster", - "operationId": "Apps_DeleteReplicaSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the ReplicaSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ReplicaSet.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the ReplicaSet name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "put": { - "summary": "UpdateReplicaSet updates a replicaset in specified namespace of a cluster", - "operationId": "Apps_UpdateReplicaSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateReplicaSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified replicaSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified replicaSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified replicaSet.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the replicaSet YAML details." - } - }, - "description": "Update ReplicaSet in the cluster." - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/replicasets/{name}/json": { - "get": { - "summary": "GetReplicaSetJSON gets replicaset yaml in specified namespace of a cluster", - "operationId": "Apps_GetReplicaSetJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetReplicaSetJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified replicaSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified replicaSet belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the replicaSet name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/resourcequotas": { - "get": { - "summary": "ListResourceQuotas lists quotas in specified namespace", - "operationId": "Core_ListResourceQuotas", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListResourceQuotasResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the ResourceQuotas belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the ResourceQuotas belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for ResourceQuota name, used for name fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the ResourceQuota list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the ResourceQuota list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by cluster name or cluster alias name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreateResourceQuota creates a resourceQuota to the system by given resourceQuota data", - "operationId": "Core_CreateResourceQuota", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateResourceQuotaResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the resourceQuota YAML details." - } - }, - "description": "Create ResourceQuota in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/resourcequotas/{name}": { - "get": { - "summary": "GetResourceQuota gets a resourceQuota from the system by given resourceQuota name", - "operationId": "Core_GetResourceQuota", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ResourceQuota" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified resourceQuota.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdateResourceQuota updates a resourceQuota from the system by given resourceQuota name", - "operationId": "Core_UpdateResourceQuota", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateResourceQuotaResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified resourceQuota.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the resourceQuota YAML details." - } - }, - "description": "Update ResourceQuota in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/resourcequotas/{name}/json": { - "get": { - "summary": "GetResourceQuotaJSON gets a resourceQuota json from the system by given resourceQuota name", - "operationId": "Core_GetResourceQuotaJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetResourceQuotaJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified resourceQuota belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the resourceQuota name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/resourcequotas:compute": { - "get": { - "summary": "ComputeResourceQuota returns the final effective quota detail of multi quotas in specified namespace", - "operationId": "Core_ComputeResourceQuota", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ResourceQuota" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified resourceQuotas belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified resourceQuotas belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/resources": { - "post": { - "summary": "CreateResource creates a list of resources of a given yaml", - "operationId": "Apiextensions_CreateResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the resources belong to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the resources belong to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The data field is the resource YAML details." - } - }, - "title": "CreateResourceRequest represents create request to create resources from yaml" - } - } - ], - "tags": [ - "Apiextensions" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/rolebindings": { - "post": { - "summary": "CreateRoleBinding creates a RoleBinding", - "operationId": "RBAC_CreateRoleBinding", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RoleBinding" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the roleBinding belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the roleBinding belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "subject": { - "$ref": "#/definitions/v1alpha1Subject", - "description": "Subject holds references to the objects the role applies to." - }, - "roleRef": { - "$ref": "#/definitions/v1alpha1RoleRef", - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in\nthe global namespace. If the RoleRef cannot be resolved, the Authorizer\nmust return an error." - }, - "name": { - "type": "string", - "description": "the name of RoleBinding." - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "ownerReferences": { - "type": "array", - "items": { - "$ref": "#/definitions/typesOwnerReference" - } - } - } - } - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/rolebindings/{name}": { - "delete": { - "summary": "ListRoleBindings lists the clusterrolebidings created by the frontend.", - "operationId": "RBAC_DeleteRoleBinding", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the roleBinding belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the roleBinding belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the rolebinding to delete.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/roles": { - "get": { - "summary": "ListRoles lists the roles created by frontend.", - "operationId": "RBAC_ListRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of the user", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - }, - "post": { - "summary": "CreateRole creates a Role", - "operationId": "RBAC_CreateRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/rbacv1alpha1Role" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string" - }, - "name": { - "type": "string", - "description": "the name of role." - } - } - } - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/roles/{name}": { - "get": { - "summary": "GetRole gets a Role", - "operationId": "RBAC_GetRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/rbacv1alpha1Role" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the role to delete.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - }, - "delete": { - "summary": "DeleteRole deletes the roles created by the frontend.", - "operationId": "RBAC_DeleteRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the role to delete.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - }, - "put": { - "summary": "UpdateRole updates a Role", - "operationId": "RBAC_UpdateRole", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateRoleResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the role belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of the role to delete.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - }, - "title": "UpdateRoleRequest the request of update role" - } - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/secrets": { - "get": { - "summary": "ListSecrets lists a secret under the namespaces of a specific cluster", - "operationId": "Core_ListSecrets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListSecretsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced secret.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "The name use to search specific secret", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "type", - "description": "Type is used to filter secrets by type.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "onlyMetadata", - "description": "OnlyMetadata lists only metadata of secrets, default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreateSecret creates a secret under the namespaces of a specific cluster", - "operationId": "Core_CreateSecret", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateSecretResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "When the current namespace is named, the priority is higher than that in yaml", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the Secret YAML details" - } - }, - "description": "Create Secret in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/secrets/{name}": { - "get": { - "summary": "GetClusterSecret gets a secret under the namespaces of a specific cluster", - "operationId": "Core_GetSecret", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Secret" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced secret.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Secret name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeleteSecret deletes a secret under the namespaces of a specific cluster", - "operationId": "Core_DeleteSecret", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced secret.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Secret name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdateSecret updates secret under the namespaces of a specific cluster", - "operationId": "Core_UpdateSecret", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateSecretResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced secret.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Secret name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the Secret YAML details" - } - }, - "description": "Update Secret in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/secrets/{name}/json": { - "get": { - "summary": "GetSecretJSON gets a secret json under the namespaces of a specific cluster", - "operationId": "Core_GetSecretJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetSecretJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced secret.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Secret name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "patch": { - "summary": "PatchSecret patchs a Secret under the namespaces of a specific cluster", - "operationId": "Core_PatchSecret", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchSecretResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced secret.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "The data is the secret YAML details." - } - }, - "description": "Patches the current secret." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/secrets/{secret}/related": { - "get": { - "summary": "ListSecretsRelatedWorkloads list all workloads associated with this secret", - "operationId": "Apps_ListSecretsRelatedWorkloads", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListSecretRelatedWorkloadsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "secret", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/serviceaccounts": { - "post": { - "summary": "CreateServiceAccount creates a sa from the system by given sa name", - "operationId": "Core_CreateServiceAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateServiceAccountResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents the cluster of ServiceAccount to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the ServiceAccount YAML details" - } - }, - "description": "CreateStorageClassRequest represents the request of create ServiceAccount in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/serviceaccounts/{name}": { - "get": { - "summary": "GetServiceAccount gets a sa from the system by given sa\nname", - "operationId": "Core_GetServiceAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ServiceAccount" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced ServiceAccount.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of ServiceAccount to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeleteServiceAccount deletes a sa from the system by given sa name", - "operationId": "Core_DeleteServiceAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the ServiceAccount belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of StorageClass", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/services": { - "get": { - "summary": "ListServices lists services in the specified cluster and namespace", - "operationId": "Core_ListServices", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListServicesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "The kind of service.\nIf the kind is Deployment,\nthis presents the name of the deployment.\n\n - Deployment: A Deployment provides declarative updates for Pods and ReplicaSets.\n - StatefulSet: StatefulSet is the workload API object used to manage stateful\napplications.\n - DaemonSet: A DaemonSet ensures that all (or some) Nodes run a copy of a Pod.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "kindName", - "description": "Name of kind.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for service name, used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the service list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the service list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "type", - "description": "Type is a array used for frontend filter.\nUse examples: type=CLUSTER_IP&type=NODE_PORT.\n\n - SERVICE_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - ClusterIP: ClusterIP means a service will only be accessible inside the cluster, via\nthe cluster IP.\n - NodePort: NodePort means a service will be exposed on one port of every node, in\naddition to 'ClusterIP' type.\n - LoadBalancer: LoadBalancer means a service will be exposed via an external load balancer\n(if the cloud provider supports it), in addition to 'NodePort' type.\n - ExternalName: ExternalName means a service consists of only a reference to an external\nname that kubedns or equivalent will return as a CNAME record, with no\nexposing or proxying of any pods involved.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "ClusterIP", - "NodePort", - "LoadBalancer", - "ExternalName" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "ports", - "description": "Ports is used to filter by port.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "integer", - "format": "int32" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreateService creates a service to the system by given service data", - "operationId": "Core_CreateService", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateServiceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "When the current namespace is named, the priority is higher than that in\nyaml", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "Data is the Service YAML details" - } - }, - "description": "Create Service in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/services/{name}": { - "get": { - "summary": "GetService gets a service from the system by given service name", - "operationId": "Core_GetService", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Service" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the service name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeleteService deletes a service from the system by given service name", - "operationId": "Core_DeleteService", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced service.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the service name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdateService updates a service from the system by given service name", - "operationId": "Core_UpdateService", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateServiceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the service name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "Data is the Service YAML details" - } - }, - "description": "Update the Service information." - } - } - ], - "tags": [ - "Core" - ] - }, - "patch": { - "summary": "PatchService patches a service from the system by given service name", - "operationId": "Core_PatchService", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchServiceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The json data of patch." - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/services/{name}/json": { - "get": { - "summary": "GetServiceJSON gets a service json from the system by given service name", - "operationId": "Core_GetServiceJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetServiceJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the service name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets": { - "get": { - "operationId": "Apps_ListStatefulSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListStatefulSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}": { - "get": { - "summary": "GetStatefulSet gets a statefulSets under the namespaces of a specific\ncluster", - "operationId": "Apps_GetStatefulSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1StatefulSet" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which namespace the workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Cluster represents which namespace the workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "delete": { - "summary": "DeleteStatefulSet deletes a statefulSet under the namespaces of a specific\ncluster", - "operationId": "Apps_DeleteStatefulSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of deployment", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - }, - "patch": { - "summary": "PatchStatefulSet update a statefulSet under the namespaces of a specific\ncluster", - "operationId": "Apps_PatchStatefulSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchStatefulSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster which the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "The namespace which the deployment belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the deployment.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The json data of patch." - } - }, - "description": "The request of patching deployment." - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}:restart": { - "post": { - "summary": "RestartStatefulSet restarts a statefulSet under the namespaces of a\nspecific cluster", - "operationId": "Apps_RestartStatefulSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RestartStatefulSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "StatefulSet name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}:rollback": { - "post": { - "summary": "RollbackStatefulSet rollbacks a statefulSet under the namespaces of a\nspecific cluster", - "operationId": "Apps_RollbackStatefulSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1RollbackStatefulSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace the specified statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "StatefulSet name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "revision": { - "type": "string", - "format": "int64", - "description": "Revision indicates the revision of the state represented by Data." - } - } - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}:start": { - "post": { - "summary": "StartStatefulSet starts a statefulset under the namespace of a specific cluster", - "operationId": "Apps_StartStatefulSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1StartStatefulSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of statefulset.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/statefulsets/{name}:stop": { - "post": { - "summary": "StopStatefulSet starts a statefulset under the namespace of a specific cluster", - "operationId": "Apps_StopStatefulSet", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1StopStatefulSetResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the statefulset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of statefulset.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/verticalpodautoscalers": { - "get": { - "summary": "ListVerticalPodAutoscalers lists vpas in the specified cluster and namespace.", - "operationId": "Autoscaling_ListVerticalPodAutoscalers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListVerticalPodAutoscalersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the vpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced vpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "kind", - "description": "The kind of vpa targetRef.\n\n - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A vpa which targetRef kind is Deployment.\n - StatefulSet: A vpa which targetRef kind is StatefulSet.\n - DaemonSet: A vpa which targetRef kind is DaemonSet.\n - ReplicaSet: A vpa which targetRef kind is ReplicaSet.\n - Job: A vpa which targetRef kind is Job.\n - CronJob: A vpa which targetRef kind is CronJob.\n - ReplicationController: A vpa which targetRef kind is ReplicationController.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet", - "ReplicaSet", - "Job", - "CronJob", - "ReplicationController" - ], - "default": "KIND_UNSPECIFIED" - }, - { - "name": "kindName", - "description": "The name of the targetRef.\nIf the kind is StatefulSet, this presents the name of statefulset.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - }, - "post": { - "summary": "CreateVerticalPodAutoscaler creates a vpa by given json.", - "operationId": "Autoscaling_CreateVerticalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateVerticalPodAutoscalerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified vpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace of the vpa.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the vpa YAML details." - } - }, - "description": "CreateVerticalPodAutoscalerRequest requests to create a vpa." - } - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/verticalpodautoscalers/{name}": { - "delete": { - "summary": "DeleteVerticalPodAutoscaler deletes a vpa by given name.", - "operationId": "Autoscaling_DeleteVerticalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the vpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced vpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the metadata.name of the vpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Autoscaling" - ] - }, - "put": { - "summary": "UpdateVerticalPodAutoscaler updates the specified vpa, the body must\nbe a JSON string.", - "operationId": "Autoscaling_UpdateVerticalPodAutoscaler", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateVerticalPodAutoscalerResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified vpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced vpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the vpa YAML details." - } - }, - "description": "UpdateVerticalPodAutoscalerRequest requests to update a vpa." - } - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/verticalpodautoscalers/{name}/json": { - "get": { - "summary": "GetVerticalPodAutoscalerJSON gets a vpa by namespace and name, returning a string in JSON format.", - "operationId": "Autoscaling_GetVerticalPodAutoscalerJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetVerticalPodAutoscalerJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the vpa belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace of the vpa.\nThis field is required in all cases.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the vpa.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "stable", - "description": "If stable is true, the v2 version under the corresponding package will be returned.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Autoscaling" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/volumesnapshots": { - "get": { - "summary": "ListVolumeSnapshots list volume snapshot in single cluster", - "operationId": "Storage_ListVolumeSnapshots", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListVolumeSnapshotsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of VolumeSnapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the VolumeSnapshot belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - }, - "post": { - "summary": "CreateVolumeSnapshot create volume snapshot in single cluster", - "operationId": "Storage_CreateVolumeSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateVolumeSnapshotResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of VolumeSnapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of VolumeSnapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "name represents the name of VolumeSnapshot to snapshot belongs to." - } - }, - "description": "CreateVolumeSnapshotRequest represents the request of create VolumeSnapshot Snapshot in the cluster." - } - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/volumesnapshots/{name}": { - "delete": { - "summary": "DeleteVolumeSnapshot delete volume snapshot in single cluster", - "operationId": "Storage_DeleteVolumeSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of VolumeSnapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of VolumeSnapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of VolumeSnapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - }, - "put": { - "summary": "UpdateVolumeSnapshot update volume snapshot", - "operationId": "Storage_UpdateVolumeSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateVolumeSnapshotResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of Volume snapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "namespace represents the namespace of volume snapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of volume snapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data represents the data of volume snapshot JSON" - } - }, - "description": "UpdateVolumeSnapshotRequest represents the request of update volume snapshot." - } - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/volumesnapshots/{name}/json": { - "get": { - "summary": "GetVolumeSnapshotJSON list StorageClass in single cluster", - "operationId": "Storage_GetVolumeSnapshotJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetVolumeSnapshotJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of VolumeSnapshots belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the VolumeSnapshots belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of VolumeSnapshots to search", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/{kind}/json": { - "post": { - "summary": "CreateWorkloadByJSON creates workload by JSON under the namespaces of a\nspecific cluster", - "operationId": "Apps_CreateWorkloadByJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1WorkloadJSON" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the Workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the Workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "WorkloadKind the workload of kind", - "in": "path", - "required": true, - "type": "string", - "enum": [ - "deployments", - "statefulsets", - "daemonsets", - "jobs", - "cronjobs", - "pods", - "replicasets" - ] - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data The data field is the Workload YAML details" - } - }, - "title": "CreateWorkloadByJSONRequest the request of create workload by JSON request" - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/{kind}/{name}/json": { - "get": { - "summary": "GetWorkloadJSON gets workload by JSON under the namespaces of a specific\ncluster", - "operationId": "Apps_GetWorkloadJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1WorkloadJSON" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the Workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the Workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "WorkloadKind the workload of kind", - "in": "path", - "required": true, - "type": "string", - "enum": [ - "deployments", - "statefulsets", - "daemonsets", - "jobs", - "cronjobs", - "pods", - "replicasets" - ] - }, - { - "name": "name", - "description": "Name represents the name of Workload", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "stable", - "description": "If stable is true, the v1 version under the corresponding package will be returned.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Apps" - ] - }, - "put": { - "summary": "UpdateWorkloadByJSON updates workload by JSON under the namespaces of a\nspecific cluster", - "operationId": "Apps_UpdateWorkloadByJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1WorkloadJSON" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the Workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the Workload belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "kind", - "description": "WorkloadKind the workload of kind", - "in": "path", - "required": true, - "type": "string", - "enum": [ - "deployments", - "statefulsets", - "daemonsets", - "jobs", - "cronjobs", - "pods", - "replicasets" - ] - }, - { - "name": "name", - "description": "Name represents the name of Workload", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data The data field is the Workload YAML details" - } - }, - "title": "UpdateWorkloadByJSONRequest request of update workload by JSON request" - } - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{name}": { - "get": { - "summary": "GetNamespace gets a namespace from the system by given namespace\nname", - "operationId": "Core_GetNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Namespace" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the namespace belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Node name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeleteNamespace deletes a namespace from the system by given namespace name", - "operationId": "Core_DeleteNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified namespace belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdateNamespace updates a namespace from the system by given namespace name", - "operationId": "Core_UpdateNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateNamespaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified namespace belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the namespace YAML details." - } - }, - "description": "Update Namespace information." - } - } - ], - "tags": [ - "Core" - ] - }, - "patch": { - "summary": "PatchNamespace patches a namespace from the system by given namespace name", - "operationId": "Core_PatchNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PatchNamespaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified namespace belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "The data is the namespace YAML details." - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{name}/json": { - "get": { - "summary": "GetNamespaceJSON gets a namespace json from the system by given namespace\nname", - "operationId": "Core_GetNamespaceJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetNamespaceJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the namespace belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the requested namespace name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{name}/podsecurity:disable": { - "post": { - "summary": "DisableNamespacePodSecurity enables pod security policy of a namespace", - "operationId": "Core_DisableNamespacePodSecurity", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Namespace" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster of the namespace.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "description": "DisableNamespacePodSecurityRequest requests to remove pod security labels of a namespace." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{name}/podsecurity:enable": { - "post": { - "summary": "EnableNamespacePodSecurity enables pod security policy of a namespace", - "operationId": "Core_EnableNamespacePodSecurity", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Namespace" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster of the namespace.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the resource name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "podSecurity": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PodSecurity" - }, - "description": "PodSecurity is a list of label combinations of mode plus level." - } - }, - "description": "EnableNamespacePodSecurityRequest request to enable pod security of a namespace." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{name}:bind": { - "post": { - "operationId": "Workspace_BindResourceToWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1BindResourceToWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "workspaceAlias": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespaces/{name}:unbind": { - "delete": { - "operationId": "Workspace_UnbindResourceFromWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UnbindResourceFromWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "workspaceAlias": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/namespacesummary": { - "get": { - "summary": "ListClusterNamespaceSummary gets a list of namespace simple information\nfrom the system by given cluster name", - "operationId": "Core_ListClusterNamespaceSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterNamespaceSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the namespace summary list belong to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "phase", - "description": "Phases is used for filter.\n\n - NAMESPACE_PHASE_UNSPECIFIED: The namespace state is unspecified.\n - Active: NamespaceActive means the namespace is available for use in the system\n - Terminating: NamespaceTerminating means the namespace is undergoing graceful termination", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "NAMESPACE_PHASE_UNSPECIFIED", - "Active", - "Terminating" - ], - "default": "NAMESPACE_PHASE_UNSPECIFIED" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/networkpolicies": { - "get": { - "summary": "ListClusterNetworkPolicies lists all networkpolicies in the specified cluster.", - "operationId": "Networking_ListClusterNetworkPolicies", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterNetworkPoliciesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the name of the cluster, must be specified,\nwill return all the networkpolicies of the cluster.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page number.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the number of every page displayed.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy defines sort field, please see message kpanda.io.api.types.SortBy.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy defines the type of sort, default type asc, can also specify desc.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is the name of the networkpolicy.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Networking" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes": { - "get": { - "summary": "ListNodes lists the node in specified cluster", - "operationId": "Core_ListNodes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNodesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "phase", - "description": "Phase represents the current phase of node.\n\n - NODE_PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Ready: The node is ready to work.\n - Not_Ready: The node is not ready.\n - Unknown: The node state is unknown.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "NODE_PHASE_UNSPECIFIED", - "Ready", - "Not_Ready", - "Unknown" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "nodeIp", - "description": "nodeIp represents node's ip address", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the job list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the job list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is to filter nodes by node name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "role", - "description": "Role is used for filter by node role.\n\n - NODE_ROLE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - CONTROL_PLANE: The control plane manages the worker nodes and the Pods in the cluster.\n - WORKER: The worker node(s) host the Pods that are the components of the\napplication workload.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "NODE_ROLE_UNSPECIFIED", - "CONTROL_PLANE", - "WORKER" - ], - "default": "NODE_ROLE_UNSPECIFIED" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "excludeMetrics", - "description": "exclude_metrics\nIf false, contains metrics-related information\nIf true, metrics-related information is not included", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{name}": { - "get": { - "summary": "GetNode gets a node from the system by given node name", - "operationId": "Core_GetNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Node" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Node name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "showPods", - "description": "ShowPods is to control whether returned data contains\nnode.status.PodAllocated. Default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "excludeMetrics", - "description": "exclude_metrics\nIf false, contains metrics-related information\nIf true, metrics-related information is not included", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdateNode updates a node from the system by given node name", - "operationId": "Core_UpdateNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateNodeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name represents for the node name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the node YAML details." - } - }, - "description": "UpdateNodeRequest requests to update a node." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{name}/json": { - "get": { - "summary": "GetNodeJSON gets a node's json from the system by given node name", - "operationId": "Core_GetNodeJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetNodeJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the node name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{name}:unbindNamespace": { - "post": { - "summary": "UnbindNodeToNamespace makes the specified node to shared.", - "operationId": "Core_UnbindNodeToNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UnbindNodeToNamespaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the cluster for namespace and node.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is the node name for node which needs to\nbe unbound with namespace.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "Namespace is the namespace for node to unbind." - } - }, - "description": "UnbindNodeToNamespaceRequest is the request for node unbind namespace." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/annotations": { - "put": { - "summary": "UpdateNodeAnnotations edits annotations of specified node.", - "operationId": "Core_UpdateNodeAnnotations", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateNodeAnnotationsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "description": "Node name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations requested." - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/cordon": { - "post": { - "summary": "CordonNode makes the specified node to unschedulable.", - "operationId": "Core_CordonNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Node" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "description": "Node name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/gpu-mode": { - "put": { - "summary": "UpdateNodeGPUMode updates single the gpu mode with cluster node", - "operationId": "Core_UpdateNodeGPUMode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateNodeGPUModeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "mode": { - "$ref": "#/definitions/v1alpha1GPUModel" - }, - "migSpec": { - "$ref": "#/definitions/v1alpha1MIGModeSpec" - } - } - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/gpu-stats": { - "get": { - "summary": "GetNodeGPUStats get node gpu stats", - "operationId": "Core_GetNodeGPUStats", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetNodeGPUStatsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/gpus": { - "get": { - "summary": "listNodeGPU gets all the gpu info with cluster node", - "operationId": "Core_ListNodeGPU", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListNodeGPUResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/labels": { - "put": { - "summary": "PutNodeLabels puts the specified node's labels", - "operationId": "Core_PutNodeLabels", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PutNodeLabelsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "description": "Node name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "the labels of node." - } - }, - "description": "PutNodeLabels put node's labels." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/pods": { - "get": { - "summary": "ListPodsByNode lists pods info by given node in a specific\ncluster", - "operationId": "Core_ListPodsByNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsByNodeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "description": "Node represents which node the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name is to filter pods by pod name", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the job list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the job list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "description": "status is filter with pod status ,the status is composite state", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "FILTER_POD_STATUS_UNSPECIFIED", - "FILTER_POD_STATUS_RUNNING", - "FILTER_POD_STATUS_ERROR", - "FILTER_POD_STATUS_COMPLETED", - "FILTER_POD_STATUS_WAITING" - ], - "default": "FILTER_POD_STATUS_UNSPECIFIED" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/taints": { - "put": { - "summary": "PutNodeTaints puts a node's taints in a specific cluster", - "operationId": "Core_PutNodeTaints", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PutNodeTaintsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "// Cluster the specified node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "description": "Node name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "taints": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Taint" - }, - "description": "If specified, the node's taints." - } - }, - "description": "PutNodeTaints put node's taints." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes/{node}/uncordon": { - "post": { - "summary": "UnCordonNode makes the specified node to schedulable.", - "operationId": "Core_UnCordonNode", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Node" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified node belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "node", - "description": "Node name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodes:batchBindNamespace": { - "post": { - "summary": "BatchBindNodeToNamespace makes the specified node to exclusive.", - "operationId": "Core_BatchBindNodeToNamespace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1BatchBindNodeToNamespaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the cluster for namespace and node.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "Namespace is the namespace for node to be bound." - }, - "nodeNames": { - "type": "array", - "items": { - "type": "string" - }, - "description": "NodeNames is the list of node name which\nneeds to be bound with namespace." - } - }, - "description": "BatchBindNamespaceRequest is the request for node bind namespaces." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/nodesummary": { - "get": { - "summary": "ListClusterNodeSummary lists the node summary in specified cluster", - "operationId": "Core_ListClusterNodeSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterNodeSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/persistentvolumeclaims": { - "get": { - "summary": "ListPersistentVolumeClaims gets the pvcs from the system", - "operationId": "Core_ListClusterPersistentVolumeClaims", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterPersistentVolumeClaimsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "accessMode", - "description": "AccessMode is used searching PVC by accessMode.\n\n - PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - ReadWriteOnce: ReadWriteOnce can be mounted in read/write mode to exactly 1 host.\n - ReadOnlyMany: ReadOnlyMany can be mounted in read-only mode to many hosts.\n - ReadWriteMany: ReadWriteMany can be mounted in read/write mode to many hosts.\n - ReadWriteOncePod: ReadWriteOncePod can be mounted in read/write mode to exactly 1 pod.\nReadWriteOncePod cannot be used in combination with other access modes.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED", - "ReadWriteOnce", - "ReadOnlyMany", - "ReadWriteMany", - "ReadWriteOncePod" - ], - "default": "PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/persistentvolumes": { - "get": { - "summary": "ListPersistentVolumes lists persistentvolumes in the specified cluster", - "operationId": "Core_ListPersistentVolumes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPersistentVolumesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the PersistentVolumes belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name stands for PersistentVolume name, used for fuzzy search.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the PersistentVolume list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the PersistentVolume list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by cluster name or cluster alias name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "post": { - "summary": "CreatePersistentVolume creates a persistentvolume to the system by given persistentvolume data", - "operationId": "Core_CreatePersistentVolume", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreatePersistentVolumeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified persistentVolume belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the persistentVolume YAML details." - } - }, - "description": "Create PersistentVolume in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/persistentvolumes/{name}": { - "get": { - "summary": "GetPersistentVolume gets a persistentvolume from the system by given persistentvolume name", - "operationId": "Core_GetPersistentVolume", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1PersistentVolume" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified persistentVolume belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified persistentVolume.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "delete": { - "summary": "DeletePersistentVolume deletes a persistentvolume from the system by given persistentvolume name", - "operationId": "Core_DeletePersistentVolume", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the PersistentVolume belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the PersistentVolume name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - }, - "put": { - "summary": "UpdatePersistentVolume updates a persistentvolume from the system by given persistentvolume name", - "operationId": "Core_UpdatePersistentVolume", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdatePersistentVolumeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified persistentVolume belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name of the specified persistentVolume.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the persistentVolume YAML details." - } - }, - "description": "Update PersistentVolume in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/persistentvolumes/{name}/json": { - "get": { - "summary": "GetPersistentVolumeJSON gets a persistentvolume json from the system by given persistentvolume name", - "operationId": "Core_GetPersistentVolumeJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetPersistentVolumeJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified persistentVolume belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents for the persistentVolume name.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/pods": { - "get": { - "summary": "ListClusterPods will list all pod by given cluster and regardless of\nnamespaces", - "operationId": "Core_ListClusterPods", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPodsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the pod belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phases is used for filter.\n\n - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Unknown", - "Pending", - "Running", - "Succeeded", - "Failed" - ], - "default": "PHASE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "status", - "description": "status is filter with pod status ,the status is composite state", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "FILTER_POD_STATUS_UNSPECIFIED", - "FILTER_POD_STATUS_RUNNING", - "FILTER_POD_STATUS_ERROR", - "FILTER_POD_STATUS_COMPLETED", - "FILTER_POD_STATUS_WAITING" - ], - "default": "FILTER_POD_STATUS_UNSPECIFIED" - }, - { - "name": "excludeMetrics", - "description": "exclude_metrics\nIf false, contains metrics-related information\nIf true, metrics-related information is not included", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "gpuType", - "description": "gpu_type is filter with pods resources, when value is * search all", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/preferredresources": { - "get": { - "operationId": "Cluster_ListClusterPreferredResources", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterPreferredResourcesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespaced", - "description": "namespaced indicates whether this resource is cluster or namespace scoped.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/publicmetric": { - "post": { - "operationId": "insight_QueryPublicUsage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1MetricResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Name of the cluster where the workload is located", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "namespace": { - "type": "string", - "title": "Name of the namespace where the workload is located" - }, - "param": { - "$ref": "#/definitions/v1alpha1BatchQueryRequestParam", - "title": "The parameters of query request" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "queryList": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - ], - "tags": [ - "insight" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/publicmetricrange": { - "post": { - "operationId": "insight_QueryPublicRangeUsage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1MetricRangeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Name of the cluster where the workload is located", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "namespace": { - "type": "string", - "title": "Name of the namespace where the workload is located" - }, - "param": { - "$ref": "#/definitions/v1alpha1BatchQueryRangeRequestParam", - "title": "The parameters of query request" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "queryList": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - ], - "tags": [ - "insight" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/replicasets": { - "get": { - "summary": "ListClusterReplicaSets lists replicasets of a cluster", - "operationId": "Apps_ListClusterReplicaSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterReplicaSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified replicaset belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "PageSize is the data number per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is used for query.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/secrets": { - "get": { - "summary": "ListClusterSecrets lists a secret in a specific cluster", - "operationId": "Core_ListClusterSecrets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterSecretsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the secret belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "The name use to search specific secret", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "type", - "description": "Type is used to filter secrets by type.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "onlyMetadata", - "description": "OnlyMetadata lists only metadata of secrets, default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/serviceaccounts": { - "get": { - "summary": "ListNamespaces gets all the namespaces across clusters", - "operationId": "Core_ListServiceAccounts", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListServiceAccountsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of sa to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namesapce", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/serviceaccounts/{name}": { - "put": { - "summary": "UpdateServiceAccount updates a sa from the system by given sa name", - "operationId": "Core_UpdateServiceAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateServiceAccountResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of ServiceAccount to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of ServiceAccount to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "Namespace is the metadata.namespace of the referenced pod.\nThis field is required in all cases." - }, - "data": { - "type": "string", - "title": "The data is the ServiceAccount YAML details" - } - }, - "description": "UpdateServiceAccount represents the request of update ServiceAccount in the cluster." - } - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/services": { - "get": { - "summary": "ListClusterServices lists all services in the specified cluster, regardless\nof namespace", - "operationId": "Core_ListClusterServices", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterServicesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster the specified service belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the service list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the service list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "name", - "description": "Name is used for query.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "type", - "description": "Type is a array used for frontend filter.\nUse examples: type=CLUSTER_IP&type=NODE_PORT\n\n - SERVICE_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - ClusterIP: ClusterIP means a service will only be accessible inside the cluster, via\nthe cluster IP.\n - NodePort: NodePort means a service will be exposed on one port of every node, in\naddition to 'ClusterIP' type.\n - LoadBalancer: LoadBalancer means a service will be exposed via an external load balancer\n(if the cloud provider supports it), in addition to 'NodePort' type.\n - ExternalName: ExternalName means a service consists of only a reference to an external\nname that kubedns or equivalent will return as a CNAME record, with no\nexposing or proxying of any pods involved.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "ClusterIP", - "NodePort", - "LoadBalancer", - "ExternalName" - ] - }, - "collectionFormat": "multi" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "ports", - "description": "Ports is used to filter by port.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "integer", - "format": "int32" - }, - "collectionFormat": "multi" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/settings": { - "get": { - "summary": "Gets the setting under a given cluster.", - "operationId": "ClusterSetting_GetClusterSetting", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterSetting" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster name of the clustersetting.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "ClusterSetting" - ] - }, - "put": { - "summary": "UpdateClusterSetting will update the cluster setting and returns the settings\nafter updating.", - "operationId": "ClusterSetting_UpdateClusterSetting", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ClusterSetting" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "one of cluster or kubeSystemID has value", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "settings": { - "$ref": "#/definitions/v1alpha1ClusterSetting" - } - } - } - } - ], - "tags": [ - "ClusterSetting" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/settings/gpu": { - "get": { - "operationId": "ClusterSetting_ListGPUSetting", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListGPUSettingResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster name of the clustersetting.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "availableEnable", - "description": "if available_enable is true will return available gpu number\nif available_enable is false AvailableResource return nil", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "ClusterSetting" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/settings/plugins": { - "get": { - "summary": "Lists plugins under a given cluster.", - "operationId": "ClusterSetting_ListPlugins", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListPluginsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster name of the clustersetting.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "ClusterSetting" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/settings/plugins/{name}:disable": { - "post": { - "summary": "Disable a plugin so that it can be shown by the frontend.", - "operationId": "ClusterSetting_DisablePlugin", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster name of the clustersetting.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the plugin which needs to disable.", - "in": "path", - "required": true, - "type": "string", - "enum": [ - "PLUGIN_NAME_UNSPECIFIED", - "HPA", - "Insight", - "GPU", - "METALLB", - "Spiderpool", - "CustomMetrics", - "CronHPA", - "VPA", - "Hwameistor", - "Flannel", - "KubeOvn", - "OLM", - "EgressGateway", - "Snapshot", - "DRA" - ] - } - ], - "tags": [ - "ClusterSetting" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/settings/plugins/{name}:enable": { - "post": { - "summary": "Enable a plugin so that it can be shown by the frontend.", - "operationId": "ClusterSetting_EnablePlugin", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "The cluster name of the clustersetting.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "The name of the plugin which needs to enable.", - "in": "path", - "required": true, - "type": "string", - "enum": [ - "PLUGIN_NAME_UNSPECIFIED", - "HPA", - "Insight", - "GPU", - "METALLB", - "Spiderpool", - "CustomMetrics", - "CronHPA", - "VPA", - "Hwameistor", - "Flannel", - "KubeOvn", - "OLM", - "EgressGateway", - "Snapshot", - "DRA" - ] - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object" - } - } - ], - "tags": [ - "ClusterSetting" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/sriovnodesresources": { - "get": { - "operationId": "Core_ListClusterSriovAllocatedResources", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterSriovAllocatedResourcesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Core" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/statefulsets": { - "get": { - "summary": "ListClusterStatefulSets lists one cluster all namespace's statefulsets", - "operationId": "Apps_ListClusterStatefulSets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListStatefulSetsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of Workload to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page is current page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size is the data number shown per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name represents the name of workloads to search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "phase", - "description": "Phase represents the phase of workloads to search\n\n - WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED" - }, - { - "name": "sortBy", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Apps" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/storageclasses": { - "get": { - "summary": "ListStorageClass list StorageClass in single cluster", - "operationId": "Storage_ListStorageClasses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListStorageClassesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "provisioner", - "description": "Provisioner is used for fuzzy search by provisioner.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "reclaimPolicy", - "description": "ReclaimPolicy is used for fuzzy search by reclaimPolicy.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - }, - "post": { - "summary": "CreateStorageClass", - "operationId": "Storage_CreateStorageClass", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateStorageClassResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents the cluster of StorageClass to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the StorageClass YAML details" - } - }, - "description": "CreateStorageClassRequest represents the request of create StorageClass in the cluster." - } - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/storageclasses/{name}": { - "get": { - "summary": "GetStorageClass get StorageClass in single cluster", - "operationId": "Storage_GetStorageClass", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1StorageClass" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of StorageClass to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - }, - "delete": { - "summary": "DeleteStorageClass", - "operationId": "Storage_DeleteStorageClass", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the StorageClass belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "Name represents the name of StorageClass", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - }, - "put": { - "summary": "UpdateStorageClass update storage class", - "operationId": "Storage_UpdateStorageClass", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UpdateStorageClassResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the cluster of StorageClass to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of StorageClass to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the StorageClass YAML details" - } - }, - "description": "UpdateStorageClassRequest represents the request of update StorageClass in the cluster." - } - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/storageclasses/{name}/json": { - "get": { - "summary": "GetStorageClassJSON get StorageClass json in single cluster", - "operationId": "Storage_GetStorageClassJSON", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetStorageClassJSONResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of PVC to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "description": "name represents the name of StorageClass to belongs to.", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}/volumesnapshots": { - "get": { - "summary": "ListClusterVolumeSnapshots will list all VolumeSnapshot by given cluster and regardless of\nnamespaces", - "operationId": "Storage_ListClusterVolumeSnapshots", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterVolumeSnapshotsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents the name of VolumeSnapshot to belongs to.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "name", - "description": "Name is used for filter.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "labelSelector", - "description": "LabelSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fieldSelector", - "description": "FieldSelector is the format after labels.FormatLabels used to filter", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Storage" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}:bind": { - "post": { - "operationId": "Workspace_BindClusterToWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1BindClusterToWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "workspaceAlias": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{cluster}:unbind": { - "delete": { - "operationId": "Workspace_UnBindClusterFromWorkspace", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1UnBindClusterFromWorkspaceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "workspaceId": { - "type": "integer", - "format": "int32" - }, - "workspaceAlias": { - "type": "string" - } - } - } - } - ], - "tags": [ - "Workspace" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{name}": { - "get": { - "summary": "GetCluster gets the details of the specified kpanda cr", - "operationId": "Cluster_GetCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1Cluster" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "Name is the user-specified identifier.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "status", - "description": "Status represents the current state of cluster.", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, - { - "name": "sortBy", - "description": "SortBy determines the list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "excludeMetrics", - "description": "exclude_metrics\nIf false, contains metrics-related information\nIf true, metrics-related information is not included", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Cluster" - ] - }, - "delete": { - "summary": "DeleteCluster deletes the specified cluster", - "operationId": "Cluster_DeleteCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "deleteKpandaNamespace": { - "type": "boolean", - "description": "DeleteKpandaNamespace represents whether to delete namespace of kpanda." - }, - "deleteInsightAgent": { - "type": "boolean", - "title": "DeleteInsightAgent represents whether to delete insight agent server.``" - } - }, - "description": "DeleteClusterRequest returns clusters information." - } - } - ], - "tags": [ - "Cluster" - ] - }, - "put": { - "summary": "UpdateClusters updates a cluster by cluster name", - "operationId": "Cluster_UpdateClusters", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateOrUpdateClusterResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "aliasName": { - "type": "string", - "description": "It is an alias given by the user and can be changed at will. It cannot be\nempty." - }, - "provider": { - "$ref": "#/definitions/v1alpha1ClusterProvider", - "description": "Provider represents the cloud provider name of the member cluster." - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels are key/value pairs that are attached to objects." - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations to attach arbitrary metadata to objects." - }, - "describe": { - "type": "string", - "description": "Describe represents the details of the member cluster." - }, - "region": { - "type": "string", - "description": "Region represents the region of the member cluster locate in." - }, - "zone": { - "type": "string", - "description": "Zone represents the zone of the member cluster locate in." - }, - "kubeConfigString": { - "type": "string", - "description": "KubeConfig of the cluster." - } - }, - "description": "UpdateClusterRequest requests to update a cluster." - } - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{name}/labels": { - "put": { - "summary": "EditClusterLabels edits the specified cluster's labels", - "operationId": "Cluster_EditClusterLabels", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1EditClusterLabelsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels are key/value pairs that are attached to objects." - } - }, - "description": "EditClusterLabelsRequest returns true when pod termination has been\nrequested." - } - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clusters/{name}/validate": { - "post": { - "summary": "ValidateCluster checks if residuals which affect integrating exist in a cluster", - "operationId": "Cluster_ValidateCluster", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ValidateClusterResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "unjoinCluster": { - "type": "boolean", - "description": "JoinCluster represents whther the request is to join cluster.\nif true, the kube_config_string is required param, otherwise, the name is required." - }, - "kubeConfigString": { - "type": "string", - "description": "KubeConfig of the cluster." - } - }, - "description": "ValidateClusterRequest requests to check if residuals which affect integrating exist in a cluster." - } - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/clustersummary": { - "get": { - "summary": "listClusterSummary lists cluster summary", - "operationId": "Cluster_ListClusterSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListClusterSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "showVirtualCluster", - "description": "ShowVirtualCluster is used to control whether returned data contains\nvirtualCluster. Default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "filterByStrategy", - "description": "FilterByStrategy is to list all the clusters without strategies if true, default false.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "filterBySnapshot", - "description": "FilterBySnapshot is to list all the clusters which has snapshot if true, default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/etcdbackuprestore/strategies": { - "get": { - "summary": "ListEtcdBackupStrategies list etcd backup strategies.", - "operationId": "EtcdBackupRestore_ListEtcdBackupStrategies", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListEtcdBackupStrategiesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "cluster represents which cluster the repository belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "name", - "description": "Name is the user-specified identifier.\nThis field may not be updated.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "sortBy", - "description": "SortBy determines the repository list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED" - }, - { - "name": "sortDir", - "description": "OrderBy determines the repository list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - } - ], - "tags": [ - "EtcdBackupRestore" - ] - } - }, - "/apis/kpanda.io/v1alpha1/featuregates": { - "get": { - "operationId": "FeatureGate_ListFeatureGates", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListFeatureGatesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "FeatureGate" - ] - } - }, - "/apis/kpanda.io/v1alpha1/globalroles": { - "get": { - "operationId": "Workspace_ListGlobalRolesForCurrentUser", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListGlobalRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Workspace" - ] - } - }, - "/apis/kpanda.io/v1alpha1/gpus": { - "get": { - "summary": "ListClusters lists kpanda cr resources", - "operationId": "Cluster_ListAllClusterGPU", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAllClusterGPUInfoResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/kubesystemid/{kubeSystemID}/clustercert": { - "post": { - "summary": "CreateOpenAPIClusterCertByKubeSystemID creates openAPI cluster cert by\nkubeSystemID", - "operationId": "Cluster_CreateOpenAPIClusterCertByKubeSystemID", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1CreateOpenAPIClusterCertResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "kubeSystemID", - "description": "kubeSystemID is the cluster system ID.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "cluster": { - "type": "string", - "title": "one of cluster or kubeSystemID has value" - }, - "expirationSeconds": { - "type": "integer", - "format": "int32", - "description": "ExpirationSeconds is the requested duration of validity of the request." - } - } - } - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registries": { - "get": { - "summary": "ListRegistries returns a list of registries", - "operationId": "Image_ListRegistries", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRegistriesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the current cluster.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "global", - "description": "Global is to list all global registries.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "public", - "description": "Public is distinguish public images and private images.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by registry name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registries/kangaroo": { - "get": { - "summary": "DetectKangaroo returns whether the kangaroo is installed.", - "operationId": "Image_DetectKangaroo", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1DetectKangarooResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Image" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registries/{registry}/projects": { - "get": { - "summary": "ListProjects returns a list of projects of specified registry", - "operationId": "Image_ListProjects", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListProjectsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "registry", - "description": "Registry is registry name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "cluster", - "description": "Cluster is the current cluster.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "public", - "description": "Public is distinguish public projects and private projects.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by project name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registries/{registry}/repositories": { - "get": { - "summary": "ListRepositories returns a list of image names of specified project", - "operationId": "Image_ListRepositories", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListRepositoriesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "registry", - "description": "Registry is registry name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "cluster", - "description": "Cluster is the current cluster.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "project", - "description": "Project is the project to request, \"/\" is a possible value.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "public", - "description": "Public is distinguish public images and private images.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "showArtifacts", - "description": "ShowArtifacts is to list artifacts of per image, default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registries/{registry}/repositories/{repository}/artifacts": { - "get": { - "summary": "ListArtifacts returns a list of tags of specified image", - "operationId": "Image_ListArtifacts", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListArtifactsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "registry", - "description": "Registry is registry name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "repository", - "description": "Repository is image name.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "cluster", - "description": "Cluster is the current cluster.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "project", - "description": "Project is the project to request.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "public", - "description": "Public is distinguish public images and private images.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "fuzzyTagName", - "description": "FuzzyTagName is used to fuzzy search by tag name.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registry/tags": { - "get": { - "operationId": "Registry_ListImageTags", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListImageTagsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster presents the cluster of dockeconfig belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace presents the namespace of dockeconfig belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "secret", - "description": "Secret is the name of dockeconfig.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "image", - "description": "Image is the name of repository which needs verify.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "registryHost", - "description": "The registry host which the repository belongs to.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Registry" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registry/verify": { - "post": { - "operationId": "Registry_VerifyRegistry", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1VerifyRegistryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/v1alpha1VerifyRegistryRequest" - } - } - ], - "tags": [ - "Registry" - ] - } - }, - "/apis/kpanda.io/v1alpha1/registry/verifyImage": { - "get": { - "operationId": "Registry_VerifyImage", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1VerifyImageResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster presents the cluster of dockeconfig belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace presents the namespace of dockeconfig belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "secret", - "description": "Secret is the name of dockeconfig.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "image", - "description": "Image is the name of repository which needs to list tags.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "registryHost", - "description": "The registry host which the repository belongs to.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Registry" - ] - } - }, - "/apis/kpanda.io/v1alpha1/rolesummary": { - "get": { - "summary": "ListAllUserRoleSummary lists user role summary", - "operationId": "RBAC_ListAllUserRoleSummary", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListAllUserRoleSummaryResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster represents which cluster the roleBinding belongs to.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace represents which namespace the roleBinding belongs to.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "RBAC" - ] - } - }, - "/apis/kpanda.io/v1alpha1/settings/gpu": { - "get": { - "operationId": "SettingService_GPUSetting", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GPUSettingResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "SettingService" - ] - } - }, - "/apis/kpanda.io/v1alpha1/workspaces": { - "get": { - "operationId": "Workspace_ListWorkspaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1ListWorkspacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Workspace" - ] - } - }, - "/apis/kpanda.io/v1alpha1/workspaces/{workspaceId}/workspacesharedresourcequota": { - "get": { - "operationId": "Workspace_GetWorkspaceResourceQuotaAllocatable", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1GetWorkspaceSharedResourceQuotaResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "workspaceId", - "in": "path", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "workspaceAlias", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "cluster", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Workspace" - ] - } - } - }, - "definitions": { - "CalicoConfigCalicoIptablesBackendType": { - "type": "string", - "enum": [ - "CALICO_IPTABLES_BACKEND_TYPE_UNSPECIFIED", - "NFT", - "Auto", - "Legacy" - ], - "default": "CALICO_IPTABLES_BACKEND_TYPE_UNSPECIFIED" - }, - "CalicoConfigCalicoTunnel": { - "type": "string", - "enum": [ - "CALICO_TUNNEL_UNSPECIFIED", - "IPIP", - "IPIPCrossSubnet", - "VXLAN", - "VXLANCrossSubnet" - ], - "default": "CALICO_TUNNEL_UNSPECIFIED" - }, - "CommonNetworkConfigKubeProxyMode": { - "type": "string", - "enum": [ - "KUBE_PROXY_MODE_UNSPECIFIED", - "iptables", - "ipvs" - ], - "default": "KUBE_PROXY_MODE_UNSPECIFIED" - }, - "ContainerResourcePolicyContainerScalingMode": { - "type": "string", - "enum": [ - "CONTAINER_SCALING_MODE_UNSPECIFIED", - "Auto", - "Off" - ], - "default": "CONTAINER_SCALING_MODE_UNSPECIFIED", - "description": "ContainerScalingMode controls whether autoscaler is enabled for a specific\ncontainer.\n\n - CONTAINER_SCALING_MODE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Auto: ContainerScalingModeAuto means autoscaling is enabled for a container.\n - Off: ContainerScalingModeOff means autoscaling is disabled for a container." - }, - "CronJobStatusCronJobCondition": { - "type": "object", - "properties": { - "jobName": { - "type": "string", - "description": "The name of job." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current condition of job." - } - }, - "description": "Current condition of cronjob." - }, - "CronJobStatusCronJobState": { - "type": "string", - "enum": [ - "CRONJOB_STATE_UNSPECIFIED", - "Waiting", - "Activated", - "Stopped", - "Deleting" - ], - "default": "CRONJOB_STATE_UNSPECIFIED", - "description": "Current state of a cron job.\n\n - CRONJOB_STATE_UNSPECIFIED: CronJob is unspecified.\n - Waiting: Waiting for cronjob ready.\n - Activated: The number of pending and running pods.\n - Stopped: CronJob has stopped.\n - Deleting: CronJob is being deleted." - }, - "CustomMetricValueDescribedObject": { - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "name": { - "type": "string" - }, - "apiVersion": { - "type": "string" - } - }, - "title": "a reference to the described object" - }, - "CustomResourceDefinitionSpecResourceScope": { - "type": "string", - "enum": [ - "RESOURCE_SCOPE_UNSPECIFIED", - "NAMESPACED", - "CLUSTER" - ], - "default": "RESOURCE_SCOPE_UNSPECIFIED", - "description": "- RESOURCE_SCOPE_UNSPECIFIED: ResourceScope is unspecified\n - NAMESPACED: Represents which namespace the belongs to.\n - CLUSTER: Cluster the specified belongs to.", - "title": "ResourceScope is an enum defining the different scopes available to a\ncustom resource" - }, - "EtcdBackupStrategySpecEtcdBackupType": { - "type": "string", - "enum": [ - "BACKUP_TYPE_UNSPECIFIED", - "Manual", - "Timing" - ], - "default": "BACKUP_TYPE_UNSPECIFIED", - "description": " - BACKUP_TYPE_UNSPECIFIED: Backup strategy type is unspecified." - }, - "FlannelConfigBackendType": { - "type": "string", - "enum": [ - "BACKEND_TYPE_UNSPECIFIED", - "VXLAN", - "HostGateway", - "WireGuard" - ], - "default": "BACKEND_TYPE_UNSPECIFIED" - }, - "GetHelmChartResourcesResponseResources": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "image": { - "type": "string" - } - } - }, - "GetPodContainerLogResponseData": { - "type": "object", - "properties": { - "log": { - "type": "string", - "title": "the log of the pod container's log" - }, - "timeStamp": { - "type": "string", - "title": "the time stamp the pod container's log" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "the labels of log" - } - }, - "title": "the data of log" - }, - "KubeOvnConfigNetworkType": { - "type": "string", - "enum": [ - "NETWORK_TYPE_UNSPECIFIED", - "GENEVE", - "VLAN" - ], - "default": "NETWORK_TYPE_UNSPECIFIED", - "title": "- GENEVE: geneve means that the network mode is overlay\n - VLAN: vlan means that the network mode is underlay" - }, - "KubesprayArgsRuntime": { - "type": "string", - "enum": [ - "RUNTIME_UNSPECIFIED", - "containerd", - "docker" - ], - "default": "RUNTIME_UNSPECIFIED", - "description": "Container runtime\ndocker for docker, crio for cri-o and containerd for containerd.\nAdditionally you can set this to kubeadm if you want to install etcd using kubeadm\nKubeadm etcd deployment is experimental and only available for new deployments\nIf this is not set, container manager will be inherited from the Kubespray defaults\nand not from k8s_cluster/k8s-cluster.yml, which might not be what you want.\nAlso this makes possible to use different container manager for etcd nodes." - }, - "ListClusterNamespaceSummaryResponseScope": { - "type": "string", - "enum": [ - "SCOPE_UNSPECIFIED", - "Cluster", - "Namespaced" - ], - "default": "SCOPE_UNSPECIFIED", - "description": "Scope is an enum defining the different scopes available to the namespaces.\nAllowed values are `Cluster` and `Namespaced`." - }, - "ListClusterlcmOpsRequestAction": { - "type": "string", - "enum": [ - "ACTION_UNSPECIFIED", - "CREATE_CLUSTER", - "UPGRADE_CLUSTER", - "RESET_CLUSTER", - "ADD_NODE", - "REMOVE_NODE" - ], - "default": "ACTION_UNSPECIFIED" - }, - "ListHelmChartsResponseCategoryItem": { - "type": "object", - "properties": { - "othersNums": { - "type": "integer", - "format": "int32" - }, - "storageNums": { - "type": "integer", - "format": "int32" - }, - "networkNums": { - "type": "integer", - "format": "int32" - }, - "monitorNums": { - "type": "integer", - "format": "int32" - }, - "databaseNums": { - "type": "integer", - "format": "int32" - }, - "dataServiceNums": { - "type": "integer", - "format": "int32" - }, - "infraNums": { - "type": "integer", - "format": "int32" - }, - "securityNums": { - "type": "integer", - "format": "int32" - }, - "ecoappNums": { - "type": "integer", - "format": "int32" - }, - "bigdataNums": { - "type": "integer", - "format": "int32" - }, - "iotedgeNums": { - "type": "integer", - "format": "int32" - } - } - }, - "ListRuntimeVersionsResponsePreferredVersion": { - "type": "object", - "properties": { - "containerdVersion": { - "type": "string", - "title": "The recommended containerd_version" - }, - "dockerVersion": { - "type": "string", - "title": "The recommended docker_version" - } - } - }, - "NetworkConfigCNI": { - "type": "string", - "enum": [ - "CNI_UNSPECIFIED", - "calico", - "cilium", - "flannel", - "kube_ovn", - "none" - ], - "default": "CNI_UNSPECIFIED" - }, - "NetworkPolicySpecPolicyType": { - "type": "string", - "enum": [ - "POLICY_TYPE_UNSPECIFIED", - "Ingress", - "Egress" - ], - "default": "POLICY_TYPE_UNSPECIFIED", - "description": "- POLICY_TYPE_UNSPECIFIED: Placeholder to avoid zero not return.\n - Ingress: PolicyTypeIngress is a NetworkPolicy that affects ingress traffic on selected pods.\n - Egress: PolicyTypeEgress is a NetworkPolicy that affects egress traffic on selected pods.", - "title": "PolicyType string describes the NetworkPolicy type\nThis type is beta-level in 1.8" - }, - "PatchCustomResourceRequestPatchType": { - "type": "string", - "enum": [ - "PATCH_TYPE_UNSPECIFIED", - "PATCH_TYPE_JSON", - "PATCH_TYPE_MERGE", - "PATCH_TYPE_STRATEGIC_MERGE", - "PATCH_TYPE_APPLY" - ], - "default": "PATCH_TYPE_UNSPECIFIED" - }, - "PersistentVolumeClaimSpecVolumeMode": { - "type": "string", - "enum": [ - "VOLUME_MODE_UNSPECIFIED", - "Block", - "Filesystem" - ], - "default": "VOLUME_MODE_UNSPECIFIED", - "description": " - Block: PersistentVolumeBlock means the volume will not be formatted with a filesystem and will remain a raw block device.\n - Filesystem: PersistentVolumeFilesystem means the volume will be or is formatted with a filesystem." - }, - "PodStatusOwnedBy": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/definitions/PodStatusOwnedByKind", - "description": "The kind of pod." - }, - "name": { - "type": "string", - "title": "Name is the related workload name" - } - }, - "title": "OwnedBy states which workload the pod belongs to" - }, - "PodStatusOwnedByKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "DEPLOYMENT", - "STATEFULSET", - "DAEMONSET", - "REPLICASET", - "JOB", - "CRONJOB" - ], - "default": "KIND_UNSPECIFIED", - "description": "- KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - DEPLOYMENT: A Deployment provides declarative updates for Pods and ReplicaSets.\n - STATEFULSET: StatefulSet is the workload API object used to manage stateful\napplications.\n - DAEMONSET: A DaemonSet ensures that all (or some) Nodes run a copy of a Pod.\n - REPLICASET: A pod's owner replicaSet\n - JOB: A pod's owner job\n - CRONJOB: A pod's owner cronjob", - "title": "Kind includes deployment, statefulset, daemonset" - }, - "RepoSpecSecretReference": { - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "namespace is the namespace for the resource being referenced." - }, - "name": { - "type": "string", - "description": "name is the name of resource being referenced." - } - } - }, - "SnapStoreConfigSnapStoreProvider": { - "type": "string", - "enum": [ - "SNAP_STORE_PROVIDER_UNSPECIFIED", - "Local", - "S3" - ], - "default": "SNAP_STORE_PROVIDER_UNSPECIFIED", - "description": " - SNAP_STORE_PROVIDER_UNSPECIFIED: Snap Store Provider is unspecified.\n - Local: Local is constant for local disk storage provider.\n - S3: S3 is constant for aws S3 storage provider." - }, - "SnapshotterConfigGarbageCollectingPolicy": { - "type": "string", - "enum": [ - "ETCD_BACKUP_TYPE_UNSPECIFIED", - "Exponential", - "LimitBased" - ], - "default": "ETCD_BACKUP_TYPE_UNSPECIFIED", - "description": "- ETCD_BACKUP_TYPE_UNSPECIFIED: etcd backup type is unspecified.\n - Exponential: Exponential policy stores the snapshots in a condensed manner as mentioned below:\nAll full backups and delta backups for the previous hour.\nLatest full snapshot of each previous hour for the day.\nLatest full snapshot of each previous day for 7 days.\nLatest full snapshot of the previous 4 weeks\n - LimitBased: If using LimitBased policy, the max-backups flag should be provided to indicate the\nnumber of recent-most backups to persist at each garbage collection cycle.", - "title": "garbage_collection_policy Policy for garbage collecting old backups" - }, - "StorageClassReclaimPolicy": { - "type": "string", - "enum": [ - "RECLAIM_AOLICY_UNSPECIFIED", - "Delete", - "Retain" - ], - "default": "RECLAIM_AOLICY_UNSPECIFIED", - "description": " - Delete: PersistentVolumeReclaimDelete means the volume will be deleted from Kubernetes on release from its claim.\nThe volume plugin must support Deletion.\n - Retain: PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator.\nThe default policy is Retain." - }, - "StorageClassVolumeBindingMode": { - "type": "string", - "enum": [ - "VOLUME_BINDING_MODE_UNSPECIFIED", - "Immediate", - "WaitForFirstConsumer" - ], - "default": "VOLUME_BINDING_MODE_UNSPECIFIED", - "description": " - Immediate: VolumeBindingImmediate indicates that PersistentVolumeClaims should be\nimmediately provisioned and bound. This is the default mode.\n - WaitForFirstConsumer: VolumeBindingWaitForFirstConsumer indicates that PersistentVolumeClaims\nshould not be provisioned and bound until the first Pod is created that\nreferences the PeristentVolumeClaim. The volume provisioning and\nbinding will occur during Pod scheduing." - }, - "apicloudshellv1alpha1LocalSecretReference": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name is the name of resource being referenced." - } - }, - "description": "LocalSecretReference is a reference to a secret within the enclosing\nnamespace." - }, - "apiclustersv1alpha1ClusterRole": { - "type": "string", - "enum": [ - "CLUSTER_ROLE_UNSPECIFIED", - "CLUSTER_ROLE_MANAGER", - "CLUSTER_ROLE_GLOBAL_SERVICE", - "CLUSTER_ROLE_WORKER", - "CLUSTER_ROLE_THIRD_PARTY" - ], - "default": "CLUSTER_ROLE_UNSPECIFIED" - }, - "apiclustersv1alpha1LocalSecretReference": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name is the name of resource being referenced." - }, - "namespace": { - "type": "string", - "description": "Namespace is the namespace for the resource being referenced." - }, - "resourceVersion": { - "type": "string", - "description": "ResourceVersion is the version of resource being referenced." - } - }, - "title": "SecretRef represents the secret contains mandatory credentials to access the member cluster.\nThe secret should hold credentials as follows:\n- secret.data.token\n- secret.data.caBundle\n+optional" - }, - "apicorev1alpha1LoadBalancerIngress": { - "type": "object", - "properties": { - "ip": { - "type": "string", - "title": "IP is set for load-balancer ingress points that are IP based\n(typically GCE or OpenStack load-balancers)" - }, - "hostname": { - "type": "string", - "title": "Hostname is set for load-balancer ingress points that are DNS based\n(typically AWS load-balancers)" - }, - "ports": { - "type": "array", - "items": { - "$ref": "#/definitions/apicorev1alpha1PortStatus" - }, - "title": "Ports is a list of records of service ports\nIf used, every port defined in the service should have an entry in it" - } - } - }, - "apicorev1alpha1LoadBalancerStatus": { - "type": "object", - "properties": { - "ingress": { - "type": "array", - "items": { - "$ref": "#/definitions/apicorev1alpha1LoadBalancerIngress" - }, - "description": "Ingress is a list containing ingress points for the load-balancer.\nTraffic intended for the service should be sent to these ingress points." - } - }, - "description": "LoadBalancerStatus represents the status of a load-balancer." - }, - "apicorev1alpha1PortStatus": { - "type": "object", - "properties": { - "port": { - "type": "integer", - "format": "int32", - "title": "Port is the port number of the service port of which status is recorded here" - }, - "protocol": { - "type": "string", - "title": "Protocol is the protocol of the service port of which status is recorded here\nThe supported values are: \"TCP\", \"UDP\", \"SCTP\"" - }, - "error": { - "type": "string", - "description": "Error is to record the problem with the service port\nThe format of the error shall comply with the following rules:\n - built-in error values shall be specified in this file and those shall use\n CamelCase names\n - cloud provider specific error values must have names that comply with the\n format foo.example.com/CamelCase." - } - }, - "title": "PortStatus represents the error condition of a service port" - }, - "apicorev1alpha1TypedLocalObjectReference": { - "type": "object", - "properties": { - "apiGroup": { - "type": "string", - "description": "APIGroup is the group for the resource being referenced.\nIf APIGroup is not specified, the specified Kind must be in the core API group.\nFor any other third-party types, APIGroup is required." - }, - "kind": { - "type": "string", - "description": "Kind is the type of resource being referenced." - }, - "name": { - "type": "string", - "description": "Name is the name of resource being referenced." - } - }, - "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace." - }, - "apinetworkingv1alpha1LoadBalancerIngress": { - "type": "object", - "properties": { - "ip": { - "type": "string", - "description": "IP is set for load-balancer ingress points that are IP based." - }, - "hostname": { - "type": "string", - "description": "Hostname is set for load-balancer ingress points that are DNS based." - }, - "ports": { - "type": "array", - "items": { - "$ref": "#/definitions/apinetworkingv1alpha1PortStatus" - }, - "description": "Ports is a list of records of service ports.\nIf used, every port defined in the service should have an entry in it." - } - }, - "description": "LoadBalancerIngress represents the status of a load-balancer ingress point:\ntraffic intended for the service should be sent to an ingress point." - }, - "apinetworkingv1alpha1LoadBalancerStatus": { - "type": "object", - "properties": { - "ingress": { - "type": "array", - "items": { - "$ref": "#/definitions/apinetworkingv1alpha1LoadBalancerIngress" - }, - "description": "Ingress is a list containing ingress points for the load-balancer.\nTraffic intended for the service should be sent to these ingress points." - } - }, - "title": "LoadBalancerStatus represents the status of a load-balancer" - }, - "apinetworkingv1alpha1PortStatus": { - "type": "object", - "properties": { - "port": { - "type": "integer", - "format": "int32", - "description": "Port is the port number of the service port of which status is recorded." - }, - "error": { - "type": "string", - "description": "Error is to record the problem with the service port." - }, - "protocol": { - "$ref": "#/definitions/v1alpha1Protocol", - "description": "Protocol is the protocol of the service port of which status is recorded." - } - }, - "title": "PortStatus represents the error condition of a service port" - }, - "apinetworkingv1alpha1TypedLocalObjectReference": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name is the name of resource being referenced." - }, - "kind": { - "type": "string", - "description": "Kind is the type of resource being referenced." - }, - "apiGroup": { - "type": "string", - "description": "APIGroup is the group for the resource being referenced.\nIf APIGroup is not specified, the specified Kind must be in the core API\ngroup. For any other third-party types, APIGroup is required." - } - }, - "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace." - }, - "apirbacv1alpha1ClusterRole": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "rules": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PolicyRule" - }, - "title": "Rules holds all the PolicyRules for this ClusterRole" - }, - "aggregationRule": { - "$ref": "#/definitions/v1alpha1AggregationRule", - "title": "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole.\nIf AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be\nstomped by the controller.\n+optional" - } - }, - "description": "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding." - }, - "clusterlcmv1alpha1Phase": { - "type": "string", - "enum": [ - "STATUS_UNSPECIFIED", - "Running", - "Succeeded", - "Failed", - "Blocked" - ], - "default": "STATUS_UNSPECIFIED" - }, - "googlerpcStatus": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "details": { - "type": "array", - "items": { - "$ref": "#/definitions/protobufAny" - } - } - } - }, - "protobufAny": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - } - }, - "additionalProperties": {}, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" - }, - "rbacv1alpha1Role": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "rules": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PolicyRule" - }, - "title": "Rules holds all the PolicyRules for this Role" - } - }, - "description": "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding." - }, - "typesCondition": { - "type": "object", - "properties": { - "lastTransitionTime": { - "type": "string", - "title": "Last time the condition transitioned from one status to another.\n+optional" - }, - "lastUpdateTime": { - "type": "string", - "title": "Last time we got an update on a given condition.\n+optional" - }, - "message": { - "type": "string", - "title": "A human readable message indicating details about the transition.\n+optional" - }, - "reason": { - "type": "string", - "title": "The reason for the condition's last transition.\n+optional" - }, - "status": { - "type": "string", - "description": "Status of the condition, one of True, False, Unknown." - }, - "type": { - "type": "string", - "description": "Type of condition." - } - }, - "description": "Condition describes the state of a referent at a certain point." - }, - "typesConditionStatus": { - "type": "string", - "enum": [ - "CONDITION_STATUS_UNSPECIFIED", - "True", - "False", - "Unknown" - ], - "default": "CONDITION_STATUS_UNSPECIFIED", - "description": "These are valid condition statuses.\n\n - CONDITION_STATUS_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - True: True means a resource is in the condition.\n - False: False means a resource is not in the condition.\n - Unknown: Unknown means kubernetes can't decide if a resource is in the condition or\nnot." - }, - "typesLabelSelector": { - "type": "object", - "properties": { - "matchLabels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "matchLabels is a map of {key,value} pairs. A single {key,value} in the\nmatchLabels map is equivalent to an element of matchExpressions, whose key\nfield is \"key\", the operator is \"In\", and the values array contains only\n\"value\". The requirements are ANDed. +optional" - }, - "matchExpressions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesLabelSelectorRequirement" - }, - "title": "matchExpressions is a list of label selector requirements. The requirements\nare ANDed. +optional" - } - }, - "description": "A label selector is a label query over a set of resources. The result of\nmatchLabels and matchExpressions are ANDed. An empty label selector matches\nall objects. A null label selector matches no objects." - }, - "typesLabelSelectorRequirement": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "key is the label key that the selector applies to." - }, - "operator": { - "type": "string", - "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist." - }, - "values": { - "type": "array", - "items": { - "type": "string" - }, - "title": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or\nDoesNotExist, the values array must be empty. This array is replaced during\na strategic merge patch. +optional" - } - }, - "description": "A label selector requirement is a selector that contains values, a key, and\nan operator that relates the key and values." - }, - "typesObjectMeta": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name must be unique within a namespace. Is required when creating\nresources, although some resources may allow a client to request the\ngeneration of an appropriate name automatically. Name is primarily intended\nfor creation idempotence and configuration definition. Cannot be updated.\nMore info: http://kubernetes.io/docs/identifiers#names\n+optional" - }, - "namespace": { - "type": "string", - "description": "Namespace defines the space within each name must be unique. An empty\nnamespace is equivalent to the \"default\" namespace, but \"default\" is the\ncanonical representation. Not all objects are required to be scoped to a\nnamespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL.\nCannot be updated.\nMore info: http://kubernetes.io/docs/namespaces\n+optional" - }, - "uid": { - "type": "string", - "description": "UID is the unique in time and space value for this object. It is typically\ngenerated by the server on successful creation of a resource and is not\nallowed to change on PUT operations.\n\nPopulated by the system.\nRead-only.\nMore info: http://kubernetes.io/docs/identifiers#uids\n+optional" - }, - "resourceVersion": { - "type": "string", - "description": "An opaque value that represents the internal version of this object that\ncan be used by clients to determine when objects have changed. May be used\nfor optimistic concurrency, change detection, and the watch operation on a\nresource or set of resources. Clients must treat these values as opaque and\npassed unmodified back to the server. They may only be valid for a\nparticular resource or set of resources.\n\nPopulated by the system.\nRead-only.\nValue must be treated as opaque by clients and .\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency" - }, - "creationTimestamp": { - "type": "string", - "format": "int64", - "description": "CreationTimestamp is a timestamp representing the server time when this\nobject was created. It is not guaranteed to be set in happens-before order\nacross separate operations. Clients may not set this value. It is\nrepresented in RFC3339 form and is in UTC.\n\nPopulated by the system.\nRead-only.\nNull for lists.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional" - }, - "deletionTimestamp": { - "type": "string", - "format": "int64", - "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be\ndeleted. This field is set by the server when a graceful deletion is\nrequested by the user, and is not directly settable by a client. The\nresource is expected to be deleted (no longer visible from resource lists,\nand not reachable by name) after the time in this field, once the\nfinalizers list is empty. As long as the finalizers list contains items,\ndeletion is blocked. Once the deletionTimestamp is set, this value may not\nbe unset or be set further into the future, although it may be shortened or\nthe resource may be deleted prior to this time. For example, a user may\nrequest that a pod is deleted in 30 seconds. The kubelet will react by\nsending a graceful termination signal to the containers in the pod. After\nthat 30 seconds, the kubelet will send a hard termination signal (SIGKILL)\nto the container and after cleanup, remove the pod from the API. In the\npresence of network partitions, this object may still exist after this\ntimestamp, until an administrator or automated process can determine the\nresource is fully terminated.\nIf not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested.\nRead-only.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: http://kubernetes.io/docs/labels\n+optional" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Annotations is an unstructured key value map stored with a resource that\nmay be set by external tools to store and retrieve arbitrary metadata. They\nare not queryable and should be preserved when modifying objects. More\ninfo: http://kubernetes.io/docs/annotations +optional" - }, - "ownerReferences": { - "type": "array", - "items": { - "$ref": "#/definitions/typesOwnerReference" - }, - "title": "List of objects depended by this object. If ALL objects in the list have\nbeen deleted, this object will be garbage collected. If this object is\nmanaged by a controller, then an entry in this list will point to this\ncontroller, with the controller field set to true. There cannot be more\nthan one managing controller. +optional +patchMergeKey=uid\n+patchStrategy=merge" - }, - "cluster": { - "type": "string", - "description": "The name of the cluster which the object belongs to.\nThis is used to distinguish resources with same name and namespace in\ndifferent clusters. This field is not set anywhere right now and apiserver\nis going to ignore it if set in create or update request." - }, - "workspaceAlias": { - "type": "string", - "description": "The name of the workspace which the object belongs to.\nThis is used to distinguish resources with same name and namespace in\ndifferent workspaces. This field is not set anywhere right now and\napiserver is going to ignore it if set in create or update request." - } - }, - "description": "ObjectMeta is metadata that all persisted resources must have, which includes\nall objects users must create." - }, - "typesOwnerReference": { - "type": "object", - "properties": { - "uid": { - "type": "string", - "title": "UID of the referent.\nMore info: http://kubernetes.io/docs/identifiers#uids" - }, - "controller": { - "type": "boolean", - "title": "If true, this reference points to the managing controller.\n+optional" - }, - "name": { - "type": "string", - "description": "Name of the referent." - }, - "kind": { - "type": "string", - "description": "Kind of the referent." - }, - "apiVersion": { - "type": "string", - "description": "API version of the referent." - }, - "blockOwnerDeletion": { - "type": "boolean", - "title": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then\nthe owner cannot be deleted from the key-value store until this\nreference is removed.\n+optional" - } - }, - "description": "OwnerReference contains enough information to let you identify an owning\nobject. An owning object must be in the same namespace as the dependent, or\nbe cluster-scoped, so there is no namespace field." - }, - "typesPagination": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32", - "description": "Total is the total number of referents." - }, - "page": { - "type": "integer", - "format": "int32", - "description": "Page is current page." - }, - "pageSize": { - "type": "integer", - "format": "int32", - "description": "PageSize is the data number shown per page." - }, - "pages": { - "type": "integer", - "format": "int32", - "description": "Pages is the number of pages." - } - }, - "description": "Pagination is for data paging." - }, - "typesRollingUpdate": { - "type": "object", - "properties": { - "maxSurge": { - "type": "string", - "title": "The maximum number of pods that can be scheduled above the desired number\nof pods. Value can be an absolute number (ex: 5) or a percentage of desired\npods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number\nis calculated from percentage by rounding up. Defaults to 25%. Example:\nwhen this is set to 30%, the new ReplicaSet can be scaled up immediately\nwhen the rolling update starts, such that the total number of old and new\npods do not exceed 130% of desired pods. Once old pods have been killed,\nnew ReplicaSet can be scaled up further, ensuring that total number of pods\nrunning at any time during the update is at most 130% of desired pods.\n+optional" - }, - "maxUnavailable": { - "type": "string", - "title": "The maximum number of pods that can be unavailable during the update.\nValue can be an absolute number (ex: 5) or a percentage of desired pods\n(ex: 10%). Absolute number is calculated from percentage by rounding down.\nThis can not be 0 if MaxSurge is 0.\nDefaults to 25%.\nExample: when this is set to 30%, the old ReplicaSet can be scaled down to\n70% of desired pods immediately when the rolling update starts. Once new\npods are ready, old ReplicaSet can be scaled down further, followed by\nscaling up the new ReplicaSet, ensuring that the total number of pods\navailable at all times during the update is at least 70% of desired pods.\n+optional" - } - }, - "description": "Spec to control the desired behavior of rolling update." - }, - "typesSortBy": { - "type": "string", - "enum": [ - "SORT_BY_UNSPECIFIED", - "field_name", - "state", - "workspace", - "cluster", - "namespace", - "created_at" - ], - "default": "SORT_BY_UNSPECIFIED", - "description": "SortBy determines the data list order reference.\n\n - SORT_BY_UNSPECIFIED: Unspecified is default, no sorting.\n - field_name: Sort result by name.\n - state: TODO: Sort result by state not supported yet.\n - workspace: TODO: Sort result by workspace not supported yet.\n - cluster: Sort result by cluster name.\n - namespace: Sort result by namespace.\n - created_at: Sort result by creationTimestamp." - }, - "typesSortDir": { - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc", - "description": "SortDir determines the data list order.\n\n - desc: Desc stands for descending order.\n - asc: Asc stands for ascending order." - }, - "typesUpdateStrategy": { - "type": "object", - "properties": { - "rollingUpdate": { - "$ref": "#/definitions/typesRollingUpdate", - "title": "RollingUpdate is used to communicate parameters when Type is\nRollingUpdateType. +optional" - }, - "type": { - "type": "string", - "title": "Type indicates the type of the UpdateStrategy.\n+optional" - } - }, - "description": "UpdateStrategy indicates the strategy that the controller\nwill use to perform updates. It includes any additional parameters necessary\nto perform the update for the indicated strategy." - }, - "typesWorkloadState": { - "type": "string", - "enum": [ - "WORKLOAD_STATE_UNSPECIFIED", - "Running", - "Deleting", - "Not_Ready", - "Stopped", - "Waiting" - ], - "default": "WORKLOAD_STATE_UNSPECIFIED", - "description": "- WORKLOAD_STATE_UNSPECIFIED: Unspecified is only a meaningless placeholder, to avoid zero not return.\n - Running: Running shows the referent is available.\n - Deleting: Deleting is when the referent will be deleted.\n - Not_Ready: NotReady shows the referent is unavailable.\n - Stopped: Stopped indicates that the referent has 0 ready pods.\n - Waiting: Waiting indicates that the referent is paused.", - "title": "WorkloadState describes the state of\nworkload(deployments/daemonsets/statefulsets)" - }, - "v1alpha1APIResource": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "name is the plural name of the resource." - }, - "namespaced": { - "type": "boolean", - "description": "namespaced indicates if a resource is namespaced or not." - }, - "group": { - "type": "string", - "description": "group is the preferred group of the resource. Empty implies the group of the containing resource list.\nFor subresources, this may have a different value, for example: Scale\"." - }, - "version": { - "type": "string", - "description": "version is the preferred version of the resource. Empty implies the version of the containing resource list\nFor subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\"." - }, - "kind": { - "type": "string", - "title": "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')" - } - }, - "description": "Resource specifies the name of a resource and whether it is namespaced." - }, - "v1alpha1APIResourceList": { - "type": "object", - "properties": { - "groupVersion": { - "type": "string", - "description": "groupVersion is the group and version this APIResourceList is for." - }, - "resources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1APIResource" - }, - "description": "resources contains the name of the resources and if they are namespaced." - } - }, - "description": "APIResourceList is a list of APIResource, it is used to expose the name of the\nresources supported in a specific group and version, and if the resource\nis namespaced." - }, - "v1alpha1ActionType": { - "type": "string", - "enum": [ - "ACTION_TYPE_UNSPECIFIED", - "playbook", - "shell" - ], - "default": "ACTION_TYPE_UNSPECIFIED" - }, - "v1alpha1AddonInfo": { - "type": "object", - "properties": { - "repoUrl": { - "type": "string", - "title": "Repository url" - }, - "addons": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CreateHelmReleaseRequest" - }, - "title": "Chart info" - } - } - }, - "v1alpha1AddonSetting": { - "type": "object", - "properties": { - "helmOperationHistoryLimit": { - "type": "integer", - "format": "int32", - "description": "The OperationHistoryLimit info in the cluster." - }, - "helmRepoRefreshInterval": { - "type": "integer", - "format": "int32", - "title": "The frequency of helm repos' auto refresh.(Unit: time.Second)" - }, - "helmOperationBaseImage": { - "type": "string", - "title": "The frequency of helm repos'" - }, - "enableHelmRepoRefresh": { - "type": "boolean", - "description": "EnableHelmRepoRefresh is to control whether to auto refresh all the helm repos in the cluster." - }, - "helmOperationJobTemplateResources": { - "$ref": "#/definitions/v1alpha1ResourceRequirements" - }, - "helmOperationTimeoutSecond": { - "type": "string", - "format": "int64", - "description": "HelmOperationTimeoutSecond is the time limit of installing/uninstalling a helmrelease, unit: second." - } - } - }, - "v1alpha1Affinity": { - "type": "object", - "properties": { - "nodeAffinity": { - "$ref": "#/definitions/v1alpha1NodeAffinity", - "title": "Describes node affinity scheduling rules for the pod.\n+optional" - }, - "podAffinity": { - "$ref": "#/definitions/v1alpha1PodAffinity", - "title": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the\nsame node, zone, etc. as some other pod(s)). +optional" - }, - "podAntiAffinity": { - "$ref": "#/definitions/v1alpha1PodAffinity", - "title": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod\nin the same node, zone, etc. as some other pod(s)). +optional" - } - }, - "description": "Affinity is a group of affinity scheduling rules." - }, - "v1alpha1AggregationRule": { - "type": "object", - "properties": { - "clusterRoleSelectors": { - "type": "array", - "items": { - "$ref": "#/definitions/typesLabelSelector" - }, - "title": "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules.\nIf any of the selectors match, then the ClusterRole's permissions will be added" - } - }, - "title": "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole" - }, - "v1alpha1AllocatedResource": { - "type": "object", - "properties": { - "resourceName": { - "type": "string", - "title": "the name of the node sriov resource" - }, - "value": { - "type": "string", - "title": "the maximum allocation for this resource" - } - } - }, - "v1alpha1Artifact": { - "type": "object", - "properties": { - "digest": { - "type": "string", - "description": "Digest is artifact digest." - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Tag" - }, - "description": "Tags is a list of tags." - }, - "imageSize": { - "type": "string", - "format": "int64", - "description": "Size of artifact. Unit: byte. 1024 GenericBinary." - }, - "pushTime": { - "type": "string", - "format": "int64", - "description": "First push time." - } - }, - "title": "Artifact is the concept of harbor artifact" - }, - "v1alpha1AvailableResource": { - "type": "object", - "properties": { - "available": { - "type": "string", - "format": "int64", - "title": "if error_message is not null, available is -1" - }, - "errorMessage": { - "type": "string" - } - } - }, - "v1alpha1BatchBindNodeToNamespaceResponse": { - "type": "object", - "properties": { - "successfulResults": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1BindNodeToNamespaceResult" - }, - "description": "SuccessfulResults is the node list which\nsuccessfully bound with the namespace." - }, - "failedResults": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1BindNodeToNamespaceResult" - }, - "description": "FailedResults is the node list which\nbound with the namespace failed." - }, - "nsError": { - "type": "string", - "description": "NsError is the error message for the namespace update at the end." - } - }, - "description": "BatchBindNodeToNamespaceResponse is the response for node batch bind namespaces." - }, - "v1alpha1BatchQueryRangeRequestParam": { - "type": "object", - "properties": { - "start": { - "type": "string", - "format": "int64", - "title": "Time of start of query" - }, - "end": { - "type": "string", - "format": "int64", - "title": "Time of end of query" - }, - "step": { - "type": "number", - "format": "double", - "title": "Interval of query" - } - }, - "title": "The parameters of batch queryRangeRequest" - }, - "v1alpha1BatchQueryRangeResult": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1PrometheusQueryRangeResult", - "title": "The dat of prometheus query range result" - }, - "status": { - "$ref": "#/definitions/v1alpha1requestStatus", - "title": "The request status" - }, - "errorMessage": { - "type": "string", - "title": "The error message returned" - } - }, - "title": "The result of batch query range" - }, - "v1alpha1BatchQueryRequestParam": { - "type": "object", - "properties": { - "time": { - "type": "string", - "format": "int64", - "title": "Time of query" - } - }, - "title": "The parameters of batch query request" - }, - "v1alpha1BatchQueryResult": { - "type": "object", - "properties": { - "data": { - "$ref": "#/definitions/v1alpha1PrometheusQueryResult", - "title": "The data of prometheus query result" - }, - "status": { - "$ref": "#/definitions/v1alpha1requestStatus", - "title": "The status of request" - }, - "errorMessage": { - "type": "string", - "title": "The error message returned" - } - }, - "title": "The result of batch query" - }, - "v1alpha1BindClusterToWorkspaceResponse": { - "type": "object" - }, - "v1alpha1BindNodeToNamespaceResult": { - "type": "object", - "properties": { - "nodeName": { - "type": "string", - "description": "NodeName is the name of the node." - }, - "error": { - "type": "string", - "description": "Error is the error detail for binding,\nIf there are no mistakes, the error message will be empty." - } - }, - "description": "BindNodeToNamespaceResult is the result for node batch bind namespaces." - }, - "v1alpha1BindResourceToWorkspaceResponse": { - "type": "object" - }, - "v1alpha1CalicoAutoDetectionMethod": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1CalicoAutoDetectionMethodType" - }, - "value": { - "type": "string" - } - } - }, - "v1alpha1CalicoAutoDetectionMethodType": { - "type": "string", - "enum": [ - "TYPE_UNSPECIFIED", - "FIRST_FOUND", - "KUBERNETES_INTERNAL_IP", - "CAN_REACH", - "INTERFACE_REGEX", - "SKIP_INTERFACE" - ], - "default": "TYPE_UNSPECIFIED" - }, - "v1alpha1CalicoConfig": { - "type": "object", - "properties": { - "autoDetectionMethod": { - "$ref": "#/definitions/v1alpha1CalicoAutoDetectionMethod" - }, - "ipv4Tunnel": { - "$ref": "#/definitions/CalicoConfigCalicoTunnel" - }, - "ipv6Tunnel": { - "$ref": "#/definitions/CalicoConfigCalicoTunnel" - }, - "iptablesBackend": { - "$ref": "#/definitions/CalicoConfigCalicoIptablesBackendType" - } - } - }, - "v1alpha1Category": { - "type": "string", - "enum": [ - "CATEGORY_UNSPECIFIED", - "CATEGORY_OTHERS", - "CATEGORY_STORAGE", - "CATEGORY_NETWORKING", - "CATEGORY_MONITORING", - "CATEGORY_DATABASE", - "CATEGORY_DATASERVICE", - "CATEGORY_ECOAPP", - "CATEGORY_BIGDATA", - "CATEGORY_SECURITY", - "CATEGORY_IOTEDGE", - "CATEGORY_INFRA" - ], - "default": "CATEGORY_UNSPECIFIED", - "description": " - CATEGORY_UNSPECIFIED: The Category is unspecified." - }, - "v1alpha1CheckClusterResponse": { - "type": "object", - "properties": { - "available": { - "type": "boolean" - }, - "errMsg": { - "type": "string" - } - } - }, - "v1alpha1CiliumConfig": { - "type": "object", - "properties": { - "extraVars": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "var1: \"value1\"\n var2: \"value2\"", - "title": "A dictionary of extra config variables to add to cilium-config, formatted like:\ncilium_config_extra_vars:" - } - } - }, - "v1alpha1CloudShell": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1CloudShellSpec", - "description": "CloudShellSpec defines the desired state of CloudShell." - }, - "status": { - "$ref": "#/definitions/v1alpha1CloudShellStatus", - "description": "CloudShellStatus defines the observed state of CloudShell." - } - }, - "description": "CloudShell is the Schema for the cloudshells API." - }, - "v1alpha1CloudShellSpec": { - "type": "object", - "properties": { - "secretRef": { - "$ref": "#/definitions/apicloudshellv1alpha1LocalSecretReference", - "title": "SecretRef represents the secret contains mandatory credentials to access the target cluster.\nThe secret should hold credentials as follows:\n- secret.data.token\n- secret.data.caBundle\nThe field is alpha phase, please open the featuregate AllowSecretStoreKubeconfig to use it.\n+optional" - }, - "once": { - "type": "boolean", - "title": "accept only one client and exit on disconnection" - }, - "commandAction": { - "type": "string", - "description": "command action specified a initialized command to cloudshell server." - }, - "ttl": { - "type": "integer", - "format": "int32", - "description": "ttl specified a period time that the cloudshell server pod is\nstop. if not to set, default 500s." - }, - "cleanup": { - "type": "boolean", - "description": "cleanup specified whether to delete cloudshell resources when\ncorresponding job status is completed." - } - }, - "description": "CloudShellSpec defines the desired state of CloudShell." - }, - "v1alpha1CloudShellStatus": { - "type": "object", - "properties": { - "phase": { - "type": "string", - "description": "phase specified status of cloudshell server." - }, - "accessUrl": { - "type": "string", - "description": "access url is be set to expose cloudshell server." - } - }, - "title": "CloudShellStatus defines the observed state of CloudShell.enum" - }, - "v1alpha1CloudShellType": { - "type": "string", - "enum": [ - "CLOUD_SHELL_TYPE_UNSPECIFIED", - "bash", - "exec", - "logs", - "upload", - "download" - ], - "default": "CLOUD_SHELL_TYPE_UNSPECIFIED", - "description": "CloudShellType defines the cloudshell command type (exec, logs, bash)." - }, - "v1alpha1Cluster": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1ClusterSpec", - "description": "ClusterSpec describes how the cluster execution will look like and when it\nwill actually run." - }, - "status": { - "$ref": "#/definitions/v1alpha1ClusterStatus", - "description": "ClusterStatus contains the cluster status. The ClusterStatus will be stored\nin the kubeadm-config ConfigMap in the cluster, and then updated by kubeadm\nwhen additional control plane instance joins or leaves the cluster." - } - } - }, - "v1alpha1ClusterKubeConfigSetting": { - "type": "object", - "properties": { - "expireWarningThreshold": { - "type": "string", - "format": "int64", - "title": "Set the expire warning threshold for cluster kubeConfig.(Unit: day)" - } - } - }, - "v1alpha1ClusterPhase": { - "type": "string", - "enum": [ - "CLUSTER_PHASE_UNSPECIFIED", - "Unknown", - "Creating", - "Running", - "Updating", - "Deleting", - "Failed", - "DeleteFailed" - ], - "default": "CLUSTER_PHASE_UNSPECIFIED", - "description": " - CLUSTER_PHASE_UNSPECIFIED: The cluster state is unspecified.\n - Unknown: The cluster state is unknown.\n - Creating: The cluster is being created.\n - Running: The cluster is running.\n - Updating: The cluster is updating.\n - Deleting: The cluster is being deleted.\n - Failed: The cluster create failed.\n - DeleteFailed: The cluster delete failed." - }, - "v1alpha1ClusterProvider": { - "type": "string", - "enum": [ - "GENERIC", - "DAOCLOUD_KUBESPRAY", - "DAOCLOUD_CLUSTER_API", - "DAOCLOUD_DCE4", - "REDHAT_OPENSHIFT4", - "SUSE_RANCHER", - "VMWARE_TANZU", - "AWS_EKS", - "ALIYUN_ACK", - "TENCENT_TKE", - "HUAWEI_CCE", - "MICROSOFT_AZURE", - "K3S", - "Oracle_OKE" - ], - "default": "GENERIC", - "description": " - GENERIC: Generic\nGENERIC indicates other providers\n - DAOCLOUD_KUBESPRAY: DaoCloud\nDAOCLOUD_KUBESPRAY indicates a provider of DaoCloud's KubeSpray Engine\n - DAOCLOUD_CLUSTER_API: DAOCLOUD_CLUSTER_API indicates a provider of DaoCloud's Cluster API Engine\n - DAOCLOUD_DCE4: DAOCLOUD_DCE4 indicates a provider of DaoCloud's DCE4 Engine\n - REDHAT_OPENSHIFT4: OverSea Distribtion\nREDHAT_OPENSHIFT4 indicates a provider of RedHat Openshift4\n - SUSE_RANCHER: SUSE_RANCHER indicates a provider of SUSE Rancher\n - VMWARE_TANZU: VMWARE_TANZU indicates a provider of VMware Tanzu\n - AWS_EKS: Public Cloud\nAWS_EKS indicates a provider of AWS EKS\n - ALIYUN_ACK: ALIYUN_ACK indicates a provider of Aliyun ACK\n - TENCENT_TKE: TENCENT_TKE indicates a provider of Tencent TKE.\n - HUAWEI_CCE: TENCENT_TKE indicates a provider of Huawei CCE.\n - MICROSOFT_AZURE: MICROSOFT_AZURE=11; indicates a provider of Microsoft Azure.\n - K3S: RANCHER_K3S=12; indicates a provider of k3s.\n - Oracle_OKE: Oracle_OKE=13; indicates a provider of Oracle OKE." - }, - "v1alpha1ClusterResourceOverride": { - "type": "object", - "properties": { - "memoryRequestToLimitPercent": { - "type": "integer", - "format": "int32", - "description": "MemoryRequestToLimitPercent (if > 0) overrides memory request to a percentage of memory limit." - }, - "cpuRequestToLimitPercent": { - "type": "integer", - "format": "int32", - "description": "CPURequestToLimitPercent (if > 0) overrides CPU request to a percentage of CPU limit." - } - }, - "description": "ClusterResourceOverride is the Schema for the ClusterResourceOverride API." - }, - "v1alpha1ClusterResourceSummary": { - "type": "object", - "properties": { - "allocatable": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Allocatable represents the resources of a cluster that are available for scheduling.\nTotal amount of allocatable resources on all nodes.\n+optional" - }, - "allocated": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Allocated represents the resources of a cluster that have been scheduled.\nTotal amount of required resources of all Pods that have been scheduled to nodes.\n+optional" - } - } - }, - "v1alpha1ClusterRoleBinding": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "subjects": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Subject" - }, - "description": "Subjects holds references to the objects the role applies to." - }, - "roleRef": { - "$ref": "#/definitions/v1alpha1RoleRef", - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in\nthe global namespace." - } - } - }, - "v1alpha1ClusterSetting": { - "type": "object", - "properties": { - "plugins": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Plugin" - }, - "description": "The plugins info in the cluster." - }, - "network": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Plugin" - }, - "description": "The network plugins info in the cluster." - }, - "addonSetting": { - "$ref": "#/definitions/v1alpha1AddonSetting", - "description": "The settings of addon." - }, - "clusterlcmSetting": { - "$ref": "#/definitions/v1alpha1ClusterlcmSetting", - "description": "The settings of cl." - }, - "etcdBackupRestoreSetting": { - "$ref": "#/definitions/v1alpha1EtcdBackupRestoreSetting", - "description": "The setting for etcdbackuprestore." - }, - "kubeanSetting": { - "$ref": "#/definitions/v1alpha1KubeanSetting", - "description": "The setting for kubean." - }, - "clusterKubeconfigSetting": { - "$ref": "#/definitions/v1alpha1ClusterKubeConfigSetting", - "title": "The setting for ClusterKubeConfig" - } - }, - "title": "setting of the cluster" - }, - "v1alpha1ClusterSettings": { - "type": "object", - "properties": { - "dkgClusterName": { - "type": "string", - "description": "The name of the manger cluster." - }, - "clusterName": { - "type": "string", - "description": "The name of the cluster which needs to be create." - }, - "aliasName": { - "type": "string", - "description": "It is an alias given by the user and can be changed at will." - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels are key/value pairs that are attached to objects." - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations to attach arbitrary metadata to objects." - }, - "describe": { - "type": "string", - "description": "describe represents the details of the cluster." - }, - "region": { - "type": "string" - }, - "zone": { - "type": "string" - }, - "kubesprayArgs": { - "$ref": "#/definitions/v1alpha1KubesprayArgs", - "description": "The Parameters for creating a cluster by kubespray." - }, - "preinstallAddons": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1AddonInfo" - }, - "title": "addon info selected by the user" - } - } - }, - "v1alpha1ClusterSpec": { - "type": "object", - "properties": { - "provider": { - "$ref": "#/definitions/v1alpha1ClusterProvider", - "description": "Provider represents the cloud provider name of the member cluster." - }, - "apiEndpoint": { - "type": "string", - "description": "The API endpoint of the member cluster. This can be a hostname,\nhostname:port, IP or IP:port." - }, - "region": { - "type": "string", - "description": "Region represents the region of the member cluster locate in." - }, - "zone": { - "type": "string", - "description": "Zone represents the zone of the member cluster locate in." - }, - "roles": { - "type": "array", - "items": { - "$ref": "#/definitions/apiclustersv1alpha1ClusterRole" - }, - "description": "Roles represents the roles of cluster." - }, - "managedBy": { - "type": "string", - "description": "ManagedBy is used for worker cluster to show\ncluster is controlled by." - }, - "aliasName": { - "type": "string", - "description": "AliasName represents the alias of the cluster." - }, - "secretRef": { - "$ref": "#/definitions/apiclustersv1alpha1LocalSecretReference", - "description": "SecretRef represents the secret contains mandatory credentials to access the member cluster." - }, - "proxyUrl": { - "type": "string", - "description": "ProxyURL is the proxy URL for the cluster.\nIf not empty, the kpanda control plane will use this proxy to talk to the cluster." - } - } - }, - "v1alpha1ClusterStatus": { - "type": "object", - "properties": { - "kubernetesVersion": { - "type": "string", - "description": "KubernetesVersion represents version of the member cluster." - }, - "kubeSystemID": { - "type": "string", - "description": "KubeSystemId represents the uuid of sub cluster kube-system namespace." - }, - "clusterVersion": { - "type": "string", - "description": "ClusterVersion represents the version of the member cluster." - }, - "serviceCIDR": { - "type": "string", - "description": "ServiceCIDR represents the service network CIDR." - }, - "clusterCIDR": { - "type": "string", - "description": "ClusterCIDR represents the Cluster CIDR." - }, - "phase": { - "$ref": "#/definitions/v1alpha1ClusterPhase", - "description": "Condition represents the status of the member cluster." - }, - "proxyMode": { - "type": "string", - "description": "ProxyMode represents the kube-proxy mode of the member cluster." - }, - "deploymentSummary": { - "$ref": "#/definitions/v1alpha1ResourceSummary", - "description": "ResourceSummary represents the deployment of the member cluster." - }, - "daemonsetSummary": { - "$ref": "#/definitions/v1alpha1ResourceSummary", - "description": "ResourceSummary represents the daemonset of the member cluster." - }, - "statefulsetSummary": { - "$ref": "#/definitions/v1alpha1ResourceSummary", - "description": "ResourceSummary represents the statefulset of the member cluster." - }, - "nodeSummary": { - "$ref": "#/definitions/v1alpha1ResourceSummary", - "description": "ResourceSummary represents the node of the member cluster." - }, - "podSummary": { - "$ref": "#/definitions/v1alpha1ResourceSummary", - "description": "ResourceSummary represents the pod of the member cluster." - }, - "resourceSummary": { - "$ref": "#/definitions/v1alpha1ClusterResourceSummary", - "description": "ResourceSummary represents the resource of the member cluster." - }, - "cpuUsage": { - "type": "number", - "format": "double", - "description": "The cpu usage of the member cluster." - }, - "memoryUsage": { - "type": "number", - "format": "double", - "description": "The memory usage of the member cluster." - }, - "gpuTotal": { - "type": "integer", - "format": "int32" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current condition of cluster." - }, - "settings": { - "$ref": "#/definitions/v1alpha1ClusterSetting" - }, - "networkMode": { - "type": "array", - "items": { - "type": "string" - }, - "title": "NetworkMode represents the cluster's network mode" - }, - "maxSigningDuration": { - "type": "number", - "format": "double" - }, - "kubeconfigExpireWarnning": { - "type": "boolean" - }, - "kubeconfigExpireTime": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1ClusterStreamResponse": { - "type": "object", - "properties": { - "message": { - "$ref": "#/definitions/v1alpha1Message" - }, - "cluster": { - "$ref": "#/definitions/v1alpha1Cluster" - } - } - }, - "v1alpha1ClusterSummary": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of cluster." - }, - "phase": { - "$ref": "#/definitions/v1alpha1ClusterPhase" - }, - "kubeSystemID": { - "type": "string", - "description": "kubeSystemID is the cluster system ID." - } - } - }, - "v1alpha1ClusterlcmOps": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1ClusterlcmOpsSpec", - "description": "ClusterSpec defines the desired state of a member cluster." - }, - "status": { - "$ref": "#/definitions/v1alpha1ClusterlcmOpsStatus" - } - } - }, - "v1alpha1ClusterlcmOpsSpec": { - "type": "object", - "properties": { - "kuBeanCluster": { - "type": "string", - "title": "KuBeanCluster the name of KuBeanCluster.\n+required" - }, - "actionType": { - "$ref": "#/definitions/v1alpha1ActionType" - }, - "action": { - "type": "string" - }, - "image": { - "type": "string" - } - }, - "description": "ClusterSpec defines the desired state of a member cluster." - }, - "v1alpha1ClusterlcmOpsStatus": { - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "jobRef": { - "$ref": "#/definitions/v1alpha1JobRef" - }, - "phase": { - "$ref": "#/definitions/clusterlcmv1alpha1Phase" - }, - "startTime": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1ClusterlcmResponse": { - "type": "object", - "properties": { - "clusterName": { - "type": "string" - }, - "dkgClusterName": { - "type": "string" - }, - "opsRef": { - "$ref": "#/definitions/v1alpha1ClusterlcmOps" - } - }, - "description": "KuBeanClusterOps is the result of the operation after the cluster changes." - }, - "v1alpha1ClusterlcmSetting": { - "type": "object", - "properties": { - "enableLocalService": { - "type": "boolean", - "description": "enable_local_service controlled whether to use the\nlocal repo source when creating the cluster." - }, - "enableDeletionProtection": { - "type": "boolean", - "description": "enable_deletion_protection controlled whether the cluster\ncan use the reset function." - } - } - }, - "v1alpha1CommonNetworkConfig": { - "type": "object", - "properties": { - "podIPv4CIDR": { - "type": "string", - "title": "podIPv4CIDR is the pod ipv4 CIDR.s" - }, - "serviceIPv4CIDR": { - "type": "string" - }, - "kubeProxyMode": { - "$ref": "#/definitions/CommonNetworkConfigKubeProxyMode" - }, - "enableVip": { - "type": "boolean" - }, - "kubeVipAddr": { - "type": "string" - }, - "kubeVipLbEnable": { - "type": "boolean" - }, - "podIPv6CIDR": { - "type": "string" - }, - "serviceIPv6CIDR": { - "type": "string" - }, - "enableDualStack": { - "type": "boolean" - } - } - }, - "v1alpha1ConfigMap": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "immutable": { - "type": "boolean", - "title": "Immutable, if set to true, ensures that data stored in the ConfigMap cannot\nbe updated (only object metadata can be modified).\nIf not set to true, the field can be modified at any time.\nDefaulted to nil.\n+optional" - }, - "data": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Data contains the configuration data.\nEach key must consist of alphanumeric characters, '-', '_' or '.'.\nValues with non-UTF-8 byte sequences must use the BinaryData field.\nThe keys stored in Data must not overlap with the keys in\nthe BinaryData field, this is enforced during validation process.\n+optional" - }, - "binaryData": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "byte" - }, - "title": "BinaryData contains the binary data.\nEach key must consist of alphanumeric characters, '-', '_' or '.'.\nBinaryData can contain byte sequences that are not in the UTF-8 range.\nThe keys stored in BinaryData must not overlap with the ones in\nthe Data field, this is enforced during validation process.\nUsing this field will require 1.10+ apiserver and\nkubelet.\n+optional" - } - }, - "description": "ConfigMap holds configuration data for pods to consume." - }, - "v1alpha1ConfigMapEnvSource": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This must match the Name of a Volume." - }, - "optional": { - "type": "boolean" - } - }, - "description": "ConfigMapEnvSource selects a ConfigMap to populate the environment\nvariables with.\nThe contents of the target ConfigMap's Data field will represent the\nkey-value pairs as environment variables." - }, - "v1alpha1ConfigMapKeySelector": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The ConfigMap to select from." - }, - "key": { - "type": "string", - "description": "The key to select." - }, - "optional": { - "type": "boolean", - "title": "Specify whether the ConfigMap or its key must be defined\n+optional" - } - }, - "description": "ConfigMapKeySelector selects a key from a ConfigMap." - }, - "v1alpha1ConfigMapVolumeSource": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1KeyToPath" - }, - "title": "If unspecified, each key-value pair in the Data field of the referenced\nConfigMap will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the ConfigMap,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional" - }, - "defaultMode": { - "type": "integer", - "format": "int32", - "title": "Optional: mode bits used to set permissions on created files by default.\nMust be an octal value between 0000 and 0777 or a decimal value between 0\nand 511. YAML accepts both octal and decimal values, JSON requires decimal\nvalues for mode bits. Defaults to 0644. Directories within the path are not\naffected by this setting. This might be in conflict with other options that\naffect the file mode, like fsGroup, and the result can be other mode bits\nset. +optional" - }, - "optional": { - "type": "boolean", - "title": "Specify whether the ConfigMap or its keys must be defined\n+optional" - } - }, - "description": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a\nvolume as files using the keys in the Data field as the file names, unless\nthe items element is populated with specific mappings of keys to paths.\nConfigMap volumes support ownership management and SELinux relabeling." - }, - "v1alpha1Container": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of Container." - }, - "image": { - "type": "string", - "description": "The used image of Container." - }, - "command": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The container command." - }, - "args": { - "type": "array", - "items": { - "type": "string" - } - }, - "workingDir": { - "type": "string" - }, - "ports": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Ports" - } - }, - "envFrom": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1EnvFromSource" - }, - "title": "EnvFromSource represents the source of a set of ConfigMaps" - }, - "env": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1EnvVar" - }, - "description": "EnvVar represents an environment variable present in a Container." - }, - "resources": { - "$ref": "#/definitions/v1alpha1ResourceRequirements", - "description": "Source represents a source for the value of an EnvVar." - }, - "volumeMounts": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1VolumeMount" - }, - "description": "VolumeMount describes a mounting of a Volume within a container." - }, - "livenessProbe": { - "$ref": "#/definitions/v1alpha1Probe", - "description": "Liveness probe is aimed to help in situarions where fluentd\nsilently hangs for no apparent reasons until manual restart.\nThe idea of this probe is that if fluentd is not queueing or\nflushing chunks for 5 minutes, something is not right. If\nyou want to change the fluentd configuration, reducing amount of\nlogs fluentd collects, consider changing the threshold or turning\nliveness probe off completely." - }, - "readinessProbe": { - "$ref": "#/definitions/v1alpha1Probe", - "description": "Readiness updates the cached pod status with the given readiness, and\ntriggers a status update." - }, - "startupProbe": { - "$ref": "#/definitions/v1alpha1Probe", - "description": "Startup updates the cached container status with the given startup, and\ntriggers a status update." - }, - "lifecycle": { - "$ref": "#/definitions/v1alpha1Lifecycle", - "description": "The life cycle of a Container." - }, - "imagePullPolicy": { - "type": "string", - "description": "Pull image policy." - }, - "securityContext": { - "$ref": "#/definitions/v1alpha1SecurityContext", - "description": "SecurityContext holds security attributes." - } - } - }, - "v1alpha1ContainerControlledValues": { - "type": "string", - "enum": [ - "CONTAINER_CONTROLLED_VALUES_UNSPECIFIED", - "RequestsAndLimits", - "RequestsOnly" - ], - "default": "CONTAINER_CONTROLLED_VALUES_UNSPECIFIED", - "description": "ContainerControlledValues controls which resource value should be autoscaled.\n\n - CONTAINER_CONTROLLED_VALUES_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - RequestsAndLimits: ContainerControlledValuesRequestsAndLimits means resource request and limits\nare scaled automatically. The limit is scaled proportionally to the request.\n - RequestsOnly: ContainerControlledValuesRequestsOnly means only requested resource is autoscaled." - }, - "v1alpha1ContainerResourcePolicy": { - "type": "object", - "properties": { - "containerName": { - "type": "string", - "description": "Name of the container or DefaultContainerResourcePolicy, in which\ncase the policy is used by the containers that don't have their own\npolicy specified." - }, - "mode": { - "$ref": "#/definitions/ContainerResourcePolicyContainerScalingMode", - "description": "Whether autoscaler is enabled for the container. The default is \"Auto\"." - }, - "minAllowed": { - "$ref": "#/definitions/v1alpha1ResourceList", - "description": "Specifies the minimal amount of resources that will be recommended\nfor the container. The default is no minimum." - }, - "maxAllowed": { - "$ref": "#/definitions/v1alpha1ResourceList", - "description": "Specifies the maximum amount of resources that will be recommended\nfor the container. The default is no maximum." - }, - "controlledResources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ResourceName" - }, - "description": "Specifies the type of recommendations that will be computed\n(and possibly applied) by VPA.\nIf not specified, the default of [ResourceCPU, ResourceMemory] will be used." - }, - "controlleValues": { - "$ref": "#/definitions/v1alpha1ContainerControlledValues", - "description": "Specifies which resource values should be controlled.\nThe default is \"RequestsAndLimits\"." - } - }, - "description": "ContainerResourcePolicy controls how autoscaler computes the recommended\nresources for a specific container." - }, - "v1alpha1ContainerState": { - "type": "object", - "properties": { - "waiting": { - "$ref": "#/definitions/v1alpha1ContainerStateWaiting", - "description": "ContainerStateWaiting is a waiting state of a container." - }, - "running": { - "$ref": "#/definitions/v1alpha1ContainerStateRunning", - "description": "ContainerStateRunning indicates a currently running container." - }, - "terminated": { - "$ref": "#/definitions/v1alpha1ContainerStateTerminated", - "description": "ContainerStateTerminated indicates a container that ran and completed\n(\"stopped\" in other contexts, although a created container is technically\nalso \"stopped\")." - } - } - }, - "v1alpha1ContainerStateRunning": { - "type": "object", - "properties": { - "startedAt": { - "type": "string", - "format": "int64" - } - }, - "description": "ContainerStateRunning indicates a currently running container." - }, - "v1alpha1ContainerStateTerminated": { - "type": "object", - "properties": { - "exitCode": { - "type": "integer", - "format": "int32", - "description": "Container exit code." - }, - "signal": { - "type": "integer", - "format": "int32", - "description": "Signal defines a signal that can trigger eviction of pods on a node." - }, - "reason": { - "type": "string", - "description": "The reason for the condition's last transition." - }, - "message": { - "type": "string", - "description": "The container terminated information." - }, - "startedAt": { - "type": "string", - "format": "int64", - "description": "The container created time." - }, - "finishedAt": { - "type": "string", - "format": "int64", - "description": "The container terminated time." - } - }, - "description": "ContainerStateExited indicates a container that ran\nand completed (\"stopped\" in other contexts, although a created container is\ntechnically also \"stopped\")." - }, - "v1alpha1ContainerStateWaiting": { - "type": "object", - "properties": { - "reason": { - "type": "string", - "title": "(brief) reason the container is not yet running.\n+optional" - }, - "message": { - "type": "string", - "title": "Message regarding why the container is not yet running.\n+optional" - } - }, - "description": "ContainerStateWaiting represents 'Waiting' container state." - }, - "v1alpha1ContainerStatus": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This must be a DNS_LABEL. Each container in a pod must have a unique name.\nCannot be updated." - }, - "state": { - "$ref": "#/definitions/v1alpha1ContainerState", - "title": "Details about the container's current condition.\n+optional" - }, - "ready": { - "type": "boolean", - "description": "Specifies whether the container has passed its readiness probe." - }, - "restartCount": { - "type": "integer", - "format": "int32", - "description": "The number of times the container has been restarted, currently based on\nthe number of dead containers that have not yet been removed.\nNote that this is calculated from dead containers. But those containers are\nsubject to garbage collection. This value will get capped at 5 by GC." - }, - "image": { - "type": "string", - "title": "The image the container is running.\nMore info: https://kubernetes.io/docs/concepts/containers/images" - }, - "started": { - "type": "boolean", - "title": "Specifies whether the container has passed its startup probe.\nInitialized as false, becomes true after startupProbe is considered\nsuccessful. Resets to false when the container is restarted, or if kubelet\nloses state temporarily. Is always true when no startupProbe is defined.\n+optional" - }, - "phase": { - "$ref": "#/definitions/v1alpha1ContainerStatusPhase", - "description": "Phase represents the phase to search." - } - }, - "description": "ContainerStatus represents the container status." - }, - "v1alpha1ContainerStatusPhase": { - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Waiting", - "Running", - "Terminated" - ], - "default": "PHASE_UNSPECIFIED", - "description": "Phase represents the phase of the container.\n\n - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Waiting: Waiting is a waiting state of a pod.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Terminated: Terminated indicates a pod that ran and completed\n(\"stopped\" in other contexts, although a created container is technically\nalso \"stopped\")." - }, - "v1alpha1ControlleRrevision": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "data": { - "$ref": "#/definitions/v1alpha1Deployment", - "description": "Data is the serialized representation of the state." - }, - "revision": { - "type": "string", - "format": "int64", - "description": "Revision indicates the revision of the state represented by Data." - } - } - }, - "v1alpha1CreateCloudShellRequest": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1CloudShellType", - "description": "type specified the cloudshell command type (exec, logs, bash)." - }, - "cluster": { - "type": "string", - "description": "cluster specified the cluster name for cloudshell." - }, - "namespace": { - "type": "string", - "description": "namespace defines the namespace of the specified pod." - }, - "podName": { - "type": "string", - "description": "pod_name defines the name of the specified pod." - }, - "filePath": { - "type": "string", - "description": "file_path defines the file path." - }, - "container": { - "type": "string", - "description": "container defines which container or init container to create cloud shell." - }, - "logCount": { - "type": "integer", - "format": "int32", - "description": "log_count defines the count of display logs." - }, - "data": { - "$ref": "#/definitions/v1alpha1CloudShell", - "description": "cloud_shell defines the data of cloud shell." - } - }, - "title": "CreateIngressResponse the response of create cluster ingresses" - }, - "v1alpha1CreateClusterCustomResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "CreateClusterCustomResourceResponse represents response of creating one\nCustomResource of cluster scope" - }, - "v1alpha1CreateClusterRequest": { - "type": "object", - "properties": { - "dkgClusterName": { - "type": "string", - "description": "The name of the manger cluster." - }, - "clusterName": { - "type": "string", - "description": "The name of the cluster which needs to be create." - }, - "aliasName": { - "type": "string", - "description": "It is an alias given by the user and can be changed at will." - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels are key/value pairs that are attached to objects." - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations to attach arbitrary metadata to objects." - }, - "describe": { - "type": "string", - "description": "describe represents the details of the cluster." - }, - "region": { - "type": "string" - }, - "zone": { - "type": "string" - }, - "kubesprayArgs": { - "$ref": "#/definitions/v1alpha1KubesprayArgs", - "description": "The Parameters for creating a cluster by kubespray." - }, - "preinstallAddons": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1AddonInfo" - }, - "title": "addon info selected by the user" - }, - "retry": { - "type": "boolean", - "title": "retry defines the flag to retry" - } - } - }, - "v1alpha1CreateConfigMapResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the ConfigMap YAML details" - } - } - }, - "v1alpha1CreateCronHorizontalPodAutoscalerResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the cron hpa json details" - } - } - }, - "v1alpha1CreateCustomResourceDefinitionResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the customResourceDefinition YAML details." - } - }, - "title": "CreateCustomResourceDefinitionResponse represents response of creating\na createCustomResourceDefinition" - }, - "v1alpha1CreateCustomResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "CreateCustomResourceResponse represents response of creating one\nCustomResource of namespaced scope" - }, - "v1alpha1CreateHelmReleaseRequest": { - "type": "object", - "properties": { - "cluster": { - "type": "string", - "description": "cluster represents which cluster the chart belongs to." - }, - "namespace": { - "type": "string", - "description": "Namespace represents which namespace the helm release belongs to." - }, - "repo": { - "type": "string", - "description": "The repo represents for the charts belongs to." - }, - "timeout": { - "type": "string", - "description": "Time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s)." - }, - "wait": { - "type": "boolean", - "description": "If set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as timeout." - }, - "atomic": { - "type": "boolean", - "description": "If set, the installation process deletes the installation on failure. The --wait flag will be set automatically if --atomic is used." - }, - "debug": { - "type": "boolean", - "description": "Enable verbose output." - }, - "disableHooks": { - "type": "boolean", - "description": "Prevent hooks from running during install." - }, - "disableOpenApiValidation": { - "type": "boolean", - "description": "If set, the installation process will not validate rendered templates against the Kubernetes OpenAPI Schema." - }, - "createNamespace": { - "type": "boolean", - "description": "Create the release namespace if not present." - }, - "checkReleaseName": { - "type": "boolean", - "description": "Check whether the release name entered during installation matches the release name in charts annotations." - }, - "chart": { - "$ref": "#/definitions/v1alpha1HelmChartInstall" - } - } - }, - "v1alpha1CreateHelmReleaseResponse": { - "type": "object", - "properties": { - "cluster": { - "type": "string", - "description": "cluster represents which cluster the helmrelease belongs to." - }, - "namespace": { - "type": "string", - "description": "Namespace represents which namespace the helmrelease belongs to." - }, - "releaseName": { - "type": "string" - } - } - }, - "v1alpha1CreateHorizontalPodAutoscalerResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the hpa YAML details" - } - } - }, - "v1alpha1CreateIngressResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the ingress YAML details." - } - }, - "title": "CreateIngressResponse the response of create cluster ingresses" - }, - "v1alpha1CreateLimitRangeResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the LimitRange YAML details." - } - }, - "description": "CreateLimitRangeResponse returns the created LimitRange data information." - }, - "v1alpha1CreateNamespaceResponse": { - "type": "object", - "properties": { - "namespace": { - "$ref": "#/definitions/v1alpha1Namespace" - } - }, - "description": "Create Namespace information." - }, - "v1alpha1CreateNetworkPolicyResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the networkpolicy YAML details." - } - }, - "title": "CreateNetworkPolicyResponse the response of create cluster networkpolicies" - }, - "v1alpha1CreateOpenAPIClusterCertResponse": { - "type": "object", - "properties": { - "kubeConfigString": { - "type": "string", - "description": "one of cluster or kubeSystemID has value." - }, - "cluster": { - "type": "string", - "description": "Cluster represents which cluster belongs to." - } - }, - "description": "CreateOpenAPIClusterCertResponse returns a openapi cert information." - }, - "v1alpha1CreateOrUpdateClusterResponse": { - "type": "object", - "properties": { - "cluster": { - "$ref": "#/definitions/v1alpha1Cluster", - "description": "Cluster the specified job belongs to." - } - }, - "description": "CreateOrUpdateCluster creates a Cluster if the target resource doesn't exist.\nIf the resource exists already, this function will update the resource\ninstead." - }, - "v1alpha1CreatePersistentVolumeClaimResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the pvc YAML details" - } - }, - "title": "CreatePersistentVolumeClaimResponse represents the response of create Pvc" - }, - "v1alpha1CreatePersistentVolumeResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the PersistentVolume YAML details." - } - }, - "description": "CreatePersistentVolumeResponse returns the created PersistentVolume data information." - }, - "v1alpha1CreateResourceQuotaResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the ResourceQuota YAML details." - } - }, - "description": "CreateResourceQuotaResponse returns the created ResourceQuota data information." - }, - "v1alpha1CreateResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The data field is the resources YAML details." - } - }, - "title": "CreateResourceResponse represents response of creating resources from yaml" - }, - "v1alpha1CreateSecretResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the Secret YAML details" - } - }, - "description": "It returns the created Secret data information." - }, - "v1alpha1CreateServiceAccountResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the StorageClass YAML details" - } - }, - "title": "CreateServiceAccount represents the response of create sa" - }, - "v1alpha1CreateServiceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "Data is the Service YAML details" - } - }, - "description": "It returns the created Service data information." - }, - "v1alpha1CreateStorageClassResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the StorageClass YAML details" - } - }, - "title": "CreateStorageClassResponse represents the response of create Pvc" - }, - "v1alpha1CreateVerticalPodAutoscalerResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the cron vpa json details" - } - }, - "description": "CreateVerticalPodAutoscalerResponse returns the yaml of the created vpa." - }, - "v1alpha1CreateVolumeSnapshotResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the VolumeSnapshot YAML details" - } - }, - "title": "CreateVolumeSnapshotResponse represents the response of create VolumeSnapshot snapshot" - }, - "v1alpha1CronHPACondition": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Type of job condition, Complete or Failed." - }, - "jobId": { - "type": "string", - "description": "The execution job id." - }, - "schedule": { - "type": "string", - "description": "The schedule of cron hpa job." - }, - "targetSize": { - "type": "integer", - "format": "int32", - "description": "The target replicas size of target workload." - }, - "runOnce": { - "type": "boolean", - "description": "RunOnce indicates whether to scale workload once." - }, - "jobState": { - "$ref": "#/definitions/v1alpha1CronHPAConditionJobState", - "description": "The state of corn hpa job." - }, - "lastProbeTime": { - "type": "string", - "format": "int64", - "description": "Last probe time for cron hpa job." - }, - "message": { - "type": "string", - "title": "Human readable message indicating details about last transition.\n+optional" - } - } - }, - "v1alpha1CronHPAConditionJobState": { - "type": "string", - "enum": [ - "JOB_STATE_UNSPECIFIED", - "Succeed", - "Failed", - "Submitted" - ], - "default": "JOB_STATE_UNSPECIFIED", - "description": "The enum for cron hpa job." - }, - "v1alpha1CronHPAJob": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name for cron hoa job." - }, - "schedule": { - "type": "string", - "description": "The rule for cron hoa job." - }, - "runOnce": { - "type": "boolean", - "description": "RunOnce indicates whether to scale workload once." - }, - "targetSize": { - "type": "integer", - "format": "int32", - "description": "The target replicas size of target workload." - } - }, - "description": "CronHPAJob is the rule for cron hpa." - }, - "v1alpha1CronHorizontalPodAutoscaler": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1CronHorizontalPodAutoscalerSpec", - "description": "CronHorizontalPodAutoscalerSpec defines the desired state of CronHorizontalPodAutoscaler." - }, - "status": { - "$ref": "#/definitions/v1alpha1CronHorizontalPodAutoscalerStatus", - "description": "current information about the autoscaler." - } - }, - "description": "configuration of a horizontal pod autoscaler." - }, - "v1alpha1CronHorizontalPodAutoscalerSpec": { - "type": "object", - "properties": { - "excludeDates": { - "type": "array", - "items": { - "type": "string" - }, - "description": "ExcludeDates is the special period to exclude cronHPA execution." - }, - "scaleTargetRef": { - "$ref": "#/definitions/v1alpha1CrossVersionObjectReference", - "description": "reference to scaled resource; cron horizontal pod autoscaler will\nset the desired number of pods by given jobs." - }, - "jobs": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CronHPAJob" - }, - "description": "The execution job details." - } - }, - "title": "CronHorizontalPodAutoscalerSpec defines the desired state of CronHorizontalPodAutoscaler" - }, - "v1alpha1CronHorizontalPodAutoscalerStatus": { - "type": "object", - "properties": { - "excludeDates": { - "type": "array", - "items": { - "type": "string" - }, - "description": "ExcludeDates is the special period to exclude cronHPA execution." - }, - "scaleTargetRef": { - "$ref": "#/definitions/v1alpha1CrossVersionObjectReference", - "title": "Reference to scaled resource;" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CronHPACondition" - }, - "description": "Current service state of cron hpa." - } - } - }, - "v1alpha1CronJob": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "title": "Standard object's metadata.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optiona" - }, - "spec": { - "$ref": "#/definitions/v1alpha1CronJobSpec", - "description": "CronJobSpec describes how the job execution will look like and when it will actually run." - }, - "status": { - "$ref": "#/definitions/v1alpha1CronJobStatus", - "description": "CronJobStatus represents the current state of a cron job." - }, - "availed": { - "type": "integer", - "format": "int32", - "description": "The number of available cronjob." - }, - "total": { - "type": "integer", - "format": "int32", - "description": "The number of totally cronjob." - }, - "executionTimestamp": { - "type": "string", - "format": "int64", - "description": "Information when was the time the cronjob was successfully executed." - }, - "images": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Images the cronjob use." - } - }, - "description": "CronJob represents the configuration of a single cron job." - }, - "v1alpha1CronJobSpec": { - "type": "object", - "properties": { - "schedule": { - "type": "string", - "description": "The schedule in Cron format." - }, - "paused": { - "type": "boolean", - "description": "Indicates that the cronjob is paused." - } - }, - "description": "Specification of the desired behavior of a cron job, including the schedule." - }, - "v1alpha1CronJobStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/CronJobStatusCronJobState", - "description": "State of a cron job." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/CronJobStatusCronJobCondition" - }, - "description": "Current condition of cronjob." - } - }, - "description": "Current status of a cron job." - }, - "v1alpha1CrossVersionObjectReference": { - "type": "object", - "properties": { - "kind": { - "type": "string", - "title": "Kind of the referent; More info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"" - }, - "name": { - "type": "string", - "title": "Name of the referent; More info:\nhttp://kubernetes.io/docs/identifiers#names" - }, - "apiVersion": { - "type": "string", - "title": "API version of the referent" - } - }, - "description": "CrossVersionObjectReference contains enough information to let you identify\nthe referred resource." - }, - "v1alpha1CustomMetricValue": { - "type": "object", - "properties": { - "metricName": { - "type": "string", - "title": "the name of the metric" - }, - "value": { - "type": "string", - "title": "the value of the metric for this" - }, - "timestamp": { - "type": "string", - "format": "int64", - "title": "indicates the time at which the metrics were produced" - }, - "describedObject": { - "$ref": "#/definitions/CustomMetricValueDescribedObject", - "title": "a reference to the described object" - } - } - }, - "v1alpha1CustomResource": { - "type": "object", - "properties": { - "kind": { - "type": "string", - "description": "Kind represents the kind of CustomResource." - }, - "apiVersion": { - "type": "string", - "description": "APIVersion represents the apiVersion of CustomResource." - }, - "name": { - "type": "string", - "description": "Name represents the name of CustomResource." - }, - "namespace": { - "type": "string", - "description": "Namespace represents which namespace the CustomResource belongs to." - }, - "creationTimestamp": { - "type": "string", - "format": "int64", - "description": "CreationTimestamp represents the creationTime of the CustomResource." - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Map of string keys and values that can be used to organize and categorize\n(scope and select) objects. May match selectors of replication controllers\nand services.\nMore info: http://kubernetes.io/docs/labels\n+optional" - }, - "data": { - "type": "string", - "description": "The Data field is the CustomResource YAML details." - } - }, - "title": "CustomResource represents the CustomResource message" - }, - "v1alpha1CustomResourceDefinition": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "title": "Metadata is that all persisted resources must have, which includes all\nobjects" - }, - "spec": { - "$ref": "#/definitions/v1alpha1CustomResourceDefinitionSpec", - "description": "Spec is the desired behavior of the CustomResource." - }, - "status": { - "$ref": "#/definitions/v1alpha1CustomResourceDefinitionStatus", - "description": "status is the status information of the CustomResource." - } - }, - "title": "CustomResourceDefinition message of CustomResource definition" - }, - "v1alpha1CustomResourceDefinitionNames": { - "type": "object", - "properties": { - "plural": { - "type": "string", - "description": "Plural is the plural name of the resource to serve. It must match the name\nof the CustomResourceDefinition-registration too: plural.group and it must\nbe all lowercase." - }, - "singular": { - "type": "string", - "title": "Singular is the singular name of the resource. It must be all lowercase\nDefaults to lowercased " - }, - "shortNames": { - "type": "array", - "items": { - "type": "string" - }, - "description": "ShortNames are short names for the resource. It must be all lowercase." - }, - "kind": { - "type": "string", - "description": "Kind is the serialized kind of the resource. It is normally CamelCase and\nsingular." - }, - "listKind": { - "type": "string", - "description": "ListKind is the serialized kind of the list for this resource. Defaults to\nList." - }, - "categories": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Categories is a list of grouped resources custom resources belong to (e.g.\n'all') +optional" - } - }, - "title": "CustomResourceDefinitionNames message of CustomResource definition names" - }, - "v1alpha1CustomResourceDefinitionSpec": { - "type": "object", - "properties": { - "group": { - "type": "string", - "title": "Group is the group this resource belongs in" - }, - "names": { - "$ref": "#/definitions/v1alpha1CustomResourceDefinitionNames", - "title": "Names are the names used to describe this custom resource" - }, - "scope": { - "$ref": "#/definitions/CustomResourceDefinitionSpecResourceScope", - "title": "Scope indicates whether this resource is cluster or namespace scoped.\nDefault is namespaced" - }, - "versions": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CustomResourceDefinitionVersion" - }, - "description": "Versions is the list of all supported versions for this resource.\nIf Version field is provided, this field is optional.\nValidation: All versions must use the same validation schema for now. i.e.,\ntop level Validation field is applied to all of these versions. Order: The\nversion name will be used to compute the order. If the version string is\n\"kube-like\", it will sort above non \"kube-like\" version strings, which are\nordered lexicographically. \"Kube-like\" versions start with a \"v\", then are\nfollowed by a number (the major version), then optionally the string\n\"alpha\" or \"beta\" and another number (the minor version). These are sorted\nfirst by GA > beta > alpha (where GA is a version with no suffix such as\nbeta or alpha), and then by comparing major version, then minor version. An\nexample sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1,\nv12alpha1, v11alpha2, foo1, foo10." - } - }, - "title": "CustomResourceDefinitionSpec message of CustomResource definition spec" - }, - "v1alpha1CustomResourceDefinitionStatus": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current condition of cluster." - } - }, - "title": "CustomResourceDefinitionStatus represents custom resource definition status" - }, - "v1alpha1CustomResourceDefinitionVersion": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name is the version name, e.g. “v1”, “v2beta1”, etc." - }, - "served": { - "type": "boolean", - "title": "Served is a flag enabling/disabling this version from being served via REST\nAPIs" - }, - "storage": { - "type": "boolean", - "description": "Storage flags the version as storage version. There must be exactly one\nflagged as storage version." - }, - "deprecated": { - "type": "boolean", - "description": "deprecated indicates this version of the custom resource API is deprecated.\nWhen set to true, API requests to this version receive a warning header in\nthe server response. Defaults to false." - } - }, - "title": "CustomResourceDefinitionVersion message of CustomResource definition version" - }, - "v1alpha1DNSConfig": { - "type": "object", - "properties": { - "enableNodeLocalDns": { - "type": "boolean" - }, - "upstreamDnsServers": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1DaemonSet": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "title": "Standard object's metadata.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata\n+optional" - }, - "spec": { - "$ref": "#/definitions/v1alpha1DaemonSetSpec", - "title": "The desired behavior of this daemon set.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status\n+optional" - }, - "status": { - "$ref": "#/definitions/v1alpha1DaemonSetStatus", - "title": "The current status of this daemon set. This data may be\nout of date by some window of time.\nPopulated by the system.\nRead-only.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status\n+optional" - }, - "revision": { - "type": "string", - "format": "int64", - "title": "The revision to rollback to. If set to 0, rollback to the last revision.\n+optional" - } - }, - "description": "DaemonSet represents the configuration of a daemonSet." - }, - "v1alpha1DaemonSetSpec": { - "type": "object", - "properties": { - "template": { - "$ref": "#/definitions/v1alpha1PodTemplateSpec", - "title": "An object that describes the pod that will be created.\nThe DaemonSet will create exactly one copy of this pod on every node\nthat matches the template's node selector (or on every node if no node\nselector is specified).\nMore info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template" - }, - "updateStrategy": { - "$ref": "#/definitions/typesUpdateStrategy", - "title": "An update strategy to replace existing DaemonSet pods with new pods.\n+optional" - } - }, - "description": "DaemonSetSpec is the specification of a daemonSet." - }, - "v1alpha1DaemonSetStatus": { - "type": "object", - "properties": { - "desiredNumberScheduled": { - "type": "integer", - "format": "int32", - "description": "The total number of nodes that should be running the daemon\npod (including nodes correctly running the daemon pod)." - }, - "numberAvailable": { - "type": "integer", - "format": "int32", - "title": "The number of nodes that should be running the\ndaemon pod and have one or more of the daemon pod running and\navailable (ready for at least spec.minReadySeconds)\n+optional" - }, - "state": { - "$ref": "#/definitions/typesWorkloadState", - "title": "WorkloadState describes the state of daemonsets" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current service state of daemonSet." - } - }, - "description": "DaemonSetStatus represents the current status of a daemon set." - }, - "v1alpha1DeleteHelmReleaseResponse": { - "type": "object", - "properties": { - "cluster": { - "type": "string", - "description": "cluster represents which cluster the helmrelease belongs to." - }, - "namespace": { - "type": "string", - "description": "Namespace represents which namespace the helmrelease belongs to." - }, - "releaseName": { - "type": "string" - } - } - }, - "v1alpha1DeletionPropagation": { - "type": "string", - "enum": [ - "DELETION_PROPAGATION_UNSPECIFIED", - "DELETION_PROPAGATION_ORPHAN", - "DELETION_PROPAGATION_BACKGROUND", - "DELETION_PROPAGATION_FOREGROUND" - ], - "default": "DELETION_PROPAGATION_UNSPECIFIED", - "description": " - DELETION_PROPAGATION_ORPHAN: Orphans the dependents.\n - DELETION_PROPAGATION_BACKGROUND: Deletes the object from the key-value store, the garbage collector will\ndelete the dependents in the background.\n - DELETION_PROPAGATION_FOREGROUND: The object exists in the key-value store until the garbage collector\ndeletes all the dependents whose ownerReference.blockOwnerDeletion=true\nfrom the key-value store. API sever will put the \"foregroundDeletion\"\nfinalizer on the object, and sets its deletionTimestamp. This policy is\ncascading, i.e., the dependents will be deleted with Foreground." - }, - "v1alpha1Dependency": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "name is the name of the dependency.\nThis must mach the name in the dependency's Chart.yaml." - }, - "version": { - "type": "string", - "description": "version is the version (range) of this chart.\nA lock file will always produce a single version, while a dependency\nmay contain a semantic version range." - }, - "repository": { - "type": "string", - "description": "The URL to the repository.\nAppending `index.yaml` to this string should result in a URL that can be\nused to fetch the repository index." - }, - "condition": { - "type": "string", - "title": "A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - }, - "title": "tags can be used to group charts for enabling/disabling together" - }, - "enabled": { - "type": "boolean", - "title": "enabled bool determines if chart should be loaded" - }, - "importValues": { - "type": "array", - "items": { - "type": "string" - }, - "description": "import_values holds the mapping of source values to parent key to be imported. Each item can be a\nstring or pair of child/parent sublist items." - }, - "alias": { - "type": "string", - "title": "alias usable alias to be used for the chart" - } - }, - "description": "Dependencies can be used to express developer intent, or to capture the state\nof a chart." - }, - "v1alpha1Deployment": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Metadata is that all persisted resources must have, which includes all objects\nusers must create." - }, - "spec": { - "$ref": "#/definitions/v1alpha1DeploymentSpec", - "title": "Specification of the desired behavior of the Deployment.\n+optional" - }, - "status": { - "$ref": "#/definitions/v1alpha1DeploymentStatus", - "title": "Most recently observed status of the Deployment.\n+optional" - }, - "revision": { - "type": "string", - "format": "int64", - "title": "The revision to rollback to. If set to 0, rollback to the last revision.\n+optional" - } - }, - "description": "Deployment provides declarative updates for Pods and ReplicaSets." - }, - "v1alpha1DeploymentSpec": { - "type": "object", - "properties": { - "template": { - "$ref": "#/definitions/v1alpha1PodTemplateSpec", - "title": "Template describes the data a pod should have when created from a template" - }, - "strategy": { - "$ref": "#/definitions/typesUpdateStrategy", - "description": "Strategy indicates the strategy that the controller\nwill use to perform updates. It includes any additional parameters necessary\nto perform the update for the indicated strategy." - }, - "paused": { - "type": "boolean", - "description": "Indicates that the deployment is paused." - } - }, - "description": "DeploymentSpec specifies the state of a Deployment." - }, - "v1alpha1DeploymentStatus": { - "type": "object", - "properties": { - "availableReplicas": { - "type": "integer", - "format": "int32", - "title": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\n+optional" - }, - "readyReplicas": { - "type": "integer", - "format": "int32", - "title": "Total number of ready pods targeted by this deployment.\n+optional" - }, - "replicas": { - "type": "integer", - "format": "int32", - "title": "Total number of non-terminated pods targeted by this deployment (their labels match the selector).\n+optional" - }, - "state": { - "$ref": "#/definitions/typesWorkloadState", - "title": "state describes the state of deployments" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current service state of deployments." - } - }, - "description": "DeploymentStatus holds information about the observed status of a deployment." - }, - "v1alpha1DetectKangarooResponse": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "title": "The kangaroo_enable indicates whether the kangaroo is installed" - } - } - }, - "v1alpha1DownwardAPIVolumeFile": { - "type": "object", - "properties": { - "path": { - "type": "string", - "title": "Required: Path is the relative path name of the file to be created. Must\nnot be absolute or contain the '..' path. Must be utf-8 encoded. The first\nitem of the relative path must not start with '..'" - }, - "fieldRef": { - "$ref": "#/definitions/v1alpha1ObjectFieldSelector", - "title": "Required: Selects a field of the pod: only annotations, labels, name and\nnamespace are supported. +optional" - }, - "resourceFieldRef": { - "$ref": "#/definitions/v1alpha1ResourceFieldSelector", - "title": "Selects a resource of the container: only resources limits and requests\n(limits.cpu, limits.memory, requests.cpu and requests.memory) are currently\nsupported. +optional" - }, - "mode": { - "type": "integer", - "format": "int32", - "title": "Optional: mode bits used to set permissions on this file, must be an octal\nvalue between 0000 and 0777 or a decimal value between 0 and 511. YAML\naccepts both octal and decimal values, JSON requires decimal values for\nmode bits. If not specified, the volume defaultMode will be used. This\nmight be in conflict with other options that affect the file mode, like\nfsGroup, and the result can be other mode bits set. +optional" - } - }, - "description": "DownwardAPIVolumeFile represents information to create the file containing\nthe pod field." - }, - "v1alpha1DownwardAPIVolumeSource": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1DownwardAPIVolumeFile" - }, - "title": "Items is a list of downward API volume file\n+optional" - }, - "DefaultMode": { - "type": "integer", - "format": "int32", - "title": "Optional: mode bits to use on created files by default. Must be a\nOptional: mode bits used to set permissions on created files by default.\nMust be an octal value between 0000 and 0777 or a decimal value between 0\nand 511. YAML accepts both octal and decimal values, JSON requires decimal\nvalues for mode bits. Defaults to 0644. Directories within the path are not\naffected by this setting. This might be in conflict with other options that\naffect the file mode, like fsGroup, and the result can be other mode bits\nset. +optional" - } - }, - "description": "DownwardAPIVolumeSource represents a volume containing downward API info.\nDownward API volumes support ownership management and SELinux relabeling." - }, - "v1alpha1EditClusterLabelsResponse": { - "type": "object", - "properties": { - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "description": "EditClusterLabelsRequest returns true when pod termination has been\nrequested." - }, - "v1alpha1EmptyDirVolumeSource": { - "type": "object", - "properties": { - "medium": { - "type": "string", - "title": "What type of storage medium should back this directory.\nThe default is \"\" which means to use the node's default medium.\nMust be an empty string (default) or Memory.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\n+optional" - }, - "sizeLimit": { - "type": "string", - "format": "int64", - "title": "Total amount of local storage required for this EmptyDir volume.\nThe size limit is also applicable for memory medium.\nThe maximum usage on memory medium EmptyDir would be the minimum value\nbetween the SizeLimit specified here and the sum of memory limits of all\ncontainers in a pod. The default is nil which means that the limit is\nundefined. More info: http://kubernetes.io/docs/volumes#emptydir\n+optional" - } - }, - "description": "Represents an empty directory for a pod.\nEmpty directory volumes support ownership management and SELinux relabeling." - }, - "v1alpha1EnvFromSource": { - "type": "object", - "properties": { - "prefix": { - "type": "string", - "title": "An optional identifier to prepend to each key in the ConfigMap.\n+optional" - }, - "configMapRef": { - "$ref": "#/definitions/v1alpha1ConfigMapEnvSource", - "title": "The ConfigMap to select from.\n+optional" - }, - "secretRef": { - "$ref": "#/definitions/v1alpha1SecretEnvSource", - "title": "The Secret to select from.\n+optional" - } - }, - "title": "EnvFromSource represents the source of a set of ConfigMaps" - }, - "v1alpha1EnvVar": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of EnvVar." - }, - "value": { - "type": "string", - "description": "The value of EnvVar." - }, - "valueFrom": { - "$ref": "#/definitions/v1alpha1EnvVarSource", - "title": "List of sources to populate environment variables in the container.\nThe keys defined within a source must be a C_IDENTIFIER. All invalid keys\nwill be reported as an event when the container is starting. When a key\nexists in multiple sources, the value associated with the last source will\ntake precedence. Values defined by an Env with a duplicate key will take\nprecedence. Cannot be updated.\"," - } - }, - "description": "Environment variable information." - }, - "v1alpha1EnvVarSource": { - "type": "object", - "properties": { - "fieldRef": { - "$ref": "#/definitions/v1alpha1ObjectFieldSelector", - "title": "Selects a field of the pod: supports metadata.name, metadata.namespace,\n`metadata.labels['']`, `metadata.annotations['']`, spec.nodeName,\nspec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.\n+optional" - }, - "resourceFieldRef": { - "$ref": "#/definitions/v1alpha1ResourceFieldSelector", - "title": "Selects a resource of the container: only resources limits and requests\n(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu,\nrequests.memory and requests.ephemeral-storage) are currently supported.\n+optional" - }, - "ConfigMapKeyRef": { - "$ref": "#/definitions/v1alpha1ConfigMapKeySelector", - "title": "Selects a key of a ConfigMap.\n+optional" - }, - "secretKeyRef": { - "$ref": "#/definitions/v1alpha1SecretKeySelector", - "title": "Selects a key of a secret in the pod's namespace\n+optional" - } - }, - "description": "EnvVarSource represents a source for the value of an EnvVar.\nOnly one of its fields may be set." - }, - "v1alpha1EphemeralContainer": { - "type": "object", - "properties": { - "ephemeralContainerCommon": { - "$ref": "#/definitions/v1alpha1Container", - "description": "Ephemeral containers have all of the fields of Container, plus additional fields\nspecific to ephemeral containers. Fields in common with Container are in the\nfollowing inlined struct so than an EphemeralContainer may easily be converted\nto a Container." - }, - "targetContainerName": { - "type": "string", - "description": "If set, the name of the container from PodSpec that this ephemeral container targets.\nThe ephemeral container will be run in the namespaces (IPC, PID, etc) of this container.\nIf not set then the ephemeral container uses the namespaces configured in the Pod spec.\n\nThe container runtime must implement support for this feature. If the runtime does not\nsupport namespace targeting then the result of setting this field is undefined." - } - }, - "description": "An EphemeralContainer is a temporary container that you may add to an existing Pod for\nuser-initiated activities such as debugging. Ephemeral containers have no resource or\nscheduling guarantees, and they will not be restarted when they exit or when a Pod is\nremoved or restarted. The kubelet may evict a Pod if an ephemeral container causes the\nPod to exceed its resource allocation." - }, - "v1alpha1EtcdBackupRestoreSetting": { - "type": "object", - "properties": { - "baseImage": { - "type": "string", - "description": "The base image for the etcdbackuprestore deployment." - } - }, - "description": "setting of the etcdbackuprestore for every cluster." - }, - "v1alpha1EtcdBackupStrategy": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategySpec", - "description": "EtcdBackupStrategySpec describes how the etcd backup strategy will look like." - }, - "status": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategyStatus", - "description": "EtcdBackupStrategyStatus represents the current state of a etcd backup strategy." - } - } - }, - "v1alpha1EtcdBackupStrategyConfig": { - "type": "object", - "properties": { - "etcdConnectionConfig": { - "$ref": "#/definitions/v1alpha1EtcdConnectionConfig", - "description": "config for etcd connection." - }, - "snapshotterConfig": { - "$ref": "#/definitions/v1alpha1SnapshotterConfig", - "description": "config for Snapshotter.\nSnapshotter should parse from the deploy." - }, - "snapStoreConfig": { - "$ref": "#/definitions/v1alpha1SnapStoreConfig", - "description": "config for SnapStore." - } - }, - "description": "all configs for EtcdBackupStrategy." - }, - "v1alpha1EtcdBackupStrategySpec": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/EtcdBackupStrategySpecEtcdBackupType" - }, - "maxBackups": { - "type": "integer", - "format": "int64", - "description": "max_backups maximum number of previous backups to keep." - }, - "storeLocation": { - "type": "string", - "description": "console address for etcd backup strategy." - }, - "config": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategyConfig" - } - }, - "description": "EtcdBackupStrategySpec describes etcd backup strategy." - }, - "v1alpha1EtcdBackupStrategyStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/typesWorkloadState", - "description": "Current state of a etcd backup strategy." - } - }, - "description": "EtcdBackupStrategyStatus represents the current state of a etcd backup strategy." - }, - "v1alpha1EtcdConnectionConfig": { - "type": "object", - "properties": { - "endpoints": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Endpoints are the endpoints from which the backup will be take or defragmentation will be called.\nThis need not be necessary match the entire etcd cluster.\nendpoints comma separated list of etcd endpoints." - }, - "serviceEndpoints": { - "type": "array", - "items": { - "type": "string" - }, - "description": "service_endpoints comma separated list of etcd endpoints that are used for etcd-backup-restore to connect to etcd through a (Kubernetes) service." - }, - "connectionTimeout": { - "type": "string", - "format": "int64", - "description": "connection_timeout etcd client connection timeout." - }, - "snapshotTimeout": { - "type": "string", - "format": "int64", - "description": "snapshot_timeout timeout duration for taking etcd snapshots." - }, - "insecureTransport": { - "type": "boolean", - "description": "insecure_transport disable transport security for client connections." - }, - "insecureSkipVerify": { - "type": "boolean", - "description": "insecure_skip_verify skip server certificate verification." - }, - "certData": { - "type": "string", - "description": "cert_data identify secure client using this TLS certificate file." - }, - "keyData": { - "type": "string", - "description": "key_data identify secure client using this TLS key file." - }, - "caData": { - "type": "string", - "description": "ca_date verify certificates of TLS-enabled secure servers using this CA bundle." - } - } - }, - "v1alpha1Event": { - "type": "object", - "properties": { - "involvedObject": { - "$ref": "#/definitions/v1alpha1ObjectReference", - "description": "The object that this event is about." - }, - "reason": { - "type": "string", - "description": "reason is why the action was taken. It is human-readable.\nThis field cannot be empty for new Events and it can have at most 128\ncharacters." - }, - "message": { - "type": "string", - "description": "A human-readable description of the status of this operation." - }, - "source": { - "$ref": "#/definitions/v1alpha1EventSource", - "description": "The component reporting this event. Should be a short machine\nunderstandable string." - }, - "lastTimestamp": { - "type": "string", - "format": "int64", - "description": "The time at which the most recent occurrence of this event was recorded." - }, - "type": { - "$ref": "#/definitions/v1alpha1EventType", - "description": "Type of this event (Normal, Warning), new types could be added in the\nfuture." - }, - "firstTimestamp": { - "type": "string", - "format": "int64" - } - }, - "description": "Event is a report of an event somewhere in the cluster. Events\nhave a limited retention time and triggers and messages may evolve\nwith time. Event consumers should not rely on the timing of an event\nwith a given Reason reflecting a consistent underlying trigger, or the\ncontinued existence of events with that Reason. Events should be\ntreated as informative, best-effort, supplemental data." - }, - "v1alpha1EventSource": { - "type": "object", - "properties": { - "component": { - "type": "string", - "title": "Component from which the event is generated.\n+optional" - }, - "host": { - "type": "string", - "title": "Node name on which the event is generated.\n+optional" - } - }, - "description": "EventSource contains information for an event." - }, - "v1alpha1EventType": { - "type": "string", - "enum": [ - "EVENT_TYPE_UNSPECIFIED", - "Normal", - "Warning" - ], - "default": "EVENT_TYPE_UNSPECIFIED", - "description": "Type of event (Normal, Warning), new types could be added in the\nfuture.\n\n - EVENT_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Normal: Normal is a normal event type.\n - Warning: Warning is a warning event type." - }, - "v1alpha1ExecAction": { - "type": "object", - "properties": { - "command": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "description": "ExecAction describes a \"run in container\" action." - }, - "v1alpha1ExecuteEtcdBackupStrategyResponse": { - "type": "object", - "properties": { - "strategy": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy", - "description": "The new state of the etcd backup strategy after resuming." - } - }, - "description": "Response message for the `ExecuteEtcdBackupStrategyResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1ExternalMetricSource": { - "type": "object", - "properties": { - "metric": { - "$ref": "#/definitions/v1alpha1MetricIdentifier", - "title": "metric identifies the target metric by name and selector" - }, - "target": { - "$ref": "#/definitions/v1alpha1MetricTarget", - "title": "target specifies the target value for the given metric" - } - }, - "description": "ExternalMetricSource indicates how to scale on a metric not associated with\nany Kubernetes object (for example length of queue in cloud\nmessaging service, or QPS from loadbalancer running outside of cluster)." - }, - "v1alpha1ExternalMetricStatus": { - "type": "object", - "properties": { - "metric": { - "$ref": "#/definitions/v1alpha1MetricIdentifier", - "title": "metric identifies the target metric by name and selector" - }, - "current": { - "$ref": "#/definitions/v1alpha1MetricValueStatus", - "title": "current contains the current value for the given metric" - } - }, - "description": "ExternalMetricStatus indicates the current value of a global metric\nnot associated with any Kubernetes object." - }, - "v1alpha1FeatureGate": { - "type": "object", - "properties": { - "name": { - "$ref": "#/definitions/v1alpha1FeatureGateName", - "title": "name is the name of the feature gate" - }, - "enabled": { - "type": "boolean", - "title": "default is the default enablement state for the feature" - }, - "lockToDefault": { - "type": "boolean", - "title": "LockToDefault indicates that the feature is locked to its default and cannot be changed" - }, - "preRelease": { - "$ref": "#/definitions/v1alpha1PreRelease", - "title": "PreRelease indicates the maturity level of the feature" - } - } - }, - "v1alpha1FeatureGateName": { - "type": "string", - "enum": [ - "FEATURE_GATE_NAME_TYPE_UNSPECIFIED", - "DownloadClusterKubeConfig" - ], - "default": "FEATURE_GATE_NAME_TYPE_UNSPECIFIED", - "title": "- FEATURE_GATE_NAME_TYPE_UNSPECIFIED: feature gate name type is unspecified.\n - DownloadClusterKubeConfig: DownloadClusterKubeConfig indicates whether the cluster can download kubeconfig" - }, - "v1alpha1FilterPodStatus": { - "type": "string", - "enum": [ - "FILTER_POD_STATUS_UNSPECIFIED", - "FILTER_POD_STATUS_RUNNING", - "FILTER_POD_STATUS_ERROR", - "FILTER_POD_STATUS_COMPLETED", - "FILTER_POD_STATUS_WAITING" - ], - "default": "FILTER_POD_STATUS_UNSPECIFIED" - }, - "v1alpha1FlannelConfig": { - "type": "object", - "properties": { - "backendType": { - "$ref": "#/definitions/FlannelConfigBackendType" - } - } - }, - "v1alpha1FullGPUNodeStats": { - "type": "object", - "properties": { - "totalGpuNumber": { - "type": "integer", - "format": "int32", - "title": "Number of physical Gpus" - }, - "allocatedGpuNumber": { - "type": "integer", - "format": "int32", - "title": "Number of allocated Gpus" - } - } - }, - "v1alpha1GPU": { - "type": "object", - "properties": { - "uid": { - "type": "string", - "title": "uid is gpu unique id" - }, - "name": { - "type": "string", - "title": "name is gpu name" - }, - "gpuMode": { - "$ref": "#/definitions/v1alpha1GPUModel", - "title": "gpu_mode is gpu model" - }, - "gpuInfo": { - "$ref": "#/definitions/v1alpha1GPUInfo", - "title": "gpu_info is some gpu metadata" - }, - "migSpecList": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1MigSpec" - }, - "title": "if GPU model is mig mig_spec_list will have values" - } - } - }, - "v1alpha1GPUInfo": { - "type": "object", - "properties": { - "modelName": { - "type": "string", - "title": "gpu model\ne.g. NVIDIA A800 80GB PCIe" - }, - "device": { - "type": "string", - "title": "e.g. nvidia0" - }, - "gpuMemory": { - "type": "string", - "format": "int64", - "title": "gpu memory unit: Mi" - } - } - }, - "v1alpha1GPUModel": { - "type": "string", - "enum": [ - "GPU_MODEL_UNSPECIFIED", - "GPU_MODEL_MIG", - "GPU_MODEL_GPU", - "GPU_MODEL_VGPU" - ], - "default": "GPU_MODEL_UNSPECIFIED", - "title": "- GPU_MODEL_MIG: gpu_model_mig gpu model is mig\n - GPU_MODEL_GPU: gpu_model_gpu gpu model is whole\n - GPU_MODEL_VGPU: gpu_model_gpu gpu model is vgpu" - }, - "v1alpha1GPUResourceSetting": { - "type": "object", - "properties": { - "key": { - "type": "string", - "title": "gpu workload type resources key" - }, - "alias": { - "type": "string", - "title": "gpu workload type resources alias" - }, - "isAllocatable": { - "type": "boolean", - "title": "Resource quota can be allocated" - }, - "description": { - "type": "string", - "title": "gpu workload type resources description" - }, - "aliasZh": { - "type": "string", - "title": "gpu workload type resources zh alias" - }, - "range": { - "$ref": "#/definitions/v1alpha1ResourceRange", - "title": "gpu resource range" - }, - "available": { - "$ref": "#/definitions/v1alpha1AvailableResource", - "title": "available gpu resource number\nif we don't need it\nwill return nil" - } - } - }, - "v1alpha1GPUSetting": { - "type": "object", - "properties": { - "type": { - "type": "string", - "title": "type is gpu card type" - }, - "alias": { - "type": "string", - "title": "alias is gpu card alias" - }, - "resource": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1GPUResourceSetting" - }, - "title": "gpu card resource setting" - }, - "resourceTemplate": { - "$ref": "#/definitions/v1alpha1GPUResourceSetting", - "title": "when is_dynamic is true, user setting resource template" - }, - "isDynamic": { - "type": "boolean", - "title": "is_dynamic is check gpu resource whether dynamic, eg: nvidia.com/mig-1c.10gb" - } - } - }, - "v1alpha1GPUSettingResponse": { - "type": "object", - "properties": { - "gpuSetting": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1GPUSetting" - } - } - }, - "title": "GPUSettingResponse is the response message for GPUSetting" - }, - "v1alpha1GPUSpec": { - "type": "object", - "properties": { - "modelName": { - "type": "string", - "title": "ref gpu metrics modelName" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "gpu memory" - }, - "uuid": { - "type": "string", - "title": "gpu uuid" - } - } - }, - "v1alpha1GPUSummary": { - "type": "object", - "properties": { - "node": { - "type": "string", - "description": "node defines the cluster node name." - }, - "vgpuTypes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "vgpu_types defines a array restore vGPU types of the node." - } - } - }, - "v1alpha1GetClusterAdminKubeConfigResponse": { - "type": "object", - "properties": { - "kubeConfigString": { - "type": "string", - "description": "The kubeconfig of the cluster." - }, - "cluster": { - "type": "string", - "description": "Cluster represents which cluster belongs to." - }, - "expireTime": { - "type": "string", - "format": "int64" - } - }, - "description": "GetClusterAdminKubeConfigResponse returns a openapi cert information." - }, - "v1alpha1GetClusterCustomResourceJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the CustomResource YAML details" - } - }, - "title": "GetClusterCustomResourceJSONResponse represents response of get one\nCustomResource'json of cluster scope" - }, - "v1alpha1GetClusterKubeConfigResponse": { - "type": "object", - "properties": { - "kubeConfigString": { - "type": "string" - } - } - }, - "v1alpha1GetClusterlcmOpsJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data The data field is the tKuBeanClusterOps YAML details" - } - } - }, - "v1alpha1GetConfigMapJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the ConfigMap YAML details" - } - }, - "description": "ConfigMap data information in json format." - }, - "v1alpha1GetCronHorizontalPodAutoscalerJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the hpa YAML details." - } - }, - "description": "HorizontalPodAutoscalerJSON responses the messages of hap YAML details." - }, - "v1alpha1GetCustomResourceDefinitionJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the CustomResourceDefinition YAML details" - } - }, - "title": "GetCustomResourceDefinitionJSONResponse represents response of get one\nCustomResourceDefinition'json" - }, - "v1alpha1GetCustomResourceJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the CustomResource YAML details" - } - }, - "title": "GetCustomResourceJSONResponse represents response of get one\nCustomResource'json of namespaced scope" - }, - "v1alpha1GetEtcdBackupStrategyJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the etcd backup strategy YAML details." - } - }, - "description": "GetEtcdBackupStrategyJSONResponse returns etcd backup strategy data information in json format." - }, - "v1alpha1GetHelmChartDisplayResponse": { - "type": "object", - "properties": { - "readme": { - "type": "string", - "title": "The readme represents for the helm charts readme file contents" - }, - "appReadme": { - "type": "string", - "title": "The app_readme represents for the helm charts app_readme file contents" - }, - "values": { - "type": "string", - "title": "The values represents for the helm charts values file contents" - }, - "questions": { - "type": "string", - "title": "The questions represents for the helm charts questions file contents" - }, - "chart": { - "type": "string", - "title": "The chart represents for the helm charts chart file contents" - }, - "schemaJson": { - "type": "string", - "title": "The schema_json represents for the helm charts schema_json file contents" - } - } - }, - "v1alpha1GetHelmChartFilesResponse": { - "type": "object", - "properties": { - "files": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1GetHelmChartManifestResponse": { - "type": "object", - "properties": { - "manifest": { - "type": "string" - } - } - }, - "v1alpha1GetHelmChartResourcesResponse": { - "type": "object", - "properties": { - "resources": { - "type": "array", - "items": { - "$ref": "#/definitions/GetHelmChartResourcesResponseResources" - } - } - } - }, - "v1alpha1GetHelmChartResponse": { - "type": "object", - "properties": { - "entries": { - "$ref": "#/definitions/v1alpha1HelmChartVersions" - } - } - }, - "v1alpha1GetHelmOperationJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the repository YAML details" - } - } - }, - "v1alpha1GetHelmReleaseJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the release YAML details" - } - } - }, - "v1alpha1GetHelmRepoJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the repository YAML details" - } - } - }, - "v1alpha1GetHorizontalPodAutoscalerJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the hpa YAML details." - } - }, - "description": "HorizontalPodAutoscalerJSON responses the messages of hap YAML details." - }, - "v1alpha1GetIngressJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the ingress YAML details." - } - }, - "title": "GetIngressJSONResponse the response of get cluster ingresses json" - }, - "v1alpha1GetLimitRangeJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the limitRange YAML details." - } - }, - "description": "GetLimitRangeJSONResponse returns limitRange data information in json format." - }, - "v1alpha1GetNamespaceJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the Namespace YAML details" - } - } - }, - "v1alpha1GetNetworkPolicyJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the networkpolicy YAML details." - } - }, - "title": "GetNetworkPolicyJSONResponse the response of get cluster networkpolicies json" - }, - "v1alpha1GetNodeGPUStatsResponse": { - "type": "object", - "properties": { - "mode": { - "$ref": "#/definitions/v1alpha1GPUModel", - "title": "cluster node gpu mode" - }, - "fullGpuStats": { - "$ref": "#/definitions/v1alpha1FullGPUNodeStats", - "title": "full gpu stats" - }, - "vgpuStats": { - "$ref": "#/definitions/v1alpha1VGPUNodeStats", - "title": "vgpu stats" - }, - "migStats": { - "$ref": "#/definitions/v1alpha1MIGNodeStats", - "title": "mig stats" - } - } - }, - "v1alpha1GetNodeJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the node YAML details." - } - }, - "description": "GetNodeJSONResponse returns a node's json." - }, - "v1alpha1GetPersistentVolumeClaimJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data represents the data of PVC JSON" - } - }, - "title": "GetPersistentVolumeClaimSnapshotJSONResponse represents the response of get PVC JSON" - }, - "v1alpha1GetPersistentVolumeJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the persistentVolume YAML details." - } - }, - "description": "GetPersistentVolumeJSONResponse returns persistentVolume data information in json format." - }, - "v1alpha1GetPodContainerLogResponse": { - "type": "object", - "properties": { - "total": { - "type": "integer", - "format": "int32", - "title": "the total of log" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/GetPodContainerLogResponseData" - }, - "title": "the data of los" - } - }, - "title": "GetPodContainerLogResponse represents the response of get pod container log" - }, - "v1alpha1GetPreCheckClusterInfoResponse": { - "type": "object", - "properties": { - "nodes": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1PreCheckNodeInfo" - }, - "description": "nodes defines all nodes of cluster." - }, - "yumRepoInfo": { - "$ref": "#/definitions/v1alpha1PreCheckYumRepoInfo" - } - } - }, - "v1alpha1GetReplicaSetJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the replicaSet YAML details." - } - }, - "description": "GetReplicaSetJSONResponse returns replicaSet data information in json format." - }, - "v1alpha1GetResourceQuotaJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the resourceQuota YAML details." - } - }, - "description": "GetResourceQuotaJSONResponse returns resourceQuota data information in json format." - }, - "v1alpha1GetSecretJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the Secret YAML details" - } - }, - "description": "It returns Secret data information in json format." - }, - "v1alpha1GetServiceJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the Service YAML details." - } - }, - "description": "It returns Service data information in json format." - }, - "v1alpha1GetStorageClassJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the StorageClass YAML details" - } - }, - "title": "GetStorageClassJSONResponse represents the response of get storage class" - }, - "v1alpha1GetVerticalPodAutoscalerJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the vpa YAML details." - } - }, - "description": "GetVerticalPodAutoscalerJSONResponse returns the YAML details of a vpa." - }, - "v1alpha1GetVolumeSnapshotJSONResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data represents the data of VolumeSnapshots JSON" - } - }, - "title": "GetVolumeSnapshotJSONResponse represents the response of get VolumeSnapshots JSON" - }, - "v1alpha1GetWorkspaceSharedResourceQuotaResponse": { - "type": "object", - "properties": { - "setting": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "allocatable": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1Group": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id is the unique identification of the group." - }, - "name": { - "type": "string", - "description": "the name of the group." - } - } - }, - "v1alpha1HPAScalingRules": { - "type": "object", - "properties": { - "stabilizationWindowSeconds": { - "type": "integer", - "format": "int32", - "title": "StabilizationWindowSeconds is the number of seconds for which past recommendations should be\nconsidered while scaling up or scaling down.\nStabilizationWindowSeconds must be greater than or equal to zero and less than or equal to 3600 (one hour).\nIf not set, use the default values:\n- For scale up: 0 (i.e. no stabilization is done).\n- For scale down: 300 (i.e. the stabilization window is 300 seconds long).\n+optional" - } - } - }, - "v1alpha1HTTPGetAction": { - "type": "object", - "properties": { - "path": { - "type": "string", - "title": "Path to access on the HTTP server.\n+optional" - }, - "port": { - "type": "string", - "description": "Name or number of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME." - }, - "host": { - "type": "string", - "title": "Host name to connect to, defaults to the pod IP. You probably want to set\n\"Host\" in httpHeaders instead.\n+optional" - }, - "scheme": { - "type": "string", - "title": "Scheme to use for connecting to the host.\nDefaults to HTTP.\n+optional" - } - }, - "description": "HTTPGetAction describes an action based on HTTP Get requests." - }, - "v1alpha1HTTPIngressPath": { - "type": "object", - "properties": { - "path": { - "type": "string", - "description": "Path is matched against the path of an incoming request." - }, - "pathType": { - "type": "string", - "description": "PathType determines the interpretation of the Path matching." - }, - "backend": { - "$ref": "#/definitions/v1alpha1IngressBackend", - "description": "Backend defines the referenced service endpoint to which the traffic will\nbe forwarded to." - } - }, - "description": "HTTPIngressPath associates a path with a backend. Incoming urls matching the\npath are forwarded to the backend." - }, - "v1alpha1HTTPIngressRuleValue": { - "type": "object", - "properties": { - "paths": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HTTPIngressPath" - }, - "description": "A collection of paths that map requests to backends." - } - }, - "description": "HTTPIngressRuleValue is a list of http selectors pointing to backends.\nIn the example: http:///? -> backend where\nwhere parts of the url correspond to RFC 3986, this resource will be used\nto match against everything after the last '/' and before the first '?'\nor '#'." - }, - "v1alpha1Handler": { - "type": "object", - "properties": { - "exec": { - "$ref": "#/definitions/v1alpha1ExecAction", - "title": "Exec specifies the action to take.\n+optional" - }, - "httpGet": { - "$ref": "#/definitions/v1alpha1HTTPGetAction", - "title": "HTTPGet specifies the http request to perform.\n+optional" - }, - "TCPSocket": { - "$ref": "#/definitions/v1alpha1TCPSocketAction", - "title": "TCPSocket specifies an action involving a TCP port.\n+optional" - } - } - }, - "v1alpha1HelmChart": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/v1alpha1Metadata" - }, - "values": { - "type": "string" - } - } - }, - "v1alpha1HelmChartInstall": { - "type": "object", - "properties": { - "chartName": { - "type": "string" - }, - "version": { - "type": "string" - }, - "releaseName": { - "type": "string" - }, - "description": { - "type": "string" - }, - "values": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1HelmChartUpgrade": { - "type": "object", - "properties": { - "chartName": { - "type": "string" - }, - "version": { - "type": "string" - }, - "releaseName": { - "type": "string" - }, - "force": { - "type": "boolean" - }, - "resetValues": { - "type": "boolean" - }, - "description": { - "type": "string" - }, - "values": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1HelmChartVersion": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/v1alpha1Metadata" - }, - "urls": { - "type": "array", - "items": { - "type": "string" - } - }, - "created": { - "type": "string", - "format": "int64" - }, - "removed": { - "type": "boolean" - } - } - }, - "v1alpha1HelmChartVersions": { - "type": "object", - "properties": { - "chartVersion": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HelmChartVersion" - } - } - } - }, - "v1alpha1HelmInstallConfig": { - "type": "object", - "properties": { - "values": { - "type": "string" - } - } - }, - "v1alpha1HelmOperation": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "status": { - "$ref": "#/definitions/v1alpha1HelmOperationStatus", - "description": "OperationStatus contains the operation status." - } - } - }, - "v1alpha1HelmOperationStatus": { - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "chart": { - "type": "string" - }, - "version": { - "type": "string" - }, - "release": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "token": { - "type": "string" - }, - "command": { - "type": "array", - "items": { - "type": "string" - } - }, - "jobName": { - "type": "string", - "description": "Related job's name." - }, - "jobNamespace": { - "type": "string", - "description": "Related job's namespace." - }, - "jobCreated": { - "type": "boolean", - "description": "Job created or not." - }, - "phase": { - "$ref": "#/definitions/v1alpha1HelmOperationStatusPhase", - "description": "Current state of the helm operation (job)." - }, - "podCreated": { - "type": "boolean", - "description": "Pod created or not." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current service state of helmOperation." - } - } - }, - "v1alpha1HelmOperationStatusPhase": { - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Running", - "Succeeded", - "Failed", - "Blocked" - ], - "default": "PHASE_UNSPECIFIED", - "description": "Current phase of the helm operation (job).\n\n - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Running: Job running, consistent with kubean ClusterOpsStatus \"Running\".\n - Succeeded: Job succeeded, consistent with kubean ClusterOpsStatus \"Succeeded\".\n - Failed: Job failed or deleted, consistent with kubean ClusterOpsStatus \"Failed\".\n - Blocked: Job waiting, consistent with kubean ClusterOpsStatus \"Blocked\"." - }, - "v1alpha1HelmRelease": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1ReleaseSpec", - "description": "ReleaseSpec describes how the release execution will look like and when it\nwill actually run." - }, - "status": { - "$ref": "#/definitions/v1alpha1ReleaseStatus", - "description": "ReleaseStatus contains the release status." - } - } - }, - "v1alpha1HelmRepo": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1RepoSpec", - "description": "RepoSpec describes how the repository execution will look like and when it\nwill actually run." - }, - "status": { - "$ref": "#/definitions/v1alpha1RepoStatus", - "description": "RepoStatus contains the repository status." - } - } - }, - "v1alpha1HorizontalPodAutoscaler": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1HorizontalPodAutoscalerSpec", - "description": "behaviour of autoscaler. More info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status." - }, - "status": { - "$ref": "#/definitions/v1alpha1HorizontalPodAutoscalerStatus", - "description": "current information about the autoscaler." - } - }, - "description": "configuration of a horizontal pod autoscaler." - }, - "v1alpha1HorizontalPodAutoscalerBehavior": { - "type": "object", - "properties": { - "scaleUp": { - "$ref": "#/definitions/v1alpha1HPAScalingRules", - "description": "No stabilization is used.\n+optional", - "title": "scaleUp is scaling policy for scaling Up.\nIf not set, the default value is the higher of:\n - increase no more than 4 pods per 60 seconds\n - double the number of pods per 60 seconds" - }, - "scaleDown": { - "$ref": "#/definitions/v1alpha1HPAScalingRules", - "title": "scaleDown is scaling policy for scaling Down.\nIf not set, the default value is to allow to scale down to minReplicas pods, with a\n300 second stabilization window (i.e., the highest recommendation for\nthe last 300sec is used).\n+optional" - } - } - }, - "v1alpha1HorizontalPodAutoscalerSpec": { - "type": "object", - "properties": { - "scaleTargetRef": { - "$ref": "#/definitions/v1alpha1CrossVersionObjectReference", - "description": "reference to scaled resource; horizontal pod autoscaler will learn the\ncurrent resource consumption and will set the desired number of pods by\nusing its Scale subresource." - }, - "minReplicas": { - "type": "integer", - "format": "int32", - "title": "minReplicas is the lower limit for the number of replicas to which the\nautoscaler can scale down. It defaults to 1 pod. minReplicas is allowed\nto be 0 if the alpha feature gate HPAScaleToZero is enabled and at least\none Object or External metric is configured. Scaling is active as long as\nat least one metric value is available. +optional" - }, - "maxReplicas": { - "type": "integer", - "format": "int32", - "description": "upper limit for the number of pods that can be set by the autoscaler;\ncannot be smaller than MinReplicas." - }, - "metrics": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1MetricSpec" - }, - "title": "metrics contains the specifications for which to use to calculate the\ndesired replica count (the maximum replica count across all metrics will\nbe used). The desired replica count is calculated multiplying the\nratio between the target value and the current value by the current\nnumber of pods. Ergo, metrics used must decrease as the pod count is\nincreased, and vice-versa. See the individual metric source types for\nmore information about how each type of metric must respond.\nIf not set, the default metric will be set to 80% average CPU utilization.\n+listType=atomic\n+optional" - }, - "behavior": { - "$ref": "#/definitions/v1alpha1HorizontalPodAutoscalerBehavior", - "title": "behavior configures the scaling behavior of the target\nin both Up and Down directions (scaleUp and scaleDown fields respectively).\nIf not set, the default HPAScalingRules for scale up and scale down are used.\n+optional\ntodo: add HorizontalPodAutoscalerBehavior" - } - }, - "description": "specification of a horizontal pod autoscaler." - }, - "v1alpha1HorizontalPodAutoscalerStatus": { - "type": "object", - "properties": { - "lastScaleTime": { - "type": "string", - "format": "int64", - "title": "last time the HorizontalPodAutoscaler scaled the number of pods;\nused by the autoscaler to control how often the number of pods is changed.\n+optional" - }, - "currentReplicas": { - "type": "integer", - "format": "int32", - "description": "current number of replicas of pods managed by this autoscaler." - }, - "desiredReplicas": { - "type": "integer", - "format": "int32", - "description": "desired number of replicas of pods managed by this autoscaler." - }, - "currentMetrics": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1MetricStatus" - }, - "title": "currentMetrics is the last read state of the metrics used by this autoscaler.\n+listType=atomic\n+optional" - }, - "phase": { - "$ref": "#/definitions/v1alpha1HorizontalPodAutoscalerStatusPhase", - "description": "The phase of hpa." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current service state of HPA." - } - } - }, - "v1alpha1HorizontalPodAutoscalerStatusPhase": { - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Ready", - "NotReady" - ], - "default": "PHASE_UNSPECIFIED", - "description": "- Ready: The Ready phase which means the hpa is normal.\n - NotReady: The NotReady phase which means some error occur.", - "title": "The list of HPA phase;" - }, - "v1alpha1HostPathVolumeSource": { - "type": "object", - "properties": { - "path": { - "type": "string", - "description": "Path of the directory on the host.\nIf the path is a symlink, it will follow the link to the real path." - }, - "type": { - "type": "string", - "title": "Type for HostPath Volume\nDefaults to \"\"\n+optional" - } - }, - "description": "HostPathVolumeSource Represents a host path mapped into a pod.\nHost path volumes do not support ownership management or SELinux relabeling." - }, - "v1alpha1IPBlock": { - "type": "object", - "properties": { - "cidr": { - "type": "string", - "title": "CIDR is a string representing the IP Block\nValid examples are \"192.168.1.1/24\" or \"2001:db9::/64\"" - }, - "except": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Except is a slice of CIDRs that should not be included within an IP Block\nValid examples are \"192.168.1.1/24\" or \"2001:db9::/64\"\nExcept values will be rejected if they are outside the CIDR range\n+optional" - } - }, - "description": "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\",\"2001:db9::/64\") that is allowed\nto the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs\nthat should not be included within this rule." - }, - "v1alpha1Ingress": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1IngressSpec", - "description": "Spec is the desired state of the Ingress." - }, - "status": { - "$ref": "#/definitions/v1alpha1IngressStatus", - "description": "Status is the current state of the Ingress." - } - }, - "description": "Ingress is a collection of rules that allow inbound connections to reach the\nendpoints defined by a backend. An Ingress can be configured to give services\nexternally-reachable urls, load balance traffic, terminate SSL, offer name\nbased virtual hosting etc." - }, - "v1alpha1IngressBackend": { - "type": "object", - "properties": { - "service": { - "$ref": "#/definitions/v1alpha1IngressServiceBackend", - "description": "Service references a Service as a Backend.\nThis is a mutually exclusive setting with \"Resource\"." - }, - "resource": { - "$ref": "#/definitions/apinetworkingv1alpha1TypedLocalObjectReference", - "description": "Resource is an ObjectRef to another Kubernetes resource in the namespace\nof the Ingress object. If resource is specified, a service.Name and\nservice.Port must not be specified.\nThis is a mutually exclusive setting with \"Service\"." - } - }, - "description": "IngressBackend describes all endpoints for a given service and port." - }, - "v1alpha1IngressClassSummary": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name is the name of ingress class" - }, - "isDefaultClass": { - "type": "boolean", - "description": "IsDefaultClass is used to indicate that an IngressClass should be considered default." - }, - "kind": { - "type": "string", - "description": "Kind field is an implementation identifier of ingress, e.g. k8s.io/ingress-nginx." - } - } - }, - "v1alpha1IngressRule": { - "type": "object", - "properties": { - "host": { - "type": "string", - "description": "Host is the fully qualified domain name of a network host, as defined by\nRFC 3986." - }, - "http": { - "$ref": "#/definitions/v1alpha1HTTPIngressRuleValue", - "description": "HTTPIngressRuleValue is a list of http selectors pointing to backends." - } - }, - "description": "IngressRule represents the rules mapping the paths under a specified host to\nthe related backend services. Incoming requests are first evaluated for a host\nmatch, then routed to the backend associated with the matching IngressRuleValue." - }, - "v1alpha1IngressServiceBackend": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name is the referenced service. The service must exist in" - }, - "port": { - "$ref": "#/definitions/v1alpha1IngressServiceBackendPort", - "title": "Port of the referenced service. A port name or port number" - } - }, - "description": "IngressServiceBackend references a Kubernetes Service as a Backend." - }, - "v1alpha1IngressServiceBackendPort": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name is the name of the port on the Service.\nThis is a mutually exclusive setting with \"Number\"." - }, - "number": { - "type": "integer", - "format": "int32", - "description": "Number is the numerical port number (e.g. 80) on the Service.\nThis is a mutually exclusive setting with \"Name\"." - } - }, - "description": "ServiceBackendPort is the service port being referenced." - }, - "v1alpha1IngressSpec": { - "type": "object", - "properties": { - "ingressClassName": { - "type": "string", - "title": "IngressClassName is the name of the IngressClass cluster resource.\nThe associated IngressClass defines which controller will implement the\nresource. This replaces the deprecated `kubernetes.io/ingress.class`\nannotation. For backwards compatibility, when that annotation is set, it\nmust be given precedence over this field. The controller may emit a\nwarning if the field and annotation have different values.\nImplementations of this API should ignore Ingresses without a class\nspecified. An IngressClass resource may be marked as default, which can\nbe used to set a default value for this field" - }, - "tls": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1IngressTLS" - }, - "description": "TLS configuration.\nCurrently the Ingress only supports a single TLS\nport, 443. If multiple members of this list specify different hosts, they\nwill be multiplexed on the same port according to the hostname specified\nthrough the SNI TLS extension, if the ingress controller fulfilling the\ningress supports SNI." - }, - "rules": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1IngressRule" - }, - "description": "A list of host rules used to configure the Ingress. If unspecified, or\nno rule matches, all traffic is sent to the default backend." - } - }, - "description": "IngressSpec is the desired state of the Ingress." - }, - "v1alpha1IngressStatus": { - "type": "object", - "properties": { - "loadBalancer": { - "$ref": "#/definitions/apinetworkingv1alpha1LoadBalancerStatus", - "description": "LoadBalancer contains the current status of the load-balancer." - } - }, - "description": "IngressStatus is the current state of the Ingress." - }, - "v1alpha1IngressTLS": { - "type": "object", - "properties": { - "hosts": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Hosts are a list of hosts included in the TLS certificate.\nThe values in this list must match the name/s used in the tlsSecret. Defaults to the\nwildcard host setting for the loadbalancer controller fulfilling this\nIngress, if left unspecified." - }, - "secretName": { - "type": "string", - "description": "SecretName is the name of the secret used to terminate TLS traffic on port\n443.\nField is left optional to allow TLS routing based on SNI\nhostname alone. If the SNI host in a listener conflicts with the \"Host\"\nheader field used by an IngressRule, the SNI host is used for termination\nand value of the Host header is used for routing." - } - }, - "description": "IngressTLS describes the transport layer security associated with an Ingress." - }, - "v1alpha1IntegrateClusterRequest": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name is the user-specified identifier.\nThis field may not be updated." - }, - "aliasName": { - "type": "string", - "description": "It is an alias given by the user and can be changed at will. It cannot be\nempty." - }, - "provider": { - "$ref": "#/definitions/v1alpha1ClusterProvider", - "description": "Provider represents the cloud provider name of the member cluster." - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Labels are key/value pairs that are attached to objects." - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations to attach arbitrary metadata to objects." - }, - "describe": { - "type": "string", - "description": "describe represents the details of the member cluster." - }, - "region": { - "type": "string", - "description": "Region represents the region of the member cluster locate in." - }, - "zone": { - "type": "string", - "description": "Zone represents the zone of the member cluster locate in." - }, - "kubeConfigString": { - "type": "string", - "description": "kubeConfig of the cluster." - }, - "direct": { - "type": "boolean", - "description": "direct Indicates whether the egress agent is created for the sub cluster, if true the egress agent is not created for the sub cluster." - } - }, - "description": "IntegrateClusterRequest requests to integrates a cluster." - }, - "v1alpha1Job": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1JobSpec", - "description": "JobSpec describes how the job execution will look like." - }, - "status": { - "$ref": "#/definitions/v1alpha1JobStatus", - "description": "JobStatus represents the current state of a Job." - }, - "executionTimestamp": { - "type": "string", - "format": "int64", - "description": "Information when was the time the job was successfully executed." - } - }, - "description": "Job represents the details information." - }, - "v1alpha1JobRef": { - "type": "object", - "properties": { - "namesapce": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "v1alpha1JobSpec": { - "type": "object", - "properties": { - "template": { - "$ref": "#/definitions/v1alpha1PodTemplateSpec", - "description": "Describes the pod that will be created when executing a job." - } - }, - "description": "JobSpec describes how the job execution will look like and when it will\nactually run." - }, - "v1alpha1JobStatus": { - "type": "object", - "properties": { - "active": { - "type": "integer", - "format": "int32", - "title": "The number of pending and running pods.\n+optional" - }, - "succeed": { - "type": "integer", - "format": "int32", - "title": "The number of pods which reached phase Succeeded.\n+optional" - }, - "failed": { - "type": "integer", - "format": "int32", - "title": "The number of pods which reached phase Failed.\n+optional" - }, - "phase": { - "$ref": "#/definitions/v1alpha1JobStatusJobState", - "description": "State of a job." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current service state of job." - } - }, - "description": "JobStatus represents the current state of a cron job." - }, - "v1alpha1JobStatusJobState": { - "type": "string", - "enum": [ - "JOB_STATE_UNSPECIFIED", - "Waiting", - "Running", - "Completed", - "Deleting", - "Failed" - ], - "default": "JOB_STATE_UNSPECIFIED", - "description": "Current state of a job.\n\n - JOB_STATE_UNSPECIFIED: Job is unspecified.\n - Waiting: Waiting for job ready.\n - Running: Job is working.\n - Completed: Jobs has completed.\n - Deleting: Jobs is being deleted.\n - Failed: Jobs is not ready to work ." - }, - "v1alpha1KeyToPath": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key to project." - }, - "path": { - "type": "string", - "description": "The relative path of the file to map the key to.\nMay not be an absolute path.\nMay not contain the path element '..'.\nMay not start with the string '..'." - }, - "mode": { - "type": "integer", - "format": "int32", - "title": "Optional: mode bits to use on this file, should be a value between 0\nand 0777. If not specified, the volume defaultMode will be used.\nThis might be in conflict with other options that affect the file\nmode, like fsGroup, and the result can be other mode bits set.\n+optional" - } - }, - "description": "KeyToPath maps a string key to a path within a volume." - }, - "v1alpha1KubeOvnConfig": { - "type": "object", - "properties": { - "networkType": { - "$ref": "#/definitions/KubeOvnConfigNetworkType" - }, - "defaultInterfaceName": { - "type": "string", - "title": "The following configuration takes effect only when the network mode is vlan" - }, - "defaultVlanId": { - "type": "string" - }, - "defaultGatewayIpv4": { - "type": "string" - }, - "defaultGatewayIpv6": { - "type": "string" - } - } - }, - "v1alpha1KubeanSetting": { - "type": "object", - "properties": { - "clusterOperationsBackEndLimit": { - "type": "string", - "description": "Set the maximum number of cluster ops reserved for each kubean cluster." - } - } - }, - "v1alpha1KubesprayArgs": { - "type": "object", - "properties": { - "runtime": { - "$ref": "#/definitions/KubesprayArgsRuntime", - "title": "Container runtime" - }, - "runtimeVersion": { - "type": "string", - "title": "Change this to use another runtime version, e.g. a current beta release" - }, - "kubernetesVersion": { - "type": "string", - "title": "Change this to use another Kubernetes version, e.g. a current beta release" - }, - "ntpConfig": { - "$ref": "#/definitions/v1alpha1NTPConfig" - }, - "nodeConfig": { - "$ref": "#/definitions/v1alpha1NodeConfig" - }, - "networkConfig": { - "$ref": "#/definitions/v1alpha1NetworkConfig" - }, - "dnsConfig": { - "$ref": "#/definitions/v1alpha1DNSConfig" - }, - "params": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "containerdInsecureRegistries": { - "type": "array", - "items": { - "type": "string" - }, - "title": "An obvious use case is allowing insecure-registry access to self hosted registries.\nCan be ipaddress and domain_name.\nexample define mirror.registry.io or 172.19.16.11:5000\nset \"name\": \"url\". insecure url must be started http://\nPort number is also needed if the default HTTPS port is not used.\n# containerd_insecure_registries:\n# \"localhost\": \"http://127.0.0.1\"\n# \"172.19.16.11:5000\": \"http://172.19.16.11:5000\"" - }, - "dockerInsecureRegistries": { - "type": "array", - "items": { - "type": "string" - }, - "title": "An obvious use case is allowing insecure-registry access to self hosted registries.\nCan be ipaddress and domain_name.\nexample define 172.19.16.11 or mirror.registry.io\n# docker_insecure_registries:\n# - mirror.registry.io\n# - 172.19.16.11" - }, - "yumRepos": { - "type": "array", - "items": { - "type": "string" - }, - "description": "YumRepos is the yum repository for echo node to be added." - }, - "enableNodeSysctlTuning": { - "type": "boolean", - "description": "EnableNodeSysctlTuning enable systcl tunning variables." - }, - "sysctlParams": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "SysctlParams is work when enabel NodeSysctlTunning." - }, - "enableVerboseLogging": { - "type": "boolean", - "description": "EnableVerboseLogging represents if print more detail logging when installing cluster.\nIt's true by default." - }, - "highLevelParams": { - "type": "string", - "description": "params filled in by the user." - }, - "skipDocker": { - "type": "boolean", - "description": "True means using the docker already exists on the node." - } - } - }, - "v1alpha1Level": { - "type": "string", - "enum": [ - "LEVEL_UNSPECIFIED", - "privileged", - "baseline", - "restricted" - ], - "default": "LEVEL_UNSPECIFIED", - "description": "The Level of Pod Security Standards to broadly cover the security spectrum.\n\n - LEVEL_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - privileged: Privileged is the unrestricted policy, providing the widest possible level of permissions. This policy allows for known privilege escalations.\n - baseline: Baseline is the minimally restrictive policy which prevents known privilege escalations. Allows the default (minimally specified) Pod configuration.\n - restricted: Restricted is the heavily restricted policy, following current Pod hardening best practices." - }, - "v1alpha1Lifecycle": { - "type": "object", - "properties": { - "PostStart": { - "$ref": "#/definitions/v1alpha1Handler", - "title": "PostStart is called immediately after a container is created. If the\nhandler fails, the container is terminated and restarted according to its\nrestart policy. Other management of the container blocks until the hook\ncompletes. More info:\nhttps://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n+optional" - }, - "preStop": { - "$ref": "#/definitions/v1alpha1Handler", - "title": "PreStop is called immediately before a container is terminated due to an\nAPI request or management event such as liveness/startup probe failure,\npreemption, resource contention, etc. The handler is not called if the\ncontainer crashes or exits. The Pod's termination grace period countdown\nbegins before the PreStop hook is executed. Regardless of the outcome of\nthe handler, the container will eventually terminate within the Pod's\ntermination grace period (unless delayed by finalizers). Other management\nof the container blocks until the hook completes or until the termination\ngrace period is reached. More info:\nhttps://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n+optional" - } - }, - "description": "Lifecycle describes actions that the management system should take in\nresponse to container lifecycle events. For the PostStart and PreStop\nlifecycle handlers, management of the container blocks until the action is\ncomplete, unless the container process fails, in which case the handler is\naborted." - }, - "v1alpha1LimitRange": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1LimitRangeSpec", - "description": "Spec defines the limits enforced." - } - }, - "description": "LimitRange sets resource usage limits for each kind of resource in a Namespace." - }, - "v1alpha1LimitRangeItem": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type is a type of object that is limited. It can be Pod, Container, PersistentVolumeClaim or a fully qualified resource name." - }, - "max": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Max usage constraints on this kind by resource name. Format: a map of (resource name, quantity) pairs." - }, - "min": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Min usage constraints on this kind by resource name. Format: a map of (resource name, quantity) pairs." - }, - "default": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Default resource requirement limit value by resource name if resource limit is omitted. Format: a map of (resource name, quantity) pairs." - }, - "defaultRequest": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "DefaultRequest is the default resource requirement request value by resource name if resource request is omitted. Format: a map of (resource name, quantity) pairs." - }, - "maxLimitRequestRatio": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource. Format: a map of (resource name, quantity) pairs." - } - }, - "description": "LimitRangeItem defines a min/max usage limit for any resource that matches on kind." - }, - "v1alpha1LimitRangeSpec": { - "type": "object", - "properties": { - "limits": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1LimitRangeItem" - }, - "description": "Limits is the list of LimitRangeItem objects that are enforced." - } - }, - "description": "LimitRangeSpec defines a min/max usage limit for resources that match on kind." - }, - "v1alpha1ListAdminClusterSummaryResponse": { - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "type": "string" - }, - "title": "clusters is the cluster summary" - } - } - }, - "v1alpha1ListAllClusterGPUInfoResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1GPUSpec" - } - } - } - }, - "v1alpha1ListAllStorageClassesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1StorageClass" - }, - "title": "Data describes the common attributes of storage devices\nand allows a Source for provider-specific attributes" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "ListPersistentVolumeClaimsRequest represents the response of list storage class" - }, - "v1alpha1ListAllUserRoleSummaryResponse": { - "type": "object", - "properties": { - "items": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1RoleSummary" - } - } - } - }, - "v1alpha1ListArtifactsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Artifact" - }, - "description": "Items is a list of tag names." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, page size, and total." - } - }, - "title": "ListArtifactsResponse returns a list of tags of specified image" - }, - "v1alpha1ListClusterConfigMapsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ConfigMap" - }, - "title": "The data is the ConfigMap YAML details" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "the list of Cluster ConfigMaps." - }, - "v1alpha1ListClusterCronJobsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CronJob" - }, - "description": "The data field is the cronjob YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "Cluster CronJob information List." - }, - "v1alpha1ListClusterCustomResourcesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CustomResource" - }, - "title": "Data represents the response of CustomResource" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListClusterCustomResourcesResponse represents list all CustomResources of\ncluster scope in cluster" - }, - "v1alpha1ListClusterEventKindsResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Data is the list of involvedObject'kinds of events." - } - }, - "description": "ListClusterEventKindsResponse returns the list of involvedObject's kinds of\nevents." - }, - "v1alpha1ListClusterEventsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Event" - }, - "description": "Data represents the returned event list." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination is for data paging." - } - }, - "description": "ListClusterEventsResponse returns the list and pagination of events." - }, - "v1alpha1ListClusterGPUSummaryResponese": { - "type": "object", - "properties": { - "summary": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1GPUSummary" - }, - "description": "summary defines a array restore GUP type summary of all nodes." - } - } - }, - "v1alpha1ListClusterHelmOperationsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HelmOperation" - }, - "description": "A list of operation sets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListClusterHelmReleasesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HelmRelease" - }, - "description": "A list of release sets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListClusterIngressesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Ingress" - }, - "description": "Data is the ingress details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Page defines the pagination detail be return." - } - }, - "title": "ListClusterIngressesResponse the response of list all cluster ingresses" - }, - "v1alpha1ListClusterInstalledHelmChartResponse": { - "type": "object", - "properties": { - "entries": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1HelmChartVersions" - }, - "title": "The built in helm repo which helm chart install" - } - } - }, - "v1alpha1ListClusterJobsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Job" - }, - "description": "The data is the job YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "Cluster Jobs information List." - }, - "v1alpha1ListClusterLimitRangesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1LimitRange" - }, - "description": "Items of LimitRange." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "List of cluster LimitRanges." - }, - "v1alpha1ListClusterNamespaceSummaryResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NamespaceSummary" - }, - "title": "Data is the returned namespace summary list" - }, - "accessScope": { - "$ref": "#/definitions/ListClusterNamespaceSummaryResponseScope", - "description": "AccessScope indicates whether the user has the cluster right." - } - } - }, - "v1alpha1ListClusterNamespacesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Namespace" - }, - "title": "Data is the returned namespace list" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListClusterNetworkPoliciesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicy" - }, - "description": "Items is the networkpolicy list." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination defines the pagination detail to return." - } - }, - "description": "ListClusterNetworkPoliciesResponse returns a list of all networkpolicies in the cluster." - }, - "v1alpha1ListClusterNodeSummaryResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeSummary" - } - } - }, - "description": "It returns node list in the cluster." - }, - "v1alpha1ListClusterPersistentVolumeClaimsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaim" - }, - "title": "Data describes the common attributes of storage devices\nand allows a Source for provider-specific attributes" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "ListClusterPersistentVolumeClaimRequest represents the response of list all namespace PVC" - }, - "v1alpha1ListClusterPreferredResourcesResponse": { - "type": "object", - "properties": { - "resources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1APIResourceList" - }, - "description": "resources contains the name of the resources and if they are namespaced." - } - }, - "description": "ListClusterPreferredResourcesResponse returns a list of cluster." - }, - "v1alpha1ListClusterReplicaSetsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ReplicaSet" - }, - "description": "Items is the list of replicasets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, page size, and total." - } - }, - "description": "ListClusterReplicaSetsResponse returns a list of replicasets in specified cluster." - }, - "v1alpha1ListClusterRoleBindingsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ClusterRoleBinding" - }, - "description": "Data represents the data of roleBindings." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - } - }, - "v1alpha1ListClusterRolesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/apirbacv1alpha1ClusterRole" - }, - "description": "Data represents the data of roles." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListClusterRolesResponse the response of list clusterrole" - }, - "v1alpha1ListClusterSecretsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Secret" - }, - "description": "Secret name." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "List of Cluster Secrets information." - }, - "v1alpha1ListClusterServicesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Service" - }, - "description": "Items is the list of services." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, page size, and total." - } - }, - "description": "List of cluster services." - }, - "v1alpha1ListClusterSriovAllocatedResourcesResponse": { - "type": "object", - "properties": { - "allocatedResources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1AllocatedResource" - } - } - }, - "title": "ListClusterSriovAllocatedResourcesResponse is a response for node sriov-related resources" - }, - "v1alpha1ListClusterSummaryResponse": { - "type": "object", - "properties": { - "clusterSummary": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ClusterSummary" - } - } - }, - "description": "ClusterSummaryResponse returns a list of cluster." - }, - "v1alpha1ListClusterVolumeSnapshotsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1VolumeSnapshot" - }, - "title": "Data describes the common attributes of volumeSnapshot" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "ListClusterVolumeSnapshotRequest represents the response of list all namespace VolumeSnapshot" - }, - "v1alpha1ListClusterlcmOpsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ClusterlcmOps" - }, - "description": "The data of clusterclmOps." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - } - }, - "v1alpha1ListClustersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Cluster" - }, - "title": "data The data field is the YAML details" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "Clusters information List." - }, - "v1alpha1ListConfigMapRelatedWorkloadsResponse": { - "type": "object", - "properties": { - "pods": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Pod" - } - }, - "daemonsets": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1DaemonSet" - } - }, - "deployments": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Deployment" - } - }, - "statefulsets": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1StatefulSet" - } - }, - "jobs": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Job" - } - } - } - }, - "v1alpha1ListConfigMapsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ConfigMap" - }, - "description": "Standard object's data." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListControllerRevisionsRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "StatefulSet", - "DaemonSet" - ], - "default": "KIND_UNSPECIFIED" - }, - "v1alpha1ListControllerRevisionsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ControlleRrevision" - }, - "description": "Data is the revision list related to the specified statefulset." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListCronHorizontalPodAutoscalersRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "ReplicaSet" - ], - "default": "KIND_UNSPECIFIED", - "description": "The list of hpa kind enums.\n\n - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A hpa which targetRef kind is Deployment.\n - StatefulSet: A hpa which targetRef kind is StatefulSet.\n - ReplicaSet: A hpa which targetRef kind is ReplicaSet." - }, - "v1alpha1ListCronHorizontalPodAutoscalersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CronHorizontalPodAutoscaler" - }, - "description": "The data is the job YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "HorizontalPodAutoscalers information list." - }, - "v1alpha1ListCronJobsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CronJob" - }, - "description": "The data field is the cronjob YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "CronJob information List." - }, - "v1alpha1ListCustomMetricSummaryResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The data is the array of metric." - } - }, - "description": "The response of listing ListCustomMetricsSummary." - }, - "v1alpha1ListCustomResourceDefinitionGroupsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Items represents groups of customResourceDefinitions." - } - }, - "title": "ListCustomResourceDefinitionGroupsResponse represents a list of all groups of customResourceDefinitions" - }, - "v1alpha1ListCustomResourceDefinitionsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CustomResourceDefinition" - }, - "description": "CustomResourceDefinition represents all custom resource definitions." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListCustomResourceDefinitionsResponse represents response of list all\nCustomResourceDefinitions" - }, - "v1alpha1ListCustomResourcesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CustomResource" - }, - "title": "Data represents the response of CustomResource" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListCustomResourcesResponse represents list all of the CustomResources of\nnamespaced scope in cluster" - }, - "v1alpha1ListDaemonSetsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1DaemonSet" - }, - "title": "Data represents the kpanda's workload types of inclusion" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "description": "Response message for the `ListDaemonSets` method." - }, - "v1alpha1ListDeploymentsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Deployment" - }, - "title": "Data represents the kpanda's workload types of inclusion" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "description": "Response message for the `ListDeployments` method." - }, - "v1alpha1ListEtcdBackupStrategiesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy" - }, - "description": "EtcdBackupStrategy A list of etcd backup strategy sets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListEtcdSnapshotsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Snapshot" - } - } - } - }, - "v1alpha1ListEventsRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet", - "Pod", - "Service", - "Ingress", - "Job", - "CronJob", - "HorizontalPodAutoscaler", - "ReplicaSet", - "CronHPA", - "PersistentVolumeClaim", - "GroupVersionResource" - ], - "default": "KIND_UNSPECIFIED", - "description": " - KIND_UNSPECIFIED: KIND_UNSPECIFIED is only a meaningless placeholder, to avoid zero not\nreturn.\n - Deployment: ListEvents by deployment.\n - StatefulSet: ListEvents by statefulSet.\n - DaemonSet: ListEvents by daemonSet.\n - Pod: ListEvents by pod.\n - Service: ListEvents by service.\n - Ingress: ListEvents by ingress.\n - Job: ListEvents by job.\n - CronJob: ListEvents by cronJob.\n - HorizontalPodAutoscaler: ListEvents by HorizontalPodAutoscaler.\n - ReplicaSet: ListEvents by replicaset.\n - CronHPA: ListEvents by CronHPA.\n - PersistentVolumeClaim: ListEvents by PersistentVolumeClaim.\n - GroupVersionResource: ListEvents by GroupVersionResource. If kind is set to GroupVersionResource,\nyou must specify the value of group version resource." - }, - "v1alpha1ListEventsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Event" - }, - "title": "Data response of the workload's event" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListEventsByWorkloadNameResponse the response of listEvents by workload name" - }, - "v1alpha1ListFeatureGatesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1FeatureGate" - } - } - } - }, - "v1alpha1ListGPUSettingResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1GPUSetting" - }, - "description": "The plugins in the specific cluster." - } - } - }, - "v1alpha1ListGlobalRolesResponse": { - "type": "object", - "properties": { - "roles": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1ListGroupsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Group" - } - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination is for data paging." - } - } - }, - "v1alpha1ListHelmChartsResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HelmChartVersion" - } - }, - "categories": { - "$ref": "#/definitions/ListHelmChartsResponseCategoryItem" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListHelmOperationsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HelmOperation" - }, - "description": "A list of operation sets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListHelmReleaseResourcesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Resource" - }, - "description": "A list of resources sets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "ListHelmReleaseResourcesResponse returns resources of a helmrelease." - }, - "v1alpha1ListHelmReleaseRevisionsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Revision" - }, - "description": "A list of revisions sets." - } - }, - "description": "ListHelmReleaseRevisionsResponse returns revisions of a helmrelease." - }, - "v1alpha1ListHelmReleasesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HelmRelease" - }, - "description": "A list of release sets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListHelmReposResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HelmRepo" - }, - "description": "HelmRepo A list of repo sets." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - } - }, - "v1alpha1ListHorizontalPodAutoscalersRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "ReplicaSet" - ], - "default": "KIND_UNSPECIFIED", - "description": "The list of hpa kind enums.\n\n - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A hpa which targetRef kind is Deployment.\n - StatefulSet: A hpa which targetRef kind is StatefulSet.\n - ReplicaSet: A hpa which targetRef kind is ReplicaSet." - }, - "v1alpha1ListHorizontalPodAutoscalersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1HorizontalPodAutoscaler" - }, - "description": "The data is the job YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "HorizontalPodAutoscalers information list." - }, - "v1alpha1ListImageTagsResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "description": "The response of list image tags." - }, - "v1alpha1ListIngressClassSummaryResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1IngressClassSummary" - } - } - } - }, - "v1alpha1ListIngressesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Ingress" - }, - "description": "Data is the ingress details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Page defines the pagination detail be return." - } - }, - "title": "ListIngressesResponse the response of list one cluster ingresses" - }, - "v1alpha1ListJobsByCronJobNameResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Job" - }, - "description": "The data field is the cronjob YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "CronJob Name information List" - }, - "v1alpha1ListJobsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Job" - }, - "description": "The data is the job YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "Jobs information List." - }, - "v1alpha1ListKubeVersionsResponse": { - "type": "object", - "properties": { - "kubernetesVersions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The available k8s version list." - }, - "preferredVersion": { - "type": "string" - }, - "useLocalService": { - "type": "boolean" - } - } - }, - "v1alpha1ListLimitRangesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1LimitRange" - }, - "description": "Items of LimitRanges." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "ListLimitRangesResponse returns LimitRange list." - }, - "v1alpha1ListMetallbIPPoolResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1MetallbIPPool" - }, - "description": "List of MetallbIPPool." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Page defines the pagination detail be return." - } - } - }, - "v1alpha1ListMetricValuesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1CustomMetricValue" - } - } - } - }, - "v1alpha1ListNamespacesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Namespace" - }, - "title": "Data is the returned namespace list" - }, - "pagination": { - "$ref": "#/definitions/typesPagination" - } - }, - "description": "ListNamespaceResponse is a list of Namespaces." - }, - "v1alpha1ListNetworkPoliciesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicy" - }, - "description": "Items is the networkpolicy list." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination defines the pagination detail to return." - } - }, - "description": "ListNetworkPoliciesResponse returns a list of networkpolicies in a namespace." - }, - "v1alpha1ListNodeGPUResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1GPU" - } - } - } - }, - "v1alpha1ListNodesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Node" - }, - "description": "Node name." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "List of Nodes information." - }, - "v1alpha1ListPersistentVolumeClaimsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaim" - }, - "title": "Data describes the common attributes of storage devices\nand allows a Source for provider-specific attributes" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "ListPersistentVolumeClaimRequest represents the response of list PVC" - }, - "v1alpha1ListPersistentVolumesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolume" - }, - "description": "Items of PersistentVolumes." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "ListPersistentVolumesResponse returns PersistentVolume list." - }, - "v1alpha1ListPluginsResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Plugin" - }, - "description": "The plugins in the specific cluster." - } - } - }, - "v1alpha1ListPodContainerResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ContainerStatus" - }, - "title": "Data represents the container status" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListPodContainerResponse represents the response of list pod container" - }, - "v1alpha1ListPodsByNodeResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Pod" - }, - "description": "The data field is the YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "Pod list belong to the node." - }, - "v1alpha1ListPodsRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet", - "Service", - "Job", - "CronJob", - "ReplicaSet", - "NetworkPolicy" - ], - "default": "KIND_UNSPECIFIED", - "description": " - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A Deployment provides declarative updates for Pods and ReplicaSets.\n - StatefulSet: StatefulSet is the workload API object used to manage stateful\napplications.\n - DaemonSet: A DaemonSet ensures that all (or some) Nodes run a copy of a Pod.\n - Service: Service to expose an application running on a set of Pods.\n - Job: Job is used to express a one-time task.\n - CronJob: CronJob runs repeatedly according to its time schedule.\n - ReplicaSet: ReplicaSet is the workload API object used to manage pods\n - NetworkPolicy: NetworkPolicy uses podSelector to select pods." - }, - "v1alpha1ListPodsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Pod" - }, - "description": "Standard object's data." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "List of pod information." - }, - "v1alpha1ListProjectsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Items is a list of project names." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, page size, and total." - } - }, - "title": "ListProjectsResponse returns a list of projects of a registry" - }, - "v1alpha1ListRegistriesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Registry" - }, - "title": "items is registry host" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, page size, and total." - } - }, - "title": "ListRegistriesResponse returns a list of registries" - }, - "v1alpha1ListReplicaSetsRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment" - ], - "default": "KIND_UNSPECIFIED" - }, - "v1alpha1ListReplicaSetsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ReplicaSet" - }, - "description": "data replicaSet ensures that a specified number of pod replicas are running\nat any given time." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListReplicaSetsByDeploymentResponse the response of list replicaSets by\ndeployment name" - }, - "v1alpha1ListRepositoriesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Repository" - }, - "description": "Items is a list of repositories." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, page size, and total." - } - }, - "title": "ListRepositoriesResponse returns a list of projects of a registry" - }, - "v1alpha1ListResourceQuotasResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ResourceQuota" - }, - "description": "Items of ResourceQuotas." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "ListResourceQuotasResponse returns ResourceQuota list." - }, - "v1alpha1ListRoleBindingsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1RoleBinding" - }, - "description": "Data represents the data of roleBindings." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListRoleBindingsResponse the response of list role bindings" - }, - "v1alpha1ListRolesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/rbacv1alpha1Role" - }, - "description": "Data represents the data of roles." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "title": "ListRolesResponse the response of list role" - }, - "v1alpha1ListRuntimeVersionsResponse": { - "type": "object", - "properties": { - "containerdVersions": { - "type": "array", - "items": { - "type": "string" - }, - "title": "The available containerd version list" - }, - "dockerVersions": { - "type": "array", - "items": { - "type": "string" - }, - "title": "The available docker version list" - }, - "preferredVersion": { - "$ref": "#/definitions/ListRuntimeVersionsResponsePreferredVersion", - "description": "The preferred version recommend by system." - } - } - }, - "v1alpha1ListSecretRelatedWorkloadsResponse": { - "type": "object", - "properties": { - "pods": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Pod" - } - }, - "daemonsets": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1DaemonSet" - } - }, - "deployments": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Deployment" - } - }, - "statefulsets": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1StatefulSet" - } - }, - "jobs": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Job" - } - } - } - }, - "v1alpha1ListSecretsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Secret" - }, - "description": "Secret name." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "List of Secrets data details." - }, - "v1alpha1ListServiceAccountsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ServiceAccount" - }, - "title": "Data describes the common attributes of storage devices\nand allows a Source for provider-specific attributes" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "ListPersistentVolumeClaimsRequest represents the response of list storage class" - }, - "v1alpha1ListServicesRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet" - ], - "default": "KIND_UNSPECIFIED", - "description": " - Deployment: A Deployment provides declarative updates for Pods and ReplicaSets.\n - StatefulSet: StatefulSet is the workload API object used to manage stateful\napplications.\n - DaemonSet: A DaemonSet ensures that all (or some) Nodes run a copy of a Pod." - }, - "v1alpha1ListServicesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Service" - }, - "description": "The data field is the service YAML details." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "The Service list for the given namespace and name if it exists in the\ncluster." - }, - "v1alpha1ListStatefulSetsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1StatefulSet" - }, - "title": "Data represents the kpanda's workload types of inclusion" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "title": "Pagination is for data paging" - } - }, - "description": "Response message for the `ListStatefulSets` method." - }, - "v1alpha1ListStorageClassesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1StorageClass" - }, - "title": "Data describes the common attributes of storage devices\nand allows a Source for provider-specific attributes" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "ListPersistentVolumeClaimsRequest represents the response of list storage class" - }, - "v1alpha1ListUsersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1User" - } - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination is for data paging." - } - } - }, - "v1alpha1ListVerticalPodAutoscalersRequestKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Deployment", - "StatefulSet", - "DaemonSet", - "ReplicaSet", - "Job", - "CronJob", - "ReplicationController" - ], - "default": "KIND_UNSPECIFIED", - "description": "The list of vpa kind enums.\n\n - KIND_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Deployment: A vpa which targetRef kind is Deployment.\n - StatefulSet: A vpa which targetRef kind is StatefulSet.\n - DaemonSet: A vpa which targetRef kind is DaemonSet.\n - ReplicaSet: A vpa which targetRef kind is ReplicaSet.\n - Job: A vpa which targetRef kind is Job.\n - CronJob: A vpa which targetRef kind is CronJob.\n - ReplicationController: A vpa which targetRef kind is ReplicationController." - }, - "v1alpha1ListVerticalPodAutoscalersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1VerticalPodAutoscaler" - }, - "description": "Items is the vpa list." - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "description": "ListVerticalPodAutoscalersResponse returns a list of vpas." - }, - "v1alpha1ListVolumeSnapshotsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1VolumeSnapshot" - }, - "title": "Data describes the common attributes of volumeSnapshot" - }, - "pagination": { - "$ref": "#/definitions/typesPagination", - "description": "Pagination returned contains current page, size, and total." - } - }, - "title": "ListVolumeSnapshotRequest represents the response of list VolumeSnapshot" - }, - "v1alpha1ListWorkspacesResponse": { - "type": "object", - "properties": { - "workspaces": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1WorkspaceInfo" - } - } - } - }, - "v1alpha1MIGModeSpec": { - "type": "object", - "properties": { - "config": { - "type": "string" - }, - "strategy": { - "$ref": "#/definitions/v1alpha1MIGStrategy", - "title": "single or mixed" - } - } - }, - "v1alpha1MIGNodeStats": { - "type": "object", - "properties": { - "totalGpuNumber": { - "type": "integer", - "format": "int32", - "title": "Number of physical Gpus" - }, - "allocatedGpuNumber": { - "type": "integer", - "format": "int32", - "title": "Number of allocated Gpus" - }, - "totalMigNumber": { - "type": "integer", - "format": "int32", - "title": "Number of mig" - } - } - }, - "v1alpha1MIGStrategy": { - "type": "string", - "enum": [ - "MIG_STRATEGY_UNSPECIFIED", - "MIG_STRATEGY_SINGLE", - "MIG_STRATEGY_MIXED" - ], - "default": "MIG_STRATEGY_UNSPECIFIED", - "title": "- MIG_STRATEGY_UNSPECIFIED: mig_strategy_unspecified unspecified mig strategy\n - MIG_STRATEGY_SINGLE: mig_strategy_single single mig strategy\n - MIG_STRATEGY_MIXED: mig_strategy_mixed mixed mig strategy" - }, - "v1alpha1Maintainer": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "name is a user name or organization name" - }, - "email": { - "type": "string", - "title": "email is an optional email address to contact the named maintainer" - }, - "url": { - "type": "string", - "title": "url is an optional URL to an address for the named maintainer" - } - }, - "description": "Maintainer describes a Chart maintainer." - }, - "v1alpha1Message": { - "type": "string", - "enum": [ - "MESSAGE_UNSPECIFIED", - "MESSAGE_CREATE", - "MESSAGE_UPDATE", - "MESSAGE_DELETE" - ], - "default": "MESSAGE_UNSPECIFIED" - }, - "v1alpha1Metadata": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of the chart. Required." - }, - "home": { - "type": "string", - "title": "The URL to a relevant project page, git repo, or contact person" - }, - "sources": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Source is the URL to the source code of this chart" - }, - "version": { - "type": "string", - "description": "A SemVer 2 conformant version string of the chart. Required." - }, - "description": { - "type": "string", - "title": "A one-sentence description of the chart" - }, - "keywords": { - "type": "array", - "items": { - "type": "string" - }, - "title": "A list of string keywords" - }, - "maintainers": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Maintainer" - }, - "title": "A list of name and URL/email address combinations for the maintainer(s)" - }, - "icon": { - "type": "string", - "description": "The URL to an icon file." - }, - "apiVersion": { - "type": "string", - "description": "The API Version of this chart. Required." - }, - "condition": { - "type": "string", - "title": "The condition to check to enable chart" - }, - "tags": { - "type": "string", - "title": "The tags to check to enable chart" - }, - "appVersion": { - "type": "string", - "description": "The version of the application enclosed inside of this chart." - }, - "deprecated": { - "type": "boolean", - "title": "Whether or not this chart is deprecated" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations are additional mappings uninterpreted by Helm,\nmade available for inspection by other applications." - }, - "kubeVersion": { - "type": "string", - "description": "KubeVersion is a SemVer constraint specifying the version of Kubernetes required." - }, - "dependencies": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Dependency" - }, - "description": "Dependencies are a list of dependencies for a chart." - }, - "type": { - "type": "string", - "title": "Specifies the chart type: application or library" - }, - "repo": { - "type": "string", - "description": "The repo name which the charts belongs to." - } - }, - "description": "Metadata for a Chart file. This models the structure of a Chart.yaml file." - }, - "v1alpha1MetallbIPPool": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1MetallbIPPoolSpec", - "description": "Spec is the desired state of the SpiderIPPool." - } - }, - "description": "Ingress is a collection of rules that allow inbound connections to reach the\nendpoints defined by a backend. An Ingress can be configured to give services\nexternally-reachable urls, load balance traffic, terminate SSL, offer name\nbased virtual hosting etc." - }, - "v1alpha1MetallbIPPoolSpec": { - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of IP address ranges over which MetalLB has authority.\nYou can list multiple ranges in a single pool, they will all share the\nsame settings. Each range can be either a CIDR prefix, or an explicit\nstart-end range of IPs." - }, - "autoAssign": { - "type": "boolean", - "title": "AutoAssign flag used to prevent MetallB from automatic allocation\nfor a pool.\n+optional\n+kubebuilder:default:=true" - }, - "avoidBuggyIPs": { - "type": "boolean", - "title": "AvoidBuggyIPs prevents addresses ending with .0 and .255\nto be used by a pool.\n+optional\n+kubebuilder:default:=false" - } - } - }, - "v1alpha1MetricIdentifier": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "name is the name of the given metric" - } - } - }, - "v1alpha1MetricRangeResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1BatchQueryRangeResult" - }, - "title": "The metric range data" - } - }, - "title": "MetricRangeResponse represents the response of metric range" - }, - "v1alpha1MetricResourceKind": { - "type": "string", - "enum": [ - "KIND_UNSPECIFIED", - "Pod", - "Service" - ], - "default": "KIND_UNSPECIFIED", - "description": " - Pod: The custom metrics for service.\n - Service: The custom metrics for service." - }, - "v1alpha1MetricResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1BatchQueryResult" - }, - "title": "the metric data" - } - }, - "title": "MetricResponse represents the response of metric" - }, - "v1alpha1MetricSourceType": { - "type": "string", - "enum": [ - "METRICS_SOURCE_TYPE_UNSPECIFIED", - "Object", - "Pods", - "Resource", - "External" - ], - "default": "METRICS_SOURCE_TYPE_UNSPECIFIED", - "title": "type is the type of metric source. It should be one of \"ContainerResource\", \"External\",\n\"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.\nNote: \"ContainerResource\" type is available on when the feature-gate\nHPAContainerMetrics is enabled" - }, - "v1alpha1MetricSpec": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1MetricSourceType", - "title": "type is the type of metric source. It should be one of \"ContainerResource\", \"External\",\n\"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.\nNote: \"ContainerResource\" type is available on when the feature-gate\nHPAContainerMetrics is enabled" - }, - "object": { - "$ref": "#/definitions/v1alpha1ObjectMetricSource", - "title": "object refers to a metric describing a single kubernetes object\n(for example, hits-per-second on an Ingress object).\n+optional" - }, - "pods": { - "$ref": "#/definitions/v1alpha1PodsMetricSource", - "title": "pods refers to a metric describing each pod in the current scale target\n(for example, transactions-processed-per-second). The values will be\naveraged together before being compared to the target value.\n+optional" - }, - "resource": { - "$ref": "#/definitions/v1alpha1ResourceMetricSource", - "title": "resource refers to a resource metric (such as those specified in\nrequests and limits) known to Kubernetes describing each pod in the\ncurrent scale target (e.g. CPU or memory). Such metrics are built in to\nKubernetes, and have special scaling options on top of those available\nto normal per-pod metrics using the \"pods\" source.\n+optional" - }, - "external": { - "$ref": "#/definitions/v1alpha1ExternalMetricSource", - "title": "external refers to a global metric that is not associated\nwith any Kubernetes object. It allows autoscaling based on information\ncoming from components running outside of cluster\n(for example length of queue in cloud messaging service, or\nQPS from loadbalancer running outside of cluster).\n+optional" - } - } - }, - "v1alpha1MetricStatus": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1MetricSourceType", - "title": "type is the type of metric source. It will be one of \"ContainerResource\", \"External\",\n\"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.\nNote: \"ContainerResource\" type is available on when the feature-gate\nHPAContainerMetrics is enabled" - }, - "object": { - "$ref": "#/definitions/v1alpha1ObjectMetricStatus", - "title": "object refers to a metric describing a single kubernetes object\n(for example, hits-per-second on an Ingress object).\n+optional" - }, - "pods": { - "$ref": "#/definitions/v1alpha1PodsMetricStatus", - "title": "pods refers to a metric describing each pod in the current scale target\n(for example, transactions-processed-per-second). The values will be\naveraged together before being compared to the target value.\n+optional" - }, - "resource": { - "$ref": "#/definitions/v1alpha1ResourceMetricStatus", - "title": "resource refers to a resource metric (such as those specified in\nrequests and limits) known to Kubernetes describing each pod in the\ncurrent scale target (e.g. CPU or memory). Such metrics are built in to\nKubernetes, and have special scaling options on top of those available\nto normal per-pod metrics using the \"pods\" source.\n+optional" - }, - "external": { - "$ref": "#/definitions/v1alpha1ExternalMetricStatus", - "title": "external refers to a global metric that is not associated\nwith any Kubernetes object. It allows autoscaling based on information\ncoming from components running outside of cluster\n(for example length of queue in cloud messaging service, or\nQPS from loadbalancer running outside of cluster).\n+optional" - } - }, - "description": "MetricStatus describes the last-read state of a single metric." - }, - "v1alpha1MetricTarget": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1MetricTargetType", - "title": "type represents whether the metric type is Utilization, Value, or AverageValue" - }, - "value": { - "type": "string", - "title": "value is the target value of the metric (as a quantity).\n+optional" - }, - "averageValue": { - "type": "string", - "title": "averageValue is the target value of the average of the\nmetric across all relevant pods (as a quantity)\n+optional" - }, - "averageUtilization": { - "type": "integer", - "format": "int32", - "title": "averageUtilization is the target value of the average of the\nresource metric across all relevant pods, represented as a percentage of\nthe requested value of the resource for the pods.\nCurrently only valid for Resource metric source type\n+optional" - } - } - }, - "v1alpha1MetricTargetType": { - "type": "string", - "enum": [ - "MetricTargetType_UNSPECIFIED", - "Utilization", - "Value", - "AverageValue" - ], - "default": "MetricTargetType_UNSPECIFIED", - "title": "type represents whether the metric type is Utilization, Value, or AverageValue" - }, - "v1alpha1MetricValueStatus": { - "type": "object", - "properties": { - "value": { - "type": "string", - "title": "value is the current value of the metric (as a quantity).\n+optional" - }, - "averageValue": { - "type": "string", - "title": "averageValue is the current value of the average of the\nmetric across all relevant pods (as a quantity)\n+optional" - }, - "averageUtilization": { - "type": "integer", - "format": "int32", - "title": "currentAverageUtilization is the current value of the average of the\nresource metric across all relevant pods, represented as a percentage of\nthe requested value of the resource for the pods.\n+optional" - } - }, - "title": "MetricValueStatus holds the current value for a metric" - }, - "v1alpha1MigSpec": { - "type": "object", - "properties": { - "gpuIId": { - "type": "string", - "title": "gpu_i_id is the id of each mig instance after the gpu is in mig mode" - }, - "gpuIProfile": { - "type": "string", - "title": "gpu_i_profile is the specification of each mig instance after the gpu is in mig mode" - } - } - }, - "v1alpha1Mode": { - "type": "string", - "enum": [ - "MODE_UNSPECIFIED", - "enforce", - "audit", - "warn" - ], - "default": "MODE_UNSPECIFIED", - "description": "The mode of Pod Security Standards. A namespace can configure any or all modes, or even set a different level for different modes.\n\n - MODE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - enforce: Enforce policy violations will cause the pod to be rejected.\n - audit: Audit Policy violations will trigger the addition of an audit annotation to the event recorded in the audit log, but are otherwise allowed.\n - warn: Warn policy violations will trigger a user-facing warning, but are otherwise allowed." - }, - "v1alpha1NTPConfig": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "description": "Start the ntpd or chrony service and enable it at system boot." - }, - "servers": { - "type": "array", - "items": { - "type": "string" - } - }, - "timezone": { - "type": "string" - } - }, - "title": "NTP Settings" - }, - "v1alpha1Namespace": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1NamespaceSpec", - "description": "NamespaceSpec describes how the namespace execution will look like and when\nit will actually run." - }, - "status": { - "$ref": "#/definitions/v1alpha1NamespaceStatus", - "title": "Status describes the current status of a Namespace.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status\n+optional" - } - }, - "description": "Namespace provides a scope for Names." - }, - "v1alpha1NamespacePhase": { - "type": "string", - "enum": [ - "NAMESPACE_PHASE_UNSPECIFIED", - "Active", - "Terminating" - ], - "default": "NAMESPACE_PHASE_UNSPECIFIED", - "title": "- NAMESPACE_PHASE_UNSPECIFIED: The namespace state is unspecified.\n - Active: NamespaceActive means the namespace is available for use in the system\n - Terminating: NamespaceTerminating means the namespace is undergoing graceful termination" - }, - "v1alpha1NamespaceSpec": { - "type": "object", - "properties": { - "Finalizers": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "description": "NamespaceSpec describes the attributes on a Namespace." - }, - "v1alpha1NamespaceStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1NamespacePhase", - "description": "Phase represents the phase of namespace." - }, - "readyPodNumber": { - "type": "integer", - "format": "int32", - "description": "ReadyPodNumber is the ready pod number on the namespace." - }, - "totalPodNumber": { - "type": "integer", - "format": "int32", - "description": "TotalPodNumber is the total pod number on the namespace." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Represents the latest available observations of a namespace's current state." - }, - "podSecurityEnabled": { - "type": "boolean", - "description": "PodSecurityEnabled shows if the namespace has enabled pod security policy." - }, - "cpuUsage": { - "type": "number", - "format": "double", - "description": "The cpu usage of the member namespace." - }, - "memoryUsage": { - "type": "number", - "format": "double", - "description": "The memory usage of the member namespace." - }, - "quotaStatus": { - "$ref": "#/definitions/v1alpha1ResourceQuotaStatus" - } - }, - "description": "NamespaceStatus is information about the current status of a Namespace." - }, - "v1alpha1NamespaceSummary": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name must be unique within a cluster." - }, - "cluster": { - "type": "string", - "description": "Cluster the namespace belongs to." - }, - "phase": { - "$ref": "#/definitions/v1alpha1NamespacePhase", - "description": "Phases is used for filter." - } - } - }, - "v1alpha1NetworkConfig": { - "type": "object", - "properties": { - "cni": { - "$ref": "#/definitions/NetworkConfigCNI" - }, - "ciliumConfig": { - "$ref": "#/definitions/v1alpha1CiliumConfig" - }, - "calicoConfig": { - "$ref": "#/definitions/v1alpha1CalicoConfig" - }, - "flannelConfig": { - "$ref": "#/definitions/v1alpha1FlannelConfig" - }, - "kubeOvnConfig": { - "$ref": "#/definitions/v1alpha1KubeOvnConfig" - }, - "commonNetworkConfig": { - "$ref": "#/definitions/v1alpha1CommonNetworkConfig" - } - } - }, - "v1alpha1NetworkPolicy": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1NetworkPolicySpec", - "description": "Specification of the desired behavior for this NetworkPolicy." - } - }, - "description": "NetworkPolicy describes what network traffic is allowed for a set of Pods." - }, - "v1alpha1NetworkPolicyEgressRule": { - "type": "object", - "properties": { - "ports": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicyPort" - }, - "title": "List of destination ports for outgoing traffic.\nEach item in this list is combined using a logical OR. If this field is\nempty or missing, this rule matches all ports (traffic not restricted by port).\nIf this field is present and contains at least one item, then this rule allows\ntraffic only if the traffic matches at least one port in the list.\n+optional" - }, - "to": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicyPeer" - }, - "title": "List of destinations for outgoing traffic of pods selected for this rule.\nItems in this list are combined using a logical OR operation. If this field is\nempty or missing, this rule matches all destinations (traffic not restricted by\ndestination). If this field is present and contains at least one item, this rule\nallows traffic only if the traffic matches at least one item in the to list.\n+optional" - } - }, - "title": "NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods\nmatched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to.\nThis type is beta-level in 1.8" - }, - "v1alpha1NetworkPolicyIngressRule": { - "type": "object", - "properties": { - "ports": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicyPort" - }, - "title": "List of ports which should be made accessible on the pods selected for this\nrule. Each item in this list is combined using a logical OR. If this field is\nempty or missing, this rule matches all ports (traffic not restricted by port).\nIf this field is present and contains at least one item, then this rule allows\ntraffic only if the traffic matches at least one port in the list.\n+optional" - }, - "from": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicyPeer" - }, - "title": "List of sources which should be able to access the pods selected for this rule.\nItems in this list are combined using a logical OR operation. If this field is\nempty or missing, this rule matches all sources (traffic not restricted by\nsource). If this field is present and contains at least one item, this rule\nallows traffic only if the traffic matches at least one item in the from list.\n+optional" - } - }, - "description": "NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods\nmatched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from." - }, - "v1alpha1NetworkPolicyPeer": { - "type": "object", - "properties": { - "podSelector": { - "$ref": "#/definitions/typesLabelSelector", - "description": "This is a label selector which selects Pods. This field follows standard label\nselector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects\nthe Pods matching PodSelector in the Namespaces selected by NamespaceSelector.\nOtherwise it selects the Pods matching PodSelector in the policy's own Namespace.\n+optional" - }, - "namespaceSelector": { - "$ref": "#/definitions/typesLabelSelector", - "description": "Selects Namespaces using cluster-scoped labels. This field follows standard label\nselector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects\nthe Pods matching PodSelector in the Namespaces selected by NamespaceSelector.\nOtherwise it selects all Pods in the Namespaces selected by NamespaceSelector.\n+optional" - }, - "ipBlock": { - "$ref": "#/definitions/v1alpha1IPBlock", - "title": "IPBlock defines policy on a particular IPBlock. If this field is set then\nneither of the other fields can be.\n+optional" - } - }, - "title": "NetworkPolicyPeer describes a peer to allow traffic to/from. Only certain combinations of\nfields are allowed" - }, - "v1alpha1NetworkPolicyPort": { - "type": "object", - "properties": { - "protocol": { - "$ref": "#/definitions/v1alpha1Protocol", - "title": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this\nfield defaults to TCP.\n+optional" - }, - "port": { - "type": "string", - "title": "The port on the given protocol. This can either be a numerical or named\nport on a pod. If this field is not provided, this matches all port names and\nnumbers.\nIf present, only traffic on the specified protocol AND port will be matched.\n+optional" - }, - "endPort": { - "type": "integer", - "format": "int32", - "title": "If set, indicates that the range of ports from port to endPort, inclusive,\nshould be allowed by the policy. This field cannot be defined if the port field\nis not defined or if the port field is defined as a named (string) port.\nThe endPort must be equal or greater than port.\nThis feature is in Beta state and is enabled by default.\nIt can be disabled using the Feature Gate \"NetworkPolicyEndPort\".\n+optional" - } - }, - "title": "NetworkPolicyPort describes a port to allow traffic on" - }, - "v1alpha1NetworkPolicySpec": { - "type": "object", - "properties": { - "podSelector": { - "$ref": "#/definitions/typesLabelSelector", - "description": "Selects the pods to which this NetworkPolicy object applies. The array of\ningress rules is applied to any pods selected by this field. Multiple network\npolicies can select the same set of pods. In this case, the ingress rules for\neach are combined additively. This field is NOT optional and follows standard\nlabel selector semantics. An empty podSelector matches all pods in this\nnamespace." - }, - "ingress": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicyIngressRule" - }, - "title": "List of ingress rules to be applied to the selected pods. Traffic is allowed to\na pod if there are no NetworkPolicies selecting the pod\n(and cluster policy otherwise allows the traffic), OR if the traffic source is\nthe pod's local node, OR if the traffic matches at least one ingress rule\nacross all of the NetworkPolicy objects whose podSelector matches the pod. If\nthis field is empty then this NetworkPolicy does not allow any traffic (and serves\nsolely to ensure that the pods it selects are isolated by default)\n+optional" - }, - "egress": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NetworkPolicyEgressRule" - }, - "title": "List of egress rules to be applied to the selected pods. Outgoing traffic is\nallowed if there are no NetworkPolicies selecting the pod (and cluster policy\notherwise allows the traffic), OR if the traffic matches at least one egress rule\nacross all of the NetworkPolicy objects whose podSelector matches the pod. If\nthis field is empty then this NetworkPolicy limits all outgoing traffic (and serves\nsolely to ensure that the pods it selects are isolated by default).\nThis field is beta-level in 1.8\n+optional" - }, - "policyTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/NetworkPolicySpecPolicyType" - }, - "title": "List of rule types that the NetworkPolicy relates to.\nValid options are [\"Ingress\"], [\"Egress\"], or [\"Ingress\", \"Egress\"].\nIf this field is not specified, it will default based on the existence of Ingress or Egress rules;\npolicies that contain an Egress section are assumed to affect Egress, and all policies\n(whether or not they contain an Ingress section) are assumed to affect Ingress.\nIf you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ].\nLikewise, if you want to write a policy that specifies that no egress is allowed,\nyou must specify a policyTypes value that include \"Egress\" (since such a policy would not include\nan Egress section and would otherwise default to just [ \"Ingress\" ]).\nThis field is beta-level in 1.8\n+optional" - } - }, - "description": "NetworkPolicySpec provides the specification of a NetworkPolicy." - }, - "v1alpha1Node": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1NodeSpec", - "description": "NodeSpec defines the behavior of a node." - }, - "status": { - "$ref": "#/definitions/v1alpha1NodeStatus", - "description": "Most recently observed status of the node.\nPopulated by the system." - } - } - }, - "v1alpha1NodeAddress": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type is a array used for frontend filter." - }, - "address": { - "type": "string", - "description": "IP Address reachable to the node." - } - }, - "description": "NodeAddress contains information for the instance's address.\nThe node addresses returned here will be set on the node's status.addresses\nfield." - }, - "v1alpha1NodeAffinity": { - "type": "object", - "properties": { - "requiredDuringSchedulingIgnoredDuringExecution": { - "$ref": "#/definitions/v1alpha1NodeSelector", - "title": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to an update), the system\nmay or may not try to eventually evict the pod from its node.\n+optional" - }, - "preferredDuringSchedulingIgnoredDuringExecution": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PreferredSchedulingTerm" - }, - "title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node matches the corresponding matchExpressions;\nthe node(s) with the highest sum are the most preferred. +optional" - } - }, - "description": "Node affinity is a group of node affinity scheduling rules." - }, - "v1alpha1NodeCondition": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type of node condition. The built-in set of conditions are: Ready,\nMemoryPressure, DiskPressure, PIDPressure,\nNetworkUnavailable, and SchedulingDisabled." - }, - "status": { - "$ref": "#/definitions/typesConditionStatus", - "description": "Status of the condition, one of True, False, Unknown." - }, - "reason": { - "type": "string", - "description": "(brief) reason for the condition's last transition." - }, - "message": { - "type": "string", - "description": "Human readable message indicating details about last transition." - } - }, - "description": "NodeCondition contains condition information for a node." - }, - "v1alpha1NodeConfig": { - "type": "object", - "properties": { - "nodeInfo": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeInfo" - } - }, - "sshInfo": { - "$ref": "#/definitions/v1alpha1SSHInfo" - }, - "ansibleExtraArgs": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1NodeInfo": { - "type": "object", - "properties": { - "hostName": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "role": { - "$ref": "#/definitions/v1alpha1NodeInfoRole" - }, - "user": { - "type": "string" - }, - "pass": { - "type": "string" - } - } - }, - "v1alpha1NodeInfoRole": { - "type": "string", - "enum": [ - "ROlE_UNSPECIFIED", - "Worker", - "Controller" - ], - "default": "ROlE_UNSPECIFIED" - }, - "v1alpha1NodeKubesprayArgs": { - "type": "object", - "properties": { - "params": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "containerdInsecureRegistries": { - "type": "array", - "items": { - "type": "string" - }, - "title": "An obvious use case is allowing insecure-registry access to self hosted registries.\nCan be ipaddress and domain_name.\nexample define mirror.registry.io or 172.19.16.11:5000\nset \"name\": \"url\". insecure url must be started http://\nPort number is also needed if the default HTTPS port is not used.\n# containerd_insecure_registries:\n# \"localhost\": \"http://127.0.0.1\"\n# \"172.19.16.11:5000\": \"http://172.19.16.11:5000\"" - }, - "dockerInsecureRegistries": { - "type": "array", - "items": { - "type": "string" - }, - "title": "An obvious use case is allowing insecure-registry access to self hosted registries.\nCan be ipaddress and domain_name.\nexample define 172.19.16.11 or mirror.registry.io\n# docker_insecure_registries:\n# - mirror.registry.io\n# - 172.19.16.11" - }, - "yumRepos": { - "type": "array", - "items": { - "type": "string" - }, - "description": "YumRepos is the yum repository for echo node to be added." - }, - "enableNodeSysctlTuning": { - "type": "boolean", - "description": "EnableNodeSysctlTuning enable systcl tunning variables." - }, - "sysctlParams": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "SysctlParams is work when enabel NodeSysctlTunning." - }, - "sshSecretName": { - "type": "string", - "title": "SSHSecretName means secret name for ssh private key" - } - } - }, - "v1alpha1NodePhase": { - "type": "string", - "enum": [ - "NODE_PHASE_UNSPECIFIED", - "Ready", - "Not_Ready", - "Unknown" - ], - "default": "NODE_PHASE_UNSPECIFIED", - "description": "Phase includes Ready, NotReady, and Unknown.\n\n - NODE_PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Ready: The node is ready to work.\n - Not_Ready: The node is not ready.\n - Unknown: The node state is unknown." - }, - "v1alpha1NodeSelector": { - "type": "object", - "properties": { - "nodeSelectorTerms": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeSelectorTerm" - } - } - }, - "title": "A node selector represents the union of the results of one or more label\nqueries over a set of nodes; that is, it represents the OR of the selectors\nrepresented by the node selector terms. +structType=atomic" - }, - "v1alpha1NodeSelectorRequirement": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The label key that the selector applies to." - }, - "operator": { - "type": "string", - "description": "Represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt." - }, - "values": { - "type": "array", - "items": { - "type": "string" - }, - "title": "An array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or\nDoesNotExist, the values array must be empty. If the operator is Gt or Lt,\nthe values array must have a single element, which will be interpreted as\nan integer. This array is replaced during a strategic merge patch.\n+optional" - } - }, - "description": "A node selector requirement is a selector that contains values, a key, and an\noperator that relates the key and values." - }, - "v1alpha1NodeSelectorTerm": { - "type": "object", - "properties": { - "matchExpressions": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeSelectorRequirement" - }, - "title": "A list of node selector requirements by node's labels.\n+optional" - }, - "matchFields": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeSelectorRequirement" - }, - "title": "A list of node selector requirements by node's fields.\n+optional" - } - }, - "title": "A null or empty node selector term matches no objects. The requirements of\nthem are ANDed.\nThe TopologySelectorTerm type implements a subset of the NodeSelectorTerm.\n+structType=atomic" - }, - "v1alpha1NodeSpec": { - "type": "object", - "properties": { - "podCIDR": { - "type": "string", - "description": "PodCIDR represents the pod IP range assigned to the node." - }, - "unschedulable": { - "type": "boolean", - "description": "Unschedulable controls node schedulability of new pods. By default, node is\nschedulable." - }, - "taints": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Taint" - }, - "description": "If specified, the node's taints." - } - } - }, - "v1alpha1NodeStatus": { - "type": "object", - "properties": { - "status": { - "$ref": "#/definitions/v1alpha1NodeStatusStatus", - "description": "Status represents the current information/status of node." - }, - "addresses": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeAddress" - }, - "description": "IP Address reachable to the node." - }, - "roles": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeStatusRole" - }, - "description": "The roles of current node." - }, - "cpuCapacity": { - "type": "string", - "format": "int64", - "description": "CpuCapacity is the total cpu of the node. Unit: m." - }, - "cpuAllocated": { - "type": "number", - "format": "double", - "description": "CpuAllocated is the total pod cpu request on the node. Unit: %." - }, - "cpuUsage": { - "type": "number", - "format": "double", - "description": "CpuUsage is the cpu usage on the node. Unit: %." - }, - "memoryCapacity": { - "type": "string", - "format": "int64", - "description": "MemoryCapacity is the total memory of the node. Unit: byte." - }, - "memoryAllocated": { - "type": "number", - "format": "double", - "description": "MemoryAllocated is the total pod memory request on the node. Unit: %." - }, - "memoryUsage": { - "type": "number", - "format": "double", - "description": "MemoryUsage is the memory usage on the node. Unit: %." - }, - "systemInfo": { - "$ref": "#/definitions/v1alpha1NodeSystemInfo", - "description": "Set of ids/uuids to uniquely identify the node." - }, - "allowedPodNumber": { - "type": "integer", - "format": "int32", - "description": "AllowedPodNumber is the max pod number allowed on the node." - }, - "podAllocated": { - "type": "integer", - "format": "int32", - "description": "PodAllocated is the pod number already allocated on the node." - }, - "readyPodNumber": { - "type": "integer", - "format": "int32", - "description": "ReadyPodNumber is the ready pod number on the node." - }, - "storageCapacity": { - "type": "string", - "format": "int64", - "description": "StorageCapacity is the total storage of the node. Unit: byte." - }, - "storageAllocated": { - "type": "string", - "format": "int64", - "description": "StorageAllocated is the total pod storage request on the node. Unit: byte." - }, - "storageUsage": { - "type": "number", - "format": "double", - "description": "StorageUsage is the usage of storage space on the node. Unit: %." - }, - "storageDriver": { - "type": "string", - "description": "StorageDriver is the docker storage driver (e.g. overlay2)." - }, - "gpuTotal": { - "type": "string", - "format": "int64", - "description": "gpu_total is gpu total number." - }, - "gpuAllocated": { - "type": "string", - "format": "int64", - "description": "gpu_allocated is gpu allocated number." - }, - "gpuMemoryTotal": { - "type": "string", - "format": "int64", - "description": "gpu_memory_total is all gpu memory number with node. Unit: byte." - }, - "gpuMemoryAllocated": { - "type": "string", - "format": "int64", - "title": "gpu_memory_allocated is allocated gpu memory number with node. Unit: byte" - }, - "gpuCoreUsage": { - "type": "number", - "format": "double", - "title": "gpu_core_usage is the usage rate of gpu" - }, - "gpuMemoryUsage": { - "type": "number", - "format": "double", - "title": "gpu_memory_usage is the usage rate of gpu video memory" - } - }, - "description": "NodeStatus is information about the current status of a node." - }, - "v1alpha1NodeStatusRole": { - "type": "string", - "enum": [ - "NODE_ROLE_UNSPECIFIED", - "CONTROL_PLANE", - "WORKER" - ], - "default": "NODE_ROLE_UNSPECIFIED", - "description": "Role includes control-plane and worker.\n\n - NODE_ROLE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - CONTROL_PLANE: The control plane manages the worker nodes and the Pods in the cluster.\n - WORKER: The worker node(s) host the Pods that are the components of the\napplication workload." - }, - "v1alpha1NodeStatusStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1NodePhase" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1NodeCondition" - }, - "description": "NodeCondition contains condition information for a node." - } - }, - "description": "Status is the current observed node condition." - }, - "v1alpha1NodeSummary": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of node." - }, - "uid": { - "type": "string", - "description": "UID is the unique in time and space value for this object." - }, - "creationTimestamp": { - "type": "string", - "format": "int64", - "description": "CreationTimestamp represents the creationTime of the node." - }, - "podCIDR": { - "type": "string", - "description": "PodCIDR represents the pod IP range assigned to the node." - }, - "unschedulable": { - "type": "boolean", - "description": "Unschedulable controls node schedulability of new pods. By default, node is\nschedulable." - }, - "phase": { - "$ref": "#/definitions/v1alpha1NodePhase", - "description": "Phase represents the phase of nodes to search." - } - }, - "description": "Node information Details Summary." - }, - "v1alpha1NodeSystemInfo": { - "type": "object", - "properties": { - "kernelVersion": { - "type": "string", - "description": "Kernel Version reported by the node from 'uname -r'\n(e.g. 3.16.0-0.bpo.4-amd64)." - }, - "osImage": { - "type": "string", - "description": "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7\n(wheezy))." - }, - "containerRuntimeVersion": { - "type": "string", - "description": "ContainerRuntime Version reported by the node through runtime remote API\n(e.g. docker://1.5.0)." - }, - "kubeletVersion": { - "type": "string", - "description": "Kubelet Version reported by the node." - }, - "kubeProxyVersion": { - "type": "string", - "description": "KubeProxy Version reported by the node." - }, - "operatingSystem": { - "type": "string", - "description": "The Operating System reported by the node." - }, - "architecture": { - "type": "string", - "description": "The Architecture reported by the node." - } - } - }, - "v1alpha1ObjectFieldSelector": { - "type": "object", - "properties": { - "apiVersion": { - "type": "string", - "title": "Version of the schema the FieldPath is written in terms of, defaults to\n\"v1\". +optional" - }, - "fieldPath": { - "type": "string", - "description": "Path of the field to select in the specified API version." - } - }, - "description": "ObjectFieldSelector selects an APIVersioned field of an object." - }, - "v1alpha1ObjectMetricSource": { - "type": "object", - "properties": { - "describedObject": { - "$ref": "#/definitions/v1alpha1CrossVersionObjectReference", - "title": "describedObject specifies the descriptions of a object,such as kind,name apiVersion" - }, - "target": { - "$ref": "#/definitions/v1alpha1MetricTarget", - "title": "target specifies the target value for the given metric" - }, - "metric": { - "$ref": "#/definitions/v1alpha1MetricIdentifier", - "title": "metric identifies the target metric by name and selector" - } - } - }, - "v1alpha1ObjectMetricStatus": { - "type": "object", - "properties": { - "metric": { - "$ref": "#/definitions/v1alpha1MetricIdentifier", - "title": "metric identifies the target metric by name and selector" - }, - "current": { - "$ref": "#/definitions/v1alpha1MetricValueStatus", - "title": "current contains the current value for the given metric" - }, - "describedObject": { - "$ref": "#/definitions/v1alpha1CrossVersionObjectReference", - "title": "DescribedObject specifies the descriptions of a object,such as kind,name apiVersion" - } - }, - "description": "ObjectMetricStatus indicates the current value of a metric describing a\nkubernetes object (for example, hits-per-second on an Ingress object)." - }, - "v1alpha1ObjectReference": { - "type": "object", - "properties": { - "kind": { - "type": "string", - "title": "Kind of the referent.\nMore info:\nhttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\n+optional" - }, - "name": { - "type": "string", - "title": "Name of the referent.\nMore info:\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" - }, - "namespace": { - "type": "string", - "title": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n+optional" - }, - "uid": { - "type": "string", - "title": "UID of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n+optional" - }, - "apiVersion": { - "type": "string", - "title": "API version of the referent.\n+optional" - }, - "resourceVersion": { - "type": "string", - "title": "Specific resourceVersion to which this reference is made, if any.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency\n+optional" - } - }, - "description": "ObjectReference contains enough information to let you inspect or modify the\nreferred object." - }, - "v1alpha1OsRepoType": { - "type": "string", - "enum": [ - "OsRepoNone", - "BuiltIn", - "External" - ], - "default": "OsRepoNone" - }, - "v1alpha1PatchConfigMapResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the ConfigMap YAML details" - } - } - }, - "v1alpha1PatchCustomResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "PatchClusterCustomResourceResponse represents response of updating one\nCustomResource of cluster scope" - }, - "v1alpha1PatchDaemonSetResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the json data of deployment after patching." - } - } - }, - "v1alpha1PatchDeploymentResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the json data of deployment after patching." - } - } - }, - "v1alpha1PatchIngressResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the ingress YAML details," - } - }, - "title": "UpdateIngressRequest the response of patch cluster ingresses" - }, - "v1alpha1PatchNamespaceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the service YAML details." - } - } - }, - "v1alpha1PatchSecretResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the secret YAML details" - } - }, - "description": "It returns patches the current secret details." - }, - "v1alpha1PatchServiceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the service YAML details." - } - } - }, - "v1alpha1PatchStatefulSetResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the json data of deployment after patching." - } - } - }, - "v1alpha1PauseCronJobResponse": { - "type": "object", - "properties": { - "cronjob": { - "$ref": "#/definitions/v1alpha1CronJob", - "description": "The new state of the cronjob after pausing." - } - }, - "description": "Response message for the `PauseCronJobResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1PauseDeploymentResponse": { - "type": "object", - "properties": { - "deployment": { - "$ref": "#/definitions/v1alpha1Deployment", - "description": "The new state of the deployment after pausing." - } - }, - "description": "Response message for the `PauseDeploymentRequest` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1PauseEtcdBackupStrategyResponse": { - "type": "object", - "properties": { - "strategy": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy", - "description": "The new state of the etcd backup strategy after pausing." - } - }, - "description": "Response message for the `PauseEtcdBackupStrategyResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1PersistentVolume": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1PersistentVolumeSpec", - "description": "Spec defines a specification of a persistent volume owned by the cluster." - }, - "status": { - "$ref": "#/definitions/v1alpha1PersistentVolumeStatus", - "title": "PersistentVolumeClaimStatus represents the status of PV claim" - } - }, - "title": "PersistentVolume (PV) is a storage resource provisioned by an administrator.\nIt is analogous to a node.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes" - }, - "v1alpha1PersistentVolumeAccessMode": { - "type": "string", - "enum": [ - "PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED", - "ReadWriteOnce", - "ReadOnlyMany", - "ReadWriteMany", - "ReadWriteOncePod" - ], - "default": "PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED", - "description": "PersistentVolumeAccessMode are the ways the volume can be mounted.\n\n - PERSISTENT_VOLUME_ACCESS_MODE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - ReadWriteOnce: ReadWriteOnce can be mounted in read/write mode to exactly 1 host.\n - ReadOnlyMany: ReadOnlyMany can be mounted in read-only mode to many hosts.\n - ReadWriteMany: ReadWriteMany can be mounted in read/write mode to many hosts.\n - ReadWriteOncePod: ReadWriteOncePod can be mounted in read/write mode to exactly 1 pod.\nReadWriteOncePod cannot be used in combination with other access modes." - }, - "v1alpha1PersistentVolumeClaim": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaimSpec", - "title": "PersistentVolumeClaimSpec describes the common attributes of storage devices\nand allows a Source for provider-specific attributes" - }, - "status": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaimStatus", - "title": "PersistentVolumeClaimStatus represents the status of PV claim" - } - }, - "description": "PersistentVolumeClaim represents a reference to a PersistentVolume in the same namespace." - }, - "v1alpha1PersistentVolumeClaimCondition": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type of this PersistentVolumeClaimCondition." - }, - "status": { - "type": "string", - "description": "Status is the current status of PersistentVolumeClaim." - }, - "lastProbeTime": { - "type": "string", - "format": "int64", - "description": "Last time we probed the condition." - }, - "lastTransitionTime": { - "type": "string", - "format": "int64", - "description": "Last time the condition transitioned from one status to another." - }, - "reason": { - "type": "string", - "description": "The reason of PersistentVolumeClaimCondition." - }, - "message": { - "type": "string", - "description": "The message of PersistentVolumeClaimCondition." - } - }, - "description": "PersistentVolumeClaimConditionType defines the condition of PV claim." - }, - "v1alpha1PersistentVolumeClaimSpec": { - "type": "object", - "properties": { - "accessModes": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeAccessMode" - }, - "title": "Contains the types of access modes required\n+optional" - }, - "selector": { - "$ref": "#/definitions/typesLabelSelector", - "title": "A label query over volumes to consider for binding. This selector is\nignored when VolumeName is set\n+optional" - }, - "resources": { - "$ref": "#/definitions/v1alpha1ResourceRequirements", - "title": "Resources represents the minimum resources required\nIf RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements\nthat are lower than previous value but must still be higher than capacity recorded in the\nstatus field of the claim.\n+optional" - }, - "volumeName": { - "type": "string", - "title": "VolumeName is the binding reference to the PersistentVolume backing this\nclaim. When set to non-empty value Selector is not evaluated\n+optional" - }, - "storageClassName": { - "type": "string", - "title": "Name of the StorageClass required by the claim.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1\n+optional" - }, - "volumeMode": { - "$ref": "#/definitions/PersistentVolumeClaimSpecVolumeMode", - "title": "volumeMode defines what type of volume is required by the claim.\nValue of Filesystem is implied when not included in claim spec.\n+optional" - }, - "dataSource": { - "$ref": "#/definitions/apicorev1alpha1TypedLocalObjectReference", - "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace." - }, - "dataSourceRef": { - "$ref": "#/definitions/v1alpha1TypedObjectReference", - "description": "dataSourceRef specifies the object from which to populate the volume with data, if a non-empty\nvolume is desired. This may be any object from a non-empty API group (non\ncore object) or a PersistentVolumeClaim object.\nWhen this field is specified, volume binding will only succeed if the type of\nthe specified object matches some installed volume populator or dynamic\nprovisioner.\nThis field will replace the functionality of the dataSource field and as such\nif both fields are non-empty, they must have the same value. For backwards\ncompatibility, when namespace isn't specified in dataSourceRef,\nboth fields (dataSource and dataSourceRef) will be set to the same\nvalue automatically if one of them is empty and the other is non-empty.\nWhen namespace is specified in dataSourceRef,\ndataSource isn't set to the same value and must be empty.\nThere are three important differences between dataSource and dataSourceRef:\n - While dataSource only allows two specific types of objects, dataSourceRef\n allows any non-core object, as well as PersistentVolumeClaim objects.\n - While dataSource ignores disallowed values (dropping them), dataSourceRef\n preserves all values, and generates an error if a disallowed value is\n specified.\n - While dataSource only allows local objects, dataSourceRef allows objects\n in any namespaces.\n\n(Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.\n(Alpha) Using the namespace field of dataSourceRef requires the CrossNamespaceVolumeDataSource feature gate to be enabled.\n+optional" - }, - "supportExpansion": { - "type": "boolean", - "title": "The support expansion represents this pvc weather support expansion" - }, - "supportSnapshot": { - "type": "boolean", - "title": "The support snapshot represents this pvc weather support snapshot" - } - }, - "title": "PersistentVolumeClaimSpec describes the common attributes of storage devices\nand allows a Source for provider-specific attributes" - }, - "v1alpha1PersistentVolumeClaimStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaimStatusPhase", - "title": "Phase represents the current phase of PersistentVolumeClaim\n+optional" - }, - "accessModes": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeAccessMode" - }, - "title": "AccessModes contains all ways the volume backing the PVC can be mounted\n+optional" - }, - "capacity": { - "$ref": "#/definitions/v1alpha1ResourceList", - "title": "Represents the actual resources of the underlying volume\n+optional" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaimCondition" - }, - "title": "+optional" - }, - "podName": { - "type": "array", - "items": { - "type": "string" - }, - "title": "PodName represents the pod to which the PVC belongs" - }, - "snapshotCount": { - "type": "integer", - "format": "int32", - "title": "snapshotCount represents how many snapshot the PVC has" - } - }, - "title": "PersistentVolumeClaimStatus represents the status of PV claim" - }, - "v1alpha1PersistentVolumeClaimStatusPhase": { - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Pending", - "Bound", - "Lost" - ], - "default": "PHASE_UNSPECIFIED", - "description": " - Pending: used for PersistentVolumeClaims that are not yet bound\n - Bound: used for PersistentVolumeClaims that are bound\n - Lost: used for PersistentVolumeClaims that lost their underlying\nPersistentVolume. The claim was bound to a PersistentVolume and this\nvolume does not exist any longer and all data on it was lost." - }, - "v1alpha1PersistentVolumeClaimVolumeSource": { - "type": "object", - "properties": { - "claimName": { - "type": "string", - "title": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as\nthe pod using this volume. More info:\nhttps://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims" - }, - "readOnly": { - "type": "boolean", - "title": "Will force the ReadOnly setting in VolumeMounts.\nDefault false.\n+optional" - } - }, - "description": "PersistentVolumeClaimVolumeSource references the user's PVC in the same\nnamespace. This volume finds the bound PV and mounts that volume for the pod.\nA PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another\ntype of volume that is owned by someone else (the system)." - }, - "v1alpha1PersistentVolumeMode": { - "type": "string", - "enum": [ - "PERSISTENT_VOLUME_MODE_UNSPECIFIED", - "Block", - "Filesystem" - ], - "default": "PERSISTENT_VOLUME_MODE_UNSPECIFIED", - "description": "PersistentVolumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state.\n\n - PERSISTENT_VOLUME_MODE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Block: Block means the volume will not be formatted with a filesystem and will remain a raw block device.\n - Filesystem: Filesystem means the volume will be or is formatted with a filesystem." - }, - "v1alpha1PersistentVolumeReclaimPolicy": { - "type": "string", - "enum": [ - "PERSISTENT_VOLUME_RECLAIM_POLICY_UNSPECIFIED", - "Recycle", - "Delete", - "Retain" - ], - "default": "PERSISTENT_VOLUME_RECLAIM_POLICY_UNSPECIFIED", - "description": "PersistentVolumeReclaimPolicy defines what happens to a persistent volume when released from its claim.\n\n - PERSISTENT_VOLUME_RECLAIM_POLICY_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Recycle: Recycle means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim.\nThe volume plugin must support Recycling.\n - Delete: Delete means the volume will be deleted from Kubernetes on release from its claim.\nThe volume plugin must support Deletion.\n - Retain: Retain means the volume will be left in its current phase (Released) for manual reclamation by the administrator.\nThe default policy is Retain." - }, - "v1alpha1PersistentVolumeSpec": { - "type": "object", - "properties": { - "capacity": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Capacity is the description of the persistent volume's resources and capacity." - }, - "accessModes": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeAccessMode" - }, - "description": "AccessModes contains all ways the volume can be mounted." - }, - "claimRef": { - "$ref": "#/definitions/v1alpha1ObjectReference", - "description": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim.\nExpected to be non-nil when bound.\nclaim.VolumeName is the authoritative bind between PV and PVC." - }, - "persistentVolumeReclaimPolicy": { - "$ref": "#/definitions/v1alpha1PersistentVolumeReclaimPolicy", - "description": "PersistentVolumeReclaimPolicy defines what happens to a persistent volume when released from its claim.\nValid options are Retain (default for manually created PersistentVolumes), Delete (default\nfor dynamically provisioned PersistentVolumes), and Recycle (deprecated).\nRecycle must be supported by the volume plugin underlying this PersistentVolume." - }, - "storageClassName": { - "type": "string", - "description": "StorageClassName is the name of StorageClass to which this persistent volume belongs. Empty value\nmeans that this volume does not belong to any StorageClass." - }, - "mountOptions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "MountOptions is the list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will\nsimply fail if one is invalid." - }, - "volumeMode": { - "$ref": "#/definitions/v1alpha1PersistentVolumeMode", - "description": "VolumeMode defines if a volume is intended to be used with a formatted filesystem\nor to remain in raw block state. Value of Filesystem is implied when not included in spec." - }, - "nodeAffinity": { - "$ref": "#/definitions/v1alpha1VolumeNodeAffinity", - "description": "NodeAffinity defines constraints that limit what nodes this volume can be accessed from.\nThis field influences the scheduling of pods that use this volume." - } - }, - "description": "PersistentVolumeSpec is the specification of a persistent volume." - }, - "v1alpha1PersistentVolumeStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1PersistentVolumeStatusPhase", - "title": "Phase indicates if a volume is available, bound to a claim, or released by a claim\n+optional" - }, - "message": { - "type": "string", - "title": "A human-readable message indicating details about why the volume is in this state.\n+optional" - }, - "reason": { - "type": "string", - "title": "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI\n+optional" - } - } - }, - "v1alpha1PersistentVolumeStatusPhase": { - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Pending", - "Available", - "Bound", - "Released", - "Failed" - ], - "default": "PHASE_UNSPECIFIED", - "title": "- Pending: used for PersistentVolumes that are not available\n - Available: used for PersistentVolumes that are not yet bound\nAvailable volumes are held by the binder and matched to PersistentVolumeClaims\n - Bound: used for PersistentVolumes that are bound\n - Released: used for PersistentVolumes where the bound PersistentVolumeClaim was deleted\nreleased volumes must be recycled before becoming available again\nthis phase is used by the persistent volume claim binder to signal to another process to reclaim the resource\n - Failed: used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim" - }, - "v1alpha1Plugin": { - "type": "object", - "properties": { - "name": { - "$ref": "#/definitions/v1alpha1PluginName", - "description": "The name of the plugin." - }, - "enabled": { - "type": "boolean", - "description": "The user has activated the application for this plugin." - }, - "intelligentDetection": { - "type": "boolean", - "description": "IntelligentDetection indicate the plugin is whether intelligent." - }, - "externalAddress": { - "type": "string", - "description": "ExternalAddress is a address which access the plugin from outside the cluster." - }, - "setting": { - "type": "string", - "description": "The setting of the plugin. every plugin encode the setting to json string." - }, - "healthy": { - "type": "boolean", - "description": "Healthy is to show a plugin state when installed." - } - } - }, - "v1alpha1PluginName": { - "type": "string", - "enum": [ - "PLUGIN_NAME_UNSPECIFIED", - "HPA", - "Insight", - "GPU", - "METALLB", - "Spiderpool", - "CustomMetrics", - "CronHPA", - "VPA", - "Hwameistor", - "Flannel", - "KubeOvn", - "OLM", - "EgressGateway", - "Snapshot", - "DRA" - ], - "default": "PLUGIN_NAME_UNSPECIFIED", - "description": "PluginName for enum describing possible enum name.\n\n - PLUGIN_NAME_UNSPECIFIED: Enum unspecified.\n - HPA: The plugin name is HPA.\n - Insight: The plugin name is Insight.\n - GPU: The plugin name is GPU.\n - METALLB: The plugin name is METALLAB.\n - Spiderpool: The plugin name is Spiderpool.\n - CustomMetrics: The plugin name is CustomMetrics.\n - CronHPA: The plugin name is CronHPA.\n - VPA: The plugin name is VPA.\n - Hwameistor: The plugin name is Hwameistor\n - Flannel: The plugin name is Flannel\n - KubeOvn: The plugin name is Kube-ovn\n - OLM: The plugin name is olm\n - EgressGateway: The plugin name is egressgateway\n - Snapshot: The plugin name is snapshot controller\n - DRA: The plugin name is DRA(dynamic resources allcated)" - }, - "v1alpha1Pod": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1PodSpec", - "description": "Spec describes the attributes that a pod is created with." - }, - "status": { - "$ref": "#/definitions/v1alpha1PodStatus", - "description": "Status represents the current information/status of node." - } - } - }, - "v1alpha1PodAffinity": { - "type": "object", - "properties": { - "requiredDuringSchedulingIgnoredDuringExecution": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PodAffinityTerm" - }, - "title": "If the affinity requirements specified by this field are not met at\nscheduling time, the pod will not be scheduled onto the node.\nIf the affinity requirements specified by this field cease to be met\nat some point during pod execution (e.g. due to a pod label update), the\nsystem may or may not try to eventually evict the pod from its node.\nWhen there are multiple elements, the lists of nodes corresponding to each\npodAffinityTerm are intersected, i.e. all terms must be satisfied.\n+optional" - }, - "preferredDuringSchedulingIgnoredDuringExecution": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1WeightedPodAffinityTerm" - }, - "title": "The scheduler will prefer to schedule pods to nodes that satisfy\nthe affinity expressions specified by this field, but it may choose\na node that violates one or more of the expressions. The node that is\nmost preferred is the one with the greatest sum of weights, i.e.\nfor each node that meets all of the scheduling requirements (resource\nrequest, requiredDuringScheduling affinity expressions, etc.),\ncompute a sum by iterating through the elements of this field and adding\n\"weight\" to the sum if the node has pods which matches the corresponding\npodAffinityTerm; the node(s) with the highest sum are the most preferred.\n+optional" - } - }, - "description": "Pod affinity is a group of inter pod affinity scheduling rules." - }, - "v1alpha1PodAffinityTerm": { - "type": "object", - "properties": { - "labelSelector": { - "$ref": "#/definitions/typesLabelSelector", - "title": "A label query over a set of resources, in this case pods.\n+optional" - }, - "namespaces": { - "type": "array", - "items": { - "type": "string" - }, - "title": "namespaces specifies a static list of namespace names that the term applies\nto. The term is applied to the union of the namespaces listed in this field\nand the ones selected by namespaceSelector.\nnull or empty namespaces list and null namespaceSelector means \"this pod's\nnamespace\" +optional" - }, - "topologyKey": { - "type": "string", - "description": "This pod should be co-located (affinity) or not co-located (anti-affinity)\nwith the pods matching the labelSelector in the specified namespaces, where\nco-located is defined as running on a node whose value of the label with\nkey topologyKey matches that of any node on which any of the selected pods\nis running. Empty topologyKey is not allowed." - }, - "namespaceSelector": { - "$ref": "#/definitions/typesLabelSelector", - "title": "A label query over the set of namespaces that the term applies to.\nThe term is applied to the union of the namespaces selected by this field\nand the ones listed in the namespaces field.\nnull selector and null or empty namespaces list means \"this pod's\nnamespace\". An empty selector ({}) matches all namespaces. This field is\nbeta-level and is only honored when PodAffinityNamespaceSelector feature is\nenabled. +optional" - } - }, - "title": "Defines a set of pods (namely those matching the labelSelector\nrelative to the given namespace(s)) that this pod should be\nco-located (affinity) or not co-located (anti-affinity) with,\nwhere co-located is defined as running on a node whose value of\nthe label with key matches that of any node on which\na pod of the set of pods is running" - }, - "v1alpha1PodIp": { - "type": "object", - "properties": { - "ip": { - "type": "string" - } - }, - "description": "IP: An IP address allocated to the pod. Routable at least within\n the cluster.", - "title": "PodIP represents the IP address of a pod.\nIP address information. Each entry includes:" - }, - "v1alpha1PodResourcePolicy": { - "type": "object", - "properties": { - "containerPolicies": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ContainerResourcePolicy" - }, - "description": "Per-container resource policies." - } - }, - "description": "PodResourcePolicy controls how autoscaler computes the recommended resources\nfor containers belonging to the pod. There can be at most one entry for every\nnamed container and optionally a single wildcard entry with `containerName` = '*',\nwhich handles all containers that don't have individual policies." - }, - "v1alpha1PodSecurity": { - "type": "object", - "properties": { - "level": { - "$ref": "#/definitions/v1alpha1Level", - "description": "Level of Pod Security Standards to broadly cover the security spectrum." - }, - "mode": { - "$ref": "#/definitions/v1alpha1Mode", - "description": "Mode of Pod Security Standards." - } - }, - "description": "PodSecurity is the label combination of mode plus level." - }, - "v1alpha1PodSpec": { - "type": "object", - "properties": { - "volumes": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Volume" - } - }, - "initContainers": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Container" - }, - "title": "init containers" - }, - "containers": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Container" - }, - "description": "Containers name." - }, - "ephemeralContainers": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1EphemeralContainer" - }, - "description": "List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing\npod to perform user-initiated actions such as debugging. This list cannot be specified when\ncreating a pod, and it cannot be modified by updating the pod spec. In order to add an\nephemeral container to an existing pod, use the pod's ephemeralcontainers subresource." - }, - "restartPolicy": { - "type": "string" - }, - "nodeName": { - "type": "string", - "description": "NodeName is a request to schedule this pod onto a specific node.\nIf it is non-empty, the scheduler simply schedules this pod onto that node,\nassuming that it fits resource requirements." - }, - "hostNetwork": { - "type": "boolean" - }, - "affinity": { - "$ref": "#/definitions/v1alpha1Affinity", - "title": "bool hostPID = 15;\nbool hostIPC = 16;\nbool shareProcessNamespace = 17;\nPodSecurityContext SecurityContext = 18;\nrepeated LocalObjectReference imagePullSecrets = 19;\nstring hostname = 20;\nstring subdomain = 21;" - }, - "tolerations": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Toleration" - }, - "title": "string schedulerName = 23;" - } - }, - "description": "PodSpec describes the attributes that a pod is created with." - }, - "v1alpha1PodStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1PodStatusPhase", - "description": "Phase represents the phase to search." - }, - "hostIP": { - "type": "string", - "title": "repeated types.Condition conditions = 2;\nstring message = 3;\nstring reason = 4;\nstring nominatedNodeName = 5;" - }, - "podIP": { - "type": "string", - "description": "IP: An IP address allocated to the pod. Routable at least within\n the cluster.", - "title": "PodIP represents the IP address of a pod.\nIP address information. Each entry includes:" - }, - "podIPs": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PodIp" - }, - "title": "PodIPs is same as PodIP" - }, - "startTime": { - "type": "string", - "format": "int64", - "description": "Required. Start time of the operation." - }, - "cpuRequest": { - "type": "string", - "format": "int64", - "description": "Pod cpu request." - }, - "cpuLimit": { - "type": "string", - "format": "int64", - "description": "Pod cpu limit." - }, - "memoryRequest": { - "type": "string", - "format": "int64", - "description": "Pod memory request." - }, - "memoryLimit": { - "type": "string", - "format": "int64", - "description": "Pod memory limit." - }, - "cpuUsageRate": { - "type": "number", - "format": "double", - "description": "cpuUsage_rate is the actual total pod cpu usage. Unit: m." - }, - "memoryUsageRate": { - "type": "number", - "format": "double", - "description": "memoryUsage_rate the total pod memory usage. Unit: byte." - }, - "restartCount": { - "type": "integer", - "format": "int32", - "description": "restart_count the total pod restart count." - }, - "ownedBy": { - "$ref": "#/definitions/PodStatusOwnedBy" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "title": "Current service state of pod.\nMore info:\nhttps://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions" - }, - "containerTotalCount": { - "type": "integer", - "format": "int32", - "description": "Container_total_count represents pod's container total count." - }, - "containerReadyCount": { - "type": "integer", - "format": "int32", - "description": "Container_ready_count represents pod's container ready count." - }, - "initContainerStatuses": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ContainerStatus" - }, - "title": "The list has one entry per init container in the manifest. The most recent successful\ninit container will have ready = true, the most recently started container will have\nstartTime set.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status" - }, - "containerStatuses": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ContainerStatus" - }, - "title": "The list has one entry per container in the manifest.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n+optional" - }, - "ephemeralContainerStatuses": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ContainerStatus" - }, - "title": "Status for any ephemeral containers that have run in this pod.\n+optional" - }, - "podStatus": { - "type": "string", - "description": "pod_status refer to `kubectl get po` result." - }, - "cpuUsage": { - "type": "number", - "format": "double", - "description": "cpu_usage is the actual total pod cpu usage. Unit: m." - }, - "memoryUsage": { - "type": "number", - "format": "double", - "description": "memory_usage the total pod memory usage. Unit: byte." - }, - "podFilterStatus": { - "$ref": "#/definitions/v1alpha1FilterPodStatus" - } - }, - "description": "PodStatus constructs an declarative configuration of the Pod type for use\nwith apply." - }, - "v1alpha1PodStatusPhase": { - "type": "string", - "enum": [ - "PHASE_UNSPECIFIED", - "Unknown", - "Pending", - "Running", - "Succeeded", - "Failed" - ], - "default": "PHASE_UNSPECIFIED", - "description": " - PHASE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Unknown: PodUnknown means that for some reason the state of the pod could not be\nobtained, typically due to an error in communicating with the host of the\npod.\n - Pending: PodPending means the pod has been accepted by the system, but one or more\nof the containers has not been started. This includes time before being\nbound to a node, as well as time spent pulling images onto the host.\n - Running: PodRunning means the pod has been bound to a node and all of the\ncontainers have been started. At least one container is still running or\nis in the process of being restarted. PodSucceeded means that all\ncontainers in the pod have voluntarily terminated with a container exit\ncode of 0, and the system is not going to restart any of these\ncontainers.\n - Succeeded: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system).\n - Failed: PodFailed means that all containers in the pod have terminated, and at\nleast one container has terminated in a failure (exited with a non-zero\nexit code or was stopped by the system)." - }, - "v1alpha1PodTemplateSpec": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1PodSpec", - "description": "Spec describes the attributes that a pod is created with." - } - }, - "description": "template is the object that describes the pod that will be created if\ninsufficient replicas are detected. Each pod stamped out by the StatefulSet\nwill fulfill this Template, but have a unique identity from the rest\nof the StatefulSet." - }, - "v1alpha1PodUpdatePolicy": { - "type": "object", - "properties": { - "updateMode": { - "$ref": "#/definitions/v1alpha1UpdateMode", - "description": "Controls when autoscaler applies changes to the pod resources.\nThe default is 'Auto'." - }, - "minReplicas": { - "type": "integer", - "format": "int32", - "description": "Minimal number of replicas which need to be alive for Updater to attempt\npod eviction (pending other checks like PDB). Only positive values are\nallowed. Overrides global '--min-replicas' flag." - } - }, - "description": "PodUpdatePolicy describes the rules on how changes are applied to the pods." - }, - "v1alpha1PodsMetricSource": { - "type": "object", - "properties": { - "metric": { - "$ref": "#/definitions/v1alpha1MetricIdentifier", - "title": "metric identifies the target metric by name and selector" - }, - "target": { - "$ref": "#/definitions/v1alpha1MetricTarget", - "title": "target specifies the target value for the given metric" - } - }, - "title": "MetricValueStatus holds the current value for a metric" - }, - "v1alpha1PodsMetricStatus": { - "type": "object", - "properties": { - "metric": { - "$ref": "#/definitions/v1alpha1MetricIdentifier", - "title": "metric identifies the target metric by name and selector" - }, - "current": { - "$ref": "#/definitions/v1alpha1MetricValueStatus", - "title": "current contains the current value for the given metric" - } - }, - "description": "PodsMetricStatus indicates the current value of a metric describing each pod in\nthe current scale target (for example, transactions-processed-per-second)." - }, - "v1alpha1PolicyRule": { - "type": "object", - "properties": { - "verbs": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Verbs is a list of Verbs that apply to ALL the ResourceKinds contained in this rule. '*' represents all verbs." - }, - "apiGroups": { - "type": "array", - "items": { - "type": "string" - }, - "description": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of\nthe enumerated resources in any API group will be allowed. \"\" represents the core API group and \"*\" represents all API groups." - }, - "resources": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Resources is a list of resources this rule applies to. '*' represents all resources." - }, - "resourceNames": { - "type": "array", - "items": { - "type": "string" - }, - "description": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed." - }, - "nonResourceUrls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path\nSince non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding.\nRules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both." - } - }, - "description": "PolicyRule holds information that describes a policy rule, but does not contain information\nabout who the rule applies to or which namespace the rule applies to." - }, - "v1alpha1Ports": { - "type": "object", - "properties": { - "containerPort": { - "type": "integer", - "format": "int32", - "description": "ContainerPort connects to a certain container port in a pod." - }, - "hostPort": { - "type": "integer", - "format": "int32", - "title": "Number of port to expose on the host.\nIf specified, this must be a valid port number, 0 < x < 65536.\nIf HostNetwork is specified, this must match ContainerPort.\nMost containers do not need this.\n+optional" - }, - "name": { - "type": "string", - "title": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each\nnamed port in a pod must have a unique name. Name for the port that can be\nreferred to by services.\n+optional" - }, - "protocol": { - "type": "string", - "title": "Protocol for port. Must be UDP, TCP, or SCTP.\nDefaults to \"TCP\".\n+optional\n+default=\"TCP\"" - } - }, - "title": "Ports are not allowed for ephemeral containers.\n+optional\n+patchMergeKey=containerPort\n+patchStrategy=merge\n+listType=map\n+listMapKey=containerPort\n+listMapKey=protocol" - }, - "v1alpha1PreCheckNodeInfo": { - "type": "object", - "properties": { - "pingConnection": { - "type": "string", - "description": "ping_connection represents whether the node is connective." - }, - "existingKubernetesService": { - "type": "string", - "description": "existing_kubernetes_service represents whether exist k8s service." - }, - "dualStackNetwork": { - "type": "string", - "description": "dual_stack_network represents whether enable dual-stack network." - }, - "osKernelVersionOutput": { - "type": "string", - "description": "os_kernel_version_output defines os kernel detail informations." - }, - "osKernelVersion": { - "type": "string", - "description": "os_kernel_version defines os kernel version." - }, - "osFamily": { - "type": "string", - "description": "os_family represents the what the os family of host is." - }, - "osType": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "os_type includes all of os informations." - }, - "timeZone": { - "type": "string", - "description": "time_zone represents the time zone of host." - }, - "nodeTimestamp": { - "type": "string", - "description": "node_timestamp represents the node timestamp when running precheck." - } - } - }, - "v1alpha1PreCheckYumRepoInfo": { - "type": "object", - "properties": { - "osRepoType": { - "$ref": "#/definitions/v1alpha1OsRepoType", - "title": "os_repo_type represents what the os repo type is, none, builtin or external" - }, - "yumRepos": { - "type": "array", - "items": { - "type": "string" - }, - "description": "yum_repos is yum repo list." - }, - "dockerRhRepoBaseUrl": { - "type": "string", - "description": "docker_rh_repo_base_url is docker repo base url." - } - } - }, - "v1alpha1PreRelease": { - "type": "string", - "enum": [ - "PRE_RELEASE_TYPE_UNSPECIFIED", - "ALPHA", - "BETA", - "GA", - "DEPRECATED" - ], - "default": "PRE_RELEASE_TYPE_UNSPECIFIED", - "description": " - PRE_RELEASE_TYPE_UNSPECIFIED: pre release type is unspecified." - }, - "v1alpha1PreferredSchedulingTerm": { - "type": "object", - "properties": { - "weight": { - "type": "integer", - "format": "int32", - "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the\nrange 1-100." - }, - "preference": { - "$ref": "#/definitions/v1alpha1NodeSelectorTerm", - "description": "A node selector term, associated with the corresponding weight." - } - }, - "description": "An empty preferred scheduling term matches all objects with implicit weight 0\n(i.e. it's a no-op). A null preferred scheduling term matches no objects\n(i.e. is also a no-op)." - }, - "v1alpha1Probe": { - "type": "object", - "properties": { - "failureThreshold": { - "type": "integer", - "format": "int32", - "title": "Minimum consecutive failures for the probe to be considered failed after\nhaving succeeded. Defaults to 3. Minimum value is 1. +optional" - }, - "periodSeconds": { - "type": "integer", - "format": "int32", - "description": "Probe describes a health check to be performed against a container to\ndetermine whether it is alive or ready to receive traffic." - }, - "successThreshold": { - "type": "integer", - "format": "int32", - "title": "Minimum consecutive successes for the probe to be considered successful\nafter having failed. Defaults to 1. Must be 1 for liveness and startup.\nMinimum value is 1. +optional" - }, - "timeoutSeconds": { - "type": "integer", - "format": "int32", - "title": "Number of seconds after which the probe times out.\nDefaults to 1 second. Minimum value is 1.\nMore info:\nhttps://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n+optional" - }, - "initialDelaySeconds": { - "type": "integer", - "format": "int32", - "title": "Number of seconds after the container has started before liveness probes\nare initiated. More info:\nhttps://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n+optional" - }, - "terminationGracePeriodSeconds": { - "type": "string", - "format": "int64", - "title": "Optional duration in seconds the pod needs to terminate gracefully upon\nprobe failure. The grace period is the duration in seconds after the\nprocesses running in the pod are sent a termination signal and the time\nwhen the processes are forcibly halted with a kill signal. Set this value\nlonger than the expected cleanup time for your process. If this value is\nnil, the pod's terminationGracePeriodSeconds will be used. Otherwise, this\nvalue overrides the value provided by the pod spec.\nValue must be non-negative integer. The value zero indicates stop\nimmediately via the kill signal (no opportunity to shut down). This is a\nbeta field and requires enabling ProbeTerminationGracePeriod feature gate.\nMinimum value is 1. spec.terminationGracePeriodSeconds is used if unset.\n+optional" - }, - "httpGet": { - "$ref": "#/definitions/v1alpha1HTTPGetAction", - "title": "handler\nHTTPGet specifies the http request to perform.\n+optional" - }, - "exec": { - "$ref": "#/definitions/v1alpha1ExecAction", - "title": "Exec specifies the action to take.\n+optional" - }, - "tcpSocket": { - "$ref": "#/definitions/v1alpha1TCPSocketAction", - "title": "TCPSocket specifies an action involving a TCP port.\n+optional" - } - }, - "description": "Probe describes a health check to be performed against a container to\ndetermine whether it is alive or ready to receive traffic." - }, - "v1alpha1PrometheusQueryRangeResult": { - "type": "object", - "properties": { - "matrix": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1SampleStream" - }, - "title": "the matrix of sample stream" - } - }, - "title": "The result of prometheus query range" - }, - "v1alpha1PrometheusQueryResult": { - "type": "object", - "properties": { - "vector": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Sample" - }, - "title": "the vector of sample" - } - }, - "title": "The result of prometheus query result" - }, - "v1alpha1Protocol": { - "type": "string", - "enum": [ - "PROTOCOL_UNSPECIFIED", - "TCP", - "UDP", - "SCTP" - ], - "default": "PROTOCOL_UNSPECIFIED", - "description": "Protocol defines network protocols supported for things like container ports.\n\n - PROTOCOL_UNSPECIFIED: Placeholder to avoid zero not return.\n - TCP: ProtocolTCP is the TCP protocol.\n - UDP: ProtocolUDP is the UDP protocol.\n - SCTP: ProtocolSCTP is the SCTP protocol." - }, - "v1alpha1PutNodeLabelsResponse": { - "type": "object", - "properties": { - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "v1alpha1PutNodeTaintsResponse": { - "type": "object", - "properties": { - "taints": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Taint" - } - } - }, - "description": "PutNodeTaintsResponse returns node's taints." - }, - "v1alpha1RecommendedContainerResources": { - "type": "object", - "properties": { - "containerName": { - "type": "string", - "description": "Name of the container." - }, - "target": { - "$ref": "#/definitions/v1alpha1ResourceList", - "description": "Recommended amount of resources. Observes ContainerResourcePolicy." - }, - "lowerBound": { - "$ref": "#/definitions/v1alpha1ResourceList", - "description": "Minimum recommended amount of resources. Observes ContainerResourcePolicy.\nThis amount is not guaranteed to be sufficient for the application to operate in a stable way, however\nrunning with less resources is likely to have significant impact on performance/availability." - }, - "upperBound": { - "$ref": "#/definitions/v1alpha1ResourceList", - "description": "Maximum recommended amount of resources. Observes ContainerResourcePolicy.\nAny resources allocated beyond this value are likely wasted. This value may be larger than the maximum\namount of application is actually capable of consuming." - }, - "uncappedTarget": { - "$ref": "#/definitions/v1alpha1ResourceList", - "description": "The most recent recommended resources target computed by the autoscaler\nfor the controlled pods, based only on actual resource usage, not taking\ninto account the ContainerResourcePolicy.\nMay differ from the Recommendation if the actual resource usage causes\nthe target to violate the ContainerResourcePolicy (lower than MinAllowed\nor higher that MaxAllowed).\nUsed only as status indication, will not affect actual resource assignment." - } - }, - "description": "RecommendedContainerResources is the recommendation of resources computed by\nautoscaler for a specific container. Respects the container resource policy\nif present in the spec. In particular the recommendation is not produced for\ncontainers with `ContainerScalingMode` set to 'Off'." - }, - "v1alpha1RecommendedPodResources": { - "type": "object", - "properties": { - "containerRecommendations": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1RecommendedContainerResources" - }, - "description": "Resources recommended by the autoscaler for each container." - } - }, - "description": "RecommendedPodResources is the recommendation of resources computed by\nautoscaler. It contains a recommendation for each container in the pod\n(except for those with `ContainerScalingMode` set to 'Off')." - }, - "v1alpha1Registry": { - "type": "object", - "properties": { - "alias": { - "type": "string", - "description": "Alias is an alias for the registry, showed in list." - }, - "host": { - "type": "string", - "description": "Host is registry host." - }, - "name": { - "type": "string", - "description": "Name is registry name, use to query project lists." - } - }, - "title": "Registry contains necessary info" - }, - "v1alpha1ReleaseInfo": { - "type": "object", - "properties": { - "firstDeployed": { - "type": "string", - "format": "int64", - "description": "FirstDeployed is when the release was first deployed." - }, - "lastDeployed": { - "type": "string", - "format": "int64", - "description": "LastDeployed is when the release was last deployed." - }, - "deleted": { - "type": "string", - "format": "int64", - "description": "Deleted tracks when this object was deleted." - }, - "description": { - "type": "string", - "description": "Description is human-friendly \"log entry\" about this release." - }, - "status": { - "$ref": "#/definitions/v1alpha1ReleasePhase", - "description": "Status is the current state of the release." - }, - "notes": { - "type": "string", - "description": "Contains the rendered templates/NOTES.txt if available." - }, - "readme": { - "type": "string" - } - } - }, - "v1alpha1ReleasePhase": { - "type": "string", - "enum": [ - "RELEASE_PHASE_UNSPECIFIED", - "unknown", - "deployed", - "uninstalled", - "superseded", - "failed", - "uninstalling", - "pending_install", - "pending_upgrade", - "pending_rollback" - ], - "default": "RELEASE_PHASE_UNSPECIFIED", - "description": " - RELEASE_PHASE_UNSPECIFIED: The release state is unspecified.\n - unknown: unknown indicates that a release is in an uncertain state.\n - deployed: deployed indicates that the release has been pushed to Kubernetes.\n - uninstalled: uninstalled indicates that a release has been uninstalled from Kubernetes.\n - superseded: superseded indicates that this release object is outdated and a newer one exists.\n - failed: failed indicates that the release was not successfully deployed.\n - uninstalling: uninstalling indicates that a uninstall operation is underway.\n - pending_install: pending_install indicates that an install operation is underway.\n - pending_upgrade: pending_upgrade indicates that an upgrade operation is underway.\n - pending_rollback: pending_rollback indicates that an rollback operation is underway." - }, - "v1alpha1ReleaseResource": { - "type": "object", - "properties": { - "apiVersion": { - "type": "string", - "description": "ApiVersion of the resource." - }, - "kind": { - "type": "string", - "description": "Kind of the resource." - }, - "name": { - "type": "string", - "description": "Name of the resource." - }, - "namespace": { - "type": "string", - "description": "Namespace of the resource." - } - }, - "title": "ReleaseResource belongs to ReleaseSpec" - }, - "v1alpha1ReleaseSpec": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Name is the name of the release" - }, - "info": { - "$ref": "#/definitions/v1alpha1ReleaseInfo", - "title": "Info provides information about a release" - }, - "chart": { - "$ref": "#/definitions/v1alpha1HelmChart", - "description": "HelmChart is the chart that was released." - }, - "values": { - "type": "string", - "description": "Config is the set of extra Values added to the chart.\nThese values override the default values inside of the chart." - }, - "resources": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ReleaseResource" - }, - "description": "Manifest is the string representation of the rendered template." - }, - "version": { - "type": "integer", - "format": "int32", - "description": "Version is an int which represents the version of the release." - }, - "namespace": { - "type": "string", - "description": "Namespace is the kubernetes namespace of the release." - }, - "helmMajorVersion": { - "type": "integer", - "format": "int32", - "title": "HelmMajorVersion is the helm major version" - }, - "operationName": { - "type": "string", - "description": "OperationName is to find related job and pods to check the helm operation log." - } - } - }, - "v1alpha1ReleaseStatus": { - "type": "object", - "properties": { - "summary": { - "$ref": "#/definitions/v1alpha1Summary" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current condition of the helmrelease." - } - } - }, - "v1alpha1ReplicaSet": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Metadata is that all persisted resources must have, which includes all objects\nusers must create." - }, - "spec": { - "$ref": "#/definitions/v1alpha1ReplicaSetSpec", - "description": "ReplicaSetSpec is the specification of a ReplicaSet." - }, - "status": { - "$ref": "#/definitions/v1alpha1ReplicaSetStatus", - "description": "ReplicaSetStatus represents the current status of a ReplicaSet." - } - }, - "description": "ReplicaSet ensures that a specified number of pod replicas are running at any given time." - }, - "v1alpha1ReplicaSetCondition": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type of replica set condition." - }, - "status": { - "type": "string", - "description": "Status of the condition, one of True, False, Unknown." - }, - "lastTransitionTime": { - "type": "string", - "format": "int64", - "title": "The last time the condition transitioned from one status to another.\n+optional" - }, - "reason": { - "type": "string", - "title": "The reason for the condition's last transition.\n+optional" - }, - "message": { - "type": "string", - "title": "A human readable message indicating details about the transition.\n+optional" - } - }, - "title": "kubernetes.io/change-cause\ndeployment.kubernetes.io/revision" - }, - "v1alpha1ReplicaSetSpec": { - "type": "object", - "properties": { - "replicas": { - "type": "integer", - "format": "int32", - "description": "Represents the replicas of the deployment." - }, - "revision": { - "type": "string", - "format": "int64", - "description": "Represents the version of the deployment." - }, - "selector": { - "$ref": "#/definitions/typesLabelSelector", - "description": "Selector a label selector is a label query over a set of resources. The result of matchLabels and\nmatchExpressions are ANDed. An empty label selector matches all objects. A null\nlabel selector matches no objects." - }, - "template": { - "$ref": "#/definitions/v1alpha1PodTemplateSpec", - "title": "Template an object that describes the pod that will be created.\nThe ReplicaSet will create exactly one copy of this pod on every node\nthat matches the template's node selector (or on every node if no node\nselector is specified).\nMore info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template" - } - }, - "description": "ReplicaSetSpec is the specification of a ReplicaSet." - }, - "v1alpha1ReplicaSetStatus": { - "type": "object", - "properties": { - "replicas": { - "type": "integer", - "format": "int32", - "title": "Replicas is the most recently oberved number of replicas.\nMore info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller" - }, - "fullyLabeledReplicas": { - "type": "integer", - "format": "int32", - "title": "The number of pods that have labels matching the labels of the pod template of the replicaset.\n+optional" - }, - "readyReplicas": { - "type": "integer", - "format": "int32", - "title": "readyReplicas is the number of pods targeted by this ReplicaSet with a Ready Condition.\n+optional" - }, - "availableReplicas": { - "type": "integer", - "format": "int32", - "title": "The number of available replicas (ready for at least minReadySeconds) for this replica set.\n+optional" - }, - "observedGeneration": { - "type": "string", - "format": "int64", - "title": "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\n+optional" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ReplicaSetCondition" - }, - "title": "Represents the latest available observations of a replica set's current state.\n+optional\n+patchMergeKey=type\n+patchStrategy=merge" - } - }, - "description": "ReplicaSetStatus represents the current status of a ReplicaSet." - }, - "v1alpha1RepoPhase": { - "type": "string", - "enum": [ - "REPOSITORY_PHASE_UNSPECIFIED", - "UNKNOWN", - "ACTIVE" - ], - "default": "REPOSITORY_PHASE_UNSPECIFIED", - "description": " - REPOSITORY_PHASE_UNSPECIFIED: The repository state is unspecified.\n - UNKNOWN: The repository state is unknown.\n - ACTIVE: The repository is active." - }, - "v1alpha1RepoSpec": { - "type": "object", - "properties": { - "url": { - "type": "string", - "title": "URL A http URL of the repo to connect to" - }, - "clientSecret": { - "$ref": "#/definitions/RepoSpecSecretReference", - "description": "client_secret a reference to a secret object." - }, - "insecureSkipTLSVerify": { - "type": "boolean", - "description": "InsecureSkipTLSVerify will use insecure HTTPS to download the helmrepo's index." - } - } - }, - "v1alpha1RepoStatus": { - "type": "object", - "properties": { - "phase": { - "$ref": "#/definitions/v1alpha1RepoPhase", - "description": "phase represents the status of the repository." - }, - "indexConfigMapName": { - "type": "string", - "title": "index_config_map_name is the configmap with the store index in it" - }, - "indexConfigMapNamespace": { - "type": "string", - "title": "index_config_map_namespace is the configmap with the store index in it" - }, - "downloadTime": { - "type": "string", - "format": "int64", - "title": "download_time the time when the index was last downloaded" - }, - "url": { - "type": "string", - "title": "The url used for the last successful index" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current service state of helmrepo." - } - } - }, - "v1alpha1Repository": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of repository." - }, - "artifacts": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Artifact" - }, - "description": "Artifacts of repository." - } - }, - "title": "Repository concept from Harbor" - }, - "v1alpha1Resource": { - "type": "object", - "properties": { - "apiVersion": { - "type": "string", - "description": "ApiVersion of the resource." - }, - "kind": { - "type": "string", - "description": "Kind of the resource." - }, - "name": { - "type": "string", - "description": "Name of the resource." - }, - "namespace": { - "type": "string", - "description": "Namespace of the resource." - }, - "phase": { - "$ref": "#/definitions/v1alpha1ResourcePhase", - "description": "Phase stands for the resource phase." - } - }, - "title": "Resource belongs to ReleaseStatus" - }, - "v1alpha1ResourceFieldSelector": { - "type": "object", - "properties": { - "containerName": { - "type": "string", - "title": "Container name: required for volumes,\nfor env vars\n+optional" - }, - "resource": { - "type": "string", - "title": "Required: resource to select" - } - }, - "title": "ResourceFieldSelector represents container resources (cpu, memory) and their\noutput format" - }, - "v1alpha1ResourceList": { - "type": "object", - "properties": { - "cpu": { - "type": "string", - "description": "Cpu is the total pod cpu resource. Unit: m." - }, - "memory": { - "type": "string", - "description": "Memory is the total memory resource. Unit: byte." - }, - "storage": { - "type": "string", - "description": "Storage is the total storage resource. Unit: byte." - }, - "resources": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Resources contains all resources include cpu, memory, storage." - } - }, - "description": "ResourceList returns a string representation of a resource list in a human\nreadable format." - }, - "v1alpha1ResourceMetricSource": { - "type": "object", - "properties": { - "name": { - "$ref": "#/definitions/v1alpha1ResourceName", - "description": "name is the name of the resource in question." - }, - "target": { - "$ref": "#/definitions/v1alpha1MetricTarget", - "title": "target specifies the target value for the given metric" - } - }, - "description": "ResourceMetricSource indicates how to scale on a resource metric known to\nKubernetes, as specified in requests and limits, describing each pod in the\ncurrent scale target (e.g. CPU or memory). The values will be averaged\ntogether before being compared to the target. Such metrics are built in to\nKubernetes, and have special scaling options on top of those available to\nnormal per-pod metrics using the \"pods\" source. Only one \"target\" type\nshould be set." - }, - "v1alpha1ResourceMetricStatus": { - "type": "object", - "properties": { - "name": { - "$ref": "#/definitions/v1alpha1ResourceName", - "description": "Name is the name of the resource in question." - }, - "current": { - "$ref": "#/definitions/v1alpha1MetricValueStatus", - "title": "current contains the current value for the given metric" - } - }, - "description": "ResourceMetricStatus indicates the current value of a resource metric known to\nKubernetes, as specified in requests and limits, describing each pod in the\ncurrent scale target (e.g. CPU or memory). Such metrics are built in to\nKubernetes, and have special scaling options on top of those available to\nnormal per-pod metrics using the \"pods\" source." - }, - "v1alpha1ResourceName": { - "type": "string", - "enum": [ - "RESOURCE_NAME_UNSPECIFIED", - "cpu", - "memory" - ], - "default": "RESOURCE_NAME_UNSPECIFIED", - "description": "ResourceName is the name identifying various resources in a ResourceList." - }, - "v1alpha1ResourcePhase": { - "type": "string", - "enum": [ - "RESOURCE_PHASE_UNSPECIFIED", - "InProgress", - "Failed", - "Current", - "Terminating", - "Unknown" - ], - "default": "RESOURCE_PHASE_UNSPECIFIED", - "description": "The set of status conditions which can be assigned to resources.\n\n - RESOURCE_PHASE_UNSPECIFIED: ResourcePhase unspecified.\n - InProgress: Resource in progress.\n - Failed: Resource failed.\n - Current: Resource current.\n - Terminating: Resource terminating.\n - Unknown: Resource unknown." - }, - "v1alpha1ResourceQuota": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1ResourceQuotaSpec", - "description": "Spec defines the desired quota." - }, - "status": { - "$ref": "#/definitions/v1alpha1ResourceQuotaStatus", - "description": "Status defines the actual enforced quota and its current usage." - } - }, - "description": "ResourceQuota sets aggregate quota restrictions enforced per namespace." - }, - "v1alpha1ResourceQuotaSpec": { - "type": "object", - "properties": { - "hard": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Hard is the set of desired hard limits for each named resource." - } - }, - "description": "ResourceQuotaSpec defines the desired hard limits to enforce for Quota." - }, - "v1alpha1ResourceQuotaStatus": { - "type": "object", - "properties": { - "hard": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Hard is the set of enforced hard limits for each named resource." - }, - "used": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Used is used for each named resource." - } - }, - "description": "ResourceQuotaStatus defines the enforced hard limits and observed use." - }, - "v1alpha1ResourceRange": { - "type": "object", - "properties": { - "min": { - "type": "integer", - "format": "int32", - "title": "resource min value" - }, - "minDesc": { - "type": "string", - "title": "min resource description" - }, - "max": { - "type": "integer", - "format": "int32", - "title": "resource max value" - }, - "maxDesc": { - "type": "string", - "title": "max resource description" - } - } - }, - "v1alpha1ResourceRequirements": { - "type": "object", - "properties": { - "limits": { - "$ref": "#/definitions/v1alpha1ResourceList", - "title": "Limits describes the maximum amount of compute resources allowed.\nMore info:\nhttps://kubernetes.io/docs/concepts/configuration/manage-resources-containers/\n+optional" - }, - "requests": { - "$ref": "#/definitions/v1alpha1ResourceList", - "title": "Requests describes the minimum amount of compute resources required.\nIf Requests is omitted for a container, it defaults to Limits if that is\nexplicitly specified, otherwise to an implementation-defined value. More\ninfo:\nhttps://kubernetes.io/docs/concepts/configuration/manage-resources-containers/\n+optional" - } - }, - "description": "ResourceRequirements describes the compute resource requirements." - }, - "v1alpha1ResourceSummary": { - "type": "object", - "properties": { - "totalNum": { - "type": "integer", - "format": "int32", - "description": "Refers to a resource totally." - }, - "readyNum": { - "type": "integer", - "format": "int32", - "description": "Refers to a resource has been ready." - } - }, - "description": "ResourceSummary refers to a resource totally." - }, - "v1alpha1RestartDaemonSetResponse": { - "type": "object", - "properties": { - "daemonSet": { - "$ref": "#/definitions/v1alpha1DaemonSet", - "description": "The new state of the daemonSet after restarting." - } - }, - "description": "Response message for the `RestartDaemonSetResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1RestartDeploymentResponse": { - "type": "object", - "properties": { - "deployment": { - "$ref": "#/definitions/v1alpha1Deployment", - "description": "The new state of the deployment after restarting." - } - }, - "description": "Response message for the `RestartDeploymentResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1RestartJobResponse": { - "type": "object", - "properties": { - "job": { - "$ref": "#/definitions/v1alpha1Job", - "description": "The new state of the job after restarting." - } - }, - "description": "Response message for the `RestartJobResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1RestartStatefulSetResponse": { - "type": "object", - "properties": { - "statefulSet": { - "$ref": "#/definitions/v1alpha1StatefulSet", - "description": "The new state of the statefulSet after restarting." - } - }, - "description": "Response message for the `RestartStatefulSetResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1ResumeCronJobResponse": { - "type": "object", - "properties": { - "cronjob": { - "$ref": "#/definitions/v1alpha1CronJob", - "description": "The new state of the cronjob after resuming." - } - }, - "description": "Response message for the `ResumeCronJobResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1ResumeDeploymentResponse": { - "type": "object", - "properties": { - "deployment": { - "$ref": "#/definitions/v1alpha1Deployment", - "description": "The new state of the deployment after resuming." - } - }, - "description": "Response message for the `ResumeDeploymentResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1ResumeEtcdBackupStrategyResponse": { - "type": "object", - "properties": { - "strategy": { - "$ref": "#/definitions/v1alpha1EtcdBackupStrategy", - "description": "The new state of the etcd backup strategy after resuming." - } - }, - "description": "Response message for the `ResumeEtcdBackupStrategyResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1Revision": { - "type": "object", - "properties": { - "version": { - "type": "integer", - "format": "int32", - "description": "Version is an int which represents the revision of the release." - }, - "updated": { - "type": "string", - "format": "int64", - "description": "Revision update time." - }, - "status": { - "$ref": "#/definitions/v1alpha1ReleasePhase", - "description": "Status is the status of the helm release." - }, - "chart": { - "type": "string", - "description": "Chart is the chart name of the helm release." - }, - "appVersion": { - "type": "string", - "description": "AppVersion is the app version of the helm release." - }, - "manifest": { - "type": "string", - "description": "Manifest is the chart yaml of the helm release revision." - } - } - }, - "v1alpha1RoleBinding": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "subjects": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1Subject" - }, - "description": "Subjects holds references to the objects the role applies to." - }, - "roleRef": { - "$ref": "#/definitions/v1alpha1RoleRef", - "description": "RoleRef can reference a Role in the current namespace or a ClusterRole in\nthe global namespace." - } - }, - "description": "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace.\nIt adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given\nnamespace only have effect in that namespace." - }, - "v1alpha1RoleNames": { - "type": "object", - "properties": { - "names": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "v1alpha1RoleRef": { - "type": "object", - "properties": { - "APIGroup": { - "type": "string", - "title": "APIGroup is the group for the resource being referenced" - }, - "kind": { - "type": "string", - "title": "Kind is the type of resource being referenced" - }, - "name": { - "type": "string", - "title": "Name is the name of resource being referenced" - } - } - }, - "v1alpha1RoleSummary": { - "type": "object", - "properties": { - "clusterRoles": { - "type": "array", - "items": { - "type": "string" - } - }, - "roles": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/v1alpha1RoleNames" - } - } - } - }, - "v1alpha1RollbackDaemonSetResponse": { - "type": "object", - "properties": { - "daemonSet": { - "$ref": "#/definitions/v1alpha1DaemonSet", - "description": "The new state of the daemonSet after rollBacking." - } - }, - "description": "Response message for the `RollbackDaemonSetResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1RollbackDeploymentResponse": { - "type": "object", - "properties": { - "deployment": { - "$ref": "#/definitions/v1alpha1Deployment", - "description": "The new state of the deployment after restarting." - } - }, - "description": "Response message for the `RestartDeploymentResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1RollbackHelmReleaseResponse": { - "type": "object", - "properties": { - "cluster": { - "type": "string", - "description": "Cluster represents which cluster the helmrelease belongs to." - }, - "namespace": { - "type": "string", - "description": "Namespace represents which namespace the helmrelease belongs to." - }, - "releaseName": { - "type": "string", - "description": "ReleaseName represents the helmrelease name." - } - } - }, - "v1alpha1RollbackStatefulSetResponse": { - "type": "object", - "properties": { - "statefulSet": { - "$ref": "#/definitions/v1alpha1StatefulSet", - "description": "The new state of the statefulSet after rollBacking." - } - }, - "description": "Response message for the `RollbackStatefulSetResponse` method.\nThis response message is assigned to the `response` field of the returned\nOperation when that operation is done." - }, - "v1alpha1S3Config": { - "type": "object", - "properties": { - "accessKeyId": { - "type": "string", - "description": "username or access key id for minio." - }, - "region": { - "type": "string" - }, - "secretAccessKey": { - "type": "string", - "description": "password or secret key for minio." - }, - "bucket": { - "type": "string", - "description": "the bucket name for minio." - }, - "endpoint": { - "type": "string", - "description": "endpoint for minio." - }, - "storePrefix": { - "type": "string", - "description": "equal to SnapStoreConfig.prefix." - }, - "consoleAddress": { - "type": "string", - "description": "the front-end address for minio." - } - } - }, - "v1alpha1SSHInfo": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1SSHInfoType" - }, - "pass": { - "type": "string" - }, - "secretName": { - "type": "string" - }, - "user": { - "type": "string" - } - } - }, - "v1alpha1SSHInfoType": { - "type": "string", - "enum": [ - "TYPE_UNSPECIFIED", - "Password", - "PrivateKey" - ], - "default": "TYPE_UNSPECIFIED", - "description": " - PrivateKey: If you choose this mode, the type of secret should be filled in. The key of data should be \"kubernetes.io/ssh-auth\".\nThe key of data should be \"ssh-privatekey\"." - }, - "v1alpha1Sample": { - "type": "object", - "properties": { - "metric": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "The labels of match" - }, - "values": { - "$ref": "#/definitions/v1alpha1samplePair", - "title": "The time stamp" - } - }, - "title": "The metric of sample" - }, - "v1alpha1SampleStream": { - "type": "object", - "properties": { - "metric": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "The labels of match" - }, - "values": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1samplePair" - }, - "title": "The time stamp" - } - }, - "title": "The time stamp stream" - }, - "v1alpha1ScalePersistentVolumeClaimResponse": { - "type": "object", - "properties": { - "capacity": { - "type": "string", - "title": "capacity represents the capacity of PVC" - } - }, - "title": "UpdateScalePersistentVolumeClaimResponse represents the request of scale Pvc" - }, - "v1alpha1Secret": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "immutable": { - "type": "boolean", - "title": "Immutable, if set to true, ensures that data stored in the Secret cannot\nbe updated (only object metadata can be modified).\nIf not set to true, the field can be modified at any time.\nDefaulted to nil.\n+optional" - }, - "data": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Data contains the secret data. Each key must consist of alphanumeric\ncharacters, '-', '_' or '.'. The serialized form of the secret data is a\nbase64 encoded string, representing the arbitrary (possibly non-string)\ndata value here. Described in https://tools.ietf.org/html/rfc4648#section-4\n+optional" - }, - "stringData": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "stringData allows specifying non-binary secret data in string form.\nIt is provided as a write-only input field for convenience.\nAll keys and values are merged into the data field on write, overwriting any existing values.\nThe stringData field is never output when reading from the API.\n+k8s:conversion-gen=false\n+optional" - }, - "type": { - "type": "string", - "title": "Used to facilitate programmatic handling of secret data.\n+optional" - } - } - }, - "v1alpha1SecretEnvSource": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of SecretEnvSource." - }, - "optional": { - "type": "boolean" - } - }, - "description": "SecretEnvSource selects a Secret to populate the environment\nvariables with.\nThe contents of the target Secret's Data field will represent the\nkey-value pairs as environment variables." - }, - "v1alpha1SecretKeySelector": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of Secret." - }, - "key": { - "type": "string", - "description": "Required. The secret key to be applied to a pod." - }, - "optional": { - "type": "boolean", - "title": "Specify whether the Secret or its key must be defined\n+optional" - } - }, - "description": "SecretKeySelector selects a key of a Secret." - }, - "v1alpha1SecretVolumeSource": { - "type": "object", - "properties": { - "secretName": { - "type": "string", - "title": "Name of the secret in the pod's namespace to use.\nMore info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n+optional" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1KeyToPath" - }, - "title": "If unspecified, each key-value pair in the Data field of the referenced\nSecret will be projected into the volume as a file whose name is the\nkey and content is the value. If specified, the listed keys will be\nprojected into the specified paths, and unlisted keys will not be\npresent. If a key is specified which is not present in the Secret,\nthe volume setup will error unless it is marked optional. Paths must be\nrelative and may not contain the '..' path or start with '..'.\n+optional" - }, - "defaultMode": { - "type": "integer", - "format": "int32", - "title": "Optional: mode bits used to set permissions on created files by default.\nMust be an octal value between 0000 and 0777 or a decimal value between 0\nand 511. YAML accepts both octal and decimal values, JSON requires decimal\nvalues for mode bits. Defaults to 0644. Directories within the path are not\naffected by this setting. This might be in conflict with other options that\naffect the file mode, like fsGroup, and the result can be other mode bits\nset. +optional" - }, - "optional": { - "type": "boolean", - "title": "Specify whether the Secret or its keys must be defined\n+optional" - } - }, - "description": "Adapts a Secret into a volume.\nThe contents of the target Secret's Data field will be presented in a volume\nas files using the keys in the Data field as the file names.\nSecret volumes support ownership management and SELinux relabeling." - }, - "v1alpha1SecurityContext": { - "type": "object", - "properties": { - "privileged": { - "type": "boolean", - "title": "Capabilities capabilities = 1;" - }, - "runAsUser": { - "type": "string", - "format": "int64", - "title": "SELinuxOptions seLinuxOptions = 3;\nWindowsSecurityContextOptions WindowsOptions = 4;" - } - }, - "title": "SecretKeySelector selects a key of a Secret.\n+structType=atomic" - }, - "v1alpha1Service": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1ServiceSpec", - "description": "It describes the attributes that a user creates on a service." - }, - "status": { - "$ref": "#/definitions/v1alpha1ServiceStatus" - } - } - }, - "v1alpha1ServiceAccount": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - } - } - }, - "v1alpha1ServicePort": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of this port within the service. This must be a DNS_LABEL." - }, - "protocol": { - "type": "string", - "description": "Protocol is IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\"." - }, - "appProtocol": { - "type": "string", - "description": "AppProtocol is the application protocol for this port." - }, - "port": { - "type": "integer", - "format": "int32", - "description": "Port will be exposed by this service." - }, - "targetPort": { - "type": "string", - "description": "TargetPort is the number or name of the port to access on the pods targeted\nby the service." - }, - "nodePort": { - "type": "integer", - "format": "int32", - "description": "NodePort is the port on each node on which this service is exposed when\ntype is NodePort or LoadBalancer." - } - } - }, - "v1alpha1ServiceSpec": { - "type": "object", - "properties": { - "ports": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1ServicePort" - }, - "description": "Ports is the list of ports that are exposed by this service." - }, - "selector": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Selector is to route service traffic to pods with label keys and values\nmatching this selector." - }, - "clusterIP": { - "type": "string", - "description": "ClusterIP is the IP address of the service and is usually assigned\nrandomly." - }, - "clusterIPs": { - "type": "array", - "items": { - "type": "string" - }, - "title": "ClusterIPs is a list of IP addresses assigned to this service, and are\nusually assigned randomly.\nThis field came out since kubernetes version 1.20.\nTODO: Make it compatible\nMore info:\nhttps://v1-20.docs.kubernetes.io/zh/docs/concepts/services-networking/dual-stack/\nhttps://v1-19.docs.kubernetes.io/zh/docs/concepts/services-networking/dual-stack/" - }, - "type": { - "$ref": "#/definitions/v1alpha1ServiceType", - "title": "ServiceType string describes ingress methods for a service" - }, - "externalIPs": { - "type": "array", - "items": { - "type": "string" - }, - "description": "ExternalIPs is a list of IP addresses for which nodes in the cluster\nwill also accept traffic for this service." - }, - "sessionAffinity": { - "type": "string", - "description": "SessionAffinity supports \"ClientIP\" and \"None\". Used to maintain session\naffinity." - }, - "loadBalancerIP": { - "type": "string", - "description": "LoadBalancerIP only applies to Service Type: LoadBalancer." - }, - "IPFamilies": { - "type": "array", - "items": { - "type": "string" - }, - "title": "IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this\nservice, and is gated by the \"IPv6DualStack\" feature gate.\nThis field has changed from ipFamily (string) to ipFamilies (array) since\nkubernetes version 1.20.\nTODO: Make it compatible\nMore info:\nhttps://v1-20.docs.kubernetes.io/zh/docs/concepts/services-networking/dual-stack/\nhttps://v1-19.docs.kubernetes.io/zh/docs/concepts/services-networking/dual-stack/" - } - }, - "description": "ServiceSpec describes the attributes that a user creates on a service." - }, - "v1alpha1ServiceStatus": { - "type": "object", - "properties": { - "loadBalancer": { - "$ref": "#/definitions/apicorev1alpha1LoadBalancerStatus", - "description": "LoadBalancer contains the current status of the load-balancer,\nif one is present." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "title": "Current service state" - } - }, - "description": "ServiceStatus represents the current status of a service." - }, - "v1alpha1ServiceType": { - "type": "string", - "enum": [ - "SERVICE_TYPE_UNSPECIFIED", - "ClusterIP", - "NodePort", - "LoadBalancer", - "ExternalName" - ], - "default": "SERVICE_TYPE_UNSPECIFIED", - "description": "- SERVICE_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - ClusterIP: ClusterIP means a service will only be accessible inside the cluster, via\nthe cluster IP.\n - NodePort: NodePort means a service will be exposed on one port of every node, in\naddition to 'ClusterIP' type.\n - LoadBalancer: LoadBalancer means a service will be exposed via an external load balancer\n(if the cloud provider supports it), in addition to 'NodePort' type.\n - ExternalName: ExternalName means a service consists of only a reference to an external\nname that kubedns or equivalent will return as a CNAME record, with no\nexposing or proxying of any pods involved.", - "title": "ServiceType string describes ingress methods for a service" - }, - "v1alpha1SnapStoreConfig": { - "type": "object", - "properties": { - "provider": { - "$ref": "#/definitions/SnapStoreConfigSnapStoreProvider", - "description": "provider indicated the cloud provider." - }, - "container": { - "type": "string", - "description": "container holds the name of bucket or container to which snapshot will be stored." - }, - "prefix": { - "type": "string", - "description": "prefix holds the prefix or directory under StorageContainer under which snapshot will be stored." - }, - "s3Config": { - "$ref": "#/definitions/v1alpha1S3Config" - }, - "tempDir": { - "type": "string", - "title": "temp_dir Directory" - } - } - }, - "v1alpha1Snapshot": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "lastModified": { - "type": "string", - "format": "int64" - }, - "key": { - "type": "string" - }, - "size": { - "type": "string", - "format": "int64" - }, - "externalUrl": { - "type": "string" - } - } - }, - "v1alpha1SnapshotterConfig": { - "type": "object", - "properties": { - "fullSnapshotSchedule": { - "type": "string", - "title": "full_snapshot_schedule schedule for snapshots" - }, - "deltaSnapshotPeriod": { - "type": "string", - "format": "int64", - "description": "delta_snapshot_period Period after which delta snapshot will be persisted. If this value is set to be lesser\nthan 1, delta snapshotting will be disabled." - }, - "deltaSnapshotMemoryLimit": { - "type": "integer", - "format": "int64", - "title": "delta_snapshot_memory_limit memory limit after which delta snapshots will be taken" - }, - "garbageCollectionPeriod": { - "type": "string", - "format": "int64", - "title": "garbage_collection_period Period for garbage collecting old backups" - }, - "garbageCollectionPolicy": { - "$ref": "#/definitions/SnapshotterConfigGarbageCollectingPolicy" - }, - "maxBackups": { - "type": "integer", - "format": "int64", - "title": "max_backups maximum number of previous backups to keep" - } - } - }, - "v1alpha1StartDeploymentResponse": { - "type": "object", - "properties": { - "deployment": { - "$ref": "#/definitions/v1alpha1Deployment", - "description": "The new state of the deployment after starting." - } - }, - "description": "StartDeploymentResponse returns the deployment after being started." - }, - "v1alpha1StartStatefulSetResponse": { - "type": "object", - "properties": { - "statefulSet": { - "$ref": "#/definitions/v1alpha1StatefulSet", - "description": "The new state of the statefulset after starting." - } - }, - "description": "StartStatefulSetResponse returns the statefulset after being started." - }, - "v1alpha1StatefulSet": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1StatefulSetSpec", - "description": "Spec defines the desired identities of pods in this set." - }, - "status": { - "$ref": "#/definitions/v1alpha1StatefulSetStatus", - "description": "Status is the current status of Pods in this StatefulSet. This data\nmay be out of date by some window of time." - }, - "revision": { - "type": "string", - "format": "int64", - "description": "Revision indicates the revision of the state represented by Data." - } - }, - "description": "StatefulSet represents a set of pods with consistent identities.\nIdentities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\n\nThe StatefulSet guarantees that a given network identity will always\nmap to the same storage identity." - }, - "v1alpha1StatefulSetSpec": { - "type": "object", - "properties": { - "replicas": { - "type": "integer", - "format": "int32", - "description": "replicas is the desired number of replicas of the given Template.\nThese are replicas in the sense that they are instantiations of the\nsame Template, but individual replicas also have a consistent identity.\nIf unspecified, defaults to 1." - }, - "podManagementPolicy": { - "type": "string", - "description": "podManagementPolicy controls how pods are created during initial scale up,\nwhen replacing pods on nodes, or when scaling down. The default policy is\n`OrderedReady`, where pods are created in increasing order (pod-0, then\npod-1, etc) and the controller will wait until each pod is ready before\ncontinuing. When scaling down, the pods are removed in the opposite order.\nThe alternative policy is `Parallel` which will create pods in parallel\nto match the desired scale without waiting, and on scale down will delete\nall pods at once." - }, - "revisionHistoryLimit": { - "type": "integer", - "format": "int32", - "description": "revisionHistoryLimit is the maximum number of revisions that will\nbe maintained in the StatefulSet's revision history. The revision history\nconsists of all revisions not represented by a currently applied\nStatefulSetSpec version. The default value is 10." - }, - "selector": { - "$ref": "#/definitions/typesLabelSelector", - "description": "selector is a label query over pods that should match the replica count.\nIt must match the pod template's labels." - }, - "serviceName": { - "type": "string", - "description": "serviceName is the name of the service that governs this StatefulSet.\nThis service must exist before the StatefulSet, and is responsible for\nthe network identity of the set. Pods get DNS/hostnames that follow the\npattern: pod-specific-string.serviceName.default.svc.cluster.local\nwhere \"pod-specific-string\" is managed by the StatefulSet controller." - }, - "template": { - "$ref": "#/definitions/v1alpha1PodTemplateSpec", - "description": "template is the object that describes the pod that will be created if\ninsufficient replicas are detected. Each pod stamped out by the StatefulSet\nwill fulfill this Template, but have a unique identity from the rest\nof the StatefulSet." - }, - "updateStrategy": { - "$ref": "#/definitions/v1alpha1StatefulSetUpdateStrategy", - "description": "updateStrategy indicates the StatefulSetUpdateStrategy that will be\nemployed to update Pods in the StatefulSet when a revision is made to\nTemplate." - }, - "volumeClaimTemplates": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaim" - }, - "description": "volumeClaimTemplates is a list of claims that pods are allowed to\nreference. The StatefulSet controller is responsible for mapping network\nidentities to claims in a way that maintains the identity of a pod. Every\nclaim in this list must have at least one matching (by name) volumeMount in\none container in the template. A claim in this list takes precedence over\nany volumes in the template, with the same name." - } - }, - "description": "A StatefulSetSpec is the specification of a StatefulSet." - }, - "v1alpha1StatefulSetStatus": { - "type": "object", - "properties": { - "replicas": { - "type": "integer", - "format": "int32", - "description": "replicas is the number of Pods created by the StatefulSet controller." - }, - "readyReplicas": { - "type": "integer", - "format": "int32", - "description": "readyReplicas is the number of Pods created by the StatefulSet controller\nthat have a Ready Condition." - }, - "state": { - "$ref": "#/definitions/typesWorkloadState", - "title": "WorkloadState describes the state of statefulsets" - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/typesCondition" - }, - "description": "Current condition of StatefulSet." - } - }, - "description": "StatefulSetStatus represents the current state of a StatefulSet." - }, - "v1alpha1StatefulSetUpdateStrategy": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type indicates the type of the StatefulSetUpdateStrategy." - } - }, - "title": "add StatefulSet to make be not defined in common.proto" - }, - "v1alpha1StopDeploymentResponse": { - "type": "object", - "properties": { - "deployment": { - "$ref": "#/definitions/v1alpha1Deployment", - "description": "The new state of the deployment after stopping." - } - }, - "description": "StopDeploymentResponse returns the deployment after being stopped." - }, - "v1alpha1StopStatefulSetResponse": { - "type": "object", - "properties": { - "statefulSet": { - "$ref": "#/definitions/v1alpha1StatefulSet", - "description": "The new state of the statefulset after stopping." - } - }, - "description": "StopStatefulSetResponse returns the statefulset after being stopped." - }, - "v1alpha1StorageClass": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "provisioner": { - "type": "string", - "description": "Provisioner indicates the type of the provisioner." - }, - "reclaimPolicy": { - "$ref": "#/definitions/StorageClassReclaimPolicy", - "title": "persistentVolumeReclaimPolicy defines what happens to a persistent volume when released from its claim.\nValid options are Retain (default for manually created PersistentVolumes), Delete (default\nfor dynamically provisioned PersistentVolumes), and Recycle (deprecated).\nRecycle must be supported by the volume plugin underlying this PersistentVolume.\nMore info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\n+optional" - }, - "storageClassName": { - "type": "string", - "title": "storageClassName is the name of StorageClass to which this persistent volume belongs. Empty value\nmeans that this volume does not belong to any StorageClass.\n+optional" - }, - "volumeBindingMode": { - "$ref": "#/definitions/StorageClassVolumeBindingMode", - "title": "VolumeBindingMode indicates how PersistentVolumeClaims should be\nprovisioned and bound. When unset, VolumeBindingImmediate is used.\nThis field is only honored by servers that enable the VolumeScheduling feature.\n+optional" - }, - "mountOptions": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Dynamically provisioned PersistentVolumes of this storage class are\ncreated with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated -\nmount of the PVs will simply fail if one is invalid.\n+optional" - }, - "parameters": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "Parameters holds the parameters for the provisioner that should\ncreate volumes of this storage class.\n+optional" - }, - "allowVolumeExpansion": { - "type": "boolean", - "title": "AllowVolumeExpansion shows whether the storage class allow volume expand\n+optional" - } - }, - "description": "StorageClass describes the parameters for a class of storage for\nwhich PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class\naccording to etcd is in ObjectMeta.Name." - }, - "v1alpha1Subject": { - "type": "object", - "properties": { - "kind": { - "type": "string", - "description": "Kind of object being referenced. Values defined by this API group are\n\"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not\nrecognized the kind value, the Authorizer should report an error." - }, - "APIGroup": { - "type": "string", - "description": "APIGroup holds the API group of the referenced subject.\nDefaults to \"\" for ServiceAccount subjects.\nDefaults to \"rbac.authorization.k8s.io\" for User and Group subjects." - }, - "name": { - "type": "string", - "description": "Name of the object being referenced." - }, - "namespace": { - "type": "string", - "title": "Namespace of the referenced object. If the object kind is non-namespace,\nsuch as \"User\" or \"Group\", and this value is not empty the Authorizer\nshould report an error. +optional" - } - } - }, - "v1alpha1Summary": { - "type": "object", - "properties": { - "state": { - "$ref": "#/definitions/v1alpha1ReleasePhase" - }, - "transitioning": { - "type": "boolean" - }, - "error": { - "type": "boolean" - } - } - }, - "v1alpha1TCPSocketAction": { - "type": "object", - "properties": { - "port": { - "type": "integer", - "format": "int32", - "description": "Number or name of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME." - }, - "host": { - "type": "string", - "title": "Optional: Host name to connect to, defaults to the pod IP.\n+optional" - } - }, - "description": "TCPSocketAction describes an action based on opening a socket." - }, - "v1alpha1Tag": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the tag." - }, - "pushTime": { - "type": "string", - "format": "int64", - "description": "Tag push time." - } - }, - "description": "Tag of an image." - }, - "v1alpha1Taint": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "Required. The taint key to be applied to a node." - }, - "value": { - "type": "string", - "description": "The taint value corresponding to the taint key." - }, - "effect": { - "$ref": "#/definitions/v1alpha1TaintEffect", - "description": "Valid effects are NoSchedule, PreferNoSchedule, and NoExecute." - } - } - }, - "v1alpha1TaintEffect": { - "type": "string", - "enum": [ - "TAINT_EFFECT_UNSPECIFIED", - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ], - "default": "TAINT_EFFECT_UNSPECIFIED", - "description": "Valid effects are NoSchedule, PreferNoSchedule, and NoExecute.\n\n - TAINT_EFFECT_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - NoSchedule: NoSchedule tries to avoid scheduling pods to nodes where they can't\ntolerate taints.\n - PreferNoSchedule: This is not mandatory tries to avoid scheduling pods to nodes.\n - NoExecute: NoExecute is not assign pod to or evicted pod from the node." - }, - "v1alpha1Toleration": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key to project." - }, - "operator": { - "type": "string", - "description": "Represents a key's relationship to a set of values." - }, - "value": { - "type": "string", - "description": "An array of string values." - }, - "effect": { - "type": "string", - "description": "Valid effects are NoSchedule, PreferNoSchedule, and NoExecute." - }, - "tolerationSeconds": { - "type": "string", - "format": "int64" - } - }, - "description": "Taint tolerations to static pods,\nso they are not evicted when there are node problems." - }, - "v1alpha1TypedObjectReference": { - "type": "object", - "properties": { - "apiGroup": { - "type": "string", - "title": "APIGroup is the group for the resource being referenced.\nIf APIGroup is not specified, the specified Kind must be in the core API group.\nFor any other third-party types, APIGroup is required.\n+optional" - }, - "kind": { - "type": "string", - "title": "Kind is the type of resource being referenced" - }, - "name": { - "type": "string", - "title": "Name is the name of resource being referenced" - }, - "namespace": { - "type": "string", - "title": "Namespace is the namespace of resource being referenced\nNote that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details.\n(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.\n+featureGate=CrossNamespaceVolumeDataSource\n+optional" - } - } - }, - "v1alpha1UnBindClusterFromWorkspaceResponse": { - "type": "object" - }, - "v1alpha1UnbindNodeToNamespaceResponse": { - "type": "object", - "title": "UnbindNodeToNamespaceResponse is unbind result" - }, - "v1alpha1UnbindResourceFromWorkspaceResponse": { - "type": "object" - }, - "v1alpha1UpdateClusterCustomResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateClusterCustomResourceResponse represents response of updating one\nCustomResource of cluster scope" - }, - "v1alpha1UpdateClusterCustomResourceStatusResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateClusterCustomResourceStatusResponse represents response of updating the status of a CustomResource of cluster scope" - }, - "v1alpha1UpdateClusterRoleResponse": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - }, - "title": "UpdateClusterRoleRequest the response of update clusterrole" - }, - "v1alpha1UpdateConfigMapResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the ConfigMap YAML details" - } - } - }, - "v1alpha1UpdateCronHorizontalPodAutoscalerResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the hpa YAML details" - } - } - }, - "v1alpha1UpdateCustomResourceDefinitionResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the customResourceDefinition YAML details" - } - }, - "title": "UpdateCustomResourceDefinitionResponse represents response of updating\na createCustomResourceDefinition" - }, - "v1alpha1UpdateCustomResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateCustomResourceResponse represents response of updating one\nCustomResource of namespaced scope" - }, - "v1alpha1UpdateCustomResourceStatusResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data field is the CustomResource YAML details." - } - }, - "title": "UpdateCustomResourceStatusResponse returns the response of updating the status of a\nCustomResource of namespaced scope" - }, - "v1alpha1UpdateHelmReleaseResponse": { - "type": "object", - "properties": { - "cluster": { - "type": "string", - "description": "Cluster represents which cluster the helmrelease belongs to." - }, - "namespace": { - "type": "string", - "description": "Namespace represents which namespace the helmrelease belongs to." - }, - "releaseName": { - "type": "string" - } - } - }, - "v1alpha1UpdateHorizontalPodAutoscalerResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the hpa YAML details" - } - } - }, - "v1alpha1UpdateIngressResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the ingress YAML details." - } - }, - "title": "UpdateIngressRequest the response of update cluster ingresses" - }, - "v1alpha1UpdateLimitRangeResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the LimitRange YAML details." - } - }, - "description": "UpdateLimitRangeResponse returns the created LimitRange data information." - }, - "v1alpha1UpdateMode": { - "type": "string", - "enum": [ - "UPDATE_MODE_UNSPECIFIED", - "Off", - "Initial", - "Recreate", - "Auto" - ], - "default": "UPDATE_MODE_UNSPECIFIED", - "description": "UpdateMode controls when autoscaler applies changes to the pod resoures.\n\n - UPDATE_MODE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - Off: UpdateModeOff means that autoscaler never changes Pod resources.\nThe recommender still sets the recommended resources in the\nVerticalPodAutoscaler object. This can be used for a \"dry run\".\n - Initial: UpdateModeInitial means that autoscaler only assigns resources on pod\ncreation and does not change them during the lifetime of the pod.\n - Recreate: UpdateModeRecreate means that autoscaler assigns resources on pod\ncreation and additionally can update them during the lifetime of the\npod by deleting and recreating the pod.\n - Auto: UpdateModeAuto means that autoscaler assigns resources on pod creation\nand additionally can update them during the lifetime of the pod,\nusing any available update method. Currently this is equivalent to\nRecreate, which is the only available update method." - }, - "v1alpha1UpdateNamespaceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - }, - "description": "Update Namespace data." - }, - "v1alpha1UpdateNetworkPolicyResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the networkpolicy YAML details." - } - }, - "title": "UpdateNetworkPolicyResponse the response of update cluster networkpolicies" - }, - "v1alpha1UpdateNodeAnnotationsResponse": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Annotations returned." - } - } - }, - "v1alpha1UpdateNodeGPUModeResponse": { - "type": "object", - "properties": { - "mode": { - "$ref": "#/definitions/v1alpha1GPUModel" - } - } - }, - "v1alpha1UpdateNodeResponse": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - }, - "description": "UpdateNodeResponse return's a node's json." - }, - "v1alpha1UpdatePersistentVolumeClaimAnnotationsResponse": { - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "labels represents the Annotations of pvc" - } - }, - "title": "UpdatePersistentVolumeClaimLabelsResponse represents the response of put PVC annotations Response" - }, - "v1alpha1UpdatePersistentVolumeClaimLabelsResponse": { - "type": "object", - "properties": { - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "labels represents the labels of pvc" - } - }, - "title": "UpdateNodeLabelsResponse represents the response of put pvc's labels" - }, - "v1alpha1UpdatePersistentVolumeClaimResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data represents the data of PVC JSON" - } - } - }, - "v1alpha1UpdatePersistentVolumeResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the PersistentVolume YAML details." - } - }, - "description": "UpdatePersistentVolumeResponse returns the created PersistentVolume data information." - }, - "v1alpha1UpdateReplicaSetResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the ReplicaSet YAML details." - } - }, - "description": "UpdateReplicaSetResponse returns the created ReplicaSet data information." - }, - "v1alpha1UpdateResourceQuotaResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "Data is the ResourceQuota YAML details." - } - }, - "description": "UpdateResourceQuotaResponse returns the created ResourceQuota data information." - }, - "v1alpha1UpdateRoleResponse": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - }, - "title": "UpdateRoleResponse the response of update role" - }, - "v1alpha1UpdateSecretResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data field is the Secret YAML details" - } - }, - "description": "It returns updated secret information." - }, - "v1alpha1UpdateServiceAccountResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the StorageClass YAML details" - } - }, - "description": "UpdateServiceAccount represents the response of delete sa." - }, - "v1alpha1UpdateServiceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "Data is the Service YAML details" - } - }, - "description": "It returns the Updated Service data information." - }, - "v1alpha1UpdateStorageClassResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "The data is the StorageClass YAML details" - } - }, - "title": "UpdateStorageClassResponse represents the response of delete storage class" - }, - "v1alpha1UpdateVerticalPodAutoscalerResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The data is the vpa YAML details." - } - }, - "description": "UpdateVerticalPodAutoscalerResponse returns the updated json data." - }, - "v1alpha1UpdateVolumeSnapshotResponse": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data represents the data of volume snapshot JSON" - } - }, - "description": "UpdateVolumeSnapshotResponse represents the response of update volume snapshot." - }, - "v1alpha1User": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id is the unique identification of the user." - }, - "name": { - "type": "string", - "description": "the name of the user." - } - } - }, - "v1alpha1VGPUNodeStats": { - "type": "object", - "properties": { - "physicalGpuNumber": { - "type": "integer", - "format": "int32", - "title": "Number of physical Gpus" - }, - "totalVirtualGpuNumber": { - "type": "integer", - "format": "int32", - "title": "Number of virtual Gpus" - }, - "allocatedVirtualGpuNumber": { - "type": "integer", - "format": "int32", - "title": "Number of allocated virtual Gpus" - }, - "allocatedComputePower": { - "type": "string", - "format": "int64" - }, - "totalComputePower": { - "type": "string", - "format": "int64", - "title": "total compute power" - }, - "totalGpuMemory": { - "type": "string", - "format": "int64", - "title": "Number of gpu memory" - }, - "allocatedGpuMemory": { - "type": "string", - "format": "int64", - "title": "Number of allocated gpu memory" - } - } - }, - "v1alpha1ValidateClusterResponse": { - "type": "object", - "properties": { - "dceComponents": { - "type": "object", - "additionalProperties": { - "type": "boolean" - }, - "description": "Components is to show if components exist in target cluster, e.g. kpanda-system namespace, insight-system namespace, and mspider mesh." - } - }, - "description": "ValidateClusterResponse returns the result of residuals existence." - }, - "v1alpha1ValidateHelmRepoResponse": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "description": "Successfully connected to the repo." - }, - "error": { - "type": "string", - "description": "If connecting to the repo failed, return the reason." - } - }, - "title": "ValidateHelmRepoResponse returns the result of connecting to a helm repo" - }, - "v1alpha1ValidateKubeConfigRequest": { - "type": "object", - "properties": { - "kubeConfigString": { - "type": "string", - "description": "KubeConfig of the cluster." - } - } - }, - "v1alpha1ValidateKubeConfigResponse": { - "type": "object", - "properties": { - "validateResult": { - "type": "boolean" - }, - "errMsg": { - "type": "string", - "description": "err_msg if validate_result is false , err_msg will has no-empty value." - }, - "kubeconfigExpireTime": { - "type": "string", - "format": "int64" - } - } - }, - "v1alpha1VerificationMethod": { - "type": "string", - "enum": [ - "VERIFICATION_METHOD_UNSPECIFIED", - "None", - "BasicAuth" - ], - "default": "VERIFICATION_METHOD_UNSPECIFIED", - "description": "- VERIFICATION_METHOD_UNSPECIFIED: The repository verification method is unspecified.\n - None: The repository is public and does not require authentication.\n - BasicAuth: BasicAuth contains data needed for basic authentication.", - "title": "Repository verification method" - }, - "v1alpha1VerifyEtcdConnectionResponse": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "description": "This field indicates whether or not the verification operation for\nverifying etcd connection successful." - }, - "errMsg": { - "type": "string", - "description": "err_msg if validate_result is false , err_msg will has no-empty value." - } - } - }, - "v1alpha1VerifyImageResponse": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "description": "This field indicates whether or not the verification operation for\nverifying image successful." - } - } - }, - "v1alpha1VerifyRegistryRequest": { - "type": "object", - "properties": { - "registryHost": { - "type": "string", - "description": "The registry host which needs to verify." - }, - "username": { - "type": "string", - "description": "The username of the registry." - }, - "password": { - "type": "string", - "description": "The password of the registry." - } - } - }, - "v1alpha1VerifyRegistryResponse": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "description": "This field indicates whether or not the verification operation for\nverifying registery successful." - } - } - }, - "v1alpha1VerifySnapStoreConfigResponse": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "description": "This field indicates whether or not the verification operation for\nverifying SnapStore successful." - }, - "errMsg": { - "type": "string", - "description": "err_msg if validate_result is false , err_msg will has no-empty value." - } - } - }, - "v1alpha1VerticalPodAutoscaler": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1VerticalPodAutoscalerSpec", - "description": "Specification of the behavior of the autoscaler." - }, - "status": { - "$ref": "#/definitions/v1alpha1VerticalPodAutoscalerStatus", - "description": "Current information about the autoscaler." - } - }, - "description": "VerticalPodAutoscaler is the configuration for a vertical pod autoscaler, which automatically manages pod resources based on historical and real time resource utilization." - }, - "v1alpha1VerticalPodAutoscalerCondition": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1VerticalPodAutoscalerConditionType", - "description": "Type describes the current condition." - }, - "status": { - "$ref": "#/definitions/typesConditionStatus", - "description": "status is the status of the condition (True, False, Unknown)." - }, - "lastTransitionTime": { - "type": "string", - "format": "int64", - "description": "LastTransitionTime is the last time the condition transitioned from one status to another." - }, - "reason": { - "type": "string", - "description": "Reason is the reason for the condition's last transition." - }, - "message": { - "type": "string", - "description": "message is a human-readable explanation containing details about the transition." - } - }, - "description": "VerticalPodAutoscalerCondition describes the state of a VerticalPodAutoscaler at a certain point." - }, - "v1alpha1VerticalPodAutoscalerConditionType": { - "type": "string", - "enum": [ - "VERTICAL_POD_AUTOSCALER_CONDITION_TYPE_UNSPECIFIED", - "RecommendationProvided", - "LowConfidence", - "NoPodsMatched", - "FetchingHistory", - "ConfigDeprecated", - "ConfigUnsupported" - ], - "default": "VERTICAL_POD_AUTOSCALER_CONDITION_TYPE_UNSPECIFIED", - "description": "VerticalPodAutoscalerConditionType is the valid conditions of a VerticalPodAutoscaler.\n\n - VERTICAL_POD_AUTOSCALER_CONDITION_TYPE_UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return.\n - RecommendationProvided: RecommendationProvided indicates whether the VPA recommender was able to calculate a recommendation.\n - LowConfidence: LowConfidence indicates whether the VPA recommender has low confidence in the recommendation for some of containers.\n - NoPodsMatched: NoPodsMatched indicates that label selector used with VPA object didn't match any pods.\n - FetchingHistory: FetchingHistory indicates that VPA recommender is in the process of loading additional history samples.\n - ConfigDeprecated: ConfigDeprecated indicates that this VPA configuration is deprecated and will stop being supported soon.\n - ConfigUnsupported: ConfigUnsupported indicates that this VPA configuration is unsupported and recommendations will not be provided for it." - }, - "v1alpha1VerticalPodAutoscalerRecommenderSelector": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the recommender responsible for generating recommendation for this object." - } - }, - "description": "VerticalPodAutoscalerRecommenderSelector points to a specific Vertical Pod Autoscaler recommender.\nIn the future it might pass parameters to the recommender." - }, - "v1alpha1VerticalPodAutoscalerSpec": { - "type": "object", - "properties": { - "targetRef": { - "$ref": "#/definitions/v1alpha1CrossVersionObjectReference", - "description": "TargetRef points to the controller managing the set of pods for the autoscaler to control - e.g. Deployment, StatefulSet." - }, - "updatePolicy": { - "$ref": "#/definitions/v1alpha1PodUpdatePolicy", - "description": "Describes the rules on how changes are applied to the pods.\nIf not specified, all fields in the `PodUpdatePolicy` are set to their\ndefault values." - }, - "resourcePolicy": { - "$ref": "#/definitions/v1alpha1PodResourcePolicy", - "description": "Controls how the autoscaler computes recommended resources.\nThe resource policy may be used to set constraints on the recommendations\nfor individual containers. If not specified, the autoscaler computes recommended\nresources for all containers in the pod, without additional constraints." - }, - "recommenders": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1VerticalPodAutoscalerRecommenderSelector" - }, - "description": "Recommender responsible for generating recommendation for this object.\nList should be empty (then the default recommender will generate the recommendation) or contain exactly one recommender." - } - }, - "description": "VerticalPodAutoscalerSpec is the specification of the behavior of the autoscaler." - }, - "v1alpha1VerticalPodAutoscalerStatus": { - "type": "object", - "properties": { - "recommendation": { - "$ref": "#/definitions/v1alpha1RecommendedPodResources", - "description": "The most recently computed amount of resources recommended by the\nautoscaler for the controlled pods." - }, - "conditions": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1VerticalPodAutoscalerCondition" - }, - "description": "Conditions is the set of conditions required for this autoscaler to scale its target,\nand indicates whether or not those conditions are met." - } - }, - "description": "VerticalPodAutoscalerStatus describes the runtime state of the autoscaler." - }, - "v1alpha1Volume": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "hostPath": { - "$ref": "#/definitions/v1alpha1HostPathVolumeSource", - "description": "HostPathVolumeSource represents a host path mapped into a pod.\nHost path volumes do not support ownership management or SELinux\nrelabeling." - }, - "emptyDir": { - "$ref": "#/definitions/v1alpha1EmptyDirVolumeSource", - "description": "EmptyDirVolumeSource represents an empty directory for a pod.\nEmpty directory volumes support ownership management and SELinux\nrelabeling." - }, - "secret": { - "$ref": "#/definitions/v1alpha1SecretVolumeSource", - "description": "SecretVolumeSource adapts a Secret into a volume.\nThe contents of the target Secret's Data field will be presented in a\nvolume as files using the keys in the Data field as the file names. Secret\nvolumes support ownership management and SELinux relabeling." - }, - "persistentVolumeClaim": { - "$ref": "#/definitions/v1alpha1PersistentVolumeClaimVolumeSource", - "title": "PersistentVolumeClaimVolumeSource represents a reference to a\nPersistentVolumeClaim in the same namespace" - }, - "downwardAPI": { - "$ref": "#/definitions/v1alpha1DownwardAPIVolumeSource", - "description": "DownwardAPIVolumeSource represents a volume containing downward API info.\nDownward API volumes support ownership management and SELinux relabeling." - }, - "configMap": { - "$ref": "#/definitions/v1alpha1ConfigMapVolumeSource", - "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a\nvolume as files using the keys in the Data field as the file names, unless\nthe items element is populated with specific mappings of keys to paths.\nConfigMap volumes support ownership management and SELinux relabeling." - } - }, - "description": "Volume represents a named volume in a pod that may be accessed by any\ncontainer in the pod." - }, - "v1alpha1VolumeMount": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This must match the Name of a Volume." - }, - "readOnly": { - "type": "boolean", - "title": "Mounted read-only if true, read-write otherwise (false or unspecified).\nDefaults to false.\n+optional" - }, - "mountPath": { - "type": "string", - "description": "Full path to the mount volume path." - }, - "subPath": { - "type": "string", - "title": "Path within the volume from which the container's volume should be mounted.\nDefaults to \"\" (volume's root).\n+optional" - }, - "mountPropagation": { - "type": "string", - "title": "mountPropagation determines how mounts are propagated from the host\nto container and the other way around.\nWhen not set, MountPropagationNone is used.\nThis field is beta in 1.10.\n+optional" - }, - "subPathExpr": { - "type": "string", - "title": "Expanded path within the volume from which the container's volume should be\nmounted. Behaves similarly to SubPath but environment variable references\n$(VAR_NAME) are expanded using the container's environment. Defaults to \"\"\n(volume's root). SubPathExpr and SubPath are mutually exclusive. +optional" - } - }, - "description": "VolumeMount for this container." - }, - "v1alpha1VolumeNodeAffinity": { - "type": "object", - "properties": { - "required": { - "$ref": "#/definitions/v1alpha1NodeSelector", - "description": "Required specifies hard node constraints that must be met." - } - }, - "description": "VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from." - }, - "v1alpha1VolumeSnapshot": { - "type": "object", - "properties": { - "metadata": { - "$ref": "#/definitions/typesObjectMeta", - "description": "Standard object's metadata." - }, - "spec": { - "$ref": "#/definitions/v1alpha1VolumeSnapshotSpec", - "description": "spec defines the desired characteristics of a snapshot requested by a user.\nMore info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots\nRequired." - }, - "status": { - "$ref": "#/definitions/v1alpha1VolumeSnapshotStatus", - "title": "status represents the current information of a snapshot.\nConsumers must verify binding between VolumeSnapshot and\nVolumeSnapshotContent objects is successful (by validating that both\nVolumeSnapshot and VolumeSnapshotContent point at each other) before\nusing this object.\n+optional" - } - } - }, - "v1alpha1VolumeSnapshotSource": { - "type": "object", - "properties": { - "persistentVolumeClaimName": { - "type": "string", - "title": "persistentVolumeClaimName specifies the name of the PersistentVolumeClaim\nobject representing the volume from which a snapshot should be created.\nThis PVC is assumed to be in the same namespace as the VolumeSnapshot\nobject.\nThis field should be set if the snapshot does not exists, and needs to be\ncreated.\nThis field is immutable.\n+optional" - }, - "volumeSnapshotContentName": { - "type": "string", - "title": "volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent\nobject representing an existing volume snapshot.\nThis field should be set if the snapshot already exists and only needs a representation in Kubernetes.\nThis field is immutable.\n+optional" - } - } - }, - "v1alpha1VolumeSnapshotSpec": { - "type": "object", - "properties": { - "source": { - "$ref": "#/definitions/v1alpha1VolumeSnapshotSource", - "description": "source specifies where a snapshot will be created from.\nThis field is immutable after creation.\nRequired." - }, - "volumeSnapshotClassName": { - "type": "string", - "title": "VolumeSnapshotClassName is the name of the VolumeSnapshotClass\nrequested by the VolumeSnapshot.\nVolumeSnapshotClassName may be left nil to indicate that the default\nSnapshotClass should be used.\nA given cluster may have multiple default Volume SnapshotClasses: one\ndefault per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass,\nVolumeSnapshotSource will be checked to figure out what the associated\nCSI Driver is, and the default VolumeSnapshotClass associated with that\nCSI Driver will be used. If more than one VolumeSnapshotClass exist for\na given CSI Driver and more than one have been marked as default,\nCreateSnapshot will fail and generate an event.\nEmpty string is not allowed for this field.\n+optional" - } - } - }, - "v1alpha1VolumeSnapshotStatus": { - "type": "object", - "properties": { - "creationTime": { - "type": "string", - "format": "int64", - "title": "creationTime is the timestamp when the point-in-time snapshot is taken\nby the underlying storage system.\nIn dynamic snapshot creation case, this field will be filled in by the\nsnapshot controller with the \"creation_time\" value returned from CSI\n\"CreateSnapshot\" gRPC call.\nFor a pre-existing snapshot, this field will be filled with the \"creation_time\"\nvalue returned from the CSI \"ListSnapshots\" gRPC call if the driver supports it.\nIf not specified, it may indicate that the creation time of the snapshot is unknown.\n+optional" - }, - "readyToUse": { - "type": "boolean", - "title": "readyToUse indicates if the snapshot is ready to be used to restore a volume.\nIn dynamic snapshot creation case, this field will be filled in by the\nsnapshot controller with the \"ready_to_use\" value returned from CSI\n\"CreateSnapshot\" gRPC call.\nFor a pre-existing snapshot, this field will be filled with the \"ready_to_use\"\nvalue returned from the CSI \"ListSnapshots\" gRPC call if the driver supports it,\notherwise, this field will be set to \"True\".\nIf not specified, it means the readiness of a snapshot is unknown.\n+optional" - }, - "restoreSize": { - "type": "string", - "title": "restoreSize represents the minimum size of volume required to create a volume\nfrom this snapshot.\nIn dynamic snapshot creation case, this field will be filled in by the\nsnapshot controller with the \"size_bytes\" value returned from CSI\n\"CreateSnapshot\" gRPC call.\nFor a pre-existing snapshot, this field will be filled with the \"size_bytes\"\nvalue returned from the CSI \"ListSnapshots\" gRPC call if the driver supports it.\nWhen restoring a volume from this snapshot, the size of the volume MUST NOT\nbe smaller than the restoreSize if it is specified, otherwise the restoration will fail.\nIf not specified, it indicates that the size is unknown.\n+optional" - } - }, - "description": "VolumeSnapshotStatus is the status of the VolumeSnapshot\nNote that CreationTime, RestoreSize, ReadyToUse, and Error are in both\nVolumeSnapshotStatus and VolumeSnapshotContentStatus. Fields in VolumeSnapshotStatus\nare updated based on fields in VolumeSnapshotContentStatus. They are eventual\nconsistency. These fields are duplicate in both objects due to the following reasons:\n - Fields in VolumeSnapshotContentStatus can be used for filtering when importing a\n volumesnapshot.\n - VolumsnapshotStatus is used by end users because they cannot see VolumeSnapshotContent.\n - CSI snapshotter sidecar is light weight as it only watches VolumeSnapshotContent\n object, not VolumeSnapshot object." - }, - "v1alpha1WeightedPodAffinityTerm": { - "type": "object", - "properties": { - "weight": { - "type": "integer", - "format": "int32", - "description": "weight associated with matching the corresponding podAffinityTerm,\nin the range 1-100." - }, - "podAffinityTerm": { - "$ref": "#/definitions/v1alpha1PodAffinityTerm", - "description": "Required. A pod affinity term, associated with the corresponding weight." - } - }, - "title": "The weights of all of the matched WeightedPodAffinityTerm fields are added\nper-node to find the most preferred node(s)" - }, - "v1alpha1WorkloadJSON": { - "type": "object", - "properties": { - "data": { - "type": "string", - "title": "data The data field is the Workload YAML details" - } - }, - "title": "WorkloadJSON messages of workload YAML details" - }, - "v1alpha1WorkloadKind": { - "type": "string", - "enum": [ - "deployments", - "statefulsets", - "daemonsets", - "jobs", - "cronjobs", - "pods", - "replicasets" - ], - "default": "deployments", - "description": "- deployments: A Deployment provides declarative updates for Pods and ReplicaSets.\n - statefulsets: StatefulSet is the workload API object used to manage stateful\napplications.\n - daemonsets: A DaemonSet ensures that all (or some) Nodes run a copy of a Pod.\n - jobs: Jobs based on a common template. You can use this approach to process\nbatches of work in parallel.\n - cronjobs: CronJob object is like one line of a crontab (cron table) file. It runs a\njob periodically on a given schedule, written in Cron format.", - "title": "workloadKind represents the kpanda's workload types of inclusion" - }, - "v1alpha1WorkspaceInfo": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32" - }, - "alias": { - "type": "string" - } - } - }, - "v1alpha1requestStatus": { - "type": "string", - "enum": [ - "STATUS_UNSPECIFIED", - "SUCCESS", - "FAIL" - ], - "default": "STATUS_UNSPECIFIED", - "title": "The request of status" - }, - "v1alpha1samplePair": { - "type": "object", - "properties": { - "timestamp": { - "type": "string", - "format": "int64", - "title": "Timestamp of the query" - }, - "value": { - "type": "string", - "title": "Value of the query" - } - }, - "title": "The sample pair" - } - } -} diff --git a/site/openapi/virtnest/index.html b/site/openapi/virtnest/index.html deleted file mode 100644 index e8387c1..0000000 --- a/site/openapi/virtnest/index.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - -云主机 OpenAPI 文档 - 豐收二號檔案站 - - - - - - - - - - - - - -
-
-
- - -
-
-
-
- -
-
-
- -
-
-
-
-
-

-
-
- -
- -
-
- -
-
-
-
-
- - - - - \ No newline at end of file diff --git a/site/openapi/virtnest/swagger-b0b111af.html b/site/openapi/virtnest/swagger-b0b111af.html deleted file mode 100644 index f39ce47..0000000 --- a/site/openapi/virtnest/swagger-b0b111af.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - Swagger UI - - - - - - -
- - - - - - \ No newline at end of file diff --git a/site/openapi/virtnest/v0.13.0.json b/site/openapi/virtnest/v0.13.0.json deleted file mode 100644 index d6aa7aa..0000000 --- a/site/openapi/virtnest/v0.13.0.json +++ /dev/null @@ -1,3971 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "云主机", - "version": "v0.13.0" - }, - "tags": [ - { - "name": "Cluster" - }, - { - "name": "FeatureGate" - }, - { - "name": "Image" - }, - { - "name": "Role" - }, - { - "name": "VM" - }, - { - "name": "VMTemplate" - } - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "paths": { - "/apis/virtnest.io/v1alpha1/clusters": { - "get": { - "operationId": "Cluster_ListClusters", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clusterListClustersResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/custom-resource": { - "post": { - "operationId": "VM_CreateCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmCreateCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces": { - "get": { - "operationId": "Cluster_ListClusterNamespaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clusterListClusterNamespacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/secrets": { - "get": { - "operationId": "Image_ListSecrets", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/imageListSecretsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/secrets/{name}/check": { - "get": { - "operationId": "Image_CheckSecret", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/imageCheckSecretResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vm": { - "post": { - "operationId": "VM_CreateVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmCreateVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "aliasName": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "imageSource": { - "$ref": "#/definitions/v1alpha1vmImageSource" - }, - "imageUrl": { - "type": "string" - }, - "disks": { - "$ref": "#/definitions/v1alpha1vmVMDisks" - }, - "cpu": { - "type": "integer", - "format": "int64" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "单位:字节" - }, - "ssh": { - "$ref": "#/definitions/vmSSH" - }, - "osFamily": { - "type": "string" - }, - "osVersion": { - "type": "string" - }, - "secret": { - "type": "string" - }, - "network": { - "$ref": "#/definitions/vmMultusNetwork" - }, - "createPowerOn": { - "type": "boolean" - }, - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmGPU" - } - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vm-with-vmtemplate/{vmtemplateName}": { - "post": { - "operationId": "VM_CreateVMWithVMTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmCreateVMWithVMTemplateResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "vmtemplateName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "aliasName": { - "type": "string" - }, - "cpu": { - "type": "integer", - "format": "int64" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "单位:字节" - }, - "disks": { - "$ref": "#/definitions/v1alpha1vmVMDisks" - }, - "ssh": { - "$ref": "#/definitions/vmSSH" - }, - "imageSource": { - "$ref": "#/definitions/v1alpha1vmImageSource" - }, - "imageUrl": { - "type": "string" - }, - "osFamily": { - "type": "string" - }, - "osVersion": { - "type": "string" - }, - "secret": { - "type": "string" - }, - "network": { - "$ref": "#/definitions/vmMultusNetwork" - }, - "createPowerOn": { - "type": "boolean" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}": { - "get": { - "operationId": "VM_GetVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmGetVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - }, - "delete": { - "operationId": "VM_DeleteVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmDeleteVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - }, - "put": { - "operationId": "VM_UpdateVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmUpdateVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "aliasName": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "cpu": { - "type": "integer", - "format": "int64" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "单位:字节" - }, - "disks": { - "$ref": "#/definitions/v1alpha1vmVMDisks" - }, - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmGPU" - } - }, - "network": { - "$ref": "#/definitions/vmMultusNetwork" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/clone": { - "post": { - "operationId": "VM_CloneVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmCloneVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "cloneName": { - "type": "string" - }, - "aliasName": { - "type": "string" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/cold-migration": { - "post": { - "operationId": "VM_ColdMigration", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmColdMigrationResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "targetNode": { - "type": "string", - "title": "空值表示随机选择节点" - }, - "disks": { - "$ref": "#/definitions/v1alpha1vmVMDisks" - }, - "powerOn": { - "type": "boolean" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/custom-resource": { - "get": { - "operationId": "VM_GetCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1vmGetCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - }, - "put": { - "operationId": "VM_UpdateCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1vmUpdateCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/disk-volume": { - "post": { - "operationId": "VM_AddDiskVolumeToVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmAddDiskVolumeToVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "diskVolumes": { - "$ref": "#/definitions/v1alpha1vmDiskVolume" - }, - "hotplug": { - "type": "boolean" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/disk-volume/{diskName}": { - "delete": { - "operationId": "VM_RemoveVMDiskVolume", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmRemoveVMDiskVolumeResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "diskName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/disk-volume/{diskName}/expand-capacity": { - "put": { - "operationId": "VM_ExpandVMDiskCapacity", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmExpandVMDiskCapacityResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "diskName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "capacity": { - "type": "string", - "format": "int64" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/events": { - "get": { - "operationId": "VM_ListVMEvents", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListVMEventsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/live-migration": { - "post": { - "operationId": "VM_LiveMigrateVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmLiveMigrateVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "targetNode": { - "type": "string" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/networks": { - "get": { - "operationId": "VM_ListVMNetworks", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListVMNetworksResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/restore": { - "post": { - "operationId": "VM_RestoreVMSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmRestoreVMSnapshotResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "snapshotName": { - "type": "string" - }, - "restoreName": { - "type": "string" - }, - "restoreDescription": { - "type": "string" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/restores/{restoreName}": { - "delete": { - "operationId": "VM_DeleteVMRestore", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmDeleteVMRestoreResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "restoreName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/running-status": { - "put": { - "operationId": "VM_UpdateVMRunningStatus", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmUpdateVMRunningStatusResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "vmOperation": { - "$ref": "#/definitions/vmVMOperation" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/snapshot": { - "post": { - "operationId": "VM_CreateVMSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmCreateVMSnapshotResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "snapshotName": { - "type": "string" - }, - "snapshotDescription": { - "type": "string" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/snapshots": { - "get": { - "operationId": "VM_ListVMSnapshots", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListVMSnapshotsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/snapshots/{snapshotName}": { - "delete": { - "operationId": "VM_DeleteVMSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmDeleteVMSnapshotResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "snapshotName", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - }, - "put": { - "operationId": "VM_UpdateVMSnapshot", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmUpdateVMSnapshotResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "snapshotName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "snapshotDescription": { - "type": "string" - } - } - } - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/snapshots/{snapshotName}/restores": { - "get": { - "operationId": "VM_ListVMRestores", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListVMRestoresResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "snapshotName", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/namespaces/{namespace}/vms/{name}/storages": { - "get": { - "operationId": "VM_ListVMStorages", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListVMStoragesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "namespace", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/network-interfaces": { - "get": { - "operationId": "VM_ListNetworkInterfaces", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListNetworkInterfacesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/nodes": { - "get": { - "operationId": "VM_ListClusterNodes", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListClusterNodesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/storageclasses": { - "get": { - "operationId": "VM_ListClusterStorageClasses", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListClusterStorageClassesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/system-images": { - "get": { - "operationId": "VM_ListSystemImages", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListSystemImagesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/vm-monitor/ready": { - "get": { - "operationId": "Cluster_IsVMMonitorReady", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clusterIsVMMonitorReadyResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "Cluster" - ] - } - }, - "/apis/virtnest.io/v1alpha1/clusters/{cluster}/vms": { - "get": { - "operationId": "VM_ListClusterVMs", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmListClusterVmsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "created_at", - "field_name" - ], - "default": "created_at" - }, - { - "name": "sortDir", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - { - "name": "namespace", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "VM" - ] - } - }, - "/apis/virtnest.io/v1alpha1/feature-gate": { - "get": { - "operationId": "FeatureGate_ListFeatureGates", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/feature_gateListFeatureGatesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "FeatureGate" - ] - } - }, - "/apis/virtnest.io/v1alpha1/projects": { - "get": { - "operationId": "Image_ListProjects", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/imageListProjectsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the current cluster.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "registry", - "description": "Registry is registry name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "public", - "description": "Public is distinguish public projects and private projects.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/virtnest.io/v1alpha1/registries": { - "get": { - "operationId": "Image_ListRegistries", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/imageListRegistriesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the current cluster.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "public", - "description": "Public is distinguish public images and private images.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/virtnest.io/v1alpha1/repositories": { - "get": { - "operationId": "Image_ListRepositories", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/imageListRepositoriesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "cluster", - "description": "Cluster is the current cluster.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "namespace", - "description": "Namespace is the current namespace.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "registry", - "description": "Registry is registry name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "project", - "description": "Project is the project to request, \"/\" is a possible value.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fuzzyName", - "description": "FuzzyName is used to fuzzy search by multiple parameters including name.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "page", - "description": "Page requested.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "description": "Size per page.", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "public", - "description": "Public is distinguish public images and private images.", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "showArtifacts", - "description": "ShowArtifacts is to list artifacts of per image, default false.", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "tags": [ - "Image" - ] - } - }, - "/apis/virtnest.io/v1alpha1/roles": { - "get": { - "operationId": "Role_GetUserRoles", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/roleGetUserRolesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "tags": [ - "Role" - ] - } - }, - "/apis/virtnest.io/v1alpha1/vmtemplate-by-vm": { - "post": { - "summary": "rpc UpdateVMTemplate(UpdateVMTemplateRequest) returns (UpdateVMTemplateResponse) {\n option (google.api.http) = {\n put: \"/apis/virtnest.io/v1alpha1/vmtemplates/{name}\"\n body: \"*\"\n };\n }", - "operationId": "VMTemplate_CreateVMTemplateByVM", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmtemplateCreateVMTemplateByVMResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/vmtemplateCreateVMTemplateByVMRequest" - } - } - ], - "tags": [ - "VMTemplate" - ] - } - }, - "/apis/virtnest.io/v1alpha1/vmtemplates": { - "get": { - "operationId": "VMTemplate_ListVMTemplates", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmtemplateListVMTemplatesResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "page", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "search", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "sortBy", - "description": " - UNSPECIFIED: Unspecified is default, no sorting.\n - created_at: Sort result by creationTimestamp.\n - field_name: Sort result by name.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "UNSPECIFIED", - "created_at", - "field_name" - ], - "default": "UNSPECIFIED" - }, - { - "name": "sortDir", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - } - ], - "tags": [ - "VMTemplate" - ] - } - }, - "/apis/virtnest.io/v1alpha1/vmtemplates/{name}": { - "get": { - "operationId": "VMTemplate_GetVMTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmtemplateGetVMTemplateResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VMTemplate" - ] - }, - "delete": { - "summary": "rpc CreateVMTemplate(CreateVMTemplateRequest) returns (CreateVMTemplateResponse) {\n option (google.api.http) = {\n post: \"/apis/virtnest.io/v1alpha1/vmtemplates\"\n body: \"*\"\n };\n }", - "operationId": "VMTemplate_DeleteVMTemplate", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/vmtemplateDeleteVMTemplateResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VMTemplate" - ] - } - }, - "/apis/virtnest.io/v1alpha1/vmtemplates/{name}/custom-resource": { - "get": { - "operationId": "VMTemplate_GetCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1vmtemplateGetCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "VMTemplate" - ] - }, - "put": { - "operationId": "VMTemplate_UpdateCustomResource", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/v1alpha1vmtemplateUpdateCustomResourceResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/googlerpcStatus" - } - } - }, - "parameters": [ - { - "name": "name", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - } - } - } - ], - "tags": [ - "VMTemplate" - ] - } - } - }, - "definitions": { - "clusterClusterInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/v1alpha1clusterStatus" - }, - "isKubevirtInstalled": { - "type": "boolean" - }, - "isInsightAgentReady": { - "type": "boolean" - }, - "spiderpool": { - "$ref": "#/definitions/clusterSpiderPool" - }, - "gpuInfo": { - "$ref": "#/definitions/clusterGPUInfo" - } - } - }, - "clusterGPUInfo": { - "type": "object", - "properties": { - "type": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1clusterGPUType" - } - }, - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1clusterGPU" - } - } - } - }, - "clusterIsVMMonitorReadyResponse": { - "type": "object", - "properties": { - "ready": { - "type": "boolean" - } - } - }, - "clusterListClusterNamespacesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "clusterListClustersResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/clusterClusterInfo" - } - } - } - }, - "clusterSpiderPool": { - "type": "object", - "properties": { - "isInstalled": { - "type": "boolean" - }, - "enableIpv4": { - "type": "boolean" - }, - "enableIpv6": { - "type": "boolean" - } - } - }, - "feature_gateFeatureGateID": { - "type": "string", - "enum": [ - "VirtualMachineSnapshot", - "VirtualMachineClone" - ], - "default": "VirtualMachineSnapshot" - }, - "feature_gateFeatureGateInfo": { - "type": "object", - "properties": { - "id": { - "$ref": "#/definitions/feature_gateFeatureGateID", - "title": "唯一标志符" - }, - "description": { - "type": "string", - "title": "关于此 FeatureGate 的描述" - }, - "enabled": { - "type": "boolean", - "title": "是否启用" - } - } - }, - "feature_gateListFeatureGatesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/feature_gateFeatureGateInfo" - } - } - } - }, - "googlerpcStatus": { - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "details": { - "type": "array", - "items": { - "$ref": "#/definitions/protobufAny" - } - } - } - }, - "imageArtifact": { - "type": "object", - "properties": { - "digest": { - "type": "string", - "description": "Digest is artifact digest." - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/imageTag" - }, - "description": "Tags is a list of tags." - }, - "imageSize": { - "type": "string", - "format": "int64", - "description": "Size of artifact. Unit: byte. 1024 GenericBinary." - }, - "pushTime": { - "type": "string", - "format": "int64", - "description": "First push time." - } - }, - "title": "Artifact is the concept of harbor artifact" - }, - "imageCheckSecretResponse": { - "type": "object", - "properties": { - "canUse": { - "type": "boolean" - }, - "message": { - "type": "string" - } - } - }, - "imageListProjectsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Items is a list of project names." - } - }, - "title": "ListProjectsResponse returns a list of projects of a registry" - }, - "imageListRegistriesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/imageRegistry" - }, - "title": "items is registry host" - } - }, - "title": "ListRegistriesResponse returns a list of registries" - }, - "imageListRepositoriesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/imageRepository" - }, - "description": "Items is a list of repositories." - }, - "pagination": { - "$ref": "#/definitions/v1alpha1imagePagination" - } - }, - "title": "ListRepositoriesResponse returns a list of projects of a registry" - }, - "imageListSecretsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/imageSecret" - } - } - } - }, - "imageRegistry": { - "type": "object", - "properties": { - "alias": { - "type": "string", - "description": "Alias is an alias for the registry, showed in list." - }, - "host": { - "type": "string", - "description": "Host is registry host." - }, - "name": { - "type": "string", - "description": "Name is registry name, use to query project lists." - } - }, - "title": "Registry contains necessary info" - }, - "imageRepository": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of repository." - }, - "artifacts": { - "type": "array", - "items": { - "$ref": "#/definitions/imageArtifact" - }, - "description": "Artifacts of repository." - } - }, - "title": "Repository concept from Harbor" - }, - "imageSecret": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "imageTag": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the tag." - }, - "pushTime": { - "type": "string", - "format": "int64", - "description": "Tag push time." - } - }, - "description": "Tag of an image." - }, - "protobufAny": { - "type": "object", - "properties": { - "@type": { - "type": "string" - } - }, - "additionalProperties": {} - }, - "roleClusterRoles": { - "type": "object", - "properties": { - "roles": { - "type": "array", - "items": { - "$ref": "#/definitions/roleRoleEnum" - } - }, - "nsRoles": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/roleNSRoles" - } - } - } - }, - "roleGetUserRolesResponse": { - "type": "object", - "properties": { - "platformRoles": { - "type": "array", - "items": { - "$ref": "#/definitions/roleRoleEnum" - } - }, - "clusterRoles": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/roleClusterRoles" - } - } - } - }, - "roleNSRoles": { - "type": "object", - "properties": { - "roles": { - "type": "array", - "items": { - "$ref": "#/definitions/roleRoleEnum" - } - } - } - }, - "roleRoleEnum": { - "type": "string", - "enum": [ - "admin", - "cluster_admin", - "cluster_edit", - "cluster_view", - "ns_admin", - "ns_edit", - "ns_view" - ], - "default": "admin" - }, - "v1alpha1clusterGPU": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1clusterGPUType" - }, - "deviceName": { - "type": "string" - } - } - }, - "v1alpha1clusterGPUType": { - "type": "string", - "enum": [ - "Nvidia_GPU", - "Nvidia_vGPU" - ], - "default": "Nvidia_GPU" - }, - "v1alpha1clusterStatus": { - "type": "string", - "enum": [ - "running", - "failed" - ], - "default": "running" - }, - "v1alpha1imagePagination": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - }, - "total": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1vmDiskVolume": { - "type": "object", - "properties": { - "storageClass": { - "type": "string" - }, - "capacity": { - "type": "string", - "format": "int64" - }, - "pvAccessMode": { - "$ref": "#/definitions/v1alpha1vmPersistentVolumeAccessMode" - }, - "name": { - "type": "string" - } - } - }, - "v1alpha1vmGPU": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1vmGPUType" - }, - "deviceName": { - "type": "string" - }, - "count": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1vmGPUType": { - "type": "string", - "enum": [ - "Nvidia_GPU", - "Nvidia_vGPU" - ], - "default": "Nvidia_GPU" - }, - "v1alpha1vmGetCustomResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - } - }, - "v1alpha1vmImageSource": { - "type": "string", - "enum": [ - "docker", - "http", - "s3" - ], - "default": "docker", - "title": "TODO:" - }, - "v1alpha1vmMultusConfigInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "cniType": { - "type": "string" - }, - "hasDefaultIppool": { - "type": "boolean" - } - } - }, - "v1alpha1vmMultusNetworkInfo": { - "type": "object", - "properties": { - "networkMode": { - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmMultusNetworkInfoItem" - } - } - } - }, - "v1alpha1vmMultusNetworkInfoItem": { - "type": "object", - "properties": { - "multusConfig": { - "$ref": "#/definitions/v1alpha1vmMultusConfigInfo" - }, - "interface": { - "type": "string" - }, - "ips": { - "type": "array", - "items": { - "type": "string" - } - }, - "mac": { - "type": "string" - }, - "subnet": { - "type": "string" - }, - "gateway": { - "type": "string" - }, - "vlanId": { - "type": "string" - } - } - }, - "v1alpha1vmNetworkInterfaceInfo": { - "type": "object", - "properties": { - "networkInterface": { - "type": "string" - }, - "multusConfigs": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmMultusConfigInfo" - } - } - } - }, - "v1alpha1vmPagination": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - }, - "total": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1vmPersistentVolumeAccessMode": { - "type": "string", - "enum": [ - "ReadWriteOnce", - "ReadOnlyMany", - "ReadWriteMany", - "ReadWriteOncePod" - ], - "default": "ReadWriteOnce" - }, - "v1alpha1vmSortBy": { - "type": "string", - "enum": [ - "created_at", - "field_name" - ], - "default": "created_at" - }, - "v1alpha1vmSortDir": { - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - "v1alpha1vmUpdateCustomResourceResponse": { - "type": "object" - }, - "v1alpha1vmVMDisks": { - "type": "object", - "properties": { - "systemVolume": { - "$ref": "#/definitions/v1alpha1vmDiskVolume" - }, - "dataVolumes": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmDiskVolume" - } - } - } - }, - "v1alpha1vmtemplateDiskVolume": { - "type": "object", - "properties": { - "storageClass": { - "type": "string" - }, - "capacity": { - "type": "string", - "format": "int64" - }, - "pvAccessMode": { - "$ref": "#/definitions/v1alpha1vmtemplatePersistentVolumeAccessMode" - }, - "name": { - "type": "string" - } - } - }, - "v1alpha1vmtemplateGPU": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/v1alpha1vmtemplateGPUType" - }, - "deviceName": { - "type": "string" - }, - "count": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1vmtemplateGPUType": { - "type": "string", - "enum": [ - "Nvidia_GPU", - "Nvidia_vGPU" - ], - "default": "Nvidia_GPU" - }, - "v1alpha1vmtemplateGetCustomResourceResponse": { - "type": "object", - "properties": { - "data": { - "type": "string" - } - } - }, - "v1alpha1vmtemplateImageSource": { - "type": "string", - "enum": [ - "docker", - "http", - "s3" - ], - "default": "docker" - }, - "v1alpha1vmtemplateMultusConfigInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "cniType": { - "type": "string" - }, - "hasDefaultIppool": { - "type": "boolean" - } - } - }, - "v1alpha1vmtemplateMultusNetworkInfo": { - "type": "object", - "properties": { - "networkMode": { - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmtemplateMultusNetworkInfoItem" - } - } - } - }, - "v1alpha1vmtemplateMultusNetworkInfoItem": { - "type": "object", - "properties": { - "multusConfig": { - "$ref": "#/definitions/v1alpha1vmtemplateMultusConfigInfo" - }, - "interface": { - "type": "string" - }, - "ips": { - "type": "array", - "items": { - "type": "string" - } - }, - "mac": { - "type": "string" - }, - "subnet": { - "type": "string" - }, - "gateway": { - "type": "string" - }, - "vlanId": { - "type": "string" - }, - "ipPool": { - "$ref": "#/definitions/vmtemplateIPPool" - } - } - }, - "v1alpha1vmtemplatePagination": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "format": "int32" - }, - "pageSize": { - "type": "integer", - "format": "int32" - }, - "total": { - "type": "integer", - "format": "int32" - } - } - }, - "v1alpha1vmtemplatePersistentVolumeAccessMode": { - "type": "string", - "enum": [ - "ReadWriteOnce", - "ReadOnlyMany", - "ReadWriteMany", - "ReadWriteOncePod" - ], - "default": "ReadWriteOnce" - }, - "v1alpha1vmtemplateSortBy": { - "type": "string", - "enum": [ - "UNSPECIFIED", - "created_at", - "field_name" - ], - "default": "UNSPECIFIED", - "description": " - UNSPECIFIED: Unspecified is default, no sorting.\n - created_at: Sort result by creationTimestamp.\n - field_name: Sort result by name." - }, - "v1alpha1vmtemplateSortDir": { - "type": "string", - "enum": [ - "desc", - "asc" - ], - "default": "desc" - }, - "v1alpha1vmtemplateUpdateCustomResourceResponse": { - "type": "object" - }, - "v1alpha1vmtemplateVMDisks": { - "type": "object", - "properties": { - "systemVolume": { - "$ref": "#/definitions/v1alpha1vmtemplateDiskVolume" - }, - "dataVolumes": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmtemplateDiskVolume" - } - } - } - }, - "vmAddDiskVolumeToVMResponse": { - "type": "object", - "properties": { - "needRestart": { - "type": "boolean" - } - } - }, - "vmAllowedOperation": { - "type": "string", - "enum": [ - "allowed_operation_snapshot", - "allowed_operation_clone", - "allowed_operation_live_migration" - ], - "default": "allowed_operation_snapshot" - }, - "vmCloneVMResponse": { - "type": "object" - }, - "vmColdMigrationResponse": { - "type": "object" - }, - "vmCreateCustomResourceResponse": { - "type": "object" - }, - "vmCreateVMResponse": { - "type": "object" - }, - "vmCreateVMSnapshotResponse": { - "type": "object" - }, - "vmCreateVMWithVMTemplateResponse": { - "type": "object" - }, - "vmDeleteVMResponse": { - "type": "object" - }, - "vmDeleteVMRestoreResponse": { - "type": "object" - }, - "vmDeleteVMSnapshotResponse": { - "type": "object" - }, - "vmEventLevel": { - "type": "string", - "enum": [ - "UNSPECIFIED", - "Normal", - "Warning" - ], - "default": "UNSPECIFIED", - "description": " - UNSPECIFIED: This is only a meaningless placeholder, to avoid zero not return." - }, - "vmExpandVMDiskCapacityResponse": { - "type": "object", - "properties": { - "needRestart": { - "type": "boolean" - } - } - }, - "vmGetVMResponse": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "name": { - "type": "string" - }, - "aliasName": { - "type": "string" - }, - "describe": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "ips": { - "type": "array", - "items": { - "type": "string" - } - }, - "status": { - "$ref": "#/definitions/vmVMStatus" - }, - "createdAt": { - "type": "string" - }, - "username": { - "type": "string" - }, - "password": { - "type": "string" - }, - "sshKey": { - "type": "string" - }, - "cpu": { - "type": "integer", - "format": "int64" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "单位:字节" - }, - "vmErrorMessage": { - "$ref": "#/definitions/vmVmErrorMessage" - }, - "imageSource": { - "$ref": "#/definitions/v1alpha1vmImageSource" - }, - "osFamily": { - "type": "string" - }, - "osVersion": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "node": { - "type": "string" - }, - "allowedOperation": { - "type": "array", - "items": { - "$ref": "#/definitions/vmAllowedOperation" - } - }, - "secret": { - "type": "string" - }, - "network": { - "$ref": "#/definitions/v1alpha1vmMultusNetworkInfo" - }, - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmGPU" - } - } - } - }, - "vmListClusterNodesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmNode" - } - } - } - }, - "vmListClusterStorageClassesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmStorageClass" - } - } - } - }, - "vmListClusterVmsInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/vmVMStatus" - }, - "namespace": { - "type": "string" - }, - "ips": { - "type": "array", - "items": { - "type": "string" - } - }, - "cpu": { - "type": "integer", - "format": "int64" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "单位:字节" - }, - "createdAt": { - "type": "string" - }, - "osFamily": { - "type": "string" - }, - "vmErrorMessage": { - "$ref": "#/definitions/vmVmErrorMessage" - }, - "allowedOperation": { - "type": "array", - "items": { - "$ref": "#/definitions/vmAllowedOperation" - } - }, - "node": { - "type": "string" - }, - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmGPUType" - } - }, - "migNodeSelector": { - "type": "string" - } - } - }, - "vmListClusterVmsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmListClusterVmsInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1vmPagination" - } - } - }, - "vmListNetworkInterfacesResponse": { - "type": "object", - "properties": { - "ipPools": { - "type": "array", - "items": { - "type": "string" - } - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmNetworkInterfaceInfo" - } - }, - "ipPoolsV6": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "vmListSystemImagesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmSystemImage" - } - } - } - }, - "vmListVMEventsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmVmEvents" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1vmPagination" - } - } - }, - "vmListVMNetworksResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmVMNetwork" - } - } - } - }, - "vmListVMRestoresResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmVMRestore" - } - } - } - }, - "vmListVMSnapshotsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmVMSnapshot" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1vmPagination" - } - } - }, - "vmListVMStoragesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmVMStorage" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1vmPagination" - } - } - }, - "vmLiveMigrateVMResponse": { - "type": "object" - }, - "vmMultusNetwork": { - "type": "object", - "properties": { - "networkMode": { - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmMultusNetworkItem" - } - } - } - }, - "vmMultusNetworkItem": { - "type": "object", - "properties": { - "interface": { - "type": "string" - }, - "multusConfig": { - "$ref": "#/definitions/v1alpha1vmMultusConfigInfo" - }, - "ipPoolNames": { - "type": "array", - "items": { - "type": "string" - } - }, - "ipPoolNamesV6": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "vmNode": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "phase": { - "$ref": "#/definitions/vmNodePhase" - } - } - }, - "vmNodePhase": { - "type": "string", - "enum": [ - "PhaseUnspecified", - "PhaseReady", - "PhaseNotReady", - "PhaseUnknown" - ], - "default": "PhaseUnspecified" - }, - "vmObject": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "kind": { - "type": "string" - } - } - }, - "vmRemoveVMDiskVolumeResponse": { - "type": "object" - }, - "vmRestoreVMSnapshotResponse": { - "type": "object" - }, - "vmSSH": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "password": { - "type": "string" - }, - "sshKey": { - "type": "string" - } - } - }, - "vmSnapshotStatus": { - "type": "string", - "enum": [ - "snapshot_succeeded", - "snapshot_failed", - "snapshot_deleting", - "snapshot_processing", - "snapshot_unknown" - ], - "default": "snapshot_succeeded" - }, - "vmStorageClass": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "supportAccessMode": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmPersistentVolumeAccessMode" - } - } - } - }, - "vmStorageStatus": { - "type": "string", - "enum": [ - "storage_processing", - "storage_ready", - "storage_failed" - ], - "default": "storage_processing" - }, - "vmStorageType": { - "type": "string", - "enum": [ - "system", - "data" - ], - "default": "system" - }, - "vmSystemImage": { - "type": "object", - "properties": { - "osFamily": { - "type": "string" - }, - "version": { - "type": "array", - "items": { - "$ref": "#/definitions/vmSystemImageVersion" - } - } - } - }, - "vmSystemImageVersion": { - "type": "object", - "properties": { - "version": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "vmUpdateVMResponse": { - "type": "object" - }, - "vmUpdateVMRunningStatusResponse": { - "type": "object" - }, - "vmUpdateVMSnapshotResponse": { - "type": "object" - }, - "vmVMNetwork": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "ip": { - "type": "string" - } - } - }, - "vmVMOperation": { - "type": "string", - "enum": [ - "start", - "stop", - "restart" - ], - "default": "start" - }, - "vmVMRestore": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "complete": { - "type": "boolean" - }, - "createdAt": { - "type": "string" - }, - "restoreTime": { - "type": "string" - }, - "lastRestore": { - "type": "boolean" - } - } - }, - "vmVMSnapshot": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/vmSnapshotStatus" - }, - "restoreTime": { - "type": "string" - } - } - }, - "vmVMStatus": { - "type": "string", - "enum": [ - "running", - "processing", - "error", - "poweroff" - ], - "default": "running" - }, - "vmVMStorage": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/vmStorageType" - }, - "capacity": { - "type": "string", - "format": "int64" - }, - "status": { - "$ref": "#/definitions/vmStorageStatus" - }, - "storageClass": { - "type": "string" - }, - "allowExpand": { - "type": "boolean" - }, - "pvAccessMode": { - "$ref": "#/definitions/v1alpha1vmPersistentVolumeAccessMode" - }, - "hotpluggable": { - "type": "boolean" - } - } - }, - "vmVmErrorMessage": { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - } - } - }, - "vmVmEvents": { - "type": "object", - "properties": { - "level": { - "$ref": "#/definitions/vmEventLevel" - }, - "component": { - "type": "string" - }, - "object": { - "$ref": "#/definitions/vmObject" - }, - "name": { - "type": "string" - }, - "detail": { - "type": "string" - }, - "time": { - "type": "string" - } - } - }, - "vmtemplateCreateVMTemplateByVMRequest": { - "type": "object", - "properties": { - "cluster": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "vmName": { - "type": "string" - }, - "vmtemplateName": { - "type": "string" - }, - "description": { - "type": "string" - } - } - }, - "vmtemplateCreateVMTemplateByVMResponse": { - "type": "object" - }, - "vmtemplateDeleteVMTemplateResponse": { - "type": "object" - }, - "vmtemplateGetVMTemplateResponse": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "cpu": { - "type": "integer", - "format": "int64" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "单位:字节" - }, - "createdAt": { - "type": "string" - }, - "osFamily": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/vmtemplateTemplateType" - }, - "systemDiskCapacity": { - "type": "string", - "format": "int64" - }, - "imageSource": { - "$ref": "#/definitions/v1alpha1vmtemplateImageSource" - }, - "osVersion": { - "type": "string" - }, - "network": { - "type": "string" - }, - "disks": { - "$ref": "#/definitions/v1alpha1vmtemplateVMDisks" - }, - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmtemplateGPU" - } - }, - "networks": { - "$ref": "#/definitions/v1alpha1vmtemplateMultusNetworkInfo" - } - } - }, - "vmtemplateIPPool": { - "type": "object", - "properties": { - "ipv4": { - "type": "array", - "items": { - "type": "string" - } - }, - "ipv6": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "vmtemplateListVMTemplatesResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/definitions/vmtemplateVMTemplateInfo" - } - }, - "pagination": { - "$ref": "#/definitions/v1alpha1vmtemplatePagination" - } - } - }, - "vmtemplateTemplateType": { - "type": "string", - "enum": [ - "custom", - "internal" - ], - "default": "custom" - }, - "vmtemplateVMTemplateInfo": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/vmtemplateTemplateType" - }, - "cpu": { - "type": "integer", - "format": "int64" - }, - "memory": { - "type": "string", - "format": "int64", - "title": "单位:字节" - }, - "createdAt": { - "type": "string" - }, - "osFamily": { - "type": "string" - }, - "gpus": { - "type": "array", - "items": { - "$ref": "#/definitions/v1alpha1vmtemplateGPUType" - } - } - } - } - } -} diff --git a/site/search/search_index.json b/site/search/search_index.json deleted file mode 100644 index a5243ae..0000000 --- a/site/search/search_index.json +++ /dev/null @@ -1 +0,0 @@ -{"config":{"lang":["zh","en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"index.html","title":"\u8c50\u6536\u4e8c\u865f\u6a94\u6848\u7ad9","text":"

\u9019\u662f\u8c50\u6536\u4e8c\u865f AI \u7b97\u529b\u4e2d\u5fc3\u7684\u6a94\u6848\u7ad9\u3002

  • \u7d42\u7aef\u7528\u6236\u624b\u518a\uff1a\u5728\u5bb9\u5668\u5316\u74b0\u5883\u4e2d\uff0c\u4f7f\u7528\u96f2\u4e3b\u6a5f\uff0c\u958b\u767c AI \u7b97\u6cd5\uff0c\u69cb\u5efa\u8a13\u7df4\u548c\u63a8\u7406\u4efb\u52d9
  • \u7ba1\u7406\u54e1\u624b\u518a\uff1a\u70ba\u5bb9\u5668\u5316\u7d42\u7aef\u7528\u6236\u505a\u597d\u904b\u7dad\u5de5\u4f5c\uff0c\u4fdd\u969c\u5e73\u53f0\u5e73\u7a69\u9ad8\u6548\u904b\u884c
  • \u958b\u767c\u8005\u624b\u518a\uff1a\u532f\u7e3d\u4e86 5 \u500b\u6a21\u584a\u7684 OpenAPI \u624b\u518a

"},{"location":"admin/index.html","title":"\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 - \u7ba1\u7406\u5458","text":"

\u8fd9\u662f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9762\u5411\u7ba1\u7406\u5458\u7684\u8fd0\u7ef4\u6587\u6863\u3002

  • \u4e91\u4e3b\u673a

    \u4e91\u4e3b\u673a\u662f\u90e8\u7f72\u5728\u4e91\u7aef\u7684\u865a\u62df\u673a\u3002

    • \u7ba1\u7406\u4e91\u4e3b\u673a
    • \u4e91\u4e3b\u673a vGPU
    • \u4e91\u4e3b\u673a\u6a21\u677f
    • \u4ece VMWare \u5bfc\u5165\u4e91\u4e3b\u673a
  • \u5bb9\u5668\u7ba1\u7406

    \u7ba1\u7406 K8s \u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5e94\u7528\u3001\u8d44\u6e90\u548c\u6743\u9650\u3002

    • \u521b\u5efa\u96c6\u7fa4
    • \u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9
    • \u7ba1\u7406 Helm \u5e94\u7528
    • HPA \u6c34\u5e73\u6269\u7f29\u5bb9
  • \u7b97\u6cd5\u5f00\u53d1

    \u7ba1\u7406 AI \u8d44\u6e90\u548c\u961f\u5217\u3002

    • \u7ba1\u7406\u8d44\u6e90
    • \u7ba1\u7406\u961f\u5217
    • AI \u8bad\u63a8\u6700\u4f73\u5b9e\u8df5
    • \u7b97\u6cd5\u5f00\u53d1\u6545\u969c\u6392\u67e5
  • \u53ef\u89c2\u6d4b\u6027

    \u4e86\u89e3\u53ef\u89c2\u6d4b\u6027\u8d44\u6e90\uff0c\u914d\u7f6e\u548c\u6545\u969c\u6392\u67e5\u3002

    • \u90e8\u7f72\u8d44\u6e90\u89c4\u5212
    • \u5b89\u88c5\u4e0e\u5347\u7ea7
    • \u517c\u5bb9\u6027\u6d4b\u8bd5
    • \u5e38\u89c1\u95ee\u9898
  • \u5168\u5c40\u7ba1\u7406

    \u7ba1\u63a7\u7528\u6237\u3001\u7528\u6237\u7ec4\u3001\u5de5\u4f5c\u7a7a\u95f4\u3001\u8d44\u6e90\u7b49\u8bbf\u95ee\u6743\u9650\u3002

    • \u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4
    • \u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u8d44\u6e90
    • \u5ba1\u8ba1\u65e5\u5fd7
    • \u5e73\u53f0\u8bbe\u7f6e

"},{"location":"admin/baize/best-practice/add-scheduler.html","title":"\u589e\u52a0\u4efb\u52a1\u8c03\u5ea6\u5668","text":"

5.0 AI Lab \u63d0\u4f9b\u4e86\u4efb\u52a1\u8c03\u5ea6\u5668\uff0c\u53ef\u4ee5\u5e2e\u52a9\u60a8\u66f4\u597d\u5730\u7ba1\u7406\u4efb\u52a1\uff0c\u9664\u4e86\u63d0\u4f9b\u57fa\u7840\u7684\u8c03\u5ea6\u5668\u4e4b\u5916\uff0c\u76ee\u524d\u4e5f\u652f\u6301\u7528\u6237\u81ea\u5b9a\u4e49\u8c03\u5ea6\u5668\u3002

"},{"location":"admin/baize/best-practice/add-scheduler.html#_2","title":"\u4efb\u52a1\u8c03\u5ea6\u5668\u4ecb\u7ecd","text":"

\u5728 Kubernetes \u4e2d\uff0c\u4efb\u52a1\u8c03\u5ea6\u5668\u8d1f\u8d23\u51b3\u5b9a\u5c06 Pod \u5206\u914d\u5230\u54ea\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u3002\u5b83\u8003\u8651\u591a\u79cd\u56e0\u7d20\uff0c\u5982\u8d44\u6e90\u9700\u6c42\u3001\u786c\u4ef6/\u8f6f\u4ef6\u7ea6\u675f\u3001\u4eb2\u548c\u6027/\u53cd\u4eb2\u548c\u6027\u89c4\u5219\u3001\u6570\u636e\u5c40\u90e8\u6027\u7b49\u3002

\u9ed8\u8ba4\u8c03\u5ea6\u5668\u662f Kubernetes \u96c6\u7fa4\u4e2d\u7684\u4e00\u4e2a\u6838\u5fc3\u7ec4\u4ef6\uff0c\u8d1f\u8d23\u51b3\u5b9a\u5c06 Pod \u5206\u914d\u5230\u54ea\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u3002\u8ba9\u6211\u4eec\u6df1\u5165\u4e86\u89e3\u5b83\u7684\u5de5\u4f5c\u539f\u7406\u3001\u7279\u6027\u548c\u914d\u7f6e\u65b9\u6cd5\u3002

"},{"location":"admin/baize/best-practice/add-scheduler.html#_3","title":"\u8c03\u5ea6\u5668\u7684\u5de5\u4f5c\u6d41\u7a0b","text":"

\u9ed8\u8ba4\u8c03\u5ea6\u5668\u7684\u5de5\u4f5c\u6d41\u7a0b\u53ef\u4ee5\u5206\u4e3a\u4e24\u4e2a\u4e3b\u8981\u9636\u6bb5\uff1a\u8fc7\u6ee4\uff08Filtering\uff09\u548c\u8bc4\u5206\uff08Scoring\uff09\u3002

"},{"location":"admin/baize/best-practice/add-scheduler.html#_4","title":"\u8fc7\u6ee4\u9636\u6bb5","text":"

\u8c03\u5ea6\u5668\u4f1a\u904d\u5386\u6240\u6709\u8282\u70b9\uff0c\u6392\u9664\u4e0d\u6ee1\u8db3 Pod \u8981\u6c42\u7684\u8282\u70b9\uff0c\u8003\u8651\u7684\u56e0\u7d20\u5305\u62ec\uff1a

  • \u8d44\u6e90\u9700\u6c42
  • \u8282\u70b9\u9009\u62e9\u5668
  • \u8282\u70b9\u4eb2\u548c\u6027
  • \u6c61\u70b9\u548c\u5bb9\u5fcd

\u4ee5\u4e0a\u53c2\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u521b\u5efa\u4efb\u52a1\u65f6\u7684\u9ad8\u7ea7\u914d\u7f6e\u6765\u8bbe\u7f6e\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

"},{"location":"admin/baize/best-practice/add-scheduler.html#_5","title":"\u8bc4\u5206\u9636\u6bb5","text":"

\u5bf9\u901a\u8fc7\u8fc7\u6ee4\u7684\u8282\u70b9\u8fdb\u884c\u6253\u5206\uff0c\u9009\u62e9\u5f97\u5206\u6700\u9ad8\u7684\u8282\u70b9\u6765\u8fd0\u884c Pod\uff0c\u8003\u8651\u56e0\u7d20\u5305\u62ec\uff1a

  • \u8d44\u6e90\u4f7f\u7528\u7387
  • Pod \u4eb2\u548c\u6027/\u53cd\u4eb2\u548c\u6027
  • \u8282\u70b9\u4eb2\u548c\u6027\u7b49\u3002
"},{"location":"admin/baize/best-practice/add-scheduler.html#_6","title":"\u8c03\u5ea6\u5668\u63d2\u4ef6","text":"

\u9664\u4e86\u57fa\u7840\u7684\u4e00\u4e9b\u4efb\u52a1\u8c03\u5ea6\u80fd\u529b\u4e4b\u5916\uff0c\u6211\u4eec\u8fd8\u652f\u6301\u4f7f\u7528 Scheduler Plugins\uff1aKubernetes SIG Scheduling \u7ef4\u62a4\u7684\u4e00\u7ec4\u8c03\u5ea6\u5668\u63d2\u4ef6\uff0c\u5305\u62ec Coscheduling (Gang Scheduling) \u7b49\u529f\u80fd\u3002

"},{"location":"admin/baize/best-practice/add-scheduler.html#_7","title":"\u90e8\u7f72\u8c03\u5ea6\u5668\u63d2\u4ef6","text":"

\u5728\u5de5\u4f5c\u96c6\u7fa4\u4e2d\u90e8\u7f72\u7b2c\u4e8c\u8c03\u5ea6\u5668\u63d2\u4ef6\uff0c\u8bf7\u53c2\u8003\u90e8\u7f72\u7b2c\u4e8c\u8c03\u5ea6\u5668\u63d2\u4ef6\u3002

"},{"location":"admin/baize/best-practice/add-scheduler.html#ai-lab","title":"\u5728 AI Lab \u4e2d\u542f\u7528\u8c03\u5ea6\u5668\u63d2\u4ef6","text":"

Danger

\u589e\u52a0\u8c03\u5ea6\u5668\u63d2\u4ef6\u82e5\u64cd\u4f5c\u4e0d\u5f53\uff0c\u53ef\u80fd\u4f1a\u5f71\u54cd\u5230\u6574\u4e2a\u96c6\u7fa4\u7684\u7a33\u5b9a\u6027\uff0c\u5efa\u8bae\u5728\u6d4b\u8bd5\u73af\u5883\u4e2d\u8fdb\u884c\u6d4b\u8bd5\uff1b\u6216\u8005\u8054\u7cfb\u6211\u4eec\u7684\u6280\u672f\u652f\u6301\u56e2\u961f\u3002

\u6ce8\u610f\uff0c\u5982\u679c\u5e0c\u671b\u5728\u8bad\u7ec3\u4efb\u52a1\u4e2d\u4f7f\u7528\u66f4\u591a\u7684\u8c03\u5ea6\u5668\u63d2\u4ef6\uff0c\u9700\u8981\u4e8b\u5148\u624b\u5de5\u5728\u5de5\u4f5c\u96c6\u7fa4\u4e2d\u6210\u529f\u5b89\u88c5\uff0c\u7136\u540e\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72 baize-agent \u65f6\uff0c\u589e\u52a0\u5bf9\u5e94\u7684\u8c03\u5ea6\u5668\u63d2\u4ef6\u914d\u7f6e\u3002

\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u63d0\u4f9b\u7684\u754c\u9762 Helm \u5e94\u7528 \u7ba1\u7406\u80fd\u529b\uff0c\u53ef\u4ee5\u65b9\u4fbf\u5730\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u8c03\u5ea6\u5668\u63d2\u4ef6\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

\u7136\u540e\uff0c\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u5b89\u88c5 \uff0c\uff08\u82e5\u5df2\u90e8\u7f72\u4e86 baize-agent\uff0c\u53ef\u4ee5\u5230 Helm \u5e94\u7528\u5217\u8868\u53bb\u66f4\u65b0\uff09\uff0c\u6839\u636e\u5982\u4e0b\u56fe\u6240\u793a\u7684\u914d\u7f6e\uff0c\u589e\u52a0\u8c03\u5ea6\u5668\u3002

\u6ce8\u610f\u8c03\u5ea6\u5668\u7684\u53c2\u6570\u5c42\u7ea7\uff0c\u6dfb\u52a0\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

\u6ce8\u610f\u4ee5\u540e\u5728\u66f4\u65b0 baize-agent \u65f6\uff0c\u4e0d\u8981\u9057\u6f0f\u8fd9\u4e2a\u914d\u7f6e\u3002

"},{"location":"admin/baize/best-practice/add-scheduler.html#_8","title":"\u5728\u521b\u5efa\u4efb\u52a1\u65f6\u6307\u5b9a\u8c03\u5ea6\u5668","text":"

\u5f53\u60a8\u5728\u96c6\u7fa4\u4e2d\u6210\u529f\u90e8\u7f72\u4e86\u5bf9\u5e94\u7684\u8c03\u5ea6\u5668\u63d2\u4ef6\uff0c\u5e76\u4e14\u5728 baize-agent \u4e5f\u6b63\u786e\u589e\u52a0\u4e86\u5bf9\u5e94\u7684\u8c03\u5ea6\u5668\u914d\u7f6e\u540e\uff0c\u53ef\u4ee5\u5728\u521b\u5efa\u4efb\u52a1\u65f6\uff0c\u6307\u5b9a\u8c03\u5ea6\u5668\u3002

\u4e00\u5207\u6b63\u5e38\u7684\u60c5\u51b5\u4e0b\uff0c\u60a8\u53ef\u4ee5\u5728\u8c03\u5ea6\u5668\u4e0b\u62c9\u6846\u4e2d\u770b\u5230\u60a8\u90e8\u7f72\u7684\u8c03\u5ea6\u5668\u63d2\u4ef6\u3002

\u4ee5\u4e0a\uff0c\u5c31\u662f\u6211\u4eec\u5728 AI Lab \u4e2d\uff0c\u4e3a\u4efb\u52a1\u589e\u52a0\u8c03\u5ea6\u5668\u9009\u9879\u7684\u914d\u7f6e\u4f7f\u7528\u8bf4\u660e\u3002

"},{"location":"admin/baize/best-practice/change-notebook-image.html","title":"\u66f4\u65b0 Notebook \u5185\u7f6e\u955c\u50cf","text":"

\u5728 Notebook \u4e2d\uff0c\u9ed8\u8ba4\u63d0\u4f9b\u4e86\u591a\u4e2a\u53ef\u7528\u7684\u57fa\u7840\u955c\u50cf\uff0c\u4f9b\u5f00\u53d1\u8005\u9009\u62e9\uff1b\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4f1a\u6ee1\u8db3\u5f00\u53d1\u8005\u7684\u4f7f\u7528\u3002

\u7b97\u4e30\u63d0\u4f9b\u4e86\u4e00\u4e2a\u9ed8\u8ba4\u7684 Notebook \u955c\u50cf\uff0c\u5305\u542b\u4e86\u6240\u9700\u7684\u4efb\u4f55\u5f00\u53d1\u5de5\u5177\u548c\u8d44\u6599\u3002

baize/baize-notebook\n

\u8fd9\u4e2a Notebook \u91cc\u9762\u5305\u542b\u4e86\u57fa\u7840\u7684\u5f00\u53d1\u5de5\u5177\uff0c\u4ee5 baize-notebook:v0.5.0 \uff082024 \u5e74 5 \u6708 30 \u65e5\uff09\u4e3a\u4f8b\uff0c\u76f8\u5173\u4f9d\u8d56\u53ca\u7248\u672c\u5982\u4e0b\uff1a

\u4f9d\u8d56 \u7248\u672c\u7f16\u53f7 \u4ecb\u7ecd Ubuntu 22.04.3 \u9ed8\u8ba4 OS Python 3.11.6 \u9ed8\u8ba4 Python \u7248\u672c pip 23.3.1 conda(mamba) 23.3.1 jupyterlab 3.6.6 JupyterLab \u955c\u50cf\uff0c\u63d0\u4f9b\u5b8c\u6574\u7684 Notebook \u5f00\u53d1\u4f53\u9a8c codeserver v4.89.1 \u4e3b\u6d41 Code \u5f00\u53d1\u5de5\u5177\uff0c\u65b9\u4fbf\u7528\u6237\u4f7f\u7528\u719f\u6089\u7684\u5de5\u5177\u8fdb\u884c\u5f00\u53d1\u4f53\u9a8c *baizectl v0.5.0 \u7b97\u4e30\u5185\u7f6e CLI \u4efb\u52a1\u7ba1\u7406\u5de5\u5177 *SSH - \u652f\u6301\u672c\u5730 SSH \u76f4\u63a5\u8bbf\u95ee\u5230 Notebook \u5bb9\u5668\u5185 *kubectl v1.27 Kubernetes CLI\uff0c\u53ef\u4ee5\u4f7f\u7528 kubectl \u5728 Notebook \u5185 \u7ba1\u7406\u5bb9\u5668\u8d44\u6e90

\u4f46\u6709\u65f6\u7528\u6237\u53ef\u80fd\u9700\u8981\u81ea\u5b9a\u4e49\u955c\u50cf\uff0c\u672c\u6587\u4ecb\u7ecd\u4e86\u5982\u4f55\u66f4\u65b0\u955c\u50cf\uff0c\u5e76\u589e\u52a0\u5230 Notebook \u521b\u5efa\u754c\u9762\u4e2d\u8fdb\u884c\u9009\u62e9\u3002

"},{"location":"admin/baize/best-practice/change-notebook-image.html#_1","title":"\u6784\u5efa\u81ea\u5b9a\u4e49\u955c\u50cf\uff08\u4ec5\u4f9b\u53c2\u8003\uff09","text":"

Note

\u6ce8\u610f\uff0c\u6784\u5efa\u65b0\u955c\u50cf \u9700\u8981\u4ee5 baize-notebook \u4f5c\u4e3a\u57fa\u7840\u955c\u50cf\uff0c\u4ee5\u4fdd\u8bc1 Notebook \u7684\u6b63\u5e38\u8fd0\u884c\u3002

\u5728\u6784\u5efa\u81ea\u5b9a\u4e49\u955c\u50cf\u65f6\uff0c\u5efa\u8bae\u5148\u4e86\u89e3 baize-notebook \u955c\u50cf\u7684 Dockerfile\uff0c\u4ee5\u4fbf\u66f4\u597d\u5730\u7406\u89e3\u5982\u4f55\u6784\u5efa\u81ea\u5b9a\u4e49\u955c\u50cf\u3002

"},{"location":"admin/baize/best-practice/change-notebook-image.html#baize-noteboook-dockerfile","title":"baize-noteboook \u7684 Dockerfile","text":"
ARG BASE_IMG=docker.m.daocloud.io/kubeflownotebookswg/jupyter:v1.8.0\n\nFROM $BASE_IMG\n\nUSER root\n\n# install - useful linux packages\nRUN export DEBIAN_FRONTEND=noninteractive \\\n && apt-get -yq update \\\n && apt-get -yq install --no-install-recommends \\\n    openssh-server git git-lfs bash-completion \\\n && apt-get clean \\\n && rm -rf /var/lib/apt/lists/*\n\n# remove default s6 jupyterlab run script\nRUN rm -rf /etc/services.d/jupyterlab\n\n# install - useful jupyter plugins\nRUN mamba install -n base -y jupyterlab-language-pack-zh-cn \\\n  && mamba clean --all -y\n\nARG CODESERVER_VERSION=4.89.1\nARG TARGETARCH\n\nRUN curl -fsSL \"https://github.com/coder/code-server/releases/download/v$CODESERVER_VERSION/code-server_${CODESERVER_VERSION}_$TARGETARCH.deb\" -o /tmp/code-server.deb \\\n  && dpkg -i /tmp/code-server.deb \\\n  && rm -f /tmp/code-server.deb\n\nARG CODESERVER_PYTHON_VERSION=2024.4.1\nARG CODESERVER_JUPYTER_VERSION=2024.3.1\nARG CODESERVER_LANGUAGE_PACK_ZH_CN=1.89.0\nARG CODESERVER_YAML=1.14.0\nARG CODESERVER_DOTENV=1.0.1\nARG CODESERVER_EDITORCONFIG=0.16.6\nARG CODESERVER_TOML=0.19.1\nARG CODESERVER_GITLENS=15.0.4\n\n# configure for code-server extensions\n# # https://github.com/kubeflow/kubeflow/blob/709254159986d2cc99e675d0fad5a128ddeb0917/components/example-notebook-servers/codeserver-python/Dockerfile\n# # and\n# # https://github.com/kubeflow/kubeflow/blob/709254159986d2cc99e675d0fad5a128ddeb0917/components/example-notebook-servers/codeserver/Dockerfile\nRUN code-server --list-extensions --show-versions \\\n  && code-server --list-extensions --show-versions \\\n  && code-server \\\n    --install-extension MS-CEINTL.vscode-language-pack-zh-hans@$CODESERVER_LANGUAGE_PACK_ZH_CN \\\n    --install-extension ms-python.python@$CODESERVER_PYTHON_VERSION \\\n    --install-extension ms-toolsai.jupyter@$CODESERVER_JUPYTER_VERSION \\\n    --install-extension redhat.vscode-yaml@$CODESERVER_YAML \\\n    --install-extension mikestead.dotenv@$CODESERVER_DOTENV \\\n    --install-extension EditorConfig.EditorConfig@$CODESERVER_EDITORCONFIG \\\n    --install-extension tamasfe.even-better-toml@$CODESERVER_TOML \\\n    --install-extension eamodio.gitlens@$CODESERVER_GITLENS \\\n    --install-extension catppuccin.catppuccin-vsc-pack \\\n    --force \\\n  && code-server --list-extensions --show-versions\n\n# configure for code-server\nRUN mkdir -p /home/${NB_USER}/.local/share/code-server/User \\\n  && chown -R ${NB_USER}:users /home/${NB_USER} \\\n  && cat <<EOF > /home/${NB_USER}/.local/share/code-server/User/settings.json\n{\n  \"gitlens.showWelcomeOnInstall\": false,\n  \"workbench.colorTheme\": \"Catppuccin Mocha\",\n}\nEOF\n\nRUN mkdir -p /tmp_home/${NB_USER}/.local/share \\\n  && mv /home/${NB_USER}/.local/share/code-server /tmp_home/${NB_USER}/.local/share\n\n# set ssh configuration\nRUN mkdir -p /run/sshd \\\n && chown -R ${NB_USER}:users /etc/ssh \\\n && chown -R ${NB_USER}:users /run/sshd \\\n && sed -i \"/#\\?Port/s/^.*$/Port 2222/g\" /etc/ssh/sshd_config \\\n && sed -i \"/#\\?PasswordAuthentication/s/^.*$/PasswordAuthentication no/g\" /etc/ssh/sshd_config \\\n && sed -i \"/#\\?PubkeyAuthentication/s/^.*$/PubkeyAuthentication yes/g\" /etc/ssh/sshd_config \\\n && rclone_version=v1.65.0 && \\\n       arch=$(uname -m | sed -E 's/x86_64/amd64/g;s/aarch64/arm64/g') && \\\n       filename=rclone-${rclone_version}-linux-${arch} && \\\n       curl -fsSL https://github.com/rclone/rclone/releases/download/${rclone_version}/${filename}.zip -o ${filename}.zip && \\\n       unzip ${filename}.zip && mv ${filename}/rclone /usr/local/bin && rm -rf ${filename} ${filename}.zip\n\n# Init mamba\nRUN mamba init --system\n\n# init baize-base environment for essential python packages\nRUN mamba create -n baize-base -y python \\\n  && /opt/conda/envs/baize-base/bin/pip install tensorboard \\\n  && mamba clean --all -y \\\n  && ln -s /opt/conda/envs/baize-base/bin/tensorboard /usr/local/bin/tensorboard\n\n# prepare baize-runtime-env directory\nRUN mkdir -p /opt/baize-runtime-env \\\n  && chown -R ${NB_USER}:users /opt/baize-runtime-env\n\nARG APP\nARG PROD_NAME\nARG TARGETOS\n\nCOPY out/$TARGETOS/$TARGETARCH/data-loader /usr/local/bin/\nCOPY out/$TARGETOS/$TARGETARCH/baizectl /usr/local/bin/\n\nRUN chmod +x /usr/local/bin/baizectl /usr/local/bin/data-loader && \\\n    echo \"source /etc/bash_completion\" >> /opt/conda/etc/profile.d/conda.sh && \\\n    echo \"source <(baizectl completion bash)\" >> /opt/conda/etc/profile.d/conda.sh && \\\n    echo \"source <(kubectl completion bash)\" >> /opt/conda/etc/profile.d/conda.sh && \\\n    echo '[ -f /run/baize-env ] && export $(cat /run/baize-env | xargs)' >> /opt/conda/etc/profile.d/conda.sh && \\\n    echo 'alias conda=\"mamba\"' >> /opt/conda/etc/profile.d/conda.sh\n\nUSER ${NB_UID}\n
"},{"location":"admin/baize/best-practice/change-notebook-image.html#_2","title":"\u6784\u5efa\u4f60\u7684\u955c\u50cf","text":"
ARG BASE_IMG=release.daocloud.io/baize/baize-notebook:v0.5.0\n\nFROM $BASE_IMG\nUSER root\n\n# Do Customization\nRUN mamba install -n baize-base -y pytorch torchvision torchaudio cpuonly -c pytorch \\\n && mamba install -n baize-base -y tensorflow \\\n && mamba clean --all -y\n\nUSER ${NB_UID}\n
"},{"location":"admin/baize/best-practice/change-notebook-image.html#notebook-helm","title":"\u589e\u52a0\u5230 Notebook \u955c\u50cf\u5217\u8868\uff08Helm\uff09","text":"

Warning

\u6ce8\u610f\uff0c\u5fc5\u987b\u7531\u5e73\u53f0\u7ba1\u7406\u5458\u64cd\u4f5c\uff0c\u8c28\u614e\u53d8\u66f4\u3002

\u76ee\u524d\uff0c\u955c\u50cf\u9009\u62e9\u5668\u9700\u8981\u901a\u8fc7\u66f4\u65b0 baize \u7684 Helm \u53c2\u6570\u6765\u4fee\u6539\uff0c\u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff1a

\u5728 kpanda-global-cluster \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 Helm \u5e94\u7528\u5217\u8868\uff0c\u627e\u5230 baize\uff0c\u8fdb\u5165\u66f4\u65b0\u9875\u9762\uff0c\u5728 YAML \u53c2\u6570\u4e2d\u4fee\u6539 Notebook \u955c\u50cf\uff1a

\u6ce8\u610f\u53c2\u6570\u4fee\u6539\u7684\u8def\u5f84\u5982\u4e0b global.config.notebook_images\uff1a

...\nglobal:\n  ...\n  config:\n    notebook_images:\n      ...\n      names: release.daocloud.io/baize/baize-notebook:v0.5.0\n      # \u5728\u8fd9\u91cc\u589e\u52a0\u4f60\u7684\u955c\u50cf\u4fe1\u606f\n

\u66f4\u65b0\u5b8c\u6210\u4e4b\u540e\uff0c\u5f85 Helm \u5e94\u7528\u91cd\u542f\u6210\u529f\u4e4b\u540e\uff0c\u53ef\u4ee5\u5728 Notebook \u521b\u5efa\u754c\u9762\u4e2d\u7684\u9009\u62e9\u955c\u50cf\u770b\u5230\u65b0\u7684\u955c\u50cf\u3002

"},{"location":"admin/baize/best-practice/checkpoint.html","title":"Checkpoint \u673a\u5236\u53ca\u4f7f\u7528\u4ecb\u7ecd","text":"

\u5728\u6df1\u5ea6\u5b66\u4e60\u7684\u5b9e\u9645\u573a\u666f\u4e2d\uff0c\u6a21\u578b\u8bad\u7ec3\u4e00\u822c\u90fd\u4f1a\u6301\u7eed\u4e00\u6bb5\u65f6\u95f4\uff0c\u8fd9\u5bf9\u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u7684\u7a33\u5b9a\u6027\u548c\u6548\u7387\u63d0\u51fa\u4e86\u66f4\u9ad8\u7684\u8981\u6c42\u3002 \u800c\u4e14\uff0c\u5728\u5b9e\u9645\u8bad\u7ec3\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5f02\u5e38\u4e2d\u65ad\u4f1a\u5bfc\u81f4\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684\u6a21\u578b\u72b6\u6001\u4e22\u5931\uff0c\u9700\u8981\u91cd\u65b0\u5f00\u59cb\u8bad\u7ec3\uff0c \u8fd9\u4e0d\u4ec5\u6d6a\u8d39\u4e86\u65f6\u95f4\u548c\u8d44\u6e90\uff0c\u8fd9\u5728 LLM \u8bad\u7ec3\u4e2d\u5c24\u4e3a\u660e\u663e\uff0c\u800c\u4e14\u4e5f\u4f1a\u5f71\u54cd\u6a21\u578b\u7684\u8bad\u7ec3\u6548\u679c\u3002

\u80fd\u591f\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4fdd\u5b58\u6a21\u578b\u7684\u72b6\u6001\uff0c\u4ee5\u4fbf\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u5f02\u5e38\u65f6\u80fd\u591f\u6062\u590d\u6a21\u578b\u72b6\u6001\uff0c\u53d8\u5f97\u81f3\u5173\u91cd\u8981\u3002 Checkpoint \u5c31\u662f\u76ee\u524d\u4e3b\u6d41\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u672c\u6587\u5c06\u4ecb\u7ecd Checkpoint \u673a\u5236\u7684\u57fa\u672c\u6982\u5ff5\u548c\u5728 PyTorch \u548c TensorFlow \u4e2d\u7684\u4f7f\u7528\u65b9\u6cd5\u3002

"},{"location":"admin/baize/best-practice/checkpoint.html#checkpoint_1","title":"\u4ec0\u4e48\u662f Checkpoint\uff1f","text":"

Checkpoint \u662f\u5728\u6a21\u578b\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4fdd\u5b58\u6a21\u578b\u72b6\u6001\u7684\u673a\u5236\u3002\u901a\u8fc7\u5b9a\u671f\u4fdd\u5b58 Checkpoint\uff0c\u53ef\u4ee5\u5728\u4ee5\u4e0b\u60c5\u51b5\u4e0b\u6062\u590d\u6a21\u578b\uff1a

  • \u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u65ad\uff08\u5982\u7cfb\u7edf\u5d29\u6e83\u6216\u624b\u52a8\u4e2d\u65ad\uff09
  • \u9700\u8981\u5728\u67d0\u4e2a\u8bad\u7ec3\u9636\u6bb5\u8fdb\u884c\u8bc4\u4f30
  • \u5e0c\u671b\u5728\u4e0d\u540c\u7684\u5b9e\u9a8c\u4e2d\u590d\u7528\u6a21\u578b
"},{"location":"admin/baize/best-practice/checkpoint.html#pytorch","title":"PyTorch","text":"

\u5728 PyTorch \u4e2d\uff0ctorch.save \u548c torch.load \u662f\u7528\u4e8e\u4fdd\u5b58\u548c\u52a0\u8f7d\u6a21\u578b\u7684\u57fa\u672c\u51fd\u6570\u3002

"},{"location":"admin/baize/best-practice/checkpoint.html#pytorch-checkpoint","title":"PyTorch \u4fdd\u5b58 Checkpoint","text":"

\u5728 PyTorch \u4e2d\uff0c\u901a\u5e38\u4f7f\u7528 state_dict \u4fdd\u5b58\u6a21\u578b\u7684\u53c2\u6570\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u793a\u4f8b\uff1a

import torch\nimport torch.nn as nn\n\n# \u5047\u8bbe\u6211\u4eec\u6709\u4e00\u4e2a\u7b80\u5355\u7684\u795e\u7ecf\u7f51\u7edc\nclass SimpleModel(nn.Module):\n    def __init__(self):\n        super(SimpleModel, self).__init__()\n        self.fc = nn.Linear(10, 2)\n\n    def forward(self, x):\n        return self.fc(x)\n\n# \u521d\u59cb\u5316\u6a21\u578b\u548c\u4f18\u5316\u5668\nmodel = SimpleModel()\noptimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n\n# \u8bad\u7ec3\u6a21\u578b...\n# \u4fdd\u5b58 Checkpoint\ncheckpoint_path = 'model_checkpoint.pth'\ntorch.save({\n    'epoch': 10,\n    'model_state_dict': model.state_dict(),\n    'optimizer_state_dict': optimizer.state_dict(),\n    'loss': 0.02,\n}, checkpoint_path)\n
"},{"location":"admin/baize/best-practice/checkpoint.html#pytorch-checkpoint_1","title":"PyTorch \u6062\u590d Checkpoint","text":"

\u52a0\u8f7d\u6a21\u578b\u65f6\uff0c\u9700\u8981\u6062\u590d\u6a21\u578b\u53c2\u6570\u548c\u4f18\u5316\u5668\u72b6\u6001\uff0c\u5e76\u7ee7\u7eed\u8bad\u7ec3\u6216\u63a8\u7406\uff1a

# \u6062\u590d Checkpoint\ncheckpoint = torch.load('model_checkpoint.pth')\nmodel.load_state_dict(checkpoint['model_state_dict'])\noptimizer.load_state_dict(checkpoint['optimizer_state_dict'])\nepoch = checkpoint['epoch']\nloss = checkpoint['loss']\n\n# \u7ee7\u7eed\u8bad\u7ec3\u6216\u63a8\u7406...\n
  • model_state_dict: \u6a21\u578b\u53c2\u6570
  • optimizer_state_dict: \u4f18\u5316\u5668\u72b6\u6001
  • epoch: \u5f53\u524d\u8bad\u7ec3\u8f6e\u6570
  • loss: \u635f\u5931\u503c
  • learning_rate: \u5b66\u4e60\u7387
  • best_accuracy: \u6700\u4f73\u51c6\u786e\u7387
"},{"location":"admin/baize/best-practice/checkpoint.html#tensorflow","title":"TensorFlow","text":"

TensorFlow \u63d0\u4f9b\u4e86 tf.train.Checkpoint \u7c7b\u6765\u7ba1\u7406\u6a21\u578b\u548c\u4f18\u5316\u5668\u7684\u4fdd\u5b58\u548c\u6062\u590d\u3002

"},{"location":"admin/baize/best-practice/checkpoint.html#tensorflow-checkpoint","title":"TensorFlow \u4fdd\u5b58 Checkpoint","text":"

\u4ee5\u4e0b\u662f\u4e00\u4e2a\u5728 TensorFlow \u4e2d\u4fdd\u5b58 Checkpoint \u7684\u793a\u4f8b\uff1a

import tensorflow as tf\n\n# \u5047\u8bbe\u6211\u4eec\u6709\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u578b\nmodel = tf.keras.Sequential([\n    tf.keras.layers.Dense(2, input_shape=(10,))\n])\noptimizer = tf.keras.optimizers.Adam(learning_rate=0.001)\n\n# \u5b9a\u4e49 Checkpoint\ncheckpoint = tf.train.Checkpoint(optimizer=optimizer, model=model)\ncheckpoint_dir = './checkpoints'\ncheckpoint_prefix = f'{checkpoint_dir}/ckpt'\n\n# \u8bad\u7ec3\u6a21\u578b...\n# \u4fdd\u5b58 Checkpoint\ncheckpoint.save(file_prefix=checkpoint_prefix)\n

Note

\u4f7f\u7528 AI Lab \u7684\u7528\u6237\uff0c\u53ef\u4ee5\u76f4\u63a5\u5c06\u9ad8\u6027\u80fd\u5b58\u50a8\u6302\u8f7d\u4e3a Checkpoint \u76ee\u5f55\uff0c\u4ee5\u63d0\u9ad8 Checkpoint \u4fdd\u5b58\u548c\u6062\u590d\u7684\u901f\u5ea6\u3002

"},{"location":"admin/baize/best-practice/checkpoint.html#tensorflow-checkpoint_1","title":"TensorFlow \u6062\u590d Checkpoint","text":"

\u52a0\u8f7d Checkpoint \u5e76\u6062\u590d\u6a21\u578b\u548c\u4f18\u5316\u5668\u72b6\u6001\uff1a

# \u6062\u590d Checkpoint\nlatest_checkpoint = tf.train.latest_checkpoint(checkpoint_dir)\ncheckpoint.restore(latest_checkpoint)\n\n# \u7ee7\u7eed\u8bad\u7ec3\u6216\u63a8\u7406...\n
"},{"location":"admin/baize/best-practice/checkpoint.html#tensorflow-checkpoint_2","title":"TensorFlow \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u7684 Checkpoint \u7ba1\u7406","text":"

TensorFlow \u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4e2d\u7ba1\u7406 Checkpoint \u7684\u4e3b\u8981\u65b9\u6cd5\u5982\u4e0b\uff1a

  • \u4f7f\u7528 tf.train.Checkpoint \u548c tf.train.CheckpointManager

    checkpoint = tf.train.Checkpoint(model=model, optimizer=optimizer)\nmanager = tf.train.CheckpointManager(checkpoint, directory='/tmp/model', max_to_keep=3)\n
  • \u5728\u5206\u5e03\u5f0f\u7b56\u7565\u4e2d\u4fdd\u5b58 Checkpoint

    strategy = tf.distribute.MirroredStrategy()\nwith strategy.scope():\n    checkpoint = tf.train.Checkpoint(model=model, optimizer=optimizer)\n    manager = tf.train.CheckpointManager(checkpoint, directory='/tmp/model', max_to_keep=3)\n
  • \u53ea\u5728\u4e3b\u8282\u70b9 (chief worker) \u4fdd\u5b58 Checkpoint

    if strategy.cluster_resolver.task_type == 'chief':\n    manager.save()\n
  • \u4f7f\u7528 MultiWorkerMirroredStrategy \u65f6\u7684\u7279\u6b8a\u5904\u7406

    strategy = tf.distribute.MultiWorkerMirroredStrategy()\nwith strategy.scope():\n    # \u6a21\u578b\u5b9a\u4e49\n    ...\n    checkpoint = tf.train.Checkpoint(model=model, optimizer=optimizer)\n    manager = tf.train.CheckpointManager(checkpoint, '/tmp/model', max_to_keep=3)\n\ndef _chief_worker(task_type, task_id):\n    return task_type is None or task_type == 'chief' or (task_type == 'worker' and task_id == 0)\n\nif _chief_worker(strategy.cluster_resolver.task_type, strategy.cluster_resolver.task_id):\n    manager.save()\n
  • \u4f7f\u7528\u5206\u5e03\u5f0f\u6587\u4ef6\u7cfb\u7edf

    \u786e\u4fdd\u6240\u6709\u5de5\u4f5c\u8282\u70b9\u90fd\u80fd\u8bbf\u95ee\u5230\u540c\u4e00\u4e2a Checkpoint \u76ee\u5f55\uff0c\u901a\u5e38\u4f7f\u7528\u5206\u5e03\u5f0f\u6587\u4ef6\u7cfb\u7edf\u5982 HDFS \u6216 GCS\u3002

  • \u5f02\u6b65\u4fdd\u5b58

    \u4f7f\u7528 tf.keras.callbacks.ModelCheckpoint \u5e76\u8bbe\u7f6e save_freq \u53c2\u6570\u53ef\u4ee5\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u5f02\u6b65\u4fdd\u5b58 Checkpoint\u3002

  • Checkpoint \u6062\u590d

    status = checkpoint.restore(manager.latest_checkpoint)\nstatus.assert_consumed()  # (1)!\n
    1. \u786e\u4fdd\u6240\u6709\u53d8\u91cf\u90fd\u88ab\u6062\u590d
  • \u6027\u80fd\u4f18\u5316

    • \u4f7f\u7528 tf.train.experimental.enable_mixed_precision_graph_rewrite() \u542f\u7528\u6df7\u5408\u7cbe\u5ea6\u8bad\u7ec3
    • \u8c03\u6574\u4fdd\u5b58\u9891\u7387\uff0c\u907f\u514d\u8fc7\u4e8e\u9891\u7e41\u7684 I/O \u64cd\u4f5c
    • \u8003\u8651\u4f7f\u7528 tf.saved_model.save() \u4fdd\u5b58\u6574\u4e2a\u6a21\u578b\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u6743\u91cd
"},{"location":"admin/baize/best-practice/checkpoint.html#_1","title":"\u6ce8\u610f\u4e8b\u9879","text":"
  1. \u5b9a\u671f\u4fdd\u5b58\uff1a\u6839\u636e\u8bad\u7ec3\u65f6\u95f4\u548c\u8d44\u6e90\u6d88\u8017\uff0c\u51b3\u5b9a\u5408\u9002\u7684\u4fdd\u5b58\u9891\u7387\u3002\u5982\u6bcf\u4e2a epoch \u6216\u6bcf\u9694\u4e00\u5b9a\u7684\u8bad\u7ec3\u6b65\u6570\u3002

  2. \u4fdd\u5b58\u591a\u4e2a Checkpoint\uff1a\u4fdd\u7559\u6700\u65b0\u7684\u51e0\u4e2a Checkpoint \u4ee5\u9632\u6b62\u6587\u4ef6\u635f\u574f\u6216\u4e0d\u9002\u7528\u7684\u60c5\u51b5\u3002

  3. \u8bb0\u5f55\u5143\u6570\u636e\uff1a\u5728 Checkpoint \u4e2d\u4fdd\u5b58\u989d\u5916\u7684\u4fe1\u606f\uff0c\u5982 epoch \u6570\u3001\u635f\u5931\u503c\u7b49\uff0c\u4ee5\u4fbf\u66f4\u597d\u5730\u6062\u590d\u8bad\u7ec3\u72b6\u6001\u3002

  4. \u4f7f\u7528\u7248\u672c\u63a7\u5236\uff1a\u4fdd\u5b58\u4e0d\u540c\u5b9e\u9a8c\u7684 Checkpoint\uff0c\u4fbf\u4e8e\u5bf9\u6bd4\u548c\u590d\u7528\u3002

  5. \u9a8c\u8bc1\u548c\u6d4b\u8bd5\uff1a\u5728\u8bad\u7ec3\u7684\u4e0d\u540c\u9636\u6bb5\u4f7f\u7528 Checkpoint \u8fdb\u884c\u9a8c\u8bc1\u548c\u6d4b\u8bd5\uff0c\u786e\u4fdd\u6a21\u578b\u6027\u80fd\u548c\u7a33\u5b9a\u6027\u3002

"},{"location":"admin/baize/best-practice/checkpoint.html#_2","title":"\u7ed3\u8bba","text":"

Checkpoint \u673a\u5236\u5728\u6df1\u5ea6\u5b66\u4e60\u8bad\u7ec3\u4e2d\u8d77\u5230\u4e86\u5173\u952e\u4f5c\u7528\u3002\u901a\u8fc7\u5408\u7406\u4f7f\u7528 PyTorch \u548c TensorFlow \u4e2d\u7684 Checkpoint \u529f\u80fd\uff0c \u53ef\u4ee5\u6709\u6548\u63d0\u9ad8\u8bad\u7ec3\u7684\u53ef\u9760\u6027\u548c\u6548\u7387\u3002\u5e0c\u671b\u672c\u6587\u6240\u8ff0\u7684\u65b9\u6cd5\u548c\u6700\u4f73\u5b9e\u8df5\u80fd\u5e2e\u52a9\u4f60\u66f4\u597d\u5730\u7ba1\u7406\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u3002

"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html","title":"\u90e8\u7f72 NFS \u505a\u6570\u636e\u96c6\u9884\u70ed","text":"

\u7f51\u7edc\u6587\u4ef6\u7cfb\u7edf (NFS) \u5141\u8bb8\u8fdc\u7a0b\u4e3b\u673a\u901a\u8fc7\u7f51\u7edc\u6302\u8f7d\u6587\u4ef6\uff0c\u5e76\u50cf\u672c\u5730\u6587\u4ef6\u7cfb\u7edf\u4e00\u6837\u8fdb\u884c\u4ea4\u4e92\u3002 \u8fd9\u4f7f\u7cfb\u7edf\u7ba1\u7406\u5458\u80fd\u591f\u5c06\u8d44\u6e90\u96c6\u4e2d\u5230\u7f51\u7edc\u670d\u52a1\u5668\u4e0a\u8fdb\u884c\u7ba1\u7406\u3002

\u6570\u636e\u96c6 \u662f AI Lab \u4e2d\u7684\u6838\u5fc3\u6570\u636e\u7ba1\u7406\u529f\u80fd\uff0c\u5c06 MLOps \u751f\u547d\u5468\u671f\u4e2d\u5bf9\u4e8e\u6570\u636e\u7684\u4f9d\u8d56\u7edf\u4e00\u62bd\u8c61\u4e3a\u6570\u636e\u96c6\uff1b \u652f\u6301\u7528\u6237\u5c06\u5404\u7c7b\u6570\u636e\u7eb3\u7ba1\u5230\u6570\u636e\u96c6\u5185\uff0c\u4ee5\u4fbf\u8bad\u7ec3\u4efb\u52a1\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6570\u636e\u96c6\u4e2d\u7684\u6570\u636e\u3002

\u5f53\u8fdc\u7aef\u6570\u636e\u4e0d\u5728\u5de5\u4f5c\u96c6\u7fa4\u5185\u65f6\uff0c\u6570\u636e\u96c6\u63d0\u4f9b\u4e86\u81ea\u52a8\u8fdb\u884c\u9884\u70ed\u7684\u80fd\u529b\uff0c\u652f\u6301 Git\u3001S3\u3001HTTP \u7b49\u6570\u636e\u63d0\u524d\u9884\u70ed\u5230\u96c6\u7fa4\u672c\u5730\u3002

\u6570\u636e\u96c6\u9700\u8981\u4e00\u4e2a\u652f\u6301 ReadWriteMany \u6a21\u5f0f\u7684\u5b58\u50a8\u670d\u52a1\u5bf9\u8fdc\u7aef\u6570\u636e\u8fdb\u884c\u9884\u70ed\uff0c\u63a8\u8350\u5728\u96c6\u7fa4\u5185\u90e8\u7f72 NFS\u3002

\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u4e86\u5982\u4f55\u5feb\u901f\u90e8\u7f72\u4e00\u4e2a NFS \u670d\u52a1\uff0c\u5e76\u5c06\u5176\u6dfb\u52a0\u4e3a\u96c6\u7fa4\u7684\u5b58\u50a8\u7c7b\u3002

"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#_1","title":"\u51c6\u5907\u5de5\u4f5c","text":"
  • NFS \u9ed8\u8ba4\u4f7f\u7528\u8282\u70b9\u7684\u5b58\u50a8\u4f5c\u4e3a\u6570\u636e\u7f13\u5b58\u70b9\uff0c\u56e0\u6b64\u9700\u8981\u786e\u8ba4\u78c1\u76d8\u672c\u8eab\u6709\u8db3\u591f\u7684\u78c1\u76d8\u7a7a\u95f4\u3002
  • \u5b89\u88c5\u65b9\u5f0f\u4f7f\u7528 Helm \u4e0e Kubectl\uff0c\u8bf7\u786e\u4fdd\u5df2\u7ecf\u5b89\u88c5\u597d\u3002
"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#_2","title":"\u90e8\u7f72\u8fc7\u7a0b","text":"

\u4e00\u5171\u9700\u8981\u5b89\u88c5\u51e0\u4e2a\u7ec4\u4ef6\uff1a

  • NFS Server
  • csi-driver-nfs
  • StorageClass
"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#_3","title":"\u521d\u59cb\u5316\u547d\u540d\u7a7a\u95f4","text":"

\u6240\u6709\u7cfb\u7edf\u7ec4\u4ef6\u4f1a\u5b89\u88c5\u5230 nfs \u547d\u540d\u7a7a\u95f4\u5185\uff0c\u56e0\u6b64\u9700\u8981\u5148\u521b\u5efa\u6b64\u547d\u540d\u7a7a\u95f4\u3002

kubectl create namespace nfs\n
"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#nfs-server","title":"\u5b89\u88c5 NFS Server","text":"

\u8fd9\u91cc\u662f\u4e00\u4e2a\u7b80\u5355\u7684 YAML \u90e8\u7f72\u6587\u4ef6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002

Note

\u6ce8\u610f\u68c0\u67e5 image:\uff0c\u6839\u636e\u96c6\u7fa4\u6240\u5728\u4f4d\u7f6e\u60c5\u51b5\uff0c\u53ef\u80fd\u9700\u8981\u4fee\u6539\u4e3a\u56fd\u5185\u955c\u50cf\u3002

nfs-server.yaml
kind: Service\napiVersion: v1\nmetadata:\n  name: nfs-server\n  namespace: nfs\n  labels:\n    app: nfs-server\nspec:\n  type: ClusterIP\n  selector:\n    app: nfs-server\n  ports:\n    - name: tcp-2049\n      port: 2049\n      protocol: TCP\n    - name: udp-111\n      port: 111\n      protocol: UDP\n---\nkind: Deployment\napiVersion: apps/v1\nmetadata:\n  name: nfs-server\n  namespace: nfs\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: nfs-server\n  template:\n    metadata:\n      name: nfs-server\n      labels:\n        app: nfs-server\n    spec:\n      nodeSelector:\n        \"kubernetes.io/os\": linux\n      containers:\n        - name: nfs-server\n          image: itsthenetwork/nfs-server-alpine:latest\n          env:\n            - name: SHARED_DIRECTORY\n              value: \"/exports\"\n          volumeMounts:\n            - mountPath: /exports\n              name: nfs-vol\n          securityContext:\n            privileged: true\n          ports:\n            - name: tcp-2049\n              containerPort: 2049\n              protocol: TCP\n            - name: udp-111\n              containerPort: 111\n              protocol: UDP\n      volumes:\n        - name: nfs-vol\n          hostPath:\n            path: /nfsdata  # (1)!\n            type: DirectoryOrCreate\n
  1. \u4fee\u6539\u6b64\u5904\u4ee5\u6307\u5b9a\u53e6\u4e00\u4e2a\u8def\u5f84\u6765\u5b58\u50a8 NFS \u5171\u4eab\u6570\u636e

\u5c06\u4e0a\u8ff0 YAML \u4fdd\u5b58\u4e3a nfs-server.yaml\uff0c\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u90e8\u7f72\uff1a

kubectl -n nfs apply -f nfs-server.yaml\n\n# \u68c0\u67e5\u90e8\u7f72\u7ed3\u679c\nkubectl -n nfs get pod,svc\n
"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#csi-driver-nfs","title":"\u5b89\u88c5 csi-driver-nfs","text":"

\u5b89\u88c5 csi-driver-nfs \u9700\u8981\u4f7f\u7528 Helm\uff0c\u8bf7\u6ce8\u610f\u63d0\u524d\u5b89\u88c5\u3002

# \u6dfb\u52a0 Helm \u4ed3\u5e93\nhelm repo add csi-driver-nfs https://mirror.ghproxy.com/https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts\nhelm repo update csi-driver-nfs\n\n# \u90e8\u7f72 csi-driver-nfs\n# \u8fd9\u91cc\u53c2\u6570\u4e3b\u8981\u4f18\u5316\u4e86\u955c\u50cf\u5730\u5740\uff0c\u52a0\u901f\u56fd\u5185\u4e0b\u8f7d\nhelm upgrade --install csi-driver-nfs csi-driver-nfs/csi-driver-nfs \\\n    --set image.nfs.repository=k8s.m.daocloud.io/sig-storage/nfsplugin \\\n    --set image.csiProvisioner.repository=k8s.m.daocloud.io/sig-storage/csi-provisioner \\\n    --set image.livenessProbe.repository=k8s.m.daocloud.io/sig-storage/livenessprobe \\\n    --set image.nodeDriverRegistrar.repository=k8s.m.daocloud.io/sig-storage/csi-node-driver-registrar \\\n    --namespace nfs \\\n    --version v4.5.0\n

Warning

csi-nfs-controller \u7684\u955c\u50cf\u5e76\u672a\u5168\u90e8\u652f\u6301 helm \u53c2\u6570\uff0c\u9700\u8981\u624b\u5de5\u4fee\u6539 deployment \u7684 image \u5b57\u6bb5\u3002 \u5c06 image: registry.k8s.io \u6539\u4e3a image: k8s.dockerproxy.com \u4ee5\u52a0\u901f\u56fd\u5185\u4e0b\u8f7d\u3002

"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#storageclass","title":"\u521b\u5efa StorageClass","text":"

\u5c06\u4ee5\u4e0b YAML \u4fdd\u5b58\u4e3a nfs-sc.yaml\uff1a

nfs-sc.yaml
apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n  name: nfs-csi\nprovisioner: nfs.csi.k8s.io\nparameters:\n  server: nfs-server.nfs.svc.cluster.local\n  share: /\n  # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume\n  # csi.storage.k8s.io/provisioner-secret-name: \"mount-options\"\n  # csi.storage.k8s.io/provisioner-secret-namespace: \"default\"\nreclaimPolicy: Retain\nvolumeBindingMode: Immediate\nmountOptions:\n  - nfsvers=4.1\n

\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u90e8\u7f72\uff1a

kubectl apply -f nfs-sc.yaml\n
"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#_4","title":"\u6d4b\u8bd5","text":"

\u521b\u5efa\u6570\u636e\u96c6\uff0c\u5e76\u5c06\u6570\u636e\u96c6\u7684 \u5173\u8054\u5b58\u50a8\u7c7b \uff0c\u9884\u70ed\u65b9\u5f0f \u8bbe\u7f6e\u4e3a NFS\uff0c\u5373\u53ef\u5c06\u8fdc\u7aef\u6570\u636e\u9884\u70ed\u5230\u96c6\u7fa4\u5185\u3002

\u6570\u636e\u96c6\u521b\u5efa\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u770b\u5230\u6570\u636e\u96c6\u7684\u72b6\u6001\u4e3a \u9884\u70ed\u4e2d\uff0c\u7b49\u5f85\u9884\u70ed\u5b8c\u6210\u540e\u5373\u53ef\u4f7f\u7528\u3002

"},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#_5","title":"\u5e38\u89c1\u95ee\u9898","text":""},{"location":"admin/baize/best-practice/deploy-nfs-in-worker.html#nfs-sbinmount","title":"\u7f3a\u5c11\u5fc5\u8981\u7684 NFS \u5ba2\u6237\u7aef\u8f6f\u4ef6 /sbin/mount","text":"
bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.\n

\u5728\u8fd0\u884c Kubernetes \u7684\u8282\u70b9\u673a\u5668\u4e0a\uff0c\u786e\u4fdd\u5df2\u5b89\u88c5 NFS \u5ba2\u6237\u7aef\uff1a

Ubuntu/DebianCentOS/RHEL

\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5 NFS \u5ba2\u6237\u7aef\uff1a

sudo apt-get update\nsudo apt-get install nfs-common\n

\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5 NFS \u5ba2\u6237\u7aef\uff1a

sudo yum install nfs-utils\n

\u68c0\u67e5 NFS \u670d\u52a1\u5668\u914d\u7f6e\uff0c\u786e\u4fdd NFS \u670d\u52a1\u5668\u6b63\u5728\u8fd0\u884c\u4e14\u914d\u7f6e\u6b63\u786e\u3002\u4f60\u53ef\u4ee5\u5c1d\u8bd5\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u624b\u52a8\u6302\u8f7d\u6765\u6d4b\u8bd5\uff1a

sudo mkdir -p /mnt/test\nsudo mount -t nfs <nfs-server>:/nfsdata /mnt/test\n
"},{"location":"admin/baize/best-practice/finetunel-llm.html","title":"\u4f7f\u7528 AI Lab \u5fae\u8c03 ChatGLM3 \u6a21\u578b","text":"

\u672c\u6587\u4ee5 ChatGLM3 \u6a21\u578b\u4e3a\u4f8b\uff0c\u6f14\u793a\u5982\u4f55\u5728 AI Lab \u4e2d\u4f7f\u7528 LoRA\uff08Low-Rank Adaptation\uff0c\u4f4e\u79e9\u81ea\u9002\u5e94\uff09\u5fae\u8c03 ChatGLM3 \u6a21\u578b\u3002 Demo \u7a0b\u5e8f\u6765\u81ea ChatGLM3 \u5b98\u65b9\u6848\u4f8b\u3002

\u5fae\u8c03\u7684\u5927\u81f4\u6d41\u7a0b\u4e3a\uff1a

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_1","title":"\u73af\u5883\u4f9d\u8d56","text":"
  • GPU \u663e\u5b58\u81f3\u5c11 20GB\uff0c\u63a8\u8350\u4f7f\u7528 RTX4090\u3001NVIDIA A/H \u7cfb\u5217\u663e\u5361
  • \u53ef\u7528\u78c1\u76d8\u7a7a\u95f4\u81f3\u5c11 200GB
  • CPU \u81f3\u5c11 8 \u6838\uff0c\u63a8\u8350 16 \u6838
  • \u5185\u5b58 64GB\uff0c\u63a8\u8350 128GB

Info

\u5728\u5f00\u59cb\u4f53\u9a8c\u4e4b\u524d\uff0c\u8bf7\u68c0\u67e5 AI \u7b97\u529b\u5e73\u53f0\u4ee5\u53ca AI Lab \u90e8\u7f72\u6b63\u786e\uff0cGPU \u961f\u5217\u8d44\u6e90\u521d\u59cb\u5316\u6210\u529f\uff0c\u4e14\u7b97\u529b\u8d44\u6e90\u5145\u8db3\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_2","title":"\u6570\u636e\u51c6\u5907","text":"

\u5229\u7528 AI Lab \u63d0\u4f9b\u7684\u6570\u636e\u96c6\u7ba1\u7406\u529f\u80fd\uff0c\u5feb\u901f\u5c06\u5fae\u8c03\u5927\u6a21\u578b\u6240\u9700\u7684\u6570\u636e\u8fdb\u884c\u9884\u70ed\u53ca\u6301\u4e45\u5316\uff0c\u51cf\u5c11\u56e0\u4e3a\u51c6\u5907\u6570\u636e\u5bfc\u81f4\u7684 GPU \u8d44\u6e90\u5360\u7528\uff0c\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u6548\u7387\u3002

\u5728\u6570\u636e\u96c6\u5217\u8868\u9875\u9762\uff0c\u521b\u5efa\u9700\u8981\u7684\u6570\u636e\u8d44\u6e90\uff0c\u8fd9\u4e9b\u8d44\u6e90\u5305\u542b\u4e86 ChatGLM3 \u4ee3\u7801\uff0c\u4e5f\u53ef\u4ee5\u662f\u6570\u636e\u6587\u4ef6\uff0c\u6240\u6709\u8fd9\u4e9b\u6570\u636e\u90fd\u53ef\u4ee5\u901a\u8fc7\u6570\u636e\u96c6\u5217\u8868\u6765\u7edf\u4e00\u7ba1\u7406\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_3","title":"\u4ee3\u7801\u53ca\u6a21\u578b\u6587\u4ef6","text":"

ChatGLM3 \u662f\u667a\u8c31 AI \u548c\u6e05\u534e\u5927\u5b66 KEG \u5b9e\u9a8c\u5ba4\u8054\u5408\u53d1\u5e03\u7684\u5bf9\u8bdd\u9884\u8bad\u7ec3\u6a21\u578b\u3002

\u5148\u62c9\u53d6 ChatGLM3 \u4ee3\u7801\u4ed3\u5e93\uff0c\u4e0b\u8f7d\u9884\u8bad\u7ec3\u6a21\u578b\uff0c\u7528\u4e8e\u540e\u7eed\u7684\u5fae\u8c03\u4efb\u52a1\u3002

AI Lab \u4f1a\u5728\u540e\u53f0\u8fdb\u884c\u5168\u81ea\u52a8\u6570\u636e\u9884\u70ed\uff0c\u4ee5\u4fbf\u540e\u7eed\u7684\u4efb\u52a1\u80fd\u591f\u5feb\u901f\u8bbf\u95ee\u6570\u636e\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#advertisegen","title":"AdvertiseGen \u6570\u636e\u96c6","text":"

\u56fd\u5185\u6570\u636e\u53ef\u4ee5\u4ece Tsinghua Cloud \u76f4\u63a5\u83b7\u53d6\uff0c\u8fd9\u91cc\u4f7f\u7528 HTTP \u7684\u6570\u636e\u6e90\u65b9\u5f0f\u3002

\u6ce8\u610f\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u9700\u8981\u7b49\u5f85\u6570\u636e\u96c6\u9884\u70ed\u5b8c\u6210\uff0c\u4e00\u822c\u5f88\u5feb\uff0c\u6839\u636e\u60a8\u7684\u7f51\u7edc\u60c5\u51b5\u800c\u5b9a\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_4","title":"\u5fae\u8c03\u8f93\u51fa\u6570\u636e","text":"

\u540c\u65f6\uff0c\u60a8\u9700\u8981\u51c6\u5907\u4e00\u4e2a\u7a7a\u7684\u6570\u636e\u96c6\uff0c\u7528\u4e8e\u5b58\u653e\u5fae\u8c03\u4efb\u52a1\u5b8c\u6210\u540e\u8f93\u51fa\u7684\u6a21\u578b\u6587\u4ef6\uff0c\u8fd9\u91cc\u521b\u5efa\u4e00\u4e2a\u7a7a\u7684\u6570\u636e\u96c6\uff0c\u4ee5 PVC \u4e3a\u4f8b\u3002

Warning

\u6ce8\u610f\u9700\u8981\u4f7f\u7528\u652f\u6301 ReadWriteMany \u7684\u5b58\u50a8\u7c7b\u578b\uff0c\u4ee5\u4fbf\u540e\u7eed\u7684\u4efb\u52a1\u80fd\u591f\u5feb\u901f\u8bbf\u95ee\u6570\u636e\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_5","title":"\u73af\u5883\u51c6\u5907","text":"

\u5bf9\u4e8e\u6a21\u578b\u5f00\u53d1\u8005\u6765\u8bf4\uff0c\u51c6\u5907\u6a21\u578b\u5f00\u53d1\u9700\u8981\u7684 Python \u73af\u5883\u4f9d\u8d56\u662f\u975e\u5e38\u91cd\u8981\u7684\uff0c\u4f20\u7edf\u505a\u6cd5\u5c06\u73af\u5883\u4f9d\u8d56\u76f4\u63a5\u6253\u5305\u5230\u5f00\u53d1\u5de5\u5177\u7684\u955c\u50cf\u4e2d\uff0c \u6216\u8005\u76f4\u63a5\u5728\u672c\u5730\u73af\u5883\u4e2d\u5b89\u88c5\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u4f1a\u5bfc\u81f4\u73af\u5883\u4f9d\u8d56\u7684\u4e0d\u4e00\u81f4\uff0c\u800c\u4e14\u4e0d\u5229\u4e8e\u73af\u5883\u7684\u7ba1\u7406\u548c\u4f9d\u8d56\u66f4\u65b0\u53ca\u540c\u6b65\u3002

AI Lab \u63d0\u4f9b\u4e86\u73af\u5883\u7ba1\u7406\u7684\u80fd\u529b\uff0c\u5c06 Python \u73af\u5883\u4f9d\u8d56\u5305\u7ba1\u7406\u548c\u5f00\u53d1\u5de5\u5177\u3001\u4efb\u52a1\u955c\u50cf\u7b49\u8fdb\u884c\u89e3\u8026\uff0c\u89e3\u51b3\u4e86\u4f9d\u8d56\u7ba1\u7406\u6df7\u4e71\uff0c\u73af\u5883\u4e0d\u4e00\u81f4\u7b49\u95ee\u9898\u3002

\u8fd9\u91cc\u4f7f\u7528 AI Lab \u63d0\u4f9b\u7684\u73af\u5883\u7ba1\u7406\u529f\u80fd\uff0c\u521b\u5efa ChatGLM3 \u5fae\u8c03\u6240\u9700\u7684\u73af\u5883\uff0c\u4ee5\u5907\u540e\u7eed\u4f7f\u7528\u3002

Warning

  1. ChatGLM \u4ed3\u5e93\u5185\u6709 requirements.txt \u6587\u4ef6\uff0c\u91cc\u9762\u5305\u542b\u4e86 ChatGLM3 \u5fae\u8c03\u6240\u9700\u7684\u73af\u5883\u4f9d\u8d56
  2. \u672c\u6b21\u5fae\u8c03\u6ca1\u6709\u7528\u5230 deepspeed \u548c mpi4py \u5305\uff0c\u5efa\u8bae\u4ece requirements.txt \u6587\u4ef6\u4e2d\u5c06\u5176\u6ce8\u91ca\u6389\uff0c\u5426\u5219\u53ef\u80fd\u51fa\u73b0\u5305\u7f16\u8bd1\u4e0d\u901a\u8fc7\u7684\u60c5\u51b5

\u5728\u73af\u5883\u7ba1\u7406\u5217\u8868\uff0c\u60a8\u53ef\u4ee5\u5feb\u901f\u521b\u5efa\u4e00\u4e2a Python \u73af\u5883\uff0c\u5e76\u901a\u8fc7\u7b80\u5355\u7684\u8868\u5355\u914d\u7f6e\u6765\u5b8c\u6210\u73af\u5883\u7684\u521b\u5efa\uff1b\u8fd9\u91cc\u9700\u8981\u4e00\u4e2a Python 3.11.x \u73af\u5883\uff0c

\u56e0\u4e3a\u672c\u5b9e\u9a8c\u9700\u8981\u4f7f\u7528 CUDA\uff0c\u6240\u4ee5\u5728\u8fd9\u91cc\u9700\u8981\u914d\u7f6e GPU \u8d44\u6e90\uff0c\u7528\u4e8e\u9884\u70ed\u9700\u8981\u8d44\u6e90\u7684\u4f9d\u8d56\u5e93\u3002

\u521b\u5efa\u73af\u5883\uff0c\u9700\u8981\u53bb\u4e0b\u8f7d\u4e00\u7cfb\u5217\u7684 Python \u4f9d\u8d56\uff0c\u6839\u636e\u60a8\u7684\u5b9e\u9645\u4f4d\u7f6e\u4e0d\u540c\uff0c\u53ef\u80fd\u4f1a\u6709\u4e0d\u540c\u7684\u4e0b\u8f7d\u901f\u5ea6\uff0c\u8fd9\u91cc\u4f7f\u7528\u4e86\u56fd\u5185\u7684\u955c\u50cf\u52a0\u901f\uff0c\u53ef\u4ee5\u52a0\u5feb\u4e0b\u8f7d\u901f\u5ea6\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#notebook-ide","title":"\u4f7f\u7528 Notebook \u4f5c\u4e3a IDE","text":"

AI Lab \u63d0\u4f9b\u4e86 Notebook \u4f5c\u4e3a IDE \u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u8ba9\u7528\u6237\u5728\u6d4f\u89c8\u5668\u4e2d\u76f4\u63a5\u7f16\u5199\u4ee3\u7801\uff0c\u8fd0\u884c\u4ee3\u7801\uff0c\u67e5\u770b\u4ee3\u7801\u8fd0\u884c\u7ed3\u679c\uff0c\u975e\u5e38\u9002\u5408\u4e8e\u6570\u636e\u5206\u6790\u3001\u673a\u5668\u5b66\u4e60\u3001\u6df1\u5ea6\u5b66\u4e60\u7b49\u9886\u57df\u7684\u5f00\u53d1\u3002

\u60a8\u53ef\u4ee5\u4f7f\u7528 AI Lab \u63d0\u4f9b\u7684 JupyterLab Notebook \u6765\u8fdb\u884c ChatGLM3 \u7684\u5fae\u8c03\u4efb\u52a1\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#jupyterlab-notebook","title":"\u521b\u5efa JupyterLab Notebook","text":"

\u5728 Notebook \u5217\u8868\u4e2d\uff0c\u53ef\u4ee5\u6839\u636e\u9875\u9762\u64cd\u4f5c\u6307\u5f15\uff0c\u521b\u5efa\u4e00\u4e2a Notebook\u3002\u6ce8\u610f\u60a8\u9700\u8981\u6839\u636e\u524d\u6587\u63d0\u5230\u7684\u8d44\u6e90\u8981\u6c42\u6765\u914d\u7f6e\u5bf9\u5e94\u7684 Notebook \u8d44\u6e90\u53c2\u6570\uff0c \u907f\u514d\u540e\u7eed\u56e0\u4e3a\u8d44\u6e90\u95ee\u9898\uff0c\u5f71\u54cd\u5fae\u8c03\u8fc7\u7a0b\u3002

Note

\u5728\u521b\u5efa Notebook \u65f6\uff0c\u53ef\u4ee5\u5c06\u4e4b\u524d\u9884\u52a0\u8f7d\u7684\u6a21\u578b\u4ee3\u7801\u6570\u636e\u96c6\u548c\u73af\u5883\uff0c\u76f4\u63a5\u6302\u8f7d\u5230 Notebook \u4e2d\uff0c\u6781\u5927\u8282\u7701\u4e86\u6570\u636e\u51c6\u5907\u7684\u65f6\u95f4\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_6","title":"\u6302\u8f7d\u6570\u636e\u96c6\u548c\u4ee3\u7801","text":"

\u6ce8\u610f\uff1aChatGLM3 \u7684\u4ee3\u7801\u6587\u4ef6\u6302\u8f7d\u5230\u4e86 /home/jovyan/ChatGLM3 \u76ee\u5f55\u4e0b\uff0c\u540c\u65f6\u60a8\u4e5f\u9700\u8981\u5c06 AdvertiseGen \u6570\u636e\u96c6\u6302\u8f7d\u5230 /home/jovyan/ChatGLM3/finetune_demo/data/AdvertiseGen \u76ee\u5f55\u4e0b\uff0c\u4ee5\u4fbf\u540e\u7eed\u7684\u5fae\u8c03\u4efb\u52a1\u80fd\u591f\u8bbf\u95ee\u6570\u636e\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#pvc","title":"\u6302\u8f7d PVC \u5230\u6a21\u578b\u8f93\u51fa\u6587\u4ef6\u5939","text":"

\u672c\u6b21\u4f7f\u7528\u7684\u6a21\u578b\u8f93\u51fa\u4f4d\u7f6e\u5728 /home/jovyan/ChatGLM3/finetune_demo/output \u76ee\u5f55\u4e0b\uff0c\u53ef\u4ee5\u5c06\u4e4b\u524d\u521b\u5efa\u7684 PVC \u6570\u636e\u96c6\u6302\u8f7d\u5230\u8fd9\u4e2a\u76ee\u5f55\u4e0b\uff0c \u8fd9\u6837\u8bad\u7ec3\u8f93\u51fa\u7684\u6a21\u578b\u5c31\u53ef\u4ee5\u4fdd\u5b58\u5230\u6570\u636e\u96c6\u4e2d\uff0c\u540e\u7eed\u6a21\u578b\u63a8\u7406\u7b49\u4efb\u52a1\u53ef\u4ee5\u76f4\u63a5\u8bbf\u95ee\u3002

\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u770b\u5230 Notebook \u7684\u754c\u9762\uff0c\u60a8\u53ef\u4ee5\u76f4\u63a5\u5728 Notebook \u4e2d\u7f16\u5199\u4ee3\u7801\uff0c\u8fd0\u884c\u4ee3\u7801\uff0c\u67e5\u770b\u4ee3\u7801\u8fd0\u884c\u7ed3\u679c\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#chatglm3","title":"\u5fae\u8c03 ChatGLM3","text":"

\u5f53\u60a8\u8fdb\u5165\u5230 Notebook \u4e2d\u540e\uff0c\u53ef\u4ee5\u5728 Notebook \u4fa7\u8fb9\u680f\u4f1a\u53d1\u73b0\u6709\u4e00\u4e2a File Browser \u7684\u9009\u9879\uff0c\u53ef\u4ee5\u770b\u5230\u4e4b\u524d\u6302\u8f7d\u7684\u6570\u636e\u96c6\u548c\u4ee3\u7801\uff0c\u5728\u8fd9\u91cc\u627e\u5230 ChatGLM3 \u7684\u6587\u4ef6\u5939\u3002

\u60a8\u53ef\u4ee5\u770b\u5230 ChatGLM3 \u7684\u5fae\u8c03\u4ee3\u7801\u5728 finetune_demo \u6587\u4ef6\u5939\u4e2d\uff0c\u8fd9\u91cc\u53ef\u4ee5\u76f4\u63a5\u6253\u5f00 lora_finetune.ipynb \u6587\u4ef6\uff0c\u8fd9\u662f ChatGLM3 \u7684\u5fae\u8c03\u4ee3\u7801\u3002

\u9996\u5148\uff0c\u6839\u636e README.md \u7684\u8bf4\u660e\uff0c\u60a8\u53ef\u4ee5\u4e86\u89e3\u5230\u6574\u4e2a\u5fae\u8c03\u7684\u8fc7\u7a0b\uff0c\u5efa\u8bae\u5148\u9605\u8bfb\u4e00\u904d\uff0c\u786e\u4fdd\u57fa\u7840\u7684\u73af\u5883\u4f9d\u8d56\u548c\u6570\u636e\u51c6\u5907\u5de5\u4f5c\u90fd\u5df2\u7ecf\u5b8c\u6210\u3002

\u6253\u5f00\u7ec8\u7aef\uff0c\u5e76\u4f7f\u7528 conda \u5207\u6362\u5230\u60a8\u63d0\u524d\u9884\u70ed\u7684\u73af\u5883\u4e2d\uff0c\u6b64\u73af\u5883\u4e0e JupyterLab Kernel \u4fdd\u6301\u4e00\u81f4\uff0c\u4ee5\u4fbf\u540e\u7eed\u7684\u4ee3\u7801\u8fd0\u884c\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_7","title":"\u6570\u636e\u9884\u5904\u7406","text":"

\u9996\u5148\uff0c\u60a8\u9700\u8981\u5c06 AdvertiseGen \u6570\u636e\u96c6\u8fdb\u884c\u9884\u5904\u7406\uff0c\u5bf9\u6570\u636e\u8fdb\u884c\u6807\u51c6\u5316\u5904\u7406\uff0c\u4f7f\u5176\u7b26\u5408 Lora \u9884\u8bad\u7ec3\u7684\u6807\u51c6\u683c\u5f0f\u8981\u6c42\uff1b \u8fd9\u91cc\u5c06\u5904\u7406\u540e\u7684\u6570\u636e\u4fdd\u5b58\u5230 AdvertiseGen_fix \u6587\u4ef6\u5939\u4e2d\u3002

import json\nfrom typing import Union\nfrom pathlib import Path\n\ndef _resolve_path(path: Union[str, Path]) -> Path:\n    return Path(path).expanduser().resolve()\n\ndef _mkdir(dir_name: Union[str, Path]):\n    dir_name = _resolve_path(dir_name)\n    if not dir_name.is_dir():\n        dir_name.mkdir(parents=True, exist_ok=False)\n\ndef convert_adgen(data_dir: Union[str, Path], save_dir: Union[str, Path]):\n    def _convert(in_file: Path, out_file: Path):\n        _mkdir(out_file.parent)\n        with open(in_file, encoding='utf-8') as fin:\n            with open(out_file, 'wt', encoding='utf-8') as fout:\n                for line in fin:\n                    dct = json.loads(line)\n                    sample = {'conversations': [{'role': 'user', 'content': dct['content']},\n                                                {'role': 'assistant', 'content': dct['summary']}]}\n                    fout.write(json.dumps(sample, ensure_ascii=False) + '\\n')\n\n    data_dir = _resolve_path(data_dir)\n    save_dir = _resolve_path(save_dir)\n\n    train_file = data_dir / 'train.json'\n    if train_file.is_file():\n        out_file = save_dir / train_file.relative_to(data_dir)\n        _convert(train_file, out_file)\n\n    dev_file = data_dir / 'dev.json'\n    if dev_file.is_file():\n        out_file = save_dir / dev_file.relative_to(data_dir)\n        _convert(dev_file, out_file)\n\nconvert_adgen('data/AdvertiseGen', 'data/AdvertiseGen_fix')\n

\u4e3a\u4e86\u8282\u7701\u8c03\u8bd5\u7684\u65f6\u95f4\uff0c\u60a8\u53ef\u4ee5\u5c06 /home/jovyan/ChatGLM3/finetune_demo/data/AdvertiseGen_fix/dev.json \u4e2d\u7684\u6570\u636e\u91cf\u7f29\u51cf\u5230 50 \u6761\uff0c\u8fd9\u91cc\u7684\u6570\u636e\u662f JSON \u683c\u5f0f\uff0c\u5904\u7406\u8d77\u6765\u4e5f\u662f\u6bd4\u8f83\u65b9\u4fbf\u7684\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#lora","title":"\u672c\u5730 LoRA \u5fae\u8c03\u6d4b\u8bd5","text":"

\u5b8c\u6210\u6570\u636e\u7684\u9884\u5904\u7406\u4e4b\u540e\uff0c\u57fa\u672c\u4e0a\u60a8\u5c31\u53ef\u4ee5\u76f4\u63a5\u5fae\u8c03\u6d4b\u8bd5\u4e86\uff0c\u53ef\u4ee5\u5728 /home/jovyan/ChatGLM3/finetune_demo/configs/lora.yaml \u6587\u4ef6\u4e2d\u914d\u7f6e\u5fae\u8c03\u7684\u53c2\u6570\uff0c\u4e00\u822c\u9700\u8981\u5173\u6ce8\u7684\u53c2\u6570\u57fa\u672c\u5982\u4e0b\uff1a

\u65b0\u5f00\u4e00\u4e2a\u7ec8\u7aef\u7a97\u53e3\uff0c\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u5373\u53ef\u8fdb\u884c\u672c\u5730\u5fae\u8c03\u6d4b\u8bd5\uff0c\u8bf7\u786e\u4fdd\u53c2\u6570\u914d\u7f6e\u548c\u8def\u5f84\u6b63\u786e\uff1a

!CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE=\"1\" NCCL_IB_DISABLE=\"1\" python finetune_hf.py  data/AdvertiseGen_fix  ./chatglm3-6b  configs/lora.yaml\n

\u5728\u8fd9\u6761\u547d\u4ee4\u4e2d\uff0c

  • finetune_hf.py \u662f ChatGLM3 \u4ee3\u7801\u4e2d\u7684\u5fae\u8c03\u811a\u672c
  • data/AdvertiseGen_fix \u662f\u60a8\u9884\u5904\u7406\u540e\u7684\u6570\u636e\u96c6
  • ./chatglm3-6b \u662f\u60a8\u9884\u8bad\u7ec3\u6a21\u578b\u7684\u8def\u5f84
  • configs/lora.yaml \u662f\u5fae\u8c03\u7684\u914d\u7f6e\u6587\u4ef6

\u5fae\u8c03\u8fc7\u7a0b\u4e2d\u53ef\u4ee5\u4f7f\u7528 nvidia-smi \u547d\u4ee4\u67e5\u770b GPU \u663e\u5b58\u4f7f\u7528\u60c5\u51b5\uff1a

\u5728\u5fae\u8c03\u5b8c\u6210\u540e\uff0c\u5728 finetune_demo \u76ee\u5f55\u4e0b\u4f1a\u751f\u6210\u4e00\u4e2a output \u76ee\u5f55\uff0c\u91cc\u9762\u5305\u542b\u4e86\u5fae\u8c03\u7684\u6a21\u578b\u6587\u4ef6\uff0c \u8fd9\u6837\u5fae\u8c03\u7684\u6a21\u578b\u6587\u4ef6\u5c31\u76f4\u63a5\u4fdd\u5b58\u5230\u60a8\u4e4b\u524d\u521b\u5efa\u7684 PVC \u6570\u636e\u96c6\u4e2d\u4e86\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_8","title":"\u5fae\u8c03\u4efb\u52a1\u63d0\u4ea4","text":"

\u5728\u672c\u5730\u5fae\u8c03\u6d4b\u8bd5\u5b8c\u6210\u540e\uff0c\u786e\u4fdd\u60a8\u7684\u4ee3\u7801\u548c\u6570\u636e\u6ca1\u6709\u95ee\u9898\uff0c\u63a5\u4e0b\u6765\u53ef\u4ee5\u5c06\u5fae\u8c03\u4efb\u52a1\u63d0\u4ea4\u5230AI Lab \u4e2d\uff0c\u8fdb\u884c\u5927\u89c4\u6a21\u7684\u8bad\u7ec3\u548c\u5fae\u8c03\u4efb\u52a1\u3002

\u8fd9\u4e5f\u662f\u63a8\u8350\u7684\u6a21\u578b\u5f00\u53d1\u548c\u5fae\u8c03\u6d41\u7a0b\uff0c\u5148\u5728\u672c\u5730\u8fdb\u884c\u5fae\u8c03\u6d4b\u8bd5\uff0c\u786e\u4fdd\u4ee3\u7801\u548c\u6570\u636e\u6ca1\u6709\u95ee\u9898\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_9","title":"\u4f7f\u7528\u754c\u9762\u63d0\u4ea4\u5fae\u8c03\u4efb\u52a1","text":"

\u8fd9\u91cc\u4f7f\u7528 Pytorch \u6765\u521b\u5efa\u5fae\u8c03\u4efb\u52a1\uff0c\u6839\u636e\u60a8\u7684\u5b9e\u9645\u60c5\u51b5\uff0c\u9009\u62e9\u9700\u8981\u4f7f\u7528\u54ea\u4e2a\u96c6\u7fa4\u7684\u8d44\u6e90\uff0c\u6ce8\u610f\u9700\u8981\u6ee1\u8db3\u524d\u9762\u8d44\u6e90\u51c6\u5907\u4e2d\u63d0\u53ca\u7684\u8d44\u6e90\u8981\u6c42\u3002

  • \u955c\u50cf\uff1a\u53ef\u76f4\u63a5\u4f7f\u7528 baizectl \u63d0\u4f9b\u7684\u6a21\u578b\u955c\u50cf
  • \u542f\u52a8\u547d\u4ee4\uff0c\u6839\u636e\u60a8\u5728 Notebook \u4e2d\u4f7f\u7528 LoRA \u5fae\u8c03\u7684\u7ecf\u9a8c\uff0c\u4ee3\u7801\u6587\u4ef6\u548c\u6570\u636e\u5728 /home/jovyan/ChatGLM3/finetune_demo \u76ee\u5f55\u4e0b\uff0c\u6240\u4ee5\u60a8\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u4e2a\u8def\u5f84\uff1a

    bash -c \"cd /home/jovyan/ChatGLM3/finetune_demo && CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE=\"1\" NCCL_IB_DISABLE=\"1\" python finetune_hf.py  data/AdvertiseGen_fix  ./chatglm3-6b  configs/lora.yaml\"\n
  • \u6302\u8f7d\u73af\u5883\uff0c\u8fd9\u6837\u4e4b\u524d\u9884\u52a0\u8f7d\u7684\u73af\u5883\u4f9d\u8d56\u4e0d\u4ec5\u53ef\u4ee5\u5728 Notebook \u4e2d\u4f7f\u7528\uff0c\u540c\u65f6\u4e5f\u53ef\u4ee5\u5728\u4efb\u52a1\u4e2d\u4f7f\u7528

  • \u6570\u636e\u96c6\uff1a\u76f4\u63a5\u4f7f\u7528\u4e4b\u524d\u9884\u70ed\u7684\u6570\u636e\u96c6
    • \u5c06\u6a21\u578b\u8f93\u51fa\u8def\u5f84\u8bbe\u7f6e\u4e3a\u4e4b\u524d\u521b\u5efa\u7684 PVC \u6570\u636e\u96c6
    • \u5c06 AdvertiseGen \u6570\u636e\u96c6\u6302\u8f7d\u5230 /home/jovyan/ChatGLM3/finetune_demo/data/AdvertiseGen \u76ee\u5f55\u4e0b
  • \u914d\u7f6e\u8db3\u591f\u7684 GPU \u8d44\u6e90\uff0c\u786e\u4fdd\u5fae\u8c03\u4efb\u52a1\u80fd\u591f\u6b63\u5e38\u8fd0\u884c

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_10","title":"\u67e5\u770b\u4efb\u52a1\u72b6\u6001","text":"

\u4efb\u52a1\u6210\u529f\u63d0\u4ea4\u540e\uff0c\u60a8\u53ef\u4ee5\u5728\u4efb\u52a1\u5217\u8868\u4e2d\u5b9e\u65f6\u67e5\u770b\u4efb\u52a1\u7684\u8bad\u7ec3\u8fdb\u5c55\uff0c\u8fd9\u91cc\u60a8\u53ef\u4ee5\u770b\u5230\u4efb\u52a1\u7684\u72b6\u6001\u3001\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3001\u65e5\u5fd7\u7b49\u4fe1\u606f\u3002

\u67e5\u770b\u4efb\u52a1\u65e5\u5fd7

\u4efb\u52a1\u8fd0\u884c\u5b8c\u6210\u540e\uff0c\u60a8\u53ef\u4ee5\u5728\u6570\u636e\u8f93\u51fa\u7684\u6570\u636e\u96c6\u4e2d\u67e5\u770b\u5fae\u8c03\u7684\u6a21\u578b\u6587\u4ef6\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4f7f\u7528\u8fd9\u4e2a\u6a21\u578b\u6587\u4ef6\u8fdb\u884c\u540e\u7eed\u7684\u63a8\u7406\u4efb\u52a1\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#baizectl","title":"\u4f7f\u7528 baizectl \u63d0\u4ea4\u4efb\u52a1","text":"

AI Lab \u7684 Notebook \u652f\u6301\u514d\u8ba4\u8bc1\u76f4\u63a5\u4f7f\u7528 baizectl \u547d\u4ee4\u884c\u5de5\u5177\uff0c \u5982\u679c\u60a8\u559c\u6b22\u4f7f\u7528 CLI\uff0c\u90a3\u4e48\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528 baizectl \u63d0\u4f9b\u7684\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u63d0\u4ea4\u4efb\u52a1\u3002

baizectl job submit --name finetunel-chatglm3 -t PYTORCH \\\n    --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --priority baize-high-priority \\\n    --resources cpu=8,memory=16Gi,nvidia.com/gpu=1 \\\n    --workers 1 \\\n    --queue default \\\n    --working-dir /home/jovyan/ChatGLM3 \\\n    --datasets AdvertiseGen:/home/jovyan/ChatGLM3/finetune_demo/data/AdvertiseGen  \\\n    --datasets output:/home/jovyan/ChatGLM3/finetune_demo/output  \\\n    --labels job_type=pytorch \\\n    --restart-policy on-failure \\\n    -- bash -c \"cd /home/jovyan/ChatGLM3/finetune_demo && CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE=\"1\" NCCL_IB_DISABLE=\"1\" python finetune_hf.py  data/AdvertiseGen_fix  ./chatglm3-6b  configs/lora.yaml\"\n

\u5982\u679c\u5e0c\u671b\u4e86\u89e3\u66f4\u591a baizectl \u7684\u4f7f\u7528\u8bf4\u660e\uff0c\u53ef\u4ee5\u67e5\u770b baizectl \u4f7f\u7528\u6587\u6863\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_11","title":"\u6a21\u578b\u63a8\u7406","text":"

\u5728\u5fae\u8c03\u4efb\u52a1\u5b8c\u6210\u540e\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u5fae\u8c03\u7684\u6a21\u578b\u8fdb\u884c\u63a8\u7406\u4efb\u52a1\uff0c\u8fd9\u91cc\u60a8\u53ef\u4ee5\u4f7f\u7528AI Lab \u63d0\u4f9b\u7684\u63a8\u7406\u670d\u52a1\uff0c\u5c06\u8f93\u51fa\u540e\u7684\u6a21\u578b\u521b\u5efa\u4e3a\u63a8\u7406\u670d\u52a1\u3002

\u5728\u63a8\u7406\u670d\u52a1\u5217\u8868\u4e2d\uff0c\u60a8\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u63a8\u7406\u670d\u52a1\uff0c\u5728\u9009\u62e9\u6a21\u578b\u7684\u4f4d\u7f6e\uff0c\u9009\u62e9\u4e4b\u524d\u63a8\u7406\u8f93\u51fa\u7684\u6570\u636e\u96c6\uff0c\u5e76\u914d\u7f6e\u6a21\u578b\u8def\u5f84\u3002

\u6709\u5173\u6a21\u578b\u8d44\u6e90\u8981\u6c42\u3001\u63a8\u7406\u670d\u52a1\u7684 GPU \u8d44\u6e90\u8981\u6c42\uff0c\u9700\u8981\u6839\u636e\u6a21\u578b\u7684\u5927\u5c0f\u548c\u63a8\u7406\u7684\u5e76\u53d1\u91cf\u6765\u914d\u7f6e\uff0c\u8fd9\u91cc\u60a8\u53ef\u4ee5\u6839\u636e\u4e4b\u524d\u5fae\u8c03\u4efb\u52a1\u7684\u8d44\u6e90\u914d\u7f6e\u6765\u914d\u7f6e\u3002

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_12","title":"\u914d\u7f6e\u6a21\u578b\u8fd0\u884c\u65f6","text":"

\u914d\u7f6e\u6a21\u578b\u7684\u8fd0\u884c\u65f6\u5c24\u4e3a\u91cd\u8981\uff0c\u76ee\u524d AI Lab \u5df2\u7ecf\u652f\u6301 vLLM \u4f5c\u4e3a\u6a21\u578b\u63a8\u7406\u670d\u52a1\u7684\u8fd0\u884c\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u9009\u62e9 vLLM\u3002

vLLM \u652f\u6301\u975e\u5e38\u4e30\u5bcc\u7684\u5927\u8bed\u8a00\u6a21\u578b\uff0c\u5efa\u8bae\u8bbf\u95ee vLLM \u4e86\u89e3\u66f4\u591a\u4fe1\u606f\uff0c\u8fd9\u4e9b\u6a21\u578b\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u5728 AI Lab \u4e2d\u4f7f\u7528\u3002

\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u60a8\u53ef\u4ee5\u5728\u63a8\u7406\u670d\u52a1\u5217\u8868\u4e2d\u770b\u5230\u60a8\u521b\u5efa\u7684\u63a8\u7406\u670d\u52a1\uff0c\u5728\u6a21\u578b\u670d\u52a1\u5217\u8868\uff0c\u60a8\u53ef\u4ee5\u76f4\u63a5\u83b7\u53d6\u6a21\u578b\u7684\u8bbf\u95ee\u5730\u5740

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_13","title":"\u4f7f\u7528\u6a21\u578b\u670d\u52a1\u6d4b\u8bd5","text":"

\u7b80\u5355\u5728\u7ec8\u7aef\u4e2d\u5c1d\u8bd5\uff0c\u4f7f\u7528 curl \u547d\u4ee4\u6765\u6d4b\u8bd5\u6a21\u578b\u670d\u52a1\uff0c\u8fd9\u91cc\u60a8\u53ef\u4ee5\u770b\u5230\u8fd4\u56de\u7684\u7ed3\u679c\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4f7f\u7528\u6a21\u578b\u670d\u52a1\u8fdb\u884c\u63a8\u7406\u4efb\u52a1\u4e86\u3002

curl -X POST http://10.20.100.210:31118/v2/models/chatglm3-6b/generate \\\n  -d '{\"text_input\": \"hello\", \"stream\": false, \"sampling_parameters\": \"{\\\"temperature\\\": 0.7, \\\"top_p\\\": 0.95, \\'max_tokens\\\": 1024\uff5d\"\uff5d'\n

"},{"location":"admin/baize/best-practice/finetunel-llm.html#_14","title":"\u7ed3\u8bed","text":"

\u672c\u6587\u4ee5 ChatGLM3 \u4e3a\u4f8b\uff0c\u5e26\u60a8\u5feb\u901f\u4e86\u89e3\u548c\u4e0a\u624b AI Lab \u7684\u6a21\u578b\u5fae\u8c03\uff0c\u4f7f\u7528 LoRA \u5fae\u8c03\u4e86 ChatGLM3 \u6a21\u578b\u3002

AI Lab \u63d0\u4f9b\u4e86\u975e\u5e38\u4e30\u5bcc\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u5e2e\u52a9\u6a21\u578b\u5f00\u53d1\u8005\u5feb\u901f\u8fdb\u884c\u6a21\u578b\u5f00\u53d1\u3001\u5fae\u8c03\u3001\u63a8\u7406\u7b49\u4efb\u52a1\uff0c\u540c\u65f6\u4e5f\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684 OpenAPI \u63a5\u53e3\uff0c\u53ef\u4ee5\u65b9\u4fbf\u5730\u4e0e\u7b2c\u4e09\u65b9\u5e94\u7528\u751f\u6001\u8fdb\u884c\u7ed3\u5408\u3002

"},{"location":"admin/baize/best-practice/label-studio.html","title":"\u90e8\u7f72 Label Studio","text":"

Label Studio \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u6570\u636e\u6807\u6ce8\u5de5\u5177\uff0c\u7528\u4e8e\u5404\u79cd\u673a\u5668\u5b66\u4e60\u548c\u4eba\u5de5\u667a\u80fd\u4efb\u52a1\u3002 \u4ee5\u4e0b\u662f Label Studio \u7684\u7b80\u8981\u4ecb\u7ecd\uff1a

  • \u652f\u6301\u56fe\u50cf\u3001\u97f3\u9891\u3001\u89c6\u9891\u3001\u6587\u672c\u7b49\u591a\u79cd\u6570\u636e\u7c7b\u578b\u7684\u6807\u6ce8
  • \u53ef\u7528\u4e8e\u76ee\u6807\u68c0\u6d4b\u3001\u56fe\u50cf\u5206\u7c7b\u3001\u8bed\u97f3\u8f6c\u5f55\u3001\u547d\u540d\u5b9e\u4f53\u8bc6\u522b\u7b49\u591a\u79cd\u4efb\u52a1
  • \u63d0\u4f9b\u53ef\u5b9a\u5236\u7684\u6807\u6ce8\u754c\u9762
  • \u652f\u6301\u591a\u79cd\u6807\u6ce8\u683c\u5f0f\u548c\u5bfc\u51fa\u9009\u9879

Label Studio \u901a\u8fc7\u5176\u7075\u6d3b\u6027\u548c\u529f\u80fd\u4e30\u5bcc\u6027\uff0c\u4e3a\u6570\u636e\u79d1\u5b66\u5bb6\u548c\u673a\u5668\u5b66\u4e60\u5de5\u7a0b\u5e08\u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u6570\u636e\u6807\u6ce8\u89e3\u51b3\u65b9\u6848\u3002

"},{"location":"admin/baize/best-practice/label-studio.html#ai","title":"\u90e8\u7f72\u5230 AI \u7b97\u529b\u5e73\u53f0","text":"

\u8981\u60f3\u5728 AI Lab \u4e2d\u4f7f\u7528 Label Studio\uff0c\u9700\u5c06\u5176\u90e8\u7f72\u5230\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\uff0c \u4f60\u53ef\u4ee5\u901a\u8fc7 Helm \u7684\u65b9\u5f0f\u5feb\u901f\u90e8\u7f72\u3002

Note

\u66f4\u591a\u90e8\u7f72\u8be6\u60c5\uff0c\u8bf7\u53c2\u9605 Deploy Label Studio on Kubernetes\u3002

  1. \u6253\u5f00\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u754c\u9762\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u627e\u5230 Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u9009\u62e9 \u521b\u5efa\u4ed3\u5e93 \u6309\u94ae\uff0c\u586b\u5199\u5982\u4e0b\u53c2\u6570\uff1a

  2. \u6dfb\u52a0\u6210\u529f\u540e\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u9009\u62e9 \u540c\u6b65\u4ed3\u5e93 \uff0c\u7a0d\u7b49\u7247\u523b\u540e\u5b8c\u6210\u540c\u6b65\u3002\uff08\u540e\u7eed\u66f4\u65b0 Label Studio \u4e5f\u4f1a\u7528\u5230\u8fd9\u4e2a\u540c\u6b65\u64cd\u4f5c\uff09\u3002

  3. \u7136\u540e\u8df3\u8f6c\u5230 Helm \u6a21\u677f \u9875\u9762\uff0c\u4f60\u53ef\u4ee5\u641c\u7d22\u627e\u5230 label-studio\uff0c\u70b9\u51fb\u5361\u7247\u3002

  4. \u9009\u62e9\u6700\u65b0\u7684\u7248\u672c\uff0c\u5982\u4e0b\u56fe\u914d\u7f6e\u5b89\u88c5\u53c2\u6570\uff0c\u540d\u79f0\u4e3a label-stuio\uff0c\u5efa\u8bae\u521b\u5efa\u65b0\u7684\u547d\u4ee4\u7a7a\u95f4\uff0c\u914d\u7f6e\u53c2\u6570\u5207\u6362\u5230 YAML \uff0c\u6839\u636e\u8bf4\u660e\u4fee\u6539\u5176\u4e2d\u914d\u7f6e\u3002

    global:\n  image:\n    repository: heartexlabs/label-studio   # \u5982\u679c\u65e0\u6cd5\u8bbf\u95ee docker.io\uff0c\u5728\u6b64\u5904\u914d\u7f6e\u4ee3\u7406\u5730\u5740\n  extraEnvironmentVars:\n    LABEL_STUDIO_HOST: https://{\u8bbf\u95ee\u5730\u5740}/label-studio    # \u4f7f\u7528\u7684\u767b\u5f55\u5730\u5740\uff0c\u8bf7\u53c2\u9605\u5f53\u524d\u7f51\u9875 URL\n    LABEL_STUDIO_USERNAME: {\u7528\u6237\u90ae\u7bb1}    # \u5fc5\u987b\u662f\u90ae\u7bb1\uff0c\u66ff\u6362\u4e3a\u81ea\u5df1\u7684\n    LABEL_STUDIO_PASSWORD: {\u7528\u6237\u5bc6\u7801}    \napp:\n  nginx:\n    livenessProbe:\n      path: /label-studio/nginx_health\n    readinessProbe:\n      path: /label-studio/version\n

\u81f3\u6b64\uff0c\u5b8c\u6210\u4e86 Label studio \u7684\u5b89\u88c5\u3002

Warning

\u9ed8\u8ba4\u4f1a\u5b89\u88c5 PostgreSQL \u4f5c\u4e3a\u6570\u636e\u670d\u52a1\u4e2d\u95f4\u4ef6\uff0c\u5982\u679c\u955c\u50cf\u62c9\u53d6\u5931\u8d25\uff0c\u53ef\u80fd\u662f docker.io \u65e0\u6cd5\u8bbf\u95ee\uff0c\u6ce8\u610f\u5207\u6362\u5230\u53ef\u7528\u4ee3\u7406\u5373\u53ef\u3002

\u5982\u679c\u4f60\u6709\u81ea\u5df1\u7684 PostgreSQL \u6570\u636e\u670d\u52a1\u4e2d\u95f4\u4ef6\uff0c\u53ef\u4ee5\u4f7f\u7528\u5982\u4e0b\u53c2\u6570\u914d\u7f6e\uff1a

global:\n  image:\n    repository: heartexlabs/label-studio   # \u5982\u679c\u65e0\u6cd5\u8bbf\u95ee docker.io\uff0c\u5728\u6b64\u5904\u914d\u7f6e\u4ee3\u7406\u5730\u5740\n  extraEnvironmentVars:\n    LABEL_STUDIO_HOST: https://{\u8bbf\u95ee\u5730\u5740}/label-studio    # \u4f7f\u7528\u7684\u767b\u5f55\u5730\u5740\uff0c\u53c2\u9605\u5f53\u524d\u7f51\u9875 URL\n    LABEL_STUDIO_USERNAME: {\u7528\u6237\u90ae\u7bb1}    # \u5fc5\u987b\u662f\u90ae\u7bb1\uff0c\u66ff\u6362\u4e3a\u81ea\u5df1\u7684\n    LABEL_STUDIO_PASSWORD: {\u7528\u6237\u5bc6\u7801}    \napp:\n  nginx:\n    livenessProbe:\n      path: /label-studio/nginx_health\n    readinessProbe:\n      path: /label-studio/version\npostgresql:\n  enabled: false  # \u7981\u7528\u5185\u7f6e\u7684 PostgreSQL\nexternalPostgresql:\n  host: \"postgres-postgresql\"  # PostgreSQL \u5730\u5740\n  port: 5432\n  username: \"label_studio\"  # PostgreSQL \u7528\u6237\u540d\n  password: \"your_label_studio_password\"  # PostgreSQL \u5bc6\u7801\n  database: \"label_studio\"  # PostgreSQL \u6570\u636e\u5e93\u540d\n
"},{"location":"admin/baize/best-practice/label-studio.html#gproduct","title":"\u6dfb\u52a0 GProduct \u5230\u5bfc\u822a\u680f","text":"

\u5982\u679c\u8981\u6dfb\u52a0 Label Studio \u5230\u5bfc\u822a\u680f\uff0c\u53ef\u4ee5\u53c2\u8003\u5168\u5c40\u7ba1\u7406 OEM IN \u7684\u65b9\u5f0f\u3002 \u4ee5\u4e0b\u6848\u4f8b\u662f\u589e\u52a0\u5230 AI Lab \u4e8c\u7ea7\u5bfc\u822a\u7684\u6dfb\u52a0\u65b9\u5f0f\u3002

"},{"location":"admin/baize/best-practice/label-studio.html#_1","title":"\u6dfb\u52a0\u4ee3\u7406\u8bbf\u95ee","text":"
apiVersion: ghippo.io/v1alpha1\nkind: GProductProxy\nmetadata:\n  name: label-studio\nspec:\n  gproduct: label-studio\n  proxies:\n  - authnCheck: false\n    destination:\n      host: label-studio-ls-app.label-studio.svc.cluster.local\n      port: 80\n    match:\n      uri:\n        prefix: /label-studio\n
"},{"location":"admin/baize/best-practice/label-studio.html#ai-lab","title":"\u6dfb\u52a0\u5230 AI Lab","text":"

\u4fee\u6539 CRD \u4e3a GProductNavigator \u7684 CR baize \uff0c\u7136\u540e\u5728\u73b0\u6709\u914d\u7f6e\u4e2d\u8fdb\u884c\u5982\u4e0b\u53d8\u66f4\uff1a

apiVersion: ghippo.io/v1alpha1\nkind: GProductNavigator\nmetadata:\n  annotations:\n    meta.helm.sh/release-name: baize\n    meta.helm.sh/release-namespace: baize-system\n  labels:\n    app.kubernetes.io/managed-by: Helm\n    gProductName: baize\n  name: baize\nspec:\n  category: cloudnativeai\n  gproduct: baize\n  iconUrl: ./ui/baize/logo.svg\n  isCustom: false\n  localizedName:\n    en-US: AI Lab\n    zh-CN: AI Lab\n  menus:\n    - iconUrl: ''\n      isCustom: false\n      localizedName:\n        en-US: AI Lab\n        zh-CN: AI Lab\n      name: workspace-view\n      order: 1\n      url: ./baize\n      visible: true\n    - iconUrl: ''\n      isCustom: false\n      localizedName:\n        en-US: Operator\n        zh-CN: \u8fd0\u7ef4\u7ba1\u7406\n      name: admin-view\n      order: 1\n      url: ./baize/admin\n      visible: true\n    # \u6dfb\u52a0\u5f00\u59cb\n    - iconUrl: ''\n      localizedName:\n        en-US: Data Annotation\n        zh-CN: \u6570\u636e\u6807\u6ce8\n      name: label-studio\n      order: 1\n      target: blank    # \u63a7\u5236\u65b0\u5f00\u9875\n      url: https://{\u8bbf\u95ee\u5730\u5740}/label-studio    # \u8bbf\u95ee\u5730\u5740\n      visible: true\n    # \u6dfb\u52a0\u7ed3\u675f\n  name: AI Lab\n  order: 10\n  url: ./baize\n  visible: true\n
"},{"location":"admin/baize/best-practice/label-studio.html#_2","title":"\u6dfb\u52a0\u6548\u679c","text":""},{"location":"admin/baize/best-practice/label-studio.html#_3","title":"\u7ed3\u8bed","text":"

\u4ee5\u4e0a\uff0c\u5c31\u662f\u5982\u4f55\u6dfb\u52a0 Label Studio \u5e76\u5c06\u5176\u4f5c\u4e3a AI Lab \u7684\u6807\u6ce8\u7ec4\u4ef6\uff0c\u901a\u8fc7\u5c06\u6807\u6ce8\u540e\u7684\u6570\u636e\u6dfb\u52a0\u5230 AI Lab \u7684\u6570\u636e\u96c6\u4e2d\uff0c \u8054\u52a8\u7b97\u6cd5\u5f00\u53d1\uff0c\u5b8c\u5584\u7b97\u6cd5\u5f00\u53d1\u6d41\u7a0b\uff0c\u540e\u7eed\u5982\u4f55\u4f7f\u7528\u8bf7\u5173\u6ce8\u5176\u4ed6\u6587\u6863\u53c2\u8003\u3002

"},{"location":"admin/baize/best-practice/train-with-deepspeed.html","title":"\u5982\u4f55\u63d0\u4ea4 DeepSpeed \u8bad\u7ec3\u4efb\u52a1","text":"

\u6839\u636e DeepSpeed \u5b98\u65b9\u6587\u6863\uff0c\u6211\u4eec\u63a8\u8350\u4f7f\u7528\u4fee\u6539\u4ee3\u7801\u7684\u65b9\u5f0f\u5b9e\u73b0\u3002

\u5373\u4f7f\u7528 deepspeed.init_distributed() \u4ee3\u66ff torch.distributed.init_process_group(...)\u3002 \u7136\u540e\u8fd0\u884c\u547d\u4ee4\u4f7f\u7528 torchrun\uff0c\u63d0\u4ea4\u4e3a Pytorch \u5206\u5e03\u5f0f\u4efb\u52a1\uff0c\u65e2\u53ef\u8fd0\u884c DeepSpeed \u4efb\u52a1\u3002

\u662f\u7684\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528 torchrun \u8fd0\u884c\u4f60\u7684 DeepSpeed \u8bad\u7ec3\u811a\u672c\u3002 torchrun \u662f PyTorch \u63d0\u4f9b\u7684\u4e00\u4e2a\u5b9e\u7528\u5de5\u5177\uff0c\u7528\u4e8e\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002\u4f60\u53ef\u4ee5\u7ed3\u5408 torchrun \u548c DeepSpeed API \u6765\u542f\u52a8\u4f60\u7684\u8bad\u7ec3\u4efb\u52a1\u3002

\u4ee5\u4e0b\u662f\u4e00\u4e2a\u4f7f\u7528 torchrun \u8fd0\u884c DeepSpeed \u8bad\u7ec3\u811a\u672c\u7684\u793a\u4f8b\uff1a

  1. \u7f16\u5199\u8bad\u7ec3\u811a\u672c\uff1a

    train.py
    import torch\nimport deepspeed\nfrom torch.utils.data import DataLoader\n\n# \u6a21\u578b\u548c\u6570\u636e\u52a0\u8f7d\nmodel = YourModel()\ntrain_dataset = YourDataset()\ntrain_dataloader = DataLoader(train_dataset, batch_size=32)\n\n# \u914d\u7f6e\u6587\u4ef6\u8def\u5f84\ndeepspeed_config = \"deepspeed_config.json\"\n\n# \u521b\u5efa DeepSpeed \u8bad\u7ec3\u5f15\u64ce\nmodel_engine, optimizer, _, _ = deepspeed.initialize(\n    model=model,\n    model_parameters=model.parameters(),\n    config_params=deepspeed_config\n)\n\n# \u8bad\u7ec3\u5faa\u73af\nfor batch in train_dataloader:\n    loss = model_engine(batch)\n    model_engine.backward(loss)\n    model_engine.step()\n
  2. \u521b\u5efa DeepSpeed \u914d\u7f6e\u6587\u4ef6\uff1a

    deepspeed_config.json
    {\n  \"train_batch_size\": 32,\n  \"gradient_accumulation_steps\": 1,\n  \"fp16\": {\n    \"enabled\": true,\n    \"loss_scale\": 0\n  },\n  \"optimizer\": {\n    \"type\": \"Adam\",\n    \"params\": {\n      \"lr\": 0.00015,\n      \"betas\": [0.9, 0.999],\n      \"eps\": 1e-08,\n      \"weight_decay\": 0\n    }\n  }\n}\n
  3. \u4f7f\u7528 torchrun \u6216\u8005 baizectl \u8fd0\u884c\u8bad\u7ec3\u811a\u672c\uff1a

    torchrun train.py\n

    \u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u4f60\u53ef\u4ee5\u7ed3\u5408 PyTorch \u7684\u5206\u5e03\u5f0f\u8bad\u7ec3\u529f\u80fd\u548c DeepSpeed \u7684\u4f18\u5316\u6280\u672f\uff0c\u4ece\u800c\u5b9e\u73b0\u66f4\u9ad8\u6548\u7684\u8bad\u7ec3\u3002 \u60a8\u53ef\u4ee5\u5728 Notebook \u4e2d\uff0c\u4f7f\u7528 baizectl \u63d0\u4ea4\u547d\u4ee4\uff1a

    baizectl job submit --pytorch --workers 2 -- torchrun train.py\n
"},{"location":"admin/baize/developer/index.html","title":"\u5f00\u53d1\u63a7\u5236\u53f0","text":"

\u5f00\u53d1\u63a7\u5236\u53f0\u662f\u5f00\u53d1\u8005\u65e5\u5e38\u6267\u884c AI \u63a8\u7406\u3001\u5927\u6a21\u578b\u8bad\u7ec3\u7b49\u4efb\u52a1\u7684\u63a7\u5236\u53f0\u3002

\u65b9\u4fbf\u7528\u6237\u901a\u8fc7\u6982\u89c8\u5feb\u901f\u4e86\u89e3\uff0c\u5f53\u524d\u5de5\u4f5c\u7a7a\u95f4\u7684\u8d44\u6e90\u53ca\u7528\u91cf\u60c5\u51b5\uff0c\u5305\u542b\u4e86GPU\u8d44\u6e90\u3001Notebook\u3001\u4efb\u52a1\u4ee5\u53ca\u6570\u636e\u96c6\u7684\u6570\u91cf\u4fe1\u606f\u3002

"},{"location":"admin/baize/developer/quick-start.html","title":"\u5feb\u901f\u5165\u95e8","text":"

\u672c\u6587\u63d0\u4f9b\u4e86\u7b80\u5355\u7684\u64cd\u4f5c\u624b\u518c\u4ee5\u4fbf\u7528\u6237\u4f7f\u7528 AI Lab \u8fdb\u884c\u6570\u636e\u96c6\u3001Notebook\u3001\u4efb\u52a1\u8bad\u7ec3\u7684\u6574\u4e2a\u5f00\u53d1\u3001\u8bad\u7ec3\u6d41\u7a0b\u3002

"},{"location":"admin/baize/developer/quick-start.html#_2","title":"\u51c6\u5907\u6570\u636e\u96c6","text":"

\u70b9\u51fb \u6570\u636e\u7ba1\u7406 -> \u6570\u636e\u96c6 \uff0c\u9009\u62e9 \u521b\u5efa \u6309\u94ae\uff0c\u5206\u522b\u521b\u5efa\u4ee5\u4e0b\u4e09\u4e2a\u6570\u636e\u96c6\u3002

"},{"location":"admin/baize/developer/quick-start.html#_3","title":"\u6570\u636e\u96c6\uff1a\u8bad\u7ec3\u4ee3\u7801","text":"
  • \u4ee3\u7801\u6570\u636e\u6e90\uff1ahttps://github.com/samzong/training-sample-code.git\uff0c\u4e3b\u8981\u662f\u4e00\u4e2a\u7b80\u5355\u7684 Tensorflow \u4ee3\u7801\u3002
  • \u5982\u679c\u662f\u4e2d\u56fd\u5883\u5185\u7684\u7528\u6237\uff0c\u53ef\u4ee5\u4f7f\u7528 Gitee \u52a0\u901f\uff1ahttps://gitee.com/samzong_lu/training-sample-code.git
  • \u4ee3\u7801\u8def\u5f84\u4e3a tensorflow/tf-fashion-mnist-sample

Note

\u76ee\u524d\u4ec5\u652f\u6301\u8bfb\u5199\u6a21\u5f0f\u4e3a ReadWriteMany \u7684 StorageClass\uff0c\u8bf7\u4f7f\u7528 NFS \u6216\u8005\u63a8\u8350\u7684 JuiceFS\u3002

"},{"location":"admin/baize/developer/quick-start.html#_4","title":"\u6570\u636e\u96c6\uff1a\u8bad\u7ec3\u6570\u636e","text":"

\u672c\u6b21\u8bad\u7ec3\u4f7f\u7528\u7684\u6570\u636e\u4e3a https://github.com/zalandoresearch/fashion-mnist.git\uff0c \u8fd9\u662f Fashion-MNIST \u6570\u636e\u96c6\u3002

\u5982\u679c\u662f\u4e2d\u56fd\u5883\u5185\u7684\u7528\u6237\uff0c\u53ef\u4ee5\u4f7f\u7528 Gitee \u52a0\u901f\uff1ahttps://gitee.com/samzong_lu/fashion-mnist.git

Note

\u5982\u679c\u672a\u521b\u5efa\u8bad\u7ec3\u6570\u636e\u7684\u6570\u636e\u96c6\uff0c\u901a\u8fc7\u8bad\u7ec3\u811a\u672c\u4e5f\u4f1a\u81ea\u52a8\u4e0b\u8f7d\uff1b\u63d0\u524d\u51c6\u5907\u8bad\u7ec3\u6570\u636e\u53ef\u4ee5\u63d0\u9ad8\u8bad\u7ec3\u901f\u5ea6\u3002

"},{"location":"admin/baize/developer/quick-start.html#_5","title":"\u6570\u636e\u96c6\uff1a\u7a7a\u6570\u636e\u96c6","text":"

AI Lab \u652f\u6301\u5c06 PVC \u4f5c\u4e3a\u6570\u636e\u96c6\u7684\u6570\u636e\u6e90\u7c7b\u578b\uff0c\u6240\u4ee5\u521b\u5efa\u4e00\u4e2a\u7a7a PVC \u7ed1\u5b9a\u5230\u6570\u636e\u96c6\u540e\uff0c\u53ef\u5c06\u7a7a\u6570\u636e\u96c6\u4f5c\u4e3a\u5b58\u653e\u540e\u7eed\u8bad\u7ec3\u4efb\u52a1\u7684\u8f93\u51fa\u6570\u636e\u96c6\uff0c\u5b58\u653e\u6a21\u578b\u548c\u65e5\u5fd7\u3002

"},{"location":"admin/baize/developer/quick-start.html#tensorflow","title":"\u73af\u5883\u4f9d\u8d56: tensorflow","text":"

\u811a\u672c\u5728\u8fd0\u884c\u65f6\uff0c\u9700\u8981\u4f9d\u8d56 Tensorflow \u7684 Python \u5e93\uff0c\u53ef\u4ee5\u4f7f\u7528 AI Lab \u7684\u73af\u5883\u4f9d\u8d56\u7ba1\u7406\u529f\u80fd\uff0c\u63d0\u524d\u5c06\u9700\u8981\u7684 Python \u5e93\u4e0b\u8f7d\u548c\u51c6\u5907\u5b8c\u6210\uff0c\u65e0\u9700\u4f9d\u8d56\u955c\u50cf\u6784\u5efa

\u53c2\u8003 \u73af\u5883\u4f9d\u8d56 \u7684\u64cd\u4f5c\u65b9\u5f0f\uff0c\u6dfb\u52a0\u4e00\u4e2a CONDA \u73af\u5883.

name: tensorflow\nchannels:\n  - defaults\n  - conda-forge\ndependencies:\n  - python=3.12\n  - tensorflow\nprefix: /opt/conda/envs/tensorflow\n

Note

\u7b49\u5f85\u73af\u5883\u9884\u70ed\u6210\u529f\u540e\uff0c\u53ea\u9700\u8981\u5c06\u6b64\u73af\u5883\u6302\u8f7d\u5230 Notebook\u3001\u8bad\u7ec3\u4efb\u52a1\u4e2d\uff0c\u4f7f\u7528 AI Lab \u63d0\u4f9b\u7684\u57fa\u7840\u955c\u50cf\u5c31\u53ef\u4ee5

"},{"location":"admin/baize/developer/quick-start.html#notebook","title":"\u4f7f\u7528 Notebook \u8c03\u8bd5\u811a\u672c","text":"

\u51c6\u5907\u5f00\u53d1\u73af\u5883\uff0c\u70b9\u51fb\u5bfc\u822a\u680f\u7684 Notebooks \uff0c\u70b9\u51fb \u521b\u5efa \u3002

  • \u5c06\u51c6\u5907\u597d\u7684\u4e09\u4e2a\u6570\u636e\u96c6\u8fdb\u884c\u5173\u8054\uff0c\u6302\u8f7d\u8def\u5f84\u8bf7\u53c2\u7167\u4e0b\u56fe\u586b\u5199\uff0c\u6ce8\u610f\u5c06\u9700\u8981\u4f7f\u7528\u7684\u7a7a\u6570\u636e\u96c6\u5728 \u8f93\u51fa\u6570\u636e\u96c6\u4f4d\u7f6e\u914d\u7f6e

  • \u9009\u62e9\u5e76\u7ed1\u5b9a\u73af\u5883\u4f9d\u8d56\u5305

    \u7b49\u5f85 Notebook \u521b\u5efa\u6210\u529f\uff0c\u70b9\u51fb\u5217\u8868\u4e2d\u7684\u8bbf\u95ee\u5730\u5740\uff0c\u8fdb\u5165 Notebook\u3002\u5e76\u5728 Notebook \u7684\u7ec8\u7aef\u4e2d\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u4efb\u52a1\u8bad\u7ec3\u3002

    Note

    \u811a\u672c\u4f7f\u7528 Tensorflow\uff0c\u5982\u679c\u5fd8\u8bb0\u5173\u8054\u4f9d\u8d56\u5e93\uff0c\u4e5f\u53ef\u4ee5\u4e34\u65f6\u7528 pip install tensorflow \u5b89\u88c5\u3002

    python /home/jovyan/code/tensorflow/tf-fashion-mnist-sample/train.py\n
"},{"location":"admin/baize/developer/quick-start.html#_6","title":"\u521b\u5efa\u8bad\u7ec3\u4efb\u52a1","text":"
  1. \u70b9\u51fb\u5bfc\u822a\u680f\u7684 \u4efb\u52a1\u4e2d\u5fc3 -> \u8bad\u7ec3\u4efb\u52a1 \uff0c\u521b\u5efa\u4e00\u4e2a Tensorflow \u5355\u673a\u4efb\u52a1
  2. \u5148\u586b\u5199\u57fa\u672c\u53c2\u6570\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65
  3. \u5728\u4efb\u52a1\u8d44\u6e90\u914d\u7f6e\u4e2d\uff0c\u6b63\u786e\u914d\u7f6e\u4efb\u52a1\u8d44\u6e90\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65

    • \u955c\u50cf\uff1a\u5982\u679c\u524d\u5e8f\u73af\u5883\u4f9d\u8d56\u5305\u51c6\u5907\u597d\u4e86\uff0c\u4f7f\u7528\u9ed8\u8ba4\u955c\u50cf\u5373\u53ef\uff1b \u5982\u679c\u672a\u51c6\u5907\uff0c\u8981\u786e\u8ba4\u955c\u50cf\u5185\u6709 tensorflow \u7684 Python \u5e93
    • shell\uff1a\u4f7f\u7528 bash \u5373\u53ef
    • \u542f\u7528\u547d\u4ee4\uff1a

      /home/jovyan/code/tensorflow/tf-fashion-mnist-sample/train.py\n
  4. \u5728\u9ad8\u7ea7\u914d\u7f6e\u4e2d\uff0c\u542f\u7528 \u4efb\u52a1\u5206\u6790\uff08Tensorboard\uff09 \uff0c\u70b9\u51fb \u786e\u5b9a \u3002

    Note

    \u65e5\u5fd7\u6240\u5728\u4f4d\u7f6e\u4e3a\u8f93\u51fa\u6570\u636e\u96c6\u7684 /home/jovyan/model/train/logs/

  5. \u8fd4\u56de\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\uff0c\u7b49\u5230\u72b6\u6001\u53d8\u4e3a \u6210\u529f \u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u67e5\u770b\u8be6\u60c5\u3001\u514b\u9686\u4efb\u52a1\u3001\u66f4\u65b0\u4f18\u5148\u7ea7\u3001\u67e5\u770b\u65e5\u5fd7\u548c\u5220\u9664\u7b49\u64cd\u4f5c\u3002

  6. \u6210\u529f\u521b\u5efa\u4efb\u52a1\u540e\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u4efb\u52a1\u5206\u6790 \uff0c\u53ef\u4ee5\u67e5\u770b\u4efb\u52a1\u72b6\u6001\u5e76\u5bf9\u4efb\u52a1\u8bad\u7ec3\u8fdb\u884c\u8c03\u4f18\u3002

"},{"location":"admin/baize/developer/dataset/create-use-delete.html","title":"\u6570\u636e\u96c6\u5217\u8868","text":"

AI Lab \u63d0\u4f9b\u6a21\u578b\u5f00\u53d1\u3001\u8bad\u7ec3\u4ee5\u53ca\u63a8\u7406\u8fc7\u7a0b\u6240\u6709\u9700\u8981\u7684\u6570\u636e\u96c6\u7ba1\u7406\u529f\u80fd\u3002\u76ee\u524d\u652f\u6301\u5c06\u591a\u79cd\u6570\u636e\u6e90\u7edf\u4e00\u63a5\u5165\u80fd\u529b\u3002

\u901a\u8fc7\u7b80\u5355\u914d\u7f6e\u5373\u53ef\u5c06\u6570\u636e\u6e90\u63a5\u5165\u5230 AI Lab \u4e2d\uff0c\u5b9e\u73b0\u6570\u636e\u7684\u7edf\u4e00\u7eb3\u7ba1\u3001\u9884\u70ed\u3001\u6570\u636e\u96c6\u7ba1\u7406\u7b49\u529f\u80fd\u3002

"},{"location":"admin/baize/developer/dataset/create-use-delete.html#_2","title":"\u521b\u5efa\u6570\u636e\u96c6","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u6570\u636e\u7ba1\u7406 -> \u6570\u636e\u96c6\u5217\u8868 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

  2. \u9009\u62e9\u6570\u636e\u96c6\u5f52\u5c5e\u7684\u5de5\u4f5c\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4 \u4e0b\u4e00\u6b65 \u3002

  3. \u914d\u7f6e\u76ee\u6807\u6570\u636e\u7684\u6570\u636e\u6e90\u7c7b\u578b\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a \u3002

    \u76ee\u524d\u652f\u6301\u8fd9\u51e0\u79cd\u6570\u636e\u6e90\uff1a

    • GIT\uff1a\u652f\u6301 GitHub\u3001GitLab\u3001Gitee \u7b49\u4ed3\u5e93
    • S3\uff1a\u652f\u6301 Amazon \u4e91\u7b49\u5bf9\u8c61\u5b58\u50a8
    • HTTP\uff1a\u76f4\u63a5\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684 HTTP \u7f51\u5740
    • PVC\uff1a\u652f\u6301\u9884\u5148\u521b\u5efa\u7684 Kubernetes PersistentVolumeClaim
    • NFS\uff1a\u652f\u6301 NFS \u5171\u4eab\u5b58\u50a8
  4. \u6570\u636e\u96c6\u521b\u5efa\u6210\u529f\u5c06\u8fd4\u56de\u6570\u636e\u96c6\u5217\u8868\u3002\u4f60\u53ef\u4ee5\u901a\u8fc7\u53f3\u4fa7\u7684 \u2507 \u6267\u884c\u66f4\u591a\u64cd\u4f5c\u3002

Info

\u7cfb\u7edf\u81ea\u52a8\u4f1a\u5728\u6570\u636e\u96c6\u521b\u5efa\u6210\u529f\u540e\uff0c\u7acb\u5373\u8fdb\u884c\u4e00\u6b21\u6027\u7684\u6570\u636e\u9884\u52a0\u8f7d\uff1b\u5728\u9884\u52a0\u8f7d\u5b8c\u6210\u4e4b\u524d\uff0c\u6570\u636e\u96c6\u4e0d\u53ef\u4ee5\u4f7f\u7528\u3002

"},{"location":"admin/baize/developer/dataset/create-use-delete.html#_3","title":"\u6570\u636e\u96c6\u4f7f\u7528","text":"

\u6570\u636e\u96c6\u521b\u5efa\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u5728\u6a21\u578b\u8bad\u7ec3\u3001\u63a8\u7406\u7b49\u4efb\u52a1\u4e2d\u4f7f\u7528\u3002

"},{"location":"admin/baize/developer/dataset/create-use-delete.html#notebook","title":"\u5728 Notebook \u4e2d\u4f7f\u7528","text":"

\u5728\u521b\u5efa Notebook \u4e2d\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6570\u636e\u96c6\uff1b\u4f7f\u7528\u65b9\u5f0f\u5982\u4e0b\uff1a

  • \u4f7f\u7528\u6570\u636e\u96c6\u505a\u8bad\u7ec3\u6570\u636e\u6302\u8f7d
  • \u4f7f\u7528\u6570\u636e\u96c6\u505a\u4ee3\u7801\u6302\u8f7d

"},{"location":"admin/baize/developer/dataset/create-use-delete.html#_4","title":"\u5728 \u8bad\u7ec3\u4efb\u52a1 \u4e2d\u4f7f\u7528","text":"
  • \u4f7f\u7528\u6570\u636e\u96c6\u6307\u5b9a\u4efb\u52a1\u8f93\u51fa
  • \u4f7f\u7528\u6570\u636e\u96c6\u6307\u5b9a\u4efb\u52a1\u8f93\u5165
  • \u4f7f\u7528\u6570\u636e\u96c6\u6307\u5b9a TensorBoard \u8f93\u51fa
"},{"location":"admin/baize/developer/dataset/create-use-delete.html#_5","title":"\u5728\u63a8\u7406\u670d\u52a1 \u4e2d\u4f7f\u7528","text":"
  • \u4f7f\u7528\u6570\u636e\u96c6\u6302\u8f7d\u6a21\u578b
"},{"location":"admin/baize/developer/dataset/create-use-delete.html#_6","title":"\u5220\u9664\u6570\u636e\u96c6","text":"

\u5982\u679c\u53d1\u73b0\u6570\u636e\u96c6\u5197\u4f59\u3001\u8fc7\u671f\u6216\u56e0\u5176\u4ed6\u7f18\u6545\u4e0d\u518d\u9700\u8981\uff0c\u53ef\u4ee5\u4ece\u6570\u636e\u96c6\u5217\u8868\u4e2d\u5220\u9664\u3002

  1. \u5728\u6570\u636e\u96c6\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

  2. \u5728\u5f39\u7a97\u4e2d\u786e\u8ba4\u8981\u5220\u9664\u7684\u6570\u636e\u96c6\uff0c\u8f93\u5165\u6570\u636e\u96c6\u540d\u79f0\u540e\u70b9\u51fb \u5220\u9664 \u3002

  3. \u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\uff0c\u8be5\u6570\u636e\u96c6\u4ece\u5217\u8868\u4e2d\u6d88\u5931\u3002

Caution

\u6570\u636e\u96c6\u4e00\u65e6\u5220\u9664\u5c06\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

"},{"location":"admin/baize/developer/dataset/environments.html","title":"\u7ba1\u7406\u73af\u5883","text":"

\u672c\u6587\u8bf4\u660e\u5982\u4f55\u5728 AI Lab \u4e2d\u7ba1\u7406\u4f60\u7684\u73af\u5883\u4f9d\u8d56\u5e93\uff0c\u4ee5\u4e0b\u662f\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u548c\u6ce8\u610f\u4e8b\u9879\u3002

  1. \u73af\u5883\u7ba1\u7406\u6982\u8ff0
  2. \u521b\u5efa\u65b0\u73af\u5883
  3. \u914d\u7f6e\u73af\u5883
  4. \u6545\u969c\u6392\u9664
"},{"location":"admin/baize/developer/dataset/environments.html#_2","title":"\u73af\u5883\u7ba1\u7406\u6982\u8ff0","text":"

\u4f20\u7edf\u65b9\u5f0f\uff0c\u4e00\u822c\u4f1a\u5c06 Python \u73af\u5883\u4f9d\u8d56\u5728\u955c\u50cf\u4e2d\u6784\u5efa\uff0c\u955c\u50cf\u5e26\u6709 Python \u7248\u672c\u548c\u4f9d\u8d56\u5305\u7684\u955c\u50cf\uff0c\u7ef4\u62a4\u6210\u672c\u8f83\u9ad8\u4e14\u66f4\u65b0\u4e0d\u65b9\u4fbf\uff0c\u5f80\u5f80\u9700\u8981\u91cd\u65b0\u6784\u5efa\u955c\u50cf\u3002

\u800c\u5728 AI Lab \u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 \u73af\u5883\u7ba1\u7406 \u6a21\u5757\u6765\u7ba1\u7406\u7eaf\u7cb9\u7684\u73af\u5883\u4f9d\u8d56\uff0c\u5c06\u8fd9\u90e8\u5206\u4ece\u955c\u50cf\u4e2d\u89e3\u8026\uff0c\u5e26\u6765\u7684\u4f18\u52bf\u6709\uff1a

  • \u4e00\u4efd\u73af\u5883\u591a\u5904\u4f7f\u7528\uff0c\u540c\u65f6\u53ef\u4ee5\u5728 Notebook\u3001\u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u3001\u4e43\u81f3\u63a8\u7406\u670d\u52a1\u4e2d\u4f7f\u7528\u3002
  • \u66f4\u65b0\u4f9d\u8d56\u5305\u66f4\u52a0\u65b9\u4fbf\uff0c\u53ea\u9700\u8981\u66f4\u65b0\u73af\u5883\u4f9d\u8d56\u5373\u53ef\uff0c\u65e0\u9700\u91cd\u65b0\u6784\u5efa\u955c\u50cf\u3002

\u4ee5\u4e0b\u4e3a\u73af\u5883\u7ba1\u7406\u7684\u4e3b\u8981\u7ec4\u6210\u90e8\u5206\uff1a

  • \u96c6\u7fa4 \uff1a\u9009\u62e9\u9700\u8981\u64cd\u4f5c\u7684\u96c6\u7fa4\u3002
  • \u547d\u540d\u7a7a\u95f4 \uff1a\u9009\u62e9\u547d\u540d\u7a7a\u95f4\u4ee5\u9650\u5b9a\u64cd\u4f5c\u8303\u56f4\u3002
  • \u73af\u5883\u5217\u8868 \uff1a\u5c55\u793a\u5f53\u524d\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u73af\u5883\u53ca\u5176\u72b6\u6001\u3002

\u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c \u540d\u79f0 \u73af\u5883\u7684\u540d\u79f0 my-environment \u72b6\u6001 \u73af\u5883\u5f53\u524d\u7684\u72b6\u6001\uff08\u6b63\u5e38\u6216\u5931\u8d25\uff09\uff0c\u65b0\u521b\u5efa\u73af\u5883\u6709\u4e00\u4e2a\u9884\u70ed\u8fc7\u7a0b\uff0c\u9884\u70ed\u6210\u529f\u540e\u5373\u53ef\u5728\u5176\u4ed6\u4efb\u52a1\u4e2d\u4f7f\u7528 \u6b63\u5e38 \u521b\u5efa\u65f6\u95f4 \u73af\u5883\u521b\u5efa\u7684\u65f6\u95f4 2023-10-01 10:00:00"},{"location":"admin/baize/developer/dataset/environments.html#_3","title":"\u521b\u5efa\u65b0\u73af\u5883","text":"

\u5728 \u73af\u5883\u7ba1\u7406 \u754c\u9762\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u521b\u5efa\u73af\u5883\u7684\u6d41\u7a0b\u3002

\u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c \u540d\u79f0 \u8f93\u5165\u73af\u5883\u7684\u540d\u79f0\uff0c\u957f\u5ea6\u4e3a 2-63 \u4e2a\u5b57\u7b26\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\u3002 my-environment \u90e8\u7f72\u4f4d\u7f6e \u96c6\u7fa4 \uff1a\u9009\u62e9\u9700\u8981\u90e8\u7f72\u7684\u96c6\u7fa4 gpu-cluster \u547d\u540d\u7a7a\u95f4 \uff1a\u9009\u62e9\u547d\u540d\u7a7a\u95f4 default \u5907\u6ce8 \u586b\u5199\u5907\u6ce8\u4fe1\u606f\u3002 \u8fd9\u662f\u4e00\u4e2a\u6d4b\u8bd5\u73af\u5883 \u6807\u7b7e \u4e3a\u73af\u5883\u6dfb\u52a0\u6807\u7b7e\u3002 env:test \u6ce8\u89e3 \u4e3a\u73af\u5883\u6dfb\u52a0\u6ce8\u89e3\u3002\u586b\u5199\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u8fdb\u5165\u73af\u5883\u914d\u7f6e\u3002 \u6ce8\u89e3\u793a\u4f8b"},{"location":"admin/baize/developer/dataset/environments.html#_4","title":"\u914d\u7f6e\u73af\u5883","text":"

\u5728\u73af\u5883\u914d\u7f6e\u6b65\u9aa4\u4e2d\uff0c\u7528\u6237\u9700\u8981\u914d\u7f6e Python \u7248\u672c\u548c\u4f9d\u8d56\u5305\u7ba1\u7406\u5de5\u5177\u3002

\u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c Python \u7248\u672c \u9009\u62e9\u6240\u9700\u7684 Python \u7248\u672c 3.12.3 \u5305\u7ba1\u7406\u5668 \u9009\u62e9\u5305\u7ba1\u7406\u5de5\u5177\uff0c\u53ef\u9009 PIP \u6216 CONDA PIP Environment Data \u5982\u679c\u9009\u62e9 PIP\uff1a\u5728\u4e0b\u65b9\u7f16\u8f91\u5668\u4e2d\u8f93\u5165 requirements.txt \u683c\u5f0f\u7684\u4f9d\u8d56\u5305\u5217\u8868\u3002 numpy==1.21.0 \u5982\u679c\u9009\u62e9 CONDA\uff1a\u5728\u4e0b\u65b9\u7f16\u8f91\u5668\u4e2d\u8f93\u5165 environment.yaml \u683c\u5f0f\u7684\u4f9d\u8d56\u5305\u5217\u8868\u3002 \u5176\u4ed6\u9009\u9879 pip \u989d\u5916\u7d22\u5f15\u5730\u5740 \uff1a\u914d\u7f6e pip \u989d\u5916\u7684\u7d22\u5f15\u5730\u5740\uff1b\u9002\u7528\u4e8e\u4f01\u4e1a\u5185\u90e8\u6709\u81ea\u5df1\u7684\u79c1\u6709\u4ed3\u5e93\u6216\u8005 PIP \u52a0\u901f\u7ad9\u70b9\u3002 https://pypi.example.com GPU \u914d\u7f6e \uff1a\u542f\u7528\u6216\u7981\u7528 GPU \u914d\u7f6e\uff1b\u90e8\u5206\u6d89\u53ca\u5230 GPU \u7684\u4f9d\u8d56\u5305\u9700\u8981\u5728\u9884\u52a0\u8f7d\u65f6\u914d\u7f6e GPU \u8d44\u6e90\u3002 \u542f\u7528 \u5173\u8054\u5b58\u50a8 \uff1a\u9009\u62e9\u5173\u8054\u7684\u5b58\u50a8\u914d\u7f6e\uff1b\u73af\u5883\u4f9d\u8d56\u5305\u4f1a\u5b58\u50a8\u5728\u5173\u8054\u5b58\u50a8\u4e2d\u3002\u6ce8\u610f\uff1a\u9700\u8981\u4f7f\u7528\u652f\u6301 ReadWriteMany \u7684\u5b58\u50a8\u3002 my-storage-config

\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u521b\u5efa \u6309\u94ae\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u521b\u5efa\u5e76\u914d\u7f6e\u65b0\u7684 Python \u73af\u5883\u3002

"},{"location":"admin/baize/developer/dataset/environments.html#_5","title":"\u6545\u969c\u6392\u9664","text":"
  • \u5982\u679c\u73af\u5883\u521b\u5efa\u5931\u8d25\uff1a

    • \u68c0\u67e5\u7f51\u7edc\u8fde\u63a5\u662f\u5426\u6b63\u5e38\u3002
    • \u786e\u8ba4\u586b\u5199\u7684 Python \u7248\u672c\u548c\u5305\u7ba1\u7406\u5668\u914d\u7f6e\u65e0\u8bef\u3002
    • \u786e\u4fdd\u6240\u9009\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u53ef\u7528\u3002
  • \u5982\u679c\u4f9d\u8d56\u9884\u70ed\u5931\u8d25\uff1a

    • \u68c0\u67e5 requirements.txt \u6216 environment.yaml \u6587\u4ef6\u683c\u5f0f\u662f\u5426\u6b63\u786e\u3002
    • \u786e\u8ba4\u4f9d\u8d56\u5305\u540d\u79f0\u548c\u7248\u672c\u662f\u5426\u6b63\u786e\u65e0\u8bef\u3002\u5982\u9047\u5230\u5176\u4ed6\u95ee\u9898\uff0c\u8bf7\u8054\u7cfb\u5e73\u53f0\u7ba1\u7406\u5458\u6216\u67e5\u770b\u5e73\u53f0\u5e2e\u52a9\u6587\u6863\u83b7\u53d6\u66f4\u591a\u652f\u6301\u3002

\u4ee5\u4e0a\u5373\u4e3a\u5728 AI Lab \u4e2d\u7ba1\u7406 Python \u4f9d\u8d56\u5e93\u7684\u57fa\u672c\u64cd\u4f5c\u6b65\u9aa4\u548c\u6ce8\u610f\u4e8b\u9879\u3002

"},{"location":"admin/baize/developer/inference/models.html","title":"\u4e86\u89e3\u6a21\u578b\u652f\u6301\u60c5\u51b5","text":"

\u968f\u7740 AI Lab \u7684\u5feb\u901f\u8fed\u4ee3\uff0c\u6211\u4eec\u5df2\u7ecf\u652f\u6301\u4e86\u591a\u79cd\u6a21\u578b\u7684\u63a8\u7406\u670d\u52a1\uff0c\u60a8\u53ef\u4ee5\u5728\u8fd9\u91cc\u770b\u5230\u6240\u652f\u6301\u7684\u6a21\u578b\u4fe1\u606f\u3002

  • AI Lab v0.3.0 \u4e0a\u7ebf\u4e86\u6a21\u578b\u63a8\u7406\u670d\u52a1\uff0c\u9488\u5bf9\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\uff0c\u65b9\u4fbf\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528AI Lab \u7684\u63a8\u7406\u670d\u52a1\uff0c\u65e0\u9700\u5173\u5fc3\u6a21\u578b\u7684\u90e8\u7f72\u548c\u7ef4\u62a4\u3002
  • AI Lab v0.6.0 \u652f\u6301\u4e86\u5b8c\u6574\u7248\u672c\u7684 vLLM \u63a8\u7406\u80fd\u529b\uff0c\u652f\u6301\u8bf8\u591a\u5927\u8bed\u8a00\u6a21\u578b\uff0c\u5982 LLama\u3001Qwen\u3001ChatGLM \u7b49\u3002

\u60a8\u53ef\u4ee5\u5728 AI Lab \u4e2d\u4f7f\u7528\u7ecf\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9a8c\u8bc1\u8fc7\u7684 GPU \u7c7b\u578b\uff1b \u66f4\u591a\u7ec6\u8282\u53c2\u9605 GPU \u652f\u6301\u77e9\u9635\u3002

"},{"location":"admin/baize/developer/inference/models.html#triton-inference-server","title":"Triton Inference Server","text":"

\u901a\u8fc7 Triton Inference Server \u53ef\u4ee5\u5f88\u597d\u7684\u652f\u6301\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\uff0c\u6211\u4eec\u76ee\u524d\u652f\u6301\u4e3b\u6d41\u7684\u63a8\u7406\u540e\u7aef\u670d\u52a1\uff1a

Backend \u652f\u6301\u6a21\u578b\u683c\u5f0f \u4ecb\u7ecd pytorch TorchScript\u3001PyTorch 2.0 \u683c\u5f0f\u7684\u6a21\u578b triton-inference-server/pytorch_backend tensorflow TensorFlow 2.x triton-inference-server/tensorflow_backend vLLM(Deprecated) \u4e0e vLLM \u4e00\u81f4 \u652f\u6301\u7684\u6a21\u578b\u548c vLLM support Model \u4e00\u81f4

Danger

\u4f7f\u7528 Triton \u7684 Backend vLLM \u7684\u65b9\u5f0f\u5df2\u88ab\u5f03\u7528\uff0c\u63a8\u8350\u4f7f\u7528\u6700\u65b0\u652f\u6301 vLLM \u6765\u90e8\u7f72\u60a8\u7684\u5927\u8bed\u8a00\u6a21\u578b\u3002

"},{"location":"admin/baize/developer/inference/models.html#vllm","title":"vLLM","text":"

\u901a\u8fc7 vLLM \u6211\u4eec\u53ef\u4ee5\u5f88\u5feb\u7684\u4f7f\u7528\u5927\u8bed\u8a00\u6a21\u578b\uff0c\u60a8\u53ef\u4ee5\u5728\u8fd9\u91cc\u770b\u5230\u6211\u4eec\u652f\u6301\u7684\u6a21\u578b\u5217\u8868\uff0c\u8fd9\u901a\u5e38\u548c vLLM Support Models \u4fdd\u6301\u4e00\u81f4\u3002

  • HuggingFace \u6a21\u578b\uff1a\u6211\u4eec\u652f\u6301\u4e86 HuggingFace \u7684\u5927\u90e8\u5206\u6a21\u578b\uff0c\u60a8\u53ef\u4ee5\u5728 HuggingFace Model Hub \u67e5\u770b\u66f4\u591a\u6a21\u578b\u3002
  • vLLM \u652f\u6301\u6a21\u578b\u5217\u51fa\u4e86\u652f\u6301\u7684\u5927\u8bed\u8a00\u6a21\u578b\u548c\u89c6\u89c9\u8bed\u8a00\u6a21\u578b\u3002
  • \u4f7f\u7528 vLLM \u652f\u6301\u6846\u67b6\u7684\u6a21\u578b\u8fdb\u884c\u5fae\u8c03\u540e\u7684\u6a21\u578b\u3002
"},{"location":"admin/baize/developer/inference/models.html#vllm_1","title":"vLLM \u65b0\u7279\u6027","text":"

\u76ee\u524d\uff0cAI Lab \u8fd8\u652f\u6301\u5728\u4f7f\u7528 vLLM \u4f5c\u4e3a\u63a8\u7406\u5de5\u5177\u65f6\u7684\u4e00\u4e9b\u65b0\u7279\u6027\uff1a

  • \u5728\u63a8\u7406\u6a21\u578b\u65f6\uff0c\u542f\u7528 Lora Adapter \u6765\u4f18\u5316\u6a21\u578b\u63a8\u7406\u670d\u52a1
  • \u63d0\u4f9b\u517c\u5bb9 OpenAI \u7684 OpenAPI \u63a5\u53e3\uff0c\u65b9\u4fbf\u7528\u6237\u5207\u6362\u5230\u672c\u5730\u63a8\u7406\u670d\u52a1\u65f6\uff0c\u53ef\u4ee5\u4f4e\u6210\u672c\u7684\u5feb\u901f\u5207\u6362
"},{"location":"admin/baize/developer/inference/models.html#_2","title":"\u4e0b\u4e00\u6b65","text":"
  • \u521b\u5efa Triton \u63a8\u7406\u670d\u52a1
  • \u521b\u5efa vLLM \u63a8\u7406\u670d\u52a1
"},{"location":"admin/baize/developer/inference/triton-inference.html","title":"\u521b\u5efa Triton \u63a8\u7406\u670d\u52a1","text":"

AI Lab \u76ee\u524d\u63d0\u4f9b\u4ee5 Triton\u3001vLLM \u4f5c\u4e3a\u63a8\u7406\u6846\u67b6\uff0c\u7528\u6237\u53ea\u9700\u7b80\u5355\u914d\u7f6e\u5373\u53ef\u5feb\u901f\u542f\u52a8\u4e00\u4e2a\u9ad8\u6027\u80fd\u7684\u63a8\u7406\u670d\u52a1\u3002

Danger

\u4f7f\u7528 Triton \u7684 Backend vLLM \u7684\u65b9\u5f0f\u5df2\u88ab\u5f03\u7528\uff0c\u63a8\u8350\u4f7f\u7528\u6700\u65b0\u652f\u6301 vLLM \u6765\u90e8\u7f72\u60a8\u7684\u5927\u8bed\u8a00\u6a21\u578b\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#triton_1","title":"Triton\u4ecb\u7ecd","text":"

Triton \u662f\u7531 NVIDIA \u5f00\u53d1\u7684\u4e00\u4e2a\u5f00\u6e90\u63a8\u7406\u670d\u52a1\u5668\uff0c\u65e8\u5728\u7b80\u5316\u673a\u5668\u5b66\u4e60\u6a21\u578b\u7684\u90e8\u7f72\u548c\u63a8\u7406\u670d\u52a1\u3002\u5b83\u652f\u6301\u591a\u79cd\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5305\u62ec TensorFlow\u3001PyTorch \u7b49\uff0c\u4f7f\u5f97\u7528\u6237\u80fd\u591f\u8f7b\u677e\u7ba1\u7406\u548c\u90e8\u7f72\u4e0d\u540c\u7c7b\u578b\u7684\u6a21\u578b\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u51c6\u5907\u6a21\u578b\u6570\u636e\uff1a\u5728\u6570\u636e\u96c6\u7ba1\u7406\u4e2d\u7eb3\u7ba1\u6a21\u578b\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u6570\u636e\u6210\u529f\u9884\u52a0\u8f7d\uff0c\u4e0b\u9762\u4ee5 mnist \u624b\u5199\u6570\u5b57\u8bc6\u522b\u7684 PyTorch \u6a21\u578b\u4e3a\u4f8b\u3002

Note

\u5f85\u63a8\u7406\u7684\u6a21\u578b\u5728\u6570\u636e\u96c6\u4e2d\u9700\u8981\u9075\u4ee5\u4e0b\u76ee\u5f55\u683c\u5f0f\uff1a

  <model-repository-name>\n  \u2514\u2500\u2500 <model-name>\n     \u2514\u2500\u2500 <version>\n        \u2514\u2500\u2500 <model-definition-file>\n

\u672c\u4f8b\u4e2d\u7684\u76ee\u5f55\u683c\u5f0f\u4e3a\uff1a

    model-repo\n    \u2514\u2500\u2500 mnist-cnn\n        \u2514\u2500\u2500 1\n            \u2514\u2500\u2500 model.pt\n
"},{"location":"admin/baize/developer/inference/triton-inference.html#_2","title":"\u521b\u5efa\u63a8\u7406\u670d\u52a1","text":"

\u76ee\u524d\u5df2\u7ecf\u652f\u6301\u8868\u5355\u521b\u5efa\uff0c\u53ef\u4ee5\u754c\u9762\u5b57\u6bb5\u63d0\u793a\uff0c\u8fdb\u884c\u670d\u52a1\u521b\u5efa\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#_3","title":"\u914d\u7f6e\u6a21\u578b\u8def\u5f84","text":"

\u6a21\u578b\u8def\u5f84 model-repo/mnist-cnn/1/model.pt \u9700\u8981\u548c\u6570\u636e\u96c6\u4e2d\u7684\u6a21\u578b\u76ee\u5f55\u683c\u5f0f\u4e00\u81f4\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#_4","title":"\u6a21\u578b\u914d\u7f6e","text":""},{"location":"admin/baize/developer/inference/triton-inference.html#_5","title":"\u914d\u7f6e\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570","text":"

Note

\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u7684\u7b2c\u4e00\u4e2a\u7ef4\u5ea6\u9ed8\u8ba4\u4e3a batchsize \u7684\u5927\u5c0f\uff0c\u8bbe\u7f6e\u4e3a -1 \u53ef\u4ee5\u6839\u636e\u8f93\u5165\u7684\u63a8\u7406\u6570\u636e\u81ea\u52a8\u8ba1\u7b97 batchsize\u3002\u53c2\u6570\u5176\u4f59\u7ef4\u5ea6\u548c\u6570\u636e\u7c7b\u578b\u9700\u8981\u4e0e\u6a21\u578b\u8f93\u5165\u5339\u914d\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#_6","title":"\u914d\u7f6e\u73af\u5883","text":"

\u53ef\u4ee5\u5bfc\u5165 \u73af\u5883\u7ba1\u7406 \u4e2d\u521b\u5efa\u7684\u73af\u5883\u4f5c\u4e3a\u63a8\u7406\u65f6\u7684\u8fd0\u884c\u73af\u5883\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#_7","title":"\u9ad8\u7ea7\u914d\u7f6e","text":""},{"location":"admin/baize/developer/inference/triton-inference.html#_8","title":"\u914d\u7f6e\u8ba4\u8bc1\u7b56\u7565","text":"

\u652f\u6301 API key \u7684\u8bf7\u6c42\u65b9\u5f0f\u8ba4\u8bc1\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u5b9a\u4e49\u589e\u52a0\u8ba4\u8bc1\u53c2\u6570\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#_9","title":"\u4eb2\u548c\u6027\u8c03\u5ea6","text":"

\u652f\u6301 \u6839\u636e GPU \u8d44\u6e90\u7b49\u8282\u70b9\u914d\u7f6e\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u4eb2\u548c\u6027\u8c03\u5ea6\uff0c\u540c\u65f6\u4e5f\u65b9\u4fbf\u7528\u6237\u81ea\u5b9a\u4e49\u8c03\u5ea6\u7b56\u7565\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#_10","title":"\u8bbf\u95ee","text":""},{"location":"admin/baize/developer/inference/triton-inference.html#api","title":"API \u8bbf\u95ee","text":"
  • Triton \u63d0\u4f9b\u4e86\u4e00\u4e2a\u57fa\u4e8e REST \u7684 API\uff0c\u5141\u8bb8\u5ba2\u6237\u7aef\u901a\u8fc7 HTTP POST \u8bf7\u6c42\u8fdb\u884c\u6a21\u578b\u63a8\u7406\u3002
  • \u5ba2\u6237\u7aef\u53ef\u4ee5\u53d1\u9001 JSON \u683c\u5f0f\u7684\u8bf7\u6c42\u4f53\uff0c\u5176\u4e2d\u5305\u542b\u8f93\u5165\u6570\u636e\u548c\u76f8\u5173\u7684\u5143\u6570\u636e\u3002
"},{"location":"admin/baize/developer/inference/triton-inference.html#http","title":"HTTP \u8bbf\u95ee","text":"
  1. \u53d1\u9001 HTTP POST \u8bf7\u6c42\uff1a\u4f7f\u7528\u5de5\u5177\u5982 curl \u6216 HTTP \u5ba2\u6237\u7aef\u5e93\uff08\u5982 Python \u7684 requests \u5e93\uff09\u5411 Triton Server \u53d1\u9001 POST \u8bf7\u6c42\u3002

  2. \u8bbe\u7f6e HTTP \u5934\uff1a\u6839\u636e\u7528\u6237\u914d\u7f6e\u9879\u81ea\u52a8\u751f\u6210\u7684\u914d\u7f6e\uff0c\u5305\u542b\u6a21\u578b\u8f93\u5165\u548c\u8f93\u51fa\u7684\u5143\u6570\u636e\u3002

  3. \u6784\u5efa\u8bf7\u6c42\u4f53\uff1a\u8bf7\u6c42\u4f53\u901a\u5e38\u5305\u542b\u8981\u8fdb\u884c\u63a8\u7406\u7684\u8f93\u5165\u6570\u636e\uff0c\u4ee5\u53ca\u6a21\u578b\u7279\u5b9a\u7684\u5143\u6570\u636e\u3002

"},{"location":"admin/baize/developer/inference/triton-inference.html#curl","title":"\u793a\u4f8b curl \u547d\u4ee4","text":"
  curl -X POST \"http://<ip>:<port>/v2/models/<inference-name>/infer\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"inputs\": [\n      {\n        \"name\": \"model_input\",            \n        \"shape\": [1, 1, 32, 32],          \n        \"datatype\": \"FP32\",               \n        \"data\": [\n          [0.1234, 0.5678, 0.9101, ... ]  \n        ]\n      }\n    ]\n  }'\n
  • <ip> \u662f Triton Inference Server \u8fd0\u884c\u7684\u4e3b\u673a\u5730\u5740\u3002
  • <port> \u662f Triton Inference Server \u8fd0\u884c\u7684\u4e3b\u673a\u7aef\u53e3\u53f7\u3002
  • <inference-name> \u662f\u6240\u521b\u5efa\u7684\u63a8\u7406\u670d\u52a1\u7684\u540d\u79f0\u3002
  • \"name\" \u8981\u4e0e\u6a21\u578b\u914d\u7f6e\u4e2d\u7684\u8f93\u5165\u53c2\u6570\u7684 name \u4e00\u81f4\u3002
  • \"shape\" \u8981\u4e0e\u6a21\u578b\u914d\u7f6e\u4e2d\u7684\u8f93\u5165\u53c2\u6570\u7684 dims \u4e00\u81f4\u3002
  • \"datatype\" \u8981\u4e0e\u6a21\u578b\u914d\u7f6e\u4e2d\u7684\u8f93\u5165\u53c2\u6570\u7684 Data Type \u4e00\u81f4\u3002
  • \"data\" \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u63a8\u7406\u6570\u636e\u3002

\u8bf7\u6ce8\u610f\uff0c\u4e0a\u8ff0\u793a\u4f8b\u4ee3\u7801\u9700\u8981\u6839\u636e\u4f60\u7684\u5177\u4f53\u6a21\u578b\u548c\u73af\u5883\u8fdb\u884c\u8c03\u6574\uff0c\u8f93\u5165\u6570\u636e\u7684\u683c\u5f0f\u548c\u5185\u5bb9\u4e5f\u9700\u8981\u7b26\u5408\u6a21\u578b\u7684\u8981\u6c42\u3002

"},{"location":"admin/baize/developer/inference/vllm-inference.html","title":"\u521b\u5efa vLLM \u63a8\u7406\u670d\u52a1","text":"

AI Lab \u652f\u6301\u4ee5 vLLM \u4f5c\u4e3a\u63a8\u7406\u670d\u52a1\uff0c\u63d0\u4f9b\u5168\u90e8 vLLM \u7684\u80fd\u529b\uff0c\u540c\u65f6\u63d0\u4f9b\u4e86\u5b8c\u5168\u9002\u914d OpenAI \u63a5\u53e3\u5b9a\u4e49\u3002

"},{"location":"admin/baize/developer/inference/vllm-inference.html#vllm_1","title":"vLLM \u4ecb\u7ecd","text":"

vLLM \u662f\u4e00\u4e2a\u5feb\u901f\u4e14\u6613\u4e8e\u4f7f\u7528\u7684\u7528\u4e8e\u63a8\u7406\u548c\u670d\u52a1\u7684\u5e93\uff0cvLLM \u65e8\u5728\u6781\u5927\u5730\u63d0\u5347\u5b9e\u65f6\u573a\u666f\u4e0b\u7684\u8bed\u8a00\u6a21\u578b\u670d\u52a1\u7684\u541e\u5410\u4e0e\u5185\u5b58\u4f7f\u7528\u6548\u7387\u3002vLLM \u5728\u901f\u5ea6\u3001\u7075\u6d3b\u6027\u65b9\u9762\u5177\u6709\u4ee5\u4e0b\u90e8\u5206\u7279\u70b9\uff1a

  • \u8fde\u7eed\u6279\u5904\u7406\u4f20\u5165\u8bf7\u6c42\uff1b
  • \u4f7f\u7528 PagedAttention \u9ad8\u6548\u7ba1\u7406\u6ce8\u610f\u529b\u952e\u548c\u503c\u5185\u5b58\uff1b
  • \u4e0e\u6d41\u884c\u7684 HuggingFace \u578b\u53f7\u65e0\u7f1d\u96c6\u6210\uff1b
  • \u517c\u5bb9 OpenAI \u7684 API \u670d\u52a1\u5668\u3002
"},{"location":"admin/baize/developer/inference/vllm-inference.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u51c6\u5907\u6a21\u578b\u6570\u636e\uff1a\u5728\u6570\u636e\u96c6\u7ba1\u7406\u4e2d\u7eb3\u7ba1\u6a21\u578b\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u6570\u636e\u6210\u529f\u9884\u52a0\u8f7d\u3002

"},{"location":"admin/baize/developer/inference/vllm-inference.html#_2","title":"\u521b\u5efa\u63a8\u7406\u670d\u52a1","text":"
  1. \u9009\u62e9 vLLM \u63a8\u7406\u6846\u67b6\uff0c\u5e76\u5728\u9009\u62e9\u6a21\u578b\u6a21\u5757\u9009\u62e9\u63d0\u524d\u521b\u5efa\u597d\u7684\u6a21\u578b\u6570\u636e\u96c6 hdd-models \u5e76\u586b\u5199\u6570\u636e\u96c6\u4e2d\u6a21\u578b\u6240\u5728\u7684\u8def\u5f84\u4fe1\u606f\u3002

    \u672c\u6587\u63a8\u7406\u670d\u52a1\u7684\u521b\u5efa\u4f7f\u7528 ChatGLM3 \u6a21\u578b\u3002

  2. \u914d\u7f6e\u63a8\u7406\u670d\u52a1\u7684\u8d44\u6e90\uff0c\u5e76\u8c03\u6574\u63a8\u7406\u670d\u52a1\u8fd0\u884c\u7684\u53c2\u6570\u3002

    \u53c2\u6570\u540d \u63cf\u8ff0 GPU \u8d44\u6e90 \u6839\u636e\u6a21\u578b\u89c4\u6a21\u4ee5\u53ca\u96c6\u7fa4\u8d44\u6e90\u53ef\u4ee5\u4e3a\u63a8\u7406\u914d\u7f6e GPU \u8d44\u6e90\u3002 \u5141\u8bb8\u8fdc\u7a0b\u4ee3\u7801 \u63a7\u5236 vLLM \u662f\u5426\u4fe1\u4efb\u5e76\u6267\u884c\u6765\u81ea\u8fdc\u7a0b\u6e90\u7684\u4ee3\u7801 LoRA LoRA \u662f\u4e00\u79cd\u9488\u5bf9\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u53c2\u6570\u9ad8\u6548\u8c03\u6574\u6280\u672f\u3002\u5b83\u901a\u8fc7\u5c06\u539f\u59cb\u6a21\u578b\u53c2\u6570\u77e9\u9635\u5206\u89e3\u4e3a\u4f4e\u79e9\u77e9\u9635\uff0c\u4ece\u800c\u51cf\u5c11\u53c2\u6570\u6570\u91cf\u548c\u8ba1\u7b97\u590d\u6742\u5ea6\u3002 1. --lora-modules\uff1a\u7528\u6765\u6307\u5b9a\u7279\u5b9a\u6a21\u5757\u6216\u5c42\u8fdb\u884c\u4f4e\u79e9\u8fd1\u4f3c 2. max_loras_rank\uff1a\u7528\u6765\u6307\u5b9a LoRA \u6a21\u578b\u4e2d\u6bcf\u4e2a\u9002\u914d\u5c42\u7684\u6700\u5927\u79e9\uff0c\u5bf9\u4e8e\u7b80\u5355\u7684\u4efb\u52a1\uff0c\u53ef\u4ee5\u9009\u62e9\u8f83\u5c0f\u7684\u79e9\u503c\uff0c\u800c\u5bf9\u4e8e\u590d\u6742\u4efb\u52a1\uff0c\u53ef\u80fd\u9700\u8981\u8f83\u5927\u7684\u79e9\u503c\u6765\u4fdd\u8bc1\u6a21\u578b\u6027\u80fd\u3002 3. max_loras\uff1a\u8868\u793a\u6a21\u578b\u4e2d\u53ef\u4ee5\u5305\u542b\u7684 LoRA \u5c42\u7684\u6700\u5927\u6570\u91cf\uff0c\u6839\u636e\u6a21\u578b\u5927\u5c0f\u3001\u63a8\u7406\u590d\u6742\u5ea6\u7b49\u56e0\u7d20\u81ea\u5b9a 4. max_cpu_loras\uff1a\u7528\u4e8e\u6307\u5b9a\u5728 CPU \u73af\u5883\u4e2d\u53ef\u4ee5\u5904\u7406\u7684 LoRA \u5c42\u7684\u6700\u5927\u6570\u3002 \u5173\u8054\u73af\u5883 \u901a\u8fc7\u9009\u62e9\u73af\u5883\u9884\u5b9a\u4e49\u63a8\u7406\u65f6\u6240\u9700\u7684\u73af\u5883\u4f9d\u8d56\u3002

    Info

    \u652f\u6301\u914d\u7f6e LoRA \u53c2\u6570\u7684\u6a21\u578b\u53ef\u53c2\u8003 vLLM \u652f\u6301\u7684\u6a21\u578b\u3002

  3. \u5728 \u9ad8\u7ea7\u914d\u7f6e \u4e2d\uff0c\u652f\u6301\u6839\u636e GPU \u8d44\u6e90\u7b49\u8282\u70b9\u914d\u7f6e\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u4eb2\u548c\u6027\u8c03\u5ea6\uff0c\u540c\u65f6\u4e5f\u65b9\u4fbf\u7528\u6237\u81ea\u5b9a\u4e49\u8c03\u5ea6\u7b56\u7565\u3002

"},{"location":"admin/baize/developer/inference/vllm-inference.html#_3","title":"\u9a8c\u8bc1\u63a8\u7406\u670d\u52a1","text":"

\u63a8\u7406\u670d\u52a1\u521b\u5efa\u5b8c\u6210\u4e4b\u540e\uff0c\u70b9\u51fb\u63a8\u7406\u670d\u52a1\u540d\u79f0\u8fdb\u5165\u8be6\u60c5\uff0c\u67e5\u770b API \u8c03\u7528\u65b9\u6cd5\u3002\u901a\u8fc7\u4f7f\u7528 Curl\u3001Python\u3001Nodejs \u7b49\u65b9\u5f0f\u9a8c\u8bc1\u6267\u884c\u7ed3\u679c\u3002

\u62f7\u8d1d\u8be6\u60c5\u4e2d\u7684 curl \u547d\u4ee4\uff0c\u5e76\u5728\u7ec8\u7aef\u4e2d\u6267\u884c\u547d\u4ee4\u53d1\u9001\u4e00\u6761\u6a21\u578b\u63a8\u7406\u8bf7\u6c42\uff0c\u9884\u671f\u8f93\u51fa\uff1a

"},{"location":"admin/baize/developer/jobs/create.html","title":"\u521b\u5efa\u4efb\u52a1\uff08Job\uff09","text":"

\u4efb\u52a1\u7ba1\u7406\u662f\u6307\u901a\u8fc7\u4f5c\u4e1a\u8c03\u5ea6\u548c\u7ba1\u63a7\u7ec4\u4ef6\u6765\u521b\u5efa\u548c\u7ba1\u7406\u4efb\u52a1\u751f\u547d\u5468\u671f\u7684\u529f\u80fd\u3002

AI Lab \u91c7\u7528 Kubernetes \u7684 Job \u673a\u5236\u6765\u8c03\u5ea6\u5404\u9879 AI \u63a8\u7406\u3001\u8bad\u7ec3\u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/create.html#_1","title":"\u901a\u7528\u6b65\u9aa4","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u4efb\u52a1\u4e2d\u5fc3 -> \u8bad\u7ec3\u4efb\u52a1 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

  2. \u7cfb\u7edf\u4f1a\u9884\u5148\u586b\u5145\u57fa\u7840\u914d\u7f6e\u6570\u636e\uff0c\u5305\u62ec\u8981\u90e8\u7f72\u7684\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u4efb\u52a1\u7c7b\u578b\u3001\u961f\u5217\u3001\u4f18\u5148\u7ea7\u7b49\u3002 \u8c03\u6574\u8fd9\u4e9b\u53c2\u6570\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

  3. \u914d\u7f6e\u955c\u50cf\u5730\u5740\u3001\u8fd0\u884c\u53c2\u6570\u4ee5\u53ca\u5173\u8054\u7684\u6570\u636e\u96c6\u3001\u73af\u5883\u548c\u8d44\u6e90\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

  4. \u6309\u9700\u6dfb\u52a0\u6807\u7b7e\u3001\u6ce8\u89e3\u3001\u73af\u5883\u53d8\u91cf\u7b49\u4efb\u52a1\u53c2\u6570\uff0c\u9009\u62e9\u8c03\u5ea6\u7b56\u7565\u540e\u70b9\u51fb \u786e\u5b9a \u3002

  5. \u4efb\u52a1\u521b\u5efa\u6210\u529f\u540e\uff0c\u4f1a\u6709\u51e0\u79cd\u8fd0\u884c\u72b6\u6001\uff1a

    • \u8fd0\u884c\u4e2d
    • \u6392\u961f\u4e2d
    • \u63d0\u4ea4\u6210\u529f\u3001\u63d0\u4ea4\u5931\u8d25
    • \u4efb\u52a1\u6210\u529f\u3001\u4efb\u52a1\u5931\u8d25
"},{"location":"admin/baize/developer/jobs/create.html#_2","title":"\u521b\u5efa\u7279\u5b9a\u4efb\u52a1","text":"
  • \u521b\u5efa Pytorch \u4efb\u52a1
  • \u521b\u5efa TensorFlow \u4efb\u52a1
  • \u521b\u5efa MPI \u4efb\u52a1
  • \u521b\u5efa MXNet \u4efb\u52a1
  • \u521b\u5efa PaddlePaddle \u4efb\u52a1
"},{"location":"admin/baize/developer/jobs/delete.html","title":"\u5220\u9664\u4efb\u52a1\uff08Job\uff09","text":"

\u5982\u679c\u53d1\u73b0\u4efb\u52a1\u5197\u4f59\u3001\u8fc7\u671f\u6216\u56e0\u5176\u4ed6\u7f18\u6545\u4e0d\u518d\u9700\u8981\uff0c\u53ef\u4ee5\u4ece\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u4e2d\u5220\u9664\u3002

  1. \u5728\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

  2. \u5728\u5f39\u7a97\u4e2d\u786e\u8ba4\u8981\u5220\u9664\u7684\u4efb\u52a1\uff0c\u8f93\u5165\u4efb\u52a1\u540d\u79f0\u540e\u70b9\u51fb \u5220\u9664 \u3002

  3. \u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\uff0c\u8be5\u4efb\u52a1\u4ece\u5217\u8868\u4e2d\u6d88\u5931\u3002

Caution

\u4efb\u52a1\u4e00\u65e6\u5220\u9664\u5c06\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

"},{"location":"admin/baize/developer/jobs/mpi.html","title":"MPI \u4efb\u52a1","text":"

MPI\uff08Message Passing Interface\uff09\u662f\u4e00\u79cd\u7528\u4e8e\u5e76\u884c\u8ba1\u7b97\u7684\u901a\u4fe1\u534f\u8bae\uff0c\u5b83\u5141\u8bb8\u591a\u4e2a\u8ba1\u7b97\u8282\u70b9\u4e4b\u95f4\u8fdb\u884c\u6d88\u606f\u4f20\u9012\u548c\u534f\u4f5c\u3002 MPI \u4efb\u52a1\u662f\u4f7f\u7528 MPI \u534f\u8bae\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u7684\u4efb\u52a1\uff0c\u9002\u7528\u4e8e\u9700\u8981\u5927\u89c4\u6a21\u5e76\u884c\u5904\u7406\u7684\u5e94\u7528\u573a\u666f\uff0c\u4f8b\u5982\u5206\u5e03\u5f0f\u8bad\u7ec3\u3001\u79d1\u5b66\u8ba1\u7b97\u7b49\u3002

\u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86 MPI \u4efb\u52a1\u7684\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa MPI \u4efb\u52a1\uff0c\u8fdb\u884c\u9ad8\u6027\u80fd\u7684\u5e76\u884c\u8ba1\u7b97\u3002 \u672c\u6559\u7a0b\u5c06\u6307\u5bfc\u60a8\u5982\u4f55\u5728 AI Lab \u4e2d\u521b\u5efa\u548c\u8fd0\u884c\u4e00\u4e2a MPI \u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/mpi.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
  • \u4efb\u52a1\u7c7b\u578b \uff1aMPI\uff0c\u7528\u4e8e\u8fd0\u884c\u5e76\u884c\u8ba1\u7b97\u4efb\u52a1\u3002
  • \u8fd0\u884c\u73af\u5883 \uff1a\u9009\u7528\u9884\u88c5\u4e86 MPI \u73af\u5883\u7684\u955c\u50cf\uff0c\u6216\u8005\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u5b89\u88c5\u5fc5\u8981\u7684\u4f9d\u8d56\u3002
  • MPIJob \u914d\u7f6e \uff1a\u7406\u89e3\u5e76\u914d\u7f6e MPIJob \u7684\u5404\u9879\u53c2\u6570\uff0c\u5982\u526f\u672c\u6570\u3001\u8d44\u6e90\u8bf7\u6c42\u7b49\u3002
"},{"location":"admin/baize/developer/jobs/mpi.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

\u5728\u8fd9\u91cc\u6211\u4eec\u4f7f\u7528 baize-notebook \u57fa\u7840\u955c\u50cf\u548c \u5173\u8054\u73af\u5883 \u7684\u65b9\u5f0f\u6765\u4f5c\u4e3a\u4efb\u52a1\u7684\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002 \u786e\u4fdd\u8fd0\u884c\u73af\u5883\u4e2d\u5305\u542b MPI \u53ca\u76f8\u5173\u5e93\uff0c\u5982 OpenMPI\u3001mpi4py \u7b49\u3002

\u6ce8\u610f \uff1a\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u73af\u5883\uff0c\u8bf7\u53c2\u8003\u73af\u5883\u5217\u8868\u3002

"},{"location":"admin/baize/developer/jobs/mpi.html#mpi_1","title":"\u521b\u5efa MPI \u4efb\u52a1","text":""},{"location":"admin/baize/developer/jobs/mpi.html#mpi_2","title":"MPI \u4efb\u52a1\u521b\u5efa\u6b65\u9aa4","text":"
  1. \u767b\u5f55\u5e73\u53f0 \uff1a\u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3\uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
  2. \u521b\u5efa\u4efb\u52a1 \uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b \uff1a\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\uff0c\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a MPI\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
  4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f \uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cbenchmarks-mpi\u201d\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
  5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570 \uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\uff0c\u914d\u7f6e\u4efb\u52a1\u7684\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u4fe1\u606f\u3002
"},{"location":"admin/baize/developer/jobs/mpi.html#_3","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4 \uff1a\u4f7f\u7528 mpirun\uff0c\u8fd9\u662f\u8fd0\u884c MPI \u7a0b\u5e8f\u7684\u547d\u4ee4\u3002
  • \u547d\u4ee4\u53c2\u6570 \uff1a\u8f93\u5165\u60a8\u8981\u8fd0\u884c\u7684 MPI \u7a0b\u5e8f\u7684\u53c2\u6570\u3002

\u793a\u4f8b\uff1a\u8fd0\u884c TensorFlow Benchmarks

\u5728\u672c\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u5c06\u8fd0\u884c\u4e00\u4e2a TensorFlow \u7684\u57fa\u51c6\u6d4b\u8bd5\u7a0b\u5e8f\uff0c\u4f7f\u7528 Horovod \u8fdb\u884c\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002 \u9996\u5148\uff0c\u786e\u4fdd\u60a8\u4f7f\u7528\u7684\u955c\u50cf\u4e2d\u5305\u542b\u6240\u9700\u7684\u4f9d\u8d56\u9879\uff0c\u4f8b\u5982 TensorFlow\u3001Horovod\u3001Open MPI \u7b49\u3002

\u955c\u50cf\u9009\u62e9 \uff1a\u4f7f\u7528\u5305\u542b TensorFlow \u548c MPI \u7684\u955c\u50cf\uff0c\u4f8b\u5982 mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest\u3002

\u547d\u4ee4\u53c2\u6570 \uff1a

mpirun --allow-run-as-root -np 2 -bind-to none -map-by slot \\\n  -x NCCL_DEBUG=INFO -x LD_LIBRARY_PATH -x PATH \\\n  -mca pml ob1 -mca btl ^openib \\\n  python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \\\n  --model=resnet101 --batch_size=64 --variable_update=horovod\n

\u8bf4\u660e \uff1a

  • mpirun\uff1aMPI \u7684\u542f\u52a8\u547d\u4ee4\u3002
  • --allow-run-as-root\uff1a\u5141\u8bb8\u4ee5 root \u7528\u6237\u8fd0\u884c\uff08\u5728\u5bb9\u5668\u4e2d\u901a\u5e38\u662f root \u7528\u6237\uff09\u3002
  • -np 2\uff1a\u6307\u5b9a\u8fd0\u884c\u7684\u8fdb\u7a0b\u6570\u4e3a 2\u3002
  • -bind-to none\uff0c-map-by slot\uff1aMPI \u8fdb\u7a0b\u7ed1\u5b9a\u548c\u6620\u5c04\u7684\u914d\u7f6e\u3002
  • -x NCCL_DEBUG=INFO\uff1a\u8bbe\u7f6e NCCL\uff08NVIDIA Collective Communication Library\uff09\u7684\u8c03\u8bd5\u4fe1\u606f\u7ea7\u522b\u3002
  • -x LD_LIBRARY_PATH\uff0c-x PATH\uff1a\u5728 MPI \u73af\u5883\u4e2d\u4f20\u9012\u5fc5\u8981\u7684\u73af\u5883\u53d8\u91cf\u3002
  • -mca pml ob1 -mca btl ^openib\uff1aMPI \u7684\u914d\u7f6e\u53c2\u6570\uff0c\u6307\u5b9a\u4f20\u8f93\u5c42\u548c\u6d88\u606f\u5c42\u534f\u8bae\u3002
  • python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py\uff1a\u8fd0\u884c TensorFlow \u57fa\u51c6\u6d4b\u8bd5\u811a\u672c\u3002
  • --model=resnet101\uff0c--batch_size=64\uff0c--variable_update=horovod\uff1aTensorFlow \u811a\u672c\u7684\u53c2\u6570\uff0c\u6307\u5b9a\u6a21\u578b\u3001\u6279\u91cf\u5927\u5c0f\u548c\u4f7f\u7528 Horovod \u8fdb\u884c\u53c2\u6570\u66f4\u65b0\u3002
"},{"location":"admin/baize/developer/jobs/mpi.html#_4","title":"\u8d44\u6e90\u914d\u7f6e","text":"

\u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u9700\u8981\u4e3a\u6bcf\u4e2a\u8282\u70b9\uff08Launcher \u548c Worker\uff09\u5206\u914d\u9002\u5f53\u7684\u8d44\u6e90\uff0c\u4f8b\u5982 CPU\u3001\u5185\u5b58\u548c GPU\u3002

\u8d44\u6e90\u793a\u4f8b \uff1a

  • Launcher\uff08\u542f\u52a8\u5668\uff09 \uff1a

    • \u526f\u672c\u6570 \uff1a1
    • \u8d44\u6e90\u8bf7\u6c42 \uff1a
      • CPU\uff1a2 \u6838
      • \u5185\u5b58\uff1a4 GiB
  • Worker\uff08\u5de5\u4f5c\u8282\u70b9\uff09 \uff1a

    • \u526f\u672c\u6570 \uff1a2
    • \u8d44\u6e90\u8bf7\u6c42 \uff1a
      • CPU\uff1a2 \u6838
      • \u5185\u5b58\uff1a4 GiB
      • GPU\uff1a\u6839\u636e\u9700\u6c42\u5206\u914d
"},{"location":"admin/baize/developer/jobs/mpi.html#mpijob","title":"\u5b8c\u6574\u7684 MPIJob \u914d\u7f6e\u793a\u4f8b","text":"

\u4ee5\u4e0b\u662f\u5b8c\u6574\u7684 MPIJob \u914d\u7f6e\u793a\u4f8b\uff0c\u4f9b\u60a8\u53c2\u8003\u3002

apiVersion: kubeflow.org/v1\nkind: MPIJob\nmetadata:\n  name: tensorflow-benchmarks\nspec:\n  slotsPerWorker: 1\n  runPolicy:\n    cleanPodPolicy: Running\n  mpiReplicaSpecs:\n    Launcher:\n      replicas: 1\n      template:\n        spec:\n          containers:\n            - name: tensorflow-benchmarks\n              image: mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest\n              command:\n                - mpirun\n                - --allow-run-as-root\n                - -np\n                - \"2\"\n                - -bind-to\n                - none\n                - -map-by\n                - slot\n                - -x\n                - NCCL_DEBUG=INFO\n                - -x\n                - LD_LIBRARY_PATH\n                - -x\n                - PATH\n                - -mca\n                - pml\n                - ob1\n                - -mca\n                - btl\n                - ^openib\n                - python\n                - scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py\n                - --model=resnet101\n                - --batch_size=64\n                - --variable_update=horovod\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n    Worker:\n      replicas: 2\n      template:\n        spec:\n          containers:\n            - name: tensorflow-benchmarks\n              image: mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpumem: 1k\n                  nvidia.com/vgpu: \"1\"\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n

\u914d\u7f6e\u89e3\u6790 \uff1a

  • apiVersion \u548c kind\uff1a\u8868\u793a\u8d44\u6e90\u7684 API \u7248\u672c\u548c\u7c7b\u578b\uff0cMPIJob \u662f Kubeflow \u5b9a\u4e49\u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\uff0c\u7528\u4e8e\u521b\u5efa MPI \u7c7b\u578b\u7684\u4efb\u52a1\u3002
  • metadata\uff1a\u5143\u6570\u636e\uff0c\u5305\u542b\u4efb\u52a1\u7684\u540d\u79f0\u7b49\u4fe1\u606f\u3002
  • spec\uff1a\u4efb\u52a1\u7684\u8be6\u7ec6\u914d\u7f6e\u3002
    • slotsPerWorker\uff1a\u6bcf\u4e2a Worker \u8282\u70b9\u7684\u69fd\u4f4d\u6570\u91cf\uff0c\u901a\u5e38\u8bbe\u7f6e\u4e3a 1\u3002
    • runPolicy\uff1a\u8fd0\u884c\u7b56\u7565\uff0c\u4f8b\u5982\u4efb\u52a1\u5b8c\u6210\u540e\u662f\u5426\u6e05\u7406 Pod\u3002
    • mpiReplicaSpecs\uff1aMPI \u4efb\u52a1\u7684\u526f\u672c\u914d\u7f6e\u3002
      • Launcher\uff1a\u542f\u52a8\u5668\uff0c\u8d1f\u8d23\u542f\u52a8 MPI \u4efb\u52a1\u3002
        • replicas\uff1a\u526f\u672c\u6570\uff0c\u901a\u5e38\u4e3a 1\u3002
        • template\uff1aPod \u6a21\u677f\uff0c\u5b9a\u4e49\u5bb9\u5668\u8fd0\u884c\u7684\u955c\u50cf\u3001\u547d\u4ee4\u3001\u8d44\u6e90\u7b49\u3002
      • Worker\uff1a\u5de5\u4f5c\u8282\u70b9\uff0c\u5b9e\u9645\u6267\u884c\u4efb\u52a1\u7684\u8ba1\u7b97\u8282\u70b9\u3002
        • replicas\uff1a\u526f\u672c\u6570\uff0c\u6839\u636e\u5e76\u884c\u9700\u6c42\u8bbe\u7f6e\uff0c\u8fd9\u91cc\u8bbe\u7f6e\u4e3a 2\u3002
        • template\uff1aPod \u6a21\u677f\uff0c\u540c\u6837\u5b9a\u4e49\u5bb9\u5668\u7684\u8fd0\u884c\u73af\u5883\u548c\u8d44\u6e90\u3002
"},{"location":"admin/baize/developer/jobs/mpi.html#_5","title":"\u8bbe\u7f6e\u4efb\u52a1\u526f\u672c\u6570","text":"

\u5728\u521b\u5efa MPI \u4efb\u52a1\u65f6\uff0c\u9700\u8981\u6839\u636e mpiReplicaSpecs \u4e2d\u914d\u7f6e\u7684\u526f\u672c\u6570\uff0c\u6b63\u786e\u8bbe\u7f6e \u4efb\u52a1\u526f\u672c\u6570\u3002

  • \u603b\u526f\u672c\u6570 = Launcher \u526f\u672c\u6570 + Worker \u526f\u672c\u6570
  • \u672c\u793a\u4f8b\u4e2d\uff1a

    • Launcher \u526f\u672c\u6570\uff1a1
    • Worker \u526f\u672c\u6570\uff1a2
    • \u603b\u526f\u672c\u6570 \uff1a1 + 2 = 3

\u56e0\u6b64\uff0c\u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u60a8\u9700\u8981\u5c06 \u4efb\u52a1\u526f\u672c\u6570 \u8bbe\u7f6e\u4e3a 3\u3002

"},{"location":"admin/baize/developer/jobs/mpi.html#_6","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c MPI \u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/mpi.html#_7","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

\u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u60a8\u53ef\u4ee5\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u548c\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u3002 \u4ece\u53f3\u4e0a\u89d2\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\uff0c\u53ef\u4ee5\u67e5\u770b\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u6bcf\u4e2a\u8282\u70b9\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

\u793a\u4f8b\u8f93\u51fa\uff1a

TensorFlow:  1.13\nModel:       resnet101\nMode:        training\nBatch size:  64\n...\n\nTotal images/sec: 125.67\n

\u8fd9\u8868\u793a MPI \u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0cTensorFlow \u57fa\u51c6\u6d4b\u8bd5\u7a0b\u5e8f\u5b8c\u6210\u4e86\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002

"},{"location":"admin/baize/developer/jobs/mpi.html#_8","title":"\u5c0f\u7ed3","text":"

\u901a\u8fc7\u672c\u6559\u7a0b\uff0c\u60a8\u5b66\u4e60\u4e86\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c\u4e00\u4e2a MPI \u4efb\u52a1\u3002\u6211\u4eec\u8be6\u7ec6\u4ecb\u7ecd\u4e86 MPIJob \u7684\u914d\u7f6e\u65b9\u5f0f\uff0c \u4ee5\u53ca\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u8fd0\u884c\u7684\u547d\u4ee4\u548c\u8d44\u6e90\u9700\u6c42\u3002\u5e0c\u671b\u672c\u6559\u7a0b\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9\uff0c\u5982\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u5e73\u53f0\u63d0\u4f9b\u7684\u5176\u4ed6\u6587\u6863\u6216\u8054\u7cfb\u6280\u672f\u652f\u6301\u3002

\u9644\u5f55 \uff1a

  • \u5982\u679c\u60a8\u7684\u8fd0\u884c\u73af\u5883\u672a\u9884\u88c5\u6240\u9700\u7684\u5e93\uff08\u5982 mpi4py\u3001Horovod \u7b49\uff09\uff0c\u8bf7\u5728\u4efb\u52a1\u4e2d\u6dfb\u52a0\u5b89\u88c5\u547d\u4ee4\uff0c\u6216\u8005\u4f7f\u7528\u9884\u88c5\u4e86\u76f8\u5173\u4f9d\u8d56\u7684\u955c\u50cf\u3002
  • \u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u4fee\u6539 MPIJob \u7684\u914d\u7f6e\uff0c\u4f8b\u5982\u66f4\u6539\u955c\u50cf\u3001\u547d\u4ee4\u53c2\u6570\u3001\u8d44\u6e90\u8bf7\u6c42\u7b49\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html","title":"MXNet \u4efb\u52a1","text":"

Warning

\u7531\u4e8e Apache MXNet \u9879\u76ee\u5df2\u5b58\u6863\uff0c\u56e0\u6b64 Kubeflow MXJob \u5c06\u5728\u672a\u6765\u7684 Training Operator 1.9 \u7248\u672c\u4e2d\u5f03\u7528\u548c\u5220\u9664\u3002

Apache MXNet \u662f\u4e00\u4e2a\u9ad8\u6027\u80fd\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u652f\u6301\u591a\u79cd\u7f16\u7a0b\u8bed\u8a00\u3002MXNet \u4efb\u52a1\u53ef\u4ee5\u4f7f\u7528\u591a\u79cd\u65b9\u5f0f\u8fdb\u884c\u8bad\u7ec3\uff0c\u5305\u62ec\u5355\u673a\u6a21\u5f0f\u548c\u5206\u5e03\u5f0f\u6a21\u5f0f\u3002\u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86\u5bf9 MXNet \u4efb\u52a1\u7684\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa MXNet \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

\u672c\u6559\u7a0b\u5c06\u6307\u5bfc\u60a8\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c MXNet \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
  • \u4efb\u52a1\u7c7b\u578b\uff1aMXNet\uff0c\u652f\u6301\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4e24\u79cd\u6a21\u5f0f\u3002
  • \u8fd0\u884c\u73af\u5883\uff1a\u9009\u62e9\u5305\u542b MXNet \u6846\u67b6\u7684\u955c\u50cf\uff0c\u6216\u5728\u4efb\u52a1\u4e2d\u5b89\u88c5\u5fc5\u8981\u7684\u4f9d\u8d56\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

\u6211\u4eec\u4f7f\u7528 release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest \u955c\u50cf\u4f5c\u4e3a\u4efb\u52a1\u7684\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002\u8be5\u955c\u50cf\u9884\u88c5\u4e86 MXNet \u53ca\u5176\u76f8\u5173\u4f9d\u8d56\uff0c\u652f\u6301 GPU \u52a0\u901f\u3002

\u6ce8\u610f\uff1a\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u548c\u7ba1\u7406\u73af\u5883\uff0c\u8bf7\u53c2\u8003 \u73af\u5883\u5217\u8868\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#mxnet_1","title":"\u521b\u5efa MXNet \u4efb\u52a1","text":""},{"location":"admin/baize/developer/jobs/mxnet.html#mxnet_2","title":"MXNet \u5355\u673a\u4efb\u52a1","text":""},{"location":"admin/baize/developer/jobs/mxnet.html#_3","title":"\u521b\u5efa\u6b65\u9aa4","text":"
  1. \u767b\u5f55\u5e73\u53f0\uff1a\u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3\uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
  2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\uff0c\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a MXNet\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
  4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cMXNet \u5355\u673a\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
  5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\uff0c\u914d\u7f6e\u4efb\u52a1\u7684\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u4fe1\u606f\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html#_4","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4\uff1apython3
  • \u547d\u4ee4\u53c2\u6570\uff1a

    /mxnet/mxnet/example/gluon/mnist/mnist.py --epochs 10 --cuda\n

    \u8bf4\u660e\uff1a

    • /mxnet/mxnet/example/gluon/mnist/mnist.py\uff1aMXNet \u63d0\u4f9b\u7684 MNIST \u624b\u5199\u6570\u5b57\u8bc6\u522b\u793a\u4f8b\u811a\u672c\u3002
    • --epochs 10\uff1a\u8bbe\u7f6e\u8bad\u7ec3\u8f6e\u6570\u4e3a 10\u3002
    • --cuda\uff1a\u4f7f\u7528 CUDA \u8fdb\u884c GPU \u52a0\u901f\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html#_5","title":"\u8d44\u6e90\u914d\u7f6e","text":"
  • \u526f\u672c\u6570\uff1a1\uff08\u5355\u673a\u4efb\u52a1\uff09
  • \u8d44\u6e90\u8bf7\u6c42\uff1a
    • CPU\uff1a2 \u6838
    • \u5185\u5b58\uff1a4 GiB
    • GPU\uff1a1 \u5757
"},{"location":"admin/baize/developer/jobs/mxnet.html#mxjob","title":"\u5b8c\u6574\u7684 MXJob \u914d\u7f6e\u793a\u4f8b","text":"

\u4ee5\u4e0b\u662f\u5355\u673a MXJob \u7684 YAML \u914d\u7f6e\uff1a

apiVersion: \"kubeflow.org/v1\"\nkind: \"MXJob\"\nmetadata:\n  name: \"mxnet-single-job\"\nspec:\n  jobMode: MXTrain\n  mxReplicaSpecs:\n    Worker:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              command: [\"python3\"]\n              args:\n                [\n                  \"/mxnet/mxnet/example/gluon/mnist/mnist.py\",\n                  \"--epochs\",\n                  \"10\",\n                  \"--cuda\",\n                ]\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n

\u914d\u7f6e\u89e3\u6790\uff1a

  • apiVersion \u548c kind\uff1a\u6307\u5b9a\u8d44\u6e90\u7684 API \u7248\u672c\u548c\u7c7b\u578b\uff0c\u8fd9\u91cc\u662f MXJob\u3002
  • metadata\uff1a\u5143\u6570\u636e\uff0c\u5305\u62ec\u4efb\u52a1\u540d\u79f0\u7b49\u4fe1\u606f\u3002
  • spec\uff1a\u4efb\u52a1\u7684\u8be6\u7ec6\u914d\u7f6e\u3002
    • jobMode\uff1a\u8bbe\u7f6e\u4e3a MXTrain\uff0c\u8868\u793a\u8bad\u7ec3\u4efb\u52a1\u3002
    • mxReplicaSpecs\uff1aMXNet \u4efb\u52a1\u7684\u526f\u672c\u914d\u7f6e\u3002
      • Worker\uff1a\u6307\u5b9a\u5de5\u4f5c\u8282\u70b9\u7684\u914d\u7f6e\u3002
        • replicas\uff1a\u526f\u672c\u6570\uff0c\u8fd9\u91cc\u4e3a 1\u3002
        • restartPolicy\uff1a\u91cd\u542f\u7b56\u7565\uff0c\u8bbe\u4e3a Never\uff0c\u8868\u793a\u4efb\u52a1\u5931\u8d25\u65f6\u4e0d\u91cd\u542f\u3002
        • template\uff1aPod \u6a21\u677f\uff0c\u5b9a\u4e49\u5bb9\u5668\u7684\u8fd0\u884c\u73af\u5883\u548c\u8d44\u6e90\u3002
          • containers\uff1a\u5bb9\u5668\u5217\u8868\u3002
            • name\uff1a\u5bb9\u5668\u540d\u79f0\u3002
            • image\uff1a\u4f7f\u7528\u7684\u955c\u50cf\u3002
            • command \u548c args\uff1a\u542f\u52a8\u547d\u4ee4\u548c\u53c2\u6570\u3002
            • ports\uff1a\u5bb9\u5668\u7aef\u53e3\u914d\u7f6e\u3002
            • resources\uff1a\u8d44\u6e90\u8bf7\u6c42\u548c\u9650\u5236\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html#_6","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c MXNet \u5355\u673a\u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#_7","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

\u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u60a8\u53ef\u4ee5\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u548c\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u3002\u4ece\u53f3\u4e0a\u89d2\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\uff0c\u53ef\u4ee5\u67e5\u770b\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

\u793a\u4f8b\u8f93\u51fa\uff1a

Epoch 1: accuracy=0.95\nEpoch 2: accuracy=0.97\n...\nEpoch 10: accuracy=0.98\nTraining completed.\n

\u8fd9\u8868\u793a MXNet \u5355\u673a\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#mxnet_3","title":"MXNet \u5206\u5e03\u5f0f\u4efb\u52a1","text":"

\u5728\u5206\u5e03\u5f0f\u6a21\u5f0f\u4e0b\uff0cMXNet \u4efb\u52a1\u53ef\u4ee5\u4f7f\u7528\u591a\u53f0\u8ba1\u7b97\u8282\u70b9\u5171\u540c\u5b8c\u6210\u8bad\u7ec3\uff0c\u63d0\u9ad8\u8bad\u7ec3\u6548\u7387\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#_8","title":"\u521b\u5efa\u6b65\u9aa4","text":"
  1. \u767b\u5f55\u5e73\u53f0\uff1a\u540c\u4e0a\u3002
  2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a MXNet\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
  4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cMXNet \u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
  5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u9700\u6c42\uff0c\u914d\u7f6e\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html#_9","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4\uff1apython3
  • \u547d\u4ee4\u53c2\u6570\uff1a

    /mxnet/mxnet/example/image-classification/train_mnist.py --num-epochs 10 --num-layers 2 --kv-store dist_device_sync --gpus 0\n

    \u8bf4\u660e\uff1a

    • /mxnet/mxnet/example/image-classification/train_mnist.py\uff1aMXNet \u63d0\u4f9b\u7684\u56fe\u50cf\u5206\u7c7b\u793a\u4f8b\u811a\u672c\u3002
    • --num-epochs 10\uff1a\u8bad\u7ec3\u8f6e\u6570\u4e3a 10\u3002
    • --num-layers 2\uff1a\u6a21\u578b\u7684\u5c42\u6570\u4e3a 2\u3002
    • --kv-store dist_device_sync\uff1a\u4f7f\u7528\u5206\u5e03\u5f0f\u8bbe\u5907\u540c\u6b65\u6a21\u5f0f\u3002
    • --gpus 0\uff1a\u4f7f\u7528 GPU \u8fdb\u884c\u52a0\u901f\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html#_10","title":"\u8d44\u6e90\u914d\u7f6e","text":"
  • \u4efb\u52a1\u526f\u672c\u6570\uff1a3\uff08\u5305\u62ec Scheduler\u3001Server \u548c Worker\uff09
  • \u5404\u89d2\u8272\u8d44\u6e90\u8bf7\u6c42\uff1a
    • Scheduler\uff08\u8c03\u5ea6\u5668\uff09\uff1a
      • \u526f\u672c\u6570\uff1a1
      • \u8d44\u6e90\u8bf7\u6c42\uff1a
        • CPU\uff1a2 \u6838
        • \u5185\u5b58\uff1a4 GiB
        • GPU\uff1a1 \u5757
    • Server\uff08\u53c2\u6570\u670d\u52a1\u5668\uff09\uff1a
      • \u526f\u672c\u6570\uff1a1
      • \u8d44\u6e90\u8bf7\u6c42\uff1a
        • CPU\uff1a2 \u6838
        • \u5185\u5b58\uff1a4 GiB
        • GPU\uff1a1 \u5757
    • Worker\uff08\u5de5\u4f5c\u8282\u70b9\uff09\uff1a
      • \u526f\u672c\u6570\uff1a1
      • \u8d44\u6e90\u8bf7\u6c42\uff1a
        • CPU\uff1a2 \u6838
        • \u5185\u5b58\uff1a4 GiB
        • GPU\uff1a1 \u5757
"},{"location":"admin/baize/developer/jobs/mxnet.html#mxjob_1","title":"\u5b8c\u6574\u7684 MXJob \u914d\u7f6e\u793a\u4f8b","text":"

\u4ee5\u4e0b\u662f\u5206\u5e03\u5f0f MXJob \u7684 YAML \u914d\u7f6e\uff1a

apiVersion: \"kubeflow.org/v1\"\nkind: \"MXJob\"\nmetadata:\n  name: \"mxnet-job\"\nspec:\n  jobMode: MXTrain\n  mxReplicaSpecs:\n    Scheduler:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n    Server:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n    Worker:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              command: [\"python3\"]\n              args:\n                [\n                  \"/mxnet/mxnet/example/image-classification/train_mnist.py\",\n                  \"--num-epochs\",\n                  \"10\",\n                  \"--num-layers\",\n                  \"2\",\n                  \"--kv-store\",\n                  \"dist_device_sync\",\n                  \"--gpus\",\n                  \"0\",\n                ]\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n

\u914d\u7f6e\u89e3\u6790\uff1a

  • Scheduler\uff08\u8c03\u5ea6\u5668\uff09\uff1a\u8d1f\u8d23\u534f\u8c03\u96c6\u7fa4\u4e2d\u5404\u8282\u70b9\u7684\u4efb\u52a1\u8c03\u5ea6\u3002
  • Server\uff08\u53c2\u6570\u670d\u52a1\u5668\uff09\uff1a\u7528\u4e8e\u5b58\u50a8\u548c\u66f4\u65b0\u6a21\u578b\u53c2\u6570\uff0c\u5b9e\u73b0\u5206\u5e03\u5f0f\u53c2\u6570\u540c\u6b65\u3002
  • Worker\uff08\u5de5\u4f5c\u8282\u70b9\uff09\uff1a\u5b9e\u9645\u6267\u884c\u8bad\u7ec3\u4efb\u52a1\u3002
  • \u8d44\u6e90\u914d\u7f6e\uff1a\u4e3a\u5404\u89d2\u8272\u5206\u914d\u9002\u5f53\u7684\u8d44\u6e90\uff0c\u786e\u4fdd\u4efb\u52a1\u987a\u5229\u8fd0\u884c\u3002
"},{"location":"admin/baize/developer/jobs/mxnet.html#_11","title":"\u8bbe\u7f6e\u4efb\u52a1\u526f\u672c\u6570","text":"

\u5728\u521b\u5efa MXNet \u5206\u5e03\u5f0f\u4efb\u52a1\u65f6\uff0c\u9700\u8981\u6839\u636e mxReplicaSpecs \u4e2d\u914d\u7f6e\u7684\u526f\u672c\u6570\uff0c\u6b63\u786e\u8bbe\u7f6e \u4efb\u52a1\u526f\u672c\u6570\u3002

  • \u603b\u526f\u672c\u6570 = Scheduler \u526f\u672c\u6570 + Server \u526f\u672c\u6570 + Worker \u526f\u672c\u6570
  • \u672c\u793a\u4f8b\u4e2d\uff1a
    • Scheduler \u526f\u672c\u6570\uff1a1
    • Server \u526f\u672c\u6570\uff1a1
    • Worker \u526f\u672c\u6570\uff1a1
    • \u603b\u526f\u672c\u6570\uff1a1 + 1 + 1 = 3

\u56e0\u6b64\uff0c\u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u9700\u8981\u5c06 \u4efb\u52a1\u526f\u672c\u6570 \u8bbe\u7f6e\u4e3a 3\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#_12","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c MXNet \u5206\u5e03\u5f0f\u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#_13","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u548c\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3002\u60a8\u53ef\u4ee5\u67e5\u770b\u6bcf\u4e2a\u89d2\u8272\uff08Scheduler\u3001Server\u3001Worker\uff09\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

\u793a\u4f8b\u8f93\u51fa\uff1a

INFO:root:Epoch[0] Batch [50]     Speed: 1000 samples/sec   accuracy=0.85\nINFO:root:Epoch[0] Batch [100]    Speed: 1200 samples/sec   accuracy=0.87\n...\nINFO:root:Epoch[9] Batch [100]    Speed: 1300 samples/sec   accuracy=0.98\nTraining completed.\n

\u8fd9\u8868\u793a MXNet \u5206\u5e03\u5f0f\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#_14","title":"\u5c0f\u7ed3","text":"

\u901a\u8fc7\u672c\u6559\u7a0b\uff0c\u60a8\u5b66\u4e60\u4e86\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c MXNet \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002\u6211\u4eec\u8be6\u7ec6\u4ecb\u7ecd\u4e86 MXJob \u7684\u914d\u7f6e\u65b9\u5f0f\uff0c\u4ee5\u53ca\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u8fd0\u884c\u7684\u547d\u4ee4\u548c\u8d44\u6e90\u9700\u6c42\u3002\u5e0c\u671b\u672c\u6559\u7a0b\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9\uff0c\u5982\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u5e73\u53f0\u63d0\u4f9b\u7684\u5176\u4ed6\u6587\u6863\u6216\u8054\u7cfb\u6280\u672f\u652f\u6301\u3002

"},{"location":"admin/baize/developer/jobs/mxnet.html#_15","title":"\u9644\u5f55","text":"
  • \u6ce8\u610f\u4e8b\u9879\uff1a

    • \u786e\u4fdd\u60a8\u4f7f\u7528\u7684\u955c\u50cf\u5305\u542b\u6240\u9700\u7684 MXNet \u7248\u672c\u548c\u4f9d\u8d56\u3002
    • \u6839\u636e\u5b9e\u9645\u9700\u6c42\u8c03\u6574\u8d44\u6e90\u914d\u7f6e\uff0c\u907f\u514d\u8d44\u6e90\u4e0d\u8db3\u6216\u6d6a\u8d39\u3002
    • \u5982\u9700\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u8bad\u7ec3\u811a\u672c\uff0c\u8bf7\u4fee\u6539\u542f\u52a8\u547d\u4ee4\u548c\u53c2\u6570\u3002
  • \u53c2\u8003\u6587\u6863\uff1a

    • MXNet \u5b98\u65b9\u6587\u6863
    • Kubeflow MXJob \u6307\u5357
"},{"location":"admin/baize/developer/jobs/paddle.html","title":"PaddlePaddle \u4efb\u52a1","text":"

PaddlePaddle\uff08\u98de\u6868\uff09\u662f\u767e\u5ea6\u5f00\u6e90\u7684\u6df1\u5ea6\u5b66\u4e60\u5e73\u53f0\uff0c\u652f\u6301\u4e30\u5bcc\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u548c\u5206\u5e03\u5f0f\u8bad\u7ec3\u65b9\u5f0f\u3002PaddlePaddle \u4efb\u52a1\u53ef\u4ee5\u901a\u8fc7\u5355\u673a\u6216\u5206\u5e03\u5f0f\u6a21\u5f0f\u8fdb\u884c\u8bad\u7ec3\u3002\u5728 AI Lab \u5e73\u53f0\u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86\u5bf9 PaddlePaddle \u4efb\u52a1\u7684\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa PaddlePaddle \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

\u672c\u6559\u7a0b\u5c06\u6307\u5bfc\u60a8\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c PaddlePaddle \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
  • \u4efb\u52a1\u7c7b\u578b\uff1aPaddlePaddle\uff0c\u652f\u6301\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4e24\u79cd\u6a21\u5f0f\u3002
  • \u8fd0\u884c\u73af\u5883\uff1a\u9009\u62e9\u5305\u542b PaddlePaddle \u6846\u67b6\u7684\u955c\u50cf\uff0c\u6216\u5728\u4efb\u52a1\u4e2d\u5b89\u88c5\u5fc5\u8981\u7684\u4f9d\u8d56\u3002
"},{"location":"admin/baize/developer/jobs/paddle.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

\u6211\u4eec\u4f7f\u7528 registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu \u955c\u50cf\u4f5c\u4e3a\u4efb\u52a1\u7684\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002\u8be5\u955c\u50cf\u9884\u88c5\u4e86 PaddlePaddle \u6846\u67b6\uff0c\u9002\u7528\u4e8e CPU \u8ba1\u7b97\u3002\u5982\u679c\u9700\u8981\u4f7f\u7528 GPU\uff0c\u8bf7\u9009\u62e9\u5bf9\u5e94\u7684 GPU \u7248\u672c\u955c\u50cf\u3002

\u6ce8\u610f\uff1a\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u548c\u7ba1\u7406\u73af\u5883\uff0c\u8bf7\u53c2\u8003 \u73af\u5883\u5217\u8868\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#paddlepaddle_1","title":"\u521b\u5efa PaddlePaddle \u4efb\u52a1","text":""},{"location":"admin/baize/developer/jobs/paddle.html#paddlepaddle_2","title":"PaddlePaddle \u5355\u673a\u8bad\u7ec3\u4efb\u52a1","text":""},{"location":"admin/baize/developer/jobs/paddle.html#_3","title":"\u521b\u5efa\u6b65\u9aa4","text":"
  1. \u767b\u5f55\u5e73\u53f0\uff1a\u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3\uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
  2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\uff0c\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a PaddlePaddle\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
  4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cPaddlePaddle \u5355\u673a\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
  5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\uff0c\u914d\u7f6e\u4efb\u52a1\u7684\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u4fe1\u606f\u3002
"},{"location":"admin/baize/developer/jobs/paddle.html#_4","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4\uff1apython
  • \u547d\u4ee4\u53c2\u6570\uff1a

    -m paddle.distributed.launch run_check\n

    \u8bf4\u660e\uff1a

    • -m paddle.distributed.launch\uff1a\u4f7f\u7528 PaddlePaddle \u63d0\u4f9b\u7684\u5206\u5e03\u5f0f\u542f\u52a8\u6a21\u5757\uff0c\u5373\u4f7f\u5728\u5355\u673a\u6a21\u5f0f\u4e0b\u4e5f\u53ef\u4ee5\u4f7f\u7528\uff0c\u65b9\u4fbf\u5c06\u6765\u8fc1\u79fb\u5230\u5206\u5e03\u5f0f\u3002
    • run_check\uff1aPaddlePaddle \u63d0\u4f9b\u7684\u6d4b\u8bd5\u811a\u672c\uff0c\u7528\u4e8e\u68c0\u67e5\u5206\u5e03\u5f0f\u73af\u5883\u662f\u5426\u6b63\u5e38\u3002
"},{"location":"admin/baize/developer/jobs/paddle.html#_5","title":"\u8d44\u6e90\u914d\u7f6e","text":"
  • \u526f\u672c\u6570\uff1a1\uff08\u5355\u673a\u4efb\u52a1\uff09
  • \u8d44\u6e90\u8bf7\u6c42\uff1a
    • CPU\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 1 \u6838
    • \u5185\u5b58\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 2 GiB
    • GPU\uff1a\u5982\u679c\u9700\u8981\u4f7f\u7528 GPU\uff0c\u9009\u62e9 GPU \u7248\u672c\u7684\u955c\u50cf\uff0c\u5e76\u5206\u914d\u76f8\u5e94\u7684 GPU \u8d44\u6e90
"},{"location":"admin/baize/developer/jobs/paddle.html#paddlejob","title":"\u5b8c\u6574\u7684 PaddleJob \u914d\u7f6e\u793a\u4f8b","text":"

\u4ee5\u4e0b\u662f\u5355\u673a PaddleJob \u7684 YAML \u914d\u7f6e\uff1a

apiVersion: kubeflow.org/v1\nkind: PaddleJob\nmetadata:\n    name: paddle-simple-cpu\n    namespace: kubeflow\nspec:\n    paddleReplicaSpecs:\n        Worker:\n            replicas: 1\n            restartPolicy: OnFailure\n            template:\n                spec:\n                    containers:\n                        - name: paddle\n                          image: registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu\n                          command:\n                              [\n                                  'python',\n                                  '-m',\n                                  'paddle.distributed.launch',\n                                  'run_check',\n                              ]\n

\u914d\u7f6e\u89e3\u6790\uff1a

  • apiVersion \u548c kind\uff1a\u6307\u5b9a\u8d44\u6e90\u7684 API \u7248\u672c\u548c\u7c7b\u578b\uff0c\u8fd9\u91cc\u662f PaddleJob\u3002
  • metadata\uff1a\u5143\u6570\u636e\uff0c\u5305\u62ec\u4efb\u52a1\u540d\u79f0\u548c\u547d\u540d\u7a7a\u95f4\u3002
  • spec\uff1a\u4efb\u52a1\u7684\u8be6\u7ec6\u914d\u7f6e\u3002
    • paddleReplicaSpecs\uff1aPaddlePaddle \u4efb\u52a1\u7684\u526f\u672c\u914d\u7f6e\u3002
      • Worker\uff1a\u6307\u5b9a\u5de5\u4f5c\u8282\u70b9\u7684\u914d\u7f6e\u3002
        • replicas\uff1a\u526f\u672c\u6570\uff0c\u8fd9\u91cc\u4e3a 1\uff0c\u8868\u793a\u5355\u673a\u8bad\u7ec3\u3002
        • restartPolicy\uff1a\u91cd\u542f\u7b56\u7565\uff0c\u8bbe\u4e3a OnFailure\uff0c\u8868\u793a\u4efb\u52a1\u5931\u8d25\u65f6\u81ea\u52a8\u91cd\u542f\u3002
        • template\uff1aPod \u6a21\u677f\uff0c\u5b9a\u4e49\u5bb9\u5668\u7684\u8fd0\u884c\u73af\u5883\u548c\u8d44\u6e90\u3002
          • containers\uff1a\u5bb9\u5668\u5217\u8868\u3002
            • name\uff1a\u5bb9\u5668\u540d\u79f0\u3002
            • image\uff1a\u4f7f\u7528\u7684\u955c\u50cf\u3002
            • command\uff1a\u542f\u52a8\u547d\u4ee4\u548c\u53c2\u6570\u3002
"},{"location":"admin/baize/developer/jobs/paddle.html#_6","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c PaddlePaddle \u5355\u673a\u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#_7","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

\u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u60a8\u53ef\u4ee5\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u548c\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u3002\u4ece\u53f3\u4e0a\u89d2\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\uff0c\u53ef\u4ee5\u67e5\u770b\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

\u793a\u4f8b\u8f93\u51fa\uff1a

run check success, PaddlePaddle is installed correctly on this node :)\n

\u8fd9\u8868\u793a PaddlePaddle \u5355\u673a\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u73af\u5883\u914d\u7f6e\u6b63\u5e38\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#paddlepaddle_3","title":"PaddlePaddle \u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1","text":"

\u5728\u5206\u5e03\u5f0f\u6a21\u5f0f\u4e0b\uff0cPaddlePaddle \u4efb\u52a1\u53ef\u4ee5\u4f7f\u7528\u591a\u53f0\u8ba1\u7b97\u8282\u70b9\u5171\u540c\u5b8c\u6210\u8bad\u7ec3\uff0c\u63d0\u9ad8\u8bad\u7ec3\u6548\u7387\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#_8","title":"\u521b\u5efa\u6b65\u9aa4","text":"
  1. \u767b\u5f55\u5e73\u53f0\uff1a\u540c\u4e0a\u3002
  2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a PaddlePaddle\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
  4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cPaddlePaddle \u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
  5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u9700\u6c42\uff0c\u914d\u7f6e\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u3002
"},{"location":"admin/baize/developer/jobs/paddle.html#_9","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4\uff1apython
  • \u547d\u4ee4\u53c2\u6570\uff1a

    -m paddle.distributed.launch train.py --epochs=10\n

    \u8bf4\u660e\uff1a

    • -m paddle.distributed.launch\uff1a\u4f7f\u7528 PaddlePaddle \u63d0\u4f9b\u7684\u5206\u5e03\u5f0f\u542f\u52a8\u6a21\u5757\u3002
    • train.py\uff1a\u60a8\u7684\u8bad\u7ec3\u811a\u672c\uff0c\u9700\u8981\u653e\u5728\u955c\u50cf\u4e2d\u6216\u6302\u8f7d\u5230\u5bb9\u5668\u5185\u3002
    • --epochs=10\uff1a\u8bad\u7ec3\u7684\u8f6e\u6570\uff0c\u8fd9\u91cc\u8bbe\u7f6e\u4e3a 10\u3002
"},{"location":"admin/baize/developer/jobs/paddle.html#_10","title":"\u8d44\u6e90\u914d\u7f6e","text":"
  • \u4efb\u52a1\u526f\u672c\u6570\uff1a\u6839\u636e Worker \u526f\u672c\u6570\u8bbe\u7f6e\uff0c\u8fd9\u91cc\u4e3a 2\u3002
  • \u8d44\u6e90\u8bf7\u6c42\uff1a
    • CPU\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 1 \u6838
    • \u5185\u5b58\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 2 GiB
    • GPU\uff1a\u5982\u679c\u9700\u8981\u4f7f\u7528 GPU\uff0c\u9009\u62e9 GPU \u7248\u672c\u7684\u955c\u50cf\uff0c\u5e76\u5206\u914d\u76f8\u5e94\u7684 GPU \u8d44\u6e90
"},{"location":"admin/baize/developer/jobs/paddle.html#paddlejob_1","title":"\u5b8c\u6574\u7684 PaddleJob \u914d\u7f6e\u793a\u4f8b","text":"

\u4ee5\u4e0b\u662f\u5206\u5e03\u5f0f PaddleJob \u7684 YAML \u914d\u7f6e\uff1a

apiVersion: kubeflow.org/v1\nkind: PaddleJob\nmetadata:\n    name: paddle-distributed-job\n    namespace: kubeflow\nspec:\n    paddleReplicaSpecs:\n        Worker:\n            replicas: 2\n            restartPolicy: OnFailure\n            template:\n                spec:\n                    containers:\n                        - name: paddle\n                          image: registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu\n                          command:\n                              [\n                                  'python',\n                                  '-m',\n                                  'paddle.distributed.launch',\n                                  'train.py',\n                              ]\n                          args:\n                              - '--epochs=10'\n

\u914d\u7f6e\u89e3\u6790\uff1a

  • Worker\uff1a
    • replicas\uff1a\u526f\u672c\u6570\uff0c\u8bbe\u7f6e\u4e3a 2\uff0c\u8868\u793a\u4f7f\u7528 2 \u4e2a\u5de5\u4f5c\u8282\u70b9\u8fdb\u884c\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002
    • \u5176\u4ed6\u914d\u7f6e\u4e0e\u5355\u673a\u6a21\u5f0f\u7c7b\u4f3c\u3002
"},{"location":"admin/baize/developer/jobs/paddle.html#_11","title":"\u8bbe\u7f6e\u4efb\u52a1\u526f\u672c\u6570","text":"

\u5728\u521b\u5efa PaddlePaddle \u5206\u5e03\u5f0f\u4efb\u52a1\u65f6\uff0c\u9700\u8981\u6839\u636e paddleReplicaSpecs \u4e2d\u914d\u7f6e\u7684\u526f\u672c\u6570\uff0c\u6b63\u786e\u8bbe\u7f6e \u4efb\u52a1\u526f\u672c\u6570\u3002

  • \u603b\u526f\u672c\u6570 = Worker \u526f\u672c\u6570
  • \u672c\u793a\u4f8b\u4e2d\uff1a
    • Worker \u526f\u672c\u6570\uff1a2
    • \u603b\u526f\u672c\u6570\uff1a2

\u56e0\u6b64\uff0c\u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u9700\u8981\u5c06 \u4efb\u52a1\u526f\u672c\u6570 \u8bbe\u7f6e\u4e3a 2\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#_12","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c PaddlePaddle \u5206\u5e03\u5f0f\u4efb\u52a1\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#_13","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u548c\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3002\u60a8\u53ef\u4ee5\u67e5\u770b\u6bcf\u4e2a\u5de5\u4f5c\u8282\u70b9\u7684\u65e5\u5fd7\u8f93\u51fa\uff0c\u786e\u8ba4\u5206\u5e03\u5f0f\u8bad\u7ec3\u662f\u5426\u6b63\u5e38\u8fd0\u884c\u3002

\u793a\u4f8b\u8f93\u51fa\uff1a

Worker 0: Epoch 1, Batch 100, Loss 0.5\nWorker 1: Epoch 1, Batch 100, Loss 0.6\n...\nTraining completed.\n

\u8fd9\u8868\u793a PaddlePaddle \u5206\u5e03\u5f0f\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#_14","title":"\u5c0f\u7ed3","text":"

\u901a\u8fc7\u672c\u6559\u7a0b\uff0c\u60a8\u5b66\u4e60\u4e86\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c PaddlePaddle \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002\u6211\u4eec\u8be6\u7ec6\u4ecb\u7ecd\u4e86 PaddleJob \u7684\u914d\u7f6e\u65b9\u5f0f\uff0c\u4ee5\u53ca\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u8fd0\u884c\u7684\u547d\u4ee4\u548c\u8d44\u6e90\u9700\u6c42\u3002\u5e0c\u671b\u672c\u6559\u7a0b\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9\uff0c\u5982\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u5e73\u53f0\u63d0\u4f9b\u7684\u5176\u4ed6\u6587\u6863\u6216\u8054\u7cfb\u6280\u672f\u652f\u6301\u3002

"},{"location":"admin/baize/developer/jobs/paddle.html#_15","title":"\u9644\u5f55","text":"
  • \u6ce8\u610f\u4e8b\u9879\uff1a

    • \u8bad\u7ec3\u811a\u672c\uff1a\u786e\u4fdd train.py\uff08\u6216\u5176\u4ed6\u8bad\u7ec3\u811a\u672c\uff09\u5728\u5bb9\u5668\u5185\u5b58\u5728\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u81ea\u5b9a\u4e49\u955c\u50cf\u3001\u6302\u8f7d\u6301\u4e45\u5316\u5b58\u50a8\u7b49\u65b9\u5f0f\u5c06\u811a\u672c\u653e\u5165\u5bb9\u5668\u3002
    • \u955c\u50cf\u9009\u62e9\uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u955c\u50cf\uff0c\u4f8b\u5982\u4f7f\u7528 GPU \u65f6\u9009\u62e9 paddle:2.4.0rc0-gpu \u7b49\u3002
    • \u53c2\u6570\u8c03\u6574\uff1a\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 command \u548c args \u6765\u4f20\u9012\u4e0d\u540c\u7684\u8bad\u7ec3\u53c2\u6570\u3002
  • \u53c2\u8003\u6587\u6863\uff1a

    • PaddlePaddle \u5b98\u65b9\u6587\u6863
    • Kubeflow PaddleJob \u6307\u5357
"},{"location":"admin/baize/developer/jobs/pytorch.html","title":"Pytorch \u4efb\u52a1","text":"

Pytorch \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7075\u6d3b\u7684\u8bad\u7ec3\u548c\u90e8\u7f72\u73af\u5883\u3002 Pytorch \u4efb\u52a1\u662f\u4e00\u4e2a\u4f7f\u7528 Pytorch \u6846\u67b6\u7684\u4efb\u52a1\u3002

\u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86 Pytorch \u4efb\u52a1\u652f\u6301\u548c\u9002\u914d\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c \u5feb\u901f\u521b\u5efa Pytorch \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

"},{"location":"admin/baize/developer/jobs/pytorch.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
  • \u4efb\u52a1\u7c7b\u578b\u540c\u65f6\u652f\u6301 Pytorch \u5355\u673a \u548c Pytorch \u5206\u5e03\u5f0f \u4e24\u79cd\u6a21\u5f0f\u3002
  • \u8fd0\u884c\u955c\u50cf\u5185\u5df2\u7ecf\u9ed8\u8ba4\u652f\u6301 Pytorch \u6846\u67b6\uff0c\u65e0\u9700\u989d\u5916\u5b89\u88c5\u3002
"},{"location":"admin/baize/developer/jobs/pytorch.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

\u5728\u8fd9\u91cc\u6211\u4eec\u4f7f\u7528 baize-notebook \u57fa\u7840\u955c\u50cf \u548c \u5173\u8054\u73af\u5883 \u7684\u65b9\u5f0f\u6765\u4f5c\u4e3a\u4efb\u52a1\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002

\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u73af\u5883\uff0c\u8bf7\u53c2\u8003 \u73af\u5883\u5217\u8868\u3002

"},{"location":"admin/baize/developer/jobs/pytorch.html#_3","title":"\u521b\u5efa\u4efb\u52a1","text":""},{"location":"admin/baize/developer/jobs/pytorch.html#pytorch_1","title":"Pytorch \u5355\u673a\u4efb\u52a1","text":"
  1. \u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Pytorch \u5355\u673a\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
  4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
"},{"location":"admin/baize/developer/jobs/pytorch.html#_4","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
  • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528
import torch\nimport torch.nn as nn\nimport torch.optim as optim\n\n# \u5b9a\u4e49\u4e00\u4e2a\u7b80\u5355\u7684\u795e\u7ecf\u7f51\u7edc\nclass SimpleNet(nn.Module):\n    def __init__(self):\n        super(SimpleNet, self).__init__()\n        self.fc = nn.Linear(10, 1)\n\n    def forward(self, x):\n        return self.fc(x)\n\n# \u521b\u5efa\u6a21\u578b\u3001\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\nmodel = SimpleNet()\ncriterion = nn.MSELoss()\noptimizer = optim.SGD(model.parameters(), lr=0.01)\n\n# \u751f\u6210\u4e00\u4e9b\u968f\u673a\u6570\u636e\nx = torch.randn(100, 10)\ny = torch.randn(100, 1)\n\n# \u8bad\u7ec3\u6a21\u578b\nfor epoch in range(100):\n    # \u524d\u5411\u4f20\u64ad\n    outputs = model(x)\n    loss = criterion(outputs, y)\n\n    # \u53cd\u5411\u4f20\u64ad\u548c\u4f18\u5316\n    optimizer.zero_grad()\n    loss.backward()\n    optimizer.step()\n\n    if (epoch + 1) % 10 == 0:\n        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')\n\nprint('Training finished.')\n
"},{"location":"admin/baize/developer/jobs/pytorch.html#_5","title":"\u8fd0\u884c\u7ed3\u679c","text":"

\u4efb\u52a1\u63d0\u4ea4\u6210\u529f\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\u67e5\u770b\u5230\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ece\u53f3\u4e0a\u89d2\u53bb\u5f80 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \uff0c\u53ef\u4ee5\u67e5\u770b\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa

[HAMI-core Warn(1:140244541377408:utils.c:183)]: get default cuda from (null)\n[HAMI-core Msg(1:140244541377408:libvgpu.c:855)]: Initialized\nEpoch [10/100], Loss: 1.1248\nEpoch [20/100], Loss: 1.0486\nEpoch [30/100], Loss: 0.9969\nEpoch [40/100], Loss: 0.9611\nEpoch [50/100], Loss: 0.9360\nEpoch [60/100], Loss: 0.9182\nEpoch [70/100], Loss: 0.9053\nEpoch [80/100], Loss: 0.8960\nEpoch [90/100], Loss: 0.8891\nEpoch [100/100], Loss: 0.8841\nTraining finished.\n[HAMI-core Msg(1:140244541377408:multiprocess_memory_limit.c:468)]: Calling exit handler 1\n
"},{"location":"admin/baize/developer/jobs/pytorch.html#pytorch_2","title":"Pytorch \u5206\u5e03\u5f0f\u4efb\u52a1","text":"
  1. \u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u4efb\u52a1\u5217\u8868 \u9875\u9762\u3002
  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Pytorch \u5206\u5e03\u5f0f\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
  4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
"},{"location":"admin/baize/developer/jobs/pytorch.html#_6","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
  • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528
import os\nimport torch\nimport torch.distributed as dist\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.nn.parallel import DistributedDataParallel as DDP\n\nclass SimpleModel(nn.Module):\n    def __init__(self):\n        super(SimpleModel, self).__init__()\n        self.fc = nn.Linear(10, 1)\n\n    def forward(self, x):\n        return self.fc(x)\n\ndef train():\n    # \u6253\u5370\u73af\u5883\u4fe1\u606f\n    print(f'PyTorch version: {torch.__version__}')\n    print(f'CUDA available: {torch.cuda.is_available()}')\n    if torch.cuda.is_available():\n        print(f'CUDA version: {torch.version.cuda}')\n        print(f'CUDA device count: {torch.cuda.device_count()}')\n\n    rank = int(os.environ.get('RANK', '0'))\n    world_size = int(os.environ.get('WORLD_SIZE', '1'))\n\n    print(f'Rank: {rank}, World Size: {world_size}')\n\n    # \u521d\u59cb\u5316\u5206\u5e03\u5f0f\u73af\u5883\n    try:\n        if world_size > 1:\n            dist.init_process_group('nccl')\n            print('Distributed process group initialized successfully')\n        else:\n            print('Running in non-distributed mode')\n    except Exception as e:\n        print(f'Error initializing process group: {e}')\n        return\n\n    # \u8bbe\u7f6e\u8bbe\u5907\n    try:\n        if torch.cuda.is_available():\n            device = torch.device(f'cuda:{rank % torch.cuda.device_count()}')\n            print(f'Using CUDA device: {device}')\n        else:\n            device = torch.device('cpu')\n            print('CUDA not available, using CPU')\n    except Exception as e:\n        print(f'Error setting device: {e}')\n        device = torch.device('cpu')\n        print('Falling back to CPU')\n\n    try:\n        model = SimpleModel().to(device)\n        print('Model moved to device successfully')\n    except Exception as e:\n        print(f'Error moving model to device: {e}')\n        return\n\n    try:\n        if world_size > 1:\n            ddp_model = DDP(model, device_ids=[rank % torch.cuda.device_count()] if torch.cuda.is_available() else None)\n            print('DDP model created successfully')\n        else:\n            ddp_model = model\n            print('Using non-distributed model')\n    except Exception as e:\n        print(f'Error creating DDP model: {e}')\n        return\n\n    loss_fn = nn.MSELoss()\n    optimizer = optim.SGD(ddp_model.parameters(), lr=0.001)\n\n    # \u751f\u6210\u4e00\u4e9b\u968f\u673a\u6570\u636e\n    try:\n        data = torch.randn(100, 10, device=device)\n        labels = torch.randn(100, 1, device=device)\n        print('Data generated and moved to device successfully')\n    except Exception as e:\n        print(f'Error generating or moving data to device: {e}')\n        return\n\n    for epoch in range(10):\n        try:\n            ddp_model.train()\n            outputs = ddp_model(data)\n            loss = loss_fn(outputs, labels)\n            optimizer.zero_grad()\n            loss.backward()\n            optimizer.step()\n\n            if rank == 0:\n                print(f'Epoch {epoch}, Loss: {loss.item():.4f}')\n        except Exception as e:\n            print(f'Error during training epoch {epoch}: {e}')\n            break\n\n    if world_size > 1:\n        dist.destroy_process_group()\n\nif __name__ == '__main__':\n    train()\n
"},{"location":"admin/baize/developer/jobs/pytorch.html#_7","title":"\u4efb\u52a1\u526f\u672c\u6570","text":"

\u6ce8\u610f Pytorch \u5206\u5e03\u5f0f \u8bad\u7ec3\u4efb\u52a1\u4f1a\u521b\u5efa\u4e00\u7ec4 Master \u548c Worker \u7684\u8bad\u7ec3 Pod\uff0c Master \u8d1f\u8d23\u534f\u8c03\u8bad\u7ec3\u4efb\u52a1\uff0cWorker \u8d1f\u8d23\u5b9e\u9645\u7684\u8bad\u7ec3\u5de5\u4f5c\u3002

Note

\u672c\u6b21\u6f14\u793a\u4e2d\uff1aMaster \u526f\u672c\u6570\u4e3a 1\uff0cWorker \u526f\u672c\u6570\u4e3a 2\uff1b \u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728 \u4efb\u52a1\u914d\u7f6e \u4e2d\u8bbe\u7f6e\u526f\u672c\u6570\u4e3a 3\uff0c\u5373 Master \u526f\u672c\u6570 + Worker \u526f\u672c\u6570\u3002 Pytorch \u4f1a\u81ea\u52a8\u8c03\u8c10 Master \u548c Worker \u7684\u89d2\u8272\u3002

"},{"location":"admin/baize/developer/jobs/pytorch.html#_8","title":"\u8fd0\u884c\u7ed3\u679c","text":"

\u540c\u6837\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ee5\u53ca\u6bcf\u4e2a Pod \u7684\u65e5\u5fd7\u8f93\u51fa\u3002

"},{"location":"admin/baize/developer/jobs/tensorboard.html","title":"\u4efb\u52a1\u5206\u6790\u4ecb\u7ecd","text":"

\u5728 AI Lab \u6a21\u5757\u4e2d\uff0c\u63d0\u4f9b\u4e86\u6a21\u578b\u5f00\u53d1\u8fc7\u7a0b\u91cd\u8981\u7684\u53ef\u89c6\u5316\u5206\u6790\u5de5\u5177\uff0c\u7528\u4e8e\u5c55\u793a\u673a\u5668\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u548c\u7ed3\u679c\u3002 \u672c\u6587\u5c06\u4ecb\u7ecd \u4efb\u52a1\u5206\u6790\uff08Tensorboard\uff09\u7684\u57fa\u672c\u6982\u5ff5\u3001\u5728 AI Lab \u7cfb\u7edf\u4e2d\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u4ee5\u53ca\u5982\u4f55\u914d\u7f6e\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u5185\u5bb9\u3002

Note

Tensorboard \u662f TensorFlow \u63d0\u4f9b\u7684\u4e00\u4e2a\u53ef\u89c6\u5316\u5de5\u5177\uff0c\u7528\u4e8e\u5c55\u793a\u673a\u5668\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u548c\u7ed3\u679c\u3002 \u5b83\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u8005\u66f4\u76f4\u89c2\u5730\u7406\u89e3\u6a21\u578b\u7684\u8bad\u7ec3\u52a8\u6001\uff0c\u5206\u6790\u6a21\u578b\u6027\u80fd\uff0c\u8c03\u8bd5\u6a21\u578b\u95ee\u9898\u7b49\u3002

Tensorboard \u5728\u6a21\u578b\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u7684\u4f5c\u7528\u53ca\u4f18\u52bf\uff1a

  • \u53ef\u89c6\u5316\u8bad\u7ec3\u8fc7\u7a0b\uff1a\u901a\u8fc7\u56fe\u8868\u5c55\u793a\u8bad\u7ec3\u548c\u9a8c\u8bc1\u7684\u635f\u5931\u3001\u7cbe\u5ea6\u7b49\u6307\u6807\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u76f4\u89c2\u5730\u89c2\u5bdf\u6a21\u578b\u7684\u8bad\u7ec3\u6548\u679c\u3002
  • \u8c03\u8bd5\u548c\u4f18\u5316\u6a21\u578b\uff1a\u901a\u8fc7\u67e5\u770b\u4e0d\u540c\u5c42\u7684\u6743\u91cd\u3001\u68af\u5ea6\u5206\u5e03\u7b49\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u53d1\u73b0\u548c\u4fee\u6b63\u6a21\u578b\u4e2d\u7684\u95ee\u9898\u3002
  • \u5bf9\u6bd4\u4e0d\u540c\u5b9e\u9a8c\uff1a\u53ef\u4ee5\u540c\u65f6\u5c55\u793a\u591a\u4e2a\u5b9e\u9a8c\u7684\u7ed3\u679c\uff0c\u65b9\u4fbf\u5f00\u53d1\u8005\u5bf9\u6bd4\u4e0d\u540c\u6a21\u578b\u548c\u8d85\u53c2\u6570\u914d\u7f6e\u7684\u6548\u679c\u3002
  • \u8ffd\u8e2a\u8bad\u7ec3\u6570\u636e\uff1a\u8bb0\u5f55\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4f7f\u7528\u7684\u6570\u636e\u96c6\u548c\u53c2\u6570\uff0c\u786e\u4fdd\u5b9e\u9a8c\u7684\u53ef\u590d\u73b0\u6027\u3002
"},{"location":"admin/baize/developer/jobs/tensorboard.html#tensorboard","title":"\u5982\u4f55\u521b\u5efa Tensorboard","text":"

\u5728 AI Lab \u7cfb\u7edf\u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86\u4fbf\u6377\u7684\u65b9\u5f0f\u6765\u521b\u5efa\u548c\u7ba1\u7406 Tensorboard\u3002\u4ee5\u4e0b\u662f\u5177\u4f53\u6b65\u9aa4\uff1a

"},{"location":"admin/baize/developer/jobs/tensorboard.html#notebook-tensorboard","title":"\u5728\u521b\u5efa\u65f6 Notebook \u542f\u7528 Tensorboard","text":"
  1. \u521b\u5efa Notebook\uff1a\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 Notebook\u3002
  2. \u542f\u7528 Tensorboard\uff1a\u5728\u521b\u5efa Notebook \u7684\u9875\u9762\u4e2d\uff0c\u542f\u7528 Tensorboard \u9009\u9879\uff0c\u5e76\u6307\u5b9a\u6570\u636e\u96c6\u548c\u65e5\u5fd7\u8def\u5f84\u3002

"},{"location":"admin/baize/developer/jobs/tensorboard.html#tensorboard_1","title":"\u5728\u5206\u5e03\u5f0f\u4efb\u52a1\u521b\u5efa\u53ca\u5b8c\u6210\u540e\u542f\u7528 Tensorboard","text":"
  1. \u521b\u5efa\u5206\u5e03\u5f0f\u4efb\u52a1\uff1a\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u3002
  2. \u914d\u7f6e Tensorboard\uff1a\u5728\u4efb\u52a1\u914d\u7f6e\u9875\u9762\u4e2d\uff0c\u542f\u7528 Tensorboard \u9009\u9879\uff0c\u5e76\u6307\u5b9a\u6570\u636e\u96c6\u548c\u65e5\u5fd7\u8def\u5f84\u3002
  3. \u4efb\u52a1\u5b8c\u6210\u540e\u67e5\u770b Tensorboard\uff1a\u4efb\u52a1\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u5728\u4efb\u52a1\u8be6\u60c5\u9875\u9762\u4e2d\u67e5\u770b Tensorboard \u7684\u94fe\u63a5\uff0c\u70b9\u51fb\u94fe\u63a5\u5373\u53ef\u67e5\u770b\u8bad\u7ec3\u8fc7\u7a0b\u7684\u53ef\u89c6\u5316\u7ed3\u679c\u3002

"},{"location":"admin/baize/developer/jobs/tensorboard.html#notebook-tensorboard_1","title":"\u5728 Notebook \u4e2d\u76f4\u63a5\u5f15\u7528 Tensorboard","text":"

\u5728 Notebook \u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee3\u7801\u76f4\u63a5\u542f\u52a8 Tensorboard\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u4ee3\u7801\uff1a

# \u5bfc\u5165\u5fc5\u8981\u7684\u5e93\nimport tensorflow as tf\nimport datetime\n\n# \u5b9a\u4e49\u65e5\u5fd7\u76ee\u5f55\nlog_dir = \"logs/fit/\" + datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n\n# \u521b\u5efa Tensorboard \u56de\u8c03\ntensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)\n\n# \u6784\u5efa\u5e76\u7f16\u8bd1\u6a21\u578b\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Flatten(input_shape=(28, 28)),\n    tf.keras.layers.Dense(512, activation='relu'),\n    tf.keras.layers.Dropout(0.2),\n    tf.keras.layers.Dense(10, activation='softmax')\n])\n\nmodel.compile(optimizer='adam',\n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])\n\n# \u8bad\u7ec3\u6a21\u578b\u5e76\u542f\u7528 Tensorboard \u56de\u8c03\nmodel.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), callbacks=[tensorboard_callback])\n
"},{"location":"admin/baize/developer/jobs/tensorboard.html#_2","title":"\u5982\u4f55\u914d\u7f6e\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u5185\u5bb9","text":"

\u5728\u4f7f\u7528 Tensorboard \u65f6\uff0c\u53ef\u4ee5\u8bb0\u5f55\u548c\u914d\u7f6e\u4e0d\u540c\u7684\u6570\u636e\u96c6\u548c\u65e5\u5fd7\u5185\u5bb9\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u5e38\u89c1\u7684\u914d\u7f6e\u65b9\u5f0f\uff1a

"},{"location":"admin/baize/developer/jobs/tensorboard.html#_3","title":"\u914d\u7f6e\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6570\u636e\u96c6\u7684\u65e5\u5fd7","text":"

\u5728\u8bad\u7ec3\u6a21\u578b\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7 TensorFlow \u7684 tf.summary API \u6765\u8bb0\u5f55\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u4ee3\u7801\uff1a

# \u5bfc\u5165\u5fc5\u8981\u7684\u5e93\nimport tensorflow as tf\n\n# \u521b\u5efa\u65e5\u5fd7\u76ee\u5f55\ntrain_log_dir = 'logs/gradient_tape/train'\nval_log_dir = 'logs/gradient_tape/val'\ntrain_summary_writer = tf.summary.create_file_writer(train_log_dir)\nval_summary_writer = tf.summary.create_file_writer(val_log_dir)\n\n# \u8bad\u7ec3\u6a21\u578b\u5e76\u8bb0\u5f55\u65e5\u5fd7\nfor epoch in range(EPOCHS):\n    for (x_train, y_train) in train_dataset:\n        # \u8bad\u7ec3\u6b65\u9aa4\n        train_step(x_train, y_train)\n        with train_summary_writer.as_default():\n            tf.summary.scalar('loss', train_loss.result(), step=epoch)\n            tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)\n\n    for (x_val, y_val) in val_dataset:\n        # \u9a8c\u8bc1\u6b65\u9aa4\n        val_step(x_val, y_val)\n        with val_summary_writer.as_default():\n            tf.summary.scalar('loss', val_loss.result(), step=epoch)\n            tf.summary.scalar('accuracy', val_accuracy.result(), step=epoch)\n
"},{"location":"admin/baize/developer/jobs/tensorboard.html#_4","title":"\u914d\u7f6e\u81ea\u5b9a\u4e49\u65e5\u5fd7","text":"

\u9664\u4e86\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u5916\uff0c\u8fd8\u53ef\u4ee5\u8bb0\u5f55\u5176\u4ed6\u81ea\u5b9a\u4e49\u7684\u65e5\u5fd7\u5185\u5bb9\uff0c\u4f8b\u5982\u5b66\u4e60\u7387\u3001\u68af\u5ea6\u5206\u5e03\u7b49\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u4ee3\u7801\uff1a

# \u8bb0\u5f55\u81ea\u5b9a\u4e49\u65e5\u5fd7\nwith train_summary_writer.as_default():\n    tf.summary.scalar('learning_rate', learning_rate, step=epoch)\n    tf.summary.histogram('gradients', gradients, step=epoch)\n
"},{"location":"admin/baize/developer/jobs/tensorboard.html#tensorboard_2","title":"Tensorboard \u7ba1\u7406","text":"

\u5728 AI Lab \u4e2d\uff0c\u901a\u8fc7\u5404\u79cd\u65b9\u5f0f\u521b\u5efa\u51fa\u6765\u7684 Tensorboard \u4f1a\u7edf\u4e00\u5c55\u793a\u5728\u4efb\u52a1\u5206\u6790\u7684\u9875\u9762\u4e2d\uff0c\u65b9\u4fbf\u7528\u6237\u67e5\u770b\u548c\u7ba1\u7406\u3002

\u7528\u6237\u53ef\u4ee5\u5728\u4efb\u52a1\u5206\u6790\u9875\u9762\u4e2d\u67e5\u770b Tensorboard \u7684\u94fe\u63a5\u3001\u72b6\u6001\u3001\u521b\u5efa\u65f6\u95f4\u7b49\u4fe1\u606f\uff0c\u5e76\u901a\u8fc7\u94fe\u63a5\u76f4\u63a5\u8bbf\u95ee Tensorboard \u7684\u53ef\u89c6\u5316\u7ed3\u679c\u3002

"},{"location":"admin/baize/developer/jobs/tensorflow.html","title":"Tensorflow \u4efb\u52a1","text":"

Tensorflow \u662f\u9664\u4e86 Pytorch \u53e6\u5916\u4e00\u4e2a\u975e\u5e38\u6d3b\u8dc3\u7684\u5f00\u6e90\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7075\u6d3b\u7684\u8bad\u7ec3\u548c\u90e8\u7f72\u73af\u5883\u3002

\u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u540c\u6837\u63d0\u4f9b\u4e86 Tensorflow \u6846\u67b6\u7684\u652f\u6301\u548c\u9002\u914d\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa Tensorflow \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

"},{"location":"admin/baize/developer/jobs/tensorflow.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
  • \u4efb\u52a1\u7c7b\u578b\u540c\u65f6\u652f\u6301 Tensorflow \u5355\u673a \u548c Tensorflow \u5206\u5e03\u5f0f \u4e24\u79cd\u6a21\u5f0f\u3002
  • \u8fd0\u884c\u955c\u50cf\u5185\u5df2\u7ecf\u9ed8\u8ba4\u652f\u6301 Tensorflow \u6846\u67b6\uff0c\u65e0\u9700\u989d\u5916\u5b89\u88c5\u3002
"},{"location":"admin/baize/developer/jobs/tensorflow.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

\u5728\u8fd9\u91cc\u6211\u4eec\u4f7f\u7528 baize-notebook \u57fa\u7840\u955c\u50cf \u548c \u5173\u8054\u73af\u5883 \u7684\u65b9\u5f0f\u6765\u4f5c\u4e3a\u4efb\u52a1\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002

\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u73af\u5883\uff0c\u8bf7\u53c2\u8003 \u73af\u5883\u5217\u8868\u3002

"},{"location":"admin/baize/developer/jobs/tensorflow.html#_3","title":"\u521b\u5efa\u4efb\u52a1","text":""},{"location":"admin/baize/developer/jobs/tensorflow.html#tfjob","title":"\u793a\u4f8b TFJob \u5355\u673a\u4efb\u52a1","text":"
  1. \u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Tensorflow \u5355\u673a\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
  4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
"},{"location":"admin/baize/developer/jobs/tensorflow.html#_4","title":"\u63d0\u524d\u9884\u70ed\u4ee3\u7801\u4ed3\u5e93","text":"

\u4f7f\u7528 AI Lab -> \u6570\u636e\u96c6\u5217\u8868 \uff0c\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u96c6\uff0c\u5e76\u5c06\u8fdc\u7aef Github \u7684\u4ee3\u7801\u62c9\u53d6\u5230\u6570\u636e\u96c6\u4e2d\uff0c \u8fd9\u6837\u5728\u521b\u5efa\u4efb\u52a1\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u9009\u62e9\u6570\u636e\u96c6\uff0c\u5c06\u4ee3\u7801\u6302\u8f7d\u5230\u4efb\u52a1\u4e2d\u3002

\u6f14\u793a\u4ee3\u7801\u4ed3\u5e93\u5730\u5740\uff1ahttps://github.com/d-run/training-sample-code/

"},{"location":"admin/baize/developer/jobs/tensorflow.html#_5","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
  • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528 python /code/tensorflow/tf-single.py
\"\"\"\n  pip install tensorflow numpy\n\"\"\"\n\nimport tensorflow as tf\nimport numpy as np\n\n# \u521b\u5efa\u4e00\u4e9b\u968f\u673a\u6570\u636e\nx = np.random.rand(100, 1)\ny = 2 * x + 1 + np.random.rand(100, 1) * 0.1\n\n# \u521b\u5efa\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u578b\nmodel = tf.keras.Sequential([\n    tf.keras.layers.Dense(1, input_shape=(1,))\n])\n\n# \u7f16\u8bd1\u6a21\u578b\nmodel.compile(optimizer='adam', loss='mse')\n\n# \u8bad\u7ec3\u6a21\u578b\uff0c\u5c06 epochs \u6539\u4e3a 10\nhistory = model.fit(x, y, epochs=10, verbose=1)\n\n# \u6253\u5370\u6700\u7ec8\u635f\u5931\nprint('Final loss: {' + str(history.history['loss'][-1]) +'}')\n\n# \u4f7f\u7528\u6a21\u578b\u8fdb\u884c\u9884\u6d4b\ntest_x = np.array([[0.5]])\nprediction = model.predict(test_x)\nprint(f'Prediction for x=0.5: {prediction[0][0]}')\n
"},{"location":"admin/baize/developer/jobs/tensorflow.html#_6","title":"\u8fd0\u884c\u7ed3\u679c","text":"

\u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\u67e5\u770b\u5230\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ece\u53f3\u4e0a\u89d2\u53bb\u5f80 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \uff0c\u53ef\u4ee5\u67e5\u770b\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

"},{"location":"admin/baize/developer/jobs/tensorflow.html#tfjob_1","title":"TFJob \u5206\u5e03\u5f0f\u4efb\u52a1","text":"
  1. \u767b\u5f55 AI Lab \uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u4efb\u52a1\u5217\u8868 \u9875\u9762\u3002
  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
  3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Tensorflow \u5206\u5e03\u5f0f\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
  4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
"},{"location":"admin/baize/developer/jobs/tensorflow.html#_7","title":"\u793a\u4f8b\u4efb\u52a1\u4ecb\u7ecd","text":"

\u672c\u6b21\u5305\u542b\u4e86\u4e09\u79cd\u89d2\u8272\uff1aChief\u3001Worker \u548c Parameter Server (PS)\u3002

  • Chief: \u4e3b\u8981\u8d1f\u8d23\u534f\u8c03\u8bad\u7ec3\u8fc7\u7a0b\u548c\u6a21\u578b\u68c0\u67e5\u70b9\u7684\u4fdd\u5b58\u3002
  • Worker: \u6267\u884c\u5b9e\u9645\u7684\u6a21\u578b\u8bad\u7ec3\u3002
  • PS: \u5728\u5f02\u6b65\u8bad\u7ec3\u4e2d\u7528\u4e8e\u5b58\u50a8\u548c\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u3002

\u4e3a\u4e0d\u540c\u7684\u89d2\u8272\u5206\u914d\u4e86\u4e0d\u540c\u7684\u8d44\u6e90\u3002Chief \u548c Worker \u4f7f\u7528 GPU\uff0c\u800c PS \u4f7f\u7528 CPU \u548c\u8f83\u5927\u7684\u5185\u5b58\u3002

"},{"location":"admin/baize/developer/jobs/tensorflow.html#_8","title":"\u8fd0\u884c\u53c2\u6570","text":"
  • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
  • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528 python /code/tensorflow/tensorflow-distributed.py
import os\nimport json\nimport tensorflow as tf\n\nclass SimpleModel(tf.keras.Model):\n    def __init__(self):\n        super(SimpleModel, self).__init__()\n        self.fc = tf.keras.layers.Dense(1, input_shape=(10,))\n\n    def call(self, x):\n        return self.fc(x)\n\ndef train():\n    # \u6253\u5370\u73af\u5883\u4fe1\u606f\n    print(f\"TensorFlow version: {tf.__version__}\")\n    print(f\"GPU available: {tf.test.is_gpu_available()}\")\n    if tf.test.is_gpu_available():\n        print(f\"GPU device count: {len(tf.config.list_physical_devices('GPU'))}\")\n\n    # \u83b7\u53d6\u5206\u5e03\u5f0f\u8bad\u7ec3\u4fe1\u606f\n    tf_config = json.loads(os.environ.get('TF_CONFIG') or '{}')\n    task_type = tf_config.get('task', {}).get('type')\n    task_id = tf_config.get('task', {}).get('index')\n\n    print(f\"Task type: {task_type}, Task ID: {task_id}\")\n\n    # \u8bbe\u7f6e\u5206\u5e03\u5f0f\u7b56\u7565\n    strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()\n\n    with strategy.scope():\n        model = SimpleModel()\n        loss_fn = tf.keras.losses.MeanSquaredError()\n        optimizer = tf.keras.optimizers.SGD(learning_rate=0.001)\n\n    # \u751f\u6210\u4e00\u4e9b\u968f\u673a\u6570\u636e\n    data = tf.random.normal((100, 10))\n    labels = tf.random.normal((100, 1))\n\n    @tf.function\n    def train_step(inputs, labels):\n        with tf.GradientTape() as tape:\n            predictions = model(inputs)\n            loss = loss_fn(labels, predictions)\n        gradients = tape.gradient(loss, model.trainable_variables)\n        optimizer.apply_gradients(zip(gradients, model.trainable_variables))\n        return loss\n\n    for epoch in range(10):\n        loss = train_step(data, labels)\n        if task_type == 'chief':\n            print(f'Epoch {epoch}, Loss: {loss.numpy():.4f}')\n\nif __name__ == '__main__':\n    train()\n
"},{"location":"admin/baize/developer/jobs/tensorflow.html#_9","title":"\u8fd0\u884c\u7ed3\u679c","text":"

\u540c\u6837\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ee5\u53ca\u6bcf\u4e2a Pod \u7684\u65e5\u5fd7\u8f93\u51fa\u3002

"},{"location":"admin/baize/developer/jobs/view.html","title":"\u67e5\u770b\u4efb\u52a1\uff08Job\uff09\u5de5\u4f5c\u8d1f\u8f7d","text":"

\u4efb\u52a1\u521b\u5efa\u597d\u540e\uff0c\u90fd\u4f1a\u663e\u793a\u5728\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u4e2d\u3002

  1. \u5728\u8bad\u7ec3\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u67d0\u4e2a\u4efb\u52a1\u53f3\u4fa7\u7684 \u2507 -> \u4efb\u52a1\u8d1f\u8f7d\u8be6\u60c5 \u3002

  2. \u51fa\u73b0\u4e00\u4e2a\u5f39\u7a97\u9009\u62e9\u8981\u67e5\u770b\u54ea\u4e2a Pod \u540e\uff0c\u70b9\u51fb \u8fdb\u5165 \u3002

  3. \u8df3\u8f6c\u5230\u5bb9\u5668\u7ba1\u7406\u754c\u9762\uff0c\u53ef\u4ee5\u67e5\u770b\u5bb9\u5668\u7684\u5de5\u4f5c\u72b6\u6001\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u4ee5\u53ca\u53d1\u751f\u7684\u4e8b\u4ef6\u3002

  4. \u4f60\u8fd8\u53ef\u4ee5\u67e5\u770b\u5f53\u524d Pod \u6700\u8fd1\u4e00\u6bb5\u65f6\u95f4\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002 \u6b64\u5904\u9ed8\u8ba4\u5c55\u793a 100 \u884c\u65e5\u5fd7\uff0c\u5982\u679c\u8981\u67e5\u770b\u66f4\u8be6\u7ec6\u7684\u65e5\u5fd7\u6d3b\u4e0b\u8f7d\u65e5\u5fd7\uff0c\u8bf7\u70b9\u51fb\u9876\u90e8\u7684\u84dd\u8272 \u53ef\u89c2\u6d4b\u6027 \u6587\u5b57\u3002

  5. \u5f53\u7136\u4f60\u8fd8\u53ef\u4ee5\u901a\u8fc7\u53f3\u4e0a\u89d2\u7684 ... \uff0c\u67e5\u770b\u5f53\u524d Pod \u7684 YAML\u3001\u4e0a\u4f20\u548c\u4e0b\u8f7d\u6587\u4ef6\u3002 \u4ee5\u4e0b\u662f\u4e00\u4e2a Pod \u7684 YAML \u793a\u4f8b\u3002

kind: Pod\napiVersion: v1\nmetadata:\n  name: neko-tensorboard-job-test-202404181843-skxivllb-worker-0\n  namespace: default\n  uid: ddedb6ff-c278-47eb-ae1e-0de9b7c62f8c\n  resourceVersion: '41092552'\n  creationTimestamp: '2024-04-18T10:43:36Z'\n  labels:\n    training.kubeflow.org/job-name: neko-tensorboard-job-test-202404181843-skxivllb\n    training.kubeflow.org/operator-name: pytorchjob-controller\n    training.kubeflow.org/replica-index: '0'\n    training.kubeflow.org/replica-type: worker\n  annotations:\n    cni.projectcalico.org/containerID: 0cfbb9af257d5e69027c603c6cb2d3890a17c4ae1a145748d5aef73a10d7fbe1\n    cni.projectcalico.org/podIP: ''\n    cni.projectcalico.org/podIPs: ''\n    hami.io/bind-phase: success\n    hami.io/bind-time: '1713437016'\n    hami.io/vgpu-devices-allocated: GPU-29d5fa0d-935b-2966-aff8-483a174d61d1,NVIDIA,1024,20:;\n    hami.io/vgpu-devices-to-allocate: ;\n    hami.io/vgpu-node: worker-a800-1\n    hami.io/vgpu-time: '1713437016'\n    k8s.v1.cni.cncf.io/network-status: |-\n      [{\n          \"name\": \"kube-system/calico\",\n          \"ips\": [\n              \"10.233.97.184\"\n          ],\n          \"default\": true,\n          \"dns\": {}\n      }]\n    k8s.v1.cni.cncf.io/networks-status: |-\n      [{\n          \"name\": \"kube-system/calico\",\n          \"ips\": [\n              \"10.233.97.184\"\n          ],\n          \"default\": true,\n          \"dns\": {}\n      }]\n  ownerReferences:\n    - apiVersion: kubeflow.org/v1\n      kind: PyTorchJob\n      name: neko-tensorboard-job-test-202404181843-skxivllb\n      uid: e5a8b05d-1f03-4717-8e1c-4ec928014b7b\n      controller: true\n      blockOwnerDeletion: true\nspec:\n  volumes:\n    - name: 0-dataset-pytorch-examples\n      persistentVolumeClaim:\n        claimName: pytorch-examples\n    - name: kube-api-access-wh9rh\n      projected:\n        sources:\n          - serviceAccountToken:\n              expirationSeconds: 3607\n              path: token\n          - configMap:\n              name: kube-root-ca.crt\n              items:\n                - key: ca.crt\n                  path: ca.crt\n          - downwardAPI:\n              items:\n                - path: namespace\n                  fieldRef:\n                    apiVersion: v1\n                    fieldPath: metadata.namespace\n        defaultMode: 420\n  containers:\n    - name: pytorch\n      image: m.daocloud.io/docker.io/pytorch/pytorch\n      command:\n        - bash\n      args:\n        - '-c'\n        - >-\n          ls -la /root && which pip && pip install pytorch_lightning tensorboard\n          && python /root/Git/pytorch/examples/mnist/main.py\n      ports:\n        - name: pytorchjob-port\n          containerPort: 23456\n          protocol: TCP\n      env:\n        - name: PYTHONUNBUFFERED\n          value: '1'\n        - name: PET_NNODES\n          value: '1'\n      resources:\n        limits:\n          cpu: '4'\n          memory: 8Gi\n          nvidia.com/gpucores: '20'\n          nvidia.com/gpumem: '1024'\n          nvidia.com/vgpu: '1'\n        requests:\n          cpu: '4'\n          memory: 8Gi\n          nvidia.com/gpucores: '20'\n          nvidia.com/gpumem: '1024'\n          nvidia.com/vgpu: '1'\n      volumeMounts:\n        - name: 0-dataset-pytorch-examples\n          mountPath: /root/Git/pytorch/examples\n        - name: kube-api-access-wh9rh\n          readOnly: true\n          mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n      terminationMessagePath: /dev/termination-log\n      terminationMessagePolicy: File\n      imagePullPolicy: Always\n  restartPolicy: Never\n  terminationGracePeriodSeconds: 30\n  dnsPolicy: ClusterFirst\n  serviceAccountName: default\n  serviceAccount: default\n  nodeName: worker-a800-1\n  securityContext: {}\n  affinity: {}\n  schedulerName: hami-scheduler\n  tolerations:\n    - key: node.kubernetes.io/not-ready\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n    - key: node.kubernetes.io/unreachable\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n  priorityClassName: baize-high-priority\n  priority: 100000\n  enableServiceLinks: true\n  preemptionPolicy: PreemptLowerPriority\nstatus:\n  phase: Succeeded\n  conditions:\n    - type: Initialized\n      status: 'True'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:43:36Z'\n      reason: PodCompleted\n    - type: Ready\n      status: 'False'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:46:34Z'\n      reason: PodCompleted\n    - type: ContainersReady\n      status: 'False'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:46:34Z'\n      reason: PodCompleted\n    - type: PodScheduled\n      status: 'True'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:43:36Z'\n  hostIP: 10.20.100.211\n  podIP: 10.233.97.184\n  podIPs:\n    - ip: 10.233.97.184\n  startTime: '2024-04-18T10:43:36Z'\n  containerStatuses:\n    - name: pytorch\n      state:\n        terminated:\n          exitCode: 0\n          reason: Completed\n          startedAt: '2024-04-18T10:43:39Z'\n          finishedAt: '2024-04-18T10:46:34Z'\n          containerID: >-\n            containerd://09010214bcf3315e81d38fba50de3943c9d2b48f50a6cc2e83f8ef0e5c6eeec1\n      lastState: {}\n      ready: false\n      restartCount: 0\n      image: m.daocloud.io/docker.io/pytorch/pytorch:latest\n      imageID: >-\n        m.daocloud.io/docker.io/pytorch/pytorch@sha256:11691e035a3651d25a87116b4f6adc113a27a29d8f5a6a583f8569e0ee5ff897\n      containerID: >-\n        containerd://09010214bcf3315e81d38fba50de3943c9d2b48f50a6cc2e83f8ef0e5c6eeec1\n      started: false\n  qosClass: Guaranteed\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html","title":"baizectl \u547d\u4ee4\u884c\u5de5\u5177\u4f7f\u7528\u6307\u5357","text":"

baizectl \u662f\u5728 AI Lab \u6a21\u5757\u4e2d\u4e13\u95e8\u670d\u52a1\u4e8e\u6a21\u578b\u5f00\u53d1\u8005\u4e0e\u6570\u636e\u79d1\u5b66\u5bb6\u4eec\u4f7f\u7528\u7684\u547d\u4ee4\u884c\u5de5\u5177\u3002 \u5b83\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u547d\u4ee4\u6765\u5e2e\u52a9\u7528\u6237\u7ba1\u7406\u5206\u5e03\u5f0f\u8bad\u7ec3\u4f5c\u4e1a\u3001\u67e5\u770b\u4efb\u52a1\u72b6\u6001\u3001\u7ba1\u7406\u6570\u636e\u96c6\u7b49\u64cd\u4f5c\uff0c\u540c\u65f6\u652f\u6301\u8fde\u63a5 Kubernetes \u5de5\u4f5c\u96c6\u7fa4\u548c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5de5\u4f5c\u7a7a\u95f4\uff0c\u5e2e\u52a9\u7528\u6237\u66f4\u9ad8\u6548\u5730\u4f7f\u7528\u548c\u7ba1\u7406 Kubernetes \u5e73\u53f0\u8d44\u6e90\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_1","title":"\u5b89\u88c5","text":"

\u76ee\u524d\uff0cbaizectl \u5df2\u7ecf\u96c6\u6210\u5728 AI Lab \u4e2d\u3002 \u4f60\u5728\u521b\u5efa Notebook \u540e\uff0c\u5373\u53ef\u5728 Notebook \u4e2d\u76f4\u63a5\u4f7f\u7528 baizectl\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_2","title":"\u5feb\u901f\u4e0a\u624b","text":""},{"location":"admin/baize/developer/notebooks/baizectl.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

baizectl \u547d\u4ee4\u7684\u57fa\u672c\u683c\u5f0f\u5982\u4e0b\uff1a

jovyan@19d0197587cc:/$ baizectl\nAI platform management tool\n\nUsage:\n  baizectl [command]\n\nAvailable Commands:\n  completion  Generate the autocompletion script for the specified shell\n  data        Management datasets\n  help        Help about any command\n  job         Manage jobs\n  login       Login to the platform\n  version     Show cli version\n\nFlags:\n      --cluster string     Cluster name to operate\n  -h, --help               help for baizectl\n      --mode string        Connection mode: auto, api, notebook (default \"auto\")\n  -n, --namespace string   Namespace to use for the operation. If not set, the default Namespace will be used.\n  -s, --server string      \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 access base url\n      --skip-tls-verify    Skip TLS certificate verification\n      --token string       \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 access token\n  -w, --workspace int32    Workspace ID to use for the operation\n\nUse \"baizectl [command] --help\" for more information about a command.\n

\u4ee5\u4e0a\u662f baizectl \u7684\u57fa\u672c\u4fe1\u606f\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 baizectl --help \u67e5\u770b\u5e2e\u52a9\u4fe1\u606f\uff0c \u6216\u8005\u901a\u8fc7 baizectl [command] --help \u67e5\u770b\u5177\u4f53\u547d\u4ee4\u7684\u5e2e\u52a9\u4fe1\u606f\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_4","title":"\u67e5\u770b\u7248\u672c\u4fe1\u606f","text":"

baizectl \u652f\u6301\u901a\u8fc7 version \u547d\u4ee4\u67e5\u770b\u7248\u672c\u4fe1\u606f\u3002

(base) jovyan@den-0:~$ baizectl version \nbaizectl version: v0.5.0, commit sha: ac0837c4\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_5","title":"\u547d\u4ee4\u683c\u5f0f","text":"

baizectl \u547d\u4ee4\u7684\u57fa\u672c\u683c\u5f0f\u5982\u4e0b\uff1a

baizectl [command] [flags]\n

\u5176\u4e2d\uff0c[command] \u662f\u5177\u4f53\u7684\u64cd\u4f5c\u547d\u4ee4\uff0c\u5982 data\u3001job \u7b49\uff0c[flags] \u662f\u53ef\u9009\u7684\u53c2\u6570\uff0c\u7528\u4e8e\u6307\u5b9a\u64cd\u4f5c\u7684\u8be6\u7ec6\u4fe1\u606f\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_6","title":"\u5e38\u7528\u9009\u9879","text":"
  • --cluster string\uff1a\u6307\u5b9a\u8981\u64cd\u4f5c\u7684\u96c6\u7fa4\u540d\u79f0
  • -h, --help\uff1a\u663e\u793a\u5e2e\u52a9\u4fe1\u606f
  • --mode string\uff1a\u8fde\u63a5\u6a21\u5f0f\uff0c\u53ef\u9009\u503c\u4e3a auto\u3001api\u3001notebook\uff08\u9ed8\u8ba4\u503c\u4e3a auto\uff09
  • -n, --namespace string\uff1a\u6307\u5b9a\u64cd\u4f5c\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5982\u679c\u672a\u8bbe\u7f6e\uff0c\u5c06\u4f7f\u7528\u9ed8\u8ba4\u547d\u540d\u7a7a\u95f4
  • -s, --server string\uff1a\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8bbf\u95ee\u57fa\u7840 URL
  • --skip-tls-verify\uff1a\u8df3\u8fc7 TLS \u8bc1\u4e66\u9a8c\u8bc1
  • --token string\uff1a\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8bbf\u95ee\u4ee4\u724c
  • -w, --workspace int32\uff1a\u6307\u5b9a\u64cd\u4f5c\u7684\u5de5\u4f5c\u533a ID
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_7","title":"\u529f\u80fd\u4ecb\u7ecd","text":""},{"location":"admin/baize/developer/notebooks/baizectl.html#_8","title":"\u4efb\u52a1\u7ba1\u7406","text":"

baizectl \u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u547d\u4ee4\u6765\u7ba1\u7406\u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\uff0c\u5305\u542b\u4e86\u67e5\u770b\u4efb\u52a1\u5217\u8868\uff0c\u63d0\u4ea4\u4efb\u52a1\u3001\u67e5\u770b\u65e5\u5fd7\u3001\u91cd\u542f\u4efb\u52a1\u3001\u5220\u9664\u4efb\u52a1\u7b49\u3002

jovyan@19d0197587cc:/$ baizectl job\nManage jobs\n\nUsage:\n  baizectl job [command]\n\nAvailable Commands:\n  delete      Delete a job\n  logs        Show logs of a job\n  ls          List jobs\n  restart     restart a job\n  submit      Submit a job\n\nFlags:\n  -h, --help            help for job\n  -o, --output string   Output format. One of: table, json, yaml (default \"table\")\n      --page int        Page number (default 1)\n      --page-size int   Page size (default -1)\n      --search string   Search query\n      --sort string     Sort order\n      --truncate int    Truncate output to the given length, 0 means no truncation (default 50)\n\nUse \"baizectl job [command] --help\" for more information about a command.\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_9","title":"\u63d0\u4ea4\u8bad\u7ec3\u4efb\u52a1","text":"

baizectl \u652f\u6301\u4f7f\u7528 submit \u547d\u4ee4\u63d0\u4ea4\u4e00\u4e2a\u4efb\u52a1\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 baizectl job submit --help \u67e5\u770b\u8be6\u7ec6\u4fe1\u606f\u3002

(base) jovyan@den-0:~$ baizectl job submit --help\nSubmit a job\n\nUsage:\n  baizectl job submit [flags] -- command ...\n\nAliases:\n  submit, create\n\nExamples:\n# Submit a job to run the command \"torchrun python train.py\"\nbaizectl job submit -- torchrun python train.py\n# Submit a job with 2 workers(each pod use 4 gpus) to run the command \"torchrun python train.py\" and use the image \"pytorch/pytorch:1.8.1-cuda11.1-cudnn8-runtime\"\nbaizectl job submit --image pytorch/pytorch:1.8.1-cuda11.1-cudnn8-runtime --workers 2 --resources nvidia.com/gpu=4 -- torchrun python train.py\n# Submit a tensorflow job to run the command \"python train.py\"\nbaizectl job submit --tensorflow -- python train.py\n\n\nFlags:\n      --annotations stringArray                       The annotations of the job, the format is key=value\n      --auto-load-env                                 It only takes effect when executed in Notebook, the environment variables of the current environment will be automatically read and set to the environment variables of the Job, the specific environment variables to be read can be specified using the BAIZE_MAPPING_ENVS environment variable, the default is PATH,CONDA_*,*PYTHON*,NCCL_*, if set to false, the environment variables of the current environment will not be read. (default true)\n      --commands stringArray                          The default command of the job\n  -d, --datasets stringArray                          The dataset bind to the job, the format is datasetName:mountPath, e.g. mnist:/data/mnist\n  -e, --envs stringArray                              The environment variables of the job, the format is key=value\n  -x, --from-notebook string                          Define whether to read the configuration of the current Notebook and directly create tasks, including images, resources, Dataset, etc.\n                                                      auto: Automatically determine the mode according to the current environment. If the current environment is a Notebook, it will be set to notebook mode.\n                                                      false: Do not read the configuration of the current Notebook.\n                                                      true: Read the configuration of the current Notebook. (default \"auto\")\n  -h, --help                                          help for submit\n      --image string                                  The image of the job, it must be specified if fromNotebook is false.\n  -t, --job-type string                               Job type: PYTORCH, TENSORFLOW, PADDLE (default \"PYTORCH\")\n      --labels stringArray                            The labels of the job, the format is key=value\n      --max-retries int32                             number of retries before marking this job failed\n      --max-run-duration int                          Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it\n      --name string                                   The name of the job, if empty, the name will be generated automatically.\n      --paddle                                        PaddlePaddle Job, has higher priority than --job-type\n      --priority string                               The priority of the job, current support baize-medium-priority, baize-low-priority, baize-high-priority\n      --pvcs stringArray                              The pvcs bind to the job, the format is pvcName:mountPath, e.g. mnist:/data/mnist\n      --pytorch                                       Pytorch Job, has higher priority than --job-type\n      --queue string                                  The queue to used\n      --requests-resources stringArray                Similar to resources, but sets the resources of requests\n      --resources stringArray                         The resources of the job, it is a string in the format of cpu=1,memory=1Gi,nvidia.com/gpu=1, it will be set to the limits and requests of the container.\n      --restart-policy string                         The job restart policy (default \"on-failure\")\n      --runtime-envs baizectl data ls --runtime-env   The runtime environment to use for the job, you can use baizectl data ls --runtime-env to get the runtime environment\n      --shm-size int32                                The shared memory size of the job, default is 0, which means no shared memory, if set to more than 0, the job will use the shared memory, the unit is MiB\n      --tensorboard-log-dir string                    The tensorboard log directory, if set, the job will automatically start tensorboard, else not. The format is /path/to/log, you can use relative path in notebook.\n      --tensorflow                                    Tensorflow Job, has higher priority than --job-type\n      --workers int                                   The workers of the job, default is 1, which means single worker, if set to more than 1, the job will be distributed. (default 1)\n      --working-dir string                            The working directory of job container, if in notebook mode, the default is the directory of the current file\n

Note

\u63d0\u4ea4\u4efb\u52a1\u7684\u547d\u4ee4\u53c2\u6570\u8bf4\u660e\uff1a

  • --name: \u4efb\u52a1\u540d\u79f0\uff0c\u5982\u679c\u4e3a\u7a7a\uff0c\u5219\u4f1a\u81ea\u52a8\u751f\u6210
  • --image: \u955c\u50cf\u540d\u79f0\uff0c\u5fc5\u987b\u6307\u5b9a
  • --priority: \u4efb\u52a1\u4f18\u5148\u7ea7\uff0c\u652f\u6301 \u9ad8=baize-high-priority\u3001\u4e2d=baize-medium-priority\u3001\u4f4e=baize-low-priority
  • --resources: \u4efb\u52a1\u8d44\u6e90\uff0c\u683c\u5f0f\u4e3a cpu=1 memory=1Gi,nvidia.com/gpu=1
  • --workers: \u4efb\u52a1\u5de5\u4f5c\u8282\u70b9\u6570\uff0c\u9ed8\u8ba4\u4e3a 1\uff0c\u5f53\u8bbe\u7f6e\u5927\u4e8e 1 \u65f6\uff0c\u4efb\u52a1\u5c06\u4f1a\u5206\u5e03\u5f0f\u8fd0\u884c
  • --queue: \u4efb\u52a1\u961f\u5217\uff0c\u9700\u8981\u63d0\u524d\u521b\u5efa\u961f\u5217\u8d44\u6e90
  • --working-dir: \u5de5\u4f5c\u76ee\u5f55\uff0c\u5982\u679c\u5728 Notebook \u6a21\u5f0f\u4e0b\uff0c\u4f1a\u9ed8\u8ba4\u4f7f\u7528\u5f53\u524d\u6587\u4ef6\u76ee\u5f55
  • --datasets: \u6570\u636e\u96c6\uff0c\u683c\u5f0f\u4e3a datasetName:mountPath\uff0c\u4f8b\u5982 mnist:/data/mnist
  • --shm-size: \u5171\u4eab\u5185\u5b58\u5927\u5c0f\uff0c\u5728\u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u65f6\uff0c\u53ef\u4ee5\u542f\u7528\uff0c\u8868\u793a\u4f7f\u7528\u5171\u4eab\u5185\u5b58\uff0c\u5355\u4f4d\u4e3a MiB
  • --labels: \u4efb\u52a1\u6807\u7b7e\uff0c\u683c\u5f0f\u4e3a key=value
  • --max-retries: \u6700\u5927\u91cd\u8bd5\u6b21\u6570\uff0c\u4efb\u52a1\u5931\u8d25\u540e\u91cd\u8bd5\u6b21\u6570\uff0c\u5931\u8d25\u540e\u4f1a\u91cd\u542f\u4efb\u52a1\uff0c\u9ed8\u8ba4\u4e0d\u9650\u5236
  • --max-run-duration: \u6700\u5927\u8fd0\u884c\u65f6\u95f4\uff0c\u4efb\u52a1\u8fd0\u884c\u65f6\u95f4\u8d85\u8fc7\u6307\u5b9a\u65f6\u95f4\u540e\uff0c\u4f1a\u88ab\u7cfb\u7edf\u7ec8\u6b62\uff0c\u9ed8\u8ba4\u4e0d\u9650\u5236
  • --restart-policy: \u91cd\u542f\u7b56\u7565\uff0c\u652f\u6301 on-failure\u3001never\u3001always\uff0c\u9ed8\u8ba4\u4e3a on-failure
  • --from-notebook: \u662f\u5426\u4ece Notebook \u4e2d\u8bfb\u53d6\u914d\u7f6e\uff0c\u652f\u6301 auto\u3001true\u3001false\uff0c\u9ed8\u8ba4\u4e3a auto
"},{"location":"admin/baize/developer/notebooks/baizectl.html#pytorch","title":"PyTorch \u5355\u673a\u4efb\u52a1\u793a\u4f8b","text":"

\u63d0\u4ea4\u8bad\u7ec3\u4efb\u52a1\u793a\u4f8b\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u6c42\u4fee\u6539\u53c2\u6570\uff0c\u4ee5\u4e0b\u4e3a\u521b\u5efa\u4e00\u4e2a PyTorch \u4efb\u52a1\u7684\u793a\u4f8b\uff1a

baizectl job submit --name demojob-v2 -t PYTORCH \\\n    --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --priority baize-high-priority \\\n    --resources cpu=1,memory=1Gi \\\n    --workers 1 \\\n    --queue default \\\n    --working-dir /data \\\n    --datasets fashion-mnist:/data/mnist \\\n    --labels job_type=pytorch \\\n    --max-retries 3 \\\n    --max-run-duration 60 \\\n    --restart-policy on-failure \\\n    -- sleep 1000\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#pytorch_1","title":"PyTorch \u5206\u5e03\u5f0f\u4efb\u52a1\u793a\u4f8b","text":"

\u63d0\u4ea4\u8bad\u7ec3\u4efb\u52a1\u793a\u4f8b\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u6c42\u4fee\u6539\u53c2\u6570\uff0c\u4ee5\u4e0b\u4e3a\u521b\u5efa\u4e00\u4e2a PyTorch \u4efb\u52a1\u7684\u793a\u4f8b\uff1a

baizectl job submit --name demojob-v2 -t PYTORCH \\\n    --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --priority baize-high-priority \\\n    --resources cpu=1,memory=1Gi \\\n    --workers 2 \\   # \u591a\u4efb\u52a1\u526f\u672c\u4f1a\u81ea\u52a8\u521b\u5efa\u5206\u5e03\u5f0f\u4efb\u52a1\n    --shm-size 1024 \\\n    --queue default \\\n    --working-dir /data \\\n    --datasets fashion-mnist:/data/mnist \\\n    --labels job_type=pytorch \\\n    --max-retries 3 \\\n    --max-run-duration 60 \\\n    --restart-policy on-failure \\\n    -- sleep 1000\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#tensorflow","title":"Tensorflow \u4efb\u52a1\u793a\u4f8b","text":"

\u4f7f\u7528 -t \u53c2\u6570\u6307\u5b9a\u4efb\u52a1\u7c7b\u578b\uff0c\u4ee5\u4e0b\u4e3a\u521b\u5efa\u4e00\u4e2a Tensorflow \u4efb\u52a1\u7684\u793a\u4f8b\uff1a

baizectl job submit --name demojob-v2 -t TENSORFLOW \\\n    --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --priority baize-high-priority \\\n    --from-notebook auto \\\n    --workers 1 \\\n    --queue default \\\n    --working-dir /data \\\n    --datasets fashion-mnist:/data/mnist \\\n    --labels job_type=pytorch \\\n    --max-retries 3 \\\n    --max-run-duration 60 \\\n    --restart-policy on-failure \\\n    -- sleep 1000\n

\u4e5f\u53ef\u4ee5\u4f7f\u7528 --job-type \u6216\u8005 --tensorflow \u53c2\u6570\u6307\u5b9a\u4efb\u52a1\u7c7b\u578b

"},{"location":"admin/baize/developer/notebooks/baizectl.html#paddle","title":"Paddle \u4efb\u52a1\u793a\u4f8b","text":"
baizectl job submit --name demojob-v2 -t PADDLE \\\n    --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --priority baize-high-priority \\\n    --queue default \\\n    --working-dir /data \\\n    --datasets fashion-mnist:/data/mnist \\\n    --labels job_type=pytorch \\\n    --max-retries 3 \\\n    --max-run-duration 60 \\\n    --restart-policy on-failure \\\n    -- sleep 1000\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_10","title":"\u67e5\u770b\u4efb\u52a1\u5217\u8868","text":"

baizectl job \u652f\u6301\u901a\u8fc7 ls \u547d\u4ee4\u67e5\u770b\u4efb\u52a1\u5217\u8868\uff0c\u9ed8\u8ba4\u663e\u793a pytroch \u4efb\u52a1\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 -t \u6307\u5b9a\u4efb\u52a1\u7c7b\u578b\u3002

(base) jovyan@den-0:~$ baizectl job ls  # \u9ed8\u8ba4\u67e5\u770b pytorch \u4efb\u52a1\n NAME        TYPE     PHASE      DURATION  COMMAND    \n demong      PYTORCH  SUCCEEDED  1m2s      sleep 60   \n demo-sleep  PYTORCH  RUNNING    1h25m28s  sleep 7200 \n(base) jovyan@den-0:~$ baizectl job ls demo-sleep  # \u67e5\u770b\u6307\u5b9a\u4efb\u52a1\n NAME        TYPE     PHASE      DURATION  COMMAND     \n demo-sleep  PYTORCH  RUNNING    1h25m28s  sleep 7200 \n(base) jovyan@den-0:~$ baizectl job ls -t TENSORFLOW   # \u67e5\u770b tensorflow \u4efb\u52a1\n NAME       TYPE        PHASE    DURATION  COMMAND    \n demotfjob  TENSORFLOW  CREATED  0s        sleep 1000 \n

\u4efb\u52a1\u5217\u8868\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f7f\u7528 table \u4f5c\u4e3a\u5c55\u793a\u5f62\u5f0f\uff0c\u5982\u679c\u5e0c\u671b\u67e5\u770b\u66f4\u591a\u4fe1\u606f\uff0c\u53ef\u4f7f\u7528 json \u6216 yaml \u683c\u5f0f\u5c55\u793a\uff0c\u53ef\u4ee5\u901a\u8fc7 -o \u53c2\u6570\u6307\u5b9a\u3002

(base) jovyan@den-0:~$ baizectl job ls -t TENSORFLOW -o yaml\n- baseConfig:\n    args:\n    - sleep\n    - \"1000\"\n    image: release.daocloud.io/baize/baize-notebook:v0.5.0\n    labels:\n      app: den\n    podConfig:\n      affinity: {}\n      kubeEnvs:\n      - name: CONDA_EXE\n        value: /opt/conda/bin/conda\n      - name: CONDA_PREFIX\n        value: /opt/conda\n      - name: CONDA_PROMPT_MODIFIER\n        value: '(base) '\n      - name: CONDA_SHLVL\n        value: \"1\"\n      - name: CONDA_DIR\n        value: /opt/conda\n      - name: CONDA_PYTHON_EXE\n        value: /opt/conda/bin/python\n      - name: CONDA_PYTHON_EXE\n        value: /opt/conda/bin/python\n      - name: CONDA_DEFAULT_ENV\n        value: base\n      - name: PATH\n        value: /opt/conda/bin:/opt/conda/condabin:/command:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n      priorityClass: baize-high-priority\n      queue: default\n  creationTimestamp: \"2024-06-16T07:47:27Z\"\n  jobSpec:\n    runPolicy:\n      suspend: true\n    tfReplicaSpecs:\n      Worker:\n        replicas: 1\n        restartPolicy: OnFailure\n        template:\n          metadata:\n            creationTimestamp: null\n          spec:\n            affinity: {}\n            containers:\n            - args:\n              - sleep\n              - \"1000\"\n              env:\n              - name: CONDA_EXE\n                value: /opt/conda/bin/conda\n              - name: CONDA_PREFIX\n                value: /opt/conda\n              - name: CONDA_PROMPT_MODIFIER\n                value: '(base) '\n              - name: CONDA_SHLVL\n                value: \"1\"\n              - name: CONDA_DIR\n                value: /opt/conda\n              - name: CONDA_PYTHON_EXE\n                value: /opt/conda/bin/python\n              - name: CONDA_PYTHON_EXE\n                value: /opt/conda/bin/python\n              - name: CONDA_DEFAULT_ENV\n                value: base\n              - name: PATH\n                value: /opt/conda/bin:/opt/conda/condabin:/command:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n              image: release.daocloud.io/baize/baize-notebook:v0.5.0\n              name: tensorflow\n              resources:\n                limits:\n                  memory: 1Gi\n                requests:\n                  cpu: \"1\"\n                  memory: 2Gi\n              workingDir: /home/jovyan\n            priorityClassName: baize-high-priority\n  name: demotfjob\n  namespace: ns-chuanjia-ndx\n  phase: CREATED\n  roleConfig:\n    TF_WORKER:\n      replicas: 1\n      resources:\n        limits:\n          memory: 1Gi\n        requests:\n          cpu: \"1\"\n          memory: 2Gi\n  totalResources:\n    limits:\n      memory: \"1073741824\"\n    requests:\n      cpu: \"1\"\n      memory: \"2147483648\"\n  trainingConfig:\n    restartPolicy: RESTART_POLICY_ON_FAILURE\n  trainingMode: SINGLE\n  type: TENSORFLOW\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_11","title":"\u67e5\u770b\u4efb\u52a1\u65e5\u5fd7","text":"

baizectl job \u652f\u6301\u4f7f\u7528 logs \u547d\u4ee4\u67e5\u770b\u4efb\u52a1\u65e5\u5fd7\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 baizectl job logs --help \u67e5\u770b\u8be6\u7ec6\u4fe1\u606f\u3002

(base) jovyan@den-0:~$ baizectl job logs --help\nShow logs of a job\n\nUsage:\n  baizectl job logs <job-name> [pod-name] [flags]\n\nAliases:\n  logs, log\n\nFlags:\n  -f, --follow            Specify if the logs should be streamed.\n  -h, --help              help for logs\n  -t, --job-type string   Job type: PYTORCH, TENSORFLOW, PADDLE (default \"PYTORCH\")\n      --paddle            PaddlePaddle Job, has higher priority than --job-type\n      --pytorch           Pytorch Job, has higher priority than --job-type\n      --tail int          Lines of recent log file to display.\n      --tensorflow        Tensorflow Job, has higher priority than --job-type\n      --timestamps        Show timestamps\n

Note

  • --follow \u53c2\u6570\u5b9e\u65f6\u67e5\u770b\u65e5\u5fd7
  • --tail \u53c2\u6570\u6307\u5b9a\u67e5\u770b\u65e5\u5fd7\u7684\u884c\u6570\uff0c\u9ed8\u8ba4\u4e3a 50 \u884c
  • --timestamps \u53c2\u6570\u663e\u793a\u65f6\u95f4\u6233

\u793a\u4f8b\u67e5\u770b\u4efb\u52a1\u65e5\u5fd7\uff1a

(base) jovyan@den-0:~$ baizectl job log -t TENSORFLOW tf-sample-job-v2-202406161632-evgrbrhn -f\n2024-06-16 08:33:06.083766: I tensorflow/core/util/port.cc:110] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n2024-06-16 08:33:06.086189: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n2024-06-16 08:33:06.132416: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n2024-06-16 08:33:06.132903: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\nTo enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n2024-06-16 08:33:07.223046: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\nModel: \"sequential\"\n_________________________________________________________________\n Layer (type)                Output Shape              Param #   \n=================================================================\n Conv1 (Conv2D)              (None, 13, 13, 8)         80        \n\n flatten (Flatten)           (None, 1352)              0         \n\n Softmax (Dense)             (None, 10)                13530     \n\n=================================================================\nTotal params: 13610 (53.16 KB)\nTrainable params: 13610 (53.16 KB)\nNon-trainable params: 0 (0.00 Byte)\n...\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_12","title":"\u5220\u9664\u4efb\u52a1","text":"

baizectl job \u652f\u6301\u4f7f\u7528 delete \u547d\u4ee4\u5220\u9664\u4efb\u52a1\uff0c\u5e76\u4e14\u540c\u65f6\u652f\u6301\u5220\u9664\u591a\u4e2a\u4efb\u52a1\u3002

(base) jovyan@den-0:~$ baizectl job delete --help\nDelete a job\n\nUsage:\n  baizectl job delete [flags]\n\nAliases:\n  delete, del, remove, rm\n\nFlags:\n  -h, --help              help for delete\n  -t, --job-type string   Job type: PYTORCH, TENSORFLOW, PADDLE (default \"PYTORCH\")\n      --paddle            PaddlePaddle Job, has higher priority than --job-type\n      --pytorch           Pytorch Job, has higher priority than --job-type\n      --tensorflow        Tensorflow Job, has higher priority than --job-type\n

\u793a\u4f8b\u5220\u9664\u4efb\u52a1\uff1a

(base) jovyan@den-0:~$ baizectl job ls\n NAME        TYPE     PHASE      DURATION  COMMAND    \n demong      PYTORCH  SUCCEEDED  1m2s      sleep 60   \n demo-sleep  PYTORCH  RUNNING    1h20m51s  sleep 7200 \n demojob     PYTORCH  FAILED     16m46s    sleep 1000 \n demojob-v2  PYTORCH  RUNNING    3m13s     sleep 1000 \n demojob-v3  PYTORCH  CREATED    0s        sleep 1000 \n(base) jovyan@den-0:~$ baizectl job delete demojob      # \u5220\u9664\u5355\u4e2a\u4efb\u52a1\nDelete job demojob in ns-chuanjia-ndx successfully\n(base) jovyan@den-0:~$ baizectl job delete demojob-v2 demojob-v3     # \u5220\u9664\u591a\u4e2a\u4efb\u52a1\nDelete job demojob-v2 in ns-chuanjia-ndx successfully\nDelete job demojob-v3 in ns-chuanjia-ndx successfully\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_13","title":"\u91cd\u542f\u4efb\u52a1","text":"

baizectl job \u652f\u6301\u4f7f\u7528 restart \u547d\u4ee4\u91cd\u542f\u4efb\u52a1\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 baizectl job restart --help \u67e5\u770b\u8be6\u7ec6\u4fe1\u606f\u3002

(base) jovyan@den-0:~$ baizectl job restart --help\nrestart a job\n\nUsage:\n  baizectl job restart [flags] job\n\nAliases:\n  restart, rerun\n\nFlags:\n  -h, --help              help for restart\n  -t, --job-type string   Job type: PYTORCH, TENSORFLOW, PADDLE (default \"PYTORCH\")\n      --paddle            PaddlePaddle Job, has higher priority than --job-type\n      --pytorch           Pytorch Job, has higher priority than --job-type\n      --tensorflow        Tensorflow Job, has higher priority than --job-type\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_14","title":"\u6570\u636e\u96c6\u7ba1\u7406","text":"

baizectl \u652f\u6301\u7ba1\u7406\u6570\u636e\u96c6\uff0c\u76ee\u524d\u652f\u6301\u67e5\u770b\u6570\u636e\u96c6\u5217\u8868\uff0c\u65b9\u4fbf\u5728\u4efb\u52a1\u8bad\u7ec3\u65f6\uff0c\u5feb\u901f\u7ed1\u5b9a\u6570\u636e\u96c6\u3002

(base) jovyan@den-0:~$ baizectl data \nManagement datasets\n\nUsage:\n  baizectl data [flags]\n  baizectl data [command]\n\nAliases:\n  data, dataset, datasets, envs, runtime-envs\n\nAvailable Commands:\n  ls          List datasets\n\nFlags:\n  -h, --help            help for data\n  -o, --output string   Output format. One of: table, json, yaml (default \"table\")\n      --page int        Page number (default 1)\n      --page-size int   Page size (default -1)\n      --search string   Search query\n      --sort string     Sort order\n      --truncate int    Truncate output to the given length, 0 means no truncation (default 50)\n\nUse \"baizectl data [command] --help\" for more information about a command.\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_15","title":"\u67e5\u770b\u6570\u636e\u96c6\u5217\u8868","text":"

baizectl data \u652f\u6301\u901a\u8fc7 ls \u547d\u4ee4\u67e5\u770b\u6570\u636e\u96c6\u5217\u8868\uff0c\u9ed8\u8ba4\u663e\u793a table \u683c\u5f0f\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 -o \u53c2\u6570\u6307\u5b9a\u8f93\u51fa\u683c\u5f0f\u3002

(base) jovyan@den-0:~$ baizectl data ls\n NAME             TYPE  URI                                                    PHASE \n fashion-mnist    GIT   https://gitee.com/samzong_lu/fashion-mnist.git         READY \n sample-code      GIT   https://gitee.com/samzong_lu/training-sample-code....  READY \n training-output  PVC   pvc://training-output                                  READY \n

\u5728\u63d0\u4ea4\u8bad\u7ec3\u4efb\u52a1\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 -d \u6216\u8005 --datasets \u53c2\u6570\u6307\u5b9a\u6570\u636e\u96c6\uff0c\u4f8b\u5982\uff1a

baizectl job submit --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --datasets sample-code:/home/jovyan/code \\\n    -- sleep 1000\n

\u540c\u65f6\u6302\u8f7d\u591a\u4e2a\u6570\u636e\u96c6\uff0c\u53ef\u4ee5\u6309\u7167\u5982\u4e0b\u683c\u5f0f\uff1a

baizectl job submit --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --datasets sample-code:/home/jovyan/code fashion-mnist:/home/jovyan/data \\\n    -- sleep 1000\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_16","title":"\u67e5\u770b\u4f9d\u8d56\u5e93\uff08\u73af\u5883\uff09","text":"

\u73af\u5883 runtime-env \u662f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u7279\u8272\u73af\u5883\u7ba1\u7406\u80fd\u529b\uff0c\u901a\u8fc7\u5c06\u6a21\u578b\u5f00\u53d1\u3001\u8bad\u7ec3\u4efb\u52a1\u4ee5\u53ca\u63a8\u7406\u4e2d\u6240\u9700\u7684\u4f9d\u8d56\u5e93\u89e3\u8026\uff0c \u63d0\u4f9b\u4e86\u4e00\u79cd\u66f4\u52a0\u7075\u6d3b\u7684\u4f9d\u8d56\u5e93\u7ba1\u7406\u65b9\u5f0f\uff0c\u65e0\u9700\u91cd\u590d\u6784\u5efa\u590d\u6742\u7684 Docker \u955c\u50cf\uff0c\u53ea\u9700\u9009\u62e9\u5408\u9002\u7684\u73af\u5883\u5373\u53ef\u3002

\u540c\u65f6 runtime-env \u652f\u6301\u70ed\u66f4\u65b0\uff0c\u52a8\u6001\u5347\u7ea7\uff0c\u65e0\u9700\u91cd\u65b0\u6784\u5efa\u955c\u50cf\uff0c\u5373\u53ef\u66f4\u65b0\u73af\u5883\u4f9d\u8d56\u5e93\u3002

baizectl data \u652f\u6301\u901a\u8fc7 runtime-env \u547d\u4ee4\u67e5\u770b\u73af\u5883\u5217\u8868\uff0c\u9ed8\u8ba4\u663e\u793a table \u683c\u5f0f\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 -o \u53c2\u6570\u6307\u5b9a\u8f93\u51fa\u683c\u5f0f\u3002

(base) jovyan@den-0:~$ baizectl data ls --runtime-env \n NAME               TYPE   URI                                                    PHASE      \n fashion-mnist      GIT    https://gitee.com/samzong_lu/fashion-mnist.git         READY      \n sample-code        GIT    https://gitee.com/samzong_lu/training-sample-code....  READY      \n training-output    PVC    pvc://training-output                                  READY      \n tensorflow-sample  CONDA  conda://python?version=3.12.3                          PROCESSING \n

\u5728\u63d0\u4ea4\u8bad\u7ec3\u4efb\u52a1\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 --runtime-env \u53c2\u6570\u6307\u5b9a\u73af\u5883\uff0c\u4f8b\u5982\uff1a

baizectl job submit --image release.daocloud.io/baize/baize-notebook:v0.5.0 \\\n    --runtime-env tensorflow-sample \\\n    -- sleep 1000\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_17","title":"\u9ad8\u7ea7\u7528\u6cd5","text":"

baizectl \u652f\u6301\u66f4\u591a\u9ad8\u7ea7\u7528\u6cd5\uff0c\u4f8b\u5982\u81ea\u52a8\u8865\u5168\u811a\u672c\u751f\u6210\u3001\u4f7f\u7528\u7279\u5b9a\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u3001\u4f7f\u7528\u7279\u5b9a\u5de5\u4f5c\u7a7a\u95f4\u7b49\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_18","title":"\u81ea\u52a8\u8865\u5168\u811a\u672c\u751f\u6210","text":"
baizectl completion bash > /etc/bash_completion.d/baizectl\n

\u4e0a\u8ff0\u547d\u4ee4\u751f\u6210 bash \u7684\u81ea\u52a8\u8865\u5168\u811a\u672c\uff0c\u5e76\u5c06\u5176\u4fdd\u5b58\u5230 /etc/bash_completion.d/baizectl \u76ee\u5f55\u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 source /etc/bash_completion.d/baizectl \u52a0\u8f7d\u81ea\u52a8\u8865\u5168\u811a\u672c\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_19","title":"\u4f7f\u7528\u7279\u5b9a\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4","text":"
baizectl job ls --cluster my-cluster --namespace my-namespace\n

\u8be5\u547d\u4ee4\u5c06\u5217\u51fa my-cluster \u96c6\u7fa4\u4e2d my-namespace \u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u4f5c\u4e1a\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_20","title":"\u4f7f\u7528\u7279\u5b9a\u5de5\u4f5c\u7a7a\u95f4","text":"
baizectl job ls --workspace 123\n
"},{"location":"admin/baize/developer/notebooks/baizectl.html#_21","title":"\u5e38\u89c1\u95ee\u9898","text":"
  • \u95ee\u9898\uff1a\u4e3a\u4ec0\u4e48\u65e0\u6cd5\u8fde\u63a5\u5230\u670d\u52a1\u5668\uff1f

    \u89e3\u51b3\u65b9\u6cd5\uff1a\u68c0\u67e5 --server \u53c2\u6570\u662f\u5426\u6b63\u786e\u8bbe\u7f6e\uff0c\u5e76\u786e\u4fdd\u7f51\u7edc\u8fde\u63a5\u6b63\u5e38\u3002 \u5982\u679c\u670d\u52a1\u5668\u4f7f\u7528\u81ea\u7b7e\u540d\u8bc1\u4e66\uff0c\u53ef\u4ee5\u4f7f\u7528 --skip-tls-verify \u8df3\u8fc7 TLS \u8bc1\u4e66\u9a8c\u8bc1\u3002

  • \u95ee\u9898\uff1a\u5982\u4f55\u89e3\u51b3\u6743\u9650\u4e0d\u8db3\u7684\u95ee\u9898\uff1f

    \u89e3\u51b3\u65b9\u6cd5\uff1a\u786e\u4fdd\u4f7f\u7528\u6b63\u786e\u7684 --token \u53c2\u6570\u767b\u5f55\uff0c\u5e76\u68c0\u67e5\u5f53\u524d\u7528\u6237\u662f\u5426\u5177\u6709\u76f8\u5e94\u7684\u64cd\u4f5c\u6743\u9650\u3002

  • \u95ee\u9898\uff1a\u4e3a\u4ec0\u4e48\u65e0\u6cd5\u5217\u51fa\u6570\u636e\u96c6\uff1f

    \u89e3\u51b3\u65b9\u6cd5\uff1a\u68c0\u67e5\u547d\u540d\u7a7a\u95f4\u548c\u5de5\u4f5c\u533a\u662f\u5426\u6b63\u786e\u8bbe\u7f6e\uff0c\u786e\u4fdd\u5f53\u524d\u7528\u6237\u6709\u6743\u9650\u8bbf\u95ee\u8fd9\u4e9b\u8d44\u6e90\u3002

"},{"location":"admin/baize/developer/notebooks/baizectl.html#_22","title":"\u7ed3\u8bed","text":"

\u901a\u8fc7\u4ee5\u4e0a\u6307\u5357\uff0c\u7528\u6237\u53ef\u4ee5\u5feb\u901f\u4e0a\u624b baizectl \u547d\u4ee4\uff0c\u5e76\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u9ad8\u6548\u5730\u7ba1\u7406 AI \u5e73\u53f0\u8d44\u6e90\u3002 \u5982\u679c\u6709\u4efb\u4f55\u7591\u95ee\u6216\u95ee\u9898\uff0c\u5efa\u8bae\u53c2\u8003 baizectl [command] --help \u83b7\u53d6\u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\u3002

"},{"location":"admin/baize/developer/notebooks/baizess.html","title":"baizess \u6362\u6e90\u5de5\u5177\u4f7f\u7528\u6307\u5357","text":"

baizess \u662f AI Lab \u6a21\u5757\u4e2d Notebook \u5185\u7f6e\u7684\u5f00\u7bb1\u5373\u7528\u7684\u6362\u6e90\u5c0f\u5de5\u5177\u3002\u5b83\u63d0\u4f9b\u4e86\u7b80\u6d01\u7684\u547d\u4ee4\u884c\u754c\u9762\uff0c\u65b9\u4fbf\u7528\u6237\u7ba1\u7406\u5404\u79cd\u7f16\u7a0b\u73af\u5883\u7684\u5305\u7ba1\u7406\u5668\u6e90\u3002 \u901a\u8fc7 baizess\uff0c\u7528\u6237\u53ef\u4ee5\u8f7b\u677e\u5207\u6362\u5e38\u7528\u5305\u7ba1\u7406\u5668\u7684\u6e90\uff0c\u786e\u4fdd\u987a\u5229\u8bbf\u95ee\u6700\u65b0\u7684\u5e93\u548c\u4f9d\u8d56\u9879\u3002\u8be5\u5de5\u5177\u901a\u8fc7\u7b80\u5316\u5305\u6e90\u7ba1\u7406\u6d41\u7a0b\uff0c\u63d0\u5347\u4e86\u5f00\u53d1\u8005\u548c\u6570\u636e\u79d1\u5b66\u5bb6\u7684\u5de5\u4f5c\u6548\u7387\u3002

"},{"location":"admin/baize/developer/notebooks/baizess.html#_1","title":"\u5b89\u88c5","text":"

\u76ee\u524d\uff0cbaizess \u5df2\u7ecf\u96c6\u6210\u5728 AI Lab \u4e2d\u3002 \u4f60\u5728\u521b\u5efa Notebook \u540e\uff0c\u5373\u53ef\u5728 Notebook \u4e2d\u76f4\u63a5\u4f7f\u7528 baizess\u3002

"},{"location":"admin/baize/developer/notebooks/baizess.html#_2","title":"\u5feb\u901f\u4e0a\u624b","text":""},{"location":"admin/baize/developer/notebooks/baizess.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

baizess \u547d\u4ee4\u7684\u57fa\u672c\u4fe1\u606f\u5982\u4e0b\uff1a

jovyan@19d0197587cc:/$ baizess\nsource switch tool\n\nUsage:\n  baizess [command] [package-manager]\n\nAvailable Commands:\n  set     Switch the source of specified package manager to current fastest source\n  reset   Reset the source of specified package manager to default source\n\nAvailable Package-managers:\n  apt     (require root privilege)\n  conda\n  pip\n
"},{"location":"admin/baize/developer/notebooks/baizess.html#_4","title":"\u547d\u4ee4\u683c\u5f0f","text":"

baizess \u547d\u4ee4\u7684\u57fa\u672c\u683c\u5f0f\u5982\u4e0b\uff1a

baizess [command] [package-manager]\n

\u5176\u4e2d\uff0c[command] \u662f\u5177\u4f53\u7684\u64cd\u4f5c\u547d\u4ee4\uff0c[package-manager] \u7528\u4e8e\u6307\u5b9a\u64cd\u4f5c\u5bf9\u5e94\u7684\u5305\u7ba1\u7406\u5668\u3002

"},{"location":"admin/baize/developer/notebooks/baizess.html#command","title":"command","text":"
  • set\uff1a\u5907\u4efd\u6e90\uff0c\u6d4b\u901f\uff0c\u5c06\u6240\u6307\u5b9a\u7684\u5305\u7ba1\u7406\u5668\u7684\u6e90\u5207\u6362\u4e3a\u6d4b\u901f\u7ed3\u679c\u6700\u5feb\u7684\u56fd\u5185\u6e90\u3002
  • reset\uff1a\u5c06\u6240\u6307\u5b9a\u7684\u5305\u7ba1\u7406\u5668\u91cd\u7f6e\u4e3a\u9ed8\u8ba4\u6e90\u3002
"},{"location":"admin/baize/developer/notebooks/baizess.html#package-manager","title":"\u76ee\u524d\u652f\u6301\u7684 package-manager","text":"
  • apt \uff08\u6e90\u7684\u5207\u6362\u4e0e\u91cd\u7f6e\u9700\u8981root\u6743\u9650\uff09
  • conda \uff08\u539f\u5148\u7684\u6e90\u5c06\u88ab\u5907\u4efd\u5728/etc/apt/backup/\uff09
  • pip \uff08\u66f4\u65b0\u540e\u6e90\u4fe1\u606f\u5c06\u88ab\u5199\u5165~/.condarc\uff09
"},{"location":"admin/baize/developer/notebooks/create.html","title":"\u521b\u5efa Notebook","text":"

Notebook \u63d0\u4f9b\u4e86\u4e00\u4e2a\u5728\u7ebf\u7684 Web \u4ea4\u4e92\u5f0f\u7f16\u7a0b\u73af\u5883\uff0c\u65b9\u4fbf\u5f00\u53d1\u8005\u5feb\u901f\u8fdb\u884c\u6570\u636e\u79d1\u5b66\u548c\u673a\u5668\u5b66\u4e60\u5b9e\u9a8c\u3002

\u8fdb\u5165\u5f00\u53d1\u8005\u63a7\u5236\u53f0\u540e\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u5728\u4e0d\u540c\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u4e2d\u521b\u5efa\u548c\u7ba1\u7406 Notebook\u3002

  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb Notebooks \uff0c\u8fdb\u5165 Notebook \u5217\u8868\u3002\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

  2. \u7cfb\u7edf\u4f1a\u9884\u5148\u586b\u5145\u57fa\u7840\u914d\u7f6e\u6570\u636e\uff0c\u5305\u62ec\u8981\u90e8\u7f72\u7684\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001Notebook \u955c\u50cf\u5730\u5740\u3001\u961f\u5217\u3001\u8d44\u6e90\u3001\u7528\u6237\u76ee\u5f55\u7b49\u3002 \u8c03\u6574\u8fd9\u4e9b\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a \u3002

  3. \u521a\u521b\u5efa\u7684 Notebook \u72b6\u6001\u4e3a \u7b49\u5f85\u4e2d \uff0c\u7247\u523b\u540e\u5c06\u53d8\u4e3a \u8fd0\u884c\u4e2d \uff0c\u9ed8\u8ba4\u6700\u65b0\u7684\u4f4d\u4e8e\u5217\u8868\u9876\u90e8\u3002

  4. \u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u66f4\u591a\u64cd\u4f5c\uff1a\u66f4\u65b0\u53c2\u6570\u3001\u542f\u52a8/\u6682\u505c\u3001\u514b\u9686 Notebook \u3001\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u548c\u5220\u9664\u3002

Note

\u5982\u679c\u9009\u62e9\u7eaf CPU \u8d44\u6e90\u540e\uff0c\u53d1\u73b0\u6302\u8f7d\u4e86\u8282\u70b9\u4e0a\u7684\u6240\u6709 GPU \u5361\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u6dfb\u52a0 container env \u6765\u89e3\u51b3\u6b64\u95ee\u9898\uff1a

NVIDIA_VISIBLE_DEVICES=\"\"\n
"},{"location":"admin/baize/developer/notebooks/delete.html","title":"\u5220\u9664 Notebook","text":"

\u5982\u679c\u53d1\u73b0 Notebook \u5197\u4f59\u3001\u8fc7\u671f\u6216\u56e0\u5176\u4ed6\u7f18\u6545\u4e0d\u518d\u9700\u8981\uff0c\u53ef\u4ee5\u4ece Notebook \u5217\u8868\u4e2d\u5220\u9664\u3002

  1. \u5728 Notebook \u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

  2. \u5728\u5f39\u7a97\u4e2d\u786e\u8ba4\u8981\u5220\u9664\u7684\u4efb\u52a1\uff0c\u8f93\u5165 Notebook \u540d\u79f0\u540e\u70b9\u51fb \u5220\u9664 \u3002

  3. \u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\uff0c\u8be5 Notebook \u4ece\u5217\u8868\u4e2d\u6d88\u5931\u3002

Caution

Notebook \u4e00\u65e6\u5220\u9664\u5c06\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-auto-close.html","title":"Notebook \u95f2\u7f6e\u8d85\u65f6\u81ea\u52a8\u5173\u673a","text":"

\u5728\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e3a\u4f18\u5316\u8d44\u6e90\u5229\u7528\u7387\uff0cAI Lab \u542f\u7528\u4e86 Notebook \u95f2\u7f6e\u8d85\u65f6\u81ea\u52a8\u5173\u673a\u529f\u80fd\uff1b \u5f53 Notebook \u957f\u65f6\u95f4\u65e0\u64cd\u4f5c\u65f6\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u5173\u673a Notebook\uff0c\u91ca\u653e\u8d44\u6e90\u3002

  • \u4f18\u70b9\uff1a\u901a\u8fc7\u8fd9\u4e2a\u65b9\u5f0f\uff0c\u53ef\u4ee5\u6781\u5927\u51cf\u5c11\u56e0\u4e3a\u957f\u65f6\u95f4\u65e0\u64cd\u4f5c\u5bfc\u81f4\u7684\u8d44\u6e90\u6d6a\u8d39\uff0c\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u6548\u7387\u3002
  • \u7f3a\u70b9\uff1a\u5982\u679c Notebook \u672a\u914d\u7f6e\u76f8\u5173\u5907\u4efd\u7b56\u7565\uff0c\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u4e22\u5931\u3002

Note

\u5f53\u524d\uff0c\u6b64\u529f\u80fd\u4e3a\u96c6\u7fa4\u7ea7\u522b\u914d\u7f6e\uff0c\u9ed8\u8ba4\u5f00\u542f\uff0c\u9ed8\u8ba4\u8d85\u65f6\u65f6\u957f\u4e3a 30 \u5206\u949f\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-auto-close.html#_1","title":"\u914d\u7f6e\u53d8\u66f4","text":"

\u76ee\u524d\u914d\u7f6e\u4fee\u6539\u65b9\u5f0f\u4e3a\u624b\u52a8\u4fee\u6539\uff0c\u540e\u7eed\u4f1a\u63d0\u4f9b\u66f4\u52a0\u4fbf\u6377\u7684\u914d\u7f6e\u65b9\u5f0f\u3002

\u4fee\u6539\u5de5\u4f5c\u96c6\u7fa4\u4e2d baize-agent \u7684\u90e8\u7f72\u53c2\u6570\uff0c\u6b63\u786e\u7684\u4fee\u6539\u65b9\u5f0f\u4e3a\u66f4\u65b0 Helm \u5e94\u7528\uff0c

"},{"location":"admin/baize/developer/notebooks/notebook-auto-close.html#_2","title":"\u754c\u9762\u5316\u4fee\u6539","text":"
  1. \u5728\u96c6\u7fa4\u7ba1\u7406\u754c\u9762\u627e\u5230\u5bf9\u5e94\u7684\u5de5\u4f5c\u96c6\u7fa4\uff0c\u8fdb\u5165\u96c6\u7fa4\u8be6\u60c5\uff0c\u9009\u62e9 Helm \u5e94\u7528 \uff0c\u5728 baize-system \u547d\u540d\u7a7a\u95f4\u4e0b\u627e\u5230 baize-agent\uff0c\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u66f4\u65b0 \u6309\u94ae\uff1a

  2. \u5982\u56fe\u4fee\u6539 YAML \u4ee3\u7801\uff1a

    ...\nnotebook-controller:\n  culling_enabled: false\n  cull_idle_time: 120\n  idleness_check_period: 1\n...\n
  3. \u786e\u8ba4\u53c2\u6570\u4fee\u6539\u6210\u529f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u548c \u786e\u5b9a \u3002

"},{"location":"admin/baize/developer/notebooks/notebook-auto-close.html#_3","title":"\u547d\u4ee4\u884c\u4fee\u6539","text":"

\u8fdb\u5165\u63a7\u5236\u53f0\u4ee5\u540e\uff0c\u4f7f\u7528 helm upgrade \u547d\u4ee4\u66f4\u6539\u914d\u7f6e\uff1a

# \u8bbe\u5b9a\u7248\u672c\u53f7\nexport VERSION=0.8.0\n\n# \u66f4\u65b0 Helm Chart \nhelm upgrade --install baize-agent baize/baize-agent \\\n    --namespace baize-system \\\n    --create-namespace \\\n    --set global.imageRegistry=release.daocloud.io \\\n    --set notebook-controller.culling_enabled=true \\    # \u5f00\u542f\u81ea\u52a8\u5173\u673a\uff0c\u9ed8\u8ba4\u4e3a true\n    --set notebook-controller.cull_idle_time=120 \\      # \u8bbe\u7f6e\u95f2\u7f6e\u8d85\u65f6\u65f6\u95f4\u4e3a 120 \u5206\u949f\uff0c\u9ed8\u8ba4\u4e3a 30 \u5206\u949f\n    --set notebook-controller.idleness_check_period=1 \\ # \u8bbe\u7f6e\u68c0\u67e5\u95f4\u9694\u4e3a 1 \u5206\u949f\uff0c\u9ed8\u8ba4\u4e3a 1 \u5206\u949f\n    --version=$VERSION\n

Note

\u4e3a\u4e86\u907f\u514d\u81ea\u52a8\u5173\u673a\u540e\u4e22\u5931\u6570\u636e\uff0c\u60a8\u53ef\u4ee5\u5c06 AI Lab \u5347\u7ea7\u5230 v0.8.0 \u53ca\u66f4\u9ad8\u7248\u672c\uff0c\u5728 Notebook \u914d\u7f6e\u4e2d\u542f\u7528\u5173\u673a\u81ea\u52a8\u4fdd\u5b58\u529f\u80fd\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-envs.html","title":"\u5728 Notebook \u4e2d\u4f7f\u7528\u73af\u5883","text":"

\u73af\u5883\u7ba1\u7406\u662f AI Lab \u7684\u91cd\u8981\u529f\u80fd\u4e4b\u4e00\uff0c\u901a\u8fc7\u5728 Notebook \u4e2d\u5173\u8054\u5bf9\u5e94\u7684\u73af\u5883\uff0c\u53ef\u4ee5\u5feb\u901f\u5207\u6362\u4e0d\u540c\u7684\u73af\u5883\uff0c\u65b9\u4fbf\u7528\u6237\u8fdb\u884c\u5f00\u53d1\u548c\u8c03\u8bd5\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-envs.html#notebook_1","title":"\u521b\u5efa Notebook \u65f6\u9009\u62e9\u73af\u5883","text":"

\u5728\u521b\u5efa Notebook \u65f6\uff0c\u53ef\u4ee5\u9009\u62e9\u4e00\u4e2a\u6216\u591a\u4e2a\u7684\u73af\u5883 Envs \u3002\u5982\u679c\u6ca1\u6709\u5408\u9002\u7684\u73af\u5883\uff0c\u53ef\u4ee5\u53bb \u73af\u5883\u7ba1\u7406 \u4e2d\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u73af\u5883\u3002

\u5982\u4f55\u521b\u5efa\u73af\u5883\uff0c\u8bf7\u53c2\u8003\u73af\u5883\u7ba1\u7406\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-envs.html#notebook_2","title":"\u5728 Notebook \u4f7f\u7528\u73af\u5883","text":"

Note

\u5728 Notebook \u4e2d\uff0c\u6211\u4eec\u540c\u65f6\u63d0\u4f9b\u4e86 conda \u548c mamba \u4e24\u79cd\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u73af\u5883\u7ba1\u7406\u5de5\u5177\u3002

AI Lab \u4e2d\uff0c\u6211\u4eec\u91c7\u7528\u4e86 conda \u73af\u5883\u7ba1\u7406\u5de5\u5177\uff0c\u7528\u6237\u53ef\u4ee5\u5728 Notebook \u4e2d\u901a\u8fc7 !conda env list \u547d\u4ee4\u67e5\u770b\u5f53\u524d\u73af\u5883\u5217\u8868\u3002

(base) jovyan@chuanjia-jupyter-0:~/yolov8$ conda env list\n# conda environments:\n#\ndkj-python312-pure       /opt/baize-runtime-env/dkj-python312-pure/conda/envs/dkj-python312-pure\npython-3.10              /opt/baize-runtime-env/python-3.10/conda/envs/python-3.10\ntorch-smaple             /opt/baize-runtime-env/torch-smaple/conda/envs/torch-smaple\nbase                  *  /opt/conda     # \u5f53\u524d\u6fc0\u6d3b\u7684\u73af\u5883\nbaize-base               /opt/conda/envs/baize-base\n

\u8fd9\u4e2a\u547d\u4ee4\u4f1a\u5217\u51fa\u6240\u6709\u7684 conda \u73af\u5883\uff0c\u5e76\u5728\u5f53\u524d\u6fc0\u6d3b\u7684\u73af\u5883\u524d\u9762\u52a0\u4e0a\u4e00\u4e2a\u661f\u53f7\uff08*\uff09\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-envs.html#jupyterlab-kernel","title":"JupyterLab \u7684 Kernel \u73af\u5883\u7ba1\u7406","text":"

\u5728 Jupyterlab \u4e2d\uff0c\u6211\u4eec\u81ea\u52a8\u5c06 Notebook \u5173\u8054\u7684\u73af\u5883\u7ed1\u5b9a\u5230 Kernel \u5217\u8868\u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 Kernel \u5feb\u901f\u5207\u6362\u73af\u5883\u3002

\u901a\u8fc7\u4ee5\u4e0a\u529e\u6cd5\uff0c\u53ef\u4ee5\u540c\u65f6\u5728\u4e00\u4e2a Notebook \u4e2d\u4f7f\u7528\u4e0d\u540c\u7f16\u5199\u548c\u8c03\u8bd5\u7b97\u6cd5\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-envs.html#terminal","title":"Terminal \u5207\u6362\u73af\u5883","text":"

AI Lab \u7684 Notebook \u76ee\u524d\u4e5f\u5df2\u7ecf\u652f\u6301\u4e86 VSCode\u3002

\u5982\u679c\u60a8\u66f4\u559c\u6b22\u5728 Terminal \u4e2d\u7ba1\u7406\u548c\u5207\u6362\u73af\u5883\uff0c\u53ef\u4ee5\u5b89\u88c5\u5982\u4e0b\u6b65\u9aa4\uff1a

\u5728\u9996\u6b21\u542f\u52a8\u5e76\u4f7f\u7528 Notebook \u65f6\uff0c\u9700\u8981\u5148\u6267\u884c conda init\uff0c\u7136\u540e\u518d\u6267\u884c conda activate <env_name> \u5207\u6362\u5230\u5bf9\u5e94\u7684\u73af\u5883\u3002

(base) jovyan@chuanjia-jupyter-0:~/yolov8$ conda init bash# \u521d\u59cb\u5316 bash \u73af\u5883, \u4ec5\u9996\u6b21\u4f7f\u7528\u9700\u8981\u6267\u884c\nno change     /opt/conda/condabin/conda\n change     /opt/conda/bin/conda\n change     /opt/conda/bin/conda-env\n change     /opt/conda/bin/activate\n change     /opt/conda/bin/deactivate\n change     /opt/conda/etc/profile.d/conda.sh\n change     /opt/conda/etc/fish/conf.d/conda.fish\n change     /opt/conda/shell/condabin/Conda.psm1\n change     /opt/conda/shell/condabin/conda-hook.ps1\n change     /opt/conda/lib/python3.11/site-packages/xontrib/conda.xsh\n change     /opt/conda/etc/profile.d/conda.csh\n change     /home/jovyan/.bashrc\n action taken.\nAdded mamba to /home/jovyan/.bashrc\n\n==> For changes to take effect, close and re-open your current shell. <==\n\n(base) jovyan@chuanjia-jupyter-0:~/yolov8$ source ~/.bashrc  # \u91cd\u65b0\u52a0\u8f7d bash \u73af\u5883\n(base) jovyan@chuanjia-jupyter-0:~/yolov8$ conda activate python-3.10   # \u5207\u6362\u5230 python-3.10 \u73af\u5883\n(python-3.10) jovyan@chuanjia-jupyter-0:~/yolov8$ conda env list\n\n              mamba version : 1.5.1\n# conda environments:\n#\ndkj-python312-pure       /opt/baize-runtime-env/dkj-python312-pure/conda/envs/dkj-python312-pure\npython-3.10           *  /opt/baize-runtime-env/python-3.10/conda/envs/python-3.10    # \u5f53\u524d\u6fc0\u6d3b\u7684\u73af\u5883\ntorch-smaple             /opt/baize-runtime-env/torch-smaple/conda/envs/torch-smaple\nbase                     /opt/conda\nbaize-base               /opt/conda/envs/baize-base\n

\u5982\u679c\u60a8\u66f4\u559c\u6b22\u4f7f\u7528 mamba \uff0c\u8fd9\u91cc\u9700\u8981\u4f7f\u7528 mamaba init \u548c mamba activate <env_name>\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-envs.html#_1","title":"\u67e5\u770b\u73af\u5883\u4e2d\u7684\u5305","text":"

\u901a\u8fc7\u4e0d\u540c\u73af\u5883\u7ba1\u7406\u7684\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u529f\u80fd\u662f\uff0c\u53ef\u4ee5\u5728\u4e00\u4e2a Notebook \u4e2d\u901a\u8fc7\u5feb\u901f\u5207\u6362\u73af\u5883\uff0c\u4f7f\u7528\u4e0d\u7528\u7684\u5305\u3002

\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4e0b\u65b9\u7684\u547d\u4ee4\u6765\u4f7f\u7528 conda \u67e5\u770b\u5f53\u524d\u73af\u5883\u4e2d\u7684\u6240\u6709\u5305\u3002

(python-3.10) jovyan@chuanjia-jupyter-0:~/yolov8$ conda list\n# packages in environment at /opt/baize-runtime-env/python-3.10/conda/envs/python-3.10:\n#\n# Name                    Version                   Build  Channel\n_libgcc_mutex             0.1                        main    defaults\n_openmp_mutex             5.1                       1_gnu    defaults\n... # \u7701\u7565\u90e8\u5206\u8f93\u51fa\nidna                      3.7             py310h06a4308_0    defaults\nipykernel                 6.28.0          py310h06a4308_0    defaults\nipython                   8.20.0          py310h06a4308_0    defaults\nipython_genutils          0.2.0              pyhd3eb1b0_1    defaults\njedi                      0.18.1          py310h06a4308_1    defaults\njinja2                    3.1.4           py310h06a4308_0    defaults\njsonschema                4.19.2          py310h06a4308_0    defaults\njsonschema-specifications 2023.7.1        py310h06a4308_0    defaults\njupyter_client            7.4.9           py310h06a4308_0    defaults\njupyter_core              5.5.0           py310h06a4308_0    defaults\njupyter_events            0.8.0           py310h06a4308_0    defaults\njupyter_server            2.10.0          py310h06a4308_0    defaults\njupyter_server_terminals  0.4.4           py310h06a4308_1    defaults\njupyterlab_pygments       0.2.2           py310h06a4308_0    defaults\n... # \u7701\u7565\u90e8\u5206\u8f93\u51fa\nxz                        5.4.6                h5eee18b_1    defaults\nyaml                      0.2.5                h7b6447c_0    defaults\nzeromq                    4.3.5                h6a678d5_0    defaults\nzlib                      1.2.13               h5eee18b_1    defaults\n
"},{"location":"admin/baize/developer/notebooks/notebook-with-envs.html#_2","title":"\u66f4\u65b0\u73af\u5883\u7684\u5305","text":"

\u76ee\u524d\uff0c\u53ef\u4ee5\u901a\u8fc7\u5728 AI Lab \u7684\u754c\u9762\u4e2d \u73af\u5883\u7ba1\u7406 \u6765\u66f4\u65b0\u73af\u5883\u4e2d\u7684\u5305\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html","title":"Notebook SSH \u8bbf\u95ee\u6307\u5357","text":"

AI Lab \u63d0\u4f9b\u7684 Notebook \u652f\u6301\u5728\u672c\u5730\u901a\u8fc7 SSH \u7684\u65b9\u5f0f\u8bbf\u95ee\uff1b

\u901a\u8fc7\u7b80\u5355\u7684\u914d\u7f6e\uff0c\u5373\u53ef\u4f7f\u7528 SSH \u8bbf\u95ee Jupyter Notebook \u7684\u529f\u80fd\u3002 \u65e0\u8bba\u60a8\u662f\u4f7f\u7528 Windows\u3001Mac \u8fd8\u662f Linux \u64cd\u4f5c\u7cfb\u7edf\uff0c\u90fd\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u64cd\u4f5c\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#ssh","title":"\u914d\u7f6e SSH \u8bbf\u95ee\u51ed\u8bc1","text":""},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#ssh_1","title":"\u751f\u6210 SSH \u5bc6\u94a5\u5bf9","text":"

\u9996\u5148\uff0c\u60a8\u9700\u8981\u5728\u60a8\u7684\u8ba1\u7b97\u673a\u4e0a\u751f\u6210 SSH \u516c\u94a5\u548c\u79c1\u94a5\u5bf9\u3002\u8fd9\u4e2a\u5bc6\u94a5\u5bf9\u5c06\u7528\u4e8e\u8ba4\u8bc1\u8fc7\u7a0b\uff0c\u786e\u4fdd\u5b89\u5168\u8bbf\u95ee\u3002

Mac/LinuxWindows
  1. \u6253\u5f00\u7ec8\u7aef
  2. \u8f93\u5165\u547d\u4ee4\uff1a

    ssh-keygen -t rsa -b 4096\n
  3. \u5f53\u7cfb\u7edf\u63d0\u793a\u60a8\u201cEnter a file in which to save the key\u201d\uff0c\u60a8\u53ef\u4ee5\u76f4\u63a5\u6572\u51fb Enter \u952e\u4f7f\u7528\u9ed8\u8ba4\u8def\u5f84\uff0c\u6216\u8005\u6307\u5b9a\u4e00\u4e2a\u65b0\u7684\u8def\u5f84\u3002

  4. \u63a5\u4e0b\u6765\uff0c\u7cfb\u7edf\u4f1a\u63d0\u793a\u60a8\u8f93\u5165\u5bc6\u7801\uff08\u53ef\u9009\uff09\uff0c\u8fd9\u5c06\u589e\u52a0\u4e00\u4e2a\u989d\u5916\u7684\u5b89\u5168\u5c42\u3002\u5982\u679c\u9009\u62e9\u8f93\u5165\u5bc6\u7801\uff0c\u8bf7\u8bb0\u4f4f\u8fd9\u4e2a\u5bc6\u7801\uff0c\u56e0\u4e3a\u6bcf\u6b21\u4f7f\u7528\u5bc6\u94a5\u65f6\u90fd\u4f1a\u9700\u8981\u5b83\u3002
  1. \u5b89\u88c5 Git Bash\uff08\u5982\u679c\u60a8\u5c1a\u672a\u5b89\u88c5\uff09
  2. \u6253\u5f00 Git Bash
  3. \u8f93\u5165\u547d\u4ee4\uff1a

    ssh-keygen -t rsa -b 4096\n
  4. \u540c Mac/Linux \u6b65\u9aa4

"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#ssh_2","title":"\u6dfb\u52a0 SSH \u516c\u94a5\u5230\u4e2a\u4eba\u4e2d\u5fc3","text":"

Note

\u5177\u4f53\u64cd\u4f5c\u53ef\u4ee5\u53c2\u8003\uff1a\u914d\u7f6e SSH \u516c\u94a5

  1. \u6253\u5f00\u751f\u6210\u7684\u516c\u94a5\u6587\u4ef6\uff0c\u901a\u5e38\u4f4d\u4e8e ~/.ssh/id_rsa.pub\uff08\u5982\u679c\u60a8\u6ca1\u6709\u66f4\u6539\u9ed8\u8ba4\u8def\u5f84\uff09
  2. \u590d\u5236\u516c\u94a5\u5185\u5bb9
  3. \u767b\u5f55\u5230\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0, \u7136\u540e\u53f3\u4e0a\u89d2\u5e10\u53f7\u70b9\u5f00\uff0c\u9009\u62e9\u4e2a\u4eba\u4e2d\u5fc3
  4. \u5728 SSH \u516c\u94a5\u914d\u7f6e\u9875\uff0c\u6dfb\u52a0\u4f60\u672c\u5730\u751f\u6210\u7684\u516c\u94a5\u6587\u4ef6
  5. \u4fdd\u5b58\u66f4\u6539
"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#notebook-ssh_1","title":"\u5728 Notebook \u4e2d\u5f00\u542f SSH \u8bbf\u95ee","text":"
  1. \u767b\u5f55\u5230 Jupyter Notebook \u7684 Web \u754c\u9762\u3002
  2. \u5bfb\u627e\u60a8\u60f3\u8981\u542f\u7528 SSH \u8bbf\u95ee\u7684 Notebook\u3002
  3. \u5728 Notebook \u7684\u8bbe\u7f6e\u6216\u8be6\u60c5\u9875\u9762\uff0c\u627e\u5230 \u5f00\u542f SSH \u8bbf\u95ee \u7684\u9009\u9879\u5e76\u542f\u7528\u5b83\u3002
  4. \u8bb0\u5f55\u6216\u590d\u5236\u663e\u793a\u7684 SSH \u8bbf\u95ee\u547d\u4ee4\u3002\u8fd9\u4e2a\u547d\u4ee4\u5c06\u7528\u4e8e\u540e\u7eed\u6b65\u9aa4\u4e2d\u7684 SSH \u8fde\u63a5\u3002
"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#ssh_3","title":"\u4e0d\u540c\u73af\u5883\u4e0b\u7684 SSH \u8bbf\u95ee\u65b9\u5f0f","text":""},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#_1","title":"\u8bbf\u95ee\u793a\u4f8b","text":"

\u5047\u8bbe\u60a8\u83b7\u5f97\u7684 SSH \u8bbf\u95ee\u547d\u4ee4\u5982\u4e0b\uff1a

    # ssh {USERNAME}@{CLUSTER}.{NAMESPACE}.{NOTEBOOK_NAME}@{UI_LOGIN_IP} -p {UI_LOGIN_IP}\n    ssh baizeuser01@gpu-cluster.demo.demo-notebook@10.20.100.201 -p 80 -i private_key\n

\u8bf7\u5c06 USERNAME \u66ff\u6362\u4e3a\u60a8\u7684\u7528\u6237\u540d\uff0cUI_LOGIN_IP \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u4e3b\u673a\u540d\uff0cUI_LOGIN_IP \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u7aef\u53e3\u53f7\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#windows","title":"Windows","text":"

\u63a8\u8350\u4f7f\u7528 PuTTY \u6216 Git Bash \u8fdb\u884c SSH \u8fde\u63a5\u3002

PuTTYGit Bash
  1. \u6253\u5f00 PuTTY
  2. \u5728 Host Name (or IP address) \u680f\u8f93\u5165 mockhost\uff08\u5b9e\u9645\u7684\u4e3b\u673a\u540d\uff09
  3. \u8f93\u5165\u7aef\u53e3\u53f7 2222\uff08\u5b9e\u9645\u7684\u7aef\u53e3\u53f7\uff09
  4. \u70b9\u51fb Open \u5f00\u59cb\u8fde\u63a5
  5. \u7b2c\u4e00\u6b21\u8fde\u63a5\u65f6\uff0c\u53ef\u80fd\u4f1a\u63d0\u793a\u9a8c\u8bc1\u670d\u52a1\u5668\u7684\u8eab\u4efd\uff0c\u70b9\u51fb Yes
  1. \u6253\u5f00 Git Bash
  2. \u8f93\u5165\u8bbf\u95ee\u547d\u4ee4\uff1a

        # ssh {USERNAME}@{CLUSTER}.{NAMESPACE}.{NOTEBOOK_NAME}@{UI_LOGIN_IP} -p {UI_LOGIN_IP}\n    ssh baizeuser01@gpu-cluster.demo.demo-notebook@10.20.100.201 -p 80 -i private_key\n
  3. \u6309 Enter \u952e

"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#maclinux","title":"Mac/Linux","text":"
  1. \u6253\u5f00\u7ec8\u7aef\u3002
  2. \u8f93\u5165\u8bbf\u95ee\u547d\u4ee4\uff1a

        # ssh {USERNAME}@{CLUSTER}.{NAMESPACE}.{NOTEBOOK_NAME}@{UI_LOGIN_IP} -p {UI_LOGIN_IP}\n    ssh baizeuser01@gpu-cluster.demo.demo-notebook@10.20.100.201 -p 80 -i private_key\n
  3. \u5982\u679c\u7cfb\u7edf\u63d0\u793a\u60a8\u63a5\u53d7\u4e3b\u673a\u7684\u8eab\u4efd\uff0c\u8bf7\u8f93\u5165yes\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#ide","title":"\u914d\u5408 IDE \u5b9e\u73b0\u8fdc\u7a0b\u5f00\u53d1","text":"

\u9664\u4e86\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u8fdb\u884c SSH \u8fde\u63a5\uff0c\u60a8\u8fd8\u53ef\u4ee5\u5229\u7528\u73b0\u4ee3 IDE \u5982 Visual Studio Code (VSCode) \u548c PyCharm \u7684 SSH \u8fdc\u7a0b\u8fde\u63a5\u529f\u80fd\uff0c \u76f4\u63a5\u5728\u672c\u5730 IDE \u4e2d\u5f00\u53d1\u5e76\u5229\u7528\u8fdc\u7a0b\u670d\u52a1\u5668\u7684\u8d44\u6e90\u3002

\u5728 VSCode \u4e2d\u4f7f\u7528 SSH \u8fdc\u7a0b\u8fde\u63a5\u5728 PyCharm \u4e2d\u4f7f\u7528 SSH \u8fdc\u7a0b\u8fde\u63a5

VSCode \u901a\u8fc7 Remote - SSH \u6269\u5c55\u652f\u6301 SSH \u8fdc\u7a0b\u8fde\u63a5\uff0c\u5141\u8bb8\u60a8\u76f4\u63a5\u5728\u672c\u5730 VSCode \u73af\u5883\u4e2d\u7f16\u8f91\u8fdc\u7a0b\u670d\u52a1\u5668\u4e0a\u7684\u6587\u4ef6\uff0c\u5e76\u8fd0\u884c\u547d\u4ee4\u3002

\u64cd\u4f5c\u6b65\u9aa4\u4e3a\uff1a

  1. \u786e\u4fdd\u60a8\u5df2\u5b89\u88c5 VSCode \u548c Remote - SSH \u6269\u5c55\u3002
  2. \u6253\u5f00 VSCode\uff0c\u70b9\u51fb\u5de6\u4fa7\u6d3b\u52a8\u680f\u5e95\u90e8\u7684\u8fdc\u7a0b\u8d44\u6e90\u7ba1\u7406\u5668\u56fe\u6807\u3002
  3. \u9009\u62e9 Remote-SSH: Connect to Host... \u9009\u9879\uff0c\u7136\u540e\u70b9\u51fb + Add New SSH Host...
  4. \u8f93\u5165 SSH \u8fde\u63a5\u547d\u4ee4\uff0c\u4f8b\u5982\uff1a

        # ssh {USERNAME}@{CLUSTER}.{NAMESPACE}.{NOTEBOOK_NAME}@{UI_LOGIN_IP} -p {UI_LOGIN_IP}\n    ssh baizeuser01@gpu-cluster.demo.demo-notebook@10.20.100.201 -p 80 -i private_key\n
  5. \u6572\u51fb Enter \u952e\u3002\u8bf7\u5c06 username\u3001mockhost \u548c 2222 \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u7528\u6237\u540d\u3001\u4e3b\u673a\u540d\u548c\u7aef\u53e3\u53f7\u3002

  6. \u9009\u62e9\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\u6765\u4fdd\u5b58\u6b64 SSH \u4e3b\u673a\uff0c\u901a\u5e38\u9009\u62e9\u9ed8\u8ba4\u5373\u53ef\u3002

\u5b8c\u6210\u540e\uff0c\u60a8\u7684 SSH \u4e3b\u673a\u5c06\u6dfb\u52a0\u5230 SSH \u76ee\u6807\u5217\u8868\u4e2d\u3002\u70b9\u51fb\u60a8\u7684\u4e3b\u673a\u8fdb\u884c\u8fde\u63a5\u3002 \u5982\u679c\u662f\u7b2c\u4e00\u6b21\u8fde\u63a5\uff0c\u53ef\u80fd\u4f1a\u63d0\u793a\u60a8\u9a8c\u8bc1\u4e3b\u673a\u7684\u6307\u7eb9\u3002\u63a5\u53d7\u540e\uff0c\u60a8\u5c06\u88ab\u8981\u6c42\u8f93\u5165\u5bc6\u7801\uff08\u5982\u679c SSH \u5bc6\u94a5\u8bbe\u7f6e\u4e86\u5bc6\u7801\uff09\u3002 \u8fde\u63a5\u6210\u529f\u540e\uff0c\u60a8\u53ef\u4ee5\u50cf\u5728\u672c\u5730\u5f00\u53d1\u4e00\u6837\u5728 VSCode \u4e2d\u7f16\u8f91\u8fdc\u7a0b\u6587\u4ef6\uff0c\u5e76\u5229\u7528\u8fdc\u7a0b\u8d44\u6e90\u3002

PyCharm Professional \u7248\u652f\u6301\u901a\u8fc7 SSH \u8fde\u63a5\u5230\u8fdc\u7a0b\u670d\u52a1\u5668\uff0c\u5e76\u5728\u672c\u5730 PyCharm \u4e2d\u76f4\u63a5\u5f00\u53d1\u3002

\u64cd\u4f5c\u6b65\u9aa4\u4e3a\uff1a

  1. \u6253\u5f00 PyCharm\uff0c\u5e76\u6253\u5f00\u6216\u521b\u5efa\u4e00\u4e2a\u9879\u76ee
  2. \u9009\u62e9 File -> Settings \uff08\u5728 Mac \u4e0a\u662f PyCharm -> Preferences
  3. \u5728\u8bbe\u7f6e\u7a97\u53e3\u4e2d\uff0c\u5bfc\u822a\u5230 Project: YourProjectName -> Python Interpreter
  4. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684\u9f7f\u8f6e\u56fe\u6807\uff0c\u9009\u62e9 Add...

    • \u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\uff0c\u9009\u62e9 SSH Interpreter
    • \u8f93\u5165\u8fdc\u7a0b\u4e3b\u673a\u7684\u4fe1\u606f\uff1a\u4e3b\u673a\u540d\uff08mockhost\uff09\u3001\u7aef\u53e3\u53f7\uff082222\uff09\u3001\u7528\u6237\u540d\uff08username\uff09\u3002 \u8bf7\u4f7f\u7528\u60a8\u7684\u5b9e\u9645\u4fe1\u606f\u66ff\u6362\u8fd9\u4e9b\u5360\u4f4d\u7b26\u3002
    • \u70b9\u51fb Next \uff0cPyCharm \u5c06\u5c1d\u8bd5\u8fde\u63a5\u5230\u8fdc\u7a0b\u670d\u52a1\u5668\u3002\u5982\u679c\u8fde\u63a5\u6210\u529f\uff0c\u60a8\u5c06\u88ab\u8981\u6c42\u8f93\u5165\u5bc6\u7801\u6216\u9009\u62e9\u79c1\u94a5\u6587\u4ef6\u3002
  5. \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb Finish \u3002\u73b0\u5728\uff0c\u60a8\u7684 PyCharm \u5c06\u4f7f\u7528\u8fdc\u7a0b\u670d\u52a1\u5668\u4e0a\u7684 Python \u89e3\u91ca\u5668\u3002

"},{"location":"admin/baize/developer/notebooks/notebook-with-ssh.html#_2","title":"\u5b89\u5168\u9650\u5236","text":"

\u5728\u540c\u4e00\u4e2a Workspace \u5185\uff0c\u4efb\u610f\u7528\u6237\u90fd\u53ef\u4ee5\u901a\u8fc7\u81ea\u5df1\u7684 SSH \u8bbf\u95ee\u51ed\u8bc1\u6765\u767b\u5f55\u5230\u542f\u7528\u4e86 SSH \u7684 Notebook\u3002 \u8fd9\u610f\u5473\u7740\uff0c\u53ea\u8981\u7528\u6237\u914d\u7f6e\u4e86\u81ea\u5df1\u7684 SSH \u516c\u94a5\u5230\u4e2a\u4eba\u4e2d\u5fc3\uff0c\u5e76\u4e14 Notebook \u542f\u7528\u4e86 SSH \u8bbf\u95ee\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 SSH \u8fdb\u884c\u5b89\u5168\u8fde\u63a5\u3002

\u8bf7\u6ce8\u610f\uff0c\u4e0d\u540c\u7528\u6237\u7684\u8bbf\u95ee\u6743\u9650\u53ef\u80fd\u4f1a\u6839\u636e Workspace \u7684\u914d\u7f6e\u800c\u6709\u6240\u4e0d\u540c\u3002\u786e\u4fdd\u60a8\u4e86\u89e3\u5e76\u9075\u5b88\u60a8\u6240\u5728\u7ec4\u7ec7\u7684\u5b89\u5168\u548c\u8bbf\u95ee\u7b56\u7565\u3002

\u901a\u8fc7\u9075\u5faa\u4e0a\u8ff0\u6b65\u9aa4\uff0c\u60a8\u5e94\u8be5\u80fd\u591f\u6210\u529f\u914d\u7f6e\u5e76\u4f7f\u7528 SSH \u8bbf\u95ee Jupyter Notebook\u3002\u5982\u679c\u9047\u5230\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u7cfb\u7edf\u5e2e\u52a9\u6587\u6863\u6216\u8054\u7cfb\u7cfb\u7edf\u7ba1\u7406\u5458\u3002

"},{"location":"admin/baize/developer/notebooks/start-pause.html","title":"\u542f\u52a8\u548c\u6682\u505c Notebook","text":"

Notebook \u521b\u5efa\u6210\u529f\u540e\uff0c\u901a\u5e38\u4f1a\u6709\u51e0\u4e2a\u72b6\u6001\uff1a

  • \u7b49\u5f85\u4e2d
  • \u8fd0\u884c\u4e2d
  • \u5df2\u505c\u6b62

\u5982\u679c\u67d0\u4e2a Notebook \u7684\u72b6\u6001\u4e3a \u5df2\u505c\u6b62 \uff0c\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u542f\u52a8 \u3002

\u6b64 Notebook \u5c06\u8fdb\u5165\u8fd0\u884c\u961f\u5217\u4e2d\uff0c\u72b6\u6001\u53d8\u4e3a \u7b49\u5f85\u4e2d \uff0c\u5982\u679c\u4e00\u5207\u6b63\u5e38\uff0c\u7247\u523b\u540e\u5176\u72b6\u6001\u5c06\u53d8\u4e3a \u8fd0\u884c\u4e2d \u3002

\u5982\u679c\u4f7f\u7528\u7ed3\u675f\uff0c\u53ef\u4ee5\u4ece\u83dc\u5355\u4e2d\u9009\u62e9 \u6682\u505c \uff0c\u5c06\u5176\u72b6\u6001\u53d8\u4e3a \u5df2\u505c\u6b62 \u3002

"},{"location":"admin/baize/developer/notebooks/view.html","title":"Notebook \u5de5\u4f5c\u8d1f\u8f7d","text":"

\u5982\u679c\u60f3\u8981\u67e5\u770b\u67d0\u4e2a Notebook \u7684\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u53ef\u4ee5\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a

  1. \u5728 Notebook \u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \u3002

  2. \u8df3\u8f6c\u5230\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\uff08StatefulSet\uff09\u5217\u8868\uff0c\u53ef\u4ee5\u67e5\u770b\uff1a

    • \u5bb9\u5668\u7ec4 Pod \u7684\u8fd0\u884c\u72b6\u6001\u3001IP\u3001\u8d44\u6e90\u8bf7\u6c42\u548c\u4f7f\u7528\u60c5\u51b5
    • \u5bb9\u5668\u914d\u7f6e\u4fe1\u606f
    • \u8bbf\u95ee\u65b9\u5f0f\uff1aClusterIP\u3001NodePort
    • \u8c03\u5ea6\u7b56\u7565\uff1a\u8282\u70b9\u548c\u5de5\u4f5c\u8d1f\u8f7d\u7684\u4eb2\u548c\u6027\u3001\u53cd\u4eb2\u548c\u6027
    • \u6807\u7b7e\u4e0e\u6ce8\u89e3\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u3001Pod \u7684\u6807\u7b7e\u4e0e\u6ce8\u89e3\u952e\u503c\u5bf9
    • \u5f39\u6027\u4f38\u7f29\uff1a\u652f\u6301 HPA\u3001CronHPA\u3001VPA \u7b49\u65b9\u5f0f
    • \u4e8b\u4ef6\u5217\u8868\uff1a\u8b66\u544a\u3001\u901a\u77e5\u7b49\u6d88\u606f

  3. \u5728 StatefulSet \u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507\uff0c\u53ef\u4ee5\u9488\u5bf9 Pod \u6267\u884c\u66f4\u591a\u64cd\u4f5c\u3002

"},{"location":"admin/baize/oam/index.html","title":"\u8fd0\u7ef4\u7ba1\u7406","text":"

\u8fd0\u7ef4\u7ba1\u7406\u662f IT \u8fd0\u7ef4\u4eba\u5458\u65e5\u5e38\u7ba1\u7406 IT \u8d44\u6e90\uff0c\u5904\u7406\u5de5\u4f5c\u7684\u7a7a\u95f4\u3002

\u5728\u8fd9\u91cc\u53ef\u4ee5\u76f4\u89c2\u5730\u4e86\u89e3\u5f53\u524d\u96c6\u7fa4\u3001\u8282\u70b9\u3001CPU\u3001GPU\u3001vGPU \u7b49\u8d44\u6e90\u7684\u4f7f\u7528\u72b6\u51b5\u3002

"},{"location":"admin/baize/oam/index.html#_2","title":"\u5e38\u89c1\u672f\u8bed","text":"
  • GPU \u5206\u914d\u7387\uff1a\u7edf\u8ba1\u5f53\u524d\u96c6\u7fa4\u5185\u6240\u6709\u672a\u5b8c\u6210\u7684\u4efb\u52a1\u7684 GPU \u5206\u914d\u60c5\u51b5\uff0c\u7edf\u8ba1\u8bf7\u6c42\u7684 GPU\uff08Request\uff09\u4e0e\u603b\u8d44\u6e90\u91cf\uff08Total\uff09\u4e4b\u95f4\u7684\u6bd4\u4f8b\u3002
  • GPU \u5229\u7528\u7387\uff1a\u7edf\u8ba1\u5f53\u524d\u96c6\u7fa4\u4e2d\u6240\u6709\u8fd0\u884c\u4e2d\u7684\u4efb\u52a1\u7684\u5b9e\u9645\u8d44\u6e90\u5229\u7528\u60c5\u51b5\uff0c\u7edf\u8ba1\u5b9e\u9645\u4f7f\u7528\u7684 GPU\uff08Usage\uff09\u4e0e\u603b\u8d44\u6e90\u91cf\uff08Total\uff09\u4e4b\u95f4\u7684\u6bd4\u4f8b\u3002
"},{"location":"admin/baize/oam/resource.html","title":"GPU \u5217\u8868","text":"

\u81ea\u52a8\u5316\u6c47\u603b\u6574\u4e2a\u5e73\u53f0\u4e2d\u7684 GPU \u8d44\u6e90\u4fe1\u606f\uff0c\u63d0\u4f9b\u8be6\u5c3d\u7684 GPU \u8bbe\u5907\u4fe1\u606f\u5c55\u793a\uff0c\u53ef\u67e5\u770b\u5404\u79cd GPU \u5361\u7684\u8d1f\u8f7d\u7edf\u8ba1\u548c\u4efb\u52a1\u8fd0\u884c\u4fe1\u606f\u3002

\u8fdb\u5165 \u8fd0\u7ef4\u7ba1\u7406 \u540e\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u8d44\u6e90\u7ba1\u7406 -> GPU \u7ba1\u7406 \uff0c\u53ef\u4ee5\u67e5\u770b GPU \u5361\u548c\u4efb\u52a1\u4fe1\u606f\u3002

"},{"location":"admin/baize/oam/queue/create.html","title":"\u521b\u5efa\u961f\u5217","text":"

\u5728\u8fd0\u7ef4\u7ba1\u7406\u6a21\u5f0f\u4e2d\uff0c\u961f\u5217\u53ef\u7528\u4e8e\u8c03\u5ea6\u548c\u4f18\u5316\u6279\u5904\u7406\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5b83\u53ef\u4ee5\u6709\u6548\u5730\u7ba1\u7406\u5728\u96c6\u7fa4\u4e0a\u8fd0\u884c\u7684\u591a\u4e2a\u4efb\u52a1\uff0c\u901a\u8fc7\u961f\u5217\u7cfb\u7edf\u6765\u4f18\u5316\u8d44\u6e90\u5229\u7528\u7387\u3002

  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u961f\u5217\u7ba1\u7406 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

  2. \u7cfb\u7edf\u4f1a\u9884\u5148\u586b\u5145\u57fa\u7840\u8bbe\u7f6e\u6570\u636e\uff0c\u5305\u62ec\u8981\u90e8\u7f72\u7684\u96c6\u7fa4\u3001\u5de5\u4f5c\u7a7a\u95f4\u3001\u6392\u961f\u7b56\u7565\u7b49\u3002 \u8c03\u6574\u8fd9\u4e9b\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a \u3002

  3. \u5c4f\u5e55\u63d0\u793a\u521b\u5efa\uff0c\u8fd4\u56de\u961f\u5217\u7ba1\u7406\u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u7b49\u66f4\u591a\u64cd\u4f5c\u3002

"},{"location":"admin/baize/oam/queue/delete.html","title":"\u5220\u9664\u961f\u5217","text":"

\u5728\u8fd0\u7ef4\u7ba1\u7406\u6a21\u5f0f\u4e2d\uff0c\u5982\u679c\u53d1\u73b0\u961f\u5217\u5197\u4f59\u3001\u8fc7\u671f\u6216\u56e0\u5176\u4ed6\u7f18\u6545\u4e0d\u518d\u9700\u8981\uff0c\u53ef\u4ee5\u4ece\u961f\u5217\u5217\u8868\u4e2d\u5220\u9664\u3002

  1. \u5728\u961f\u5217\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

  2. \u5728\u5f39\u7a97\u4e2d\u786e\u8ba4\u8981\u5220\u9664\u7684\u961f\u5217\uff0c\u8f93\u5165\u961f\u5217\u540d\u79f0\u540e\u70b9\u51fb \u5220\u9664 \u3002

  3. \u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\uff0c\u8be5\u961f\u5217\u4ece\u5217\u8868\u4e2d\u6d88\u5931\u3002

Caution

\u961f\u5217\u4e00\u65e6\u5220\u9664\u5c06\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

"},{"location":"admin/baize/troubleshoot/index.html","title":"\u6545\u969c\u6392\u67e5","text":"

\u672c\u6587\u5c06\u6301\u7eed\u7edf\u8ba1\u548c\u68b3\u7406 AI Lab \u4f7f\u7528\u8fc7\u7a0b\u53ef\u80fd\u56e0\u73af\u5883\u6216\u64cd\u4f5c\u4e0d\u89c4\u8303\u5f15\u8d77\u7684\u62a5\u9519\uff0c\u4ee5\u53ca\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u9047\u5230\u67d0\u4e9b\u62a5\u9519\u7684\u95ee\u9898\u5206\u6790\u3001\u89e3\u51b3\u65b9\u6848\u3002

Warning

\u672c\u6587\u6863\u4ec5\u9002\u7528\u4e8e AI \u7b97\u529b\u4e2d\u5fc3\u7248\u672c\uff0c\u82e5\u9047\u5230 AI Lab \u7684\u4f7f\u7528\u95ee\u9898\uff0c\u8bf7\u4f18\u5148\u67e5\u770b\u6b64\u6392\u969c\u624b\u518c\u3002

AI Lab \u5728 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u6a21\u5757\u540d\u79f0 baize\uff0c\u63d0\u4f9b\u4e86\u4e00\u7ad9\u5f0f\u7684\u6a21\u578b\u8bad\u7ec3\u3001\u63a8\u7406\u3001\u6a21\u578b\u7ba1\u7406\u7b49\u529f\u80fd\u3002

"},{"location":"admin/baize/troubleshoot/index.html#_2","title":"\u5e38\u89c1\u6545\u969c\u6848\u4f8b","text":"
  • \u96c6\u7fa4\u4e0b\u62c9\u5217\u8868\u4e2d\u627e\u4e0d\u5230\u96c6\u7fa4
  • Notebook \u4e0d\u53d7\u961f\u5217\u914d\u989d\u63a7\u5236
  • \u961f\u5217\u521d\u59cb\u5316\u5931\u8d25
"},{"location":"admin/baize/troubleshoot/cluster-not-found.html","title":"\u96c6\u7fa4\u4e0b\u62c9\u5217\u8868\u4e2d\u627e\u4e0d\u5230\u96c6\u7fa4","text":""},{"location":"admin/baize/troubleshoot/cluster-not-found.html#_2","title":"\u95ee\u9898\u73b0\u8c61","text":"

\u5728 AI Lab \u5f00\u53d1\u63a7\u5236\u53f0\u3001\u8fd0\u7ef4\u63a7\u5236\u53f0\uff0c\u529f\u80fd\u6a21\u5757\u7684\u96c6\u7fa4\u641c\u7d22\u6761\u4ef6\u7684\u4e0b\u62c9\u5217\u8868\u627e\u4e0d\u5230\u60f3\u8981\u7684\u96c6\u7fa4\u3002

"},{"location":"admin/baize/troubleshoot/cluster-not-found.html#_3","title":"\u95ee\u9898\u5206\u6790","text":"

\u5728 AI Lab \u4e2d\uff0c\u96c6\u7fa4\u4e0b\u62c9\u5217\u8868\u5982\u679c\u7f3a\u5c11\u4e86\u60f3\u8981\u7684\u96c6\u7fa4\uff0c\u53ef\u80fd\u662f\u7531\u4e8e\u4ee5\u4e0b\u539f\u56e0\u5bfc\u81f4\u7684\uff1a

  • baize-agent \u672a\u5b89\u88c5\u6216\u5b89\u88c5\u4e0d\u6210\u529f\uff0c\u5bfc\u81f4 AI Lab \u65e0\u6cd5\u83b7\u53d6\u96c6\u7fa4\u4fe1\u606f
  • \u5b89\u88c5 baize-agent \u672a\u914d\u7f6e\u96c6\u7fa4\u540d\u79f0\uff0c\u5bfc\u81f4 AI Lab \u65e0\u6cd5\u83b7\u53d6\u96c6\u7fa4\u4fe1\u606f
  • \u5de5\u4f5c\u96c6\u7fa4\u5185\u53ef\u89c2\u6d4b\u7ec4\u4ef6\u5f02\u5e38\uff0c\u5bfc\u81f4\u65e0\u6cd5\u91c7\u96c6\u96c6\u7fa4\u5185\u7684\u6307\u6807\u4fe1\u606f
"},{"location":"admin/baize/troubleshoot/cluster-not-found.html#_4","title":"\u89e3\u51b3\u529e\u6cd5","text":""},{"location":"admin/baize/troubleshoot/cluster-not-found.html#baize-agent","title":"baize-agent \u672a\u5b89\u88c5\u6216\u5b89\u88c5\u4e0d\u6210\u529f","text":"

AI Lab \u6709\u4e00\u4e9b\u57fa\u7840\u7ec4\u4ef6\u9700\u8981\u5728\u6bcf\u4e2a\u5de5\u4f5c\u96c6\u7fa4\u5185\u8fdb\u884c\u5b89\u88c5\uff0c\u5982\u679c\u5de5\u4f5c\u96c6\u7fa4\u5185\u672a\u5b89\u88c5 baize-agent \u65f6\uff0c\u53ef\u4ee5\u5728\u754c\u9762\u4e0a\u9009\u62e9\u5b89\u88c5\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u4e00\u4e9b\u975e\u9884\u671f\u7684\u62a5\u9519\u7b49\u95ee\u9898\u3002

\u6240\u4ee5\uff0c\u4e3a\u4e86\u4fdd\u969c\u4f7f\u7528\u4f53\u9a8c\uff0c\u53ef\u9009\u62e9\u7684\u96c6\u7fa4\u8303\u56f4\u4ec5\u5305\u542b\u4e86\u5df2\u7ecf\u6210\u529f\u5b89\u88c5\u4e86 baize-agent \u7684\u96c6\u7fa4\u3002

\u5982\u679c\u662f\u56e0\u4e3a baize-agent \u672a\u5b89\u88c5\u6216\u5b89\u88c5\u5931\u8d25\uff0c\u5219\u4f7f\u7528 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u7ba1\u7406 -> Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u627e\u5230 baize-agent \u5e76\u5b89\u88c5\u3002

Note

\u6b64\u5730\u5740\u5feb\u901f\u8df3\u8f6c https://<ai_host>/kpanda/clusters/<cluster_name>/helm/charts/addon/baize-agent\u3002 \u6ce8\u610f\u5c06 <ai_host> \u66ff\u6362\u4e3a\u5b9e\u9645\u7684 AI \u7b97\u529b\u4e2d\u5fc3\u63a7\u5236\u53f0\u5730\u5740\uff0c<cluster_name> \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u96c6\u7fa4\u540d\u79f0\u3002

"},{"location":"admin/baize/troubleshoot/cluster-not-found.html#baize-agent_1","title":"\u5b89\u88c5 baize-agent \u65f6\u672a\u914d\u7f6e\u96c6\u7fa4\u540d\u79f0","text":"

\u5728\u5b89\u88c5 baize-agent \u65f6\uff0c\u9700\u8981\u6ce8\u610f\u914d\u7f6e\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fd9\u4e2a\u540d\u79f0\u4f1a\u7528\u4e8e\u53ef\u89c2\u6d4b\u6307\u6807\u91c7\u96c6\uff0c \u9ed8\u8ba4\u4e3a\u7a7a\uff0c\u9700\u624b\u5de5\u914d\u7f6e \u3002

"},{"location":"admin/baize/troubleshoot/cluster-not-found.html#_5","title":"\u5de5\u4f5c\u96c6\u7fa4\u5185\u53ef\u89c2\u6d4b\u7ec4\u4ef6\u5f02\u5e38","text":"

\u5982\u679c\u96c6\u7fa4\u5185\u53ef\u89c2\u6d4b\u7ec4\u4ef6\u5f02\u5e38\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4 AI Lab \u65e0\u6cd5\u83b7\u53d6\u96c6\u7fa4\u4fe1\u606f\uff0c\u8bf7\u68c0\u67e5\u5e73\u53f0\u7684\u53ef\u89c2\u6d4b\u670d\u52a1\u662f\u5426\u6b63\u5e38\u8fd0\u884c\u53ca\u914d\u7f6e\u3002

  • \u68c0\u67e5\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5185 insight-server \u7ec4\u4ef6\u662f\u5426\u6b63\u5e38\u8fd0\u884c
  • \u68c0\u67e5\u5de5\u4f5c\u96c6\u7fa4\u5185 insight-agent \u7ec4\u4ef6\u662f\u5426\u6b63\u5e38\u8fd0\u884c
"},{"location":"admin/baize/troubleshoot/local-queue-initialization-failed.html","title":"\u672c\u5730\u961f\u5217\u521d\u59cb\u5316\u5931\u8d25","text":""},{"location":"admin/baize/troubleshoot/local-queue-initialization-failed.html#_2","title":"\u95ee\u9898\u73b0\u8c61","text":"

\u5728\u521b\u5efa Notebook\u3001\u8bad\u7ec3\u4efb\u52a1\u6216\u8005\u63a8\u7406\u670d\u52a1\u65f6\uff0c\u5f53\u961f\u5217\u662f\u9996\u6b21\u5728\u8be5\u547d\u540d\u7a7a\u95f4\u4f7f\u7528\u65f6\uff0c\u4f1a\u63d0\u793a\u9700\u8981\u4e00\u952e\u521d\u59cb\u5316\u961f\u5217\uff0c\u4f46\u662f\u521d\u59cb\u5316\u5931\u8d25\u3002

"},{"location":"admin/baize/troubleshoot/local-queue-initialization-failed.html#_3","title":"\u95ee\u9898\u5206\u6790","text":"

\u5728 AI Lab \u4e2d\uff0c\u961f\u5217\u7ba1\u7406\u80fd\u529b\u7531 Kueue \u63d0\u4f9b\uff0c \u800c Kueue \u63d0\u4f9b\u4e86 \u4e24\u79cd\u961f\u5217\u7ba1\u7406\u8d44\u6e90\uff1a

  • ClusterQueue \u662f\u96c6\u7fa4\u7ea7\u522b\u7684\u961f\u5217\uff0c\u4e3b\u8981\u7528\u4e8e\u7ba1\u7406\u961f\u5217\u4e2d\u7684\u8d44\u6e90\u914d\u989d\uff0c\u5305\u542b\u4e86 CPU\u3001\u5185\u5b58\u3001GPU \u7b49\u8d44\u6e90
  • LocalQueue \u662f\u547d\u540d\u7a7a\u95f4\u7ea7\u522b\u7684\u961f\u5217\uff0c\u9700\u8981\u6307\u5411\u5230\u4e00\u4e2a ClusterQueue\uff0c\u7528\u4e8e\u4f7f\u7528\u961f\u5217\u4e2d\u7684\u8d44\u6e90\u5206\u914d

\u5728 AI Lab \u4e2d\uff0c\u5982\u679c\u521b\u5efa\u670d\u52a1\u65f6\uff0c\u53d1\u73b0\u6307\u5b9a\u7684\u547d\u540d\u7a7a\u95f4\u4e0d\u5b58\u5728 LocalQueue\uff0c\u5219\u4f1a\u63d0\u793a\u9700\u8981\u521d\u59cb\u5316\u961f\u5217\u3002

\u5728\u6781\u5c11\u6570\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u7531\u4e8e\u7279\u6b8a\u539f\u56e0\u4f1a\u5bfc\u81f4 LocalQueue \u521d\u59cb\u5316\u5931\u8d25\u3002

"},{"location":"admin/baize/troubleshoot/local-queue-initialization-failed.html#_4","title":"\u89e3\u51b3\u529e\u6cd5","text":"

\u68c0\u67e5 Kueue \u662f\u5426\u6b63\u5e38\u8fd0\u884c\uff0c\u5982\u679c kueue-controller-manager \u672a\u8fd0\u884c\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u3002

kubectl get deploy kueue-controller-manager -n baize-sysatem\n

\u5982\u679c kueue-controller-manager \u672a\u6b63\u5e38\u8fd0\u884c\uff0c\u8bf7\u5148\u4fee\u590d Kueue\u3002

"},{"location":"admin/baize/troubleshoot/local-queue-initialization-failed.html#_5","title":"\u53c2\u8003\u8d44\u6599","text":"
  • ClusterQueue
  • LocalQueue
"},{"location":"admin/baize/troubleshoot/notebook-not-controlled-by-quotas.html","title":"Notebook \u4e0d\u53d7\u961f\u5217\u914d\u989d\u63a7\u5236","text":"

\u5728 AI Lab \u4e2d\uff0c\u7528\u6237\u5728\u521b\u5efa Notebook \u65f6\uff0c\u53d1\u73b0\u9009\u62e9\u7684\u961f\u5217\u5373\u4f7f\u8d44\u6e90\u4e0d\u8db3\uff0cNotebook \u4f9d\u7136\u53ef\u4ee5\u521b\u5efa\u6210\u529f\u3002

"},{"location":"admin/baize/troubleshoot/notebook-not-controlled-by-quotas.html#01-kubernetes","title":"\u95ee\u9898 01: Kubernetes \u7248\u672c\u4e0d\u652f\u6301","text":"
  • \u5206\u6790\uff1a

    AI Lab \u4e2d\u7684\u961f\u5217\u7ba1\u7406\u80fd\u529b\u7531 Kueue \u63d0\u4f9b\uff0c Notebook \u670d\u52a1\u662f\u901a\u8fc7 JupyterHub \u63d0\u4f9b\u7684\u3002 JupyterHub \u5bf9 Kubernetes \u7684\u7248\u672c\u8981\u6c42\u8f83\u9ad8\uff0c\u5bf9\u4e8e\u4f4e\u4e8e v1.27 \u7684\u7248\u672c\uff0c\u5373\u4f7f\u5728 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u8bbe\u7f6e\u4e86\u961f\u5217\u914d\u989d\uff0c \u7528\u6237\u5728\u521b\u5efa Notebook \u65f6\u4e5f\u9009\u62e9\u4e86\u914d\u989d\uff0c\u4f46 Notebook \u5b9e\u9645\u4e5f\u4e0d\u4f1a\u53d7\u5230\u961f\u5217\u914d\u989d\u7684\u9650\u5236\u3002

  • \u89e3\u51b3\u529e\u6cd5\uff1a\u63d0\u524d\u89c4\u5212\uff0c\u751f\u4ea7\u73af\u5883\u4e2d\u5efa\u8bae\u4f7f\u7528 Kubernetes \u7248\u672c v1.27 \u4ee5\u4e0a\u3002

  • \u53c2\u8003\u8d44\u6599\uff1aJupyter Notebook Documentation

"},{"location":"admin/baize/troubleshoot/notebook-not-controlled-by-quotas.html#02","title":"\u95ee\u9898 02: \u914d\u7f6e\u672a\u542f\u7528","text":"
  • \u5206\u6790\uff1a

    \u5f53 Kubernetes \u96c6\u7fa4\u7248\u672c \u5927\u4e8e v1.27 \u65f6\uff0cNotebook \u4ecd\u65e0\u6cd5\u53d7\u5230\u961f\u5217\u914d\u989d\u7684\u9650\u5236\u3002

    \u8fd9\u662f\u56e0\u4e3a\uff0cKueue \u9700\u8981\u542f\u7528\u5bf9 enablePlainPod \u652f\u6301\uff0c\u624d\u4f1a\u5bf9 Notebook \u670d\u52a1\u751f\u6548\u3002

  • \u89e3\u51b3\u529e\u6cd5\uff1a\u5728\u5de5\u4f5c\u96c6\u7fa4\u4e2d\u90e8\u7f72 baize-agent \u65f6\uff0c\u542f\u7528 Kueue \u5bf9 enablePlainPod \u7684\u652f\u6301\u3002

  • \u53c2\u8003\u8d44\u6599\uff1aRun Plain Pods as a Kueue-Managed Job

"},{"location":"admin/ghippo/password.html","title":"\u5bc6\u7801\u91cd\u7f6e","text":"

\u5982\u679c\u60a8\u5fd8\u8bb0\u5bc6\u7801\uff0c\u53ef\u4ee5\u6309\u672c\u9875\u9762\u8bf4\u660e\u91cd\u7f6e\u5bc6\u7801\u3002

"},{"location":"admin/ghippo/password.html#_2","title":"\u91cd\u7f6e\u5bc6\u7801\u6b65\u9aa4","text":"

\u7ba1\u7406\u5458\u6700\u521d\u521b\u5efa\u4e00\u4e2a\u7528\u6237\u65f6\uff0c\u4f1a\u4e3a\u5176\u8bbe\u7f6e\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002 \u8be5\u7528\u6237\u767b\u5f55\u540e\uff0c\u5728 \u4e2a\u4eba\u4e2d\u5fc3 \u586b\u5199\u90ae\u7bb1\u5e76\u4fee\u6539\u5bc6\u7801\u3002 \u82e5\u8be5\u7528\u6237\u672a\u8bbe\u7f6e\u90ae\u7bb1\uff0c\u5219\u53ea\u80fd\u8054\u7cfb\u7ba1\u7406\u5458\u8fdb\u884c\u5bc6\u7801\u91cd\u7f6e\u3002

  1. \u5982\u679c\u7528\u6237\u5fd8\u8bb0\u4e86\u5bc6\u7801\uff0c\u53ef\u4ee5\u5728\u767b\u5f55\u754c\u9762\u70b9\u51fb \u5fd8\u8bb0\u5bc6\u7801 \u3002

  2. \u8f93\u5165\u767b\u5f55\u90ae\u7bb1\uff0c\u70b9\u51fb \u63d0\u4ea4 \u3002

  3. \u5728\u90ae\u7bb1\u4e2d\u627e\u5230\u5bc6\u7801\u91cd\u7f6e\u90ae\u4ef6\uff0c\u70b9\u51fb\u4e0b\u65b9\u94fe\u63a5\u8fdb\u884c\u5bc6\u7801\u91cd\u7f6e\uff0c\u94fe\u63a5\u65f6\u6548 5 \u5206\u949f\u3002

  4. \u5728\u624b\u673a\u7b49\u7ec8\u7aef\u8bbe\u5907\u5b89\u88c5\u652f\u6301 2FA \u52a8\u6001\u53e3\u4ee4\u751f\u6210\u7684\u5e94\u7528\uff08\u5982 Google Authenticator\uff09\uff0c\u6309\u7167\u9875\u9762\u63d0\u793a\u914d\u7f6e\u52a8\u6001\u53e3\u4ee4\u4ee5\u6fc0\u6d3b\u8d26\u6237\uff0c\u70b9\u51fb \u63d0\u4ea4 \u3002

  5. \u8bbe\u7f6e\u65b0\u5bc6\u7801\uff0c\u70b9\u51fb \u63d0\u4ea4 \u3002\u8bbe\u7f6e\u65b0\u5bc6\u7801\u7684\u8981\u6c42\u4e0e\u521b\u5efa\u7528\u6237\u65f6\u7684\u5bc6\u7801\u89c4\u5219\u4e00\u81f4\u3002

  6. \u4fee\u6539\u5bc6\u7801\u6210\u529f\uff0c\u76f4\u63a5\u8df3\u8f6c\u9996\u9875\u3002

"},{"location":"admin/ghippo/password.html#_3","title":"\u91cd\u7f6e\u5bc6\u7801\u6d41\u7a0b","text":"

\u6574\u4e2a\u5bc6\u7801\u91cd\u7f6e\u7684\u6d41\u7a0b\u793a\u610f\u56fe\u5982\u4e0b\u3002

graph TB\n\npass[\u5fd8\u8bb0\u5bc6\u7801] --> usern[\u8f93\u5165\u7528\u6237\u540d]\n--> button[\u70b9\u51fb\u53d1\u9001\u9a8c\u8bc1\u90ae\u4ef6\u7684\u6309\u94ae] --> judge1[\u5224\u65ad\u7528\u6237\u540d\u662f\u5426\u6b63\u786e]\n\n    judge1 -.\u6b63\u786e.-> judge2[\u5224\u65ad\u662f\u5426\u7ed1\u5b9a\u90ae\u7bb1]\n    judge1 -.\u9519\u8bef.-> tip1[\u63d0\u793a\u7528\u6237\u540d\u4e0d\u6b63\u786e]\n\n        judge2 -.\u5df2\u7ed1\u5b9a\u90ae\u7bb1.-> send[\u53d1\u9001\u91cd\u7f6e\u90ae\u4ef6]\n        judge2 -.\u672a\u7ed1\u5b9a\u90ae\u7bb1.-> tip2[\u63d0\u793a\u672a\u7ed1\u5b9a\u90ae\u7bb1<br>\u8054\u7cfb\u7ba1\u7406\u5458\u91cd\u7f6e\u5bc6\u7801]\n\nsend --> click[\u70b9\u51fb\u90ae\u4ef6\u4e2d\u7684\u94fe\u63a5] --> config[\u914d\u7f6e\u52a8\u6001\u53e3\u4ee4] --> reset[\u91cd\u7f6e\u5bc6\u7801]\n--> success[\u6210\u529f\u91cd\u7f6e\u5bc6\u7801]\n\nclassDef plain fill:#ddd,stroke:#fff,stroke-width:1px,color:#000;\nclassDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;\nclassDef cluster fill:#fff,stroke:#bbb,stroke-width:1px,color:#326ce5;\n\nclass pass,usern,button,tip1,send,tip2,send,click,config,reset,success plain;\nclass judge1,judge2 k8s
"},{"location":"admin/ghippo/access-control/custom-role.html","title":"\u81ea\u5b9a\u4e49\u89d2\u8272","text":"

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u521b\u5efa\u4e09\u79cd\u8303\u56f4\u7684\u81ea\u5b9a\u4e49\u89d2\u8272\uff1a

  • \u5e73\u53f0\u89d2\u8272 \u7684\u6743\u9650\u5bf9\u5e73\u53f0\u6240\u6709\u76f8\u5173\u8d44\u6e90\u751f\u6548
  • \u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272 \u7684\u6743\u9650\u5bf9\u8be5\u7528\u6237\u6240\u5728\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u7684\u8d44\u6e90\u751f\u6548
  • \u6587\u4ef6\u5939\u89d2\u8272 \u7684\u6743\u9650\u5bf9\u8be5\u7528\u6237\u6240\u5728\u7684\u6587\u4ef6\u5939\u53ca\u5176\u4e0b\u7684\u5b50\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u8d44\u6e90\u751f\u6548
"},{"location":"admin/ghippo/access-control/custom-role.html#_2","title":"\u521b\u5efa\u5e73\u53f0\u89d2\u8272","text":"

\u5e73\u53f0\u89d2\u8272\u662f\u7c97\u7c92\u5ea6\u89d2\u8272\uff0c\u80fd\u591f\u5bf9\u6240\u9009\u6743\u9650\u5185\u7684\u6240\u6709\u8d44\u6e90\u751f\u6548\u3002\u5982\u6388\u6743\u540e\u7528\u6237\u53ef\u4ee5\u62e5\u6709\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u7684\u67e5\u770b\u6743\u9650\u3001\u6240\u6709\u96c6\u7fa4\u7684\u7f16\u8f91\u6743\u9650\u7b49\uff0c\u800c\u4e0d\u80fd\u9488\u5bf9\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u6216\u67d0\u4e2a\u96c6\u7fa4\u751f\u6548\u3002\u5e73\u53f0\u89d2\u8272\u521b\u5efa\u5b8c\u6210\u540e\u53ef\u4ee5\u5728\u7528\u6237/\u7528\u6237\u7ec4\u5217\u8868\u4e2d\u8fdb\u884c\u6388\u6743\u3002

  1. \u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u89d2\u8272 \uff0c\u70b9\u51fb \u521b\u5efa\u81ea\u5b9a\u4e49\u89d2\u8272 \u3002

  2. \u8f93\u5165\u540d\u79f0\u3001\u63cf\u8ff0\uff0c\u9009\u62e9 \u5e73\u53f0\u89d2\u8272 \uff0c\u52fe\u9009\u89d2\u8272\u6743\u9650\u540e\u70b9\u51fb \u786e\u5b9a \u3002

  3. \u8fd4\u56de\u89d2\u8272\u5217\u8868\uff0c\u641c\u7d22\u521a\u521b\u5efa\u7684\u81ea\u5b9a\u4e49\u89d2\u8272\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u590d\u5236\u3001\u7f16\u8f91\u548c\u5220\u9664\u7b49\u64cd\u4f5c\u3002

  4. \u5e73\u53f0\u89d2\u8272\u521b\u5efa\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u53bb\u7528\u6237/\u7528\u6237\u7ec4\u6388\u6743\uff0c\u4e3a\u8fd9\u4e2a\u89d2\u8272\u6dfb\u52a0\u7528\u6237\u548c\u7528\u6237\u7ec4\u3002

"},{"location":"admin/ghippo/access-control/custom-role.html#_3","title":"\u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272","text":"

\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u662f\u7ec6\u7c92\u5ea6\u89d2\u8272\uff0c\u9488\u5bf9\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u751f\u6548\u3002\u5982\u5728\u8be5\u89d2\u8272\u4e2d\u9009\u62e9\u5e94\u7528\u5de5\u4f5c\u53f0\u7684\u5168\u90e8\u6743\u9650\uff0c\u7ed9\u7528\u6237\u5728\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u6388\u4e88\u8be5\u89d2\u8272\u540e\uff0c\u8be5\u7528\u6237\u5c06\u4ec5\u80fd\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u4f7f\u7528\u5e94\u7528\u5de5\u4f5c\u53f0\u76f8\u5173\u7684\u529f\u80fd\uff0c\u800c\u65e0\u6cd5\u4f7f\u7528\u5982\u5fae\u670d\u52a1\u5f15\u64ce\u3001\u4e2d\u95f4\u4ef6\u7b49\u5176\u4ed6\u6a21\u5757\u7684\u80fd\u529b\u3002\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u5728\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\u4e2d\u9009\u62e9\u5de5\u4f5c\u7a7a\u95f4\u540e\u8fdb\u884c\u6388\u6743\u3002

  1. \u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u89d2\u8272 \uff0c\u70b9\u51fb \u521b\u5efa\u81ea\u5b9a\u4e49\u89d2\u8272 \u3002

  2. \u8f93\u5165\u540d\u79f0\u3001\u63cf\u8ff0\uff0c\u9009\u62e9 \u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272 \uff0c\u52fe\u9009\u89d2\u8272\u6743\u9650\u540e\u70b9\u51fb \u786e\u5b9a \u3002

  3. \u8fd4\u56de\u89d2\u8272\u5217\u8868\uff0c\u641c\u7d22\u521a\u521b\u5efa\u7684\u81ea\u5b9a\u4e49\u89d2\u8272\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u590d\u5236\u3001\u7f16\u8f91\u548c\u5220\u9664\u7b49\u64cd\u4f5c\u3002

  4. \u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u521b\u5efa\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u53bb\u5de5\u4f5c\u7a7a\u95f4\u6388\u6743\uff0c\u8bbe\u5b9a\u8fd9\u4e2a\u89d2\u8272\u53ef\u4ee5\u7ba1\u7406\u54ea\u4e9b\u5de5\u4f5c\u7a7a\u95f4\u3002

"},{"location":"admin/ghippo/access-control/custom-role.html#_4","title":"\u521b\u5efa\u6587\u4ef6\u5939\u89d2\u8272","text":"

\u6587\u4ef6\u5939\u89d2\u8272\u9488\u5bf9\u67d0\u4e2a\u6587\u4ef6\u5939\u548c\u8be5\u6587\u4ef6\u5939\u4e0b\u7684\u6240\u6709\u5b50\u6587\u4ef6\u5939\u53ca\u5de5\u4f5c\u7a7a\u95f4\u751f\u6548\u3002\u5982\u5728\u8be5\u89d2\u8272\u4e2d\u9009\u62e9\u5168\u5c40\u7ba1\u7406-\u5de5\u4f5c\u7a7a\u95f4\u548c\u5e94\u7528\u5de5\u4f5c\u53f0\uff0c\u7ed9\u7528\u6237\u5728\u67d0\u4e2a\u6587\u4ef6\u5939\u4e0b\u6388\u4e88\u8be5\u89d2\u8272\u540e\uff0c\u8be5\u7528\u6237\u5c06\u80fd\u591f\u5728\u5176\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u4f7f\u7528\u5e94\u7528\u5de5\u4f5c\u53f0\u7684\u76f8\u5173\u529f\u80fd\uff0c\u800c\u65e0\u6cd5\u4f7f\u7528\u5982\u5fae\u670d\u52a1\u5f15\u64ce\u3001\u4e2d\u95f4\u4ef6\u7b49\u5176\u4ed6\u6a21\u5757\u7684\u80fd\u529b\u3002\u6587\u4ef6\u5939\u89d2\u8272\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u5728\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\u4e2d\u9009\u62e9\u6587\u4ef6\u5939\u540e\u8fdb\u884c\u6388\u6743\u3002 \u8bf7\u6ce8\u610f\uff1a\u5e94\u7528\u5de5\u4f5c\u53f0\u3001\u591a\u4e91\u7f16\u6392\u3001\u955c\u50cf\u4ed3\u5e93\u3001\u5fae\u670d\u52a1\u5f15\u64ce\u3001\u670d\u52a1\u7f51\u683c\u548c\u4e2d\u95f4\u4ef6\u5747\u4f9d\u8d56\u4e8e\u5de5\u4f5c\u7a7a\u95f4\uff0c\u56e0\u6b64\u5728\u521b\u5efa\u6587\u4ef6\u5939\u89d2\u8272\u65f6\u5927\u90e8\u5206\u573a\u666f\u4e0b\u9700\u8981\u7528\u5230\u5de5\u4f5c\u7a7a\u95f4\uff0c\u8bf7\u6ce8\u610f\u5728\u5168\u5c40\u7ba1\u7406-\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u52fe\u9009\u3002

  1. \u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u89d2\u8272 \uff0c\u70b9\u51fb \u521b\u5efa\u81ea\u5b9a\u4e49\u89d2\u8272 \u3002

  2. \u8f93\u5165\u540d\u79f0\u3001\u63cf\u8ff0\uff0c\u9009\u62e9 \u6587\u4ef6\u5939\u89d2\u8272 \uff0c\u52fe\u9009\u89d2\u8272\u6743\u9650\u540e\u70b9\u51fb \u786e\u5b9a \u3002

  3. \u8fd4\u56de\u89d2\u8272\u5217\u8868\uff0c\u641c\u7d22\u521a\u521b\u5efa\u7684\u81ea\u5b9a\u4e49\u89d2\u8272\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u590d\u5236\u3001\u7f16\u8f91\u548c\u5220\u9664\u7b49\u64cd\u4f5c\u3002

  4. \u6587\u4ef6\u5939\u89d2\u8272\u521b\u5efa\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u53bb\u6587\u4ef6\u5939\u6388\u6743\uff0c\u8bbe\u5b9a\u8fd9\u4e2a\u89d2\u8272\u53ef\u4ee5\u7ba1\u7406\u54ea\u4e9b\u6587\u4ef6\u5939\u3002

"},{"location":"admin/ghippo/access-control/docking.html","title":"\u63a5\u5165\u7ba1\u7406","text":"

\u5f53\u4e24\u4e2a\u6216\u4e24\u4e2a\u4ee5\u4e0a\u5e73\u53f0\u76f8\u4e92\u5bf9\u63a5\u6216\u5d4c\u5165\u65f6\uff0c\u901a\u5e38\u9700\u8981\u8fdb\u884c\u7528\u6237\u4f53\u7cfb\u6253\u901a\u3002 \u5728\u7528\u6237\u6253\u901a\u8fc7\u7a0b\u4e2d\uff0c \u63a5\u5165\u7ba1\u7406 \u4e3b\u8981\u63d0\u4f9b SSO \u63a5\u5165\u80fd\u529b\uff0c\u5f53\u60a8\u9700\u8981\u5c06\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f5c\u4e3a\u7528\u6237\u6e90\u63a5\u5165\u5ba2\u6237\u7cfb\u7edf\u65f6\uff0c \u60a8\u53ef\u4ee5\u901a\u8fc7 \u63a5\u5165\u7ba1\u7406 \u521b\u5efa SSO \u63a5\u5165\u6765\u5b9e\u73b0\u3002

"},{"location":"admin/ghippo/access-control/docking.html#sso","title":"\u521b\u5efa SSO \u63a5\u5165","text":"

\u524d\u63d0\uff1a\u62e5\u6709\u5e73\u53f0\u7ba1\u7406\u5458 Admin \u6743\u9650\u6216\u8005\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u7ba1\u7406\u5458 IAM Owner \u6743\u9650\u3002

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u63a5\u5165\u7ba1\u7406 \uff0c\u8fdb\u5165\u63a5\u5165\u7ba1\u7406\u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4e0a\u65b9\u7684 \u521b\u5efa SSO \u63a5\u5165 \u3002

  2. \u5728 \u521b\u5efa SSO \u63a5\u5165 \u9875\u9762\u586b\u5199\u5ba2\u6237\u7aef ID\u3002

    • \u5ba2\u6237\u7aef ID\uff1a\u5bf9\u5e94 client \u540d\u79f0
    • \u5ba2\u6237\u7aef\u8bbf\u95ee\u5730\u5740\uff1a\u7528\u6237\u5b8c\u6210\u767b\u5f55\u5e76\u901a\u8fc7\u8eab\u4efd\u9a8c\u8bc1\u540e\uff0c\u8ba4\u8bc1\u670d\u52a1\u5668\u7528\u6765\u91cd\u5b9a\u5411\u7528\u6237\u7684\u5730\u5740\uff0c\u5373 Callback URL

  3. \u521b\u5efa SSO \u63a5\u5165\u6210\u529f\u540e\uff0c\u5728 \u63a5\u5165\u7ba1\u7406 \u7ba1\u7406\u5217\u8868\uff0c\u70b9\u51fb\u521a\u521b\u5efa\u7684\u5ba2\u6237\u7aef ID \u8fdb\u5165\u8be6\u60c5\uff0c \u590d\u5236\u5ba2\u6237\u7aef ID\u3001\u5bc6\u94a5\u548c\u5355\u70b9\u767b\u5f55 URL \u4fe1\u606f\uff0c\u586b\u5199\u81f3\u5ba2\u6237\u7cfb\u7edf\u5b8c\u6210\u7528\u6237\u4f53\u7cfb\u6253\u901a\u3002

    Note

    realm \u540d\u79f0\u4e3a ghippo\u3002

"},{"location":"admin/ghippo/access-control/global.html","title":"\u7cfb\u7edf\u89d2\u8272","text":""},{"location":"admin/ghippo/access-control/global.html#_2","title":"\u9002\u7528\u573a\u666f","text":"

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u4e86\u9884\u7f6e\u7684\u7cfb\u7edf\u89d2\u8272\uff0c\u5e2e\u52a9\u7528\u6237\u7b80\u5316\u89d2\u8272\u6743\u9650\u7684\u4f7f\u7528\u6b65\u9aa4\u3002

Note

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u4e86\u4e09\u79cd\u7c7b\u578b\u7684\u7cfb\u7edf\u89d2\u8272\uff0c\u5206\u522b\u4e3a\u5e73\u53f0\u89d2\u8272\u3001\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u548c\u6587\u4ef6\u5939\u89d2\u8272\u3002

- \u5e73\u53f0\u89d2\u8272\uff1a\u5bf9\u5e73\u53f0\u4e0a\u6240\u6709\u76f8\u5173\u8d44\u6e90\u5177\u6709\u76f8\u5e94\u6743\u9650\uff0c\u8bf7\u524d\u5f80\u7528\u6237/\u7528\u6237\u7ec4\u6388\u6743\u3002\n- \u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\uff1a\u5bf9\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5177\u6709\u76f8\u5e94\u6743\u9650\uff0c\u8bf7\u524d\u5f80\u5177\u4f53\u5de5\u4f5c\u7a7a\u95f4\u6388\u6743\u3002\n- \u6587\u4ef6\u5939\u89d2\u8272\uff1a\u5bf9\u67d0\u4e2a\u6587\u4ef6\u5939\u3001\u5b50\u6587\u4ef6\u5939\u53ca\u5176\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u7684\u8d44\u6e90\u5177\u6709\u76f8\u5e94\u6743\u9650\uff0c\u8bf7\u524d\u5f80\u5177\u4f53\u6587\u4ef6\u5939\u6388\u6743\u3002\n
"},{"location":"admin/ghippo/access-control/global.html#_3","title":"\u5e73\u53f0\u89d2\u8272","text":"

\u5728\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u4e2d\u9884\u5b9a\u4e49\u4e86 5 \u4e2a\u7cfb\u7edf\u89d2\u8272\uff0c\u5206\u522b\u662f\uff1aAdmin\u3001IAM Owner\u3001Audit Owner\u3001 Kpanda Owner \u548c Workspace and Folder Owner \u3002\u8fd9 5 \u4e2a\u89d2\u8272\u7531\u7cfb\u7edf\u521b\u5efa\uff0c\u7528\u6237\u53ea\u80fd\u4f7f\u7528\u4e0d\u80fd\u4fee\u6539\u3002\u89d2\u8272\u5bf9\u5e94\u7684\u6743\u9650\u5982\u4e0b\uff1a

\u89d2\u8272\u540d\u79f0 \u89d2\u8272\u7c7b\u578b \u6240\u5c5e\u6a21\u5757 \u89d2\u8272\u6743\u9650 Admin \u7cfb\u7edf\u89d2\u8272 \u5168\u90e8 \u5e73\u53f0\u7ba1\u7406\u5458\uff0c\u7ba1\u7406\u6240\u6709\u5e73\u53f0\u8d44\u6e90\uff0c\u4ee3\u8868\u5e73\u53f0\u7684\u6700\u9ad8\u6743\u9650 IAM Owner \u7cfb\u7edf\u89d2\u8272 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u7684\u7ba1\u7406\u5458\uff0c\u62e5\u6709\u8be5\u670d\u52a1\u4e0b\u7684\u6240\u6709\u6743\u9650\uff0c\u5982\u7ba1\u7406\u7528\u6237/\u7528\u6237\u7ec4\u53ca\u6388\u6743 Audit Owner \u7cfb\u7edf\u89d2\u8272 \u5ba1\u8ba1\u65e5\u5fd7 \u5ba1\u8ba1\u65e5\u5fd7\u7684\u7ba1\u7406\u5458\uff0c\u62e5\u6709\u8be5\u670d\u52a1\u4e0b\u7684\u6240\u6709\u6743\u9650\uff0c\u5982\u8bbe\u7f6e\u5ba1\u8ba1\u65e5\u5fd7\u7b56\u7565\uff0c\u5bfc\u51fa\u5ba1\u8ba1\u65e5\u5fd7 Kpanda Owner \u7cfb\u7edf\u89d2\u8272 \u5bb9\u5668\u7ba1\u7406 \u5bb9\u5668\u7ba1\u7406\u7684\u7ba1\u7406\u5458\uff0c\u62e5\u6709\u8be5\u670d\u52a1\u4e0b\u7684\u6240\u6709\u6743\u9650\uff0c\u5982\u521b\u5efa/\u63a5\u5165\u96c6\u7fa4\uff0c\u90e8\u7f72\u5e94\u7528\uff0c\u7ed9\u7528\u6237/\u7528\u6237\u7ec4\u6388\u4e88\u96c6\u7fa4/\u547d\u540d\u7a7a\u95f4\u76f8\u5173\u7684\u6743\u9650 Workspace and Folder Owner \u7cfb\u7edf\u89d2\u8272 \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\u7ba1\u7406\u5458\uff0c\u62e5\u6709\u8be5\u670d\u52a1\u4e0b\u7684\u6240\u6709\u6743\u9650\uff0c\u5982\u521b\u5efa\u6587\u4ef6\u5939/\u5de5\u4f5c\u7a7a\u95f4\uff0c\u7ed9\u7528\u6237/\u7528\u6237\u7ec4\u6388\u6743\u6587\u4ef6\u5939/\u5de5\u4f5c\u7a7a\u95f4\u7684\u76f8\u5173\u6743\u9650\uff0c\u5728\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u4f7f\u7528\u5e94\u7528\u5de5\u4f5c\u53f0\u3001\u5fae\u670d\u52a1\u5f15\u64ce\u7b49\u529f\u80fd"},{"location":"admin/ghippo/access-control/global.html#_4","title":"\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272","text":"

\u5728\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u4e2d\u9884\u5b9a\u4e49\u4e86 3 \u4e2a\u7cfb\u7edf\u89d2\u8272\uff0c\u5206\u522b\u662f\uff1aWorkspace Admin\u3001Workspace Editor\u3001Workspace Viewer\u3002\u8fd9 3 \u4e2a\u89d2\u8272\u7531\u7cfb\u7edf\u521b\u5efa\uff0c\u7528\u6237\u53ea\u80fd\u4f7f\u7528\u4e0d\u80fd\u4fee\u6539\u3002\u89d2\u8272\u5bf9\u5e94\u7684\u6743\u9650\u5982\u4e0b\uff1a

\u89d2\u8272\u540d\u79f0 \u89d2\u8272\u7c7b\u578b \u6240\u5c5e\u6a21\u5757 \u89d2\u8272\u6743\u9650 Workspace Admin \u7cfb\u7edf\u89d2\u8272 \u5de5\u4f5c\u7a7a\u95f4 \u5de5\u4f5c\u7a7a\u95f4\u7684\u7ba1\u7406\u6743\u9650 Workspace Editor \u7cfb\u7edf\u89d2\u8272 \u5de5\u4f5c\u7a7a\u95f4 \u5de5\u4f5c\u7a7a\u95f4\u7684\u7f16\u8f91\u6743\u9650 Workspace Viewer \u7cfb\u7edf\u89d2\u8272 \u5de5\u4f5c\u7a7a\u95f4 \u5de5\u4f5c\u7a7a\u95f4\u7684\u53ea\u8bfb\u6743\u9650"},{"location":"admin/ghippo/access-control/global.html#_5","title":"\u6587\u4ef6\u5939\u89d2\u8272","text":"

\u5728\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u4e2d\u9884\u5b9a\u4e49\u4e86 3 \u4e2a\u7cfb\u7edf\u89d2\u8272\uff0c\u5206\u522b\u662f\uff1aFolder Admin\u3001Folder Editor\u3001Folder Viewer\u3002\u8fd9 3 \u4e2a\u89d2\u8272\u7531\u7cfb\u7edf\u521b\u5efa\uff0c\u7528\u6237\u53ea\u80fd\u4f7f\u7528\u4e0d\u80fd\u4fee\u6539\u3002\u89d2\u8272\u5bf9\u5e94\u7684\u6743\u9650\u5982\u4e0b\uff1a

\u89d2\u8272\u540d\u79f0 \u89d2\u8272\u7c7b\u578b \u6240\u5c5e\u6a21\u5757 \u89d2\u8272\u6743\u9650 Folder Admin \u7cfb\u7edf\u89d2\u8272 \u5de5\u4f5c\u7a7a\u95f4 \u6587\u4ef6\u5939\u53ca\u5176\u4e0b\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u7684\u7ba1\u7406\u6743\u9650 Folder Editor \u7cfb\u7edf\u89d2\u8272 \u5de5\u4f5c\u7a7a\u95f4 \u6587\u4ef6\u5939\u53ca\u5176\u4e0b\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u7684\u7f16\u8f91\u6743\u9650 Folder Viewer \u7cfb\u7edf\u89d2\u8272 \u5de5\u4f5c\u7a7a\u95f4 \u6587\u4ef6\u5939\u53ca\u5176\u4e0b\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u7684\u53ea\u8bfb\u6743\u9650"},{"location":"admin/ghippo/access-control/group.html","title":"\u7528\u6237\u7ec4","text":"

\u7528\u6237\u7ec4\u662f\u7528\u6237\u7684\u96c6\u5408\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u52a0\u5165\u7528\u6237\u7ec4\uff0c\u7ee7\u627f\u7528\u6237\u7ec4\u7684\u89d2\u8272\u6743\u9650\u3002\u901a\u8fc7\u7528\u6237\u7ec4\u6279\u91cf\u5730\u7ed9\u7528\u6237\u8fdb\u884c\u6388\u6743\uff0c\u53ef\u4ee5\u66f4\u597d\u5730\u7ba1\u7406\u7528\u6237\u53ca\u5176\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/group.html#_2","title":"\u9002\u7528\u573a\u666f","text":"

\u5f53\u7528\u6237\u6743\u9650\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u53ea\u9700\u5c06\u5176\u79fb\u5230\u76f8\u5e94\u7684\u7528\u6237\u7ec4\u4e0b\uff0c\u4e0d\u4f1a\u5bf9\u5176\u4ed6\u7528\u6237\u4ea7\u751f\u5f71\u54cd\u3002

\u5f53\u7528\u6237\u7ec4\u7684\u6743\u9650\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u53ea\u9700\u4fee\u6539\u7528\u6237\u7ec4\u7684\u89d2\u8272\u6743\u9650\uff0c\u5373\u53ef\u5e94\u7528\u5230\u7ec4\u5185\u7684\u6240\u6709\u7528\u6237\u3002

"},{"location":"admin/ghippo/access-control/group.html#_3","title":"\u521b\u5efa\u7528\u6237\u7ec4","text":"

\u524d\u63d0\uff1a\u62e5\u6709\u5e73\u53f0\u7ba1\u7406\u5458 Admin \u6743\u9650\u6216\u8005\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u7ba1\u7406\u5458 IAM Owner \u6743\u9650\u3002

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237\u7ec4 \uff0c\u8fdb\u5165\u7528\u6237\u7ec4\u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4e0a\u65b9\u7684 \u521b\u5efa\u7528\u6237\u7ec4 \u3002

  2. \u5728 \u521b\u5efa\u7528\u6237\u7ec4 \u9875\u9762\u586b\u5199\u7528\u6237\u7ec4\u4fe1\u606f\u3002

  3. \u70b9\u51fb \u786e\u5b9a \uff0c\u521b\u5efa\u7528\u6237\u7ec4\u6210\u529f\uff0c\u8fd4\u56de\u7528\u6237\u7ec4\u5217\u8868\u9875\u9762\u3002\u5217\u8868\u4e2d\u7684\u7b2c\u4e00\u884c\u662f\u65b0\u521b\u5efa\u7684\u7528\u6237\u7ec4\u3002

"},{"location":"admin/ghippo/access-control/group.html#_4","title":"\u4e3a\u7528\u6237\u7ec4\u6388\u6743","text":"

\u524d\u63d0\uff1a\u8be5\u7528\u6237\u7ec4\u5df2\u5b58\u5728\u3002

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237\u7ec4 \uff0c\u8fdb\u5165\u7528\u6237\u7ec4\u5217\u8868\uff0c\u70b9\u51fb ... -> \u6388\u6743 \u3002

  2. \u5728 \u6388\u6743 \u9875\u9762\u52fe\u9009\u9700\u8981\u7684\u89d2\u8272\u6743\u9650\uff08\u53ef\u591a\u9009\uff09\u3002

  3. \u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u4e3a\u7528\u6237\u7ec4\u7684\u6388\u6743\u3002\u81ea\u52a8\u8fd4\u56de\u7528\u6237\u7ec4\u5217\u8868\uff0c\u70b9\u51fb\u67d0\u4e2a\u7528\u6237\u7ec4\uff0c\u53ef\u4ee5\u67e5\u770b\u7528\u6237\u7ec4\u88ab\u6388\u4e88\u7684\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/group.html#_5","title":"\u7ed9\u7528\u6237\u7ec4\u6dfb\u52a0\u7528\u6237","text":"
  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237\u7ec4 \u8fdb\u5165\u7528\u6237\u7ec4\u5217\u8868\uff0c\u5728\u67d0\u4e2a\u7528\u6237\u7ec4\u53f3\u4fa7\uff0c\u70b9\u51fb ... -> \u6dfb\u52a0\u7528\u6237 \u3002

  2. \u5728 \u6dfb\u52a0\u7528\u6237 \u9875\u9762\u70b9\u9009\u9700\u8981\u6dfb\u52a0\u7684\u7528\u6237\uff08\u53ef\u591a\u9009\uff09\u3002\u82e5\u6ca1\u6709\u53ef\u9009\u7684\u7528\u6237\uff0c\u70b9\u51fb \u524d\u5f80\u521b\u5efa\u65b0\u7528\u6237 \uff0c\u5148\u524d\u5f80\u521b\u5efa\u7528\u6237\uff0c\u518d\u8fd4\u56de\u8be5\u9875\u9762\u70b9\u51fb \u5237\u65b0 \u6309\u94ae\uff0c\u663e\u793a\u521a\u521b\u5efa\u7684\u7528\u6237\u3002

  3. \u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u7ed9\u7528\u6237\u7ec4\u6dfb\u52a0\u7528\u6237\u3002

Note

\u7528\u6237\u7ec4\u4e2d\u7684\u7528\u6237\u4f1a\u7ee7\u627f\u7528\u6237\u7ec4\u7684\u6743\u9650\uff1b\u53ef\u4ee5\u5728\u7528\u6237\u7ec4\u8be6\u60c5\u4e2d\u67e5\u770b\u52a0\u5165\u8be5\u7ec4\u7684\u7528\u6237\u3002

"},{"location":"admin/ghippo/access-control/group.html#_6","title":"\u5220\u9664\u7528\u6237\u7ec4","text":"

\u8bf4\u660e\uff1a\u5220\u9664\u7528\u6237\u7ec4\uff0c\u4e0d\u4f1a\u5220\u9664\u7ec4\u5185\u7684\u7528\u6237\uff0c\u4f46\u7ec4\u5185\u7528\u6237\u5c06\u65e0\u6cd5\u518d\u7ee7\u627f\u8be5\u7ec4\u7684\u6743\u9650

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237\u7ec4 \u8fdb\u5165\u7528\u6237\u7ec4\u5217\u8868\uff0c\u5728\u67d0\u4e2a\u7528\u6237\u7ec4\u53f3\u4fa7\uff0c\u70b9\u51fb ... -> \u5220\u9664 \u3002

  2. \u70b9\u51fb \u79fb\u9664 \u5220\u9664\u7528\u6237\u7ec4\u3002

  3. \u8fd4\u56de\u7528\u6237\u7ec4\u5217\u8868\uff0c\u5c4f\u5e55\u4e0a\u65b9\u5c06\u63d0\u793a\u5220\u9664\u6210\u529f\u3002

Note

\u8bf4\u660e\uff1a\u5220\u9664\u7528\u6237\u7ec4\uff0c\u4e0d\u4f1a\u5220\u9664\u7ec4\u5185\u7684\u7528\u6237\uff0c\u4f46\u7ec4\u5185\u7528\u6237\u5c06\u65e0\u6cd5\u518d\u7ee7\u627f\u8be5\u7ec4\u7684\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/iam.html","title":"\u4ec0\u4e48\u662f\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236","text":"

IAM\uff08Identity and Access Management\uff0c\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\uff09\u662f\u5168\u5c40\u7ba1\u7406\u7684\u4e00\u4e2a\u91cd\u8981\u6a21\u5757\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u6a21\u5757\u521b\u5efa\u3001\u7ba1\u7406\u548c\u9500\u6bc1\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\uff0c\u5e76\u4f7f\u7528\u7cfb\u7edf\u89d2\u8272\u548c\u81ea\u5b9a\u4e49\u89d2\u8272\u63a7\u5236\u5176\u4ed6\u7528\u6237\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/iam.html#_2","title":"\u4f18\u52bf","text":"
  • \u7b80\u6d01\u6d41\u7545

    \u4f01\u4e1a\u5185\u90e8\u7684\u7ed3\u6784\u548c\u89d2\u8272\u53ef\u80fd\u975e\u5e38\u590d\u6742\uff0c\u9879\u76ee\u3001\u5de5\u4f5c\u5c0f\u7ec4\u53ca\u6388\u6743\u7684\u7ba1\u7406\u90fd\u5728\u4e0d\u65ad\u5730\u53d8\u5316\u3002\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u91c7\u7528\u6e05\u6670\u6574\u6d01\u7684\u9875\u9762\uff0c\u6253\u901a\u7528\u6237\u3001\u7528\u6237\u7ec4\u3001\u89d2\u8272\u4e4b\u95f4\u7684\u6388\u6743\u5173\u7cfb\uff0c\u4ee5\u6700\u77ed\u94fe\u8def\u5b9e\u73b0\u5bf9\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u7684\u6388\u6743\u3002

  • \u9002\u5f53\u7684\u89d2\u8272

    \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u4e3a\u6bcf\u4e2a\u5b50\u6a21\u5757\u9884\u5b9a\u4e49\u4e86\u4e00\u4e2a\u7ba1\u7406\u5458\u89d2\u8272\uff0c\u65e0\u9700\u7528\u6237\u7ef4\u62a4\uff0c\u60a8\u53ef\u4ee5\u76f4\u63a5\u5c06\u5e73\u53f0\u9884\u5b9a\u4e49\u7684\u7cfb\u7edf\u89d2\u8272\u6388\u6743\u7ed9\u7528\u6237\uff0c\u5b9e\u73b0\u5e73\u53f0\u7684\u6a21\u5757\u5316\u7ba1\u7406\uff08\u7ec6\u7c92\u5ea6\u6743\u9650\u8bf7\u53c2\u9605\u6743\u9650\u7ba1\u7406\u3002

  • \u4f01\u4e1a\u7ea7\u8bbf\u95ee\u63a7\u5236

    \u5f53\u60a8\u5e0c\u671b\u672c\u4f01\u4e1a\u5458\u5de5\u53ef\u4ee5\u4f7f\u7528\u4f01\u4e1a\u5185\u90e8\u7684\u8ba4\u8bc1\u7cfb\u7edf\u767b\u5f55\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\uff0c\u800c\u4e0d\u9700\u8981\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u521b\u5efa\u5bf9\u5e94\u7684\u7528\u6237\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u7684\u8eab\u4efd\u63d0\u4f9b\u5546\u529f\u80fd\uff0c\u5efa\u7acb\u60a8\u6240\u5728\u4f01\u4e1a\u4e0e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u4fe1\u4efb\u5173\u7cfb\uff0c\u901a\u8fc7\u8054\u5408\u8ba4\u8bc1\u4f7f\u5458\u5de5\u4f7f\u7528\u4f01\u4e1a\u5df2\u6709\u8d26\u53f7\u76f4\u63a5\u767b\u5f55\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5b9e\u73b0\u5355\u70b9\u767b\u5f55\u3002

"},{"location":"admin/ghippo/access-control/iam.html#_3","title":"\u4f7f\u7528\u6d41\u7a0b","text":"

\u6709\u5173\u8bbf\u95ee\u63a7\u5236\u7684\u5e38\u89c4\u6d41\u7a0b\u4e3a\uff1a

graph TD\n    login[\u767b\u5f55] --> user[\u521b\u5efa\u7528\u6237]\n    user --> auth[\u4e3a\u7528\u6237\u6388\u6743]\n    auth --> group[\u521b\u5efa\u7528\u6237\u7ec4]\n    group --> role[\u521b\u5efa\u81ea\u5b9a\u4e49\u89d2\u8272]\n    role --> id[\u521b\u5efa\u8eab\u4efd\u63d0\u4f9b\u5546]\n\n classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;\n classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;\n classDef cluster fill:#fff,stroke:#bbb,stroke-width:1px,color:#326ce5;\n class login,user,auth,group,role,id cluster;\n\nclick login \"https://docs.daocloud.io/ghippo/install/login.html\"\nclick user \"https://docs.daocloud.io/ghippo/access-control/user.html\"\nclick auth \"https://docs.daocloud.io/ghippo/access-control/role.html\"\nclick group \"https://docs.daocloud.io/ghippo/access-control/group.html\"\nclick role \"https://docs.daocloud.io/ghippo/access-control/custom-role.html\"\nclick id \"https://docs.daocloud.io/ghippo/access-control/idprovider.html\"
"},{"location":"admin/ghippo/access-control/idprovider.html","title":"\u8eab\u4efd\u63d0\u4f9b\u5546","text":"

\u5168\u5c40\u7ba1\u7406\u652f\u6301\u57fa\u4e8e LDAP \u548c OIDC \u534f\u8bae\u7684\u5355\u70b9\u767b\u5f55\uff0c\u5982\u679c\u60a8\u7684\u4f01\u4e1a\u6216\u7ec4\u7ec7\u5df2\u6709\u81ea\u5df1\u7684\u8d26\u53f7\u4f53\u7cfb\uff0c\u540c\u65f6\u5e0c\u671b\u7ba1\u7406\u7ec4\u7ec7\u5185\u7684\u6210\u5458\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8d44\u6e90\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u5168\u5c40\u7ba1\u7406\u63d0\u4f9b\u7684\u8eab\u4efd\u63d0\u4f9b\u5546\u529f\u80fd\uff0c\u800c\u4e0d\u5fc5\u5728\u60a8\u7684\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4e3a\u6bcf\u4e00\u4f4d\u7ec4\u7ec7\u6210\u5458\u521b\u5efa\u7528\u6237\u540d/\u5bc6\u7801\u3002\u60a8\u53ef\u4ee5\u5411\u8fd9\u4e9b\u5916\u90e8\u7528\u6237\u8eab\u4efd\u6388\u4e88\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8d44\u6e90\u7684\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/idprovider.html#_2","title":"\u57fa\u672c\u6982\u5ff5","text":"
  • \u8eab\u4efd\u63d0\u4f9b\u5546\uff08Identity Provider\uff0c\u7b80\u79f0 IdP\uff09

    \u8d1f\u8d23\u6536\u96c6\u548c\u5b58\u50a8\u7528\u6237\u8eab\u4efd\u4fe1\u606f\u3001\u7528\u6237\u540d\u3001\u5bc6\u7801\u7b49\uff0c\u5728\u7528\u6237\u767b\u5f55\u65f6\u8d1f\u8d23\u8ba4\u8bc1\u7528\u6237\u7684\u670d\u52a1\u3002\u5728\u4f01\u4e1a\u4e0e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u8eab\u4efd\u63d0\u4f9b\u5546\u6307\u4f01\u4e1a\u81ea\u8eab\u7684\u8eab\u4efd\u63d0\u4f9b\u5546\u3002

  • \u670d\u52a1\u63d0\u4f9b\u5546\uff08Service Provider\uff0c\u7b80\u79f0 SP\uff09

    \u670d\u52a1\u63d0\u4f9b\u5546\u901a\u8fc7\u4e0e\u8eab\u4efd\u63d0\u4f9b\u5546 IdP \u5efa\u7acb\u4fe1\u4efb\u5173\u7cfb\uff0c\u4f7f\u7528 IDP \u63d0\u4f9b\u7684\u7528\u6237\u4fe1\u606f\uff0c\u4e3a\u7528\u6237\u63d0\u4f9b\u5177\u4f53\u7684\u670d\u52a1\u3002\u5728\u4f01\u4e1a\u4e0e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u670d\u52a1\u63d0\u4f9b\u5546\u6307 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u3002

  • LDAP

    LDAP \u6307\u8f7b\u578b\u76ee\u5f55\u8bbf\u95ee\u534f\u8bae\uff08Lightweight Directory Access Protocol\uff09\uff0c\u5e38\u7528\u4e8e\u5355\u70b9\u767b\u5f55\uff0c\u5373\u7528\u6237\u53ef\u4ee5\u5728\u591a\u4e2a\u670d\u52a1\u4e2d\u4f7f\u7528\u4e00\u4e2a\u8d26\u53f7\u5bc6\u7801\u8fdb\u884c\u767b\u5f55\u3002\u5168\u5c40\u7ba1\u7406\u652f\u6301 LDAP \u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\uff0c\u56e0\u6b64\u4e0e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u901a\u8fc7 LDAP \u534f\u8bae\u5efa\u7acb\u8eab\u4efd\u8ba4\u8bc1\u7684\u4f01\u4e1a IdP \u5fc5\u987b\u652f\u6301 LDAP \u534f\u8bae\u3002\u5173\u4e8e LDAP \u7684\u8be6\u7ec6\u63cf\u8ff0\u8bf7\u53c2\u89c1\uff1a\u6b22\u8fce\u4f7f\u7528 LDAP\u3002

  • OIDC

    OIDC \u662f OpenID Connect \u7684\u7b80\u79f0\uff0c\u662f\u4e00\u4e2a\u57fa\u4e8e OAuth 2.0 \u534f\u8bae\u7684\u8eab\u4efd\u8ba4\u8bc1\u6807\u51c6\u534f\u8bae\u3002\u5168\u5c40\u7ba1\u7406\u652f\u6301\u4f7f\u7528 OIDC \u534f\u8bae\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\uff0c\u56e0\u6b64\u4e0e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u901a\u8fc7 OIDC \u534f\u8bae\u5efa\u7acb\u8eab\u4efd\u8ba4\u8bc1\u7684\u4f01\u4e1a IdP \u5fc5\u987b\u652f\u6301 OIDC \u534f\u8bae\u3002\u5173\u4e8e OIDC \u7684\u8be6\u7ec6\u63cf\u8ff0\u8bf7\u53c2\u89c1\uff1a\u6b22\u8fce\u4f7f\u7528 OpenID Connect\u3002

  • OAuth 2.0

    OAuth 2.0 \u662f Open Authorization 2.0 \u7684\u7b80\u79f0\uff0c\u662f\u4e00\u79cd\u5f00\u653e\u6388\u6743\u534f\u8bae\uff0c\u6388\u6743\u6846\u67b6\u652f\u6301\u7b2c\u4e09\u65b9\u5e94\u7528\u7a0b\u5e8f\u4ee5\u81ea\u5df1\u7684\u540d\u4e49\u83b7\u53d6\u8bbf\u95ee\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/idprovider.html#_3","title":"\u529f\u80fd\u7279\u6027","text":"
  • \u7ba1\u7406\u5458\u65e0\u9700\u91cd\u65b0\u521b\u5efa\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7528\u6237

    \u4f7f\u7528\u8eab\u4efd\u63d0\u4f9b\u5546\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u524d\uff0c\u7ba1\u7406\u5458\u9700\u8981\u5728\u4f01\u4e1a\u7ba1\u7406\u7cfb\u7edf\u548c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u5206\u522b\u4e3a\u7528\u6237\u521b\u5efa\u8d26\u53f7\uff1b\u4f7f\u7528\u8eab\u4efd\u63d0\u4f9b\u5546\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u540e\uff0c\u4f01\u4e1a\u7ba1\u7406\u5458\u53ea\u9700\u8981\u5728\u4f01\u4e1a\u7ba1\u7406\u7cfb\u7edf\u4e2d\u4e3a\u7528\u6237\u521b\u5efa\u8d26\u53f7\uff0c\u7528\u6237\u5373\u53ef\u540c\u65f6\u8bbf\u95ee\u4e24\u4e2a\u7cfb\u7edf\uff0c\u964d\u4f4e\u4e86\u4eba\u5458\u7ba1\u7406\u6210\u672c\u3002

  • \u7528\u6237\u65e0\u9700\u8bb0\u4f4f\u4e24\u5957\u5e73\u53f0\u8d26\u53f7

    \u4f7f\u7528\u8eab\u4efd\u63d0\u4f9b\u5546\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u524d\uff0c\u7528\u6237\u8bbf\u95ee\u4f01\u4e1a\u7ba1\u7406\u7cfb\u7edf\u548c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9700\u8981\u4f7f\u7528\u4e24\u4e2a\u7cfb\u7edf\u7684\u8d26\u53f7\u767b\u5f55\uff1b\u4f7f\u7528\u8eab\u4efd\u63d0\u4f9b\u5546\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u540e\uff0c\u7528\u6237\u5728\u672c\u4f01\u4e1a\u7ba1\u7406\u7cfb\u7edf\u4e2d\u767b\u5f55\u5373\u53ef\u8bbf\u95ee\u4e24\u4e2a\u7cfb\u7edf\u3002

"},{"location":"admin/ghippo/access-control/ldap.html","title":"LDAP","text":"

LDAP \u82f1\u6587\u5168\u79f0\u4e3a Lightweight Directory Access Protocol\uff0c\u5373\u8f7b\u578b\u76ee\u5f55\u8bbf\u95ee\u534f\u8bae\uff0c\u8fd9\u662f\u4e00\u4e2a\u5f00\u653e\u7684\u3001\u4e2d\u7acb\u7684\u5de5\u4e1a\u6807\u51c6\u5e94\u7528\u534f\u8bae\uff0c \u901a\u8fc7 IP \u534f\u8bae\u63d0\u4f9b\u8bbf\u95ee\u63a7\u5236\u548c\u7ef4\u62a4\u5206\u5e03\u5f0f\u4fe1\u606f\u7684\u76ee\u5f55\u4fe1\u606f\u3002

\u5982\u679c\u60a8\u7684\u4f01\u4e1a\u6216\u7ec4\u7ec7\u5df2\u6709\u81ea\u5df1\u7684\u8d26\u53f7\u4f53\u7cfb\uff0c\u540c\u65f6\u60a8\u7684\u4f01\u4e1a\u7528\u6237\u7ba1\u7406\u7cfb\u7edf\u652f\u6301 LDAP \u534f\u8bae\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\u5168\u5c40\u7ba1\u7406\u63d0\u4f9b\u7684\u57fa\u4e8e LDAP \u534f\u8bae\u7684\u8eab\u4efd\u63d0\u4f9b\u5546\u529f\u80fd\uff0c\u800c\u4e0d\u5fc5\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4e3a\u6bcf\u4e00\u4f4d\u7ec4\u7ec7\u6210\u5458\u521b\u5efa\u7528\u6237\u540d/\u5bc6\u7801\u3002 \u60a8\u53ef\u4ee5\u5411\u8fd9\u4e9b\u5916\u90e8\u7528\u6237\u8eab\u4efd\u6388\u4e88\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8d44\u6e90\u7684\u6743\u9650\u3002

\u5728\u5168\u5c40\u7ba1\u7406\u4e2d\uff0c\u5176\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u4f7f\u7528\u5177\u6709 admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5de6\u4e0b\u89d2\u7684 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \u3002

  2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8eab\u4efd\u63d0\u4f9b\u5546 \uff0c\u70b9\u51fb \u521b\u5efa\u8eab\u4efd\u63d0\u4f9b\u5546 \u6309\u94ae\u3002

  3. \u5728 LDAP \u9875\u7b7e\u4e2d\uff0c\u586b\u5199\u4ee5\u4e0b\u5b57\u6bb5\u540e\u70b9\u51fb \u4fdd\u5b58 \uff0c\u5efa\u7acb\u4e0e\u8eab\u4efd\u63d0\u4f9b\u5546\u7684\u4fe1\u4efb\u5173\u7cfb\u53ca\u7528\u6237\u7684\u6620\u5c04\u5173\u7cfb\u3002

    \u5b57\u6bb5 \u63cf\u8ff0 \u7c7b\u578b\uff08Vendor\uff09 \u652f\u6301 LDAP (Lightweight Directory Access Protocol) \u548c AD (Active Directory) \u8eab\u4efd\u63d0\u4f9b\u5546\u540d\u79f0\uff08UI display name\uff09 \u7528\u4e8e\u533a\u5206\u4e0d\u540c\u7684\u8eab\u4efd\u63d0\u4f9b\u5546 \u670d\u52a1\u5668\uff08Connection URL\uff09 LDAP \u670d\u52a1\u7684\u5730\u5740\u548c\u7aef\u53e3\u53f7\uff0c\u5982 ldap://10.6.165.2:30061 \u7528\u6237\u540d\u79f0\uff08Bind DN\uff09 LDAP \u7ba1\u7406\u5458\u7684 DN\uff0cKeycloak \u5c06\u4f7f\u7528\u8be5 DN \u6765\u8bbf\u95ee LDAP \u670d\u52a1\u5668 \u5bc6\u7801\uff08Bind credentials\uff09 LDAP \u7ba1\u7406\u5458\u7684\u5bc6\u7801\u3002\u8be5\u5b57\u6bb5\u53ef\u4ee5\u4ece vault \u4e2d\u83b7\u53d6\u5176\u503c\uff0c\u4f7f\u7528 ${vault.ID} \u683c\u5f0f\u3002 \u7528\u6237 DN\uff08Users DN\uff09 \u60a8\u7684\u7528\u6237\u6240\u5728\u7684 LDAP \u6811\u7684\u5b8c\u6574 DN\u3002\u6b64 DN \u662f LDAP \u7528\u6237\u7684\u7236\u7ea7\u3002\u4f8b\u5982\uff0c\u5047\u8bbe\u60a8\u7684\u5178\u578b\u7528\u6237\u7684 DN \u7c7b\u4f3c\u4e8e\u201cuid='john',ou=users,dc=example,dc=com\u201d\uff0c\u5219\u53ef\u4ee5\u662f\u201cou=users,dc=example,dc=com\u201d\u3002 \u7528\u6237\u5bf9\u8c61\u7c7b\uff08User object classes\uff09 LDAP \u4e2d\u7528\u6237\u7684 LDAP objectClass \u5c5e\u6027\u7684\u6240\u6709\u503c\uff0c\u4ee5\u9017\u53f7\u5206\u9694\u3002\u4f8b\u5982\uff1a\u201cinetOrgPerson\uff0corganizationalPerson\u201d\u3002\u65b0\u521b\u5efa\u7684 Keycloak \u7528\u6237\u5c06\u4e0e\u6240\u6709\u8fd9\u4e9b\u5bf9\u8c61\u7c7b\u4e00\u8d77\u5199\u5165 L\u200b\u200bDAP\uff0c\u5e76\u4e14\u53ea\u8981\u73b0\u6709 LDAP \u7528\u6237\u8bb0\u5f55\u5305\u542b\u6240\u6709\u8fd9\u4e9b\u5bf9\u8c61\u7c7b\uff0c\u5c31\u4f1a\u627e\u5230\u5b83\u4eec\u3002 \u662f\u5426\u542f\u7528TLS\uff08Enable StartTLS\uff09 \u542f\u7528\u540e\u5c06\u52a0\u5bc6\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0e LDAP \u7684\u8fde\u63a5 \u9884\u8bbe\u6743\u9650\uff08Default permission\uff09 \u540c\u6b65\u540e\u7684\u7528\u6237/\u7528\u6237\u7ec4\u9ed8\u8ba4\u6ca1\u6709\u4efb\u4f55\u6743\u9650 \u5168\u540d\u6620\u5c04\uff08First/Last name mapping\uff09 \u5bf9\u5e94 First name \u548c Last Name \u7528\u6237\u540d\u6620\u5c04\uff08User name mapping\uff09 \u7528\u6237\u552f\u4e00\u7684\u7528\u6237\u540d \u90ae\u7bb1\u6620\u5c04\uff08Mailbox mapping\uff09 \u7528\u6237\u7684\u90ae\u7bb1

    \u9ad8\u7ea7\u914d\u7f6e

    \u5b57\u6bb5 \u63cf\u8ff0 \u662f\u5426\u542f\u7528\uff08Enable or not\uff09 \u9ed8\u8ba4\u542f\u7528\uff0c\u5173\u95ed\u540e\u8be5 LDAP \u914d\u7f6e\u4e0d\u751f\u6548 \u81ea\u52a8\u540c\u6b65\u7528\u6237\uff08Periodic full sync\uff09 \u9ed8\u8ba4\u4e0d\u542f\u7528\uff0c\u542f\u7528\u540e\u53ef\u914d\u7f6e\u540c\u6b65\u5468\u671f\uff0c\u5982\u6bcf\u5c0f\u65f6\u540c\u6b65\u4e00\u6b21 \u6570\u636e\u540c\u6b65\u6a21\u5f0f\uff08Edit mode\uff09 \u53ea\u8bfb\u6a21\u5f0f\u4e0d\u4f1a\u4fee\u6539 LDAP \u7684\u6e90\u6570\u636e\uff1b\u5199\u5165\u6a21\u5f0f\u5728\u5e73\u53f0\u7f16\u8f91\u7528\u6237\u4fe1\u606f\u540e\uff0c\u6570\u636e\u5c06\u540c\u6b65\u56deLDAP \u8bfb\u53d6\u8d85\u65f6\uff08Read timeout\uff09 \u5f53LDAP\u6570\u636e\u91cf\u8f83\u5927\u65f6\uff0c\u8c03\u6574\u8be5\u6570\u503c\u53ef\u4ee5\u6709\u6548\u907f\u514d\u63a5\u53e3\u8d85\u65f6 \u7528\u6237\u5bf9\u8c61\u8fc7\u6ee4\u5668\uff08User LDAP filter\uff09 \u7528\u4e8e\u8fc7\u6ee4\u641c\u7d22\u7528\u6237\u7684\u9644\u52a0 LDAP \u8fc7\u6ee4\u5668\u3002\u5982\u679c\u60a8\u4e0d\u9700\u8981\u989d\u5916\u7684\u8fc7\u6ee4\u5668\uff0c\u8bf7\u5c06\u5176\u7559\u7a7a\u3002\u786e\u4fdd\u5b83\u4ee5\u201c(\u201d\u5f00\u5934\uff0c\u5e76\u4ee5\u201c)\u201d\u7ed3\u5c3e\u3002 \u7528\u6237\u540d\u5c5e\u6027\uff08Username LDAP attribute\uff09 LDAP \u5c5e\u6027\u7684\u540d\u79f0\uff0c\u6620\u5c04\u4e3a Keycloak \u7528\u6237\u540d\u3002\u5bf9\u4e8e\u8bb8\u591a LDAP \u670d\u52a1\u5668\u4f9b\u5e94\u5546\u6765\u8bf4\uff0c\u5b83\u53ef\u4ee5\u662f\u201cuid\u201d\u3002\u5bf9\u4e8e Active Directory\uff0c\u5b83\u53ef\u4ee5\u662f\u201csAMAccountName\u201d\u6216\u201ccn\u201d\u3002\u5e94\u4e3a\u60a8\u60f3\u8981\u4ece LDAP \u5bfc\u5165\u5230 Keycloak \u7684\u6240\u6709 LDAP \u7528\u6237\u8bb0\u5f55\u586b\u5199\u8be5\u5c5e\u6027\u3002 RDN\u5c5e\u6027\uff08RDN LDAP attribute\uff09 LDAP \u5c5e\u6027\u540d\u79f0\uff0c\u4f5c\u4e3a\u5178\u578b\u7528\u6237DN\u7684RDN\uff08\u9876\u7ea7\u5c5e\u6027\uff09\u3002\u901a\u5e38\u5b83\u4e0e\u7528\u6237\u540d LDAP \u5c5e\u6027\u76f8\u540c\uff0c\u4f46\u8fd9\u4e0d\u662f\u5fc5\u9700\u7684\u3002\u4f8b\u5982\uff0c\u5bf9\u4e8e Active Directory\uff0c\u5f53\u7528\u6237\u540d\u5c5e\u6027\u53ef\u80fd\u662f\u201csAMAccountName\u201d\u65f6\uff0c\u901a\u5e38\u4f7f\u7528\u201ccn\u201d\u4f5c\u4e3a RDN \u5c5e\u6027\u3002 UUID\u5c5e\u6027\uff08UUID LDAP attribute\uff09 LDAP \u5c5e\u6027\u7684\u540d\u79f0\uff0c\u7528\u4f5c LDAP \u4e2d\u5bf9\u8c61\u7684\u552f\u4e00\u5bf9\u8c61\u6807\u8bc6\u7b26 (UUID)\u3002\u5bf9\u4e8e\u8bb8\u591a LDAP \u670d\u52a1\u5668\u4f9b\u5e94\u5546\u6765\u8bf4\uff0c\u5b83\u662f\u201centryUUID\u201d\uff1b\u7136\u800c\u6709\u4e9b\u662f\u4e0d\u540c\u7684\u3002\u4f8b\u5982\uff0c\u5bf9\u4e8e Active Directory\uff0c\u5b83\u5e94\u8be5\u662f\u201cobjectGUID\u201d\u3002\u5982\u679c\u60a8\u7684 LDAP \u670d\u52a1\u5668\u4e0d\u652f\u6301 UUID \u6982\u5ff5\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u5728\u6811\u4e2d\u7684 LDAP \u7528\u6237\u4e4b\u95f4\u5e94\u8be5\u552f\u4e00\u7684\u4efb\u4f55\u5176\u4ed6\u5c5e\u6027\u3002\u4f8b\u5982\u201cuid\u201d\u6216\u201centryDN\u201d\u3002
  4. \u5728 \u540c\u6b65\u7528\u6237\u7ec4 \u9875\u7b7e\u4e2d\uff0c\u586b\u5199\u4ee5\u4e0b\u5b57\u6bb5\u914d\u7f6e\u7528\u6237\u7ec4\u7684\u6620\u5c04\u5173\u7cfb\u540e\uff0c\u518d\u6b21\u70b9\u51fb \u4fdd\u5b58 \u3002

    \u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c \u57fa\u51c6 DN \u7528\u6237\u7ec4\u5728 LDAP \u6811\u72b6\u7ed3\u6784\u4e2d\u7684\u4f4d\u7f6e ou=groups,dc=example,dc=org \u7528\u6237\u7ec4\u5bf9\u8c61\u8fc7\u6ee4\u5668 \u7528\u6237\u7ec4\u7684\u5bf9\u8c61\u7c7b\uff0c\u5982\u679c\u9700\u8981\u66f4\u591a\u7c7b\uff0c\u5219\u7528\u9017\u53f7\u5206\u9694\u3002\u5728\u5178\u578b\u7684 LDAP \u90e8\u7f72\u4e2d\uff0c\u901a\u5e38\u662f \u201cgroupOfNames\u201d\uff0c\u7cfb\u7edf\u5df2\u81ea\u52a8\u586b\u5165\uff0c\u5982\u9700\u66f4\u6539\u8bf7\u76f4\u63a5\u7f16\u8f91\u3002* \u8868\u793a\u6240\u6709\u3002 * \u7528\u6237\u7ec4\u540d cn \u4e0d\u53ef\u66f4\u6539

Note

  1. \u5f53\u60a8\u901a\u8fc7 LDAP \u534f\u8bae\u5c06\u4f01\u4e1a\u7528\u6237\u7ba1\u7406\u7cfb\u7edf\u4e0e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5efa\u7acb\u4fe1\u4efb\u5173\u7cfb\u540e\uff0c\u53ef\u901a\u8fc7\u624b\u52a8\u540c\u6b65\u6216\u81ea\u52a8\u540c\u6b65\u7684\u65b9\u5f0f\uff0c\u5c06\u4f01\u4e1a\u7528\u6237\u7ba1\u7406\u7cfb\u7edf\u4e2d\u7684\u7528\u6237\u6216\u7528\u6237\u7ec4\u4e00\u6b21\u6027\u540c\u6b65\u81f3 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u3002
  2. \u540c\u6b65\u540e\u7ba1\u7406\u5458\u53ef\u5bf9\u7528\u6237\u7ec4/\u7528\u6237\u7ec4\u8fdb\u884c\u6279\u91cf\u6388\u6743\uff0c\u540c\u65f6\u7528\u6237\u53ef\u901a\u8fc7\u5728\u4f01\u4e1a\u7528\u6237\u7ba1\u7406\u7cfb\u7edf\u4e2d\u7684\u8d26\u53f7/\u5bc6\u7801\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002
"},{"location":"admin/ghippo/access-control/oauth2.0.html","title":"OAuth 2.0 - \u4f01\u4e1a\u5fae\u4fe1","text":"

\u5982\u679c\u60a8\u7684\u4f01\u4e1a\u6216\u7ec4\u7ec7\u4e2d\u7684\u6210\u5458\u5747\u7ba1\u7406\u5728\u4f01\u4e1a\u5fae\u4fe1\u4e2d\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u5168\u5c40\u7ba1\u7406\u63d0\u4f9b\u7684\u57fa\u4e8e OAuth 2.0 \u534f\u8bae\u7684\u8eab\u4efd\u63d0\u4f9b\u5546\u529f\u80fd\uff0c \u800c\u4e0d\u5fc5\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4e3a\u6bcf\u4e00\u4f4d\u7ec4\u7ec7\u6210\u5458\u521b\u5efa\u7528\u6237\u540d/\u5bc6\u7801\u3002 \u60a8\u53ef\u4ee5\u5411\u8fd9\u4e9b\u5916\u90e8\u7528\u6237\u8eab\u4efd\u6388\u4e88\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8d44\u6e90\u7684\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/oauth2.0.html#_1","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u4f7f\u7528\u5177\u6709 Admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \u3002

  2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 \u8eab\u4efd\u63d0\u4f9b\u5546 \uff0c\u70b9\u51fb OAuth2.0 \u9875\u7b7e\u3002\u586b\u5199\u8868\u5355\u5b57\u6bb5\uff0c\u5efa\u7acb\u4e0e\u4f01\u4e1a\u5fae\u4fe1\u7684\u4fe1\u4efb\u5173\u7cfb\u540e\uff0c\u70b9\u51fb \u4fdd\u5b58 \u3002

"},{"location":"admin/ghippo/access-control/oauth2.0.html#_2","title":"\u4f01\u4e1a\u5fae\u4fe1\u4e2d\u5bf9\u5e94\u7684\u5b57\u6bb5","text":"

Note

\u5bf9\u63a5\u524d\u9700\u8981\u5728\u4f01\u4e1a\u5fae\u4fe1\u7ba1\u7406\u540e\u53f0\u4e2d\u521b\u5efa\u81ea\u5efa\u5e94\u7528\uff0c\u53c2\u9605\u5982\u4f55\u521b\u5efa\u81ea\u5efa\u5e94\u7528\u94fe\u63a5\u3002

\u5b57\u6bb5 \u63cf\u8ff0 \u4f01\u4e1a ID \u4f01\u4e1a\u5fae\u4fe1\u7684 ID Agent ID \u81ea\u5efa\u5e94\u7528\u7684 ID ClientSecret \u81ea\u5efa\u5e94\u7528\u7684 Secret

\u4f01\u4e1a\u5fae\u4fe1 ID\uff1a

Agent ID \u548c ClientSecret\uff1a

"},{"location":"admin/ghippo/access-control/oidc.html","title":"\u521b\u5efa\u548c\u7ba1\u7406 OIDC","text":"

OIDC\uff08OpenID Connect\uff09\u662f\u5efa\u7acb\u5728 OAuth 2.0 \u57fa\u7840\u4e0a\u7684\u4e00\u4e2a\u8eab\u4efd\u5c42\uff0c\u662f\u57fa\u4e8e OAuth2 \u534f\u8bae\u7684\u8eab\u4efd\u8ba4\u8bc1\u6807\u51c6\u534f\u8bae\u3002

\u5982\u679c\u60a8\u7684\u4f01\u4e1a\u6216\u7ec4\u7ec7\u5df2\u6709\u81ea\u5df1\u7684\u8d26\u53f7\u4f53\u7cfb\uff0c\u540c\u65f6\u60a8\u7684\u4f01\u4e1a\u7528\u6237\u7ba1\u7406\u7cfb\u7edf\u652f\u6301 OIDC \u534f\u8bae\uff0c \u53ef\u4ee5\u4f7f\u7528\u5168\u5c40\u7ba1\u7406\u63d0\u4f9b\u7684\u57fa\u4e8e OIDC \u534f\u8bae\u7684\u8eab\u4efd\u63d0\u4f9b\u5546\u529f\u80fd\uff0c\u800c\u4e0d\u5fc5\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4e3a\u6bcf\u4e00\u4f4d\u7ec4\u7ec7\u6210\u5458\u521b\u5efa\u7528\u6237\u540d/\u5bc6\u7801\u3002 \u60a8\u53ef\u4ee5\u5411\u8fd9\u4e9b\u5916\u90e8\u7528\u6237\u8eab\u4efd\u6388\u4e88\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8d44\u6e90\u7684\u6743\u9650\u3002

\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\u3002

  1. \u4f7f\u7528\u5177\u6709 admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \u3002

  2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 \u8eab\u4efd\u63d0\u4f9b\u5546 \uff0c\u70b9\u51fb OIDC \u9875\u7b7e -> \u521b\u5efa\u8eab\u4efd\u63d0\u4f9b\u5546 \u6309\u94ae\u3002

  3. \u586b\u5199\u8868\u5355\u5b57\u6bb5\uff0c\u5efa\u7acb\u4e0e\u8eab\u4efd\u63d0\u4f9b\u5546\u7684\u4fe1\u4efb\u5173\u7cfb\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

    \u5b57\u6bb5 \u63cf\u8ff0 \u63d0\u4f9b\u5546\u540d\u79f0 \u663e\u793a\u5728\u767b\u5f55\u9875\u4e0a\uff0c\u662f\u8eab\u4efd\u63d0\u4f9b\u5546\u7684\u5165\u53e3 \u8ba4\u8bc1\u65b9\u5f0f \u5ba2\u6237\u7aef\u8eab\u4efd\u9a8c\u8bc1\u65b9\u6cd5\u3002\u5982\u679c JWT \u4f7f\u7528\u79c1\u94a5\u7b7e\u540d\uff0c\u8bf7\u4e0b\u62c9\u9009\u62e9 JWT signed with private key \u3002\u5177\u4f53\u53c2\u9605 Client Authentication\u3002 \u5ba2\u6237\u7aef ID \u5ba2\u6237\u7aef\u7684 ID \u5ba2\u6237\u7aef\u5bc6\u94a5 \u5ba2\u6237\u7aef\u5bc6\u7801 \u5ba2\u6237\u7aef URL \u53ef\u901a\u8fc7\u8eab\u4efd\u63d0\u4f9b\u5546 well-known \u63a5\u53e3\u4e00\u952e\u83b7\u53d6\u767b\u5f55 URL\u3001Token URL\u3001\u7528\u6237\u4fe1\u606f URL \u548c\u767b\u51fa URL \u81ea\u52a8\u5173\u8054 \u5f00\u542f\u540e\u5f53\u8eab\u4efd\u63d0\u4f9b\u5546\u7528\u6237\u540d/\u90ae\u7bb1\u4e0e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7528\u6237\u540d/\u90ae\u7bb1\u91cd\u590d\u65f6\u5c06\u81ea\u52a8\u4f7f\u4e8c\u8005\u5173\u8054

Note

  1. \u5f53\u7528\u6237\u901a\u8fc7\u4f01\u4e1a\u7528\u6237\u7ba1\u7406\u7cfb\u7edf\u5b8c\u6210\u7b2c\u4e00\u6b21\u767b\u5f55\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u540e\uff0c\u7528\u6237\u4fe1\u606f\u624d\u4f1a\u88ab\u540c\u6b65\u81f3\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u7528\u6237\u5217\u8868 \u3002
  2. \u521d\u6b21\u767b\u5f55\u7684\u7528\u6237\u4e0d\u4f1a\u88ab\u8d4b\u4e88\u4efb\u4f55\u9ed8\u8ba4\u6743\u9650\uff0c\u9700\u8981\u6709\u7ba1\u7406\u5458\u7ed9\u5176\u8d4b\u6743\uff08\u7ba1\u7406\u5458\u53ef\u4ee5\u662f\u5e73\u53f0\u7ba1\u7406\u5458\u3001\u5b50\u6a21\u5757\u7ba1\u7406\u5458\u6216\u8d44\u6e90\u7ba1\u7406\u5458\uff09\u3002
  3. \u53c2\u8003 Azure OpenID Connect (OIDC) \u63a5\u5165\u6d41\u7a0b\u3002
"},{"location":"admin/ghippo/access-control/oidc.html#_1","title":"\u7528\u6237\u8eab\u4efd\u8ba4\u8bc1\u4ea4\u4e92\u6d41\u7a0b","text":"

\u7528\u6237\u8eab\u4efd\u8ba4\u8bc1\u7684\u4ea4\u4e92\u6d41\u7a0b\u4e3a\uff1a

  1. \u4f7f\u7528\u6d4f\u89c8\u5668\u53d1\u8d77\u5355\u70b9\u767b\u5f55\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u8bf7\u6c42\u3002 1.\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u6839\u636e\u767b\u5f55\u94fe\u63a5\u4e2d\u643a\u5e26\u7684\u4fe1\u606f\uff0c\u67e5\u627e \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u8eab\u4efd\u63d0\u4f9b\u5546 \u4e2d\u5bf9\u5e94\u7684\u914d\u7f6e\u4fe1\u606f\uff0c \u6784\u5efa OIDC \u6388\u6743 Request\uff0c\u53d1\u9001\u7ed9\u6d4f\u89c8\u5668\u3002
  2. \u6d4f\u89c8\u5668\u6536\u5230\u8bf7\u6c42\u540e\uff0c\u8f6c\u53d1 OIDC \u6388\u6743 Request \u7ed9\u4f01\u4e1a IdP\u3002
  3. \u5728\u4f01\u4e1a IdP \u7684\u767b\u5f55\u9875\u9762\u4e2d\u8f93\u5165\u7528\u6237\u540d\u548c\u5bc6\u7801\uff0c\u4f01\u4e1a IdP \u5bf9\u63d0\u4f9b\u7684\u8eab\u4efd\u4fe1\u606f\u8fdb\u884c\u9a8c\u8bc1\uff0c\u5e76\u6784\u5efa\u643a\u5e26\u7528\u6237\u4fe1\u606f\u7684 ID Token\uff0c\u5411\u6d4f\u89c8\u5668\u53d1\u9001 OIDC \u6388\u6743 Response\u3002
  4. \u6d4f\u89c8\u5668\u54cd\u5e94\u540e\u8f6c\u53d1 OIDC \u6388\u6743 Response \u7ed9 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u3002 1.\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4ece OIDC \u6388\u6743 Response \u4e2d\u53d6\u51fa ID Token\uff0c\u5e76\u6839\u636e\u5df2\u914d\u7f6e\u7684\u8eab\u4efd\u8f6c\u6362\u89c4\u5219\u6620\u5c04\u5230\u5177\u4f53\u7684\u7528\u6237\u5217\u8868\uff0c\u9881\u53d1 Token\u3002
  5. \u5b8c\u6210\u5355\u70b9\u767b\u5f55\uff0c\u8bbf\u95ee \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u3002
"},{"location":"admin/ghippo/access-control/role.html","title":"\u89d2\u8272\u548c\u6743\u9650\u7ba1\u7406","text":"

\u4e00\u4e2a\u89d2\u8272\u5bf9\u5e94\u4e00\u7ec4\u6743\u9650\u3002\u6743\u9650\u51b3\u5b9a\u4e86\u53ef\u4ee5\u5bf9\u8d44\u6e90\u6267\u884c\u7684\u64cd\u4f5c\u3002\u5411\u7528\u6237\u6388\u4e88\u67d0\u89d2\u8272\uff0c\u5373\u6388\u4e88\u8be5\u89d2\u8272\u6240\u5305\u542b\u7684\u6240\u6709\u6743\u9650\u3002

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5b58\u5728\u4e09\u79cd\u89d2\u8272\u8303\u56f4\uff0c\u80fd\u591f\u7075\u6d3b\u3001\u6709\u6548\u5730\u89e3\u51b3\u60a8\u5728\u6743\u9650\u4e0a\u7684\u4f7f\u7528\u95ee\u9898\uff1a

  • \u5e73\u53f0\u89d2\u8272
  • \u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272
  • \u6587\u4ef6\u5939\u89d2\u8272
"},{"location":"admin/ghippo/access-control/role.html#_2","title":"\u5e73\u53f0\u89d2\u8272","text":"

\u5e73\u53f0\u89d2\u8272\u662f\u7c97\u7c92\u5ea6\u6743\u9650\uff0c\u5bf9\u5e73\u53f0\u4e0a\u6240\u6709\u76f8\u5173\u8d44\u6e90\u5177\u6709\u76f8\u5e94\u6743\u9650\u3002\u901a\u8fc7\u5e73\u53f0\u89d2\u8272\u53ef\u4ee5\u8d4b\u4e88\u7528\u6237\u5bf9\u6240\u6709\u96c6\u7fa4\u3001\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u7b49\u7684\u589e\u5220\u6539\u67e5\u6743\u9650\uff0c \u800c\u4e0d\u80fd\u5177\u4f53\u5230\u67d0\u4e00\u4e2a\u96c6\u7fa4\u6216\u67d0\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u3002\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u4e86 5 \u4e2a\u9884\u7f6e\u7684\u3001\u7528\u6237\u53ef\u76f4\u63a5\u4f7f\u7528\u7684\u5e73\u53f0\u89d2\u8272\uff1a

  • Admin
  • Kpanda Owner
  • Workspace and Folder Owner
  • IAM Owner
  • Audit Owner

\u540c\u65f6\uff0c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8fd8\u652f\u6301\u7528\u6237\u521b\u5efa\u81ea\u5b9a\u4e49\u5e73\u53f0\u89d2\u8272\uff0c\u53ef\u6839\u636e\u9700\u8981\u81ea\u5b9a\u4e49\u89d2\u8272\u5185\u5bb9\u3002 \u5982\u521b\u5efa\u4e00\u4e2a\u5e73\u53f0\u89d2\u8272\uff0c\u5305\u542b\u5e94\u7528\u5de5\u4f5c\u53f0\u7684\u6240\u6709\u529f\u80fd\u6743\u9650\uff0c\u7531\u4e8e\u5e94\u7528\u5de5\u4f5c\u53f0\u4f9d\u8d56\u4e8e\u5de5\u4f5c\u7a7a\u95f4\uff0c \u56e0\u6b64\u5e73\u53f0\u4f1a\u5e2e\u52a9\u7528\u6237\u9ed8\u8ba4\u52fe\u9009\u5de5\u4f5c\u7a7a\u95f4\u7684\u67e5\u770b\u6743\u9650\uff0c\u8bf7\u4e0d\u8981\u624b\u52a8\u53d6\u6d88\u52fe\u9009\u3002 \u82e5\u7528\u6237 A \u88ab\u6388\u4e88\u8be5 Workbench\uff08\u5e94\u7528\u5de5\u4f5c\u53f0\uff09\u89d2\u8272\uff0c\u5c06\u81ea\u52a8\u62e5\u6709\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u7684\u5e94\u7528\u5de5\u4f5c\u53f0\u76f8\u5173\u529f\u80fd\u7684\u589e\u5220\u6539\u67e5\u7b49\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/role.html#_3","title":"\u5e73\u53f0\u89d2\u8272\u6388\u6743\u65b9\u5f0f","text":"

\u7ed9\u5e73\u53f0\u89d2\u8272\u6388\u6743\u5171\u6709\u4e09\u79cd\u65b9\u5f0f\uff1a

  • \u5728 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u7528\u6237 \u7684\u7528\u6237\u5217\u8868\u4e2d\uff0c\u627e\u5230\u8be5\u7528\u6237\uff0c\u70b9\u51fb ... \uff0c\u9009\u62e9 \u6388\u6743 \uff0c\u4e3a\u8be5\u7528\u6237\u8d4b\u4e88\u5e73\u53f0\u89d2\u8272\u6743\u9650\u3002

  • \u5728 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u7528\u6237\u7ec4 \u7684\u7528\u6237\u7ec4\u5217\u8868\u4e2d\u521b\u5efa\u7528\u6237\u7ec4\uff0c\u5c06\u8be5\u7528\u6237\u52a0\u5165\u7528\u6237\u7ec4\uff0c\u5e76\u7ed9\u7528\u6237\u7ec4\u6388\u6743 \uff08\u5177\u4f53\u64cd\u4f5c\u4e3a\uff1a\u5728\u7528\u6237\u7ec4\u5217\u8868\u627e\u5230\u8be5\u7528\u6237\u7ec4\uff0c\u70b9\u51fb ... \uff0c\u9009\u62e9 \u6388\u6743 \uff0c\u4e3a\u8be5\u7528\u6237\u7ec4\u8d4b\u4e88\u5e73\u53f0\u89d2\u8272\uff09\u3002

  • \u5728 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u89d2\u8272 \u7684\u89d2\u8272\u5217\u8868\u4e2d\uff0c\u627e\u5230\u76f8\u5e94\u7684\u5e73\u53f0\u89d2\u8272\uff0c \u70b9\u51fb\u89d2\u8272\u540d\u79f0\u8fdb\u5165\u8be6\u60c5\uff0c\u70b9\u51fb \u5173\u8054\u6210\u5458 \u6309\u94ae\uff0c\u9009\u4e2d\u8be5\u7528\u6237\u6216\u7528\u6237\u6240\u5728\u7684\u7528\u6237\u7ec4\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

"},{"location":"admin/ghippo/access-control/role.html#_4","title":"\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272","text":"

\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u662f\u7ec6\u7c92\u5ea6\u89d2\u8272\uff0c\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u53ef\u4ee5\u8d4b\u4e88\u7528\u6237\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u7684\u7ba1\u7406\u6743\u9650\u3001\u67e5\u770b\u6743\u9650\u6216\u8be5\u5de5\u4f5c\u7a7a\u95f4\u5e94\u7528\u5de5\u4f5c\u53f0\u76f8\u5173\u7684\u6743\u9650\u7b49\u3002 \u83b7\u5f97\u8be5\u89d2\u8272\u6743\u9650\u7684\u7528\u6237\u53ea\u80fd\u7ba1\u7406\u8be5\u5de5\u4f5c\u7a7a\u95f4\uff0c\u800c\u65e0\u6cd5\u8bbf\u95ee\u5176\u4ed6\u5de5\u4f5c\u7a7a\u95f4\u3002\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u4e86 3 \u4e2a\u9884\u7f6e\u7684\u3001\u7528\u6237\u53ef\u76f4\u63a5\u4f7f\u7528\u7684\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\uff1a

  • Workspace Admin
  • Workspace Editor
  • Workspace Viewer

\u540c\u65f6\uff0c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8fd8\u652f\u6301\u7528\u6237\u521b\u5efa\u81ea\u5b9a\u4e49\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\uff0c\u53ef\u6839\u636e\u9700\u8981\u81ea\u5b9a\u4e49\u89d2\u8272\u5185\u5bb9\u3002\u5982\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\uff0c \u5305\u542b\u5e94\u7528\u5de5\u4f5c\u53f0\u7684\u6240\u6709\u529f\u80fd\u6743\u9650\uff0c\u7531\u4e8e\u5e94\u7528\u5de5\u4f5c\u53f0\u4f9d\u8d56\u4e8e\u5de5\u4f5c\u7a7a\u95f4\uff0c\u56e0\u6b64\u5e73\u53f0\u4f1a\u5e2e\u52a9\u7528\u6237\u9ed8\u8ba4\u52fe\u9009\u5de5\u4f5c\u7a7a\u95f4\u7684\u67e5\u770b\u6743\u9650\uff0c \u8bf7\u4e0d\u8981\u624b\u52a8\u53d6\u6d88\u52fe\u9009\u3002\u82e5\u7528\u6237 A \u5728\u5de5\u4f5c\u7a7a\u95f4 01 \u4e2d\u88ab\u6388\u4e88\u8be5\u89d2\u8272\uff0c\u5c06\u62e5\u6709\u5de5\u4f5c\u7a7a\u95f4 01 \u4e0b\u7684\u5e94\u7528\u5de5\u4f5c\u53f0\u76f8\u5173\u529f\u80fd\u7684\u589e\u5220\u6539\u67e5\u6743\u9650\u3002

Note

\u4e0e\u5e73\u53f0\u89d2\u8272\u4e0d\u540c\uff0c\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u88ab\u521b\u5efa\u540e\u9700\u8981\u524d\u5f80\u5de5\u4f5c\u7a7a\u95f4\u4f7f\u7528\uff0c\u88ab\u6388\u6743\u540e\u7528\u6237\u4ec5\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u62e5\u6709\u8be5\u89d2\u8272\u4e2d\u7684\u529f\u80fd\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/role.html#_5","title":"\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u6388\u6743\u65b9\u5f0f","text":"

\u5728 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u5217\u8868\u4e2d\uff0c\u627e\u5230\u8be5\u5de5\u4f5c\u7a7a\u95f4\uff0c\u70b9\u51fb \u6dfb\u52a0\u6388\u6743 \uff0c\u4e3a\u8be5\u7528\u6237\u8d4b\u4e88\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/role.html#_6","title":"\u6587\u4ef6\u5939\u89d2\u8272","text":"

\u6587\u4ef6\u5939\u89d2\u8272\u7684\u6743\u9650\u7c92\u5ea6\u4ecb\u4e8e\u5e73\u53f0\u89d2\u8272\u4e0e\u5de5\u4f5c\u7a7a\u95f4\u89d2\u8272\u4e4b\u95f4\uff0c\u901a\u8fc7\u6587\u4ef6\u5939\u89d2\u8272\u53ef\u4ee5\u8d4b\u4e88\u7528\u6237\u67d0\u4e2a\u6587\u4ef6\u5939\u53ca\u5176\u5b50\u6587\u4ef6\u5939\u548c\u8be5\u6587\u4ef6\u5939\u4e0b\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u7684\u7ba1\u7406\u6743\u9650\u3001\u67e5\u770b\u6743\u9650\u7b49\uff0c \u5e38\u9002\u7528\u4e8e\u4f01\u4e1a\u4e2d\u7684\u90e8\u95e8\u573a\u666f\u3002\u6bd4\u5982\u7528\u6237 B \u662f\u4e00\u7ea7\u90e8\u95e8\u7684 Leader\uff0c\u901a\u5e38\u7528\u6237 B \u80fd\u591f\u7ba1\u7406\u8be5\u4e00\u7ea7\u90e8\u95e8\u3001\u5176\u4e0b\u7684\u6240\u6709\u4e8c\u7ea7\u90e8\u95e8\u548c\u90e8\u95e8\u4e2d\u7684\u9879\u76ee\u7b49\uff0c \u5728\u6b64\u573a\u666f\u4e2d\u7ed9\u7528\u6237 B \u6388\u4e88\u4e00\u7ea7\u6587\u4ef6\u5939\u7684\u7ba1\u7406\u5458\u6743\u9650\uff0c\u7528\u6237 B \u4e5f\u5c06\u62e5\u6709\u5176\u4e0b\u7684\u4e8c\u7ea7\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u7684\u76f8\u5e94\u6743\u9650\u3002 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u4e86 3 \u4e2a\u9884\u7f6e\u7684\u3001\u7528\u6237\u53ef\u76f4\u63a5\u4f7f\u7528\u6587\u4ef6\u5939\u89d2\u8272\uff1a

  • Folder Admin
  • Folder Editor
  • Folder Viewer

\u540c\u65f6\uff0c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8fd8\u652f\u6301\u7528\u6237\u521b\u5efa\u81ea\u5b9a\u4e49\u6587\u4ef6\u5939\u89d2\u8272\uff0c\u53ef\u6839\u636e\u9700\u8981\u81ea\u5b9a\u4e49\u89d2\u8272\u5185\u5bb9\u3002 \u5982\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\u89d2\u8272\uff0c\u5305\u542b\u5e94\u7528\u5de5\u4f5c\u53f0\u7684\u6240\u6709\u529f\u80fd\u6743\u9650\u3002\u82e5\u7528\u6237 A \u5728\u6587\u4ef6\u5939 01 \u4e2d\u88ab\u6388\u4e88\u8be5\u89d2\u8272\uff0c \u5c06\u62e5\u6709\u8be5\u6587\u4ef6\u5939\u4e0b\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u5e94\u7528\u5de5\u4f5c\u53f0\u76f8\u5173\u529f\u80fd\u7684\u589e\u5220\u6539\u67e5\u6743\u9650\u3002

Note

\u529f\u80fd\u6a21\u5757\u672c\u8eab\u4f9d\u8d56\u7684\u662f\u5de5\u4f5c\u7a7a\u95f4\uff0c\u6587\u4ef6\u5939\u662f\u5de5\u4f5c\u7a7a\u95f4\u4e0a\u7684\u8fdb\u4e00\u6b65\u5206\u7ec4\u673a\u5236\u4e14\u5177\u6709\u6743\u9650\u7ee7\u627f\u80fd\u529b\uff0c \u56e0\u6b64\u6587\u4ef6\u5939\u6743\u9650\u4e0d\u5149\u5305\u542b\u6587\u4ef6\u5939\u672c\u8eab\uff0c\u8fd8\u5305\u62ec\u5176\u4e0b\u7684\u5b50\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u3002

"},{"location":"admin/ghippo/access-control/role.html#_7","title":"\u6587\u4ef6\u5939\u89d2\u8272\u6388\u6743\u65b9\u5f0f","text":"

\u5728 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u5217\u8868\u4e2d\uff0c\u627e\u5230\u8be5\u6587\u4ef6\u5939\uff0c\u70b9\u51fb \u6dfb\u52a0\u6388\u6743 \uff0c\u4e3a\u8be5\u7528\u6237\u8d4b\u4e88\u6587\u4ef6\u5939\u89d2\u8272\u6743\u9650\u3002

"},{"location":"admin/ghippo/access-control/user.html","title":"\u7528\u6237","text":"

\u7528\u6237\u6307\u7684\u662f\u7531\u5e73\u53f0\u7ba1\u7406\u5458 admin \u6216\u8005\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u7ba1\u7406\u5458 IAM Owner \u5728 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u7528\u6237 \u9875\u9762\u521b\u5efa\u7684\u7528\u6237\uff0c\u6216\u8005\u901a\u8fc7 LDAP / OIDC \u5bf9\u63a5\u8fc7\u6765\u7684\u7528\u6237\u3002 \u7528\u6237\u540d\u4ee3\u8868\u8d26\u53f7\uff0c\u7528\u6237\u901a\u8fc7\u7528\u6237\u540d\u548c\u5bc6\u7801\u767b\u5f55\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u3002

\u62e5\u6709\u4e00\u4e2a\u7528\u6237\u8d26\u53f7\u662f\u7528\u6237\u8bbf\u95ee\u5e73\u53f0\u7684\u524d\u63d0\u3002\u65b0\u5efa\u7684\u7528\u6237\u9ed8\u8ba4\u6ca1\u6709\u4efb\u4f55\u6743\u9650\uff0c\u4f8b\u5982\u60a8\u9700\u8981\u7ed9\u7528\u6237\u8d4b\u4e88\u76f8\u5e94\u7684\u89d2\u8272\u6743\u9650\uff0c\u6bd4\u5982\u5728 \u7528\u6237\u5217\u8868 \u6216 \u7528\u6237\u8be6\u60c5 \u6388\u4e88\u5b50\u6a21\u5757\u7684\u7ba1\u7406\u5458\u6743\u9650\u3002 \u5b50\u6a21\u5757\u7ba1\u7406\u5458\u62e5\u6709\u8be5\u5b50\u6a21\u5757\u7684\u6700\u9ad8\u6743\u9650\uff0c\u80fd\u591f\u521b\u5efa\u3001\u7ba1\u7406\u3001\u5220\u9664\u8be5\u6a21\u5757\u7684\u6240\u6709\u8d44\u6e90\u3002 \u5982\u679c\u7528\u6237\u9700\u8981\u88ab\u6388\u4e88\u5177\u4f53\u8d44\u6e90\u7684\u6743\u9650\uff0c\u6bd4\u5982\u67d0\u4e2a\u8d44\u6e90\u7684\u4f7f\u7528\u6743\u9650\uff0c\u8bf7\u67e5\u770b\u8d44\u6e90\u6388\u6743\u8bf4\u660e\u3002

\u672c\u9875\u4ecb\u7ecd\u7528\u6237\u7684\u521b\u5efa\u3001\u6388\u6743\u3001\u7981\u7528\u3001\u542f\u7528\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002

"},{"location":"admin/ghippo/access-control/user.html#_2","title":"\u521b\u5efa\u7528\u6237","text":"

\u524d\u63d0\uff1a\u62e5\u6709\u5e73\u53f0\u7ba1\u7406\u5458 Admin \u6743\u9650\u6216\u8005\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u7ba1\u7406\u5458 IAM Owner \u6743\u9650\u3002

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237 \uff0c\u8fdb\u5165\u7528\u6237\u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4e0a\u65b9\u7684 \u521b\u5efa\u7528\u6237 \u3002

  2. \u5728 \u521b\u5efa\u7528\u6237 \u9875\u9762\u586b\u5199\u7528\u6237\u540d\u548c\u767b\u5f55\u5bc6\u7801\u3002\u5982\u9700\u4e00\u6b21\u6027\u521b\u5efa\u591a\u4e2a\u7528\u6237\uff0c\u53ef\u4ee5\u70b9\u51fb \u521b\u5efa\u7528\u6237 \u540e\u8fdb\u884c\u6279\u91cf\u521b\u5efa\uff0c\u4e00\u6b21\u6027\u6700\u591a\u521b\u5efa 5 \u4e2a\u7528\u6237\u3002\u6839\u636e\u60a8\u7684\u5b9e\u9645\u60c5\u51b5\u786e\u5b9a\u662f\u5426\u8bbe\u7f6e\u7528\u6237\u5728\u9996\u6b21\u767b\u5f55\u65f6\u91cd\u7f6e\u5bc6\u7801\u3002

  3. \u70b9\u51fb \u786e\u5b9a \uff0c\u521b\u5efa\u7528\u6237\u6210\u529f\uff0c\u8fd4\u56de\u7528\u6237\u5217\u8868\u9875\u3002

Note

\u6b64\u5904\u8bbe\u7f6e\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u5c06\u7528\u4e8e\u767b\u5f55\u5e73\u53f0\u3002

"},{"location":"admin/ghippo/access-control/user.html#grant-admin-permissions","title":"\u4e3a\u7528\u6237\u6388\u4e88\u5b50\u6a21\u5757\u7ba1\u7406\u5458\u6743\u9650","text":"

\u524d\u63d0\uff1a\u8be5\u7528\u6237\u5df2\u5b58\u5728\u3002

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237 \uff0c\u8fdb\u5165\u7528\u6237\u5217\u8868\uff0c\u70b9\u51fb \u2507 -> \u6388\u6743 \u3002

  2. \u5728 \u6388\u6743 \u9875\u9762\u52fe\u9009\u9700\u8981\u7684\u89d2\u8272\u6743\u9650\uff08\u53ef\u591a\u9009\uff09\u3002

  3. \u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u4e3a\u7528\u6237\u7684\u6388\u6743\u3002

Note

\u5728\u7528\u6237\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u67d0\u4e2a\u7528\u6237\uff0c\u53ef\u4ee5\u8fdb\u5165\u7528\u6237\u8be6\u60c5\u9875\u9762\u3002

"},{"location":"admin/ghippo/access-control/user.html#_3","title":"\u5c06\u7528\u6237\u52a0\u5165\u7528\u6237\u7ec4","text":"
  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237 \uff0c\u8fdb\u5165\u7528\u6237\u5217\u8868\uff0c\u70b9\u51fb \u2507 -> \u52a0\u5165\u7528\u6237\u7ec4 \u3002

  2. \u5728 \u52a0\u5165\u7528\u6237\u7ec4 \u9875\u9762\u52fe\u9009\u9700\u8981\u52a0\u5165\u7684\u7528\u6237\u7ec4\uff08\u53ef\u591a\u9009\uff09\u3002\u82e5\u6ca1\u6709\u53ef\u9009\u7684\u7528\u6237\u7ec4\uff0c\u70b9\u51fb \u521b\u5efa\u7528\u6237\u7ec4 \u521b\u5efa\u7528\u6237\u7ec4\uff0c\u518d\u8fd4\u56de\u8be5\u9875\u9762\u70b9\u51fb \u5237\u65b0 \u6309\u94ae\uff0c\u663e\u793a\u521a\u521b\u5efa\u7684\u7528\u6237\u7ec4\u3002

  3. \u70b9\u51fb \u786e\u5b9a \u5c06\u7528\u6237\u52a0\u5165\u7528\u6237\u7ec4\u3002

Note

\u7528\u6237\u4f1a\u7ee7\u627f\u7528\u6237\u7ec4\u7684\u6743\u9650\uff0c\u53ef\u4ee5\u5728 \u7528\u6237\u8be6\u60c5 \u4e2d\u67e5\u770b\u8be5\u7528\u6237\u5df2\u52a0\u5165\u7684\u7528\u6237\u7ec4\u3002

"},{"location":"admin/ghippo/access-control/user.html#_4","title":"\u542f\u7528/\u7981\u7528\u7528\u6237","text":"

\u7981\u7528\u7528\u6237\u540e\uff0c\u8be5\u7528\u6237\u5c06\u65e0\u6cd5\u518d\u8bbf\u95ee\u5e73\u53f0\u3002\u4e0e\u5220\u9664\u7528\u6237\u4e0d\u540c\uff0c\u7981\u7528\u7684\u7528\u6237\u53ef\u4ee5\u6839\u636e\u9700\u8981\u518d\u6b21\u542f\u7528\uff0c\u5efa\u8bae\u5220\u9664\u7528\u6237\u524d\u5148\u7981\u7528\uff0c\u4ee5\u786e\u4fdd\u6ca1\u6709\u5173\u952e\u670d\u52a1\u5728\u4f7f\u7528\u8be5\u7528\u6237\u521b\u5efa\u7684\u5bc6\u94a5\u3002

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237 \uff0c\u8fdb\u5165\u7528\u6237\u5217\u8868\uff0c\u70b9\u51fb\u4e00\u4e2a\u7528\u6237\u540d\u8fdb\u5165\u7528\u6237\u8be6\u60c5\u3002

  2. \u70b9\u51fb\u53f3\u4e0a\u65b9\u7684 \u7f16\u8f91 \uff0c\u5173\u95ed\u72b6\u6001\u6309\u94ae\uff0c\u4f7f\u6309\u94ae\u7f6e\u7070\u4e14\u5904\u4e8e\u672a\u542f\u7528\u72b6\u6001\u3002

  3. \u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u7981\u7528\u7528\u6237\u7684\u64cd\u4f5c\u3002

"},{"location":"admin/ghippo/access-control/user.html#_5","title":"\u5fd8\u8bb0\u5bc6\u7801","text":"

\u524d\u63d0\uff1a\u9700\u8981\u8bbe\u7f6e\u7528\u6237\u90ae\u7bb1\uff0c\u6709\u4e24\u79cd\u65b9\u5f0f\u53ef\u4ee5\u8bbe\u7f6e\u7528\u6237\u90ae\u7bb1\u3002

  • \u7ba1\u7406\u5458\u5728\u8be5\u7528\u6237\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb \u7f16\u8f91 \uff0c\u5728\u5f39\u51fa\u6846\u8f93\u5165\u7528\u6237\u90ae\u7bb1\u5730\u5740\uff0c\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u90ae\u7bb1\u8bbe\u7f6e\u3002

  • \u7528\u6237\u8fd8\u53ef\u4ee5\u8fdb\u5165 \u4e2a\u4eba\u4e2d\u5fc3 \uff0c\u5728 \u5b89\u5168\u8bbe\u7f6e \u9875\u9762\u8bbe\u7f6e\u90ae\u7bb1\u5730\u5740\u3002

\u5982\u679c\u7528\u6237\u767b\u5f55\u65f6\u5fd8\u8bb0\u5bc6\u7801\uff0c\u8bf7\u53c2\u8003\u91cd\u7f6e\u5bc6\u7801\u3002

"},{"location":"admin/ghippo/access-control/user.html#_6","title":"\u5220\u9664\u7528\u6237","text":"

Warning

\u5220\u9664\u7528\u6237\u540e\uff0c\u8be5\u7528\u6237\u5c06\u65e0\u6cd5\u518d\u901a\u8fc7\u4efb\u4f55\u65b9\u5f0f\u8bbf\u95ee\u5e73\u53f0\u8d44\u6e90\uff0c\u8bf7\u8c28\u614e\u5220\u9664\u3002 \u5728\u5220\u9664\u7528\u6237\u4e4b\u524d\uff0c\u8bf7\u786e\u4fdd\u60a8\u7684\u5173\u952e\u7a0b\u5e8f\u4e0d\u518d\u4f7f\u7528\u8be5\u7528\u6237\u521b\u5efa\u7684\u5bc6\u94a5\u3002 \u5982\u679c\u60a8\u4e0d\u786e\u5b9a\uff0c\u5efa\u8bae\u5728\u5220\u9664\u524d\u5148\u7981\u7528\u8be5\u7528\u6237\u3002 \u5982\u679c\u60a8\u5220\u9664\u4e86\u4e00\u4e2a\u7528\u6237\uff0c\u7136\u540e\u518d\u521b\u5efa\u4e00\u4e2a\u540c\u540d\u7684\u65b0\u7528\u6237\uff0c\u5219\u65b0\u7528\u6237\u5c06\u88ab\u89c6\u4e3a\u4e00\u4e2a\u65b0\u7684\u72ec\u7acb\u8eab\u4efd\uff0c\u5b83\u4e0d\u4f1a\u7ee7\u627f\u5df2\u5220\u9664\u7528\u6237\u7684\u89d2\u8272\u3002

  1. \u7ba1\u7406\u5458\u8fdb\u5165 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \uff0c\u9009\u62e9 \u7528\u6237 \uff0c\u8fdb\u5165\u7528\u6237\u5217\u8868\uff0c\u70b9\u51fb \u2507 -> \u5220\u9664 \u3002

  2. \u70b9\u51fb \u79fb\u9664 \u5b8c\u6210\u5220\u9664\u7528\u6237\u7684\u64cd\u4f5c\u3002

"},{"location":"admin/ghippo/access-control/webhook.html","title":"Webhook \u6d88\u606f\u901a\u77e5","text":"

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5728\u63a5\u5165\u5ba2\u6237\u7684\u7cfb\u7edf\u540e\uff0c\u53ef\u4ee5\u521b\u5efa Webhook\uff0c\u5728\u7528\u6237\u521b\u5efa/\u66f4\u65b0/\u5220\u9664/\u767b\u5f55/\u767b\u51fa\u4e4b\u65f6\u53d1\u9001\u6d88\u606f\u901a\u77e5\u3002

Webhook \u662f\u4e00\u79cd\u7528\u4e8e\u5b9e\u73b0\u5b9e\u65f6\u4e8b\u4ef6\u901a\u77e5\u7684\u673a\u5236\u3002\u5b83\u5141\u8bb8\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u5c06\u6570\u636e\u6216\u4e8b\u4ef6\u63a8\u9001\u5230\u53e6\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c \u800c\u65e0\u9700\u8f6e\u8be2\u6216\u6301\u7eed\u67e5\u8be2\u3002\u901a\u8fc7\u914d\u7f6e Webhook\uff0c\u60a8\u53ef\u4ee5\u6307\u5b9a\u5728\u67d0\u4e2a\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c\u7531\u76ee\u6807\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u5e76\u5904\u7406\u901a\u77e5\u3002

Webhook \u7684\u5de5\u4f5c\u539f\u7406\u5982\u4e0b\uff1a

  1. \u6e90\u5e94\u7528\u7a0b\u5e8f\uff08\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\uff09\u6267\u884c\u67d0\u4e2a\u7279\u5b9a\u64cd\u4f5c\u6216\u4e8b\u4ef6\u3002
  2. \u6e90\u5e94\u7528\u7a0b\u5e8f\u5c06\u76f8\u5173\u6570\u636e\u548c\u4fe1\u606f\u6253\u5305\u6210 HTTP \u8bf7\u6c42\uff0c\u5e76\u5c06\u5176\u53d1\u9001\u5230\u76ee\u6807\u5e94\u7528\u7a0b\u5e8f\u6307\u5b9a\u7684 URL\uff08\u4f8b\u5982\u4f01\u4e1a\u5fae\u4fe1\u7fa4\u673a\u5668\u4eba\uff09\u3002
  3. \u76ee\u6807\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u5230\u8bf7\u6c42\u540e\uff0c\u6839\u636e\u5176\u4e2d\u7684\u6570\u636e\u548c\u4fe1\u606f\u8fdb\u884c\u76f8\u5e94\u7684\u5904\u7406\u3002

\u901a\u8fc7\u4f7f\u7528 Webhook\uff0c\u60a8\u53ef\u4ee5\u5b9e\u73b0\u4ee5\u4e0b\u529f\u80fd\uff1a

  • \u5b9e\u65f6\u901a\u77e5\uff1a\u5f53\u67d0\u4e2a\u7279\u5b9a\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c\u901a\u8fc7 Webhook \u53ca\u65f6\u901a\u77e5\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u3002
  • \u81ea\u52a8\u5316\u5904\u7406\uff1a\u76ee\u6807\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u6839\u636e\u6536\u5230\u7684 Webhook \u8bf7\u6c42\u81ea\u52a8\u89e6\u53d1\u4e8b\u5148\u5b9a\u4e49\u597d\u7684\u64cd\u4f5c\uff0c\u65e0\u9700\u624b\u52a8\u5e72\u9884\u3002
  • \u6570\u636e\u540c\u6b65\uff1a\u901a\u8fc7 Webhook \u5c06\u6570\u636e\u4ece\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4f20\u9012\u5230\u53e6\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5b9e\u73b0\u6570\u636e\u7684\u540c\u6b65\u66f4\u65b0\u3002

\u5e38\u89c1\u7684\u5e94\u7528\u573a\u666f\u5305\u62ec\uff1a

  • \u7248\u672c\u63a7\u5236\u7cfb\u7edf\uff08\u4f8b\u5982 GitHub\u3001GitLab\uff09\u4e2d\uff0c\u5f53\u4ee3\u7801\u4ed3\u5e93\u53d1\u751f\u53d8\u52a8\u65f6\uff0c\u81ea\u52a8\u89e6\u53d1\u6784\u5efa\u548c\u90e8\u7f72\u64cd\u4f5c\u3002
  • \u7535\u5b50\u5546\u52a1\u5e73\u53f0\u4e2d\uff0c\u5f53\u8ba2\u5355\u72b6\u6001\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u5411\u7269\u6d41\u7cfb\u7edf\u53d1\u9001\u66f4\u65b0\u901a\u77e5\u3002
  • \u804a\u5929\u673a\u5668\u4eba\u5e73\u53f0\u4e2d\uff0c\u5f53\u63a5\u6536\u5230\u7528\u6237\u6d88\u606f\u65f6\uff0c\u901a\u8fc7 Webhook \u5c06\u6d88\u606f\u63a8\u9001\u5230\u76ee\u6807\u670d\u52a1\u5668\u8fdb\u884c\u5904\u7406\u3002
"},{"location":"admin/ghippo/access-control/webhook.html#_1","title":"\u914d\u7f6e\u6b65\u9aa4","text":"

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u56fe\u5f62\u5316\u914d\u7f6e Webhook \u7684\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u5728 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u63a5\u5165\u7ba1\u7406 \uff0c\u521b\u5efa\u4e00\u4e2a\u5ba2\u6237\u7aef ID\u3002

  2. \u70b9\u51fb\u67d0\u4e2a\u5ba2\u6237\u7aef ID\uff0c\u8fdb\u5165\u8be6\u60c5\u9875\uff0c\u70b9\u51fb \u521b\u5efa Webhook \u6309\u94ae\u3002

  3. \u5728\u5f39\u7a97\u4e2d\u586b\u5165\u5b57\u6bb5\u4fe1\u606f\u540e\u70b9\u51fb \u786e\u5b9a \u3002

    • \u5bf9\u8c61\uff1a\u76ee\u524d\u4ec5\u652f\u6301 \u7528\u6237 \u5bf9\u8c61
    • \u884c\u4e3a\uff1a\u7528\u6237\u521b\u5efa/\u66f4\u65b0/\u5220\u9664/\u767b\u5f55/\u767b\u5f55\u65f6\u53d1\u9001 Webhook \u6d88\u606f
    • URL\uff1a\u63a5\u6536\u6d88\u606f\u7684\u5730\u5740
    • Method\uff1a\u89c6\u60c5\u51b5\u9009\u62e9\u9002\u7528\u7684\u65b9\u6cd5\uff0c\u4f8b\u5982\u4f01\u4e1a\u5fae\u4fe1\u63a8\u8350\u4f7f\u7528 POST \u65b9\u6cd5
    • \u9ad8\u7ea7\u914d\u7f6e\uff1a\u53ef\u4ee5\u7528 Json \u7f16\u5199\u6d88\u606f\u4f53\u3002\u5982\u679c\u662f\u4f01\u4e1a\u5fae\u4fe1\u7fa4\uff0c\u8bf7\u53c2\u9605\u7fa4\u673a\u5668\u4eba\u914d\u7f6e\u8bf4\u660e

  4. \u5c4f\u5e55\u63d0\u793a Webhook \u521b\u5efa\u6210\u529f\u3002

  5. \u73b0\u5728\u53bb\u8bd5\u7740\u521b\u5efa\u4e00\u4e2a\u7528\u6237\u3002

  6. \u7528\u6237\u521b\u5efa\u6210\u529f\uff0c\u53ef\u4ee5\u770b\u5230\u4f01\u4e1a\u5fae\u4fe1\u7fa4\u6536\u5230\u4e86\u4e00\u6761\u6d88\u606f\u3002

"},{"location":"admin/ghippo/access-control/webhook.html#_2","title":"\u9ad8\u7ea7\u914d\u7f6e\u793a\u4f8b","text":"

\u7cfb\u7edf\u9ed8\u8ba4\u7684\u6d88\u606f\u4f53

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9884\u5148\u5b9a\u4e49\u4e86\u4e00\u4e9b\u53d8\u91cf\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u60c5\u51b5\u5728\u6d88\u606f\u4f53\u4e2d\u4f7f\u7528\u8fd9\u4e9b\u53d8\u91cf\u3002

{\n  \"id\": \"{{$$.ID$$}}\",\n  \"email\": \"{{$$.Email$$}}\",\n  \"username\": \"{{$$.Name$$}}\",\n  \"last_name\": \"{{$$.LastName$$}}\",\n  \"first_name\": \"{{$$.FirstName$$}}\",\n  \"created_at\": \"{{$$.CreatedAt$$}}\",\n  \"enabled\": \"{{$$.Enabled$$}}\"\n}\n

\u4f01\u4e1a\u5fae\u4fe1\u7fa4\u673a\u5668\u4eba\u7684 Message Body

{\n    \"msgtype\": \"text\",\n    \"text\": {\n      \"content\": \"{{$$.Name$$}} hello world\"\n    }\n}\n
"},{"location":"admin/ghippo/access-control/webhook.html#_3","title":"\u53c2\u8003\u6587\u6863","text":"
  • OEM OUT \u6587\u6863
  • OEM IN \u6587\u6863
"},{"location":"admin/ghippo/audit/audit-log.html","title":"\u5ba1\u8ba1\u65e5\u5fd7","text":"

\u5ba1\u8ba1\u65e5\u5fd7\u5e2e\u52a9\u60a8\u76d1\u63a7\u5e76\u8bb0\u5f55\u6bcf\u4e2a\u7528\u6237\u7684\u6d3b\u52a8\uff0c\u63d0\u4f9b\u4e86\u4e0e\u5b89\u5168\u76f8\u5173\u7684\u3001\u6309\u65f6\u95f4\u987a\u5e8f\u6392\u5217\u7684\u8bb0\u5f55\u7684\u6536\u96c6\u3001\u5b58\u50a8\u548c\u67e5\u8be2\u529f\u80fd\u3002 \u501f\u52a9\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\uff0c\u60a8\u53ef\u4ee5\u6301\u7eed\u76d1\u63a7\u5e76\u4fdd\u7559\u7528\u6237\u5728\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u7684\u4f7f\u7528\u884c\u4e3a\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\u521b\u5efa\u7528\u6237\u3001\u7528\u6237\u767b\u5f55/\u767b\u51fa\u3001\u7528\u6237\u6388\u6743\u4ee5\u53ca\u4e0e Kubernetes \u76f8\u5173\u7684\u7528\u6237\u64cd\u4f5c\u884c\u4e3a\u3002

"},{"location":"admin/ghippo/audit/audit-log.html#_2","title":"\u529f\u80fd\u7279\u6027","text":"

\u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\u5177\u6709\u4ee5\u4e0b\u7279\u70b9\uff1a

  • \u5f00\u7bb1\u5373\u7528\uff1a\u5728\u5b89\u88c5\u4f7f\u7528\u8be5\u5e73\u53f0\u65f6\uff0c\u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\u5c06\u4f1a\u88ab\u9ed8\u8ba4\u542f\u7528\uff0c\u81ea\u52a8\u8bb0\u5f55\u4e0e\u7528\u6237\u76f8\u5173\u7684\u5404\u79cd\u884c\u4e3a\uff0c \u5982\u521b\u5efa\u7528\u6237\u3001\u6388\u6743\u3001\u767b\u5f55/\u767b\u51fa\u7b49\u3002\u9ed8\u8ba4\u53ef\u4ee5\u5728\u5e73\u53f0\u5185\u67e5\u770b 365 \u5929\u7684\u7528\u6237\u884c\u4e3a\u3002
  • \u5b89\u5168\u5206\u6790\uff1a\u5ba1\u8ba1\u65e5\u5fd7\u4f1a\u5bf9\u7528\u6237\u64cd\u4f5c\u8fdb\u884c\u8be6\u7ec6\u7684\u8bb0\u5f55\u5e76\u63d0\u4f9b\u5bfc\u51fa\u529f\u80fd\uff0c\u901a\u8fc7\u8fd9\u4e9b\u4e8b\u4ef6\u60a8\u53ef\u4ee5\u5224\u65ad\u8d26\u53f7\u662f\u5426\u5b58\u5728\u98ce\u9669\u3002
  • \u5b9e\u65f6\u8bb0\u5f55\uff1a\u8fc5\u901f\u6536\u96c6\u64cd\u4f5c\u4e8b\u4ef6\uff0c\u7528\u6237\u64cd\u4f5c\u540e\u53ef\u5728\u5ba1\u8ba1\u65e5\u5fd7\u5217\u8868\u8fdb\u884c\u8ffd\u6eaf\uff0c\u968f\u65f6\u53d1\u73b0\u53ef\u7591\u884c\u4e3a\u3002
  • \u65b9\u4fbf\u53ef\u9760\uff1a\u5ba1\u8ba1\u65e5\u5fd7\u652f\u6301\u624b\u52a8\u6e05\u7406\u548c\u81ea\u52a8\u6e05\u7406\u4e24\u79cd\u65b9\u5f0f\uff0c\u53ef\u6839\u636e\u60a8\u7684\u5b58\u50a8\u5927\u5c0f\u914d\u7f6e\u6e05\u7406\u7b56\u7565\u3002
"},{"location":"admin/ghippo/audit/audit-log.html#_3","title":"\u67e5\u770b\u5ba1\u8ba1\u65e5\u5fd7","text":"
  1. \u4f7f\u7528\u5177\u6709 admin \u6216 Audit Owner \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002

  2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\uff0c\u70b9\u51fb \u5168\u5c40\u7ba1\u7406 -> \u5ba1\u8ba1\u65e5\u5fd7 \u3002

"},{"location":"admin/ghippo/audit/audit-log.html#_4","title":"\u7528\u6237\u64cd\u4f5c","text":"

\u5728 \u7528\u6237\u64cd\u4f5c \u9875\u7b7e\u4e2d\uff0c\u53ef\u4ee5\u6309\u65f6\u95f4\u8303\u56f4\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6a21\u7cca\u641c\u7d22\u3001\u7cbe\u786e\u641c\u7d22\u6765\u67e5\u627e\u7528\u6237\u64cd\u4f5c\u4e8b\u4ef6\u3002

\u70b9\u51fb\u67d0\u4e2a\u4e8b\u4ef6\u6700\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u67e5\u770b\u4e8b\u4ef6\u8be6\u60c5\u3002

\u4e8b\u4ef6\u8be6\u60c5\u5982\u4e0b\u56fe\u6240\u793a\u3002

\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u5bfc\u51fa \u6309\u94ae\uff0c\u53ef\u4ee5\u6309 CSV \u548c Excel \u683c\u5f0f\u5bfc\u51fa\u5f53\u524d\u6240\u9009\u65f6\u95f4\u8303\u56f4\u5185\u7684\u7528\u6237\u64cd\u4f5c\u65e5\u5fd7\u3002

"},{"location":"admin/ghippo/audit/audit-log.html#_5","title":"\u7cfb\u7edf\u64cd\u4f5c","text":"

\u5728 \u7cfb\u7edf\u64cd\u4f5c \u9875\u7b7e\u4e2d\uff0c\u53ef\u4ee5\u6309\u65f6\u95f4\u8303\u56f4\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6a21\u7cca\u641c\u7d22\u3001\u7cbe\u786e\u641c\u7d22\u6765\u67e5\u627e\u7cfb\u7edf\u64cd\u4f5c\u4e8b\u4ef6\u3002

\u540c\u6837\u70b9\u51fb\u67d0\u4e2a\u4e8b\u4ef6\u6700\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u67e5\u770b\u4e8b\u4ef6\u8be6\u60c5\u3002

\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u5bfc\u51fa \u6309\u94ae\uff0c\u53ef\u4ee5\u6309 CSV \u548c Excel \u683c\u5f0f\u5bfc\u51fa\u5f53\u524d\u6240\u9009\u65f6\u95f4\u8303\u56f4\u5185\u7684\u7cfb\u7edf\u64cd\u4f5c\u65e5\u5fd7\u3002

"},{"location":"admin/ghippo/audit/audit-log.html#_6","title":"\u8bbe\u7f6e","text":"

\u5728 \u8bbe\u7f6e \u9875\u7b7e\u4e2d\uff0c\u60a8\u53ef\u4ee5\u6e05\u7406\u7528\u6237\u64cd\u4f5c\u548c\u7cfb\u7edf\u64cd\u4f5c\u7684\u5ba1\u8ba1\u65e5\u5fd7\u3002

\u53ef\u4ee5\u624b\u52a8\u6e05\u7406\uff0c\u5efa\u8bae\u6e05\u7406\u524d\u5148\u5bfc\u51fa\u5e76\u4fdd\u5b58\u3002\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u65e5\u5fd7\u7684\u6700\u957f\u4fdd\u5b58\u65f6\u95f4\u5b9e\u73b0\u81ea\u52a8\u6e05\u7406\u3002

Note

\u5ba1\u8ba1\u65e5\u5fd7\u4e2d\u4e0e Kubernetes \u76f8\u5173\u7684\u65e5\u5fd7\u8bb0\u5f55\u7531\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u63d0\u4f9b\uff0c\u4e3a\u51cf\u8f7b\u5ba1\u8ba1\u65e5\u5fd7\u7684\u5b58\u50a8\u538b\u529b\uff0c\u5168\u5c40\u7ba1\u7406\u9ed8\u8ba4\u4e0d\u91c7\u96c6 Kubernetes \u76f8\u5173\u65e5\u5fd7\u3002 \u5982\u9700\u8bb0\u5f55\u8bf7\u53c2\u9605\u5f00\u542f K8s \u5ba1\u8ba1\u65e5\u5fd7\u3002\u5f00\u542f\u540e\u7684\u6e05\u7406\u529f\u80fd\u4e0e\u5168\u5c40\u7ba1\u7406\u7684\u6e05\u7406\u529f\u80fd\u4e00\u81f4\uff0c\u4f46\u4e92\u4e0d\u5f71\u54cd\u3002

"},{"location":"admin/ghippo/audit/open-audit.html","title":"\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7","text":"
  • \u751f\u6210 K8s \u5ba1\u8ba1\u65e5\u5fd7\uff1aK8s \u672c\u8eab\u751f\u6210\u7684\u5ba1\u8ba1\u65e5\u5fd7\uff0c\u5f00\u542f\u8be5\u529f\u80fd\u540e\uff0c\u4f1a\u5728\u6307\u5b9a\u76ee\u5f55\u4e0b\u751f\u6210 K8s \u5ba1\u8ba1\u65e5\u5fd7\u7684\u65e5\u5fd7\u6587\u4ef6
  • \u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\uff1a\u901a\u8fc7 insight-agent \u91c7\u96c6\u4e0a\u8ff0 \u2018K8s \u5ba1\u8ba1\u65e5\u5fd7\u2019\u7684\u65e5\u5fd7\u6587\u4ef6\uff0c\u2019\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u2018 \u7684\u524d\u63d0\u6761\u4ef6\u662f\uff1a
    • \u96c6\u7fa4\u751f\u6210\u4e86 \u2018K8s \u5ba1\u8ba1\u65e5\u5fd7\u2018
    • \u65e5\u5fd7\u8f93\u51fa\u5f00\u5173\u5df2\u6253\u5f00
    • \u65e5\u5fd7\u91c7\u96c6\u5f00\u5173\u5df2\u6253\u5f00
"},{"location":"admin/ghippo/audit/open-audit.html#ai","title":"\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5b89\u88c5\u5b8c\u6210\u65f6\u72b6\u6001","text":"
  • \u7ba1\u7406\u96c6\u7fa4\u7684 K8s \u5ba1\u8ba1\u65e5\u5fd7\u5f00\u5173\u9ed8\u8ba4\u5f00\u542f
  • \u7ba1\u7406\u96c6\u7fa4\u7684\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u5f00\u5173\u9ed8\u8ba4\u5173\u95ed
    • \u9ed8\u8ba4\u8bbe\u7f6e\u4e0d\u652f\u6301\u914d\u7f6e
"},{"location":"admin/ghippo/audit/open-audit.html#k8s_1","title":"\u7ba1\u7406\u96c6\u7fa4\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u5f00\u5173","text":""},{"location":"admin/ghippo/audit/open-audit.html#k8s_2","title":"\u786e\u8ba4\u662f\u5426\u5f00\u542f\u4e86 K8s \u5ba1\u8ba1\u65e5\u5fd7","text":"

\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b /var/log/kubernetes/audit \u76ee\u5f55\u4e0b\u662f\u5426\u6709\u5ba1\u8ba1\u65e5\u5fd7\u751f\u6210\u3002 \u82e5\u6709\uff0c\u5219\u8868\u793a K8s \u5ba1\u8ba1\u65e5\u5fd7\u6210\u529f\u5f00\u542f\u3002

ls /var/log/kubernetes/audit\n

\u82e5\u672a\u5f00\u542f\uff0c\u8bf7\u53c2\u8003\u751f\u6210 K8s \u5ba1\u8ba1\u65e5\u5fd7\u3002

"},{"location":"admin/ghippo/audit/open-audit.html#k8s_3","title":"\u5f00\u542f\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u6d41\u7a0b","text":"
  1. \u6dfb\u52a0 chartmuseum \u5230 helm repo \u4e2d

    helm repo add chartmuseum http://10.5.14.30:8081\n

    \u8fd9\u6761\u547d\u4ee4\u4e2d\u7684 IP \u9700\u8981\u4fee\u6539\u4e3a\u706b\u79cd\u8282\u70b9\u7684 IP \u5730\u5740\u3002

    Note

    \u4f7f\u7528\u81ea\u5efa Harbor \u4ed3\u5e93\u7684\u60c5\u51b5\u4e0b\uff0c\u8bf7\u4fee\u6539\u7b2c\u4e00\u6b65\u4e2d\u7684 chart repo \u5730\u5740\u4e3a\u81ea\u5efa\u4ed3\u5e93\u7684 insight-agent chart \u5730\u5740\u3002

  2. \u4fdd\u5b58\u5f53\u524d insight-agent helm value

    helm get values insight-agent -n insight-system -o yaml > insight-agent-values-bak.yaml\n
  3. \u83b7\u53d6\u5f53\u524d\u7248\u672c\u53f7 ${insight_version_code}

    insight_version_code=`helm list -n insight-system |grep insight-agent | awk {'print $10'}`\n
  4. \u66f4\u65b0 helm value \u914d\u7f6e

    helm upgrade --install --create-namespace --version ${insight_version_code} --cleanup-on-fail insight-agent chartmuseum/insight-agent -n insight-system -f insight-agent-values-bak.yaml --set global.exporters.auditLog.kubeAudit.enabled=true\n
  5. \u91cd\u542f insight-system \u4e0b\u7684\u6240\u6709 fluentBit pod

    fluent_pod=`kubectl get pod -n insight-system | grep insight-agent-fluent-bit | awk {'print $1'} | xargs`\nkubectl delete pod ${fluent_pod} -n insight-system\n
"},{"location":"admin/ghippo/audit/open-audit.html#k8s_4","title":"\u5173\u95ed\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7","text":"

\u5176\u4f59\u6b65\u9aa4\u548c\u5f00\u542f\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u4e00\u81f4\uff0c\u4ec5\u9700\u4fee\u6539\u4e0a\u4e00\u8282\u4e2d\u7b2c 4 \u6b65\uff1a\u66f4\u65b0 helm value \u914d\u7f6e\u3002

helm upgrade --install --create-namespace --version ${insight_version_code} --cleanup-on-fail insight-agent chartmuseum/insight-agent -n insight-system -f insight-agent-values-bak.yaml --set global.exporters.auditLog.kubeAudit.enabled=false\n
"},{"location":"admin/ghippo/audit/open-audit.html#_1","title":"\u5de5\u4f5c\u96c6\u7fa4\u5f00\u5173","text":"

\u5404\u5de5\u4f5c\u96c6\u7fa4\u5f00\u5173\u72ec\u7acb\uff0c\u6309\u9700\u5f00\u542f\u3002

"},{"location":"admin/ghippo/audit/open-audit.html#_2","title":"\u521b\u5efa\u96c6\u7fa4\u65f6\u6253\u5f00\u91c7\u96c6\u5ba1\u8ba1\u65e5\u5fd7\u6b65\u9aa4","text":"

\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\u9ed8\u8ba4\u4e3a\u5173\u95ed\u72b6\u6001\u3002\u82e5\u9700\u8981\u5f00\u542f\uff0c\u53ef\u4ee5\u6309\u7167\u5982\u4e0b\u6b65\u9aa4\uff1a

\u5c06\u8be5\u6309\u94ae\u8bbe\u7f6e\u4e3a\u542f\u7528\u72b6\u6001\uff0c\u5f00\u542f\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\u3002

\u901a\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u65f6\uff0c\u786e\u8ba4\u8be5\u96c6\u7fa4\u7684 K8s \u5ba1\u8ba1\u65e5\u5fd7\u9009\u62e9 \u2018true'\uff0c\u8fd9\u6837\u521b\u5efa\u51fa\u6765\u7684\u5de5\u4f5c\u96c6\u7fa4 K8s \u5ba1\u8ba1\u65e5\u5fd7\u662f\u5f00\u542f\u7684\u3002

\u7b49\u5f85\u96c6\u7fa4\u521b\u5efa\u6210\u529f\u540e\uff0c\u8be5\u5de5\u4f5c\u96c6\u7fa4\u7684 K8s \u5ba1\u8ba1\u65e5\u5fd7\u5c06\u88ab\u91c7\u96c6\u3002

"},{"location":"admin/ghippo/audit/open-audit.html#_3","title":"\u63a5\u5165\u7684\u96c6\u7fa4\u548c\u521b\u5efa\u5b8c\u6210\u540e\u5f00\u5173\u6b65\u9aa4","text":""},{"location":"admin/ghippo/audit/open-audit.html#k8s_5","title":"\u786e\u8ba4\u5f00\u542f K8s \u5ba1\u8ba1\u65e5\u5fd7","text":"

\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b /var/log/kubernetes/audit \u76ee\u5f55\u4e0b\u662f\u5426\u6709\u5ba1\u8ba1\u65e5\u5fd7\u751f\u6210\uff0c\u82e5\u6709\uff0c\u5219\u8868\u793a K8s \u5ba1\u8ba1\u65e5\u5fd7\u6210\u529f\u5f00\u542f\u3002

ls /var/log/kubernetes/audit\n

\u82e5\u672a\u5f00\u542f\uff0c\u8bf7\u53c2\u8003\u6587\u6863\u7684\u5f00\u542f\u5173\u95ed K8s \u5ba1\u8ba1\u65e5\u5fd7

"},{"location":"admin/ghippo/audit/open-audit.html#k8s_6","title":"\u5f00\u542f\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7","text":"

\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\u9ed8\u8ba4\u4e3a\u5173\u95ed\u72b6\u6001\uff0c\u82e5\u9700\u8981\u5f00\u542f\uff0c\u53ef\u4ee5\u6309\u7167\u5982\u4e0b\u6b65\u9aa4\uff1a

  1. \u9009\u4e2d\u5df2\u63a5\u5165\u5e76\u4e14\u9700\u8981\u5f00\u542f\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\u7684\u96c6\u7fa4

  2. \u8fdb\u5165 helm \u5e94\u7528\u7ba1\u7406\u9875\u9762\uff0c\u66f4\u65b0 insight-agent \u914d\u7f6e \uff08\u82e5\u672a\u5b89\u88c5 insight-agent\uff0c\u53ef\u4ee5\u5b89\u88c5 insight-agent\uff09

  3. \u5f00\u542f/\u5173\u95ed\u91c7\u96c6 K8s \u5ba1\u8ba1\u65e5\u5fd7\u6309\u94ae

  4. \u63a5\u5165\u96c6\u7fa4\u7684\u60c5\u51b5\u4e0b\u5f00\u5173\u540e\u4ecd\u9700\u8981\u91cd\u542f fluent-bit pod \u624d\u80fd\u751f\u6548

"},{"location":"admin/ghippo/audit/open-k8s-audit.html","title":"\u751f\u6210 K8s \u5ba1\u8ba1\u65e5\u5fd7","text":"

\u9ed8\u8ba4 Kubernetes \u96c6\u7fa4\u4e0d\u4f1a\u751f\u6210\u5ba1\u8ba1\u65e5\u5fd7\u4fe1\u606f\u3002\u901a\u8fc7\u4ee5\u4e0b\u914d\u7f6e\uff0c\u53ef\u4ee5\u5f00\u542f Kubernetes \u7684\u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\u3002

Note

\u516c\u6709\u4e91\u73af\u5883\u4e2d\u53ef\u80fd\u65e0\u6cd5\u63a7\u5236 Kubernetes \u5ba1\u8ba1\u65e5\u5fd7\u8f93\u51fa\u53ca\u8f93\u51fa\u8def\u5f84\u3002

  1. \u51c6\u5907\u5ba1\u8ba1\u65e5\u5fd7\u7684 Policy \u6587\u4ef6
  2. \u914d\u7f6e API \u670d\u52a1\u5668\uff0c\u5f00\u542f\u5ba1\u8ba1\u65e5\u5fd7
  3. \u91cd\u542f\u5e76\u9a8c\u8bc1
"},{"location":"admin/ghippo/audit/open-k8s-audit.html#policy","title":"\u51c6\u5907\u5ba1\u8ba1\u65e5\u5fd7 Policy \u6587\u4ef6","text":"\u70b9\u51fb\u67e5\u770b\u5ba1\u8ba1\u65e5\u5fd7 Policy YAML \u6587\u4ef6 policy.yaml
apiVersion: audit.k8s.io/v1\nkind: Policy\nrules:\n# The following requests were manually identified as high-volume and low-risk,\n# so drop them.\n- level: None\n  users: [\"system:kube-proxy\"]\n  verbs: [\"watch\"]\n  resources:\n   - group: \"\" # core\n     resources: [\"endpoints\", \"services\", \"services/status\"]\n- level: None\n  # Ingress controller reads `configmaps/ingress-uid` through the unsecured port.\n  # TODO(#46983): Change this to the ingress controller service account.\n  users: [\"system:unsecured\"]\n  namespaces: [\"kube-system\"]\n  verbs: [\"get\"]\n  resources:\n   - group: \"\" # core\n     resources: [\"configmaps\"]\n- level: None\n  users: [\"kubelet\"] # legacy kubelet identity\n  verbs: [\"get\"]\n  resources:\n   - group: \"\" # core\n     resources: [\"nodes\", \"nodes/status\"]\n- level: None\n  userGroups: [\"system:nodes\"]\n  verbs: [\"get\"]\n  resources:\n   - group: \"\" # core\n     resources: [\"nodes\", \"nodes/status\"]\n- level: None\n  users:\n   - system:kube-controller-manager\n   - system:kube-scheduler\n   - system:serviceaccount:kube-system:endpoint-controller\n     verbs: [\"get\", \"update\"]\n     namespaces: [\"kube-system\"]\n     resources:\n   - group: \"\" # core\n     resources: [\"endpoints\"]\n- level: None\n  users: [\"system:apiserver\"]\n  verbs: [\"get\"]\n  resources:\n   - group: \"\" # core\n     resources: [\"namespaces\", \"namespaces/status\", \"namespaces/finalize\"]\n# Don't log HPA fetching metrics.\n- level: None\n  users:\n   - system:kube-controller-manager\n     verbs: [\"get\", \"list\"]\n     resources:\n   - group: \"metrics.k8s.io\"\n# Don't log these read-only URLs.\n- level: None\n  nonResourceURLs:\n   - /healthz*\n   - /version\n   - /swagger*\n# Don't log events requests.\n- level: None\n  resources:\n   - group: \"\" # core\n     resources: [\"events\"]\n# Secrets, ConfigMaps, TokenRequest and TokenReviews can contain sensitive & binary data,\n# so only log at the Metadata level.\n- level: Metadata\n  resources:\n   - group: \"\" # core\n     resources: [\"secrets\", \"configmaps\", \"serviceaccounts/token\"]\n   - group: authentication.k8s.io\n     resources: [\"tokenreviews\"]\n     omitStages:\n   - \"RequestReceived\"\n# Get responses can be large; skip them.\n- level: Request\n  verbs: [\"get\", \"list\", \"watch\"]\n  resources:\n   - group: \"\" # core\n   - group: \"admissionregistration.k8s.io\"\n   - group: \"apiextensions.k8s.io\"\n   - group: \"apiregistration.k8s.io\"\n   - group: \"apps\"\n   - group: \"authentication.k8s.io\"\n   - group: \"authorization.k8s.io\"\n   - group: \"autoscaling\"\n   - group: \"batch\"\n   - group: \"certificates.k8s.io\"\n   - group: \"extensions\"\n   - group: \"metrics.k8s.io\"\n   - group: \"networking.k8s.io\"\n   - group: \"policy\"\n   - group: \"rbac.authorization.k8s.io\"\n   - group: \"settings.k8s.io\"\n   - group: \"storage.k8s.io\"\n     omitStages:\n   - \"RequestReceived\"\n# Default level for known APIs\n- level: RequestResponse\n  resources:\n   - group: \"\" # core\n   - group: \"admissionregistration.k8s.io\"\n   - group: \"apiextensions.k8s.io\"\n   - group: \"apiregistration.k8s.io\"\n   - group: \"apps\"\n   - group: \"authentication.k8s.io\"\n   - group: \"authorization.k8s.io\"\n   - group: \"autoscaling\"\n   - group: \"batch\"\n   - group: \"certificates.k8s.io\"\n   - group: \"extensions\"\n   - group: \"metrics.k8s.io\"\n   - group: \"networking.k8s.io\"\n   - group: \"policy\"\n   - group: \"rbac.authorization.k8s.io\"\n   - group: \"settings.k8s.io\"\n   - group: \"storage.k8s.io\"\n     omitStages:\n   - \"RequestReceived\"\n# Default level for all other requests.\n- level: Metadata\n  omitStages:\n   - \"RequestReceived\"\n

\u5c06\u4ee5\u4e0a\u5ba1\u8ba1\u65e5\u5fd7\u6587\u4ef6\u653e\u5230 /etc/kubernetes/audit-policy/ \u6587\u4ef6\u5939\u4e0b\uff0c\u5e76\u53d6\u540d\u4e3a apiserver-audit-policy.yaml \u3002

"},{"location":"admin/ghippo/audit/open-k8s-audit.html#api","title":"\u914d\u7f6e API \u670d\u52a1\u5668","text":"

\u6253\u5f00 API \u670d\u52a1\u5668\u7684\u914d\u7f6e\u6587\u4ef6 kube-apiserver.yaml \uff0c\u4e00\u822c\u4f1a\u5728 /etc/kubernetes/manifests/ \u6587\u4ef6\u5939\u4e0b\uff0c\u5e76\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\u4fe1\u606f\uff1a

\u8fd9\u4e00\u6b65\u64cd\u4f5c\u524d\u8bf7\u5907\u4efd kube-apiserver.yaml \uff0c\u5e76\u4e14\u5907\u4efd\u7684\u6587\u4ef6\u4e0d\u80fd\u653e\u5728 /etc/kubernetes/manifests/ \u4e0b\uff0c\u5efa\u8bae\u653e\u5728 /etc/kubernetes/tmp \u3002

  1. \u5728 spec.containers.command \u4e0b\u6dfb\u52a0\u547d\u4ee4\uff1a

    --audit-log-maxage=30\n--audit-log-maxbackup=10\n--audit-log-maxsize=100\n--audit-log-path=/var/log/audit/kube-apiserver-audit.log\n--audit-policy-file=/etc/kubernetes/audit-policy/apiserver-audit-policy.yaml\n
  2. \u5728 spec.containers.volumeMounts \u4e0b\u6dfb\u52a0\uff1a

    - mountPath: /var/log/audit\n  name: audit-logs\n- mountPath: /etc/kubernetes/audit-policy\n  name: audit-policy\n
  3. \u5728 spec.volumes \u4e0b\u6dfb\u52a0\uff1a

    - hostPath:\n  path: /var/log/kubernetes/audit\n  type: \"\"\n  name: audit-logs\n- hostPath:\n  path: /etc/kubernetes/audit-policy\n  type: \"\"\n  name: audit-policy\n
"},{"location":"admin/ghippo/audit/open-k8s-audit.html#_1","title":"\u6d4b\u8bd5\u5e76\u9a8c\u8bc1","text":"

\u7a0d\u7b49\u4e00\u4f1a\uff0cAPI \u670d\u52a1\u5668\u4f1a\u81ea\u52a8\u91cd\u542f\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b /var/log/kubernetes/audit \u76ee\u5f55\u4e0b\u662f\u5426\u6709\u5ba1\u8ba1\u65e5\u5fd7\u751f\u6210\uff0c\u82e5\u6709\uff0c\u5219\u8868\u793a K8s \u5ba1\u8ba1\u65e5\u5fd7\u6210\u529f\u5f00\u542f\u3002

ls /var/log/kubernetes/audit\n

\u5982\u679c\u60f3\u5173\u95ed\uff0c\u53bb\u6389 spec.containers.command \u4e2d\u7684\u76f8\u5173\u547d\u4ee4\u5373\u53ef\u3002

"},{"location":"admin/ghippo/audit/source-ip.html","title":"\u5ba1\u8ba1\u65e5\u5fd7\u83b7\u53d6\u6e90 IP","text":"

\u5ba1\u8ba1\u65e5\u5fd7\u6e90 IP \u5728\u7cfb\u7edf\u548c\u7f51\u7edc\u7ba1\u7406\u4e2d\u626e\u6f14\u7740\u5173\u952e\u89d2\u8272\uff0c\u5b83\u6709\u52a9\u4e8e\u8ffd\u8e2a\u6d3b\u52a8\u3001\u7ef4\u62a4\u5b89\u5168\u3001\u89e3\u51b3\u95ee\u9898\u5e76\u786e\u4fdd\u7cfb\u7edf\u5408\u89c4\u6027\u3002 \u4f46\u662f\u83b7\u53d6\u6e90 IP \u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u8017\uff0c\u6240\u4ee5\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u5ba1\u8ba1\u65e5\u5fd7\u5e76\u4e0d\u603b\u662f\u5f00\u542f\u7684\uff0c \u5728\u4e0d\u540c\u7684\u5b89\u88c5\u6a21\u5f0f\u4e0b\uff0c\u5ba1\u8ba1\u65e5\u5fd7\u6e90 IP \u7684\u9ed8\u8ba4\u5f00\u542f\u60c5\u51b5\u4e0d\u540c\uff0c\u5e76\u4e14\u5f00\u542f\u7684\u65b9\u5f0f\u4e0d\u540c\u3002 \u4e0b\u9762\u4f1a\u6839\u636e\u5b89\u88c5\u6a21\u5f0f\u5206\u522b\u4ecb\u7ecd\u5ba1\u8ba1\u65e5\u5fd7\u6e90 IP \u7684\u9ed8\u8ba4\u5f00\u542f\u60c5\u51b5\u4ee5\u53ca\u5982\u4f55\u5f00\u542f\u3002

Note

\u5f00\u542f\u5ba1\u8ba1\u65e5\u5fd7\u4f1a\u4fee\u6539 istio-ingressgateway \u7684\u526f\u672c\u6570\uff0c\u5e26\u6765\u4e00\u5b9a\u7684\u6027\u80fd\u635f\u8017\u3002 \u5f00\u542f\u5ba1\u8ba1\u65e5\u5fd7\u9700\u8981\u5173\u95ed kube-proxy \u7684\u8d1f\u8f7d\u5747\u8861\u4ee5\u53ca\u62d3\u6251\u611f\u77e5\u8def\u7531\uff0c\u4f1a\u5bf9\u96c6\u7fa4\u6027\u80fd\u4ea7\u751f\u4e00\u5b9a\u7684\u5f71\u54cd\u3002 \u5f00\u542f\u5ba1\u8ba1\u65e5\u5fd7\u540e\uff0c\u8bbf\u95eeIP\u6240\u5bf9\u5e94\u7684\u8282\u70b9\u4e0a\u5fc5\u987b\u4fdd\u8bc1\u5b58\u5728 istio-ingressgateway \uff0c\u82e5\u56e0\u4e3a\u8282\u70b9\u5065\u5eb7\u6216\u5176\u4ed6\u95ee\u9898\u5bfc\u81f4 istio-ingressgateway \u53d1\u751f\u6f02\u79fb\uff0c\u9700\u8981\u624b\u52a8\u8c03\u5ea6\u56de\u8be5\u8282\u70b9\uff0c\u5426\u5219\u4f1a\u5f71\u54cd\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u6b63\u5e38\u4f7f\u7528\u3002

"},{"location":"admin/ghippo/audit/source-ip.html#_1","title":"\u5224\u65ad\u5b89\u88c5\u6a21\u5f0f\u7684\u65b9\u6cd5","text":"
kubectl get pod -n metallb-system\n

\u5728\u96c6\u7fa4\u4e2d\u6267\u884c\u4e0a\u9762\u7684\u547d\u4ee4\uff0c\u82e5\u8fd4\u56de\u7ed3\u679c\u5982\u4e0b\uff0c\u5219\u8868\u793a\u8be5\u96c6\u7fa4\u4e3a\u975e MetalLB \u5b89\u88c5\u6a21\u5f0f

No resources found in metallbs-system namespace.\n
"},{"location":"admin/ghippo/audit/source-ip.html#nodeport","title":"NodePort \u5b89\u88c5\u6a21\u5f0f","text":"

\u8be5\u6a21\u5f0f\u5b89\u88c5\u4e0b\uff0c\u5ba1\u8ba1\u65e5\u5fd7\u6e90 IP \u9ed8\u8ba4\u662f\u5173\u95ed\u7684\uff0c\u5f00\u542f\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u8bbe\u7f6e istio-ingressgateway \u7684 HPA \u7684\u6700\u5c0f\u526f\u672c\u6570\u4e3a\u63a7\u5236\u9762\u8282\u70b9\u6570

    count=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane | wc -l)\ncount=$((count-1))\n\nkubectl patch hpa istio-ingressgateway -n istio-system -p '{\"spec\":{\"minReplicas\":'$count'}}'\n
  2. \u4fee\u6539 istio-ingressgateway \u7684 service \u7684 externalTrafficPolicy \u548c internalTrafficPolicy \u503c\u4e3a \"Local\"

    kubectl patch svc istio-ingressgateway -n istio-system -p '{\"spec\":{\"externalTrafficPolicy\":\"Local\",\"internalTrafficPolicy\":\"Local\"}}'\n
"},{"location":"admin/ghippo/audit/source-ip.html#metallb","title":"MetalLB \u5b89\u88c5\u6a21\u5f0f","text":"

\u8be5\u6a21\u5f0f\u4e0b\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u4f1a\u9ed8\u8ba4\u83b7\u53d6\u5ba1\u8ba1\u65e5\u5fd7\u6e90 IP\u3002

"},{"location":"admin/ghippo/audit/gproduct-audit/ghippo.html","title":"\u5168\u5c40\u7ba1\u7406\u5ba1\u8ba1\u9879\u6c47\u603b","text":"\u4e8b\u4ef6\u540d\u79f0 \u8d44\u6e90\u7c7b\u578b \u5907\u6ce8 \u4fee\u6539\u7528\u6237email\uff1aUpdateEmail-Account Account \u4fee\u6539\u7528\u6237\u5bc6\u7801\uff1aUpdatePassword-Account Account \u521b\u5efask\uff1aCreateAccessKeys-Account Account \u4fee\u6539sk\uff1aUpdateAccessKeys-Account Account \u5220\u9664sk\uff1aDeleteAccessKeys-Account Account \u521b\u5efa\u7528\u6237\uff1aCreate-User User \u5220\u9664\u7528\u6237\uff1aDelete-User User \u66f4\u65b0\u7528\u6237\u4fe1\u606f\uff1aUpdate-User User \u66f4\u65b0\u7528\u6237\u89d2\u8272\uff1a UpdateRoles-User User \u8bbe\u7f6e\u7528\u6237\u5bc6\u7801\uff1a UpdatePassword-User User \u521b\u5efa\u7528\u6237\u5bc6\u94a5\uff1a CreateAccessKeys-User User \u66f4\u65b0\u7528\u6237\u5bc6\u94a5\uff1a UpdateAccessKeys-User User \u5220\u9664\u7528\u6237\u5bc6\u94a5\uff1aDeleteAccessKeys-User User \u521b\u5efa\u7528\u6237\u7ec4\uff1aCreate-Group Group \u5220\u9664\u7528\u6237\u7ec4\uff1aDelete-Group Group \u66f4\u65b0\u7528\u6237\u7ec4\uff1aUpdate-Group Group \u6dfb\u52a0\u7528\u6237\u81f3\u7528\u6237\u7ec4\uff1aAddUserTo-Group Group \u4ece\u7528\u6237\u7ec4\u5220\u9664\u7528\u6237\uff1a RemoveUserFrom-Group Group \u66f4\u65b0\u7528\u6237\u7ec4\u89d2\u8272\uff1a UpdateRoles-Group Group \u89d2\u8272\u5173\u8054\u7528\u6237\uff1aUpdateRoles-User User \u521b\u5efaLdap \uff1aCreate-LADP LADP \u66f4\u65b0Ldap\uff1aUpdate-LADP LADP \u5220\u9664Ldap \uff1a Delete-LADP LADP OIDC\u6ca1\u6709\u8d70APIserver\u5ba1\u8ba1\u4e0d\u5230 \u767b\u5f55\uff1aLogin-User User \u767b\u51fa\uff1aLogout-User User \u8bbe\u7f6e\u5bc6\u7801\u7b56\u7565\uff1aUpdatePassword-SecurityPolicy SecurityPolicy \u8bbe\u7f6e\u4f1a\u8bdd\u8d85\u65f6\uff1aUpdateSessionTimeout-SecurityPolicy SecurityPolicy \u8bbe\u7f6e\u8d26\u53f7\u9501\u5b9a\uff1aUpdateAccountLockout-SecurityPolicy SecurityPolicy \u8bbe\u7f6e\u81ea\u52a8\u767b\u51fa\uff1aUpdateLogout-SecurityPolicy SecurityPolicy \u90ae\u4ef6\u670d\u52a1\u5668\u8bbe\u7f6e MailServer-SecurityPolicy SecurityPolicy \u5916\u89c2\u5b9a\u5236 CustomAppearance-SecurityPolicy SecurityPolicy \u6b63\u7248\u6388\u6743 OfficialAuthz-SecurityPolicy SecurityPolicy \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\uff1aCreate-Workspace Workspace \u5220\u9664\u5de5\u4f5c\u7a7a\u95f4\uff1aDelete-Workspace Workspace \u7ed1\u5b9a\u8d44\u6e90\uff1aBindResourceTo-Workspace Workspace \u89e3\u7ed1\u8d44\u6e90\uff1aUnBindResource-Workspace Workspace \u7ed1\u5b9a\u5171\u4eab\u8d44\u6e90\uff1aBindShared-Workspace Workspace \u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff1aSetQuota-Workspace Workspace \u5de5\u4f5c\u7a7a\u95f4\u6388\u6743\uff1aAuthorize-Workspace Workspace \u5220\u9664\u6388\u6743 DeAuthorize-Workspace Workspace \u7f16\u8f91\u6388\u6743 UpdateDeAuthorize-Workspace Workspace \u66f4\u65b0\u5de5\u4f5c\u7a7a\u95f4 Update-Workspace Workspace \u521b\u5efa\u6587\u4ef6\u5939\uff1aCreate-Folder Folder \u5220\u9664\u6587\u4ef6\u5939\uff1aDelete-Folder Folder \u7f16\u8f91\u6587\u4ef6\u5939\u6388\u6743\uff1aUpdateAuthorize-Folder Folder \u66f4\u65b0\u6587\u4ef6\u5939\uff1aUpdate-Folder Folder \u65b0\u589e\u6587\u4ef6\u5939\u6388\u6743\uff1aAuthorize-Folder Folder \u5220\u9664\u6587\u4ef6\u5939\u6388\u6743\uff1aDeAuthorize-Folder Folder \u8bbe\u7f6e\u5ba1\u8ba1\u65e5\u5fd7\u81ea\u52a8\u6e05\u7406\uff1aAutoCleanup-Audit Audit \u624b\u52a8\u6e05\u7406\u5ba1\u8ba1\u65e5\u5fd7\uff1aManualCleanup-Audit Audit \u5bfc\u51fa\u5ba1\u8ba1\u65e5\u5fd7\uff1aExport-Audit Audit"},{"location":"admin/ghippo/audit/gproduct-audit/insight.html","title":"\u53ef\u89c2\u6d4b\u6027\u5ba1\u8ba1\u9879\u6c47\u603b","text":"\u4e8b\u4ef6\u540d\u79f0 \u8d44\u6e90\u7c7b\u578b \u5907\u6ce8 \u521b\u5efa\u62e8\u6d4b\u4efb\u52a1\uff1aCreate-ProbeJob ProbeJob \u7f16\u8f91\u62e8\u6d4b\u4efb\u52a1\uff1aUpdate-ProbeJob ProbeJob \u5220\u9664\u62e8\u6d4b\u4efb\u52a1\uff1aDelete-ProbeJob ProbeJob \u521b\u5efa\u544a\u8b66\u7b56\u7565\uff1aCreate-AlertPolicy AlertPolicy \u7f16\u8f91\u544a\u8b66\u7b56\u7565\uff1aUpdate-AlertPolicy AlertPolicy \u5220\u9664\u544a\u8b66\u7b56\u7565\uff1aDelete-AlertPolicy AlertPolicy \u5bfc\u5165\u544a\u8b66\u7b56\u7565\uff1aImport-AlertPolicy AlertPolicy \u5728\u544a\u8b66\u7b56\u7565\u4e2d\u6dfb\u52a0\u89c4\u5219\uff1aCreate-AlertRule AlertRule \u5728\u544a\u8b66\u7b56\u7565\u4e2d\u7f16\u8f91\u89c4\u5219\uff1aUpdate-AlertRule AlertRule \u5728\u544a\u8b66\u7b56\u7565\u4e2d\u5220\u9664\u89c4\u5219\uff1aDelete-AlertRule AlertRule \u521b\u5efa\u544a\u8b66\u6a21\u677f\uff1aCreate-RuleTemplate RuleTemplate \u7f16\u8f91\u544a\u8b66\u6a21\u677f\uff1aUpdate-RuleTemplate RuleTemplate \u5220\u9664\u544a\u8b66\u6a21\u677f\uff1aDelete-RuleTemplate RuleTemplate \u521b\u5efa\u90ae\u7bb1\u7ec4\uff1aCreate-email email \u7f16\u8f91\u90ae\u7bb1\u7ec4\uff1aUpdate-email email \u5220\u9664\u90ae\u7bb1\u7ec4\uff1aDelete-Receiver Receiver \u521b\u5efa\u9489\u9489\u673a\u5668\u4eba\uff1aCreate-dingtalk dingtalk \u7f16\u8f91\u9489\u9489\u673a\u5668\u4eba\uff1aUpdate-dingtalk dingtalk \u5220\u9664\u9489\u9489\u673a\u5668\u4eba\uff1aDelete-Receiver Receiver \u521b\u5efa\u4f01\u5fae\u673a\u5668\u4eba\uff1aCreate-wecom wecom \u7f16\u8f91\u4f01\u5fae\u673a\u5668\u4eba\uff1aUpdate-wecom wecom \u5220\u9664\u4f01\u5fae\u673a\u5668\u4eba\uff1aDelete-Receiver Receiver \u521b\u5efa Webhook\uff1aCreate-webhook webhook \u7f16\u8f91 Webhook\uff1aUpdate-webhook webhook \u5220\u9664 Webhook\uff1aDelete-Receiver Receiver \u521b\u5efa SMS\uff1aCreate-sms sms \u7f16\u8f91 SMS\uff1aUpdate-sms sms \u5220\u9664 SMS\uff1aDelete-Receiver Receiver \u521b\u5efa SMS \u670d\u52a1\u5668\uff1aCreate-aliyun(\u6216\u8005\uff1atencent\uff0ccustom) aliyun, tencent, custom \u7f16\u8f91 SMS \u670d\u52a1\u5668\uff1aUpdate-aliyun(\u6216\u8005\uff1atencent\uff0ccustom) aliyun, tencent, custom \u5220\u9664 SMS \u670d\u52a1\u5668\uff1aDelete-SMSserver SMSserver \u521b\u5efa\u6d88\u606f\u6a21\u677f\uff1aCreate-MessageTemplate MessageTemplate \u7f16\u8f91\u6d88\u606f\u6a21\u677f\uff1aUpdate-MessageTemplate MessageTemplate \u5220\u9664\u6d88\u606f\u6a21\u677f\uff1aDelete-MessageTemplate MessageTemplate \u521b\u5efa\u544a\u8b66\u9759\u9ed8\uff1aCreate-AlertSilence AlertSilence \u7f16\u8f91\u544a\u8b66\u9759\u9ed8\uff1aUpdate-AlertSilence AlertSilence \u5220\u9664\u544a\u8b66\u9759\u9ed8\uff1aDelete-AlertSilence AlertSilence \u521b\u5efa\u544a\u8b66\u6291\u5236\u89c4\u5219\uff1aCreate-AlertInhibition AlertInhibition \u7f16\u8f91\u544a\u8b66\u6291\u5236\u89c4\u5219\uff1aUpdate-AlertInhibition AlertInhibition \u5220\u9664\u544a\u8b66\u6291\u5236\u89c4\u5219\uff1aDelete-AlertInhibition AlertInhibition \u66f4\u65b0\u7cfb\u7edf\u914d\u7f6e\uff1aUpdate-SystemSettings SystemSettings"},{"location":"admin/ghippo/audit/gproduct-audit/kpanda.html","title":"\u5bb9\u5668\u7ba1\u7406\u5ba1\u8ba1\u9879\u6c47\u603b","text":"\u4e8b\u4ef6\u540d\u79f0 \u8d44\u6e90\u7c7b\u578b \u521b\u5efa\u96c6\u7fa4\uff1aCreate-Cluster Cluster \u5378\u8f7d\u96c6\u7fa4\uff1aDelete-Cluster Cluster \u63a5\u5165\u96c6\u7fa4\uff1aIntegrate-Cluster Cluster \u89e3\u9664\u63a5\u5165\u7684\u96c6\u7fa4\uff1aRemove-Cluster Cluster \u96c6\u7fa4\u5347\u7ea7\uff1aUpgrade-Cluster Cluster \u96c6\u7fa4\u63a5\u5165\u8282\u70b9\uff1aIntegrate-Node Node \u96c6\u7fa4\u8282\u70b9\u79fb\u9664\uff1aRemove-Node Node \u96c6\u7fa4\u8282\u70b9 GPU \u6a21\u5f0f\u5207\u6362\uff1aUpdate-NodeGPUMode NodeGPUMode helm\u4ed3\u5e93\u521b\u5efa\uff1aCreate-HelmRepo HelmRepo helm\u5e94\u7528\u90e8\u7f72\uff1aCreate-HelmApp HelmApp helm\u5e94\u7528\u5220\u9664\uff1aDelete-HelmApp HelmApp \u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\uff1aCreate-Deployment Deployment \u5220\u9664\u65e0\u72b6\u6001\u8d1f\u8f7d\uff1aDelete-Deployment Deployment \u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b\uff1aCreate-DaemonSet DaemonSet \u5220\u9664\u5b88\u62a4\u8fdb\u7a0b\uff1aDelete-DaemonSet DaemonSet \u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\uff1aCreate-StatefulSet StatefulSet \u5220\u9664\u6709\u72b6\u6001\u8d1f\u8f7d\uff1aDelete-StatefulSet StatefulSet \u521b\u5efa\u4efb\u52a1\uff1aCreate-Job Job \u5220\u9664\u4efb\u52a1\uff1aDelete-Job Job \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\uff1aCreate-CronJob CronJob \u5220\u9664\u5b9a\u65f6\u4efb\u52a1\uff1aDelete-CronJob CronJob \u5220\u9664\u5bb9\u5668\u7ec4\uff1aDelete-Pod Pod \u521b\u5efa\u670d\u52a1\uff1aCreate-Service Service \u5220\u9664\u670d\u52a1\uff1aDelete-Service Service \u521b\u5efa\u8def\u7531\uff1aCreate-Ingress Ingress \u5220\u9664\u8def\u7531\uff1aDelete-Ingress Ingress \u521b\u5efa\u5b58\u50a8\u6c60\uff1aCreate-StorageClass StorageClass \u5220\u9664\u5b58\u50a8\u6c60\uff1aDelete-StorageClass StorageClass \u521b\u5efa\u6570\u636e\u5377\uff1aCreate-PersistentVolume PersistentVolume \u5220\u9664\u6570\u636e\u5377\uff1aDelete-PersistentVolume PersistentVolume \u521b\u5efa\u6570\u636e\u5377\u58f0\u660e\uff1aCreate-PersistentVolumeClaim PersistentVolumeClaim \u5220\u9664\u6570\u636e\u5377\u58f0\u660e\uff1aDelete-PersistentVolumeClaim PersistentVolumeClaim \u5220\u9664\u526f\u672c\u96c6\uff1aDelete-ReplicaSet ReplicaSet ns\u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4\uff1aBindResourceTo-Workspace Workspace ns\u89e3\u7ed1\u5de5\u4f5c\u7a7a\u95f4 \uff1aUnBindResource-Workspace Workspace \u96c6\u7fa4\u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4\uff1aBindResourceTo-Workspace Workspace \u96c6\u7fa4\u89e3\u7ed1\u5de5\u4f5c\u7a7a\u95f4\uff1aUnBindResource-Workspace Workspace \u6253\u5f00\u63a7\u5236\u53f0\uff1aCreate-CloudShell CloudShell \u5173\u95ed\u63a7\u5236\u53f0\uff1aDelete-CloudShell CloudShell"},{"location":"admin/ghippo/audit/gproduct-audit/virtnest.html","title":"\u4e91\u4e3b\u673a\u5ba1\u8ba1\u9879\u6c47\u603b","text":"\u4e8b\u4ef6\u540d\u79f0 \u8d44\u6e90\u7c7b\u578b \u5907\u6ce8 \u91cd\u542f\u4e91\u4e3b\u673a\uff1aRestart-VMs VM \u4e91\u4e3b\u673a\u8f6c\u6362\u4e3a\u6a21\u677f\uff1aConvertToTemplate-VMs VM \u7f16\u8f91\u4e91\u4e3b\u673a\uff1aEdit-VMs VM \u66f4\u65b0\u4e91\u4e3b\u673a\uff1aUpdate-VMs VM \u5feb\u7167\u6062\u590d\uff1aRestore-VMs VM \u5f00\u673a\u4e91\u4e3b\u673a\uff1aPower on-VMs VM \u5b9e\u65f6\u8fc1\u79fb\uff1aLiveMigrate-VMs VM \u5220\u9664\u4e91\u4e3b\u673a\uff1aDelete-VMs VM \u5220\u9664\u4e91\u4e3b\u673a\u6a21\u677f\uff1aDelete-VM Template VM Template \u521b\u5efa\u4e91\u4e3b\u673a\uff1aCreate-VMs VM \u521b\u5efa\u5feb\u7167\uff1aCreateSnapshot-VMs VM \u5173\u673a\u4e91\u4e3b\u673a\uff1aPower off-VMs VM \u514b\u9686\u4e91\u4e3b\u673a\uff1aClone-VMs VM"},{"location":"admin/ghippo/best-practice/authz-plan.html","title":"\u666e\u901a\u7528\u6237\u6388\u6743\u89c4\u5212","text":"

\u666e\u901a\u7528\u6237\u662f\u6307\u80fd\u591f\u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5927\u90e8\u5206\u4ea7\u54c1\u6a21\u5757\u53ca\u529f\u80fd\uff08\u7ba1\u7406\u529f\u80fd\u9664\u5916\uff09\uff0c\u5bf9\u6743\u9650\u8303\u56f4\u5185\u7684\u8d44\u6e90\u6709\u4e00\u5b9a\u7684\u64cd\u4f5c\u6743\u9650\uff0c\u80fd\u591f\u72ec\u7acb\u4f7f\u7528\u8d44\u6e90\u90e8\u7f72\u5e94\u7528\u3002

\u5bf9\u8fd9\u7c7b\u7528\u6237\u7684\u6388\u6743\u53ca\u8d44\u6e90\u89c4\u5212\u6d41\u7a0b\u5982\u4e0b\u56fe\u6240\u793a\u3002

graph TB\n\n    start([\u5f00\u59cb]) --> user[1. \u521b\u5efa\u7528\u6237]\n    user --> ns[2. \u51c6\u5907 Kubernetes \u547d\u540d\u7a7a\u95f4]\n    ns --> ws[3. \u51c6\u5907\u5de5\u4f5c\u7a7a\u95f4]\n    ws --> ws-to-ns[4. \u5de5\u4f5c\u7a7a\u95f4\u7ed1\u5b9a\u547d\u540d\u7a7a\u95f4]\n    ws-to-ns --> authu[5. \u7ed9\u7528\u6237\u6388\u6743 Workspace Editor]\n    authu --> complete([\u7ed3\u675f])\n\nclick user \"https://docs.daocloud.io/ghippo/user-guide/access-control/user/\"\nclick ns \"https://docs.daocloud.io/kpanda/user-guide/namespaces/createns/\"\nclick ws \"https://docs.daocloud.io/ghippo/user-guide/workspace/workspace/\"\nclick ws-to-ns \"https://docs.daocloud.io/ghippo/user-guide/workspace/ws-to-ns/\"\nclick authu \"https://docs.daocloud.io/ghippo/user-guide/workspace/ws-permission/\"\n\n classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;\n classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;\n classDef cluster fill:#fff,stroke:#bbb,stroke-width:1px,color:#326ce5;\n class user,ns,ws,ws-to-ns,authu cluster;\n class start,complete plain;

\u6388\u6743\u540e\u666e\u901a\u7528\u6237\u5728\u5404\u6a21\u5757\u7684\u6743\u9650\u4e3a\uff1a

  • \u5e94\u7528\u5de5\u4f5c\u53f0
  • \u5fae\u670d\u52a1\u5f15\u64ce
  • \u670d\u52a1\u7f51\u683c\uff08\u9700\u8981\u91cd\u590d 2 - 4 \u51c6\u5907\u7f51\u683c/\u7f51\u683c\u547d\u540d\u7a7a\u95f4\u5e76\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\uff09
  • \u53ef\u89c2\u6d4b\u6027
  • \u6570\u636e\u670d\u52a1
"},{"location":"admin/ghippo/best-practice/cluster-for-multiws.html","title":"\u5c06\u96c6\u7fa4\u5206\u914d\u7ed9\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09","text":"

\u96c6\u7fa4\u8d44\u6e90\u901a\u5e38\u7531\u8fd0\u7ef4\u4eba\u5458\u8fdb\u884c\u7ba1\u7406\u3002\u5728\u5206\u914d\u8d44\u6e90\u5206\u914d\u65f6\uff0c\u4ed6\u4eec\u9700\u8981\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u6765\u9694\u79bb\u8d44\u6e90\uff0c\u5e76\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\u3002 \u8fd9\u79cd\u65b9\u5f0f\u6709\u4e2a\u5f0a\u7aef\uff0c\u5982\u679c\u4f01\u4e1a\u7684\u4e1a\u52a1\u91cf\u5f88\u5927\uff0c\u624b\u52a8\u5206\u914d\u8d44\u6e90\u9700\u8981\u8f83\u5927\u7684\u5de5\u4f5c\u91cf\uff0c\u800c\u60f3\u8981\u7075\u6d3b\u8c03\u914d\u8d44\u6e90\u989d\u5ea6\u4e5f\u6709\u4e0d\u5c0f\u96be\u5ea6\u3002

AI \u7b97\u529b\u4e2d\u5fc3\u4e3a\u6b64\u5f15\u5165\u4e86\u5de5\u4f5c\u7a7a\u95f4\u7684\u6982\u5ff5\u3002\u5de5\u4f5c\u7a7a\u95f4\u901a\u8fc7\u5171\u4eab\u8d44\u6e90\u53ef\u4ee5\u63d0\u4f9b\u66f4\u9ad8\u7ef4\u5ea6\u7684\u8d44\u6e90\u9650\u989d\u80fd\u529b\uff0c\u5b9e\u73b0\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u5728\u8d44\u6e90\u9650\u989d\u4e0b\u81ea\u52a9\u5f0f\u521b\u5efa Kubernetes \u547d\u540d\u7a7a\u95f4\u7684\u80fd\u529b\u3002

\u4e3e\u4f8b\u800c\u8a00\uff0c\u5982\u679c\u60f3\u8981\u8ba9\u51e0\u4e2a\u90e8\u95e8\u5171\u4eab\u4e0d\u540c\u7684\u96c6\u7fa4\u3002

Cluster01\uff08\u666e\u901a\uff09 Cluster02\uff08\u9ad8\u53ef\u7528\uff09 \u90e8\u95e8\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09A 50 quota 10 quota \u90e8\u95e8\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09B 100 quota 20 quota

\u53ef\u4ee5\u53c2\u7167\u4ee5\u4e0b\u6d41\u7a0b\u5c06\u96c6\u7fa4\u5206\u4eab\u7ed9\u591a\u4e2a\u90e8\u95e8/\u5de5\u4f5c\u7a7a\u95f4/\u79df\u6237\uff1a

graph TB\n\npreparews[\u51c6\u5907\u5de5\u4f5c\u7a7a\u95f4] --> preparecs[\u51c6\u5907\u96c6\u7fa4]\n--> share[\u5c06\u96c6\u7fa4\u5171\u4eab\u5230\u5de5\u4f5c\u7a7a\u95f4]\n--> judge([\u5224\u65ad\u5de5\u4f5c\u7a7a\u95f4\u5269\u4f59\u989d\u5ea6])\njudge -.\u5927\u4e8e\u5269\u4f59\u989d\u5ea6.->modifyns[\u4fee\u6539\u547d\u540d\u7a7a\u95f4\u989d\u5ea6]\njudge -.\u5c0f\u4e8e\u5269\u4f59\u989d\u5ea6.->createns[\u521b\u5efa\u547d\u540d\u7a7a\u95f4]\n\nclassDef plain fill:#ddd,stroke:#fff,stroke-width:1px,color:#000;\nclassDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;\nclassDef cluster fill:#fff,stroke:#bbb,stroke-width:1px,color:#326ce5;\n\nclass preparews,preparecs,share, cluster;\nclass judge plain\nclass modifyns,createns k8s\n\nclick preparews \"https://docs.daocloud.io/ghippo/user-guide/workspace/cluster-for-multiws/#_2\"\nclick preparecs \"https://docs.daocloud.io/ghippo/user-guide/workspace/cluster-for-multiws/#_3\"\nclick share \"https://docs.daocloud.io/ghippo/user-guide/workspace/cluster-for-multiws/#_4\"\nclick createns \"https://docs.daocloud.io/amamba/user-guide/namespace/namespace/#_3\"\nclick modifyns \"https://docs.daocloud.io/amamba/user-guide/namespace/namespace/#_4\"
"},{"location":"admin/ghippo/best-practice/cluster-for-multiws.html#_2","title":"\u51c6\u5907\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4","text":"

\u5de5\u4f5c\u7a7a\u95f4\u662f\u4e3a\u4e86\u6ee1\u8db3\u591a\u79df\u6237\u7684\u4f7f\u7528\u573a\u666f\uff0c\u57fa\u4e8e\u96c6\u7fa4\u3001\u96c6\u7fa4\u547d\u540d\u7a7a\u95f4\u3001\u7f51\u683c\u3001\u7f51\u683c\u547d\u540d\u7a7a\u95f4\u3001\u591a\u4e91\u3001\u591a\u4e91\u547d\u540d\u7a7a\u95f4\u7b49\u591a\u79cd\u8d44\u6e90\u5f62\u6210\u76f8\u4e92\u9694\u79bb\u7684\u8d44\u6e90\u73af\u5883\uff0c \u5de5\u4f5c\u7a7a\u95f4\u53ef\u4ee5\u6620\u5c04\u4e3a\u9879\u76ee\u3001\u79df\u6237\u3001\u4f01\u4e1a\u3001\u4f9b\u5e94\u5546\u7b49\u591a\u79cd\u6982\u5ff5\u3002

  1. \u4f7f\u7528 admin/folder admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u3002

  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4 \u6309\u94ae\u3002

  3. \u586b\u5199\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u3001\u6240\u5c5e\u6587\u4ef6\u5939\u7b49\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\u3002

"},{"location":"admin/ghippo/best-practice/cluster-for-multiws.html#_3","title":"\u51c6\u5907\u4e00\u4e2a\u96c6\u7fa4","text":"

\u5de5\u4f5c\u7a7a\u95f4\u662f\u4e3a\u4e86\u6ee1\u8db3\u591a\u79df\u6237\u7684\u4f7f\u7528\u573a\u666f\uff0c\u57fa\u4e8e\u96c6\u7fa4\u3001\u96c6\u7fa4\u547d\u540d\u7a7a\u95f4\u3001\u7f51\u683c\u3001\u7f51\u683c\u547d\u540d\u7a7a\u95f4\u3001\u591a\u4e91\u3001\u591a\u4e91\u547d\u540d\u7a7a\u95f4\u7b49\u591a\u79cd\u8d44\u6e90\u5f62\u6210\u76f8\u4e92\u9694\u79bb\u7684\u8d44\u6e90\u73af\u5883\uff0c\u5de5\u4f5c\u7a7a\u95f4\u53ef\u4ee5\u6620\u5c04\u4e3a\u9879\u76ee\u3001\u79df\u6237\u3001\u4f01\u4e1a\u3001\u4f9b\u5e94\u5546\u7b49\u591a\u79cd\u6982\u5ff5\u3002

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u51c6\u5907\u4e00\u4e2a\u96c6\u7fa4\u3002

  1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u9009\u62e9 \u96c6\u7fa4\u5217\u8868 \u3002

  2. \u70b9\u51fb \u521b\u5efa\u96c6\u7fa4 \u521b\u5efa\u4e00\u4e2a\u96c6\u7fa4\uff0c\u6216\u70b9\u51fb \u63a5\u5165\u96c6\u7fa4 \u63a5\u5165\u4e00\u4e2a\u96c6\u7fa4\u3002

"},{"location":"admin/ghippo/best-practice/cluster-for-multiws.html#_4","title":"\u5728\u5de5\u4f5c\u7a7a\u95f4\u6dfb\u52a0\u96c6\u7fa4","text":"

\u8fd4\u56de \u5168\u5c40\u7ba1\u7406 \uff0c\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u6dfb\u52a0\u96c6\u7fa4\u3002

  1. \u4f9d\u6b21\u70b9\u51fb \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 -> \u5171\u4eab\u8d44\u6e90 \uff0c\u70b9\u51fb\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u540e\uff0c\u70b9\u51fb \u65b0\u589e\u5171\u4eab\u8d44\u6e90 \u6309\u94ae\u3002

  2. \u9009\u62e9\u96c6\u7fa4\uff0c\u586b\u5199\u8d44\u6e90\u9650\u989d\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

\u4e0b\u4e00\u6b65\uff1a\u5c06\u96c6\u7fa4\u8d44\u6e90\u5206\u914d\u7ed9\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u540e\uff0c\u7528\u6237\u53ef\u4ee5\u524d\u5f80 \u5e94\u7528\u5de5\u4f5c\u53f0 \u5728\u8fd9\u4e9b\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u5e76\u90e8\u7f72\u5e94\u7528\u3002

"},{"location":"admin/ghippo/best-practice/folder-practice.html","title":"\u6587\u4ef6\u5939\u6700\u4f73\u5b9e\u8df5","text":"

\u6587\u4ef6\u5939\u4ee3\u8868\u4e00\u4e2a\u7ec4\u7ec7\u673a\u6784\uff08\u4f8b\u5982\u4e00\u4e2a\u90e8\u95e8\uff09\uff0c\u662f\u8d44\u6e90\u5c42\u6b21\u7ed3\u6784\u4e2d\u7684\u4e00\u4e2a\u8282\u70b9\u3002

\u4e00\u4e2a\u6587\u4ef6\u5939\u53ef\u4ee5\u5305\u542b\u5de5\u4f5c\u7a7a\u95f4\u3001\u5b50\u6587\u4ef6\u5939\u6216\u4e24\u8005\u7684\u7ec4\u5408\u3002 \u5b83\u63d0\u4f9b\u4e86\u8eab\u4efd\u7ba1\u7406\u3001\u591a\u5c42\u7ea7\u548c\u6743\u9650\u6620\u5c04\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237/\u7528\u6237\u7ec4\u5728\u6587\u4ef6\u5939\u4e2d\u7684\u89d2\u8272\u6620\u5c04\u5230\u5176\u4e0b\u7684\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u548c\u8d44\u6e90\u4e0a\u3002 \u56e0\u6b64\u501f\u52a9\u4e8e\u6587\u4ef6\u5939\uff0c\u4f01\u4e1a\u7ba1\u7406\u8005\u80fd\u591f\u96c6\u4e2d\u7ba1\u63a7\u6240\u6709\u8d44\u6e90\u3002

  1. \u6784\u5efa\u4f01\u4e1a\u5c42\u7ea7\u5173\u7cfb

    \u9996\u5148\u8981\u6309\u7167\u73b0\u6709\u7684\u4f01\u4e1a\u5c42\u7ea7\u7ed3\u6784\uff0c\u6784\u5efa\u4e0e\u4f01\u4e1a\u76f8\u540c\u7684\u6587\u4ef6\u5939\u5c42\u7ea7\u3002 AI \u7b97\u529b\u4e2d\u5fc3\u652f\u6301 5 \u7ea7\u6587\u4ef6\u5939\uff0c\u53ef\u4ee5\u6839\u636e\u4f01\u4e1a\u5b9e\u9645\u60c5\u51b5\u81ea\u7531\u7ec4\u5408\uff0c\u5c06\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u6620\u5c04\u4e3a\u4f01\u4e1a\u4e2d\u7684\u90e8\u95e8\u3001\u9879\u76ee\u3001\u4f9b\u5e94\u5546\u7b49\u5b9e\u4f53\u3002

    \u6587\u4ef6\u5939\u4e0d\u76f4\u63a5\u4e0e\u8d44\u6e90\u6302\u94a9\uff0c\u800c\u662f\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u95f4\u63a5\u5b9e\u73b0\u8d44\u6e90\u5206\u7ec4\u3002

  2. \u7528\u6237\u8eab\u4efd\u7ba1\u7406

    \u6587\u4ef6\u5939\u63d0\u4f9b\u4e86 Folder Admin\u3001Folder Editor\u3001Folder Viewer \u4e09\u79cd\u89d2\u8272\u3002 \u67e5\u770b\u89d2\u8272\u6743\u9650\uff0c\u53ef\u901a\u8fc7\u6388\u6743\u7ed9\u540c\u4e00\u6587\u4ef6\u5939\u4e2d\u7684\u7528\u6237/\u7528\u6237\u7ec4\u6388\u4e88\u4e0d\u540c\u7684\u89d2\u8272\u3002

  3. \u89d2\u8272\u6743\u9650\u6620\u5c04

    \u4f01\u4e1a\u7ba1\u7406\u8005\uff1a\u5728\u6839\u6587\u4ef6\u5939\u6388\u4e88 Folder Admin \u89d2\u8272\u3002\u4ed6\u5c06\u62e5\u6709\u6240\u6709\u90e8\u95e8\u3001\u9879\u76ee\u53ca\u5176\u8d44\u6e90\u7684\u7ba1\u7406\u6743\u9650\u3002

    \u90e8\u95e8\u7ba1\u7406\u8005\uff1a\u5728\u5404\u4e2a\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u5355\u72ec\u6388\u4e88\u7ba1\u7406\u6743\u9650\u3002

    \u9879\u76ee\u6210\u5458\uff1a\u5728\u5de5\u4f5c\u7a7a\u95f4\u3001\u8d44\u6e90\u5c42\u7ea7\u5355\u72ec\u6388\u4e88\u7ba1\u7406\u6743\u9650\u3002

"},{"location":"admin/ghippo/best-practice/super-group.html","title":"\u8d85\u5927\u578b\u4f01\u4e1a\u7684\u67b6\u6784\u7ba1\u7406","text":"

\u4f34\u968f\u4e1a\u52a1\u7684\u6301\u7eed\u6269\u5f20\uff0c\u516c\u53f8\u89c4\u6a21\u4e0d\u65ad\u58ee\u5927\uff0c\u5b50\u516c\u53f8\u3001\u5206\u516c\u53f8\u7eb7\u7eb7\u8bbe\u7acb\uff0c\u6709\u7684\u5b50\u516c\u53f8\u8fd8\u8fdb\u4e00\u6b65\u8bbe\u7acb\u5b59\u516c\u53f8\uff0c \u539f\u5148\u7684\u5927\u90e8\u95e8\u4e5f\u9010\u6e10\u7ec6\u5206\u6210\u591a\u4e2a\u5c0f\u90e8\u95e8\uff0c\u4ece\u800c\u4f7f\u5f97\u7ec4\u7ec7\u7ed3\u6784\u7684\u5c42\u7ea7\u65e5\u76ca\u589e\u591a\u3002\u8fd9\u79cd\u7ec4\u7ec7\u7ed3\u6784\u7684\u53d8\u5316\uff0c\u4e5f\u5bf9 IT \u6cbb\u7406\u67b6\u6784\u4ea7\u751f\u4e86\u5f71\u54cd\u3002

\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u5f00\u542f Folder/WS \u4e4b\u95f4\u7684\u9694\u79bb\u6a21\u5f0f

    \u8bf7\u53c2\u8003\u5f00\u542f Folder/WS \u4e4b\u95f4\u7684\u9694\u79bb\u6a21\u5f0f\u3002

  2. \u6309\u7167\u5b9e\u9645\u60c5\u51b5\u89c4\u5212\u4f01\u4e1a\u67b6\u6784

    \u5728\u591a\u5c42\u7ea7\u7ec4\u7ec7\u67b6\u6784\u4e0b\uff0c\u5efa\u8bae\u5c06\u4e8c\u7ea7\u6587\u4ef6\u5939\u4f5c\u4e3a\u9694\u79bb\u5355\u5143\uff0c\u8fdb\u884c\u201c\u5b50\u516c\u53f8\u201d\u4e4b\u95f4\u7684\u7528\u6237/\u7528\u6237\u7ec4/\u8d44\u6e90\u4e4b\u95f4\u7684\u9694\u79bb\u3002 \u9694\u79bb\u540e\u201c\u5b50\u516c\u53f8\u201d\u4e4b\u95f4\u7684\u7528\u6237/\u7528\u6237\u7ec4/\u8d44\u6e90\u4e92\u4e0d\u53ef\u89c1\u3002

  3. \u521b\u5efa\u7528\u6237/\u6253\u901a\u7528\u6237\u4f53\u7cfb

    \u7531\u4e3b\u5e73\u53f0\u7ba1\u7406\u5458 Admin \u5728\u5e73\u53f0\u7edf\u4e00\u521b\u5efa\u7528\u6237\u6216\u901a\u8fc7 LDAP/OIDC/OAuth2.0 \u7b49\u8eab\u4efd\u63d0\u4f9b\u5546\u80fd\u529b\u5c06\u7528\u6237\u7edf\u4e00\u5bf9\u63a5\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u3002

  4. \u521b\u5efa\u6587\u4ef6\u5939\u89d2\u8272

    \u5728 Folder/WS \u7684\u9694\u79bb\u6a21\u5f0f\u4e0b\uff0c\u9700\u8981\u5e73\u53f0\u7ba1\u7406\u5458 Admin \u901a\u8fc7 \u6388\u6743 \u9996\u5148\u5c06\u7528\u6237\u9080\u8bf7\u5230\u5404\u4e2a\u5b50\u516c\u53f8\uff0c\u201c\u5b50\u516c\u53f8\u7ba1\u7406\u5458\uff08Folder Admin\uff09\u201d\u624d\u80fd\u591f\u5bf9\u8fd9\u4e9b\u7528\u6237\u8fdb\u884c\u7ba1\u7406\uff0c \u5982\u4e8c\u6b21\u6388\u6743\u6216\u8005\u7f16\u8f91\u6743\u9650\u3002\u5efa\u8bae\u7b80\u5316\u5e73\u53f0\u7ba1\u7406\u5458 Admin \u7684\u7ba1\u7406\u5de5\u4f5c\uff0c\u521b\u5efa\u4e00\u4e2a\u65e0\u5b9e\u9645\u6743\u9650\u7684\u89d2\u8272\u6765\u8f85\u52a9\u5e73\u53f0\u7ba1\u7406\u5458 Admin \u5b9e\u73b0\u901a\u8fc7\u201c\u6388\u6743\u201d\u5c06\u7528\u6237\u9080\u8bf7\u5230\u5b50\u516c\u53f8\u7684\u64cd\u4f5c\u3002 \u800c\u5b50\u516c\u53f8\u7528\u6237\u7684\u5b9e\u9645\u6743\u9650\u4e0b\u653e\u5230\u5404\u4e2a\u5b50\u516c\u53f8\u7ba1\u7406\u5458\uff08Folder Admin\uff09\u81ea\u884c\u7ba1\u7406\u3002

    Note

    \u8d44\u6e90\u7ed1\u5b9a\u6743\u9650\u70b9\u5355\u72ec\u4f7f\u7528\u4e0d\u751f\u6548\uff0c\u56e0\u6b64\u7b26\u5408\u4e0a\u8ff0\u901a\u8fc7\u201c\u6388\u6743\u201d\u5c06\u7528\u6237\u9080\u8bf7\u5230\u5b50\u516c\u53f8\u7684\u64cd\u4f5c\uff0c\u518d\u7531\u5b50\u516c\u53f8\u7ba1\u7406\u5458 Folder Admin \u81ea\u884c\u7ba1\u7406\u7684\u8981\u6c42\u3002

    \u4ee5\u4e0b\u6f14\u793a\u5982\u4f55\u521b\u5efa\u8d44\u6e90\u7ed1\u5b9a \u65e0\u5b9e\u9645\u6743\u9650\u7684\u89d2\u8272 \uff0c\u5373 minirole\u3002

  5. \u7ed9\u7528\u6237\u6388\u6743

    \u5e73\u53f0\u7ba1\u7406\u5458\u901a\u8fc7\u201c\u6388\u6743\u201d\u5c06\u7528\u6237\u6309\u7167\u5b9e\u9645\u60c5\u51b5\u9080\u8bf7\u5230\u5404\u4e2a\u5b50\u516c\u53f8\uff0c\u5e76\u4efb\u547d\u5b50\u516c\u53f8\u7ba1\u7406\u5458\u3002

    \u5c06\u5b50\u516c\u53f8\u666e\u901a\u7528\u6237\u6388\u6743\u4e3a \u201cminirole\u201d (1)\uff0c\u5c06\u5b50\u516c\u53f8\u7ba1\u7406\u5458\u6388\u6743\u4e3a Floder Admin\u3002

    1. \u5373\u7b2c 4 \u6b65\uff08\u4e0a\u4e00\u6b65\uff09\u4e2d\u521b\u5efa\u7684 \u65e0\u5b9e\u9645\u6743\u9650\u7684\u89d2\u8272

  6. \u5b50\u516c\u53f8\u7ba1\u7406\u5458\u81ea\u884c\u7ba1\u7406\u7528\u6237/\u7528\u6237\u7ec4

    \u5b50\u516c\u53f8\u7ba1\u7406\u5458 Folder Admin \u767b\u5f55\u5e73\u53f0\u540e\u53ea\u80fd\u770b\u5230\u81ea\u5df1\u6240\u5728\u7684\u201c\u5b50\u516c\u53f8 2\u201d\uff0c \u5e76\u80fd\u591f\u901a\u8fc7\u521b\u5efa\u6587\u4ef6\u5939\u3001\u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\u8c03\u6574\u67b6\u6784\uff0c\u901a\u8fc7\u6dfb\u52a0\u6388\u6743/\u7f16\u8f91\u6743\u9650\u4e3a\u5b50\u516c\u53f8 2 \u4e2d\u7684\u7528\u6237\u8d4b\u4e88\u5176\u4ed6\u6743\u9650\u3002

    \u5728\u6dfb\u52a0\u6388\u6743\u65f6\uff0c\u5b50\u516c\u53f8\u7ba1\u7406\u5458 Folder Admin \u53ea\u80fd\u770b\u5230\u88ab\u5e73\u53f0\u7ba1\u7406\u5458\u901a\u8fc7\u201c\u6388\u6743\u201d\u9080\u8bf7\u8fdb\u6765\u7684\u7528\u6237\uff0c\u800c\u4e0d\u80fd\u770b\u5230\u5e73\u53f0\u4e0a\u7684\u6240\u6709\u7528\u6237\uff0c \u4ece\u800c\u5b9e\u73b0 Folder/WS \u4e4b\u95f4\u7684\u7528\u6237\u9694\u79bb\uff0c\u7528\u6237\u7ec4\u540c\u7406\uff08\u5e73\u53f0\u7ba1\u7406\u5458\u89c6\u89d2\u80fd\u591f\u770b\u5230\u5e76\u6388\u6743\u5e73\u53f0\u4e0a\u6240\u6709\u7684\u7528\u6237\u548c\u7528\u6237\u7ec4\uff09\u3002

Note

\u8d85\u5927\u578b\u4f01\u4e1a\u4e0e\u5927/\u4e2d/\u5c0f\u578b\u4f01\u4e1a\u7684\u4e3b\u8981\u533a\u522b\u5728\u4e8e Folder \u548c\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7528\u6237/\u7528\u6237\u7ec4\u4e4b\u95f4\u662f\u5426\u53ef\u89c1\u3002 \u8d85\u5927\u578b\u4f01\u4e1a\u91cc\u5b50\u516c\u53f8\u4e0e\u5b50\u516c\u53f8\u4e4b\u95f4\u7528\u6237/\u7528\u6237\u7ec4\u4e0d\u53ef\u89c1 + \u6743\u9650\u9694\u79bb\uff1b \u5927/\u4e2d/\u5c0f\u578b\u4f01\u4e1a\u90e8\u95e8\u4e4b\u95f4\u7684\u7528\u6237\u76f8\u4e92\u53ef\u89c1 + \u6743\u9650\u9694\u79bb\u3002

"},{"location":"admin/ghippo/best-practice/system-message.html","title":"\u7cfb\u7edf\u6d88\u606f","text":"

\u7cfb\u7edf\u6d88\u606f\u7528\u4e8e\u901a\u77e5\u6240\u6709\u7528\u6237\uff0c\u7c7b\u4f3c\u4e8e\u7cfb\u7edf\u516c\u544a\uff0c\u4f1a\u5728\u7279\u5b9a\u65f6\u95f4\u663e\u793a\u5728 AI \u7b97\u529b\u4e2d\u5fc3UI \u7684\u9876\u90e8\u680f\u3002

"},{"location":"admin/ghippo/best-practice/system-message.html#_2","title":"\u914d\u7f6e\u7cfb\u7edf\u6d88\u606f","text":"

\u901a\u8fc7\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4 apply \u7cfb\u7edf\u6d88\u606f\u7684 YAML \u5373\u53ef\u521b\u5efa\u4e00\u6761\u7cfb\u7edf\u6d88\u606f\uff0c\u6d88\u606f\u7684\u663e\u793a\u65f6\u95f4\u7531 YAML \u4e2d\u7684\u65f6\u95f4\u5b57\u6bb5\u51b3\u5b9a\u3002 \u7cfb\u7edf\u6d88\u606f\u4ec5\u5728 start\u3001end \u5b57\u6bb5\u914d\u7f6e\u7684\u65f6\u95f4\u8303\u56f4\u4e4b\u5185\u624d\u4f1a\u663e\u793a\u3002

  1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u641c\u7d22 ghippoconfig\uff0c\u70b9\u51fb\u641c\u7d22\u51fa\u6765\u7684 ghippoconfigs.ghippo.io

  3. \u70b9\u51fb YAML \u521b\u5efa \uff0c\u6216\u4fee\u6539\u5df2\u5b58\u5728\u7684 YAML

  4. \u6700\u7ec8\u6548\u679c\u5982\u4e0b

\u4ee5\u4e0b\u662f\u4e00\u4e2a YAML \u793a\u4f8b\uff1a

apiVersion: ghippo.io/v1alpha1\nkind: GhippoConfig\nmetadata:\n  name: system-message\nspec:\n  message: \"this is a message\"\n  start: 2024-01-02T15:04:05+08:00\n  end: 2024-07-24T17:26:05+08:00\n
"},{"location":"admin/ghippo/best-practice/ws-best-practice.html","title":"\u5de5\u4f5c\u7a7a\u95f4\u6700\u4f73\u5b9e\u8df5","text":"

\u5de5\u4f5c\u7a7a\u95f4\u662f\u4e00\u79cd\u8d44\u6e90\u5206\u7ec4\u5355\u5143\uff0c\u5927\u591a\u6570\u8d44\u6e90\u90fd\u53ef\u4ee5\u5728\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u521b\u5efa\u6216\u624b\u52a8\u7ed1\u5b9a\u5230\u67d0\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u3002 \u800c\u5de5\u4f5c\u7a7a\u95f4\u901a\u8fc7\u6388\u6743\u548c\u8d44\u6e90\u7ed1\u5b9a\uff0c\u80fd\u591f\u5b9e\u73b0\u7528\u6237\u4e0e\u89d2\u8272\u7684\u7ed1\u5b9a\u5173\u7cfb\uff0c\u5e76\u4e00\u6b21\u6027\u5e94\u7528\u5230\u5de5\u4f5c\u7a7a\u95f4\u7684\u6240\u6709\u8d44\u6e90\u4e0a\u3002

\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\uff0c\u53ef\u4ee5\u8f7b\u677e\u7ba1\u7406\u56e2\u961f\u4e0e\u8d44\u6e90\uff0c\u89e3\u51b3\u8de8\u6a21\u5757\u3001\u8de8\u96c6\u7fa4\u7684\u8d44\u6e90\u6388\u6743\u95ee\u9898\u3002

"},{"location":"admin/ghippo/best-practice/ws-best-practice.html#_2","title":"\u5de5\u4f5c\u7a7a\u95f4\u7684\u529f\u80fd","text":"

\u5de5\u4f5c\u7a7a\u95f4\u5305\u542b\u4e09\u4e2a\u529f\u80fd\uff1a\u6388\u6743\u3001\u8d44\u6e90\u7ec4\u548c\u5171\u4eab\u8d44\u6e90\u3002\u4e3b\u8981\u89e3\u51b3\u8d44\u6e90\u7edf\u4e00\u6388\u6743\u3001\u8d44\u6e90\u5206\u7ec4\u53ca\u8d44\u6e90\u914d\u989d\u95ee\u9898\u3002

  1. \u6388\u6743\uff1a\u4e3a\u7528\u6237/\u7528\u6237\u7ec4\u6388\u4e88\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684\u4e0d\u540c\u89d2\u8272\uff0c\u5e76\u5c06\u89d2\u8272\u5e94\u7528\u5230\u5de5\u4f5c\u7a7a\u95f4\u7684\u8d44\u6e90\u4e0a\u3002

    \u6700\u4f73\u5b9e\u8df5\uff1a\u666e\u901a\u7528\u6237\u60f3\u8981\u4f7f\u7528\u5e94\u7528\u5de5\u4f5c\u53f0\u3001\u5fae\u670d\u52a1\u5f15\u64ce\u3001\u670d\u52a1\u7f51\u683c\u3001\u4e2d\u95f4\u4ef6\u6a21\u5757\u529f\u80fd\uff0c\u6216\u8005\u9700\u8981\u62e5\u6709\u5bb9\u5668\u7ba1\u7406\u3001\u670d\u52a1\u7f51\u683c\u4e2d\u90e8\u5206\u8d44\u6e90\u7684\u4f7f\u7528\u6743\u9650\u65f6\uff0c\u9700\u8981\u7ba1\u7406\u5458\u6388\u4e88\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684\u4f7f\u7528\u6743\u9650\uff08Workspace Admin\u3001Workspace Edit\u3001Workspace View\uff09\u3002 \u8fd9\u91cc\u7684\u7ba1\u7406\u5458\u53ef\u4ee5\u662f Admin \u89d2\u8272\u3001\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684 Workspace Admin \u89d2\u8272\u6216\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0a\u5c42\u7684 Folder Admin \u89d2\u8272\u3002 \u67e5\u770b Folder \u4e0e Workspace \u7684\u5173\u7cfb\u3002

  2. \u8d44\u6e90\u7ec4\uff1a\u8d44\u6e90\u7ec4\u652f\u6301 Cluster\u3001Cluster-Namespace (\u8de8\u96c6\u7fa4)\u3001Mesh\u3001Mesh-Namespace\u3001Kairship\u3001Kairship-Namespace \u516d\u79cd\u8d44\u6e90\u7c7b\u578b\u3002 \u4e00\u4e2a\u8d44\u6e90\u53ea\u80fd\u7ed1\u5b9a\u4e00\u4e2a\u8d44\u6e90\u7ec4\uff0c\u8d44\u6e90\u88ab\u7ed1\u5b9a\u5230\u8d44\u6e90\u7ec4\u540e\uff0c\u5de5\u4f5c\u7a7a\u95f4\u7684\u6240\u6709\u8005\u5c06\u62e5\u6709\u8be5\u8d44\u6e90\u7684\u6240\u6709\u7ba1\u7406\u6743\u9650\uff0c\u76f8\u5f53\u4e8e\u8be5\u8d44\u6e90\u7684\u6240\u6709\u8005\uff0c\u56e0\u6b64\u4e0d\u53d7\u8d44\u6e90\u914d\u989d\u7684\u9650\u5236\u3002

    \u6700\u4f73\u5b9e\u8df5\uff1a\u5de5\u4f5c\u7a7a\u95f4\u901a\u8fc7\u201c\u6388\u6743\u201d\u529f\u80fd\u53ef\u4ee5\u7ed9\u90e8\u95e8\u6210\u5458\u6388\u4e88\u4e0d\u540c\u89d2\u8272\u6743\u9650\uff0c\u800c\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u628a\u4eba\u4e0e\u89d2\u8272\u7684\u6388\u6743\u5173\u7cfb\u4e00\u6b21\u6027\u5e94\u7528\u5230\u5de5\u4f5c\u7a7a\u95f4\u7684\u6240\u6709\u8d44\u6e90\u4e0a\u3002\u56e0\u6b64\u8fd0\u7ef4\u4eba\u5458\u53ea\u9700\u5c06\u8d44\u6e90\u7ed1\u5b9a\u5230\u8d44\u6e90\u7ec4\uff0c\u5c06\u90e8\u95e8\u4e2d\u7684\u4e0d\u540c\u89d2\u8272\u52a0\u5165\u4e0d\u540c\u7684\u8d44\u6e90\u7ec4\uff0c\u5c31\u80fd\u786e\u4fdd\u8d44\u6e90\u7684\u6743\u9650\u88ab\u6b63\u786e\u5206\u914d\u3002

    \u89d2\u8272 \u96c6\u7fa4 Cluster \u8de8\u96c6\u7fa4 Cluster-Namespace Workspace Admin Cluster Admin NS Admin Workspace Edit \u2717 NS Editor Workspace View \u2717 NS Viewer
  3. \u5171\u4eab\u8d44\u6e90\uff1a\u5171\u4eab\u8d44\u6e90\u529f\u80fd\u4e3b\u8981\u9488\u5bf9\u96c6\u7fa4\u8d44\u6e90\u3002

    \u4e00\u4e2a\u96c6\u7fa4\u53ef\u4ee5\u5171\u4eab\u7ed9\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff08\u6307\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u5171\u4eab\u8d44\u6e90\u529f\u80fd\uff09\uff1b\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u4e5f\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u591a\u4e2a\u96c6\u7fa4\u7684\u8d44\u6e90\u3002 \u4f46\u662f\u96c6\u7fa4\u8d44\u6e90\u88ab\u5171\u4eab\u540e\uff0c\u4e0d\u610f\u5473\u7740\u88ab\u5171\u4eab\u8005\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09\u53ef\u4ee5\u65e0\u9650\u5236\u5730\u4f7f\u7528\uff0c\u56e0\u6b64\u901a\u5e38\u4f1a\u9650\u5236\u88ab\u5171\u4eab\u8005\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09\u80fd\u591f\u4f7f\u7528\u7684\u8d44\u6e90\u9650\u989d\u3002

    \u540c\u65f6\uff0c\u4e0e\u8d44\u6e90\u7ec4\u4e0d\u540c\uff0c\u5de5\u4f5c\u7a7a\u95f4\u6210\u5458\u53ea\u662f\u5171\u4eab\u8d44\u6e90\u7684\u4f7f\u7528\u8005\uff0c\u80fd\u591f\u5728\u8d44\u6e90\u9650\u989d\u4e0b\u4f7f\u7528\u96c6\u7fa4\u4e2d\u7684\u8d44\u6e90\u3002\u6bd4\u5982\u524d\u5f80\u5e94\u7528\u5de5\u4f5c\u53f0\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u3001\u90e8\u7f72\u5e94\u7528\u7b49\uff0c\u4f46\u5e76\u4e0d\u5177\u5907\u96c6\u7fa4\u7684\u7ba1\u7406\u6743\u9650\uff0c\u9650\u5236\u540e\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u521b\u5efa/\u7ed1\u5b9a\u7684\u547d\u540d\u7a7a\u95f4\u7684\u8d44\u6e90\u914d\u989d\u603b\u548c\u4e0d\u80fd\u8d85\u8fc7\u96c6\u7fa4\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u8bbe\u7f6e\u7684\u8d44\u6e90\u4f7f\u7528\u4e0a\u9650\u3002

    \u6700\u4f73\u5b9e\u8df5\uff1a\u8fd0\u7ef4\u90e8\u95e8\u624b\u4e2d\u6709\u4e00\u4e2a\u9ad8\u53ef\u7528\u96c6\u7fa4 01\uff0c\u60f3\u8981\u5206\u914d\u7ed9\u90e8\u95e8 A\uff08\u5de5\u4f5c\u7a7a\u95f4 A\uff09\u548c\u90e8\u95e8 B\uff08\u5de5\u4f5c\u7a7a\u95f4 B\uff09\u4f7f\u7528\uff0c\u5176\u4e2d\u90e8\u95e8 A \u5206\u914d CPU 50 \u6838\uff0c\u90e8\u95e8 B \u5206\u914d CPU 100 \u6838\u3002 \u90a3\u4e48\u53ef\u4ee5\u501f\u7528\u5171\u4eab\u8d44\u6e90\u7684\u6982\u5ff5\uff0c\u5c06\u96c6\u7fa4 01 \u5206\u522b\u5171\u4eab\u7ed9\u90e8\u95e8 A \u548c\u90e8\u95e8 B\uff0c\u5e76\u9650\u5236\u90e8\u95e8 A \u7684 CPU \u4f7f\u7528\u989d\u5ea6\u4e3a 50\uff0c\u90e8\u95e8 B \u7684 CPU \u4f7f\u7528\u989d\u5ea6\u4e3a 100\u3002 \u90a3\u4e48\u90e8\u95e8 A \u7684\u7ba1\u7406\u5458\uff08\u5de5\u4f5c\u7a7a\u95f4 A Admin\uff09\u80fd\u591f\u5728\u5e94\u7528\u5de5\u4f5c\u53f0\u521b\u5efa\u5e76\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\uff0c\u5176\u4e2d\u547d\u540d\u7a7a\u95f4\u989d\u5ea6\u603b\u548c\u4e0d\u80fd\u8d85\u8fc7 50 \u6838\uff0c\u90e8\u95e8 B \u7684\u7ba1\u7406\u5458\uff08\u5de5\u4f5c\u7a7a\u95f4 B Admin\uff09\u80fd\u591f\u5728\u5e94\u7528\u5de5\u4f5c\u53f0\u521b\u5efa\u5e76\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\uff0c\u5176\u4e2d\u547d\u540d\u7a7a\u95f4\u989d\u5ea6\u603b\u548c\u4e0d\u80fd\u8d85\u8fc7 100 \u6838\u3002 \u90e8\u95e8 A \u7684\u7ba1\u7406\u5458\u548c\u90e8\u95e8 B \u7ba1\u7406\u5458\u521b\u5efa\u7684\u547d\u540d\u7a7a\u95f4\u4f1a\u88ab\u81ea\u52a8\u7ed1\u5b9a\u5728\u8be5\u90e8\u95e8\uff0c\u90e8\u95e8\u4e2d\u7684\u5176\u4ed6\u6210\u5458\u5c06\u5bf9\u5e94\u7684\u62e5\u6709\u547d\u540d\u7a7a\u95f4\u7684 Namesapce Admin\u3001Namesapce Edit\u3001Namesapce View \u89d2\u8272\uff08\u8fd9\u91cc\u90e8\u95e8\u6307\u7684\u662f\u5de5\u4f5c\u7a7a\u95f4\uff0c\u5de5\u4f5c\u7a7a\u95f4\u8fd8\u53ef\u4ee5\u6620\u5c04\u4e3a\u7ec4\u7ec7\u3001\u4f9b\u5e94\u5546\u7b49\u5176\u4ed6\u6982\u5ff5\uff09\u3002\u6574\u4e2a\u8fc7\u7a0b\u5982\u4e0b\u8868\uff1a

    \u90e8\u95e8 \u89d2\u8272 \u5171\u4eab\u96c6\u7fa4 Cluster \u8d44\u6e90\u914d\u989d \u90e8\u95e8\u7ba1\u7406\u5458 A Workspace Admin \u96c6\u7fa4 01 CPU 50 \u6838 \u90e8\u95e8\u7ba1\u7406\u5458 B Workspace Admin \u96c6\u7fa4 01 CPU 100 \u6838
"},{"location":"admin/ghippo/best-practice/ws-best-practice.html#ai","title":"\u5de5\u4f5c\u7a7a\u95f4\u5bf9 AI \u7b97\u529b\u4e2d\u5fc3\u5404\u6a21\u5757\u7684\u4f5c\u7528","text":"
  1. \u6a21\u5757\u540d\u79f0\uff1a\u5e94\u7528\u5de5\u4f5c\u53f0\u3001\u5fae\u670d\u52a1\u5f15\u64ce\u3001\u4e2d\u95f4\u4ef6\u3001\u955c\u50cf\u4ed3\u5e93\u3001\u4e91\u8fb9\u534f\u540c

    \u8fdb\u5165\u4e0a\u8ff0\u51e0\u4e2a\u6a21\u5757\u7684\u524d\u63d0\u662f\u62e5\u6709\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u7684\u6743\u9650\uff0c\u56e0\u6b64\u5728\u4f7f\u7528\u6a21\u5757\u529f\u80fd\u524d\u5fc5\u987b\u5177\u6709 Admin \u89d2\u8272\u6216\u8005\u62e5\u6709\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u7684\u4e00\u5b9a\u89d2\u8272\u6743\u9650\u3002

    • \u5de5\u4f5c\u7a7a\u95f4\u7684\u89d2\u8272\u4f1a\u81ea\u52a8\u5e94\u7528\u5230\u5de5\u4f5c\u7a7a\u95f4\u5305\u542b\u7684\u8d44\u6e90\u4e0a\u3002\u6bd4\u5982\u5f53\u60a8\u62e5\u6709\u5de5\u4f5c\u7a7a\u95f4 A \u7684 Workspace Admin \u89d2\u8272\uff0c\u90a3\u4e48\u5bf9\u4e8e\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u6240\u6709\u8d44\u6e90\u60a8\u90fd\u662f Admin \u89d2\u8272\uff1b
    • \u5982\u679c\u60a8\u662f Workspace Edit\uff0c\u90a3\u4e48\u5bf9\u4e8e\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u6240\u6709\u8d44\u6e90\u60a8\u90fd\u662f Edit \u89d2\u8272\uff1b
    • \u5982\u679c\u60a8\u662f Workspace View\uff0c\u90a3\u4e48\u5bf9\u4e8e\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u6240\u6709\u8d44\u6e90\u60a8\u90fd\u662f View \u89d2\u8272\u3002

    \u53e6\u5916\uff0c\u60a8\u5728\u8fd9\u4e9b\u6a21\u5757\u521b\u5efa\u7684\u8d44\u6e90\u4e5f\u5c06\u81ea\u52a8\u88ab\u7ed1\u5b9a\u5230\u5bf9\u5e94\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\uff0c\u800c\u4e0d\u9700\u8981\u5176\u4ed6\u989d\u5916\u7684\u64cd\u4f5c\u3002

  2. \u6a21\u5757\u540d\u79f0\uff1a\u5bb9\u5668\u7ba1\u7406\u3001\u670d\u52a1\u7f51\u683c\u3001\u591a\u4e91\u7f16\u6392

    \u7531\u4e8e\u529f\u80fd\u6a21\u5757\u7684\u7279\u6b8a\u6027\uff0c\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u521b\u5efa\u7684\u8d44\u6e90\u4e0d\u4f1a\u81ea\u52a8\u88ab\u7ed1\u5b9a\u5230\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u3002

    \u5982\u679c\u60a8\u9700\u8981\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u5bf9\u4eba\u548c\u8d44\u6e90\u8fdb\u884c\u7edf\u4e00\u6388\u6743\u7ba1\u7406\uff0c\u53ef\u4ee5\u624b\u52a8\u5c06\u9700\u8981\u7684\u8d44\u6e90\u7ed1\u5b9a\u5230\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u4e2d\uff0c\u4ece\u800c\u5c06\u7528\u6237\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684\u89d2\u8272\u5e94\u7528\u5230\u8d44\u6e90\u4e0a\uff08\u8fd9\u91cc\u7684\u8d44\u6e90\u662f\u53ef\u4ee5\u8de8\u96c6\u7fa4\u7684\uff09\u3002

    \u53e6\u5916\uff0c\u5728\u8d44\u6e90\u7684\u7ed1\u5b9a\u5165\u53e3\u4e0a\u5bb9\u5668\u7ba1\u7406\u4e0e\u670d\u52a1\u7f51\u683c\u7a0d\u6709\u5dee\u5f02\uff0c\u5de5\u4f5c\u7a7a\u95f4\u63d0\u4f9b\u4e86\u5bb9\u5668\u7ba1\u7406\u4e2d\u7684 Cluster \u3001 Cluster-Namesapce \u548c\u670d\u52a1\u7f51\u683c\u4e2d\u7684 Mesh\u3001Mesh-Namespace \u8d44\u6e90\u7684\u7ed1\u5b9a\u5165\u53e3\uff0c\u4f46\u5c1a\u672a\u5f00\u653e\u5bf9\u670d\u52a1\u7f51\u683c\u7684 kairship \u548c Kairship-Namespace \u8d44\u6e90\u7684\u7ed1\u5b9a\u3002

    \u5bf9\u4e8e kairship \u548c Kairship-Namespace \u8d44\u6e90\uff0c\u53ef\u4ee5\u5728\u670d\u52a1\u7f51\u683c\u7684\u8d44\u6e90\u5217\u8868\u8fdb\u884c\u624b\u52a8\u7ed1\u5b9a\u3002

"},{"location":"admin/ghippo/best-practice/ws-best-practice.html#_3","title":"\u5de5\u4f5c\u7a7a\u95f4\u7684\u4f7f\u7528\u573a\u666f","text":"
  • \u6620\u5c04\u4e3a\u4e0d\u540c\u7684\u90e8\u95e8\u3001\u9879\u76ee\u3001\u7ec4\u7ec7\u7b49\u6982\u5ff5\uff0c\u540c\u65f6\u53ef\u4ee5\u5c06\u5de5\u4f5c\u7a7a\u95f4\u4e2d Workspace Admin\u3001Workspace Edit \u548c Workspace View \u89d2\u8272\u5bf9\u5e94\u5230\u90e8\u95e8\u3001\u9879\u76ee\u3001\u7ec4\u7ec7\u4e2d\u7684\u4e0d\u540c\u89d2\u8272
  • \u5c06\u4e0d\u540c\u7528\u9014\u7684\u8d44\u6e90\u52a0\u5165\u4e0d\u540c\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u5206\u5f00\u7ba1\u7406\u548c\u4f7f\u7528
  • \u4e3a\u4e0d\u540c\u5de5\u4f5c\u7a7a\u95f4\u8bbe\u7f6e\u5b8c\u5168\u72ec\u7acb\u7684\u7ba1\u7406\u5458\uff0c\u5b9e\u73b0\u5de5\u4f5c\u7a7a\u95f4\u8303\u56f4\u5185\u7684\u7528\u6237\u4e0e\u6743\u9650\u7ba1\u7406
  • \u5c06\u8d44\u6e90\u5171\u4eab\u7ed9\u4e0d\u540c\u7684\u5de5\u4f5c\u7a7a\u95f4\u4f7f\u7528\uff0c\u5e76\u9650\u5236\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u4f7f\u7528\u7684\u8d44\u6e90\u989d\u5ea6\u4e0a\u9650
"},{"location":"admin/ghippo/best-practice/ws-to-ns.html","title":"\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u7ed1\u5b9a\u8de8\u96c6\u7fa4\u7684\u547d\u540d\u7a7a\u95f4","text":"

\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u4e0b\u7ed1\u5b9a\u6765\u81ea\u4e0d\u540c\u96c6\u7fa4\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u80fd\u591f\u4f7f\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u7075\u6d3b\u7eb3\u7ba1\u5e73\u53f0\u4e0a\u4efb\u610f\u96c6\u7fa4\u4e0b\u7684 Kubernetes Namespace\u3002 \u540c\u65f6\u5e73\u53f0\u63d0\u4f9b\u4e86\u6743\u9650\u6620\u5c04\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237\u5728\u5de5\u4f5c\u7a7a\u95f4\u7684\u6743\u9650\u6620\u5c04\u5230\u7ed1\u5b9a\u7684\u547d\u540d\u7a7a\u95f4\u8eab\u4e0a\u3002

\u5f53\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u4e0b\u7ed1\u5b9a\u4e00\u4e2a\u6216\u591a\u4e2a\u8de8\u96c6\u7fa4\u7684\u547d\u540d\u7a7a\u95f4\u65f6\uff0c\u7ba1\u7406\u5458\u65e0\u9700\u518d\u6b21\u7ed9\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u6210\u5458\u6388\u6743\uff0c \u6210\u5458\u4eec\u5728\u5de5\u4f5c\u7a7a\u95f4\u4e0a\u7684\u89d2\u8272\u5c06\u6839\u636e\u4ee5\u4e0b\u6620\u5c04\u5173\u7cfb\u81ea\u52a8\u6620\u5c04\u5b8c\u6210\u6388\u6743\uff0c\u907f\u514d\u4e86\u591a\u6b21\u6388\u6743\u7684\u91cd\u590d\u6027\u64cd\u4f5c\uff1a

  • Workspace Admin \u5bf9\u5e94 Namespace Admin
  • Workspace Editor \u5bf9\u5e94 Namespace Editor
  • Workspace Viewer \u5bf9\u5e94 Namespace Viewer

\u4ee5\u4e0b\u662f\u4e00\u4e2a\u4f8b\u5b50\uff1a

\u7528\u6237 \u5de5\u4f5c\u7a7a\u95f4 \u89d2\u8272 \u7528\u6237 A Workspace01 Workspace Admin

\u5c06\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\u540e\uff1a

\u7528\u6237 \u6240\u5c5e\u8303\u7574 \u89d2\u8272 \u7528\u6237 A Workspace01 Workspace Admin Namespace01 Namespace Admin"},{"location":"admin/ghippo/best-practice/ws-to-ns.html#_2","title":"\u5b9e\u73b0\u65b9\u6848","text":"

\u5c06\u6765\u81ea\u4e0d\u540c\u96c6\u7fa4\u7684\u4e0d\u540c\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u540c\u4e00\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\uff0c\u7ed9\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u4e0b\u7684\u6210\u5458\u4f7f\u7528\u6d41\u7a0b\u5982\u56fe\u3002

graph TB\n\npreparews[\u51c6\u5907\u5de5\u4f5c\u7a7a\u95f4] --> preparens[\u51c6\u5907\u547d\u540d\u7a7a\u95f4]\n--> judge([\u547d\u540d\u7a7a\u95f4\u662f\u5426\u4e0e\u7ed1\u5b9a\u5230\u5176\u4ed6\u5de5\u4f5c\u7a7a\u95f4])\njudge -.\u672a\u7ed1\u5b9a.->nstows[\u5c06\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4] --> wsperm[\u7ba1\u7406\u5de5\u4f5c\u7a7a\u95f4\u8bbf\u95ee\u6743\u9650]\njudge -.\u5df2\u7ed1\u5b9a.->createns[\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4]\n\nclassDef plain fill:#ddd,stroke:#fff,stroke-width:1px,color:#000;\nclassDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;\nclassDef cluster fill:#fff,stroke:#bbb,stroke-width:1px,color:#326ce5;\n\nclass preparews,preparens,createns,nstows,wsperm cluster;\nclass judge plain\n\nclick preparews \"https://docs.daocloud.io/ghippo/user-guide/workspace/ws-to-ns/#_3\"\nclick preparens \"https://docs.daocloud.io/ghippo/user-guide/workspace/ws-to-ns/#_4\"\nclick nstows \"https://docs.daocloud.io/ghippo/user-guide/workspace/ws-to-ns/#_5\"\nclick wsperm \"https://docs.daocloud.io/ghippo/user-guide/workspace/ws-to-ns/#_6\"\nclick createns \"https://docs.daocloud.io/ghippo/user-guide/workspace/ws-to-ns/#_4\"

Tip

\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u53ea\u80fd\u88ab\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u7ed1\u5b9a\u3002

"},{"location":"admin/ghippo/best-practice/ws-to-ns.html#_3","title":"\u51c6\u5907\u5de5\u4f5c\u7a7a\u95f4","text":"

\u5de5\u4f5c\u7a7a\u95f4\u662f\u4e3a\u4e86\u6ee1\u8db3\u591a\u79df\u6237\u7684\u4f7f\u7528\u573a\u666f\uff0c\u57fa\u4e8e\u96c6\u7fa4\u3001\u96c6\u7fa4\u547d\u540d\u7a7a\u95f4\u3001\u7f51\u683c\u3001\u7f51\u683c\u547d\u540d\u7a7a\u95f4\u3001\u591a\u4e91\u3001\u591a\u4e91\u547d\u540d\u7a7a\u95f4\u7b49\u591a\u79cd\u8d44\u6e90\u5f62\u6210\u76f8\u4e92\u9694\u79bb\u7684\u8d44\u6e90\u73af\u5883\u3002 \u5de5\u4f5c\u7a7a\u95f4\u53ef\u4ee5\u6620\u5c04\u4e3a\u9879\u76ee\u3001\u79df\u6237\u3001\u4f01\u4e1a\u3001\u4f9b\u5e94\u5546\u7b49\u591a\u79cd\u6982\u5ff5\u3002

  1. \u4f7f\u7528 admin/folder admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 \u3002

  2. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4 \u6309\u94ae\u3002

  3. \u586b\u5199\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u3001\u6240\u5c5e\u6587\u4ef6\u5939\u7b49\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\u3002

\u63d0\u793a\uff1a\u82e5\u5e73\u53f0\u4e2d\u5df2\u5b58\u5728\u521b\u5efa\u597d\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u70b9\u51fb\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u5728 \u8d44\u6e90\u7ec4 \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb \u7ed1\u5b9a\u8d44\u6e90 \uff0c\u53ef\u4ee5\u76f4\u63a5\u7ed1\u5b9a\u547d\u540d\u7a7a\u95f4\u3002

"},{"location":"admin/ghippo/best-practice/ws-to-ns.html#_4","title":"\u51c6\u5907\u547d\u540d\u7a7a\u95f4","text":"

\u547d\u540d\u7a7a\u95f4\u662f\u66f4\u5c0f\u7684\u8d44\u6e90\u9694\u79bb\u5355\u5143\uff0c\u5c06\u5176\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\u540e\uff0c\u5de5\u4f5c\u7a7a\u95f4\u7684\u6210\u5458\u5c31\u53ef\u4ee5\u8fdb\u884c\u7ba1\u7406\u548c\u4f7f\u7528\u3002

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u51c6\u5907\u4e00\u4e2a\u8fd8\u672a\u7ed1\u5b9a\u5230\u4efb\u4f55\u5de5\u4f5c\u7a7a\u95f4\u7684\u547d\u540d\u7a7a\u95f4\u3002

  1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5bb9\u5668\u7ba1\u7406 \u3002

  2. \u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

  3. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \uff0c\u8fdb\u5165\u547d\u540d\u7a7a\u95f4\u7ba1\u7406\u9875\u9762\uff0c\u70b9\u51fb\u9875\u9762\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

  4. \u586b\u5199\u547d\u540d\u7a7a\u95f4\u7684\u540d\u79f0\uff0c\u914d\u7f6e\u5de5\u4f5c\u7a7a\u95f4\u548c\u6807\u7b7e\uff08\u53ef\u9009\u8bbe\u7f6e\uff09\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a \u3002

    Info

    \u5de5\u4f5c\u7a7a\u95f4\u4e3b\u8981\u7528\u4e8e\u5212\u5206\u8d44\u6e90\u7ec4\u5e76\u4e3a\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u6388\u4e88\u5bf9\u8be5\u8d44\u6e90\u7684\u4e0d\u540c\u8bbf\u95ee\u6743\u9650\u3002\u6709\u5173\u5de5\u4f5c\u7a7a\u95f4\u7684\u8be6\u7ec6\u8bf4\u660e\uff0c\u53ef\u53c2\u8003\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\u3002

  5. \u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3002\u5728\u547d\u540d\u7a7a\u95f4\u5217\u8868\u53f3\u4fa7\uff0c\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u4ece\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4 \u3002

"},{"location":"admin/ghippo/best-practice/ws-to-ns.html#_5","title":"\u5c06\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4","text":"

\u9664\u4e86\u5728\u547d\u540d\u7a7a\u95f4\u5217\u8868\u4e2d\u7ed1\u5b9a\u5916\uff0c\u4e5f\u53ef\u4ee5\u8fd4\u56de \u5168\u5c40\u7ba1\u7406 \uff0c\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4\u3002

  1. \u4f9d\u6b21\u70b9\u51fb \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 -> \u8d44\u6e90\u7ec4 \uff0c\u70b9\u51fb\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u540e\uff0c\u70b9\u51fb \u7ed1\u5b9a\u8d44\u6e90 \u6309\u94ae\u3002

  2. \u9009\u4e2d\u8981\u7ed1\u5b9a\u7684\u5de5\u4f5c\u7a7a\u95f4\uff08\u53ef\u591a\u9009\uff09\uff0c\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u7ed1\u5b9a\u3002

"},{"location":"admin/ghippo/best-practice/ws-to-ns.html#_6","title":"\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u6dfb\u52a0\u6210\u5458\u5e76\u6388\u6743","text":"
  1. \u5728 \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 -> \u6388\u6743 \u4e2d\uff0c\u70b9\u51fb\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u540e\uff0c\u70b9\u51fb \u6dfb\u52a0\u6388\u6743 \u6309\u94ae\u3002

  2. \u9009\u62e9\u8981\u6388\u6743\u7684 \u7528\u6237/\u7528\u6237\u7ec4 \u3001 \u89d2\u8272 \u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u6388\u6743\u3002

"},{"location":"admin/ghippo/best-practice/gproduct/intro.html","title":"GProduct \u5982\u4f55\u5bf9\u63a5\u5168\u5c40\u7ba1\u7406","text":"

GProduct \u662f AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u9664\u5168\u5c40\u7ba1\u7406\u5916\u7684\u6240\u6709\u5176\u4ed6\u6a21\u5757\u7684\u7edf\u79f0\uff0c\u8fd9\u4e9b\u6a21\u5757\u9700\u8981\u4e0e\u5168\u5c40\u7ba1\u7406\u5bf9\u63a5\u540e\u624d\u80fd\u52a0\u5165\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u3002

"},{"location":"admin/ghippo/best-practice/gproduct/intro.html#_1","title":"\u5bf9\u63a5\u4ec0\u4e48","text":"
  • \u5bf9\u63a5\u5bfc\u822a\u680f

    \u5165\u53e3\u7edf\u4e00\u653e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u3002

  • \u63a5\u5165\u8def\u7531\u548c AuthN

    \u7edf\u4e00 IP \u6216\u57df\u540d\uff0c\u5c06\u8def\u7531\u5165\u53e3\u7edf\u4e00\u8d70\u5168\u5c40\u7ba1\u7406\u7684 Istio Gateway\u3002

  • \u7edf\u4e00\u767b\u5f55 / \u7edf\u4e00 AuthN \u8ba4\u8bc1

    \u767b\u5f55\u7edf\u4e00\u4f7f\u7528\u5168\u5c40\u7ba1\u7406 (Keycloak) \u767b\u5f55\u9875\uff0cAPI authn token \u9a8c\u8bc1\u4f7f\u7528 Istio Gateway\u3002 GProduct \u5bf9\u63a5\u5168\u5c40\u7ba1\u7406\u540e\u4e0d\u9700\u8981\u5173\u6ce8\u5982\u4f55\u5b9e\u73b0\u767b\u5f55\u548c\u8ba4\u8bc1\u3002

"},{"location":"admin/ghippo/best-practice/gproduct/intro.html#pdf","title":"\u89c6\u9891\u6f14\u793a\u548c PDF","text":"

\u5c06 AI \u7b97\u529b\u4e2d\u5fc3\u96c6\u6210\u5230\u5ba2\u6237\u7cfb\u7edf\uff08OEM OUT\uff09\uff0c\u53c2\u9605 OEM OUT \u6587\u6863\u3002

\u5c06\u5ba2\u6237\u7cfb\u7edf\u96c6\u6210\u5230 AI \u7b97\u529b\u4e2d\u5fc3\uff08OEM IN\uff09\uff0c\u53c2\u9605 OEM IN \u6587\u6863\u3002

"},{"location":"admin/ghippo/best-practice/gproduct/nav.html","title":"\u5bf9\u63a5\u5bfc\u822a\u680f","text":"

\u4ee5\u5bb9\u5668\u7ba1\u7406\uff08\u5f00\u53d1\u4ee3\u53f7 kpanda \uff09\u4e3a\u4f8b\uff0c\u5bf9\u63a5\u5230\u5bfc\u822a\u680f\u3002

\u5bf9\u63a5\u540e\u7684\u9884\u671f\u6548\u679c\u5982\u56fe\uff1a

"},{"location":"admin/ghippo/best-practice/gproduct/nav.html#_2","title":"\u5bf9\u63a5\u65b9\u6cd5","text":"

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5bf9\u63a5 GProduct\uff1a

  1. \u901a\u8fc7 GProductNavigator CR \u5c06\u5bb9\u5668\u7ba1\u7406\u7684\u5404\u529f\u80fd\u9879\u6ce8\u518c\u5230\u5bfc\u822a\u680f\u83dc\u5355\u3002

    apiVersion: ghippo.io/v1alpha1\nkind: GProductNavigator\nmetadata:\n  name: kpanda\nspec:\n  gproduct: kpanda\n  name: \u5bb9\u5668\u7ba1\u7406\n  localizedName:\n    zh-CN: \u5bb9\u5668\u7ba1\u7406\n    en-US: Container Management\n  url: /kpanda\n  category: \u5bb9\u5668  # (1)\n  iconUrl: /kpanda/nav-icon.png\n  order: 10 # (2)\n  menus:\n  - name: \u5907\u4efd\u7ba1\u7406\n    localizedName:\n      zh-CN: \u5907\u4efd\u7ba1\u7406\n      en-US: Backup Management\n    iconUrl: /kpanda/bkup-icon.png\n    url: /kpanda/backup\n
    1. \u5f53\u524d\u53ea\u652f\u6301\u6982\u89c8\u3001\u5de5\u4f5c\u53f0\u3001\u5bb9\u5668\u3001\u5fae\u670d\u52a1\u3001\u6570\u636e\u670d\u52a1\u3001\u7ba1\u7406\uff0c\u516d\u9009\u4e00
    2. \u6570\u5b57\u8d8a\u5927\u6392\u5728\u8d8a\u4e0a\u9762

    \u5168\u5c40\u7ba1\u7406\u7684\u5bfc\u822a\u680f category \u914d\u7f6e\u5728 ConfigMap\uff0c\u6682\u65f6\u4e0d\u80fd\u4ee5\u6ce8\u518c\u65b9\u5f0f\u589e\u52a0\uff0c\u9700\u8981\u8054\u7cfb\u5168\u5c40\u7ba1\u7406\u56e2\u961f\u6765\u6dfb\u52a0\u3002

  2. kpanda \u524d\u7aef\u4f5c\u4e3a\u5fae\u524d\u7aef\u63a5\u5165\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u7236\u5e94\u7528 Anakin \u4e2d

    \u524d\u7aef\u4f7f\u7528 qiankun \u6765\u63a5\u5165\u5b50\u5e94\u7528 UI\uff0c \u53ef\u4ee5\u53c2\u8003\u5feb\u901f\u4e0a\u624b\u3002

    \u5728\u6ce8\u518c GProductNavigator CR \u540e\uff0c\u63a5\u53e3\u4f1a\u751f\u6210\u5bf9\u5e94\u7684\u6ce8\u518c\u4fe1\u606f\uff0c\u4f9b\u524d\u7aef\u7236\u5e94\u7528\u6ce8\u518c\u4f7f\u7528\u3002 \u4f8b\u5982 kpanda \u5c31\u4f1a\u751f\u6210\u4ee5\u4e0b\u6ce8\u518c\u4fe1\u606f\uff1a

    {\n  \"id\": \"kpanda\",\n  \"title\": \"\u5bb9\u5668\u7ba1\u7406\",\n  \"url\": \"/kpanda\",\n  \"uiAssetsUrl\": \"/ui/kpanda/\", // \u7ed3\u5c3e\u7684/\u662f\u5fc5\u987b\u7684\n  \"needImportLicense\": false\n},\n

    \u4ee5\u4e0a\u6ce8\u518c\u4fe1\u606f\u4e0e qiankun \u5b50\u5e94\u7528\u4fe1\u606f\u5b57\u6bb5\u7684\u5bf9\u5e94\u5173\u7cfb\u662f\uff1a

    {\n    name: id,\n    entry: uiAssetsUrl,\n    container: '#container',\n    activeRule: url, \n    loader,\n    props: globalProps,\n}\n

    container \u548c loader \u7531\u524d\u7aef\u7236\u5e94\u7528\u63d0\u4f9b\uff0c\u5b50\u5e94\u7528\u65e0\u9700\u5173\u5fc3\u3002 props \u4f1a\u63d0\u4f9b\u4e00\u4e2a\u5305\u542b\u7528\u6237\u57fa\u672c\u4fe1\u606f\u3001\u5b50\u4ea7\u54c1\u6ce8\u518c\u4fe1\u606f\u7b49\u7684 pinia store\u3002

    qiankun \u542f\u52a8\u65f6\u4f1a\u4f7f\u7528\u5982\u4e0b\u53c2\u6570\uff1a

    start({\n  sandbox: {\n    experimentalStyleIsolation: true,\n  },\n  // \u53bb\u9664\u5b50\u5e94\u7528\u4e2d\u7684favicon\u9632\u6b62\u5728Firefox\u4e2d\u8986\u76d6\u7236\u5e94\u7528\u7684favicon\n  getTemplate: (template) => template.replaceAll(/<link\\s* rel=\"[\\w\\s]*icon[\\w\\s]*\"\\s*( href=\".*?\")?\\s*\\/?>/g, ''),\n});\n

\u8bf7\u53c2\u9605\u524d\u7aef\u56e2\u961f\u51fa\u5177\u7684 GProduct \u5bf9\u63a5 demo tar \u5305\u3002

"},{"location":"admin/ghippo/best-practice/gproduct/route-auth.html","title":"\u63a5\u5165\u8def\u7531\u548c\u767b\u5f55\u8ba4\u8bc1","text":"

\u63a5\u5165\u540e\u7edf\u4e00\u767b\u5f55\u548c\u5bc6\u7801\u9a8c\u8bc1\uff0c\u6548\u679c\u5982\u4e0b\u56fe\uff1a

\u5404\u4e2a GProduct \u6a21\u5757\u7684 API bear token \u9a8c\u8bc1\u90fd\u8d70 Istio Gateway\u3002

\u63a5\u5165\u540e\u7684\u8def\u7531\u6620\u5c04\u56fe\u5982\u4e0b\uff1a

"},{"location":"admin/ghippo/best-practice/gproduct/route-auth.html#_2","title":"\u63a5\u5165\u65b9\u6cd5","text":"

\u4ee5 kpanda \u4e3a\u4f8b\u6ce8\u518c GProductProxy CR\u3002

# GProductProxy CR \u793a\u4f8b, \u5305\u542b\u8def\u7531\u548c\u767b\u5f55\u8ba4\u8bc1\n\n# spec.proxies: \u540e\u5199\u7684\u8def\u7531\u4e0d\u80fd\u662f\u5148\u5199\u7684\u8def\u7531\u5b50\u96c6, \u53cd\u4e4b\u53ef\u4ee5\n# spec.proxies.match.uri.prefix: \u5982\u679c\u662f\u540e\u7aef api, \u5efa\u8bae\u5728 prefix \u672b\u5c3e\u6dfb\u52a0 \"/\" \u8868\u8ff0\u8fd9\u6bb5 path \u7ed3\u675f\uff08\u7279\u6b8a\u9700\u6c42\u53ef\u4ee5\u4e0d\u7528\u52a0\uff09\n# spec.proxies.match.uri: \u652f\u6301 prefix \u548c exact \u6a21\u5f0f; Prefix \u548c Exact \u53ea\u80fd 2 \u9009 1; Prefix \u4f18\u5148\u7ea7\u5927\u4e8e Exact\n\napiVersion: ghippo.io/v1alpha1\nkind: GProductProxy\nmetadata:\n  name: kpanda  # (1)\nspec:\n  gproduct: kpanda  # (2)\n  proxies:\n  - labels:\n      kind: UIEntry\n    match:\n      uri:\n        prefix: /kpanda # (3)\n    rewrite:\n      uri: /index.html\n    destination:\n      host: ghippo-anakin.ghippo-system.svc.cluster.local\n      port: 80\n    authnCheck: false  # (4)\n  - labels:\n      kind: UIAssets\n    match:\n      uri:\n        prefix: /ui/kpanda/ # (5)\n    destination:\n      host: kpanda-ui.kpanda-system.svc.cluster.local\n      port: 80\n    authnCheck: false\n  - match:\n      uri:\n        prefix: /apis/kpanda.io/v1/a\n    destination:\n      host: kpanda-service.kpanda-system.svc.cluster.local\n      port: 80\n    authnCheck: false\n  - match:\n      uri:\n        prefix: /apis/kpanda.io/v1 # (6)\n    destination:\n      host: kpanda-service.kpanda-system.svc.cluster.local\n      port: 80\n    authnCheck: true\n
  1. cluster \u7ea7\u522b CRD
  2. \u9700\u8981\u7528\u5c0f\u5199\u6307\u5b9a GProduct \u540d\u5b57
  3. \u8fd8\u53ef\u652f\u6301 exact
  4. \u662f\u5426\u9700\u8981 istio-gateway \u7ed9\u8be5\u6761\u8def\u7531 API \u4f5c AuthN Token \u8ba4\u8bc1, false \u4e3a\u8df3\u8fc7\u8ba4\u8bc1
  5. UIAssets \u5efa\u8bae\u672b\u5c3e\u6dfb\u52a0 / \u8868\u793a\u7ed3\u675f\uff08\u4e0d\u7136\u524d\u7aef\u53ef\u80fd\u4f1a\u51fa\u73b0\u95ee\u9898\uff09
  6. \u540e\u5199\u7684\u8def\u7531\u4e0d\u80fd\u662f\u5148\u5199\u7684\u8def\u7531\u7684\u5b50\u96c6, \u53cd\u4e4b\u53ef\u4ee5
"},{"location":"admin/ghippo/best-practice/menu/menu-display-or-hiding.html","title":"\u5bfc\u822a\u680f\u83dc\u5355\u6839\u636e\u6743\u9650\u663e\u793a/\u9690\u85cf","text":"

\u5728\u73b0\u6709\u7684\u6743\u9650\u4f53\u7cfb\u4e0b, \u5168\u5c40\u7ba1\u7406\u53ef\u4ee5\u6839\u636e\u7528\u6237\u7684\u6743\u9650\u63a7\u5236\u5bfc\u822a\u680f\u7684\u83dc\u5355\u662f\u5426\u5c55\u793a\uff0c \u4f46\u662f\u7531\u4e8e\u5bb9\u5668\u7ba1\u7406\u7684\u6388\u6743\u4fe1\u606f\u672a\u540c\u6b65\u5230\u5168\u5c40\u7ba1\u7406\uff0c\u5bfc\u81f4\u5168\u5c40\u7ba1\u7406\u65e0\u6cd5\u51c6\u786e\u5224\u65ad\u5bb9\u5668\u7ba1\u7406\u83dc\u5355\u662f\u5426\u9700\u8981\u5c55\u793a\u3002

\u672c\u6587\u901a\u8fc7\u914d\u7f6e\u5b9e\u73b0\u4e86\uff1a \u5c06\u5bb9\u5668\u7ba1\u7406\u53ca\u53ef\u89c2\u6d4b\u6027\u7684\u83dc\u5355\u5728 \u5168\u5c40\u7ba1\u7406\u65e0\u6cd5\u5224\u65ad\u7684\u90e8\u5206, \u9ed8\u8ba4\u4e0d\u663e\u793a \uff0c \u901a\u8fc7 \u767d\u540d\u5355 \u6388\u6743\u7684\u65b9\u5f0f\uff0c\u5b9e\u73b0\u83dc\u5355\u7684\u9690\u85cf\u4e0e\u663e\u793a\uff08\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u9875\u9762\u6388\u6743\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u6743\u9650\uff0c\u5168\u5c40\u7ba1\u7406\u5747\u65e0\u6cd5\u611f\u77e5\u548c\u5224\u65ad\uff09\u3002

\u4f8b\u5982\uff1aA \u7528\u6237\u5728\u5bb9\u5668\u7ba1\u7406\u662f cluster A \u7684 Cluster Admin \u89d2\u8272\uff0c \u8fd9\u79cd\u60c5\u51b5\u4e0b\u5168\u5c40\u7ba1\u7406\u65e0\u6cd5\u5224\u65ad\u662f\u5426\u6709\u6743\u9650\u5c55\u793a\u5bb9\u5668\u7ba1\u7406\u83dc\u5355\u3002 \u901a\u8fc7\u672c\u6587\u6863\u914d\u7f6e\u540e\uff0c\u7528\u6237 A \u9ed8\u8ba4\u4e0d\u53ef\u89c1\u5bb9\u5668\u7ba1\u7406\u83dc\u5355\uff0c\u9700\u8981 \u663e\u5f0f\u5730\u5728\u5168\u5c40\u7ba1\u7406\u6388\u6743 \u624d\u53ef\u4ee5\u770b\u5230\u5bb9\u5668\u7ba1\u7406\u83dc\u5355\u3002

"},{"location":"admin/ghippo/best-practice/menu/menu-display-or-hiding.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u5df2\u5f00\u542f\u57fa\u4e8e\u6743\u9650\u663e\u793a/\u9690\u85cf\u83dc\u5355\u7684\u529f\u80fd\uff0c\u5f00\u542f\u65b9\u6cd5\u5982\u4e0b\uff1a

  • \u65b0\u5b89\u88c5\u7684\u73af\u5883, \u4f7f\u7528 helm install \u65f6\u589e\u52a0 --set global.navigatorVisibleDependency=true \u53c2\u6570
  • \u5df2\u6709\u73af\u5883\uff0chelm get values ghippo -n ghippo-system -o yaml \u5907\u4efd values, \u968f\u540e\u4fee\u6539 bak.yaml \u5e76\u6dfb\u52a0 global.navigatorVisibleDependency: true

\u518d\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5347\u7ea7\u5168\u5c40\u7ba1\u7406\uff1a

helm upgrade ghippo ghippo-release/ghippo \\  \n  -n ghippo-system \\  \n  -f ./bak.yaml \\  \n  --version ${version}\n
"},{"location":"admin/ghippo/best-practice/menu/menu-display-or-hiding.html#_3","title":"\u914d\u7f6e\u5bfc\u822a\u680f","text":"

\u5728 kpanda-global-cluster \u4e2d apply \u5982\u4e0b YAML\uff1a

apiVersion: ghippo.io/v1alpha1  \nkind: GProductNavigator  \nmetadata:  \n  name: kpanda-menus-custom  \nspec:  \n  category: container  \n  gproduct: kpanda  \n  iconUrl: ./ui/kpanda/kpanda.svg  \n  isCustom: true  \n  localizedName:  \n    en-US: Container Management  \n    zh-CN: \u5bb9\u5668\u7ba1\u7406  \n  menus:  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Clusters  \n        zh-CN: \u96c6\u7fa4\u5217\u8868  \n      name: Clusters  \n      order: 80  \n      url: ./kpanda/clusters  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Namespaces  \n        zh-CN: \u547d\u540d\u7a7a\u95f4  \n      name: Namespaces  \n      order: 70  \n      url: ./kpanda/namespaces  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Workloads  \n        zh-CN: \u5de5\u4f5c\u8d1f\u8f7d  \n      name: Workloads  \n      order: 60  \n      url: ./kpanda/workloads/deployments  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Permissions  \n        zh-CN: \u6743\u9650\u7ba1\u7406  \n      name: Permissions  \n      order: 10  \n      url: ./kpanda/rbac/content/cluster  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n  name: \u5bb9\u5668\u7ba1\u7406  \n  order: 50  \n  url: ./kpanda/clusters  \n  visible: true  \n\n---\napiVersion: ghippo.io/v1alpha1  \nkind: GProductNavigator  \nmetadata:  \n  name: insight-menus-custom  \nspec:  \n  category: microservice  \n  gproduct: insight  \n  iconUrl: ./ui/insight/logo.svg  \n  isCustom: true  \n  localizedName:  \n    en-US: Insight  \n    zh-CN: \u53ef\u89c2\u6d4b\u6027  \n  menus:  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Overview  \n        zh-CN: \u6982\u89c8  \n      name: Overview  \n      order: 9  \n      url: ./insight/overview  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Dashboard  \n        zh-CN: \u4eea\u8868\u76d8  \n      name: Dashboard  \n      order: 8  \n      url: ./insight/dashboard  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Infrastructure  \n        zh-CN: \u57fa\u7840\u8bbe\u65bd  \n      name: Infrastructure  \n      order: 7  \n      url: ./insight/clusters  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Metrics  \n        zh-CN: \u6307\u6807  \n      name: Metrics  \n      order: 6  \n      url: ./insight/metric/basic  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Logs  \n        zh-CN: \u65e5\u5fd7  \n      name: Logs  \n      order: 5  \n      url: ./insight/logs  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Trace Tracking  \n        zh-CN: \u94fe\u8def\u8ffd\u8e2a  \n      name: Trace Tracking  \n      order: 4  \n      url: ./insight/topology  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Alerts  \n        zh-CN: \u544a\u8b66  \n      name: Alerts  \n      order: 3  \n      url: ./insight/alerts/active/metrics  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: Collect Management  \n        zh-CN: \u91c7\u96c6\u7ba1\u7406  \n      name: Collect Management  \n      order: 2  \n      url: ./insight/agents  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n    - iconUrl: ''  \n      isCustom: true  \n      localizedName:  \n        en-US: System Management  \n        zh-CN: \u7cfb\u7edf\u7ba1\u7406  \n      name: System Management  \n      order: 1  \n      url: ./insight/system-components  \n      visible: true  \n      visibleDependency:  \n        permissions:  \n          - kpanda.cluster.*  \n          - kpanda.menu.get  \n  name: \u53ef\u89c2\u6d4b\u6027  \n  order: 30  \n  url: ./insight  \n  visible: true  \n\n---\napiVersion: ghippo.io/v1alpha1  \nkind: GProductResourcePermissions  \nmetadata:  \n  name: kpanda  \nspec:  \n  actions:  \n    - localizedName:  \n        en-US: Create  \n        zh-CN: \u521b\u5efa  \n      name: create  \n    - localizedName:  \n        en-US: Delete  \n        zh-CN: \u5220\u9664  \n      name: delete  \n    - localizedName:  \n        en-US: Update  \n        zh-CN: \u7f16\u8f91  \n      name: update  \n    - localizedName:  \n        en-US: Get  \n        zh-CN: \u67e5\u770b  \n      name: get  \n    - localizedName:  \n        en-US: Admin  \n        zh-CN: \u7ba1\u7406  \n      name: admin  \n  authScopes:  \n    - resourcePermissions:  \n        - actions:  \n            - name: get  \n            - dependPermissions:  \n                - action: get  \n              name: create  \n            - dependPermissions:  \n                - action: get  \n              name: update  \n            - dependPermissions:  \n                - action: get  \n              name: delete  \n          resourceType: cluster  \n        - actions:  \n            - name: get  \n          resourceType: menu  \n      scope: platform  \n    - resourcePermissions:  \n        - actions:  \n            - name: admin  \n              tips:  \n                - en-US: >-  \n                    If the workspace is bound to a cluster, it will be assigned  \n                    the Cluster Admin role upon authorization.  \n                  zh-CN: \u82e5\u5de5\u4f5c\u7a7a\u95f4\u7ed1\u5b9a\u4e86\u96c6\u7fa4\uff0c\u6388\u6743\u540e\u8fd8\u5c06\u88ab\u6620\u5c04\u4e3a\u5bf9\u5e94\u96c6\u7fa4\u7684 Cluster Admin \u89d2\u8272  \n          resourceType: cluster  \n        - actions:  \n            - name: get  \n              tips:  \n                - en-US: >-  \n                    If the workspace is bound to a namespace, it will be  \n                    assigned the NS View role upon authorization.  \n                  zh-CN: \u82e5\u5de5\u4f5c\u7a7a\u95f4\u7ed1\u5b9a\u4e86\u547d\u540d\u7a7a\u95f4\uff0c\u6388\u6743\u540e\u8fd8\u5c06\u88ab\u6620\u5c04\u4e3a\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u7684 NS View \u89d2\u8272  \n            - name: update  \n              tips:  \n                - en-US: >-  \n                    If the workspace is bound to a namespace, it will be  \n                    assigned the NS Edit role upon authorization.  \n                  zh-CN: \u82e5\u5de5\u4f5c\u7a7a\u95f4\u7ed1\u5b9a\u4e86\u547d\u540d\u7a7a\u95f4\uff0c\u6388\u6743\u540e\u8fd8\u5c06\u88ab\u6620\u5c04\u4e3a\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u7684 NS  Edit \u89d2\u8272  \n            - name: admin  \n              tips:  \n                - en-US: >-  \n                    If the workspace is bound to a namespace, it will be  \n                    assigned the NS Admin role upon authorization.  \n                  zh-CN: \u82e5\u5de5\u4f5c\u7a7a\u95f4\u7ed1\u5b9a\u4e86\u547d\u540d\u7a7a\u95f4\uff0c\u6388\u6743\u540e\u8fd8\u5c06\u88ab\u6620\u5c04\u4e3a\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u7684 NS Admin \u89d2\u8272  \n          resourceType: namespace  \n      scope: workspace  \n  gproduct: kpanda  \n  resourceTypes:  \n    - localizedName:  \n        en-US: Cluster Management  \n        zh-CN: \u96c6\u7fa4\u7ba1\u7406  \n      name: cluster  \n    - localizedName:  \n        en-US: Menu  \n        zh-CN: \u83dc\u5355  \n      name: menu  \n    - localizedName:  \n        en-US: Namespace Management  \n        zh-CN: \u547d\u540d\u7a7a\u95f4  \n      name: namespace\n
"},{"location":"admin/ghippo/best-practice/menu/menu-display-or-hiding.html#_4","title":"\u901a\u8fc7\u81ea\u5b9a\u4e49\u89d2\u8272\u5b9e\u73b0\u4e0a\u8ff0\u6548\u679c","text":"

Note

\u4ec5\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u83dc\u5355\u9700\u8981\u5355\u72ec\u914d\u7f6e\u83dc\u5355\u6743\u9650\uff0c\u5176\u4ed6\u6a21\u5757\u4f1a\u6839\u636e\u7528\u6237\u7684\u6743\u9650\u81ea\u52a8\u663e\u793a/\u9690\u85cf

\u521b\u5efa\u4e00\u4e2a\u81ea\u5b9a\u4e49\u89d2\u8272\uff0c\u5305\u542b\u7684\u6743\u9650\u70b9\u4e3a\u5bb9\u5668\u7ba1\u7406\u7684\u83dc\u5355\u67e5\u770b\u6743\u9650\uff0c\u540e\u7eed\u6388\u6743\u7ed9\u9700\u8981\u67e5\u770b\u5bb9\u5668\u7ba1\u7406\u83dc\u5355\u7684\u7528\u6237\u3002

\u6548\u679c\u5982\u4e0b\uff0c\u53ef\u4ee5\u770b\u5230\u5bb9\u5668\u7ba1\u7406\u548c\u53ef\u89c2\u6d4b\u6027\u7684\u5bfc\u822a\u680f\u83dc\u5355\uff1a

"},{"location":"admin/ghippo/best-practice/menu/navigator.html","title":"\u81ea\u5b9a\u4e49\u5bfc\u822a\u680f","text":"

\u5f53\u524d\u81ea\u5b9a\u4e49\u5bfc\u822a\u680f\u9700\u8981\u901a\u8fc7\u624b\u52a8\u521b\u5efa\u5bfc\u822a\u680f\u7684 YAML \uff0c\u5e76 apply \u5230\u96c6\u7fa4\u4e2d\u3002

"},{"location":"admin/ghippo/best-practice/menu/navigator.html#_2","title":"\u5bfc\u822a\u680f\u5206\u7c7b","text":"

\u82e5\u9700\u8981\u65b0\u589e\u6216\u91cd\u65b0\u6392\u5e8f\u5bfc\u822a\u680f\u5206\u7c7b\u53ef\u4ee5\u901a\u8fc7\u65b0\u589e\u3001\u4fee\u6539 category YAML \u5b9e\u73b0\u3002

category \u7684 YAML \u793a\u4f8b\u5982\u4e0b\uff1a

apiVersion: ghippo.io/v1alpha1\nkind: NavigatorCategory\nmetadata:\n  name: management-custom # (1)!\nspec:\n  name: Management # (2)!\n  isCustom: true # (3)!\n  localizedName: # (4)!\n    zh-CN: \u7ba1\u7406\n    en-US: Management\n  order: 100 # (5)!\n
  1. \u547d\u540d\u89c4\u5219\uff1a\u7531\u5c0f\u5199\u7684\"spec.name\"\u4e0e\"-custom\"\u800c\u6210
  2. \u82e5\u662f\u7528\u4e8e\u4fee\u6539category
  3. \u8be5\u5b57\u6bb5\u5fc5\u987b\u4e3atrue
  4. \u5b9a\u4e49\u5206\u7c7b\u7684\u4e2d\u82f1\u6587\u540d\u79f0
  5. \u6392\u5e8f\uff0c\u6570\u5b57\u8d8a\u5927\uff0c\u8d8a\u9760\u4e0a

\u7f16\u5199\u597d YAML \u6587\u4ef6\u540e\uff0c\u901a\u8fc7\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u540e\uff0c\u5237\u65b0\u9875\u9762\u5373\u53ef\u770b\u5230\u65b0\u589e\u3001\u4fee\u6539\u7684\u5bfc\u822a\u680f\u5206\u7c7b\u3002

kubectl apply -f xxx.yaml\n
"},{"location":"admin/ghippo/best-practice/menu/navigator.html#_3","title":"\u5bfc\u822a\u680f\u83dc\u5355","text":"

\u82e5\u9700\u8981\u65b0\u589e\u6216\u91cd\u65b0\u6392\u5e8f\u5bfc\u822a\u680f\u83dc\u5355\u53ef\u4ee5\u901a\u8fc7\u65b0\u589e navigator YAML \u5b9e\u73b0\u3002

Note

\u82e5\u9700\u8981\u7f16\u8f91\u5df2\u5b58\u5728\u7684\u5bfc\u822a\u680f\u83dc\u5355\uff08\u975e\u7528\u6237\u81ea\u5df1\u65b0\u589e\u7684 custom \u83dc\u5355\uff09\uff0c\u9700\u8981\u4ee4\u65b0\u589e custom \u83dc\u5355 gproduct \u5b57\u6bb5\u4e0e\u9700\u8981\u8986\u76d6\u7684\u83dc\u5355\u7684 gproduct \u76f8\u540c\uff0c \u65b0\u7684\u5bfc\u822a\u680f\u83dc\u5355\u4f1a\u5c06 menus \u4e2d name \u76f8\u540c\u7684\u90e8\u5206\u6267\u884c\u8986\u76d6\uff0cname \u4e0d\u540c\u7684\u5730\u65b9\u505a\u65b0\u589e\u64cd\u4f5c\u3002

"},{"location":"admin/ghippo/best-practice/menu/navigator.html#_4","title":"\u4e00\u7ea7\u83dc\u5355","text":"

\u4f5c\u4e3a\u4ea7\u54c1\u63d2\u5165\u5230\u67d0\u4e2a\u5bfc\u822a\u680f\u5206\u7c7b\u4e0b

apiVersion: ghippo.io/v1alpha1\nkind: GProductNavigator\nmetadata:\n  name: gmagpie-custom # (1)!\nspec:\n  name: Operations Management\n  iconUrl: ./ui/gmagpie/gmagpie.svg\n  localizedName: # (2)!\n    zh-CN: \u8fd0\u8425\u7ba1\u7406\n    en-US: Operations Management\n  url: ./gmagpie\n  category: management # (3)!\n  menus: # (4)!\n    - name: Access Control\n      iconUrl: ./ui/ghippo/menus/access-control.svg\n      localizedName:\n        zh-CN: \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\n        en-US: Access Control\n      url: ./ghippo/users\n      order: 50 # (5)!\n    - name: Workspace\n      iconUrl: ./ui/ghippo/menus/workspace-folder.svg\n      localizedName:\n        zh-CN: \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\n        en-US: Workspace and Folder\n      url: ./ghippo/workspaces\n      order: 40\n    - name: Audit Log\n      iconUrl: ./ui/ghippo/menus/audit-logs.svg\n      localizedName:\n        zh-CN: \u5ba1\u8ba1\u65e5\u5fd7\n        en-US: Audit Log\n      url: ./ghippo/audit\n      order: 30\n    - name: Settings\n      iconUrl: ./ui/ghippo/menus/setting.svg\n      localizedName:\n        zh-CN: \u5e73\u53f0\u8bbe\u7f6e\n        en-US: Settings\n      url: ./ghippo/settings\n      order: 10\n  gproduct: gmagpie # (6)!\n  visible: true # (7)!\n  isCustom: true # (8)!\n  order: 20 # (9)!\n  target: blank # (10)!\n
  1. \u547d\u540d\u89c4\u5219\uff1a\u7531\u5c0f\u5199\u7684\"spec.gproduct\"\u4e0e\"-custom\"\u800c\u6210
  2. \u5b9a\u4e49\u83dc\u5355\u7684\u4e2d\u82f1\u6587\u540d\u79f0
  3. \u4e0eparentGProduct\u4e8c\u9009\u4e00\uff0c\u7528\u4e8e\u533a\u5206\u4e00\u7ea7\u83dc\u5355\u8fd8\u662f\u4e8c\u7ea7\u83dc\u5355\uff0c\u4e0eNavigatorCategory\u7684spec.name\u5b57\u6bb5\u5bf9\u5e94\u6765\u5b8c\u6210\u5339\u914d
  4. \u4e8c\u7ea7\u83dc\u5355
  5. \u6392\u5e8f\uff0c\u6570\u5b57\u8d8a\u5c0f\uff0c\u8d8a\u9760\u4e0a
  6. \u5b9a\u4e49\u83dc\u5355\u7684\u6807\u5fd7\uff0c\u7528\u4e8e\u548cparentGProduct\u5b57\u6bb5\u8054\u52a8\uff0c\u5b9e\u73b0\u7236\u5b50\u5173\u7cfb\u3002
  7. \u8bbe\u7f6e\u8be5\u83dc\u5355\u662f\u5426\u53ef\u89c1\uff0c\u9ed8\u8ba4\u4e3atrue
  8. \u8be5\u5b57\u6bb5\u5fc5\u987b\u4e3atrue
  9. \u6392\u5e8f\uff0c\u6570\u5b57\u8d8a\u5927\uff0c\u8d8a\u9760\u4e0a
  10. \u65b0\u5f00\u6807\u7b7e\u9875
"},{"location":"admin/ghippo/best-practice/menu/navigator.html#_5","title":"\u4e8c\u7ea7\u83dc\u5355","text":"

\u4f5c\u4e3a\u5b50\u4ea7\u54c1\u63d2\u5165\u5230\u67d0\u4e2a\u4e00\u7ea7\u83dc\u5355\u7684\u4e8c\u7ea7\u83dc\u5355\u4e2d

apiVersion: ghippo.io/v1alpha1\nkind: GProductNavigator\nmetadata:\n  name: gmagpie-custom # (1)!\nspec:\n  name: Operations Management\n  iconUrl: ./ui/gmagpie/gmagpie.svg\n  localizedName: # (2)!\n    zh-CN: \u8fd0\u8425\u7ba1\u7406\n    en-US: Operations Management\n  url: ./gmagpie\n  parentGProduct: ghippo # (3)!\n  gproduct: gmagpie # (4)!\n  visible: true # (5)!\n  isCustom: true # (6)!\n  order: 20 # (7)!\n
  1. \u547d\u540d\u89c4\u5219\uff1a\u7531\u5c0f\u5199\u7684\"spec.gproduct\"\u4e0e\"-custom\"\u800c\u6210
  2. \u5b9a\u4e49\u83dc\u5355\u7684\u4e2d\u82f1\u6587\u540d\u79f0
  3. \u4e0ecategory\u4e8c\u9009\u4e00\uff0c\u7528\u4e8e\u533a\u5206\u4e00\u7ea7\u83dc\u5355\u8fd8\u662f\u4e8c\u7ea7\u83dc\u5355, \u82e5\u6dfb\u52a0\u8be5\u5b57\u6bb5\uff0c\u5219\u4f1a\u5ffd\u89c6\u6389menus\u5b57\u6bb5\uff0c\u5e76\u5c06\u8be5\u83dc\u5355\u4f5c\u4e3a\u4e8c\u7ea7\u83dc\u5355\u63d2\u5165\u5230\u4e0egproduct\u4e3aghippo\u7684\u4e00\u7ea7\u83dc\u5355\u4e2d
  4. \u5b9a\u4e49\u83dc\u5355\u7684\u6807\u5fd7\uff0c\u7528\u4e8e\u548cparentGProduct\u5b57\u6bb5\u8054\u52a8\uff0c\u5b9e\u73b0\u7236\u5b50\u5173\u7cfb
  5. \u8bbe\u7f6e\u8be5\u83dc\u5355\u662f\u5426\u53ef\u89c1\uff0c\u9ed8\u8ba4\u4e3atrue
  6. \u8be5\u5b57\u6bb5\u5fc5\u987b\u4e3atrue
  7. \u6392\u5e8f\uff0c\u6570\u5b57\u8d8a\u5927\uff0c\u8d8a\u9760\u4e0a
"},{"location":"admin/ghippo/best-practice/oem/custom-idp.html","title":"\u5b9a\u5236 AI \u7b97\u529b\u4e2d\u5fc3\u5bf9\u63a5\u5916\u90e8\u8eab\u4efd\u63d0\u4f9b\u5546 (IdP)","text":"

\u8eab\u4efd\u63d0\u4f9b\u5546\uff08IdP, Identity Provider\uff09\uff1a\u5f53 AI \u7b97\u529b\u4e2d\u5fc3\u9700\u8981\u4f7f\u7528\u5ba2\u6237\u7cfb\u7edf\u4f5c\u4e3a\u7528\u6237\u6e90\uff0c \u4f7f\u7528\u5ba2\u6237\u7cfb\u7edf\u767b\u5f55\u754c\u9762\u6765\u8fdb\u884c\u767b\u5f55\u8ba4\u8bc1\u65f6\uff0c\u8be5\u5ba2\u6237\u7cfb\u7edf\u88ab\u79f0\u4e3a AI \u7b97\u529b\u4e2d\u5fc3\u7684\u8eab\u4efd\u63d0\u4f9b\u5546

"},{"location":"admin/ghippo/best-practice/oem/custom-idp.html#_1","title":"\u9002\u7528\u573a\u666f","text":"

\u5982\u679c\u5ba2\u6237\u5bf9 Ghippo \u767b\u5f55 IdP \u6709\u9ad8\u5ea6\u5b9a\u5236\u9700\u6c42\uff0c\u4f8b\u5982\u652f\u6301\u4f01\u4e1a\u5fae\u4fe1\u3001\u5fae\u4fe1\u7b49\u5176\u4ed6\u793e\u4f1a\u7ec4\u7ec7\u767b\u5f55\u9700\u6c42\uff0c\u8bf7\u6839\u636e\u672c\u6587\u6863\u5b9e\u65bd\u3002

"},{"location":"admin/ghippo/best-practice/oem/custom-idp.html#_2","title":"\u652f\u6301\u7248\u672c","text":"

Ghippo 0.15.0\u53ca\u4ee5\u4e0a\u7248\u672c\u3002

"},{"location":"admin/ghippo/best-practice/oem/custom-idp.html#_3","title":"\u5177\u4f53\u65b9\u6cd5","text":""},{"location":"admin/ghippo/best-practice/oem/custom-idp.html#ghippo-keycloak-plugin","title":"\u81ea\u5b9a\u4e49 ghippo keycloak plugin","text":"
  1. \u5b9a\u5236 plugin

    \u53c2\u8003 keycloak \u5b98\u65b9\u6587\u6863\u548c keycloak \u81ea\u5b9a\u4e49 IdP \u8fdb\u884c\u5f00\u53d1\u3002

  2. \u6784\u5efa\u955c\u50cf

    # FROM scratch\nFROM scratch\n\n# plugin\nCOPY ./xxx-jar-with-dependencies.jar /plugins/\n

Note

\u5982\u679c\u9700\u8981\u4e24\u4e2a\u5b9a\u5236\u5316 IdP\uff0c\u9700\u8981\u590d\u5236\u4e24\u4e2a jar \u5305\u3002

"},{"location":"admin/ghippo/best-practice/oem/custom-idp.html#ghippo-keycloak-plugin_1","title":"\u90e8\u7f72 Ghippo keycloak plugin \u6b65\u9aa4","text":"
  1. \u628a Ghippo \u5347\u7ea7\u5230 0.15.0 \u6216\u4ee5\u4e0a\u3002 \u60a8\u4e5f\u53ef\u4ee5\u76f4\u63a5\u5b89\u88c5\u90e8\u7f72 Ghippo 0.15.0 \u7248\u672c\uff0c\u4f46\u9700\u8981\u628a\u4ee5\u4e0b\u4fe1\u606f\u624b\u52a8\u8bb0\u5f55\u4e0b\u6765\u3002

    helm -n ghippo-system get values ghippo -o yaml\n
    apiserver:\n  image:\n    repository: release.daocloud.io/ghippo-ci/ghippo-apiserver\n    tag: v0.4.2-test-3-gaba5ec2\ncontrollermanager:\n  image:\n    repository: release.daocloud.io/ghippo-ci/ghippo-apiserver\n    tag: v0.4.2-test-3-gaba5ec2\nglobal:\n  database:\n    builtIn: true\n  reverseProxy: http://192.168.31.10:32628\n
  2. \u5347\u7ea7\u6210\u529f\u540e\uff0c\u624b\u5de5\u8dd1\u4e00\u4e2a\u5b89\u88c5\u547d\u4ee4\uff0c --set \u91cc\u8bbe\u7684\u53c2\u6570\u503c\u4ece\u4e0a\u8ff0\u4fdd\u5b58\u7684\u5185\u5bb9\u91cc\u5f97\u5230\uff0c\u5e76\u4e14\u5916\u52a0\u51e0\u4e2a\u53c2\u6570\u503c\uff1a

    • global.idpPlugin.enabled\uff1a\u662f\u5426\u542f\u7528\u5b9a\u5236 plugin\uff0c\u9ed8\u8ba4\u5df2\u5173\u95ed
    • global.idpPlugin.image.repository\uff1a\u521d\u59cb\u5316\u81ea\u5b9a\u4e49 plugin \u7684 initContainer \u7528\u7684 image \u5730\u5740
    • global.idpPlugin.image.tag\uff1a\u521d\u59cb\u5316\u81ea\u5b9a\u4e49 plugin \u7684 initContainer \u7528\u7684 image tag
    • global.idpPlugin.path\uff1a\u81ea\u5b9a\u4e49 plugin \u7684\u76ee\u5f55\u6587\u4ef6\u5728\u4e0a\u8ff0 image \u91cc\u6240\u5728\u7684\u4f4d\u7f6e

    \u5177\u4f53\u793a\u4f8b\u5982\u4e0b\uff1a

    helm upgrade \\\n    ghippo \\\n    ghippo-release/ghippo \\\n    --version v0.4.2-test-3-gaba5ec2 \\\n    -n ghippo-system \\\n    --set apiserver.image.repository=release.daocloud.io/ghippo-ci/ghippo-apiserver \\\n    --set apiserver.image.tag=v0.4.2-test-3-gaba5ec2 \\\n    --set controllermanager.image.repository=release.daocloud.io/ghippo-ci/ghippo-apiserver \\\n    --set controllermanager.image.tag=v0.4.2-test-3-gaba5ec2 \\\n    --set global.reverseProxy=http://192.168.31.10:32628 \\\n    --set global.database.builtIn=true \\\n    --set global.idpPlugin.enabled=true \\\n    --set global.idpPlugin.image.repository=chenyang-idp \\\n    --set global.idpPlugin.image.tag=v0.0.1 \\\n    --set global.idpPlugin.path=/plugins/.\n
  3. \u5728 keycloak \u7ba1\u7406\u9875\u9762\u9009\u62e9\u6240\u8981\u4f7f\u7528\u7684\u63d2\u4ef6\u3002

"},{"location":"admin/ghippo/best-practice/oem/demo.html","title":"gproduct-demo","text":"

\u672c\u9875\u8bf4\u660e\u5982\u4f55\u642d\u5efa GProduct Demo \u73af\u5883\u3002

"},{"location":"admin/ghippo/best-practice/oem/demo.html#_1","title":"\u642d\u5efa\u73af\u5883","text":"
npm install\n

\u7f16\u8bd1\u548c\u70ed\u52a0\u8f7d\u5f00\u53d1\u73af\u5883\uff1a

npm run serve\n

\u7f16\u8bd1\u548c\u6784\u5efa\uff1a

npm run build\n

\u8865\u5168 Lint \u68c0\u67e5\u6587\u4ef6\uff1a

npm run lint\n
"},{"location":"admin/ghippo/best-practice/oem/demo.html#_2","title":"\u81ea\u5b9a\u4e49\u914d\u7f6e","text":"

\u53c2\u89c1\u914d\u7f6e\u53c2\u8003\u3002

\u6784\u5efa\u955c\u50cf\uff1a

docker build -t release.daocloud.io/henry/gproduct-demo .\n

\u5728 K8s \u4e0a\u8fd0\u884c\uff1a

kubectl apply -f demo.yaml\n
"},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html","title":"Keycloak \u81ea\u5b9a\u4e49 IdP","text":"

\u8981\u6c42\uff1akeycloak >= v20

\u5df2\u77e5\u95ee\u9898 keycloak >= v21\uff0c\u5220\u9664\u4e86\u65e7\u7248 theme \u7684\u652f\u6301\uff0c\u53ef\u80fd\u4f1a\u5728 v22 \u4fee\u590d\u3002 \u53c2\u89c1 Issue #15344 \u3002

\u6b64\u6b21 demo \u4f7f\u7528 Keycloak v20.0.5\u3002

"},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html#source","title":"\u57fa\u4e8e source \u5f00\u53d1","text":""},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html#_1","title":"\u914d\u7f6e\u73af\u5883","text":"

\u53c2\u7167 keycloak/building.md \u914d\u7f6e\u73af\u5883\u3002

\u53c2\u7167 keycloak/README.md \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

cd quarkus\nmvn -f ../pom.xml clean install -DskipTestsuite -DskipExamples -DskipTests\n
"},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html#ide","title":"\u4ece IDE \u8fd0\u884c","text":""},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html#service","title":"\u6dfb\u52a0 service \u4ee3\u7801","text":""},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html#keycloak","title":"\u5982\u679c\u53ef\u4ece keycloak \u7ee7\u627f\u90e8\u5206\u529f\u80fd","text":"

\u5728\u76ee\u5f55 services/src/main/java/org/keycloak/broker \u4e0b\u6dfb\u52a0\u6587\u4ef6\uff1a

\u6587\u4ef6\u540d\u9700\u8981\u662f xxxProvider.java \u548c xxxProviderFactory.java

xxxProviderFactory.java \u793a\u4f8b\uff1a

\u7559\u610f PROVIDER_ID = \"oauth\"; \u8fd9\u4e2a\u53d8\u91cf\uff0c\u540e\u9762\u5b9a\u4e49 html \u4f1a\u7528\u5230\u3002

xxxProvider.java \u793a\u4f8b

"},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html#keycloak_1","title":"\u5982\u679c\u4e0d\u80fd\u4ece keycloak \u7ee7\u627f\u529f\u80fd","text":"

\u53c2\u8003\u4e0b\u56fe\u4e2d\u7684\u4e09\u4e2a\u6587\u4ef6\u7f16\u5199\u4f60\u7684\u4ee3\u7801\uff1a

\u6dfb\u52a0 xxxProviderFactory \u5230 resource service

\u5728 services/src/main/resources/META-INF/services/org.keycloak.broker.provider.IdentityProviderFactory \u6dfb\u52a0 xxxProviderFactory\uff0c\u8fd9\u6837\u521a\u521a\u7f16\u5199\u7684\u80fd\u5de5\u4f5c\u4e86\uff1a

\u6dfb\u52a0 html \u6587\u4ef6

\u590d\u5236 themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-oidc.html \u6587\u4ef6\u5230\uff08\u6539\u540d\u4e3a realm-identity-provider-oauth.html \uff0c\u8fd8\u8bb0\u5f97\u4e0a\u6587\u4e2d\u9700\u8981\u7559\u610f\u7684\u53d8\u91cf\u5417\uff09 themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-oauth.html

\u5230\u6b64\u6240\u6709\u7684\u6587\u4ef6\u90fd\u6dfb\u52a0\u5b8c\u6210\u4e86\uff0c\u5f00\u59cb\u8c03\u8bd5\u529f\u80fd\u3002

"},{"location":"admin/ghippo/best-practice/oem/keycloak-idp.html#jar","title":"\u6253\u5305\u6210 jar \u4f5c\u4e3a\u63d2\u4ef6\u8fd0\u884c","text":"

\u65b0\u5efa\u4e00\u4e2a java \u9879\u76ee\uff0c\u5e76\u5c06\u4e0a\u9762\u7684\u4ee3\u7801\u590d\u5236\u5230\u9879\u76ee\u4e2d\uff0c\u5982\u4e0b\u6240\u793a\uff1a

\u53c2\u89c1 pom.xml\u3002

\u8fd0\u884c mvn clean package \uff0c\u6253\u5305\u5b8c\u6210\u5f97\u5230 xxx-jar-with-dependencies.jar \u6587\u4ef6\u3002

\u4e0b\u8f7d keycloak Release 20.0.5 zip \u5305\u5e76\u89e3\u538b\u3002

\u5c06 xxx-jar-with-dependencies.jar \u590d\u5236\u5230 keycloak-20.0.5/providers \u76ee\u5f55\u4e2d\u3002

\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u529f\u80fd\u662f\u5426\u5b8c\u6574\uff1a

bin/kc.sh start-dev\n
"},{"location":"admin/ghippo/best-practice/oem/oem-in.html","title":"\u5982\u4f55\u5c06\u5ba2\u6237\u7cfb\u7edf\u96c6\u6210\u5230 AI \u7b97\u529b\u4e2d\u5fc3\uff08OEM IN\uff09","text":"

OEM IN \u662f\u6307\u5408\u4f5c\u4f19\u4f34\u7684\u5e73\u53f0\u4f5c\u4e3a\u5b50\u6a21\u5757\u5d4c\u5165 AI \u7b97\u529b\u4e2d\u5fc3\uff0c\u51fa\u73b0\u5728 AI \u7b97\u529b\u4e2d\u5fc3\u4e00\u7ea7\u5bfc\u822a\u680f\u3002 \u7528\u6237\u901a\u8fc7 AI \u7b97\u529b\u4e2d\u5fc3\u8fdb\u884c\u767b\u5f55\u548c\u7edf\u4e00\u7ba1\u7406\u3002\u5b9e\u73b0 OEM IN \u5171\u5206\u4e3a 5 \u6b65\uff0c\u5206\u522b\u662f\uff1a

  1. \u7edf\u4e00\u57df\u540d
  2. \u6253\u901a\u7528\u6237\u4f53\u7cfb
  3. \u5bf9\u63a5\u5bfc\u822a\u680f
  4. \u5b9a\u5236\u5916\u89c2
  5. \u6253\u901a\u6743\u9650\u4f53\u7cfb\uff08\u53ef\u9009\uff09

Note

\u4ee5\u4e0b\u4f7f\u7528\u5f00\u6e90\u8f6f\u4ef6 Label Studio \u6765\u505a\u5d4c\u5957\u6f14\u793a\u3002\u5b9e\u9645\u573a\u666f\u9700\u8981\u81ea\u5df1\u89e3\u51b3\u5ba2\u6237\u7cfb\u7edf\u7684\u95ee\u9898\uff1a

\u4f8b\u5982\u5ba2\u6237\u7cfb\u7edf\u9700\u8981\u81ea\u5df1\u6dfb\u52a0\u4e00\u4e2a Subpath\uff0c\u7528\u4e8e\u533a\u5206\u54ea\u4e9b\u662f AI \u7b97\u529b\u4e2d\u5fc3\u7684\u670d\u52a1\uff0c\u54ea\u4e9b\u662f\u5ba2\u6237\u7cfb\u7edf\u7684\u670d\u52a1\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#_1","title":"\u73af\u5883\u51c6\u5907","text":"
  1. \u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u73af\u5883\uff1a

    https://10.6.202.177:30443 \u4f5c\u4e3a AI \u7b97\u529b\u4e2d\u5fc3\u7684\u73af\u5883\u3002

  2. \u90e8\u7f72\u5ba2\u6237\u7cfb\u7edf\u73af\u5883\uff1a

    http://10.6.202.177:30123 \u4f5c\u4e3a\u5ba2\u6237\u7cfb\u7edf

    \u5e94\u7528\u8fc7\u7a0b\u4e2d\u5bf9\u5ba2\u6237\u7cfb\u7edf\u7684\u64cd\u4f5c\u8bf7\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u8c03\u6574\u3002

  3. \u89c4\u5212\u5ba2\u6237\u7cfb\u7edf\u7684 Subpath \u8def\u5f84\uff1a http://10.6.202.177:30123/label-studio \uff08\u5efa\u8bae\u4f7f\u7528\u8fa8\u8bc6\u5ea6\u9ad8\u7684\u540d\u79f0\u4f5c\u4e3a Subpath\uff0c\u4e0d\u80fd\u4e0e\u4e3b AI \u7b97\u529b\u4e2d\u5fc3\u7684 HTTP router \u53d1\u751f\u51b2\u7a81\uff09\u3002 \u8bf7\u786e\u4fdd\u7528\u6237\u901a\u8fc7 http://10.6.202.177:30123/label-studio \u80fd\u591f\u6b63\u5e38\u8bbf\u95ee\u5ba2\u6237\u7cfb\u7edf\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#_2","title":"\u7edf\u4e00\u57df\u540d\u548c\u7aef\u53e3","text":"
  1. SSH \u767b\u5f55\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u670d\u52a1\u5668\u3002

    ssh root@10.6.202.177\n
  2. \u4f7f\u7528 vim \u547d\u4ee4\u521b\u5efa\u548c\u4fee\u6539 label-studio.yaml \u6587\u4ef6

    vim label-studio.yaml\n
    label-studio.yaml
    apiVersion: networking.istio.io/v1beta1\nkind: ServiceEntry\nmetadata:\n  name: label-studio\n  namespace: ghippo-system\nspec:\n  exportTo:\n  - \"*\"\n  hosts:\n  - label-studio.svc.external\n  ports:\n  # \u6dfb\u52a0\u865a\u62df\u7aef\u53e3\n  - number: 80\n    name: http\n    protocol: HTTP\n  location: MESH_EXTERNAL\n  resolution: STATIC\n  endpoints:\n  # \u6539\u4e3a\u5ba2\u6237\u7cfb\u7edf\u7684\u57df\u540d\uff08\u6216IP\uff09\n  - address: 10.6.202.177\n    ports:\n      # \u6539\u4e3a\u5ba2\u6237\u7cfb\u7edf\u7684\u7aef\u53e3\u53f7\n      http: 30123\n---\napiVersion: networking.istio.io/v1alpha3\nkind: VirtualService\nmetadata:\n  # \u4fee\u6539\u4e3a\u5ba2\u6237\u7cfb\u7edf\u7684\u540d\u5b57\n  name: label-studio\n  namespace: ghippo-system\nspec:\n  exportTo:\n  - \"*\"\n  hosts:\n  - \"*\"\n  gateways:\n  - ghippo-gateway\n  http:\n  - match:\n      - uri:\n          exact: /label-studio # \u4fee\u6539\u4e3a\u5ba2\u6237\u7cfb\u7edf\u5728 AI \u7b97\u529b\u4e2d\u5fc3.0 Web UI \u5165\u53e3\u4e2d\u7684\u8def\u7531\u5730\u5740\n      - uri:\n          prefix: /label-studio/ # \u4fee\u6539\u4e3a\u5ba2\u6237\u7cfb\u7edf\u5728 AI \u7b97\u529b\u4e2d\u5fc3.0 Web UI \u5165\u53e3\u4e2d\u7684\u8def\u7531\u5730\u5740\n    route:\n    - destination:\n        # \u4fee\u6539\u4e3a\u4e0a\u6587 ServiceEntry \u4e2d\u7684 spec.hosts \u7684\u503c\n        host: label-studio.svc.external\n        port:\n          # \u4fee\u6539\u4e3a\u4e0a\u6587 ServiceEntry \u4e2d\u7684 spec.ports \u7684\u503c\n          number: 80\n---\napiVersion: security.istio.io/v1beta1\nkind: AuthorizationPolicy\nmetadata:\n  # \u4fee\u6539\u4e3a\u5ba2\u6237\u7cfb\u7edf\u7684\u540d\u5b57\n  name: label-studio\n  namespace: istio-system\nspec:\n  action: ALLOW\n  selector:\n    matchLabels:\n      app: istio-ingressgateway\n  rules:\n  - from:\n    - source:\n        requestPrincipals:\n        - '*'\n  - to:\n    - operation:\n        paths:\n        - /label-studio # \u4fee\u6539\u4e3a VirtualService \u4e2d\u7684 spec.http.match.uri.prefix \u7684\u503c\n        - /label-studio/* # \u4fee\u6539\u4e3a VirtualService \u4e2d\u7684 spec.http.match.uri.prefix \u7684\u503c\uff08\u6ce8\u610f\uff0c\u672b\u5c3e\u9700\u8981\u6dfb\u52a0 \"*\"\uff09\n
  3. \u4f7f\u7528 kubectl \u547d\u4ee4\u5e94\u7528 label-studio.yaml \uff1a

    kubectl apply -f\u00a0label-studio.yaml\n
  4. \u9a8c\u8bc1 Label Studio UI \u7684 IP \u548c \u7aef\u53e3\u662f\u5426\u4e00\u81f4\uff1a

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#_3","title":"\u6253\u901a\u7528\u6237\u4f53\u7cfb","text":"

\u5c06\u5ba2\u6237\u7cfb\u7edf\u4e0e AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u901a\u8fc7 OIDC/OAUTH \u7b49\u534f\u8bae\u5bf9\u63a5\uff0c\u4f7f\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u540e\u8fdb\u5165\u5ba2\u6237\u7cfb\u7edf\u65f6\u65e0\u9700\u518d\u6b21\u767b\u5f55\u3002

Note

\u8fd9\u91cc\u4f7f\u7528\u4e24\u5957 AI \u7b97\u529b\u4e2d\u5fc3\u76f8\u4e92\u5bf9\u63a5\u6765\u8fdb\u884c\u6f14\u793a\u3002\u6db5\u76d6\u5c06 AI \u7b97\u529b\u4e2d\u5fc3 \u4f5c\u4e3a\u7528\u6237\u6e90\u767b\u5f55\u5ba2\u6237\u5e73\u53f0\uff0c\u548c\u5c06\u5ba2\u6237\u5e73\u53f0\u4f5c\u4e3a\u7528\u6237\u6e90\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u4e24\u79cd\u573a\u666f\u3002

  1. AI \u7b97\u529b\u4e2d\u5fc3\u4f5c\u4e3a\u7528\u6237\u6e90\uff0c\u767b\u5f55\u5ba2\u6237\u5e73\u53f0\uff1a \u9996\u5148\u5c06\u7b2c\u4e00\u5957 AI \u7b97\u529b\u4e2d\u5fc3\u4f5c\u4e3a\u7528\u6237\u6e90\uff0c\u5b9e\u73b0\u5bf9\u63a5\u540e\u7b2c\u4e00\u5957 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u7684\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 OIDC \u76f4\u63a5\u767b\u5f55\u7b2c\u4e8c\u5957 AI \u7b97\u529b\u4e2d\u5fc3\uff0c \u800c\u65e0\u9700\u5728\u7b2c\u4e8c\u5957\u4e2d\u518d\u6b21\u521b\u5efa\u7528\u6237\u3002\u5728\u7b2c\u4e00\u5957 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u901a\u8fc7 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u63a5\u5165\u7ba1\u7406 \u521b\u5efa SSO \u63a5\u5165\u3002

  2. \u5ba2\u6237\u5e73\u53f0\u4f5c\u4e3a\u7528\u6237\u6e90\uff0c\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\uff1a \u5c06\u7b2c\u4e00\u5957 AI \u7b97\u529b\u4e2d\u5fc3 \u4e2d\u751f\u6210\u7684\u5ba2\u6237\u7aef ID\u3001\u5ba2\u6237\u7aef\u5bc6\u94a5\u3001\u5355\u70b9\u767b\u5f55 URL \u7b49\u586b\u5199\u5230\u7b2c\u4e8c\u5957 AI \u7b97\u529b\u4e2d\u5fc3 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u8eab\u4efd\u63d0\u4f9b\u5546 -> OIDC \u4e2d\uff0c\u5b8c\u6210\u7528\u6237\u5bf9\u63a5\u3002 \u5bf9\u63a5\u540e\uff0c\u7b2c\u4e00\u5957 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u7684\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 OIDC \u76f4\u63a5\u767b\u5f55\u7b2c\u4e8c\u5957 AI \u7b97\u529b\u4e2d\u5fc3\uff0c\u800c\u65e0\u9700\u5728\u7b2c\u4e8c\u5957\u4e2d\u518d\u6b21\u521b\u5efa\u7528\u6237\u3002

  3. \u5bf9\u63a5\u5b8c\u6210\u540e\uff0c\u7b2c\u4e8c\u5957 AI \u7b97\u529b\u4e2d\u5fc3 \u767b\u5f55\u9875\u9762\u5c06\u51fa\u73b0 OIDC \u9009\u9879\uff0c\u9996\u6b21\u767b\u5f55\u65f6\u9009\u62e9\u901a\u8fc7 OIDC \u767b\u5f55\uff08\u81ea\u5b9a\u4e49\u540d\u79f0\uff0c\u8fd9\u91cc\u662f\u540d\u79f0\u662f loginname\uff09\uff0c \u540e\u7eed\u5c06\u76f4\u63a5\u8fdb\u5165\u65e0\u9700\u518d\u6b21\u9009\u62e9\u3002

Note

\u4f7f\u7528\u4e24\u5957 AI \u7b97\u529b\u4e2d\u5fc3,\u8868\u660e\u5ba2\u6237\u53ea\u8981\u652f\u6301 OIDC \u534f\u8bae\uff0c\u65e0\u8bba\u662f AI \u7b97\u529b\u4e2d\u5fc3\u4f5c\u4e3a\u7528\u6237\u6e90\uff0c\u8fd8\u662f\u201c\u5ba2\u6237\u5e73\u53f0\u201d\u4f5c\u4e3a\u7528\u6237\u6e90\uff0c\u4e24\u79cd\u573a\u666f\u90fd\u652f\u6301\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#_4","title":"\u5bf9\u63a5\u5bfc\u822a\u680f","text":"

\u53c2\u8003\u6587\u6863\u4e0b\u65b9\u7684 tar \u5305\u6765\u5b9e\u73b0\u4e00\u4e2a\u7a7a\u58f3\u7684\u524d\u7aef\u5b50\u5e94\u7528\uff0c\u628a\u5ba2\u6237\u7cfb\u7edf\u4ee5 iframe \u7684\u5f62\u5f0f\u653e\u8fdb\u8be5\u7a7a\u58f3\u5e94\u7528\u91cc\u3002

  1. \u4e0b\u8f7d gproduct-demo-main.tar.gz \u6587\u4ef6\uff0c\u6253\u5f00 src/App-iframe.vue \u6587\u4ef6\uff0c\u4fee\u6539\u5176\u4e2d\u7684 src \u5c5e\u6027\u503c\uff08\u5373\u8fdb\u5165\u5ba2\u6237\u7cfb\u7edf\u7684\u5730\u5740\uff09\uff1a

    • \u7edd\u5bf9\u5730\u5740\uff1asrc=\"https://10.6.202.177:30443/label-studio\" (AI \u7b97\u529b\u4e2d\u5fc3\u5730\u5740 + Subpath)
    • \u76f8\u5bf9\u5730\u5740\uff1asrc=\"./external-anyproduct/insight\"
    App-iframe.vue
    <template>\n  <iframe>\n    src=\"https://daocloud.io\"\n    title=\"demo\"\n    class=\"iframe-container\"\n  </iframe>\n</template>\n\n<style lang=\"scss\">\nhtml,\nbody {\n  height: 100%;\n}\n\n# app {\n  display: flex;\n  height: 100%;\n  .iframe-container {\n    border: 0;\n    flex: 1 1 0;\n  }\n}\n</style>\n
  2. \u5220\u9664 src \u6587\u4ef6\u5939\u4e0b\u7684 App.vue \u548c main.ts \u6587\u4ef6\uff0c\u540c\u65f6\u5c06\uff1a

    • App-iframe.vue \u91cd\u547d\u540d\u4e3a App.vue
    • main-iframe.ts \u91cd\u547d\u540d\u4e3a main.ts
  3. \u6309\u7167 readme \u6b65\u9aa4\u6784\u5efa\u955c\u50cf\uff08\u6ce8\u610f\uff1a\u6267\u884c\u6700\u540e\u4e00\u6b65\u524d\u9700\u8981\u5c06 demo.yaml \u4e2d\u7684\u955c\u50cf\u5730\u5740\u66ff\u6362\u6210\u6784\u5efa\u51fa\u7684\u955c\u50cf\u5730\u5740\uff09

    demo.yaml
    kind: Namespace\napiVersion: v1\nmetadata:\n  name: gproduct-demo\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: gproduct-demo\n  namespace: gproduct-demo\n  labels:\n    app: gproduct-demo\nspec:\n  selector:\n    matchLabels:\n      app: gproduct-demo\n  template:\n    metadata:\n      name: gproduct-demo\n      labels:\n        app: gproduct-demo\n    spec:\n      containers:\n      - name: gproduct-demo\n        image: release.daocloud.io/gproduct-demo # \u4fee\u6539\u8fd9\u4e2a\u955c\u50cf\u5730\u5740\n        ports:\n        - containerPort: 80\n---\napiVersion: v1\nkind: Service\n...\n

\u5bf9\u63a5\u5b8c\u6210\u540e\uff0c\u5c06\u5728 AI \u7b97\u529b\u4e2d\u5fc3\u7684\u4e00\u7ea7\u5bfc\u822a\u680f\u51fa\u73b0 \u5ba2\u6237\u7cfb\u7edf \uff0c\u70b9\u51fb\u53ef\u8fdb\u5165\u5ba2\u6237\u7cfb\u7edf\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#_5","title":"\u5b9a\u5236\u5916\u89c2","text":"

Note

AI \u7b97\u529b\u4e2d\u5fc3\u652f\u6301\u901a\u8fc7\u5199 CSS \u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u5916\u89c2\u5b9a\u5236\u3002\u5b9e\u9645\u5e94\u7528\u4e2d\u5ba2\u6237\u7cfb\u7edf\u5982\u4f55\u5b9e\u73b0\u5916\u89c2\u5b9a\u5236\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u5904\u7406\u3002

\u767b\u5f55\u5ba2\u6237\u7cfb\u7edf\uff0c\u901a\u8fc7 \u5168\u5c40\u7ba1\u7406 -> \u5e73\u53f0\u8bbe\u7f6e -> \u5916\u89c2\u5b9a\u5236 \u53ef\u4ee5\u81ea\u5b9a\u4e49\u5e73\u53f0\u80cc\u666f\u989c\u8272\u3001logo\u3001\u540d\u79f0\u7b49\uff0c \u5177\u4f53\u64cd\u4f5c\u8bf7\u53c2\u7167\u5916\u89c2\u5b9a\u5236\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#_6","title":"\u6253\u901a\u6743\u9650\u4f53\u7cfb\uff08\u53ef\u9009\uff09","text":"

\u65b9\u6848\u601d\u8def\u4e00\uff1a

\u5b9a\u5236\u5316\u56e2\u961f\u53ef\u5b9e\u73b0\u4e00\u5b9a\u5236\u6a21\u5757\uff0cAI \u7b97\u529b\u4e2d\u5fc3\u5c06\u6bcf\u4e00\u6b21\u7684\u7528\u6237\u767b\u5f55\u4e8b\u4ef6\u901a\u8fc7 Webhook \u7684\u65b9\u5f0f\u901a\u77e5\u5230\u5b9a\u5236\u6a21\u5757\uff0c \u5b9a\u5236\u6a21\u5757\u53ef\u81ea\u884c\u8c03\u7528 AnyProduct \u548c AI \u7b97\u529b\u4e2d\u5fc3\u7684 OpenAPI \u5c06\u8be5\u7528\u6237\u7684\u6743\u9650\u4fe1\u606f\u540c\u6b65\u3002

\u65b9\u6848\u601d\u8def\u4e8c\uff1a

\u901a\u8fc7 Webhook \u65b9\u5f0f\uff0c\u5c06\u6bcf\u4e00\u6b21\u7684\u6388\u6743\u53d8\u5316\u90fd\u901a\u77e5\u5230 AnyProduct\uff08\u5982\u6709\u9700\u6c42\uff0c\u540e\u7eed\u53ef\u5b9e\u73b0\uff09\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#anyproduct-ai","title":"AnyProduct \u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u7684\u5176\u4ed6\u80fd\u529b(\u53ef\u9009)","text":"

\u64cd\u4f5c\u65b9\u6cd5\u4e3a\u8c03\u7528 AI \u7b97\u529b\u4e2d\u5fc3OpenAPI\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-in.html#_7","title":"\u53c2\u8003\u8d44\u6599","text":"
  • \u53c2\u8003 OEM OUT \u6587\u6863
  • \u53c2\u9605 gProduct-demo-main \u5bf9\u63a5 tar \u5305
"},{"location":"admin/ghippo/best-practice/oem/oem-out.html","title":"\u5982\u4f55\u5c06AI \u7b97\u529b\u4e2d\u5fc3\u96c6\u6210\u5230\u5ba2\u6237\u7cfb\u7edf\uff08OEM OUT\uff09","text":"

OEM OUT \u662f\u6307\u5c06 AI \u7b97\u529b\u4e2d\u5fc3\u4f5c\u4e3a\u5b50\u6a21\u5757\u63a5\u5165\u5176\u4ed6\u4ea7\u54c1\uff0c\u51fa\u73b0\u5728\u5176\u4ed6\u4ea7\u54c1\u7684\u83dc\u5355\u4e2d\u3002 \u7528\u6237\u767b\u5f55\u5176\u4ed6\u4ea7\u54c1\u540e\u53ef\u76f4\u63a5\u8df3\u8f6c\u81f3 AI \u7b97\u529b\u4e2d\u5fc3\u65e0\u9700\u4e8c\u6b21\u767b\u5f55\u3002\u5b9e\u73b0 OEM OUT \u5171\u5206\u4e3a 5 \u6b65\uff0c\u5206\u522b\u662f\uff1a

  • \u7edf\u4e00\u57df\u540d
  • \u6253\u901a\u7528\u6237\u4f53\u7cfb
  • \u5bf9\u63a5\u5bfc\u822a\u680f
  • \u5b9a\u5236\u5916\u89c2
  • \u6253\u901a\u6743\u9650\u4f53\u7cfb(\u53ef\u9009)
"},{"location":"admin/ghippo/best-practice/oem/oem-out.html#_1","title":"\u7edf\u4e00\u57df\u540d","text":"
  1. \u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\uff08\u5047\u8bbe\u90e8\u7f72\u5b8c\u7684\u8bbf\u95ee\u5730\u5740\u4e3a https://10.6.8.2:30343/\uff09

  2. \u5ba2\u6237\u7cfb\u7edf\u548c AI \u7b97\u529b\u4e2d\u5fc3\u524d\u53ef\u4ee5\u653e\u4e00\u4e2a nginx \u53cd\u4ee3\u6765\u5b9e\u73b0\u540c\u57df\u8bbf\u95ee\uff0c / \u8def\u7531\u5230\u5ba2\u6237\u7cfb\u7edf\uff0c /dce5 (subpath) \u8def\u7531\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u7cfb\u7edf\uff0c vi /etc/nginx/conf.d/default.conf \u793a\u4f8b\u5982\u4e0b\uff1a

    server {\n    listen       80;\n    server_name  localhost;\n\n    location /dce5/ {\n      proxy_pass https://10.6.8.2:30343/;\n      proxy_http_version 1.1;\n      proxy_read_timeout 300s; # \u5982\u9700\u8981\u4f7f\u7528 kpanda cloudtty\u529f\u80fd\u9700\u8981\u8fd9\u884c\uff0c\u5426\u5219\u53ef\u4ee5\u53bb\u6389\n      proxy_send_timeout 300s; # \u5982\u9700\u8981\u4f7f\u7528 kpanda cloudtty\u529f\u80fd\u9700\u8981\u8fd9\u884c\uff0c\u5426\u5219\u53ef\u4ee5\u53bb\u6389\n\n      proxy_set_header Host $host;\n      proxy_set_header X-Real-IP $remote_addr;\n      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n      proxy_set_header Upgrade $http_upgrade; # \u5982\u9700\u8981\u4f7f\u7528 kpanda cloudtty\u529f\u80fd\u9700\u8981\u8fd9\u884c\uff0c\u5426\u5219\u53ef\u4ee5\u53bb\u6389\n      proxy_set_header Connection $connection_upgrade; # \u5982\u9700\u8981\u4f7f\u7528 kpanda cloudtty\u529f\u80fd\u9700\u8981\u8fd9\u884c\uff0c\u5426\u5219\u53ef\u4ee5\u53bb\u6389\n    }\n\n    location / {\n        proxy_pass https://10.6.165.50:30443/; # \u5047\u8bbe\u8fd9\u662f\u5ba2\u6237\u7cfb\u7edf\u5730\u5740(\u5982\u610f\u4e91)\n        proxy_http_version 1.1;\n\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    }\n}\n
  3. \u5047\u8bbe nginx \u5165\u53e3\u5730\u5740\u4e3a 10.6.165.50\uff0c\u6309\u81ea\u5b9a\u4e49 AI \u7b97\u529b\u4e2d\u5fc3\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\u628a AI_PROXY \u53cd\u4ee3\u8bbe\u4e3a http://10.6.165.50/dce5\u3002\u786e\u4fdd\u80fd\u591f\u901a\u8fc7 http://10.6.165.50/dce5\u8bbf\u95ee AI \u7b97\u529b\u4e2d\u5fc3\u3002 \u5ba2\u6237\u7cfb\u7edf\u4e5f\u9700\u8981\u8fdb\u884c\u53cd\u4ee3\u8bbe\u7f6e\uff0c\u9700\u8981\u6839\u636e\u4e0d\u540c\u5e73\u53f0\u7684\u60c5\u51b5\u8fdb\u884c\u5904\u7406\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-out.html#_2","title":"\u6253\u901a\u7528\u6237\u4f53\u7cfb","text":"

\u5c06\u5ba2\u6237\u7cfb\u7edf\u4e0e AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u901a\u8fc7 OIDC/OAUTH \u7b49\u534f\u8bae\u5bf9\u63a5\uff0c\u4f7f\u7528\u6237\u767b\u5f55\u5ba2\u6237\u7cfb\u7edf\u540e\u8fdb\u5165 AI \u7b97\u529b\u4e2d\u5fc3\u65f6\u65e0\u9700\u518d\u6b21\u767b\u5f55\u3002 \u5728\u62ff\u5230\u5ba2\u6237\u7cfb\u7edf\u7684 OIDC \u4fe1\u606f\u540e\u586b\u5165 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 -> \u8eab\u4efd\u63d0\u4f9b\u5546 \u4e2d\u3002

\u5bf9\u63a5\u5b8c\u6210\u540e\uff0cAI \u7b97\u529b\u4e2d\u5fc3\u767b\u5f55\u9875\u9762\u5c06\u51fa\u73b0 OIDC\uff08\u81ea\u5b9a\u4e49\uff09\u9009\u9879\uff0c\u9996\u6b21\u4ece\u5ba2\u6237\u7cfb\u7edf\u8fdb\u5165 AI \u7b97\u529b\u4e2d\u5fc3\u65f6\u9009\u62e9\u901a\u8fc7 OIDC \u767b\u5f55\uff0c \u540e\u7eed\u5c06\u76f4\u63a5\u8fdb\u5165 AI \u7b97\u529b\u4e2d\u5fc3\u65e0\u9700\u518d\u6b21\u9009\u62e9\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-out.html#_3","title":"\u5bf9\u63a5\u5bfc\u822a\u680f","text":"

\u5bf9\u63a5\u5bfc\u822a\u680f\u662f\u6307 AI \u7b97\u529b\u4e2d\u5fc3\u51fa\u73b0\u5728\u5ba2\u6237\u7cfb\u7edf\u7684\u83dc\u5355\u4e2d\uff0c\u7528\u6237\u70b9\u51fb\u76f8\u5e94\u7684\u83dc\u5355\u540d\u79f0\u80fd\u591f\u76f4\u63a5\u8fdb\u5165 AI \u7b97\u529b\u4e2d\u5fc3\u3002 \u56e0\u6b64\u5bf9\u63a5\u5bfc\u822a\u680f\u4f9d\u8d56\u4e8e\u5ba2\u6237\u7cfb\u7edf\uff0c\u4e0d\u540c\u5e73\u53f0\u9700\u8981\u6309\u7167\u5177\u4f53\u60c5\u51b5\u8fdb\u884c\u5904\u7406\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-out.html#_4","title":"\u5b9a\u5236\u5916\u89c2","text":"

\u901a\u8fc7 \u5168\u5c40\u7ba1\u7406 -> \u5e73\u53f0\u8bbe\u7f6e -> \u5916\u89c2\u5b9a\u5236 \u53ef\u4ee5\u81ea\u5b9a\u4e49\u5e73\u53f0\u80cc\u666f\u989c\u8272\u3001logo\u3001\u540d\u79f0\u7b49\uff0c \u5177\u4f53\u64cd\u4f5c\u8bf7\u53c2\u7167\u5916\u89c2\u5b9a\u5236\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-out.html#_5","title":"\u6253\u901a\u6743\u9650\u4f53\u7cfb\uff08\u53ef\u9009\uff09","text":"

\u6253\u901a\u6743\u9650\u8f83\u4e3a\u590d\u6742\uff0c\u5982\u6709\u9700\u6c42\u8bf7\u8054\u7cfb\u5168\u5c40\u7ba1\u7406\u56e2\u961f\u3002

"},{"location":"admin/ghippo/best-practice/oem/oem-out.html#_6","title":"\u53c2\u8003","text":"
  • OEM IN \u6587\u6863
"},{"location":"admin/ghippo/install/gm-gateway.html","title":"\u4f7f\u7528\u56fd\u5bc6\u7f51\u5173\u4ee3\u7406 AI \u7b97\u529b\u4e2d\u5fc3","text":"

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4e3a AI \u7b97\u529b\u4e2d\u5fc3\u914d\u7f6e\u56fd\u5bc6\u7f51\u5173\u3002

"},{"location":"admin/ghippo/install/gm-gateway.html#_1","title":"\u8f6f\u4ef6\u4ecb\u7ecd","text":"

Tengine: Tengine \u662f\u7531\u6dd8\u5b9d\u7f51\u53d1\u8d77\u7684 Web \u670d\u52a1\u5668\u9879\u76ee\u3002\u5b83\u5728 Nginx \u7684\u57fa\u7840\u4e0a\uff0c \u9488\u5bf9\u5927\u8bbf\u95ee\u91cf\u7f51\u7ad9\u7684\u9700\u6c42\uff0c\u6dfb\u52a0\u4e86\u5f88\u591a\u9ad8\u7ea7\u529f\u80fd\u548c\u7279\u6027\u3002\u6bd4\u5982\u652f\u6301 Tongsuo \u63d2\u4ef6\uff0c\u652f\u6301\u56fd\u5bc6\u8bc1\u4e66\u7b49\u3002

Tongsuo: \u94dc\u9501/Tongsuo\uff08\u539f BabaSSL\uff09\u662f\u4e00\u4e2a\u63d0\u4f9b\u73b0\u4ee3\u5bc6\u7801\u5b66\u7b97\u6cd5\u548c\u5b89\u5168\u901a\u4fe1\u534f\u8bae\u7684\u5f00\u6e90\u57fa\u7840\u5bc6\u7801\u5e93\uff0c \u4e3a\u5b58\u50a8\u3001\u7f51\u7edc\u3001\u5bc6\u94a5\u7ba1\u7406\u3001\u9690\u79c1\u8ba1\u7b97\u7b49\u8bf8\u591a\u4e1a\u52a1\u573a\u666f\u63d0\u4f9b\u5e95\u5c42\u7684\u5bc6\u7801\u5b66\u57fa\u7840\u80fd\u529b\uff0c\u5b9e\u73b0\u6570\u636e\u5728\u4f20\u8f93\u3001\u4f7f\u7528\u3001\u5b58\u50a8\u7b49\u8fc7\u7a0b\u4e2d\u7684\u79c1\u5bc6\u6027\u3001\u5b8c\u6574\u6027\u548c\u53ef\u8ba4\u8bc1\u6027\uff0c \u4e3a\u6570\u636e\u751f\u547d\u5468\u671f\u4e2d\u7684\u9690\u79c1\u548c\u5b89\u5168\u63d0\u4f9b\u4fdd\u62a4\u80fd\u529b\u3002

"},{"location":"admin/ghippo/install/gm-gateway.html#_2","title":"\u51c6\u5907\u5de5\u4f5c","text":"

\u4e00\u53f0\u5b89\u88c5\u4e86 Docker \u7684 Linux \u4e3b\u673a\uff0c\u5e76\u4e14\u786e\u4fdd\u5b83\u80fd\u8bbf\u95ee\u4e92\u8054\u7f51\u3002

"},{"location":"admin/ghippo/install/gm-gateway.html#_3","title":"\u7f16\u8bd1\u548c\u5b89\u88c5\u56fd\u5bc6\u7f51\u5173","text":"

\u4e0b\u9762\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 Tengine \u548c Tongsuo \u6784\u5efa\u56fd\u5bc6\u7f51\u5173\u3002

Note

\u6b64\u914d\u7f6e\u4ec5\u4f9b\u53c2\u8003\u3002

FROM docker.m.daocloud.io/debian:11.3\n\n# Version\nENV TENGINE_VERSION=\"2.3.4\" \\\n    TONGSUO_VERSION=\"8.3.2\"\n\n# Install required system packages and dependencies\nRUN apt update && \\\n    apt -y install \\\n    wget \\\n    gcc \\\n    make \\\n    libpcre3 \\\n    libpcre3-dev \\\n    zlib1g-dev \\\n    perl \\\n    && apt clean\n\n# Build tengine\nRUN mkdir -p /tmp/pkg/cache/ && cd /tmp/pkg/cache/ \\\n    && wget https://github.com/alibaba/tengine/archive/refs/tags/${TENGINE_VERSION}.tar.gz -O tengine-${TENGINE_VERSION}.tar.gz \\\n    && tar zxvf tengine-${TENGINE_VERSION}.tar.gz \\\n    && wget https://github.com/Tongsuo-Project/Tongsuo/archive/refs/tags/${TONGSUO_VERSION}.tar.gz -O Tongsuo-${TONGSUO_VERSION}.tar.gz \\\n    && tar zxvf Tongsuo-${TONGSUO_VERSION}.tar.gz \\\n    && cd tengine-${TENGINE_VERSION} \\\n    && ./configure \\\n        --add-module=modules/ngx_openssl_ntls \\\n        --with-openssl=/tmp/pkg/cache/Tongsuo-${TONGSUO_VERSION} \\\n        --with-openssl-opt=\"--strict-warnings enable-ntls\" \\\n        --with-http_ssl_module --with-stream \\\n        --with-stream_ssl_module --with-stream_sni \\\n    && make \\\n    && make install \\\n    && ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ \\\n    && rm -rf /tmp/pkg/cache\n\nEXPOSE 80 443\nSTOPSIGNAL SIGTERM\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n
docker build -t tengine:0.0.1 .\n
"},{"location":"admin/ghippo/install/gm-gateway.html#sm2-rsa-tls","title":"\u751f\u6210 SM2 \u548c RSA TLS \u8bc1\u4e66","text":"

\u4e0b\u9762\u4ecb\u7ecd\u5982\u4f55\u751f\u6210 SM2 \u548c RSA TLS \u8bc1\u4e66\uff0c\u5e76\u914d\u7f6e\u56fd\u5bc6\u7f51\u5173\u3002

"},{"location":"admin/ghippo/install/gm-gateway.html#sm2-tls","title":"SM2 TLS \u8bc1\u4e66","text":"

Note

\u6b64\u8bc1\u4e66\u4ec5\u9002\u7528\u4e8e\u6d4b\u8bd5\u73af\u5883\u3002

\u60a8\u53ef\u4ee5\u53c2\u8003 Tongsuo \u5b98\u65b9\u6587\u6863\u4f7f\u7528 OpenSSL \u751f\u6210 SM2 \u8bc1\u4e66\uff0c \u6216\u8005\u8bbf\u95ee\u56fd\u5bc6 SSL \u5b9e\u9a8c\u5ba4\u7533\u8bf7 SM2 \u8bc1\u4e66\u3002

\u6700\u7ec8\u6211\u4eec\u4f1a\u5f97\u5230\u4ee5\u4e0b\u6587\u4ef6\uff1a

-rw-r--r-- 1 root root  749 Dec  8 02:59 sm2.*.enc.crt.pem\n-rw-r--r-- 1 root root  258 Dec  8 02:59 sm2.*.enc.key.pem\n-rw-r--r-- 1 root root  749 Dec  8 02:59 sm2.*.sig.crt.pem\n-rw-r--r-- 1 root root  258 Dec  8 02:59 sm2.*.sig.key.pem\n
"},{"location":"admin/ghippo/install/gm-gateway.html#rsa-tls","title":"RSA TLS \u8bc1\u4e66","text":"
-rw-r--r-- 1 root root  216 Dec  8 03:21 rsa.*.crt.pem\n-rw-r--r-- 1 root root 4096 Dec  8 02:59 rsa.*.key.pem\n
"},{"location":"admin/ghippo/install/gm-gateway.html#sm2-rsa-tls_1","title":"\u7ed9\u56fd\u5bc6\u7f51\u5173\u914d\u7f6e SM2 \u548c RSA TLS \u8bc1\u4e66","text":"

\u672c\u6587\u4e2d\u4f7f\u7528\u7684\u56fd\u5bc6\u7f51\u5173\uff0c\u652f\u6301 SM2 \u548c RSA \u7b49 TLS \u8bc1\u4e66\u3002\u53cc\u8bc1\u4e66\u7684\u4f18\u70b9\u662f\uff1a\u5f53\u6d4f\u89c8\u5668\u4e0d\u652f\u6301 SM2 TLS \u8bc1\u4e66\u65f6\uff0c\u81ea\u52a8\u5207\u6362\u5230 RSA TLS \u8bc1\u4e66\u3002

\u66f4\u591a\u8be6\u7ec6\u914d\u7f6e\uff0c\u8bf7\u53c2\u8003Tongsuo \u5b98\u65b9\u6587\u6863\u3002

\u6211\u4eec\u8fdb\u5165 Tengine \u5bb9\u5668\u5185\u90e8\uff1a

# \u8fdb\u5165 nginx \u914d\u7f6e\u6587\u4ef6\u5b58\u653e\u76ee\u5f55\ncd /usr/local/nginx/conf\n\n# \u521b\u5efa cert \u6587\u4ef6\u5939\uff0c\u7528\u4e8e\u5b58\u653e TLS \u8bc1\u4e66\nmkdir cert\n\n# \u628a SM2\u3001RSA TLS \u8bc1\u4e66\u62f7\u8d1d\u5230 `/usr/local/nginx/conf/cert` \u76ee\u5f55\u4e0b\ncp sm2.*.enc.crt.pem sm2.*.enc.key.pem  sm2.*.sig.crt.pem  sm2.*.sig.key.pem /usr/local/nginx/conf/cert\ncp rsa.*.crt.pem  rsa.*.key.pem /usr/local/nginx/conf/cert\n\n# \u7f16\u8f91 nginx.conf \u914d\u7f6e\nvim nginx.conf\n...\nserver {\n  listen 443          ssl;\n  proxy_http_version  1.1;\n  # \u5f00\u542f\u56fd\u5bc6\u529f\u80fd\uff0c\u4f7f\u5176\u652f\u6301 SM2 \u7b97\u6cd5\u7684 TLS \u8bc1\u4e66\n  enable_ntls         on;\n\n  # RSA \u8bc1\u4e66\n  # \u5982\u679c\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u56fd\u5bc6\u8bc1\u4e66\uff0c\u90a3\u4e48\u60a8\u53ef\u4ee5\u5f00\u542f\u6b64\u9009\u9879\uff0cTengine \u4f1a\u81ea\u52a8\u8bc6\u522b\u6700\u7ec8\u7528\u6237\u7684\u6d4f\u89c8\u5668\uff0c\u5e76\u4f7f\u7528 RSA \u8bc1\u4e66\u8fdb\u884c\u56de\u9000\n  ssl_certificate                 /usr/local/nginx/conf/cert/rsa.*.crt.pem;\n  ssl_certificate_key             /usr/local/nginx/conf/cert/rsa.*.key.pem;\n\n  # \u914d\u7f6e\u4e24\u5bf9 SM2 \u8bc1\u4e66\uff0c\u7528\u4e8e\u52a0\u5bc6\u548c\u7b7e\u540d\n  # SM2 \u7b7e\u540d\u8bc1\u4e66\n  ssl_sign_certificate            /usr/local/nginx/conf/cert/sm2.*.sig.crt.pem;\n  ssl_sign_certificate_key        /usr/local/nginx/conf/cert/sm2.*.sig.key.pem;\n  # SM2 \u52a0\u5bc6\u8bc1\u4e66\n  ssl_enc_certificate             /usr/local/nginx/conf/cert/sm2.*.enc.crt.pem;\n  ssl_enc_certificate_key         /usr/local/nginx/conf/cert/sm2.*.enc.key.pem;\n  ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;\n\n  location / {\n    proxy_set_header Host $http_host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header REMOTE-HOST $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    # \u60a8\u9700\u8981\u5c06\u8fd9\u91cc\u7684\u5730\u5740\u4fee\u6539\u4e3a Istio \u5165\u53e3\u7f51\u5173\u7684\u5730\u5740\n    # \u4f8b\u5982 proxy_pass https://istio-ingressgateway.istio-system.svc.cluster.local\n    # \u6216\u8005 proxy_pass https://demo-dev.daocloud.io\n    proxy_pass https://istio-ingressgateway.istio-system.svc.cluster.local;\n  }\n}\n
"},{"location":"admin/ghippo/install/gm-gateway.html#_4","title":"\u91cd\u65b0\u52a0\u8f7d\u56fd\u5bc6\u7f51\u5173\u7684\u914d\u7f6e","text":"
nginx -s reload\n
"},{"location":"admin/ghippo/install/gm-gateway.html#_5","title":"\u4e0b\u4e00\u6b65","text":"

\u56fd\u5bc6\u7f51\u5173\u90e8\u7f72\u6210\u529f\u4e4b\u540e\uff0c\u81ea\u5b9a\u4e49 AI \u7b97\u529b\u4e2d\u5fc3\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\u3002

"},{"location":"admin/ghippo/install/gm-gateway.html#_6","title":"\u9a8c\u8bc1","text":"

\u60a8\u53ef\u4ee5\u90e8\u7f72\u4e00\u4e2a\u652f\u6301\u56fd\u5bc6\u8bc1\u4e66\u7684 Web \u6d4f\u89c8\u5668\u3002 \u4f8b\u5982 Samarium Browser\uff0c \u7136\u540e\u901a\u8fc7 Tengine \u8bbf\u95ee AI \u7b97\u529b\u4e2d\u5fc3 UI \u754c\u9762\uff0c\u9a8c\u8bc1\u56fd\u5bc6\u8bc1\u4e66\u662f\u5426\u751f\u6548\u3002

"},{"location":"admin/ghippo/install/login.html","title":"\u767b\u5f55","text":"

\u7528\u6237\u5728\u4f7f\u7528\u4e00\u4e2a\u65b0\u7cfb\u7edf\u524d\uff0c\u5728\u8fd9\u4e2a\u7cfb\u7edf\u4e2d\u662f\u6ca1\u6709\u4efb\u4f55\u6570\u636e\u7684\uff0c\u7cfb\u7edf\u4e5f\u65e0\u6cd5\u8bc6\u522b\u8fd9\u4e2a\u65b0\u7528\u6237\u3002\u4e3a\u4e86\u6807\u8bc6\u7528\u6237\u8eab\u4efd\u3001\u7ed1\u5b9a\u7528\u6237\u6570\u636e\uff0c\u7528\u6237\u9700\u8981\u4e00\u4e2a\u80fd\u552f\u4e00\u6807\u8bc6\u7528\u6237\u8eab\u4efd\u7684\u5e10\u53f7\u3002

AI \u7b97\u529b\u4e2d\u5fc3\u5728 \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \u4e2d\u901a\u8fc7\u7ba1\u7406\u5458\u521b\u5efa\u65b0\u7528\u6237\u7684\u65b9\u5f0f\u4e3a\u7528\u6237\u5206\u914d\u4e00\u4e2a\u9644\u6709\u4e00\u5b9a\u6743\u9650\u7684\u8d26\u53f7\u3002\u8be5\u7528\u6237\u4ea7\u751f\u7684\u6240\u6709\u884c\u4e3a\u90fd\u5c06\u5173\u8054\u5230\u81ea\u5df1\u7684\u5e10\u53f7\u3002

\u7528\u6237\u901a\u8fc7\u8d26\u53f7/\u5bc6\u7801\u8fdb\u884c\u767b\u5f55\uff0c\u7cfb\u7edf\u9a8c\u8bc1\u8eab\u4efd\u662f\u5426\u5408\u6cd5\uff0c\u5982\u679c\u9a8c\u8bc1\u5408\u6cd5\uff0c\u5219\u7528\u6237\u6210\u529f\u767b\u5f55\u3002

Note

\u5982\u679c\u7528\u6237\u767b\u5f55\u540e 24 \u5c0f\u65f6\u5185\u65e0\u4efb\u4f55\u64cd\u4f5c\uff0c\u5c06\u81ea\u52a8\u9000\u51fa\u767b\u5f55\u72b6\u6001\u3002\u5982\u679c\u767b\u5f55\u7684\u7528\u6237\u59cb\u7ec8\u6d3b\u8dc3\uff0c\u5c06\u6301\u7eed\u5904\u4e8e\u767b\u5f55\u72b6\u6001\u3002

\u7528\u6237\u767b\u5f55\u7684\u7b80\u5355\u6d41\u7a0b\u5982\u4e0b\u56fe\u3002

graph TB\n\nuser[\u8f93\u5165\u7528\u6237\u540d] --> pass[\u8f93\u5165\u5bc6\u7801] --> judge([\u70b9\u51fb\u767b\u5f55\u5e76\u6821\u9a8c\u7528\u6237\u540d\u548c\u5bc6\u7801])\njudge -.\u6b63\u786e.->success[\u767b\u5f55\u6210\u529f]\njudge -.\u9519\u8bef.->fail[\u63d0\u793a\u9519\u8bef]\n\nclassDef plain fill:#ddd,stroke:#fff,stroke-width:1px,color:#000;\nclassDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;\nclassDef cluster fill:#fff,stroke:#bbb,stroke-width:1px,color:#326ce5;\n\nclass user,pass cluster;\nclass judge plain\nclass success,fail k8s

\u7528\u6237\u767b\u5f55\u754c\u9762\u5982\u4e0b\u56fe\u3002\u5177\u4f53\u767b\u5f55\u753b\u9762\uff0c\u8bf7\u4e0e\u5b9e\u9645\u4ea7\u54c1\u4e3a\u51c6\u3002

"},{"location":"admin/ghippo/install/offline-install.html","title":"\u79bb\u7ebf\u5347\u7ea7\u5168\u5c40\u7ba1\u7406\u6a21\u5757","text":"

\u672c\u9875\u8bf4\u660e\u4e0b\u8f7d\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u540e\uff0c\u5e94\u8be5\u5982\u4f55\u5b89\u88c5\u6216\u5347\u7ea7\u3002

Info

\u4e0b\u8ff0\u547d\u4ee4\u6216\u811a\u672c\u5185\u51fa\u73b0\u7684 ghippo \u5b57\u6837\u662f\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u7684\u5185\u90e8\u5f00\u53d1\u4ee3\u53f7\u3002

"},{"location":"admin/ghippo/install/offline-install.html#_2","title":"\u4ece\u5b89\u88c5\u5305\u4e2d\u52a0\u8f7d\u955c\u50cf","text":"

\u60a8\u53ef\u4ee5\u6839\u636e\u4e0b\u9762\u4e24\u79cd\u65b9\u5f0f\u4e4b\u4e00\u52a0\u8f7d\u955c\u50cf\uff0c\u5f53\u73af\u5883\u4e2d\u5b58\u5728\u955c\u50cf\u4ed3\u5e93\u65f6\uff0c\u5efa\u8bae\u9009\u62e9 chart-syncer \u540c\u6b65\u955c\u50cf\u5230\u955c\u50cf\u4ed3\u5e93\uff0c\u8be5\u65b9\u6cd5\u66f4\u52a0\u9ad8\u6548\u4fbf\u6377\u3002

"},{"location":"admin/ghippo/install/offline-install.html#chart-syncer","title":"chart-syncer \u540c\u6b65\u955c\u50cf\u5230\u955c\u50cf\u4ed3\u5e93","text":"
  1. \u521b\u5efa load-image.yaml

    Note

    \u8be5 YAML \u6587\u4ef6\u4e2d\u7684\u5404\u9879\u53c2\u6570\u5747\u4e3a\u5fc5\u586b\u9879\u3002\u60a8\u9700\u8981\u4e00\u4e2a\u79c1\u6709\u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u5e76\u4fee\u6539\u76f8\u5173\u914d\u7f6e\u3002

    \u5df2\u5b89\u88c5 chart repo\u672a\u5b89\u88c5 chart repo

    \u82e5\u5f53\u524d\u73af\u5883\u5df2\u5b89\u88c5 chart repo\uff0cchart-syncer \u4e5f\u652f\u6301\u5c06 Chart \u5bfc\u51fa\u4e3a tgz \u6587\u4ef6\u3002

    load-image.yaml
    source:\n  intermediateBundlesPath: ghippo-offline # (1)!\ntarget:\n  containerRegistry: 10.16.10.111 # (2)!\n  containerRepository: release.daocloud.io/ghippo # (3)!\n  repo:\n    kind: HARBOR # (4)!\n    url: http://10.16.10.111/chartrepo/release.daocloud.io # (5)!\n    auth:\n      username: \"admin\" # (6)!\n      password: \"Harbor12345\" # (7)!\n  containers:\n    auth:\n      username: \"admin\" # (8)!\n      password: \"Harbor12345\" # (9)!\n
    1. \u5230\u6267\u884c charts-syncer \u547d\u4ee4\u7684\u76f8\u5bf9\u8def\u5f84\uff0c\u800c\u4e0d\u662f\u6b64 YAML \u6587\u4ef6\u548c\u79bb\u7ebf\u5305\u4e4b\u95f4\u7684\u76f8\u5bf9\u8def\u5f84
    2. \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93 url
    3. \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93
    4. \u4e5f\u53ef\u4ee5\u662f\u4efb\u4f55\u5176\u4ed6\u652f\u6301\u7684 Helm Chart \u4ed3\u5e93\u7c7b\u522b
    5. \u9700\u66f4\u6539\u4e3a chart repo url
    6. \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u7528\u6237\u540d
    7. \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u5bc6\u7801
    8. \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u7528\u6237\u540d
    9. \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u5bc6\u7801

    \u82e5\u5f53\u524d\u73af\u5883\u672a\u5b89\u88c5 chart repo\uff0cchart-syncer \u4e5f\u652f\u6301\u5c06 Chart \u5bfc\u51fa\u4e3a tgz \u6587\u4ef6\uff0c\u5e76\u5b58\u653e\u5728\u6307\u5b9a\u8def\u5f84\u3002

    load-image.yaml
    source:\n  intermediateBundlesPath: ghippo-offline # (1)!\ntarget:\n  containerRegistry: 10.16.10.111 # (2)!\n  containerRepository: release.daocloud.io/ghippo # (3)!\n  repo:\n    kind: LOCAL\n    path: ./local-repo # (4)!\n  containers:\n    auth:\n      username: \"admin\" # (5)!\n      password: \"Harbor12345\" # (6)!\n
    1. \u5230\u6267\u884c charts-syncer \u547d\u4ee4\u7684\u76f8\u5bf9\u8def\u5f84\uff0c\u800c\u4e0d\u662f\u6b64 YAML \u6587\u4ef6\u548c\u79bb\u7ebf\u5305\u4e4b\u95f4\u7684\u76f8\u5bf9\u8def\u5f84
    2. \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93 URL
    3. \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93
    4. Chart \u672c\u5730\u8def\u5f84
    5. \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u7528\u6237\u540d
    6. \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u5bc6\u7801
  2. \u6267\u884c\u540c\u6b65\u955c\u50cf\u547d\u4ee4\u3002

    charts-syncer sync --config load-image.yaml\n
"},{"location":"admin/ghippo/install/offline-install.html#docker-containerd","title":"Docker \u6216 containerd \u76f4\u63a5\u52a0\u8f7d","text":"

\u89e3\u538b\u5e76\u52a0\u8f7d\u955c\u50cf\u6587\u4ef6\u3002

  1. \u89e3\u538b tar \u538b\u7f29\u5305\u3002

    tar xvf ghippo.bundle.tar\n

    \u89e3\u538b\u6210\u529f\u540e\u4f1a\u5f97\u5230\u51e0\u4e2a\u6587\u4ef6\uff1a

    • hints.yaml
    • images.tar
    • original-chart
  2. \u4ece\u672c\u5730\u52a0\u8f7d\u955c\u50cf\u5230 Docker \u6216 containerd\u3002

    Dockercontainerd
    docker load -i images.tar\n
    ctr -n k8s.io image import images.tar\n

Note

\u6bcf\u4e2a node \u90fd\u9700\u8981\u505a Docker \u6216 containerd \u52a0\u8f7d\u955c\u50cf\u64cd\u4f5c\uff0c \u52a0\u8f7d\u5b8c\u6210\u540e\u9700\u8981 tag \u955c\u50cf\uff0c\u4fdd\u6301 Registry\u3001Repository \u4e0e\u5b89\u88c5\u65f6\u4e00\u81f4\u3002

"},{"location":"admin/ghippo/install/offline-install.html#_3","title":"\u5347\u7ea7","text":"

\u5347\u7ea7\u6ce8\u610f\u4e8b\u9879\uff1a

\u4ece v0.11.x \u5347\u7ea7\u5230 \u2265v0.12.0\u4ece v0.15.x \u5347\u7ea7\u5230 \u2265v0.16.0

\u5f53\u4ece v0.11.x (\u6216\u66f4\u4f4e\u7248\u672c) \u5347\u7ea7\u5230 v0.12.0 (\u6216\u66f4\u9ad8\u7248\u672c) \u65f6\uff0c\u9700\u8981\u5c06 bak.yaml \u4e2d\u6240\u6709 keycloak key \u4fee\u6539\u4e3a keycloakx \u3002

\u4fee\u6539\u524d\uff1a

bak.yaml
USER-SUPPLIED VALUES:\nkeycloak:\n    ...\n

\u4fee\u6539\u540e\uff1a

bak.yaml
USER-SUPPLIED VALUES:\nkeycloakx:\n    ...\n

\u5f53\u4ece v0.15.x (\u6216\u66f4\u4f4e\u7248\u672c) \u5347\u7ea7\u5230 v0.16.0 (\u6216\u66f4\u9ad8\u7248\u672c) \u65f6\uff0c\u9700\u8981\u4fee\u6539\u6570\u636e\u5e93\u8fde\u63a5\u53c2\u6570\u3002

\u4fee\u6539\u524d\uff1a

bak.yaml
USER-SUPPLIED VALUES:\nglobal:\n  database:\n    host: 127.0.0.1\n    port: 3306\n    apiserver:\n      dbname: ghippo\n      password: passowrd\n      user: ghippo\n    keycloakx:\n      dbname: keycloak\n      password: passowrd\n      user: keycloak\n  auditDatabase:\n    auditserver:\n      dbname: audit\n      password: passowrd\n      user: audit\n    host: 127.0.0.1\n    port: 3306\n

\u4fee\u6539\u540e\uff1a

bak.yaml
USER-SUPPLIED VALUES:\nglobal:\n  storage:\n    ghippo:\n    - driver: mysql\n      accessType: readwrite\n      dsn: {global.database.apiserver.user}:{global.database.apiserver.password}@tcp({global.database.host}:{global.database.port})/{global.database.apiserver.dbname}?charset=utf8mb4&multiStatements=true&parseTime=true\n    audit:\n    - driver: mysql\n      accessType: readwrite\n      dsn: {global.auditDatabase.auditserver.user}:{global.auditDatabase.auditserver.password}@tcp({global.auditDatabase.host}:{global.auditDatabase.port})/{global.auditDatabase.auditserver.dbname}?charset=utf8mb4&multiStatements=true&parseTime=true\n    keycloak:\n    - driver: mysql\n      accessType: readwrite\n      dsn: {global.database.keycloakx.user}:{global.database.keycloakx.password}@tcp({global.database.host}:{global.database.port})/{global.database.keycloakx.dbname}?charset=utf8mb4\n

\u6709\u4e24\u79cd\u5347\u7ea7\u65b9\u5f0f\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u524d\u7f6e\u64cd\u4f5c\uff0c\u9009\u62e9\u5bf9\u5e94\u7684\u5347\u7ea7\u65b9\u6848\uff1a

\u901a\u8fc7 Helm \u4ed3\u5e93\u5347\u7ea7\u901a\u8fc7 Chart \u5305\u5347\u7ea7
  1. \u68c0\u67e5\u5168\u5c40\u7ba1\u7406 Helm \u4ed3\u5e93\u662f\u5426\u5b58\u5728\u3002

    helm repo list | grep ghippo\n

    \u82e5\u8fd4\u56de\u7ed3\u679c\u4e3a\u7a7a\u6216\u5982\u4e0b\u63d0\u793a\uff0c\u5219\u8fdb\u884c\u4e0b\u4e00\u6b65\uff1b\u53cd\u4e4b\u5219\u8df3\u8fc7\u4e0b\u4e00\u6b65\u3002

    Error: no repositories to show\n
  2. \u6dfb\u52a0\u5168\u5c40\u7ba1\u7406\u7684 Helm \u4ed3\u5e93\u3002

    helm repo add ghippo http://{harbor url}/chartrepo/{project}\n
  3. \u66f4\u65b0\u5168\u5c40\u7ba1\u7406\u7684 Helm \u4ed3\u5e93\u3002

    helm repo update ghippo # (1)!\n
    1. Helm \u7248\u672c\u8fc7\u4f4e\u4f1a\u5bfc\u81f4\u5931\u8d25\uff0c\u82e5\u5931\u8d25\uff0c\u8bf7\u5c1d\u8bd5\u6267\u884c helm update repo
  4. \u9009\u62e9\u60a8\u60f3\u5b89\u88c5\u7684\u5168\u5c40\u7ba1\u7406\u7248\u672c\uff08\u5efa\u8bae\u5b89\u88c5\u6700\u65b0\u7248\u672c\uff09\u3002

    helm search repo ghippo/ghippo --versions\n
    NAME                   CHART VERSION  APP VERSION  DESCRIPTION\nghippo/ghippo  0.9.0          v0.9.0       A Helm chart for GHippo\n...\n
  5. \u5907\u4efd --set \u53c2\u6570\u3002

    \u5728\u5347\u7ea7\u5168\u5c40\u7ba1\u7406\u7248\u672c\u4e4b\u524d\uff0c\u5efa\u8bae\u60a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5907\u4efd\u8001\u7248\u672c\u7684 --set \u53c2\u6570\u3002

    helm get values ghippo -n ghippo-system -o yaml > bak.yaml\n
  6. \u66f4\u65b0 Ghippo CRD\uff1a

    helm pull ghippo/ghippo --version 0.9.0 && tar -zxf ghippo-0.9.0.tgz\nkubectl apply -f ghippo/crds\n
  7. \u6267\u884c helm upgrade \u3002

    \u5347\u7ea7\u524d\u5efa\u8bae\u60a8\u8986\u76d6 bak.yaml \u4e2d\u7684 global.imageRegistry \u5b57\u6bb5\u4e3a\u5f53\u524d\u4f7f\u7528\u7684\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u3002

    export imageRegistry={\u4f60\u7684\u955c\u50cf\u4ed3\u5e93}\n
    helm upgrade ghippo ghippo/ghippo \\\n  -n ghippo-system \\\n  -f ./bak.yaml \\\n  --set global.imageRegistry=$imageRegistry \\\n  --version 0.9.0\n
  1. \u5907\u4efd --set \u53c2\u6570\u3002

    \u5728\u5347\u7ea7\u5168\u5c40\u7ba1\u7406\u7248\u672c\u4e4b\u524d\uff0c\u5efa\u8bae\u60a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5907\u4efd\u8001\u7248\u672c\u7684 --set \u53c2\u6570\u3002

    helm get values ghippo -n ghippo-system -o yaml > bak.yaml\n
  2. \u66f4\u65b0 Ghippo CRD\uff1a

    kubectl apply -f ./crds\n
  3. \u6267\u884c helm upgrade\u3002

    \u5347\u7ea7\u524d\u5efa\u8bae\u60a8\u8986\u76d6 bak.yaml \u4e2d\u7684 global.imageRegistry \u4e3a\u5f53\u524d\u4f7f\u7528\u7684\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u3002

    export imageRegistry={\u4f60\u7684\u955c\u50cf\u4ed3\u5e93}\n
    helm upgrade ghippo . \\\n  -n ghippo-system \\\n  -f ./bak.yaml \\\n  --set global.imageRegistry=$imageRegistry\n
"},{"location":"admin/ghippo/install/reverse-proxy.html","title":"\u81ea\u5b9a\u4e49 AI \u7b97\u529b\u4e2d\u5fc3\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740","text":"

\u5177\u4f53\u8bbe\u7f6e\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u68c0\u67e5\u5168\u5c40\u7ba1\u7406 helm \u4ed3\u5e93\u662f\u5426\u5b58\u5728\u3002

    helm repo list | grep ghippo\n

    \u82e5\u8fd4\u56de\u7ed3\u679c\u4e3a\u7a7a\u6216\u5982\u4e0b\u63d0\u793a\uff0c\u5219\u8fdb\u884c\u4e0b\u4e00\u6b65\uff1b\u53cd\u4e4b\u5219\u8df3\u8fc7\u4e0b\u4e00\u6b65\u3002

    Error: no repositories to show\n
  2. \u6dfb\u52a0\u5e76\u4e14\u66f4\u65b0\u5168\u5c40\u7ba1\u7406\u7684 helm \u4ed3\u5e93\u3002

    helm repo add ghippo http://{harbor url}/chartrepo/{project}\nhelm repo update ghippo\n
  3. \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u65b9\u4fbf\u5728\u4e0b\u6587\u4e2d\u4f7f\u7528\u3002

    # \u60a8\u7684\u53cd\u5411\u4ee3\u7406\u5730\u5740\uff0c\u4f8b\u5982 `export AI_PROXY=\"https://demo-alpha.daocloud.io\"` \nexport AI_PROXY=\"https://domain:port\"\n\n# helm --set \u53c2\u6570\u5907\u4efd\u6587\u4ef6\nexport GHIPPO_VALUES_BAK=\"ghippo-values-bak.yaml\"\n\n# \u83b7\u53d6\u5f53\u524d ghippo \u7684\u7248\u672c\u53f7\nexport GHIPPO_HELM_VERSION=$(helm get notes ghippo -n ghippo-system | grep \"Chart Version\" | awk -F ': ' '{ print $2 }')\n
  4. \u5907\u4efd --set \u53c2\u6570\u3002

    helm get values ghippo -n ghippo-system -o yaml > ${GHIPPO_VALUES_BAK}\n
  5. \u6dfb\u52a0\u60a8\u7684\u53cd\u5411\u4ee3\u7406\u5730\u5740\u3002

    Note

    • \u5982\u679c\u53ef\u4ee5\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 yq \u547d\u4ee4\uff1a

      yq -i \".global.reverseProxy = \\\"${AI_PROXY}\\\"\" ${GHIPPO_VALUES_BAK}\n
    • \u6216\u8005\u60a8\u53ef\u4ee5\u4f7f\u7528 vim \u547d\u4ee4\u7f16\u8f91\u5e76\u4fdd\u5b58\uff1a

      vim ${GHIPPO_VALUES_BAK}\n\nUSER-SUPPLIED VALUES:\n...\nglobal:\n  ...\n  reverseProxy: ${AI_PROXY} # \u53ea\u9700\u8981\u4fee\u6539\u8fd9\u4e00\u884c\n
  6. \u6267\u884c helm upgrade \u4f7f\u914d\u7f6e\u751f\u6548\u3002

    helm upgrade ghippo ghippo/ghippo \\\n  -n ghippo-system \\\n  -f ${GHIPPO_VALUES_BAK} \\\n  --version ${GHIPPO_HELM_VERSION}\n
  7. \u4f7f\u7528 kubectl \u91cd\u542f\u5168\u5c40\u7ba1\u7406 Pod\uff0c\u4f7f\u914d\u7f6e\u751f\u6548\u3002

    kubectl rollout restart deploy/ghippo-apiserver -n ghippo-system\nkubectl rollout restart statefulset/ghippo-keycloakx -n ghippo-system\n
"},{"location":"admin/ghippo/install/user-isolation.html","title":"\u5f00\u542f Folder/WS \u4e4b\u95f4\u7684\u9694\u79bb\u6a21\u5f0f","text":"

\u5177\u4f53\u8bbe\u7f6e\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u68c0\u67e5\u5168\u5c40\u7ba1\u7406 helm \u4ed3\u5e93\u662f\u5426\u5b58\u5728\u3002

    helm repo list | grep ghippo\n

    \u82e5\u8fd4\u56de\u7ed3\u679c\u4e3a\u7a7a\u6216\u5982\u4e0b\u63d0\u793a\uff0c\u5219\u8fdb\u884c\u4e0b\u4e00\u6b65\uff1b\u53cd\u4e4b\u5219\u8df3\u8fc7\u4e0b\u4e00\u6b65\u3002

    Error: no repositories to show\n
  2. \u6dfb\u52a0\u5e76\u4e14\u66f4\u65b0\u5168\u5c40\u7ba1\u7406\u7684 helm \u4ed3\u5e93\u3002

    helm repo add ghippo http://{harbor url}/chartrepo/{project}\nhelm repo update ghippo\n
  3. \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u65b9\u4fbf\u5728\u4e0b\u6587\u4e2d\u4f7f\u7528\u3002

    # helm --set \u53c2\u6570\u5907\u4efd\u6587\u4ef6\nexport GHIPPO_VALUES_BAK=\"ghippo-values-bak.yaml\"\n\n# \u83b7\u53d6\u5f53\u524d ghippo \u7684\u7248\u672c\u53f7\nexport GHIPPO_HELM_VERSION=$(helm get notes ghippo -n ghippo-system | grep \"Chart Version\" | awk -F ': ' '{ print $2 }')\n
  4. \u5907\u4efd --set \u53c2\u6570\u3002

    helm get values ghippo -n ghippo-system -o yaml > ${GHIPPO_VALUES_BAK}\n
  5. \u6253\u5f00 Folder/WS \u4e4b\u95f4\u7684\u9694\u79bb\u6a21\u5f0f\u5f00\u5173\u3002

    Note

    • \u5982\u679c\u53ef\u4ee5\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 yq \u547d\u4ee4\uff1a

      yq -i \".apiserver.userIsolationMode = \\\"Folder\\\"\" ${GHIPPO_VALUES_BAK}\n
    • \u6216\u8005\u60a8\u53ef\u4ee5\u4f7f\u7528 vim \u547d\u4ee4\u7f16\u8f91\u5e76\u4fdd\u5b58\uff1a

      vim ${GHIPPO_VALUES_BAK}\n\nUSER-SUPPLIED VALUES:\n...\n# \u6dfb\u52a0\u4e0b\u9762\u4e24\u884c\u5373\u53ef\napiserver:\n  userIsolationMode: Folder\n
  6. \u6267\u884c helm upgrade \u4f7f\u914d\u7f6e\u751f\u6548\u3002

    helm upgrade ghippo ghippo/ghippo \\\n  -n ghippo-system \\\n  -f ${GHIPPO_VALUES_BAK} \\\n  --version ${GHIPPO_HELM_VERSION}\n
  7. \u4f7f\u7528 kubectl \u91cd\u542f\u5168\u5c40\u7ba1\u7406 Pod\uff0c\u4f7f\u914d\u7f6e\u751f\u6548\u3002

    kubectl rollout restart deploy/ghippo-apiserver -n ghippo-system\n
"},{"location":"admin/ghippo/permissions/baize.html","title":"AI Lab \u6743\u9650\u8bf4\u660e","text":"

AI Lab \u652f\u6301\u56db\u79cd\u7528\u6237\u89d2\u8272\uff1a

  • Admin / Baize Owner\uff1a\u62e5\u6709 \u5f00\u53d1\u63a7\u5236\u53f0 \u548c \u8fd0\u7ef4\u7ba1\u7406 \u5168\u90e8\u529f\u80fd\u7684\u589e\u5220\u6539\u67e5\u7684\u6743\u9650\u3002
  • Workspace Admin\uff1a\u62e5\u6709\u6388\u6743\u5de5\u4f5c\u7a7a\u95f4\u7684 \u5f00\u53d1\u63a7\u5236\u53f0 \u5168\u90e8\u529f\u80fd\u7684\u589e\u5220\u6539\u67e5\u7684\u6743\u9650\u3002
  • Workspace Editor\uff1a\u62e5\u6709\u6388\u6743\u5de5\u4f5c\u7a7a\u95f4\u7684 \u5f00\u53d1\u63a7\u5236\u53f0 \u5168\u90e8\u529f\u80fd\u7684\u66f4\u65b0\u3001\u67e5\u8be2\u7684\u6743\u9650\u3002
  • Workspace Viewer\uff1a\u62e5\u6709\u6388\u6743\u5de5\u4f5c\u7a7a\u95f4\u7684 \u5f00\u53d1\u63a7\u5236\u53f0 \u5168\u90e8\u529f\u80fd\u7684\u67e5\u8be2\u7684\u6743\u9650\u3002

\u6bcf\u79cd\u89d2\u8272\u5177\u6709\u4e0d\u540c\u7684\u6743\u9650\uff0c\u5177\u4f53\u8bf4\u660e\u5982\u4e0b\u3002

\u83dc\u5355\u5bf9\u8c61 \u64cd\u4f5c Admin / Baize Owner Workspace Admin Workspace Editor Workspace Viewer \u5f00\u53d1\u63a7\u5236\u53f0 \u6982\u89c8 \u67e5\u770b\u6982\u89c8 \u2713 \u2713 \u2713 \u2713 Notebooks \u67e5\u770b Notebooks \u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b Notebooks \u8be6\u60c5 \u2713 \u2713 \u2713 \u2717 \u521b\u5efa Notebooks \u2713 \u2713 \u2717 \u2717 \u66f4\u65b0 Notebooks \u2713 \u2713 \u2713 \u2717 \u514b\u9686 Notebooks \u2713 \u2713 \u2717 \u2717 \u505c\u6b62 Notebooks \u2713 \u2713 \u2713 \u2717 \u542f\u52a8 Notebooks \u2713 \u2713 \u2713 \u2717 \u5220\u9664 Notebooks \u2713 \u2713 \u2717 \u2717 \u4efb\u52a1\u5217\u8868 \u67e5\u770b\u4efb\u52a1\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u4efb\u52a1\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713 \u521b\u5efa\u4efb\u52a1 \u2713 \u2713 \u2717 \u2717 \u514b\u9686\u4efb\u52a1 \u2713 \u2713 \u2717 \u2717 \u67e5\u770b\u4efb\u52a1\u8d1f\u8f7d\u8be6\u60c5 \u2713 \u2713 \u2713 \u2717 \u5220\u9664\u4efb\u52a1 \u2713 \u2713 \u2717 \u2717 \u4efb\u52a1\u5206\u6790 \u67e5\u770b\u4efb\u52a1\u5206\u6790 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u4efb\u52a1\u5206\u6790\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713 \u5220\u9664\u4efb\u52a1\u5206\u6790 \u2713 \u2713 \u2717 \u2717 \u6570\u636e\u96c6\u5217\u8868 \u67e5\u770b\u6570\u636e\u96c6\u5217\u8868 \u2713 \u2713 \u2713 \u2717 \u521b\u5efa\u6570\u636e\u96c6 \u2713 \u2713 \u2717 \u2717 \u91cd\u65b0\u540c\u6b65\u6570\u636e\u96c6 \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0\u51ed\u8bc1 \u2713 \u2713 \u2713 \u2717 \u5220\u9664\u6570\u636e\u96c6 \u2713 \u2713 \u2717 \u2717 \u73af\u5883\u7ba1\u7406 \u67e5\u770b\u73af\u5883\u7ba1\u7406\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u521b\u5efa\u73af\u5883 \u2713 \u2713 \u2717 \u2717 \u66f4\u65b0\u73af\u5883 \u2713 \u2713 \u2713 \u2717 \u5220\u9664\u73af\u5883 \u2713 \u2713 \u2717 \u2717 \u63a8\u7406\u670d\u52a1 \u67e5\u770b\u63a8\u7406\u670d\u52a1\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u63a8\u7406\u670d\u52a1\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713 \u521b\u5efa\u63a8\u7406\u670d\u52a1 \u2713 \u2713 \u2717 \u2717 \u66f4\u65b0\u63a8\u7406\u670d\u52a1 \u2713 \u2713 \u2713 \u2717 \u505c\u6b62\u63a8\u7406\u670d\u52a1 \u2713 \u2713 \u2713 \u2717 \u542f\u52a8\u63a8\u7406\u670d\u52a1 \u2713 \u2713 \u2713 \u2717 \u5220\u9664\u63a8\u7406\u670d\u52a1 \u2713 \u2713 \u2717 \u2717 \u8fd0\u7ef4\u7ba1\u7406 \u6982\u89c8 \u67e5\u770b\u6982\u89c8 \u2713 \u2717 \u2717 \u2717 GPU \u7ba1\u7406 \u67e5\u770b GPU \u7ba1\u7406\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u961f\u5217\u7ba1\u7406 \u67e5\u770b\u961f\u5217\u7ba1\u7406\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u961f\u5217\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u521b\u5efa\u961f\u5217 \u2713 \u2717 \u2717 \u2717 \u66f4\u65b0\u961f\u5217 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u961f\u5217 \u2713 \u2717 \u2717 \u2717"},{"location":"admin/ghippo/permissions/kpanda.html","title":"\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u8bf4\u660e","text":"

\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4f7f\u7528\u4ee5\u4e0b\u89d2\u8272\uff1a

  • Admin / Kpanda Owner
  • Cluster Admin
  • NS Admin
  • NS Editor
  • NS Viewer

Note

  • \u6709\u5173\u6743\u9650\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u4f53\u7cfb\u8bf4\u660e\u3002
  • \u6709\u5173\u89d2\u8272\u7684\u521b\u5efa\u3001\u7ba1\u7406\u548c\u5220\u9664\uff0c\u8bf7\u53c2\u9605\u89d2\u8272\u548c\u6743\u9650\u7ba1\u7406\u3002
  • Cluster Admin , NS Admin , NS Editor , NS Viewer \u7684\u6743\u9650\u4ec5\u5728\u5f53\u524d\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u5185\u751f\u6548\u3002

\u5404\u89d2\u8272\u6240\u5177\u5907\u7684\u6743\u9650\u5982\u4e0b\uff1a

\u4e00\u7ea7\u529f\u80fd \u4e8c\u7ea7\u529f\u80fd \u6743\u9650\u70b9 Cluster Admin Ns Admin Ns Editor NS Viewer \u96c6\u7fa4 \u96c6\u7fa4\u5217\u8868 \u67e5\u770b\u96c6\u7fa4\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u63a5\u5165\u96c6\u7fa4 \u2717 \u2717 \u2717 \u2717 \u521b\u5efa\u96c6\u7fa4 \u2717 \u2717 \u2717 \u2717 \u96c6\u7fa4\u64cd\u4f5c \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713\uff08\u4ec5\u5217\u8868\u5185\u53ef\u4ee5\u8fdb\u5165\uff09 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2717 \u2717 \u2717 \u7f16\u8f91\u57fa\u7840\u914d\u7f6e \u2713 \u2717 \u2717 \u2717 \u4e0b\u8f7d kubeconfig \u2713 \u2713\uff08\u4e0b\u8f7dns\u6743\u9650\u7684kubeconfig\uff09 \u2713\uff08\u4e0b\u8f7d ns \u6743\u9650\u7684 kubeconfig\uff09 \u2713\uff08\u4e0b\u8f7d ns \u6743\u9650\u7684 kubeconfig\uff09 \u89e3\u9664\u63a5\u5165 \u2717 \u2717 \u2717 \u2717 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2717 \u2717 \u2717 \u91cd\u8bd5 \u2717 \u2717 \u2717 \u2717 \u5378\u8f7d\u96c6\u7fa4 \u2717 \u2717 \u2717 \u2717 \u96c6\u7fa4\u6982\u89c8 \u67e5\u770b\u96c6\u7fa4\u6982\u89c8 \u2713 \u2717 \u2717 \u2717 \u8282\u70b9\u7ba1\u7406 \u63a5\u5165\u8282\u70b9 \u2717 \u2717 \u2717 \u2717 \u67e5\u770b\u8282\u70b9\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u8282\u70b9\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b YAML \u2713 \u2717 \u2717 \u2717 \u6682\u505c\u8c03\u5ea6 \u2713 \u2717 \u2717 \u2717 \u4fee\u6539\u6807\u7b7e \u2713 \u2717 \u2717 \u2717 \u4fee\u6539\u6ce8\u89e3 \u2713 \u2717 \u2717 \u2717 \u4fee\u6539\u6c61\u70b9 \u2713 \u2717 \u2717 \u2717 \u79fb\u9664\u8282\u70b9 \u2717 \u2717 \u2717 \u2717 \u65e0\u72b6\u6001\u8d1f\u8f7d \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u955c\u50cf\u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u9009\u62e9 ns \u7ed1\u5b9a\u7684 ws \u5185\u7684\u5b9e\u4f8b \u9009\u62e9\u955c\u50cf \u2713 \u2713 \u2713 \u2717 IP \u6c60\u67e5\u770b \u2713 \u2713 \u2713 \u2717 \u7f51\u5361\u7f16\u8f91 \u2713 \u2713 \u2713 \u2717 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u8d1f\u8f7d\u4f38\u7f29 \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001 - \u6682\u505c\u5347\u7ea7 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001 - \u505c\u6b62 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001 - \u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u6709\u72b6\u6001\u8d1f\u8f7d \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u955c\u50cf\u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u9009\u62e9ns\u7ed1\u5b9a\u7684ws\u5185\u7684\u5b9e\u4f8b \u9009\u62e9\u955c\u50cf \u2713 \u2713 \u2713 \u2717 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u8d1f\u8f7d\u4f38\u7f29 \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u505c\u6b62 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5b88\u62a4\u8fdb\u7a0b \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u955c\u50cf\u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u9009\u62e9ns\u7ed1\u5b9a\u7684ws\u5185\u7684\u5b9e\u4f8b \u9009\u62e9\u955c\u50cf \u2713 \u2713 \u2713 \u2717 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u4efb\u52a1 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u955c\u50cf\u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u5b9e\u4f8b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u9009\u62e9ns\u7ed1\u5b9a\u7684ws\u5185\u7684\u5b9e\u4f8b \u9009\u62e9\u955c\u50cf \u2713 \u2713 \u2713 \u2717 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2713 \u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5b9a\u65f6\u4efb\u52a1 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u955c\u50cf\u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u9009\u62e9ns\u7ed1\u5b9a\u7684ws\u5185\u7684\u5b9e\u4f8b \u9009\u62e9\u955c\u50cf \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u505c\u6b62 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u4efb\u52a1\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5bb9\u5668\u7ec4 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2713 \u4e0a\u4f20\u6587\u4ef6 \u2713 \u2713 \u2713 \u2717 \u4e0b\u8f7d\u6587\u4ef6 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u5bb9\u5668\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 ReplicaSet \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 Helm \u5e94\u7528 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 Helm \u6a21\u677f \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713 \u5b89\u88c5\u6a21\u677f \u2713 \u2713\uff08ns\u7ea7\u522b\u7684\u53ef\u4ee5\uff09 \u2717 \u2717 \u4e0b\u8f7d\u6a21\u677f \u2713 \u2713 \u2713\uff08\u548c\u67e5\u770b\u63a5\u53e3\u4e00\u81f4\uff09 \u2713 Helm \u4ed3\u5e93 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u521b\u5efa\u4ed3\u5e93 \u2713 \u2717 \u2717 \u2717 \u66f4\u65b0\u4ed3\u5e93 \u2713 \u2717 \u2717 \u2717 \u514b\u9686\u4ed3\u5e93 \u2713 \u2717 \u2717 \u2717 \u5237\u65b0\u4ed3\u5e93 \u2713 \u2717 \u2717 \u2717 \u4fee\u6539\u6807\u7b7e \u2713 \u2717 \u2717 \u2717 \u4fee\u6539\u6ce8\u89e3 \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u670d\u52a1 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u8def\u7531 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u7f51\u7edc\u7b56\u7565 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2717 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u7f51\u7edc\u914d\u7f6e \u914d\u7f6e\u7f51\u7edc \u2713 \u2713 \u2713 \u2717 \u81ea\u5b9a\u4e49\u8d44\u6e90 \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 YAML \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u7f16\u8f91 YAML \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 PVC \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u9009\u62e9sc \u2713 \u2713 \u2713 \u2717 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u514b\u9686 \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 PV \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 YAML \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u7f16\u8f91 YAML \u2713 \u2717 \u2717 \u2717 \u66f4\u65b0 \u2713 \u2717 \u2717 \u2717 \u514b\u9686 \u2713 \u2717 \u2717 \u2717 \u4fee\u6539\u6807\u7b7e \u2713 \u2717 \u2717 \u2717 \u4fee\u6539\u6ce8\u89e3 \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 SC \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 YAML \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u67e5\u770b YAML \u2713 \u2717 \u2717 \u2717 \u66f4\u65b0 \u2713 \u2717 \u2717 \u2717 \u6388\u6743\u547d\u540d\u7a7a\u95f4 \u2713 \u2717 \u2717 \u2717 \u89e3\u9664\u6388\u6743 \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u914d\u7f6e\u9879 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u5bfc\u51fa\u914d\u7f6e\u9879 \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5bc6\u94a5 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2717 YAML \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u521b\u5efa \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u5bfc\u51fa\u5bc6\u94a5 \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u547d\u540d\u7a7a\u95f4 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 YAML \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2717 \u4fee\u6539\u6807\u7b7e \u2713 \u2713 \u2717 \u2717 \u89e3\u7ed1\u5de5\u4f5c\u7a7a\u95f4 \u2717 \u2717 \u2717 \u2717 \u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4 \u2717 \u2717 \u2717 \u2717 \u914d\u989d\u7ba1\u7406 \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u96c6\u7fa4\u64cd\u4f5c \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b YAML \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 helm \u64cd\u4f5c \u8bbe\u7f6e\u4fdd\u7559\u6761\u6570 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b YAML \u2713 \u2713 \u2717 \u2717 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2717 \u2717 \u5220\u9664 \u2713 \u2713 \u2717 \u2717 \u96c6\u7fa4\u5347\u7ea7 \u67e5\u770b\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u5347\u7ea7 \u2717 \u2717 \u2717 \u2717 \u96c6\u7fa4\u8bbe\u7f6e addon \u63d2\u4ef6\u914d\u7f6e \u2713 \u2717 \u2717 \u2717 \u9ad8\u7ea7\u914d\u7f6e \u2713 \u2717 \u2717 \u2717 \u547d\u540d\u7a7a\u95f4 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u521b\u5efa \u2713 \u2717 \u2717 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2717 \u4fee\u6539\u6807\u7b7e \u2713 \u2713 \u2717 \u2717 \u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4 \u2713 \u2717 \u2717 \u2717 \u914d\u989d\u7ba1\u7406 \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u5de5\u4f5c\u8d1f\u8f7d \u65e0\u72b6\u6001\u8d1f\u8f7d \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u8d1f\u8f7d\u4f38\u7f29 \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u6682\u505c\u5347\u7ea7 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u505c\u6b62 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u56de\u9000 \u2713 \u2713 \u2713 \u2717 \u4fee\u6539\u6807\u7b7e\u6ce8\u89e3 \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u6709\u72b6\u6001\u8d1f\u8f7d \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u8d1f\u8f7d\u4f38\u7f29 \u2713 \u2713 \u2713 \u2717 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u505c\u6b62 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5b88\u62a4\u8fdb\u7a0b \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u7f16\u8f91 YAML \u2713 \u2713 \u2713 \u2717 \u66f4\u65b0 \u2713 \u2713 \u2713 \u2717 \u72b6\u6001-\u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u4efb\u52a1 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2717 \u91cd\u542f \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5b9a\u65f6\u4efb\u52a1 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5bb9\u5668\u7ec4 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2713 \u2713 \u2713\uff08\u4ec5\u67e5\u770b\uff09 \u8fdb\u5165\u63a7\u5236\u53f0 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u76d1\u63a7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b YAML \u2713 \u2713 \u2713 \u2713 \u4e0a\u4f20\u6587\u4ef6 \u2713 \u2713 \u2713 \u2717 \u4e0b\u8f7d\u6587\u4ef6 \u2713 \u2713 \u2713 \u2717 \u67e5\u770b\u5bb9\u5668\u5217\u8868 \u2713 \u2713 \u2713 \u2713 \u67e5\u770b\u4e8b\u4ef6 \u2713 \u2713 \u2713 \u2713 \u5220\u9664 \u2713 \u2713 \u2713 \u2717 \u5907\u4efd\u6062\u590d \u5e94\u7528\u5907\u4efd \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u521b\u5efa\u5907\u4efd\u8ba1\u5212 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b YAML \u2713 \u2717 \u2717 \u2717 \u66f4\u65b0\u8ba1\u5212 \u2713 \u2717 \u2717 \u2717 \u6682\u505c \u2713 \u2717 \u2717 \u2717 \u7acb\u5373\u6267\u884c \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u6062\u590d\u5907\u4efd \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u6062\u590d\u5907\u4efd \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u5907\u4efd\u70b9 \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u5bf9\u8c61\u5b58\u50a8 \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 ETCD\u5907\u4efd \u67e5\u770b\u5907\u4efd\u7b56\u7565\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u521b\u5efa\u5907\u4efd\u7b56\u7565 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u65e5\u5fd7 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b YAML \u2713 \u2717 \u2717 \u2717 \u66f4\u65b0\u5907\u4efd\u7b56\u7565 \u2713 \u2717 \u2717 \u2717 \u505c\u6b62/\u542f\u52a8 \u2713 \u2717 \u2717 \u2717 \u7acb\u5373\u6267\u884c \u2713 \u2717 \u2717 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u5907\u4efd\u8bb0\u5f55 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u5907\u4efd\u70b9\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u96c6\u7fa4\u5de1\u68c0 \u96c6\u7fa4\u5de1\u68c0 \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b/\u7ba1\u7406\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u96c6\u7fa4\u5de1\u68c0 \u2713 \u2717 \u2717 \u2717 \u8bbe\u7f6e \u2713 \u2717 \u2717 \u2717 \u6743\u9650\u7ba1\u7406 \u96c6\u7fa4\u6743\u9650 \u67e5\u770b\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u6388\u6743\u7528\u6237\u4e3a cluster admin \u2713 \u2717 \u2717 \u2717 \u5220\u9664 \u2713 \u2717 \u2717 \u2717 \u547d\u540d\u7a7a\u95f4\u6743\u9650 \u67e5\u770b\u5217\u8868 \u2713 \u2713 \u2717 \u2717 \u6388\u6743\u7528\u6237\u4e3a ns admin \u2713 \u2713 \u2717 \u2717 \u6388\u6743\u7528\u6237\u4e3a ns editor \u2713 \u2713 \u2717 \u2717 \u6388\u6743\u7528\u6237\u4e3a ns viewer \u2713 \u2713 \u2717 \u2717 \u7f16\u8f91\u6743\u9650 \u2713 \u2713 \u2717 \u2717 \u5220\u9664 \u2713 \u2713 \u2717 \u2717 \u5b89\u5168\u7ba1\u7406 \u5408\u89c4\u6027\u626b\u63cf \u67e5\u770b\u626b\u63cf\u62a5\u544a\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u62a5\u544a\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u4e0b\u8f7d\u626b\u63cf\u62a5\u544a \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u626b\u63cf\u62a5\u544a \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u7b56\u7565\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u521b\u5efa\u626b\u63cf\u7b56\u7565 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u626b\u63cf\u7b56\u7565 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u914d\u7f6e\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u914d\u7f6e\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u626b\u63cf\u914d\u7f6e \u2713 \u2717 \u2717 \u2717 \u6743\u9650\u626b\u63cf \u67e5\u770b\u626b\u63cf\u62a5\u544a\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u62a5\u544a\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u626b\u63cf\u62a5\u544a \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u7b56\u7565\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u521b\u5efa\u626b\u63cf\u7b56\u7565 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u626b\u63cf\u7b56\u7565 \u2713 \u2717 \u2717 \u2717 \u6f0f\u6d1e\u626b\u63cf \u67e5\u770b\u626b\u63cf\u62a5\u544a\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u62a5\u544a\u8be6\u60c5 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u626b\u63cf\u62a5\u544a \u2713 \u2717 \u2717 \u2717 \u67e5\u770b\u626b\u63cf\u7b56\u7565\u5217\u8868 \u2713 \u2717 \u2717 \u2717 \u521b\u5efa\u626b\u63cf\u7b56\u7565 \u2713 \u2717 \u2717 \u2717 \u5220\u9664\u626b\u63cf\u7b56\u7565 \u2713 \u2717 \u2717 \u2717"},{"location":"admin/ghippo/personal-center/accesstoken.html","title":"\u8bbf\u95ee\u5bc6\u94a5","text":"

\u8bbf\u95ee\u5bc6\u94a5\uff08Access Key\uff09\u53ef\u7528\u4e8e\u8bbf\u95ee\u5f00\u653e API \u548c\u6301\u7eed\u53d1\u5e03\uff0c\u7528\u6237\u53ef\u5728\u4e2a\u4eba\u4e2d\u5fc3\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u83b7\u53d6\u5bc6\u94a5\u5e76\u8bbf\u95ee API\u3002

"},{"location":"admin/ghippo/personal-center/accesstoken.html#_2","title":"\u83b7\u53d6\u5bc6\u94a5","text":"

\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5728\u53f3\u4e0a\u89d2\u7684\u4e0b\u62c9\u83dc\u5355\u4e2d\u627e\u5230 \u4e2a\u4eba\u4e2d\u5fc3 \uff0c\u53ef\u4ee5\u5728 \u8bbf\u95ee\u5bc6\u94a5 \u9875\u9762\u7ba1\u7406\u8d26\u53f7\u7684\u8bbf\u95ee\u5bc6\u94a5\u3002

Info

\u8bbf\u95ee\u5bc6\u94a5\u4fe1\u606f\u4ec5\u663e\u793a\u4e00\u6b21\u3002\u5982\u679c\u60a8\u5fd8\u8bb0\u4e86\u8bbf\u95ee\u5bc6\u94a5\u4fe1\u606f\uff0c\u60a8\u9700\u8981\u91cd\u65b0\u521b\u5efa\u65b0\u7684\u8bbf\u95ee\u5bc6\u94a5\u3002

"},{"location":"admin/ghippo/personal-center/accesstoken.html#api","title":"\u4f7f\u7528\u5bc6\u94a5\u8bbf\u95ee API","text":"

\u5728\u8bbf\u95ee\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0openAPI \u65f6\uff0c\u5728\u8bf7\u6c42\u4e2d\u52a0\u4e0a\u8bf7\u6c42\u5934 Authorization:Bearer ${token} \u4ee5\u6807\u8bc6\u8bbf\u95ee\u8005\u7684\u8eab\u4efd\uff0c \u5176\u4e2d ${token} \u662f\u4e0a\u4e00\u6b65\u4e2d\u83b7\u53d6\u5230\u7684\u5bc6\u94a5\uff0c\u5177\u4f53\u63a5\u53e3\u4fe1\u606f\u53c2\u89c1 OpenAPI \u63a5\u53e3\u6587\u6863\u3002

\u8bf7\u6c42\u793a\u4f8b

curl -X GET -H 'Authorization:Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkRKVjlBTHRBLXZ4MmtQUC1TQnVGS0dCSWc1cnBfdkxiQVVqM2U3RVByWnMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NjE0MTU5NjksImlhdCI6MTY2MDgxMTE2OSwiaXNzIjoiZ2hpcHBvLmlvIiwic3ViIjoiZjdjOGIxZjUtMTc2MS00NjYwLTg2MWQtOWI3MmI0MzJmNGViIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4iLCJncm91cHMiOltdfQ.RsUcrAYkQQ7C6BxMOrdD3qbBRUt0VVxynIGeq4wyIgye6R8Ma4cjxG5CbU1WyiHKpvIKJDJbeFQHro2euQyVde3ygA672ozkwLTnx3Tu-_mB1BubvWCBsDdUjIhCQfT39rk6EQozMjb-1X1sbLwzkfzKMls-oxkjagI_RFrYlTVPwT3Oaw-qOyulRSw7Dxd7jb0vINPq84vmlQIsI3UuTZSNO5BCgHpubcWwBss-Aon_DmYA-Et_-QtmPBA3k8E2hzDSzc7eqK0I68P25r9rwQ3DeKwD1dbRyndqWORRnz8TLEXSiCFXdZT2oiMrcJtO188Ph4eLGut1-4PzKhwgrQ' https://demo-dev.daocloud.io/apis/ghippo.io/v1alpha1/users?page=1&pageSize=10 -k\n

\u8bf7\u6c42\u7ed3\u679c

{\n    \"items\": [\n        {\n            \"id\": \"a7cfd010-ebbe-4601-987f-d098d9ef766e\",\n            \"name\": \"a\",\n            \"email\": \"\",\n            \"description\": \"\",\n            \"firstname\": \"\",\n            \"lastname\": \"\",\n            \"source\": \"locale\",\n            \"enabled\": true,\n            \"createdAt\": \"1660632794800\",\n            \"updatedAt\": \"0\",\n            \"lastLoginAt\": \"\"\n        }\n    ],\n    \"pagination\": {\n        \"page\": 1,\n        \"pageSize\": 10,\n        \"total\": 1\n    }\n}\n
"},{"location":"admin/ghippo/personal-center/language.html","title":"\u8bed\u8a00\u8bbe\u7f6e","text":"

\u672c\u8282\u8bf4\u660e\u5982\u4f55\u8bbe\u7f6e\u754c\u9762\u8bed\u8a00\u3002\u76ee\u524d\u652f\u6301\u4e2d\u6587\u3001English \u4e24\u4e2a\u8bed\u8a00\u3002

\u8bed\u8a00\u8bbe\u7f6e\u662f\u5e73\u53f0\u63d0\u4f9b\u591a\u8bed\u8a00\u670d\u52a1\u7684\u5165\u53e3\uff0c\u5e73\u53f0\u9ed8\u8ba4\u663e\u793a\u4e3a\u4e2d\u6587\uff0c\u7528\u6237\u53ef\u6839\u636e\u9700\u8981\u9009\u62e9\u82f1\u8bed\u6216\u81ea\u52a8\u68c0\u6d4b\u6d4f\u89c8\u5668\u8bed\u8a00\u9996\u9009\u9879\u7684\u65b9\u5f0f\u6765\u5207\u6362\u5e73\u53f0\u8bed\u8a00\u3002 \u6bcf\u4e2a\u7528\u6237\u7684\u591a\u8bed\u8a00\u670d\u52a1\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u5207\u6362\u540e\u4e0d\u4f1a\u5f71\u54cd\u5176\u4ed6\u7528\u6237\u3002

\u5e73\u53f0\u63d0\u4f9b\u4e09\u79cd\u5207\u6362\u8bed\u8a00\u65b9\u5f0f\uff1a\u4e2d\u6587\u3001\u82f1\u8bed-English\u3001\u81ea\u52a8\u68c0\u6d4b\u60a8\u7684\u6d4f\u89c8\u5668\u8bed\u8a00\u9996\u9009\u9879\u3002

\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\u3002

  1. \u4f7f\u7528\u60a8\u7684\u7528\u6237\u540d/\u5bc6\u7801\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 \u3002

  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684\u7528\u6237\u540d\u4f4d\u7f6e\uff0c\u9009\u62e9 \u4e2a\u4eba\u4e2d\u5fc3 \u3002

  3. \u70b9\u51fb \u8bed\u8a00\u8bbe\u7f6e \u9875\u7b7e\u3002

  4. \u5207\u6362\u8bed\u8a00\u9009\u9879\u3002

"},{"location":"admin/ghippo/personal-center/security-setting.html","title":"\u5b89\u5168\u8bbe\u7f6e","text":"

\u529f\u80fd\u8bf4\u660e\uff1a\u7528\u4e8e\u586b\u5199\u90ae\u7bb1\u5730\u5740\u548c\u4fee\u6539\u767b\u5f55\u5bc6\u7801\u3002

  • \u90ae\u7bb1\uff1a\u5f53\u7ba1\u7406\u5458\u914d\u7f6e\u90ae\u7bb1\u670d\u52a1\u5668\u5730\u5740\u4e4b\u540e\uff0c\u7528\u6237\u80fd\u591f\u901a\u8fc7\u767b\u5f55\u9875\u7684\u5fd8\u8bb0\u5bc6\u7801\u6309\u94ae\uff0c\u586b\u5199\u8be5\u5904\u7684\u90ae\u7bb1\u5730\u5740\u4ee5\u627e\u56de\u5bc6\u7801\u3002
  • \u5bc6\u7801\uff1a\u7528\u4e8e\u767b\u5f55\u5e73\u53f0\u7684\u5bc6\u7801\uff0c\u5efa\u8bae\u5b9a\u671f\u4fee\u6539\u5bc6\u7801\u3002

\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684\u7528\u6237\u540d\u4f4d\u7f6e\uff0c\u9009\u62e9 \u4e2a\u4eba\u4e2d\u5fc3 \u3002

  2. \u70b9\u51fb \u5b89\u5168\u8bbe\u7f6e \u9875\u7b7e\u3002\u586b\u5199\u60a8\u7684\u90ae\u7bb1\u5730\u5740\u6216\u4fee\u6539\u767b\u5f55\u5bc6\u7801\u3002

"},{"location":"admin/ghippo/personal-center/ssh-key.html","title":"\u914d\u7f6e SSH \u516c\u94a5","text":"

\u672c\u6587\u8bf4\u660e\u5982\u4f55\u914d\u7f6e SSH \u516c\u94a5\u3002

"},{"location":"admin/ghippo/personal-center/ssh-key.html#1-ssh","title":"\u6b65\u9aa4 1\uff1a\u67e5\u770b\u5df2\u5b58\u5728\u7684 SSH \u5bc6\u94a5","text":"

\u5728\u751f\u6210\u65b0\u7684 SSH \u5bc6\u94a5\u524d\uff0c\u8bf7\u5148\u786e\u8ba4\u662f\u5426\u9700\u8981\u4f7f\u7528\u672c\u5730\u5df2\u751f\u6210\u7684 SSH \u5bc6\u94a5\uff0cSSH \u5bc6\u94a5\u5bf9\u4e00\u822c\u5b58\u653e\u5728\u672c\u5730\u7528\u6237\u7684\u6839\u76ee\u5f55\u4e0b\u3002 Linux\u3001Mac \u8bf7\u76f4\u63a5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u5df2\u5b58\u5728\u7684\u516c\u94a5\uff0cWindows \u7528\u6237\u5728 WSL\uff08\u9700\u8981 Windows 10 \u6216\u4ee5\u4e0a\uff09\u6216 Git Bash \u4e0b\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u5df2\u751f\u6210\u7684\u516c\u94a5\u3002

  • ED25519 \u7b97\u6cd5\uff1a

    cat ~/.ssh/id_ed25519.pub\n
  • RSA \u7b97\u6cd5\uff1a

    cat ~/.ssh/id_rsa.pub\n

\u5982\u679c\u8fd4\u56de\u4e00\u957f\u4e32\u4ee5 ssh-ed25519 \u6216 ssh-rsa \u5f00\u5934\u7684\u5b57\u7b26\u4e32\uff0c\u8bf4\u660e\u5df2\u5b58\u5728\u672c\u5730\u516c\u94a5\uff0c \u60a8\u53ef\u4ee5\u8df3\u8fc7\u6b65\u9aa4 2 \u751f\u6210 SSH \u5bc6\u94a5\uff0c\u76f4\u63a5\u64cd\u4f5c\u6b65\u9aa4 3\u3002

"},{"location":"admin/ghippo/personal-center/ssh-key.html#2-ssh","title":"\u6b65\u9aa4 2\uff1a\u751f\u6210 SSH \u5bc6\u94a5","text":"

\u82e5\u6b65\u9aa4 1 \u672a\u8fd4\u56de\u6307\u5b9a\u7684\u5185\u5bb9\u5b57\u7b26\u4e32\uff0c\u8868\u793a\u672c\u5730\u6682\u65e0\u53ef\u7528 SSH \u5bc6\u94a5\uff0c\u9700\u8981\u751f\u6210\u65b0\u7684 SSH \u5bc6\u94a5\uff0c\u8bf7\u6309\u5982\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

  1. \u8bbf\u95ee\u7ec8\u7aef\uff08Windows \u8bf7\u4f7f\u7528 WSL \u6216 Git Bash\uff09\uff0c \u8fd0\u884c ssh-keygen -t\u3002

  2. \u8f93\u5165\u5bc6\u94a5\u7b97\u6cd5\u7c7b\u578b\u548c\u53ef\u9009\u7684\u6ce8\u91ca\u3002

    \u6ce8\u91ca\u4f1a\u51fa\u73b0\u5728 .pub \u6587\u4ef6\u4e2d\uff0c\u4e00\u822c\u53ef\u4f7f\u7528\u90ae\u7bb1\u4f5c\u4e3a\u6ce8\u91ca\u5185\u5bb9\u3002

    • \u57fa\u4e8e ED25519 \u7b97\u6cd5\uff0c\u751f\u6210\u5bc6\u94a5\u5bf9\u547d\u4ee4\u5982\u4e0b\uff1a

      ssh-keygen -t ed25519 -C \"<\u6ce8\u91ca\u5185\u5bb9>\"\n
    • \u57fa\u4e8e RSA \u7b97\u6cd5\uff0c\u751f\u6210\u5bc6\u94a5\u5bf9\u547d\u4ee4\u5982\u4e0b\uff1a

      ssh-keygen -t rsa -C \"<\u6ce8\u91ca\u5185\u5bb9>\"\n
  3. \u70b9\u51fb\u56de\u8f66\uff0c\u9009\u62e9 SSH \u5bc6\u94a5\u751f\u6210\u8def\u5f84\u3002

    \u4ee5 ED25519 \u7b97\u6cd5\u4e3a\u4f8b\uff0c\u9ed8\u8ba4\u8def\u5f84\u5982\u4e0b\uff1a

    Generating public/private ed25519 key pair.\nEnter file in which to save the key (/home/user/.ssh/id_ed25519):\n

    \u5bc6\u94a5\u9ed8\u8ba4\u751f\u6210\u8def\u5f84\uff1a/home/user/.ssh/id_ed25519\uff0c\u516c\u94a5\u4e0e\u4e4b\u5bf9\u5e94\u4e3a\uff1a/home/user/.ssh/id_ed25519.pub\u3002

  4. \u8bbe\u7f6e\u4e00\u4e2a\u5bc6\u94a5\u53e3\u4ee4\u3002

    Enter passphrase (empty for no passphrase):\nEnter same passphrase again:\n

    \u53e3\u4ee4\u9ed8\u8ba4\u4e3a\u7a7a\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u53e3\u4ee4\u4fdd\u62a4\u79c1\u94a5\u6587\u4ef6\u3002 \u5982\u679c\u60a8\u4e0d\u60f3\u5728\u6bcf\u6b21\u4f7f\u7528 SSH \u534f\u8bae\u8bbf\u95ee\u4ed3\u5e93\u65f6\uff0c\u90fd\u8981\u8f93\u5165\u7528\u4e8e\u4fdd\u62a4\u79c1\u94a5\u6587\u4ef6\u7684\u53e3\u4ee4\uff0c\u53ef\u4ee5\u5728\u521b\u5efa\u5bc6\u94a5\u65f6\uff0c\u8f93\u5165\u7a7a\u53e3\u4ee4\u3002

  5. \u70b9\u51fb\u56de\u8f66\uff0c\u5b8c\u6210\u5bc6\u94a5\u5bf9\u521b\u5efa\u3002

"},{"location":"admin/ghippo/personal-center/ssh-key.html#3","title":"\u6b65\u9aa4 3\uff1a\u62f7\u8d1d\u516c\u94a5","text":"

\u9664\u4e86\u5728\u547d\u4ee4\u884c\u6253\u5370\u51fa\u5df2\u751f\u6210\u7684\u516c\u94a5\u4fe1\u606f\u624b\u52a8\u590d\u5236\u5916\uff0c\u53ef\u4ee5\u4f7f\u7528\u547d\u4ee4\u62f7\u8d1d\u516c\u94a5\u5230\u7c98\u8d34\u677f\u4e0b\uff0c\u8bf7\u53c2\u8003\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u62f7\u8d1d\u3002

  • Windows\uff08\u5728 WSL \u6216 Git Bash \u4e0b\uff09\uff1a

    cat ~/.ssh/id_ed25519.pub | clip\n
  • Mac\uff1a

    tr -d '\\n'< ~/.ssh/id_ed25519.pub | pbcopy\n
  • GNU/Linux (requires xclip):

    xclip -sel clip < ~/.ssh/id_ed25519.pub\n
"},{"location":"admin/ghippo/personal-center/ssh-key.html#4-ai","title":"\u6b65\u9aa4 4\uff1a\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0a\u8bbe\u7f6e\u516c\u94a5","text":"
  1. \u767b\u5f55\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0UI \u9875\u9762\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u4e2a\u4eba\u4e2d\u5fc3 -> SSH \u516c\u94a5 \u3002

  2. \u6dfb\u52a0\u751f\u6210\u7684 SSH \u516c\u94a5\u4fe1\u606f\u3002

    1. SSH \u516c\u94a5\u5185\u5bb9\u3002

    2. \u516c\u94a5\u6807\u9898\uff1a\u652f\u6301\u81ea\u5b9a\u4e49\u516c\u94a5\u540d\u79f0\uff0c\u7528\u4e8e\u533a\u5206\u7ba1\u7406\u3002

    3. \u8fc7\u671f\u65f6\u95f4\uff1a\u8bbe\u7f6e\u516c\u94a5\u8fc7\u671f\u65f6\u95f4\uff0c\u5230\u671f\u540e\u516c\u94a5\u5c06\u81ea\u52a8\u5931\u6548\uff0c\u4e0d\u53ef\u4f7f\u7528\uff1b\u5982\u679c\u4e0d\u8bbe\u7f6e\uff0c\u5219\u6c38\u4e45\u6709\u6548\u3002

"},{"location":"admin/ghippo/platform-setting/about.html","title":"\u5173\u4e8e\u5e73\u53f0","text":"

\u5173\u4e8e\u5e73\u53f0 \u4e3b\u8981\u5448\u73b0\u5e73\u53f0\u5404\u4e2a\u5b50\u6a21\u5757\u5f53\u524d\u66f4\u65b0\u7684\u7248\u672c\uff0c\u58f0\u660e\u4e86\u5e73\u53f0\u4f7f\u7528\u7684\u5404\u4e2a\u5f00\u6e90\u8f6f\u4ef6\uff0c\u5e76\u4ee5\u52a8\u753b\u89c6\u9891\u7684\u65b9\u5f0f\u81f4\u8c22\u4e86\u5e73\u53f0\u7684\u6280\u672f\u56e2\u961f\u3002

\u67e5\u770b\u6b65\u9aa4\uff1a

  1. \u4f7f\u7528\u5177\u6709 Admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 \u3002

  2. \u70b9\u51fb \u5e73\u53f0\u8bbe\u7f6e \uff0c\u9009\u62e9 \u5173\u4e8e\u5e73\u53f0 \uff0c\u67e5\u770b\u4ea7\u54c1\u7248\u672c\u3001\u5f00\u6e90\u8f6f\u4ef6\u58f0\u660e\u548c\u6280\u672f\u56e2\u961f\u3002

    License \u58f0\u660e

    \u6280\u672f\u56e2\u961f

"},{"location":"admin/ghippo/platform-setting/appearance.html","title":"\u5916\u89c2\u5b9a\u5236","text":"

\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\uff0c\u53ef\u901a\u8fc7 \u5916\u89c2\u5b9a\u5236 \u66f4\u6362\u767b\u5f55\u754c\u9762\u3001\u9876\u90e8\u5bfc\u822a\u680f\u4ee5\u53ca\u5e95\u90e8\u7248\u6743\u548c\u5907\u6848\u4fe1\u606f\uff0c\u5e2e\u52a9\u7528\u6237\u66f4\u597d\u5730\u8fa8\u8bc6\u4ea7\u54c1\u3002

"},{"location":"admin/ghippo/platform-setting/appearance.html#_2","title":"\u5b9a\u5236\u8bf4\u660e","text":"
  1. \u4f7f\u7528\u5177\u6709 admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u5e73\u53f0\u8bbe\u7f6e \u3002

  2. \u9009\u62e9 \u5916\u89c2\u5b9a\u5236 \uff0c\u5728 \u767b\u5f55\u9875\u5b9a\u5236 \u9875\u7b7e\u4e2d\uff0c\u4fee\u6539\u767b\u5f55\u9875\u7684\u56fe\u6807\u548c\u6587\u5b57\u540e\uff0c\u70b9\u51fb \u4fdd\u5b58 \u3002

  3. \u9000\u51fa\u767b\u5f55\uff0c\u5728\u767b\u5f55\u9875\u5237\u65b0\u540e\u53ef\u770b\u5230\u914d\u7f6e\u540e\u7684\u6548\u679c

  4. \u70b9\u51fb \u9876\u90e8\u5bfc\u822a\u680f\u5b9a\u5236 \u9875\u7b7e\uff0c\u4fee\u6539\u5bfc\u822a\u680f\u7684\u56fe\u6807\u548c\u6587\u5b57\u540e\uff0c\u70b9\u51fb \u4fdd\u5b58 \u3002

  5. \u70b9\u51fb \u9ad8\u7ea7\u5b9a\u5236 \uff0c\u53ef\u4ee5\u7528 CSS \u6837\u5f0f\u8bbe\u7f6e\u767b\u5f55\u9875\u3001\u5bfc\u822a\u680f\u3001\u5e95\u90e8\u7248\u6743\u53ca\u5907\u6848\u4fe1\u606f\u3002

"},{"location":"admin/ghippo/platform-setting/appearance.html#_3","title":"\u9ad8\u7ea7\u5b9a\u5236","text":"

\u9ad8\u7ea7\u5b9a\u5236\u80fd\u591f\u901a\u8fc7 CSS \u6837\u5f0f\u6765\u4fee\u6539\u6574\u4e2a\u5bb9\u5668\u5e73\u53f0\u7684\u989c\u8272\u3001\u5b57\u4f53\u95f4\u9694\u3001\u5b57\u53f7\u7b49\u3002 \u60a8\u9700\u8981\u719f\u6089 CSS \u8bed\u6cd5\u3002\u5220\u9664\u9ed1\u8272\u8f93\u5165\u6846\u7684\u5185\u5bb9\uff0c\u53ef\u6062\u590d\u5230\u9ed8\u8ba4\u72b6\u6001\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u70b9\u51fb \u4e00\u952e\u8fd8\u539f \u6309\u94ae\u3002

\u767b\u5f55\u9875\u5b9a\u5236\u7684 CSS \u6837\u4f8b\uff1a

.test {\n  width: 12px;\n}\n\n#kc-login {\n /* color: red!important; */\n}\n

\u767b\u5f55\u540e\u9875\u9762\u5b9a\u5236\u7684 CSS \u6837\u4f8b\uff1a

.dao-icon.dao-iconfont.icon-service-global.dao-nav__head-icon {\n   color: red!important;\n}\n.ghippo-header-logo {\n  background-color: green!important;\n}\n.ghippo-header {\n  background-color: rgb(128, 115, 0)!important;\n}\n.ghippo-header-nav-main {\n  background-color: rgb(0, 19, 128)!important;\n}\n.ghippo-header-sub-nav-main .dao-popper-inner {\n  background-color: rgb(231, 82, 13) !important;\n}\n

Footer\uff08\u9875\u9762\u5e95\u90e8\u7684\u7248\u6743\u3001\u5907\u6848\u7b49\u4fe1\u606f\uff09\u5b9a\u5236\u793a\u4f8b

<div class=\"footer-content\">\n  <span class=\"footer-item\">Copyright \u00a9 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4fdd\u7559\u6240\u6709\u6743\u5229</span>\n  <a class=\"footer-item\" href=\"https://beian.miit.gov.cn/\" target=\"_blank\" rel=\"noopener noreferrer\">\u6caa ICP \u5907 xxxxxx \u53f7 - 1</a>\n  <a class=\"footer-item\" href=\"https://beian.miit.gov.cn/\" target=\"_blank\" rel=\"noopener noreferrer\">\u6caa ICP \u5907 xxxxxx \u53f7 - 2</a>\n</div>\n<div class=\"footer-content\">\n  <img class=\"gongan-icon\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAQjSURBVHjaVNNZbFRlGIDh95w525zpdGa6TVtbykBbyiICxQY0AhYTJUCiiYqGqEEiJhKQmBg0ESPeeCGRENEYb4jhBr0gNQrRlCBiSgyLaSlSaKEs3Wemy+xnzuqFYdD/6rt6ku/N9wue55EcPwWArCgIgkx5ZRuYVxsnJ801Z05f3jY1MRnb/HxHV+uSph9RKq4mhkdwbZVgdQ2SHkPTwgj/h1QUWWi8/tfg/hM/XN/Y2zfaZnkSnuRDtLMsXhBOvrJtya/LlrcdMs1Qb1lVRQmSAEDAsU1kxpgamXp3y+azu1esreK9dyRqs9PIjkW6OsLx7lTV1ld/237s8HRV57MbnvO8CA+e9GCQFTk6Mza+4/0P+t9a9VSEI3uyTH/eR27aB2Ed31Q/Hx1sI6BHOPT13c5Frd0HW9p3HPUQEwAigJW9RDp+bstrOy981nVGLN/7RpHUV70YfXnEAtjxFPasxPDBQXatjzNTdOQXtg983H/51AFFy1KCIg2bNIdC+8270NwmUmelsXqSqHkDK5PDl8iCW0QcnEW+lqCjvcjQuMZ4YnQRTkotQUZu4GkjcfZNv19G011kXw4vayNYNvqCCvSVTciOgABgeuhBGwhgz5zbkI2ff7HUqJiNR2QktbbSYnBYYqbMT/ilKI4SIbT/GcRylbnvLmJ2X8N7tJ7rR8OE/BbliqEYea81WIotmOs02WFpc55Lf0f5/mSI3dsamOgxSX7ZjaALuBmB6M6FnB+S+POCwmOLk1QFFAqZyQWl1YrpiRZJLvDkygyC5NJ1XCax7xYNiTQVEYVIuUulayIcGeLkpw6WK7GuPY/fb2CkhleXIFFe8XPGaKBj9QxLW1Ik0bg8EuT2zRCJYZvZIYepe0EGbvi4bQUJVZhs2phADFYj+df0lBqJUnaekS4SUHXe3jrOnoE2PhSewHfRpfZGgcryIvfHdQruQlLo7Ns6QizqkJ31CIUlqwQJXuWUpDXj6qOsW32HT3YNImll9FwJsb4jyaLmWQ4fa6a+2sQw0ry8YZSiHcPxxXBtMfCv4XkUCrfliWs/fTE31rtTVfv9vsIorvQIniMhqXM4popVcJFVMHMpfMEaLPdxR1Tnna1b1vl6tGntpAjgCTNWONZyIFBR8Ydtr6EgrCI3VySfzZPLBDHyIq5gkpmzcOUmTGMF+bh7M9LYulfWzMmHBzk7Fpq9deWEYxjrtaCMXjWfstp6BCGNXZzBdYqYhogWqkMum4+oBVD0YnP63u/fFqbv1D+M7VSlBbmmK5uYaLYLYwslfwFVAyXQiOfcx3XyyGIM8DDn0lgWyGokHogu/0UJxpL/+f2e569s/CZQZ53OpzJr0+NXludUfb5jVdf7VUGXJUPIZast1S9PeII6jFDT5xMjFwO1S4c8zwTgnwEAxufYSzA67PMAAAAASUVORK5CYII=\" >\n  <a class=\"footer-item\" href=\"http://www.beian.gov.cn/portal/registerSystemInfo\">\u6caa\u516c\u7f51\u5b89\u5907 12345678912345\u53f7</a>\n</div>\n<style>\n.footer-content {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: center;\n}\n.footer-content + .footer-content {\n  margin-top: 8px;\n}\n.login-pf .footer-item {\n  color: white;\n}\n.footer-item {\n  color: var(--dao-gray-010);\n  text-decoration: none;\n}\n.footer-item + .footer-item {\n  margin-left: 8px;\n}\n.gongan-icon {\n  width: 18px;\n  height: 18px;\n  margin-right: 4px;\n}\n</style>\n

Note

\u5982\u679c\u60f3\u8981\u6062\u590d\u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u70b9\u51fb \u4e00\u952e\u8fd8\u539f \u3002\u8bf7\u6ce8\u610f\uff0c\u4e00\u952e\u8fd8\u539f\u540e\u5c06\u4e22\u5f03\u6240\u6709\u81ea\u5b9a\u4e49\u8bbe\u7f6e\u3002

"},{"location":"admin/ghippo/platform-setting/mail-server.html","title":"\u90ae\u4ef6\u670d\u52a1\u5668","text":"

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f1a\u5728\u7528\u6237\u5fd8\u8bb0\u5bc6\u7801\u65f6\uff0c\u5411\u7528\u6237\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u4ee5\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u786e\u4fdd\u7528\u6237\u662f\u672c\u4eba\u64cd\u4f5c\u3002 \u8981\u4f7f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u80fd\u591f\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\uff0c\u9700\u8981\u5148\u63d0\u4f9b\u60a8\u7684\u90ae\u4ef6\u670d\u52a1\u5668\u5730\u5740\u3002

\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u4f7f\u7528\u5177\u6709 admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 \u3002

  2. \u70b9\u51fb \u5e73\u53f0\u8bbe\u7f6e \uff0c\u9009\u62e9 \u90ae\u4ef6\u670d\u52a1\u5668\u8bbe\u7f6e \u3002

    \u586b\u5199\u4ee5\u4e0b\u5b57\u6bb5\u914d\u7f6e\u90ae\u4ef6\u670d\u52a1\u5668\uff1a

    \u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c SMTP \u670d\u52a1\u5668\u5730\u5740 \u80fd\u591f\u63d0\u4f9b\u90ae\u4ef6\u670d\u52a1\u7684 SMTP \u670d\u52a1\u5668\u5730\u5740 smtp.163.com SMTP \u670d\u52a1\u5668\u7aef\u53e3 \u53d1\u9001\u90ae\u4ef6\u7684\u7aef\u53e3 25 \u7528\u6237\u540d SMTP \u7528\u6237\u7684\u540d\u79f0 test@163.com \u5bc6\u7801 SMTP \u8d26\u53f7\u7684\u5bc6\u7801 123456 \u53d1\u4ef6\u4eba\u90ae\u7bb1 \u53d1\u4ef6\u4eba\u7684\u90ae\u7bb1\u5730\u5740 test@163.com \u4f7f\u7528 SSL \u5b89\u5168\u8fde\u63a5 SSL \u53ef\u4ee5\u7528\u4e8e\u52a0\u5bc6\u90ae\u4ef6\uff0c\u4ece\u800c\u63d0\u9ad8\u901a\u8fc7\u90ae\u4ef6\u4f20\u8f93\u7684\u4fe1\u606f\u7684\u5b89\u5168\u6027\uff0c\u901a\u5e38\u9700\u4e3a\u90ae\u4ef6\u670d\u52a1\u5668\u914d\u7f6e\u8bc1\u4e66 \u4e0d\u5f00\u542f
  3. \u914d\u7f6e\u5b8c\u6210\u540e\u70b9\u51fb \u4fdd\u5b58 \uff0c\u70b9\u51fb \u6d4b\u8bd5\u90ae\u4ef6\u670d\u52a1\u5668 \u3002

  4. \u5c4f\u5e55\u53f3\u4e0a\u89d2\u51fa\u73b0\u6210\u529f\u53d1\u9001\u90ae\u4ef6\u7684\u63d0\u793a\uff0c\u5219\u8868\u793a\u90ae\u4ef6\u670d\u52a1\u5668\u88ab\u6210\u529f\u8bbe\u7f6e\u3002

"},{"location":"admin/ghippo/platform-setting/mail-server.html#_2","title":"\u5e38\u89c1\u95ee\u9898","text":"

\u95ee\uff1a\u90ae\u4ef6\u670d\u52a1\u5668\u8bbe\u7f6e\u540e\u7528\u6237\u4ecd\u65e0\u6cd5\u627e\u56de\u5bc6\u7801\u662f\u4ec0\u4e48\u539f\u56e0\uff1f

\u7b54\uff1a\u7528\u6237\u53ef\u80fd\u672a\u8bbe\u7f6e\u90ae\u7bb1\u6216\u8005\u8bbe\u7f6e\u4e86\u9519\u8bef\u7684\u90ae\u7bb1\u5730\u5740\uff1b\u6b64\u65f6\u53ef\u4ee5\u8ba9 admin \u89d2\u8272\u7684\u7528\u6237\u5728 \u5168\u5c40\u7ba1\u7406 -> \u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236 \u4e2d\u901a\u8fc7\u7528\u6237\u540d\u627e\u5230\u8be5\u7528\u6237\uff0c\u5e76\u5728\u7528\u6237\u8be6\u60c5\u4e2d\u4e3a\u8be5\u7528\u6237\u8bbe\u7f6e\u65b0\u7684\u767b\u5f55\u5bc6\u7801\u3002

\u5982\u679c\u90ae\u4ef6\u670d\u52a1\u5668\u6ca1\u6709\u8fde\u901a\uff0c\u8bf7\u68c0\u67e5\u90ae\u4ef6\u670d\u52a1\u5668\u5730\u5740\u3001\u7528\u6237\u540d\u53ca\u5bc6\u7801\u662f\u5426\u6b63\u786e\u3002

"},{"location":"admin/ghippo/platform-setting/security.html","title":"\u5b89\u5168\u7b56\u7565","text":"

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5728\u56fe\u5f62\u754c\u9762\u4e0a\u63d0\u4f9b\u4e86\u57fa\u4e8e\u5bc6\u7801\u548c\u8bbf\u95ee\u63a7\u5236\u7684\u5b89\u5168\u7b56\u7565\u3002

\u5bc6\u7801\u7b56\u7565

  • \u65b0\u5bc6\u7801\u4e0d\u80fd\u4e0e\u6700\u8fd1\u7684\u5386\u53f2\u5bc6\u7801\u76f8\u540c\u3002
  • \u5bc6\u7801\u8fc7\u671f\u540e\uff0c\u7cfb\u7edf\u5f3a\u5236\u8981\u6c42\u4fee\u6539\u5bc6\u7801\u3002
  • \u5bc6\u7801\u4e0d\u80fd\u4e0e\u7528\u6237\u540d\u76f8\u540c\u3002
  • \u5bc6\u7801\u4e0d\u80fd\u548c\u7528\u6237\u7684\u90ae\u7bb1\u5730\u5740\u76f8\u540c\u3002
  • \u81ea\u5b9a\u4e49\u5bc6\u7801\u89c4\u5219\u3002
  • \u81ea\u5b9a\u4e49\u5bc6\u7801\u6700\u5c0f\u957f\u5ea6\u3002

\u8bbf\u95ee\u63a7\u5236\u7b56\u7565

  • \u4f1a\u8bdd\u8d85\u65f6\u7b56\u7565\uff1a\u7528\u6237\u5728 x \u5c0f\u65f6\u5185\u6ca1\u6709\u64cd\u4f5c\uff0c\u9000\u51fa\u5f53\u524d\u8d26\u53f7\u3002
  • \u8d26\u53f7\u9501\u5b9a\u7b56\u7565\uff1a\u9650\u5236\u65f6\u95f4\u5185\u591a\u6b21\u767b\u5f55\u5931\u8d25\uff0c\u8d26\u53f7\u5c06\u88ab\u9501\u5b9a\u3002
  • \u767b\u5f55/\u9000\u51fa\u7b56\u7565\uff1a\u5173\u95ed\u6d4f\u89c8\u5668\u7684\u540c\u65f6\u9000\u51fa\u767b\u5f55\u3002

\u8fdb\u5165\u5168\u5c40\u7ba1\u7406\u540e\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5e73\u53f0\u8bbe\u7f6e -> \u5b89\u5168\u7b56\u7565 \uff0c\u5373\u53ef\u8bbe\u7f6e\u5bc6\u7801\u7b56\u7565\u548c\u8bbf\u95ee\u63a7\u5236\u7b56\u7565\u3002

"},{"location":"admin/ghippo/report-billing/index.html","title":"\u8fd0\u8425\u7ba1\u7406","text":"

\u8fd0\u8425\u7ba1\u7406\u901a\u8fc7\u53ef\u89c6\u5316\u7684\u65b9\u5f0f\uff0c\u4e3a\u60a8\u5c55\u793a\u5e73\u53f0\u4e0a\u7edf\u8ba1\u65f6\u95f4\u8303\u56f4\u5185\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u547d\u540d\u7a7a\u95f4\u3001\u5bb9\u5668\u7ec4\u3001\u5de5\u4f5c\u7a7a\u95f4\u7b49\u7ef4\u5ea6\u7684 CPU/\u5185\u5b58/\u5b58\u50a8/GPU \u7684\u4f7f\u7528\u603b\u91cf\u548c\u4f7f\u7528\u7387\u7b49\u4fe1\u606f\u3002 \u4ee5\u53ca\u901a\u8fc7\u4f7f\u7528\u91cf\u3001\u4f7f\u7528\u65f6\u95f4\u53ca\u5355\u4ef7\u7b49\u4fe1\u606f\uff0c\u81ea\u52a8\u8ba1\u7b97\u51fa\u7684\u5e73\u53f0\u6d88\u8d39\u4fe1\u606f\u3002\u8be5\u6a21\u5757\u9ed8\u8ba4\u5f00\u542f\u6240\u6709\u62a5\u8868\u7edf\u8ba1\uff0c\u540c\u65f6\u4e5f\u652f\u6301\u5e73\u53f0\u7ba1\u7406\u5458\u5bf9\u5355\u4e2a\u62a5\u8868\u8fdb\u884c\u624b\u52a8\u5f00\u542f\u6216\u5173\u95ed\uff0c \u5f00\u542f/\u5173\u95ed\u540e\u5c06\u5728\u6700\u957f 20 \u5206\u949f\u5185\uff0c\u5e73\u53f0\u5f00\u59cb/\u505c\u6b62\u91c7\u96c6\u62a5\u8868\u6570\u636e\uff0c\u5f80\u671f\u5df2\u91c7\u96c6\u5230\u7684\u6570\u636e\u8fd8\u5c06\u6b63\u5e38\u5c55\u793a\u3002 \u8fd0\u8425\u7ba1\u7406\u6570\u636e\u6700\u591a\u53ef\u5728\u5e73\u53f0\u4e0a\u4fdd\u7559 365 \u5929\uff0c\u8d85\u8fc7\u4fdd\u7559\u65f6\u95f4\u7684\u7edf\u8ba1\u6570\u636e\u5c06\u88ab\u81ea\u52a8\u5220\u9664\u3002\u60a8\u4e5f\u53ef\u4ee5\u901a\u8fc7 CSV \u6216 Excel \u65b9\u5f0f\u4e0b\u8f7d\u62a5\u8868\u540e\u8fdb\u884c\u8fdb\u4e00\u6b65\u7684\u7edf\u8ba1\u548c\u5206\u6790\u3002

\u62a5\u8868\u7ba1\u7406\u901a\u8fc7 CPU \u5229\u7528\u7387\u3001\u5185\u5b58\u5229\u7528\u7387\u3001\u5b58\u50a8\u5229\u7528\u7387\u3001GPU \u7b97\u529b\u5229\u7528\u7387\u3001GPU \u663e\u5b58\u5229\u7528\u7387 5 \u4e2a\u7ef4\u5ea6\uff0c\u5bf9\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\u3001\u5de5\u4f5c\u7a7a\u95f4\u3001\u547d\u540d\u7a7a\u95f4 5 \u79cd\u8d44\u6e90\u8fdb\u884c\u6570\u636e\u7edf\u8ba1\u3002\u540c\u65f6\u8054\u52a8\u5ba1\u8ba1\u548c\u544a\u8b66\u6a21\u5757\uff0c\u652f\u6301\u5bf9\u5ba1\u8ba1\u6570\u636e\u548c\u544a\u8b66\u6570\u636e\u8fdb\u884c\u7edf\u8ba1\u7ba1\u7406\u3002\u5171\u8ba1\u652f\u6301 7 \u79cd\u7c7b\u578b\u62a5\u8868\u3002

\u8ba1\u91cf\u8ba1\u8d39\u9488\u5bf9\u5e73\u53f0\u4e0a\u7684\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\u3001\u547d\u540d\u7a7a\u95f4\u548c\u5de5\u4f5c\u7a7a\u95f4 5 \u79cd\u8d44\u6e90\u8fdb\u884c\u8ba1\u8d39\u7edf\u8ba1\u3002 \u6839\u636e\u4e0d\u540c\u8d44\u6e90\u4e2d CPU\u3001\u5185\u5b58\u3001\u5b58\u50a8\u548c GPU \u7684\u4f7f\u7528\u91cf\uff0c\u4ee5\u53ca\u7528\u6237\u624b\u52a8\u914d\u7f6e\u7684\u4ef7\u683c\u548c\u8d27\u5e01\u5355\u4f4d\u81ea\u52a8\u8ba1\u7b97\u51fa\u6bcf\u79cd\u8d44\u6e90\u5728\u7edf\u8ba1\u65f6\u95f4\u7684\u6d88\u8d39\u60c5\u51b5\uff0c \u6839\u636e\u6240\u9009\u65f6\u95f4\u8de8\u5ea6\u4e0d\u540c\uff0c\u53ef\u5feb\u901f\u8ba1\u7b97\u51fa\u8be5\u8de8\u5ea6\u5185\u7684\u5b9e\u9645\u6d88\u8d39\u60c5\u51b5\uff0c\u5982\u6708\u5ea6\u3001\u5b63\u5ea6\u3001\u5e74\u5ea6\u7b49\u3002

"},{"location":"admin/ghippo/report-billing/billing.html","title":"\u8ba1\u91cf\u8ba1\u8d39","text":"

\u8ba1\u91cf\u8ba1\u8d39\u5728\u62a5\u8868\u7684\u57fa\u7840\u4e0a\uff0c\u5bf9\u8d44\u6e90\u7684\u4f7f\u7528\u6570\u636e\u505a\u4e86\u8fdb\u4e00\u6b65\u7684\u8ba1\u8d39\u5904\u7406\u3002\u652f\u6301\u7528\u6237\u624b\u52a8\u8bbe\u7f6e CPU\u3001\u5185\u5b58\u3001\u5b58\u50a8\u3001GPU \u7684\u5355\u4ef7\u4ee5\u53ca\u8d27\u5e01\u5355\u4f4d\u7b49\uff0c\u8bbe\u7f6e\u540e\u7cfb\u7edf\u5c06\u81ea\u52a8\u7edf\u8ba1\u51fa\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u5de5\u4f5c\u7a7a\u95f4\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u82b1\u8d39\u60c5\u51b5\uff0c\u65f6\u95f4\u6bb5\u7528\u6237\u53ef\u81ea\u7531\u8c03\u6574\uff0c\u53ef\u6309\u7167\u5468\u3001\u6708\u3001\u5b63\u5ea6\u3001\u5e74\u7b5b\u9009\u8c03\u6574\u540e\u5bfc\u51fa Excel \u6216 Csv \u683c\u5f0f\u7684\u8ba1\u8d39\u62a5\u8868\u3002

"},{"location":"admin/ghippo/report-billing/billing.html#_2","title":"\u8ba1\u8d39\u89c4\u5219\u53ca\u751f\u6548\u65f6\u95f4","text":"
  • \u8ba1\u8d39\u89c4\u5219\uff1a\u9ed8\u8ba4\u6309\u7167\u8bf7\u6c42\u503c\u548c\u4f7f\u7528\u91cf\u7684\u6700\u5927\u503c\u8ba1\u8d39\u3002
  • \u751f\u6548\u65f6\u95f4\uff1a\u6b21\u65e5\u751f\u6548\uff0c\u4ee5\u6b21\u65e5\u51cc\u6668\u65f6\u83b7\u53d6\u7684\u5355\u4ef7\u548c\u6570\u91cf\u8ba1\u7b97\u5f53\u5929\u4ea7\u751f\u7684\u8d39\u7528\u3002
"},{"location":"admin/ghippo/report-billing/billing.html#_3","title":"\u529f\u80fd\u7279\u6027","text":"
  • \u652f\u6301\u81ea\u5b9a\u4e49\u8bbe\u7f6e CPU \u3001\u5185\u5b58\u3001\u5b58\u50a8\u4ee5\u53ca GPU \u7684\u8ba1\u8d39\u5355\u4f4d\uff0c\u4ee5\u53ca\u8d27\u5e01\u5355\u4f4d\u3002
  • \u652f\u6301\u67e5\u8be2\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u7684\u7edf\u8ba1\u6570\u636e\uff0c\u6839\u636e\u6240\u9009\u65f6\u95f4\u6bb5\u81ea\u52a8\u8ba1\u7b97\u51fa\u8be5\u65f6\u95f4\u6bb5\u5185\u7684\u8ba1\u8d39\u60c5\u51b5\u3002
  • \u652f\u6301\u4ee5 CSV \u548c Excel \u4e24\u79cd\u683c\u5f0f\u5bfc\u51fa\u8ba1\u8d39\u62a5\u8868\u3002
  • \u652f\u6301\u5f00\u542f/\u5173\u95ed\u5355\u4e2a\u8ba1\u8d39\u62a5\u8868\uff0c\u5f00\u542f/\u5173\u95ed\u540e\uff0c\u5e73\u53f0\u5c06\u5728 20 \u5206\u949f\u5185\u5f00\u59cb/\u505c\u6b62\u91c7\u96c6\u6570\u636e\uff0c\u5f80\u671f\u5df2\u7ecf\u91c7\u96c6\u5230\u7684\u6570\u636e\u8fd8\u5c06\u6b63\u5e38\u663e\u793a\u3002
  • \u652f\u6301\u5bf9 CPU\u3001\u5185\u5b58\u603b\u91cf\u3001\u5b58\u50a8\u3001GPU\u3001\u603b\u8ba1\u7b49\u8ba1\u8d39\u6570\u636e\u7684\u9009\u62e9\u6027\u5c55\u793a\u3002
"},{"location":"admin/ghippo/report-billing/billing.html#_4","title":"\u62a5\u8868\u7ef4\u5ea6","text":"

\u76ee\u524d\u652f\u6301\u4ee5\u4e0b\u51e0\u79cd\u62a5\u8868\uff1a

  • \u96c6\u7fa4\u8ba1\u8d39\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u5168\u90e8\u96c6\u7fa4\u7684 CPU\u3001\u5185\u5b58\u603b\u91cf\u3001\u5b58\u50a8\u3001GPU\u3001\u603b\u8ba1\u7b49\u8ba1\u8d39\u60c5\u51b5\uff0c\u4ee5\u53ca\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u96c6\u7fa4\u4e0b\u7684\u8282\u70b9\u6570\u91cf\uff0c\u53ef\u901a\u8fc7\u70b9\u51fb\u8282\u70b9\u6570\u91cf\u5feb\u6377\u8fdb\u5165\u8282\u70b9\u8ba1\u8d39\u62a5\u8868\uff0c\u5e76\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u96c6\u7fa4\u4e0b\u7684\u8282\u70b9\u8ba1\u8d39\u60c5\u51b5\u3002
  • \u8282\u70b9\u8ba1\u8d39\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u5168\u90e8\u8282\u70b9\u7684 CPU\u3001\u5185\u5b58\u603b\u91cf\u3001\u5b58\u50a8\u3001GPU\u3001\u603b\u8ba1\u7b49\u8ba1\u8d39\u60c5\u51b5\uff0c\u4ee5\u53ca\u8282\u70b9\u7684 IP\u3001\u7c7b\u578b\u548c\u6240\u5c5e\u96c6\u7fa4\u3002
  • \u5bb9\u5668\u7ec4\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u5168\u90e8\u5bb9\u5668\u7ec4\u7684 CPU\u3001\u5185\u5b58\u603b\u91cf\u3001\u5b58\u50a8\u3001GPU\u3001\u603b\u8ba1\u7b49\u8ba1\u8d39\u60c5\u51b5\uff0c\u4ee5\u53ca\u5bb9\u5668\u7ec4\u7684\u6240\u5c5e\u547d\u540d\u7a7a\u95f4\u3001\u6240\u5c5e\u96c6\u7fa4\u548c\u6240\u5c5e\u5de5\u4f5c\u7a7a\u95f4\u3002
  • \u5de5\u4f5c\u7a7a\u95f4\u8ba1\u8d39\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u5168\u90e8\u5de5\u4f5c\u7a7a\u95f4\u7684 CPU\u3001\u5185\u5b58\u603b\u91cf\u3001\u5b58\u50a8\u3001GPU\u3001\u603b\u8ba1\u7b49\u8ba1\u8d39\u60c5\u51b5\uff0c\u4ee5\u53ca\u547d\u540d\u7a7a\u95f4\u6570\u91cf\u548c\u5bb9\u5668\u7ec4\u6570\u91cf\uff0c\u53ef\u901a\u8fc7\u70b9\u51fb\u547d\u540d\u7a7a\u95f4\u6570\u91cf\u5feb\u6377\u8fdb\u5165\u547d\u540d\u7a7a\u95f4\u8ba1\u8d39\u62a5\u8868\uff0c\u5e76\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u547d\u540d\u7a7a\u95f4\u7684\u8ba1\u8d39\u60c5\u51b5\uff1b\u540c\u6837\u7684\u65b9\u5f0f\u53ef\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u7684\u5bb9\u5668\u7ec4\u7684\u8ba1\u8d39\u60c5\u51b5\u3002
  • \u547d\u540d\u7a7a\u95f4\u8ba1\u8d39\u62a5\u8868\uff1a\u67d0\u6bb5\u65f6\u95f4\u5185\u5168\u90e8\u547d\u540d\u7a7a\u95f4\u7684 CPU\u3001\u5185\u5b58\u603b\u91cf\u3001\u5b58\u50a8\u3001GPU\u3001\u603b\u8ba1\u7b49\u8ba1\u8d39\u60c5\u51b5\uff0c\u4ee5\u53ca\u5bb9\u5668\u7ec4\u6570\u91cf\u3001\u6240\u5c5e\u96c6\u7fa4\u3001\u6240\u5c5e\u5de5\u4f5c\u7a7a\u95f4\uff0c\u53ef\u901a\u8fc7\u70b9\u51fb\u5bb9\u5668\u7ec4\u6570\u91cf\u5feb\u6377\u8fdb\u5165\u5bb9\u5668\u7ec4\u8ba1\u8d39\u62a5\u8868\uff0c\u5e76\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u5bb9\u5668\u7ec4\u7684\u8ba1\u8d39\u60c5\u51b5\u3002
"},{"location":"admin/ghippo/report-billing/billing.html#_5","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u4f7f\u7528\u5177\u6709 admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u8fd0\u8425\u7ba1\u7406 \u3002

  2. \u8fdb\u5165 \u8fd0\u8425\u7ba1\u7406 \u540e\u5207\u6362\u4e0d\u540c\u83dc\u5355\u53ef\u67e5\u770b\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\u7b49\u8ba1\u8d39\u62a5\u8868\u3002

"},{"location":"admin/ghippo/report-billing/report.html","title":"\u62a5\u8868\u7ba1\u7406","text":"

\u62a5\u8868\u7ba1\u7406\u4ee5\u53ef\u89c6\u5316\u7684\u65b9\u5f0f\uff0c\u5c55\u793a\u4e86\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\uff08Pod\uff09\u3001\u5de5\u4f5c\u7a7a\u95f4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u5ba1\u8ba1\u53ca\u544a\u8b66\u7ef4\u5ea6\u7684\u7edf\u8ba1\u6570\u636e\uff0c\u4e3a\u5e73\u53f0\u7684\u8ba1\u8d39\u53ca\u4f7f\u7528\u60c5\u51b5\u7684\u8c03\u4f18\u63d0\u4f9b\u4e86\u53ef\u9760\u7684\u57fa\u7840\u6570\u636e\u3002

"},{"location":"admin/ghippo/report-billing/report.html#_2","title":"\u529f\u80fd\u7279\u6027","text":"
  • \u652f\u6301\u67e5\u8be2\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u7684\u7edf\u8ba1\u6570\u636e
  • \u652f\u6301\u4ee5 CSV \u548c Excel \u4e24\u79cd\u683c\u5f0f\u5bfc\u51fa\u62a5\u8868
  • \u652f\u6301\u5f00\u542f/\u5173\u95ed\u5355\u4e2a\u62a5\u8868\uff0c\u5f00\u542f/\u5173\u95ed\u540e\uff0c\u5e73\u53f0\u5c06\u5728 20 \u5206\u949f\u5185\u5f00\u59cb/\u505c\u6b62\u91c7\u96c6\u6570\u636e\uff0c\u5f80\u671f\u5df2\u7ecf\u91c7\u96c6\u5230\u7684\u6570\u636e\u8fd8\u5c06\u6b63\u5e38\u663e\u793a
  • \u652f\u6301\u5c55\u793a CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u5b58\u50a8\u4f7f\u7528\u7387\u548c GPU \u663e\u5b58\u4f7f\u7528\u7387\u7684\u6700\u5927\u3001\u6700\u5c0f\u548c\u5e73\u5747\u503c
"},{"location":"admin/ghippo/report-billing/report.html#_3","title":"\u62a5\u8868\u7ef4\u5ea6","text":"

\u76ee\u524d\u652f\u6301\u4ee5\u4e0b\u51e0\u79cd\u62a5\u8868\uff1a

  • \u96c6\u7fa4\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u6240\u6709\u96c6\u7fa4\u7684 CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u5b58\u50a8\u4f7f\u7528\u7387\u548c GPU \u663e\u5b58\u4f7f\u7528\u7387\u7684\u6700\u5927\u3001\u6700\u5c0f\u548c\u5e73\u5747\u503c\uff0c\u4ee5\u53ca\u8be5\u6bb5\u65f6\u95f4\u5185\u96c6\u7fa4\u4e0b\u7684\u8282\u70b9\u6570\u91cf\uff0c \u53ef\u901a\u8fc7\u70b9\u51fb\u8282\u70b9\u6570\u91cf\u5feb\u6377\u8fdb\u5165\u8282\u70b9\u62a5\u8868\uff0c\u5e76\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u96c6\u7fa4\u4e0b\u7684\u8282\u70b9\u4f7f\u7528\u60c5\u51b5\u3002
  • \u8282\u70b9\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u6240\u6709\u8282\u70b9\u7684 CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u5b58\u50a8\u4f7f\u7528\u7387\u548c GPU \u663e\u5b58\u4f7f\u7528\u7387\u7684\u6700\u5927\u3001\u6700\u5c0f\u548c\u5e73\u5747\u503c\uff0c\u4ee5\u53ca\u8282\u70b9\u7684 IP\u3001\u7c7b\u578b\u548c\u6240\u5c5e\u96c6\u7fa4\u3002
  • \u5bb9\u5668\u7ec4\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u6240\u6709\u5bb9\u5668\u7ec4\u7684 CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u5b58\u50a8\u4f7f\u7528\u7387\u548c GPU \u663e\u5b58\u4f7f\u7528\u7387\u7684\u6700\u5927\u3001\u6700\u5c0f\u548c\u5e73\u5747\u503c\uff0c\u4ee5\u53ca\u5bb9\u5668\u7ec4\u7684\u6240\u5c5e\u547d\u540d\u7a7a\u95f4\u3001\u6240\u5c5e\u96c6\u7fa4\u548c\u6240\u5c5e\u5de5\u4f5c\u7a7a\u95f4\u3002
  • \u5de5\u4f5c\u7a7a\u95f4\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u7684 CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u5b58\u50a8\u4f7f\u7528\u7387\u548c GPU \u663e\u5b58\u4f7f\u7528\u7387\u7684\u6700\u5927\u3001\u6700\u5c0f\u548c\u5e73\u5747\u503c\uff0c\u4ee5\u53ca\u547d\u540d\u7a7a\u95f4\u6570\u91cf\u548c\u5bb9\u5668\u7ec4\u6570\u91cf\uff0c \u53ef\u901a\u8fc7\u70b9\u51fb\u547d\u540d\u7a7a\u95f4\u6570\u91cf\u5feb\u6377\u8fdb\u5165\u547d\u540d\u7a7a\u95f4\u62a5\u8868\uff0c\u5e76\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u547d\u540d\u7a7a\u95f4\u7684\u4f7f\u7528\u60c5\u51b5\uff1b\u540c\u6837\u7684\u65b9\u5f0f\u53ef\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u4e0b\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u7684\u5bb9\u5668\u7ec4\u7684\u4f7f\u7528\u60c5\u51b5\u3002
  • \u547d\u540d\u7a7a\u95f4\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u6240\u6709\u547d\u540d\u7a7a\u95f4\u7684 CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u5b58\u50a8\u4f7f\u7528\u7387\u548c GPU \u663e\u5b58\u4f7f\u7528\u7387\u7684\u6700\u5927\u3001\u6700\u5c0f\u548c\u5e73\u5747\u503c\uff0c\u4ee5\u53ca\u5bb9\u5668\u7ec4\u6570\u91cf\u3001\u6240\u5c5e\u96c6\u7fa4\u3001\u6240\u5c5e\u5de5\u4f5c\u7a7a\u95f4\uff0c \u53ef\u901a\u8fc7\u70b9\u51fb\u5bb9\u5668\u7ec4\u6570\u91cf\u5feb\u6377\u8fdb\u5165\u5bb9\u5668\u7ec4\u62a5\u8868\uff0c\u5e76\u67e5\u770b\u8be5\u6bb5\u65f6\u95f4\u5185\u8be5\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u5bb9\u5668\u7ec4\u7684\u4f7f\u7528\u60c5\u51b5\u3002
  • \u5ba1\u8ba1\u62a5\u8868\uff1a\u5206\u4e3a\u7528\u6237\u64cd\u4f5c\u548c\u8d44\u6e90\u64cd\u4f5c\u4e24\u4e2a\u62a5\u8868\u3002\u7528\u6237\u64cd\u4f5c\u62a5\u8868\u4e3b\u8981\u7edf\u8ba1\u5355\u4e2a\u7528\u6237\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u64cd\u4f5c\u6b21\u6570\uff0c\u4ee5\u53ca\u6210\u529f\u548c\u5931\u8d25\u7684\u6b21\u6570\uff1b \u8d44\u6e90\u64cd\u4f5c\u62a5\u8868\u4e3b\u8981\u7edf\u8ba1\u6240\u6709\u7528\u6237\u5bf9\u67d0\u79cd\u7c7b\u578b\u8d44\u6e90\u7684\u64cd\u4f5c\u6b21\u6570\u3002
  • \u544a\u8b66\u62a5\u8868\uff1a\u5c55\u793a\u67d0\u6bb5\u65f6\u95f4\u5185\u6240\u6709\u8282\u70b9\u7684\u544a\u8b66\u6570\u91cf\uff0c\u4ee5\u53ca\u81f4\u547d\u3001\u4e25\u91cd\u3001\u544a\u8b66\u5206\u522b\u4ea7\u751f\u7684\u6b21\u6570\u3002
"},{"location":"admin/ghippo/report-billing/report.html#_4","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u4f7f\u7528\u5177\u6709 Admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u8fd0\u8425\u7ba1\u7406 \u3002

  2. \u8fdb\u5165\u8fd0\u8425\u7ba1\u7406\u540e\u5207\u6362\u4e0d\u540c\u83dc\u5355\u53ef\u67e5\u770b\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\u7b49\u62a5\u8868\u3002

"},{"location":"admin/ghippo/troubleshooting/ghippo01.html","title":"\u91cd\u542f\u96c6\u7fa4\uff08\u4e91\u4e3b\u673a\uff09istio-ingressgateway \u65e0\u6cd5\u542f\u52a8\uff1f","text":"

\u62a5\u9519\u63d0\u793a\u5982\u4e0b\u56fe\uff1a

\u53ef\u80fd\u539f\u56e0\uff1aRequestAuthentication CR \u7684 jwtsUri \u5730\u5740\u65e0\u6cd5\u8bbf\u95ee\uff0c \u5bfc\u81f4 istiod \u65e0\u6cd5\u4e0b\u53d1\u914d\u7f6e\u7ed9 istio-ingressgateway\uff08Istio 1.15 \u53ef\u4ee5\u89c4\u907f\u8fd9\u4e2a bug\uff1a https://github.com/istio/istio/pull/39341/\uff09

\u89e3\u51b3\u65b9\u6cd5\uff1a

  1. \u5907\u4efd RequestAuthentication ghippo CR\u3002

    kubectl get RequestAuthentication ghippo -n istio-system -o yaml > ghippo-ra.yaml \n
  2. \u5220\u9664 RequestAuthentication ghippo CR\u3002

    kubectl delete RequestAuthentication ghippo -n istio-system \n
  3. \u91cd\u542f Istio\u3002

    kubectl rollout restart deploy/istiod -n istio-system\nkubectl rollout restart deploy/istio-ingressgateway -n istio-system \n
  4. \u91cd\u65b0 apply RequestAuthentication ghippo CR\u3002

    kubectl apply -f ghippo-ra.yaml \n

    Note

    apply RequestAuthentication ghippo CR \u4e4b\u524d\uff0c\u8bf7\u786e\u4fdd ghippo-apiserver \u548c ghippo-keycloak \u5df2\u7ecf\u6b63\u5e38\u542f\u52a8\u3002

"},{"location":"admin/ghippo/troubleshooting/ghippo02.html","title":"\u767b\u5f55\u65e0\u9650\u5faa\u73af\uff0c\u62a5\u9519 401 \u6216 403","text":"

\u51fa\u73b0\u8fd9\u4e2a\u95ee\u9898\u539f\u56e0\u4e3a\uff1aghippo-keycloak \u8fde\u63a5\u7684 Mysql \u6570\u636e\u5e93\u51fa\u73b0\u6545\u969c, \u5bfc\u81f4 OIDC Public keys \u88ab\u91cd\u7f6e

\u5728\u5168\u5c40\u7ba1\u7406 0.11.1 \u53ca\u4ee5\u4e0a\u7248\u672c\uff0c\u60a8\u53ef\u4ee5\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528 helm \u66f4\u65b0\u5168\u5c40\u7ba1\u7406\u914d\u7f6e\u6587\u4ef6\u5373\u53ef\u6062\u590d\u6b63\u5e38\u3002

# \u66f4\u65b0 helm \u4ed3\u5e93\nhelm repo update ghippo\n\n# \u5907\u4efd ghippo \u53c2\u6570\nhelm get values ghippo -n ghippo-system -o yaml > ghippo-values-bak.yaml\n\n# \u83b7\u53d6\u5f53\u524d\u90e8\u7f72\u7684 ghippo \u7248\u672c\u53f7\nversion=$(helm get notes ghippo -n ghippo-system | grep \"Chart Version\" | awk -F ': ' '{ print $2 }')\n\n# \u6267\u884c\u66f4\u65b0\u64cd\u4f5c, \u4f7f\u914d\u7f6e\u6587\u4ef6\u751f\u6548\nhelm upgrade ghippo ghippo/ghippo \\\n-n ghippo-system \\\n-f ./ghippo-values-bak.yaml \\\n--version ${version}\n
"},{"location":"admin/ghippo/troubleshooting/ghippo03.html","title":"Keycloak \u65e0\u6cd5\u542f\u52a8","text":""},{"location":"admin/ghippo/troubleshooting/ghippo03.html#_1","title":"\u5e38\u89c1\u6545\u969c","text":""},{"location":"admin/ghippo/troubleshooting/ghippo03.html#_2","title":"\u6545\u969c\u8868\u73b0","text":"

MySQL \u5df2\u5c31\u7eea\uff0c\u65e0\u62a5\u9519\u3002\u5728\u5b89\u88c5\u5168\u5c40\u7ba1\u7406\u540e keycloak \u65e0\u6cd5\u542f\u52a8\uff08> 10 \u6b21\uff09\u3002

"},{"location":"admin/ghippo/troubleshooting/ghippo03.html#_3","title":"\u68c0\u67e5\u9879","text":"
  • \u5982\u679c\u6570\u636e\u5e93\u662f MySQL\uff0c\u68c0\u67e5 keycloak database \u7f16\u7801\u662f\u5426\u662f UTF8\u3002
  • \u68c0\u67e5\u4ece keycloak \u5230\u6570\u636e\u5e93\u7684\u7f51\u7edc\uff0c\u68c0\u67e5\u6570\u636e\u5e93\u8d44\u6e90\u662f\u5426\u5145\u8db3\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\u8d44\u6e90\u9650\u5236\u3001\u5b58\u50a8\u7a7a\u95f4\u3001\u7269\u7406\u673a\u8d44\u6e90\u3002
"},{"location":"admin/ghippo/troubleshooting/ghippo03.html#_4","title":"\u89e3\u51b3\u6b65\u9aa4","text":"
  1. \u68c0\u67e5 MySQL \u8d44\u6e90\u5360\u7528\u662f\u5426\u5230\u8fbe limit \u9650\u5236
  2. \u68c0\u67e5 MySQL \u4e2d database keycloak table \u7684\u6570\u91cf\u662f\u4e0d\u662f 95 \uff08Keycloak \u4e0d\u540c\u7248\u672c\u6570\u636e\u5e93\u6570\u91cf\u53ef\u80fd\u4f1a\u4e0d\u4e00\u6837\uff0c\u53ef\u4ee5\u4e0e\u540c\u7248\u672c\u7684\u5f00\u53d1\u6216\u6d4b\u8bd5\u73af\u5883\u7684 Keycloak \u6570\u636e\u5e93\u6570\u91cf\u8fdb\u884c\u6bd4\u8f83\uff09\uff0c \u5982\u6570\u91cf\u5c11\u4e86\uff0c\u5219\u8bf4\u660e\u6570\u636e\u5e93\u8868\u521d\u59cb\u5316\u6709\u95ee\u9898\uff08\u67e5\u8be2\u8868\u6570\u91cf\u547d\u4ee4\u63d0\u793a\u4e3a\uff1ashow tables;\uff09
  3. \u5220\u9664 keycloak database \u5e76\u521b\u5efa\uff0c\u63d0\u793a CREATE DATABASE IF NOT EXISTS keycloak CHARACTER SET utf8
  4. \u91cd\u542f Keycloak Pod \u89e3\u51b3\u95ee\u9898
"},{"location":"admin/ghippo/troubleshooting/ghippo03.html#cpu-does-not-support-86-64-v2","title":"CPU does not support \u00d786-64-v2","text":""},{"location":"admin/ghippo/troubleshooting/ghippo03.html#_5","title":"\u6545\u969c\u8868\u73b0","text":"

keycloak \u65e0\u6cd5\u6b63\u5e38\u542f\u52a8\uff0ckeycloak pod \u8fd0\u884c\u72b6\u6001\u4e3a CrashLoopBackOff \u5e76\u4e14 keycloak \u7684 log \u51fa\u73b0\u5982\u4e0b\u56fe\u6240\u793a\u7684\u4fe1\u606f

"},{"location":"admin/ghippo/troubleshooting/ghippo03.html#_6","title":"\u68c0\u67e5\u9879","text":"

\u8fd0\u884c\u4e0b\u9762\u7684\u68c0\u67e5\u811a\u672c\uff0c\u67e5\u8be2\u5f53\u524d\u8282\u70b9 cpu \u7684 x86-64\u67b6\u6784\u7684\u7279\u5f81\u7ea7\u522b

cat <<\"EOF\" > detect-cpu.sh\n#!/bin/sh -eu\n\nflags=$(cat /proc/cpuinfo | grep flags | head -n 1 | cut -d: -f2)\n\nsupports_v2='awk \"/cx16/&&/lahf/&&/popcnt/&&/sse4_1/&&/sse4_2/&&/ssse3/ {found=1} END {exit !found}\"'\nsupports_v3='awk \"/avx/&&/avx2/&&/bmi1/&&/bmi2/&&/f16c/&&/fma/&&/abm/&&/movbe/&&/xsave/ {found=1} END {exit !found}\"'\nsupports_v4='awk \"/avx512f/&&/avx512bw/&&/avx512cd/&&/avx512dq/&&/avx512vl/ {found=1} END {exit !found}\"'\n\necho \"$flags\" | eval $supports_v2 || exit 2 && echo \"CPU supports x86-64-v2\"\necho \"$flags\" | eval $supports_v3 || exit 3 && echo \"CPU supports x86-64-v3\"\necho \"$flags\" | eval $supports_v4 || exit 4 && echo \"CPU supports x86-64-v4\"\nEOF\n\nchmod +x detect-cpu.sh\nsh detect-cpu.sh\n

\u6267\u884c\u4e0b\u9762\u547d\u4ee4\u67e5\u770b\u5f53\u524d cpu \u7684\u7279\u6027\uff0c\u5982\u679c\u8f93\u51fa\u4e2d\u5305\u542b sse4_2\uff0c\u5219\u8868\u793a\u4f60\u7684\u5904\u7406\u5668\u652f\u6301SSE 4.2\u3002

lscpu | grep sse4_2\n

"},{"location":"admin/ghippo/troubleshooting/ghippo03.html#_7","title":"\u89e3\u51b3\u65b9\u6cd5","text":"

\u9700\u8981\u5347\u7ea7\u4f60\u7684\u4e91\u4e3b\u673a\u6216\u7269\u7406\u673a CPU \u4ee5\u652f\u6301 x86-64-v2 \u53ca\u4ee5\u4e0a\uff0c\u786e\u4fddx86 CPU \u6307\u4ee4\u96c6\u652f\u6301 sse4.2\uff0c\u5982\u4f55\u5347\u7ea7\u9700\u8981\u4f60\u54a8\u8be2\u4e91\u4e3b\u673a\u5e73\u53f0\u63d0\u4f9b\u5546\u6216\u7740\u7269\u7406\u673a\u63d0\u4f9b\u5546\u3002

\u8be6\u89c1\uff1ahttps://github.com/keycloak/keycloak/issues/17290

"},{"location":"admin/ghippo/troubleshooting/ghippo04.html","title":"\u5355\u72ec\u5347\u7ea7\u5168\u5c40\u7ba1\u7406\u65f6\u5347\u7ea7\u5931\u8d25","text":"

\u82e5\u5347\u7ea7\u5931\u8d25\u65f6\u5305\u542b\u5982\u4e0b\u4fe1\u606f\uff0c\u53ef\u4ee5\u53c2\u8003\u79bb\u7ebf\u5347\u7ea7\u4e2d\u7684\u66f4\u65b0 ghippo crd \u6b65\u9aa4\u5b8c\u6210 crd \u5b89\u88c5

ensure CRDs are installed first\n
"},{"location":"admin/ghippo/workspace/folder-permission.html","title":"\u6587\u4ef6\u5939\u6743\u9650\u8bf4\u660e","text":"

\u6587\u4ef6\u5939\u5177\u6709\u6743\u9650\u6620\u5c04\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237/\u7528\u6237\u7ec4\u5728\u672c\u6587\u4ef6\u5939\u7684\u6743\u9650\u6620\u5c04\u5230\u5176\u4e0b\u7684\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u4ee5\u53ca\u8d44\u6e90\u4e0a\u3002

\u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u672c\u6587\u4ef6\u5939\u662f Folder Admin \u89d2\u8272\uff0c\u6620\u5c04\u5230\u5b50\u6587\u4ef6\u5939\u4ecd\u4e3a Folder Admin \u89d2\u8272\uff0c\u6620\u5c04\u5230\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4\u5219\u4e3a Workspace Admin\uff1b \u82e5\u5728 \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 -> \u8d44\u6e90\u7ec4 \u4e2d\u7ed1\u5b9a\u4e86 Namespace\uff0c\u5219\u6620\u5c04\u540e\u8be5\u7528\u6237/\u7528\u6237\u7ec4\u540c\u65f6\u8fd8\u662f Namespace Admin\u3002

Note

\u6587\u4ef6\u5939\u7684\u6743\u9650\u6620\u5c04\u80fd\u529b\u4e0d\u4f1a\u4f5c\u7528\u5230\u5171\u4eab\u8d44\u6e90\u4e0a\uff0c\u56e0\u4e3a\u5171\u4eab\u662f\u5c06\u96c6\u7fa4\u7684\u4f7f\u7528\u6743\u9650\u5171\u4eab\u7ed9\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u800c\u4e0d\u662f\u5c06\u7ba1\u7406\u6743\u9650\u53d7\u8ba9\u7ed9\u5de5\u4f5c\u7a7a\u95f4\uff0c\u56e0\u6b64\u4e0d\u4f1a\u5b9e\u73b0\u6743\u9650\u7ee7\u627f\u548c\u89d2\u8272\u6620\u5c04\u3002

"},{"location":"admin/ghippo/workspace/folder-permission.html#_2","title":"\u5e94\u7528\u573a\u666f","text":"

\u6587\u4ef6\u5939\u5177\u6709\u5c42\u7ea7\u80fd\u529b\uff0c\u56e0\u6b64\u5c06\u6587\u4ef6\u5939\u5bf9\u5e94\u4e8e\u4f01\u4e1a\u4e2d\u7684\u90e8\u95e8/\u4f9b\u5e94\u5546/\u9879\u76ee\u7b49\u5c42\u7ea7\u65f6\uff0c

  • \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u4e00\u7ea7\u90e8\u95e8\u5177\u6709\u7ba1\u7406\u6743\u9650\uff08Admin\uff09\uff0c\u5176\u4e0b\u7684\u4e8c\u7ea7\u3001\u4e09\u7ea7\u3001\u56db\u7ea7\u90e8\u95e8\u6216\u9879\u76ee\u540c\u6837\u5177\u6709\u7ba1\u7406\u6743\u9650\uff1b
  • \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u4e00\u7ea7\u90e8\u95e8\u5177\u6709\u4f7f\u7528\u6743\u9650\uff08Editor\uff09\uff0c\u5176\u4e0b\u7684\u4e8c\u7ea7\u3001\u4e09\u7ea7\u3001\u56db\u7ea7\u90e8\u95e8\u6216\u9879\u76ee\u540c\u6837\u5177\u6709\u4f7f\u7528\u6743\u9650\uff1b
  • \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u4e00\u7ea7\u90e8\u95e8\u5177\u6709\u53ea\u8bfb\u6743\u9650\uff08Viewer\uff09\uff0c\u5176\u4e0b\u7684\u4e8c\u7ea7\u3001\u4e09\u7ea7\u3001\u56db\u7ea7\u90e8\u95e8\u6216\u9879\u76ee\u540c\u6837\u5177\u6709\u53ea\u8bfb\u6743\u9650\u3002
\u5bf9\u8c61 \u64cd\u4f5c Folder Admin Folder Editor Folder Viewer \u5bf9\u6587\u4ef6\u5939\u672c\u8eab \u67e5\u770b \u2713 \u2713 \u2713 \u6388\u6743 \u2713 \u2717 \u2717 \u4fee\u6539\u522b\u540d \u2713 \u2717 \u2717 \u5bf9\u5b50\u6587\u4ef6\u5939 \u521b\u5efa \u2713 \u2717 \u2717 \u67e5\u770b \u2713 \u2713 \u2713 \u6388\u6743 \u2713 \u2717 \u2717 \u4fee\u6539\u522b\u540d \u2713 \u2717 \u2717 \u5bf9\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4 \u521b\u5efa \u2713 \u2717 \u2717 \u67e5\u770b \u2713 \u2713 \u2713 \u6388\u6743 \u2713 \u2717 \u2717 \u4fee\u6539\u522b\u540d \u2713 \u2717 \u2717 \u5bf9\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4 - \u8d44\u6e90\u7ec4 \u67e5\u770b \u2713 \u2713 \u2713 \u8d44\u6e90\u7ed1\u5b9a \u2713 \u2717 \u2717 \u89e3\u9664\u7ed1\u5b9a \u2713 \u2717 \u2717 \u5bf9\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4 - \u5171\u4eab\u8d44\u6e90 \u67e5\u770b \u2713 \u2713 \u2713 \u65b0\u589e\u5171\u4eab \u2713 \u2717 \u2717 \u89e3\u9664\u5171\u4eab \u2713 \u2717 \u2717 \u8d44\u6e90\u9650\u989d \u2713 \u2717 \u2717"},{"location":"admin/ghippo/workspace/folders.html","title":"\u521b\u5efa/\u5220\u9664\u6587\u4ef6\u5939","text":"

\u6587\u4ef6\u5939\u5177\u6709\u6743\u9650\u6620\u5c04\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237/\u7528\u6237\u7ec4\u5728\u672c\u6587\u4ef6\u5939\u7684\u6743\u9650\u6620\u5c04\u5230\u5176\u4e0b\u7684\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u4ee5\u53ca\u8d44\u6e90\u4e0a\u3002

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\u3002

  1. \u4f7f\u7528 admin/folder admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u3002

  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa\u6587\u4ef6\u5939 \u6309\u94ae\u3002

  3. \u586b\u5199\u6587\u4ef6\u5939\u540d\u79f0\u3001\u4e0a\u4e00\u7ea7\u6587\u4ef6\u5939\u7b49\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u521b\u5efa\u6587\u4ef6\u5939\u3002

Tip

\u521b\u5efa\u6210\u529f\u540e\u6587\u4ef6\u5939\u540d\u79f0\u5c06\u663e\u793a\u5728\u5de6\u4fa7\u7684\u6811\u72b6\u7ed3\u6784\u4e2d\uff0c\u4ee5\u4e0d\u540c\u7684\u56fe\u6807\u8868\u793a\u5de5\u4f5c\u7a7a\u95f4\u548c\u6587\u4ef6\u5939\u3002

Note

\u9009\u4e2d\u67d0\u4e00\u4e2a\u6587\u4ef6\u5939\u6216\u6587\u4ef6\u5939\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u53ef\u4ee5\u8fdb\u884c\u7f16\u8f91\u6216\u5220\u9664\u3002

  • \u5f53\u8be5\u6587\u4ef6\u5939\u4e0b\u8d44\u6e90\u7ec4\u3001\u5171\u4eab\u8d44\u6e90\u4e2d\u5b58\u5728\u8d44\u6e90\u65f6\uff0c\u8be5\u6587\u4ef6\u5939\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u8d44\u6e90\u89e3\u7ed1\u540e\u518d\u5220\u9664\u3002

  • \u5f53\u5fae\u670d\u52a1\u5f15\u64ce\u6a21\u5757\u5728\u8be5\u6587\u4ef6\u5939\u4e0b\u5b58\u5728\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u8d44\u6e90\u65f6\uff0c\u8be5\u6587\u4ef6\u5939\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u79fb\u9664\u540e\u518d\u5220\u9664\u6587\u4ef6\u5939\u3002

"},{"location":"admin/ghippo/workspace/quota.html","title":"\u8d44\u6e90\u914d\u989d\uff08Quota\uff09","text":"

\u5171\u4eab\u8d44\u6e90\u5e76\u975e\u610f\u5473\u7740\u88ab\u5171\u4eab\u8005\u53ef\u4ee5\u65e0\u9650\u5236\u5730\u4f7f\u7528\u88ab\u5171\u4eab\u7684\u8d44\u6e90\u3002 Admin\u3001Kpanda Owner \u548c Workspace Admin \u53ef\u4ee5\u901a\u8fc7\u5171\u4eab\u8d44\u6e90\u4e2d\u7684 \u8d44\u6e90\u914d\u989d \u529f\u80fd\u9650\u5236\u67d0\u4e2a\u7528\u6237\u7684\u6700\u5927\u4f7f\u7528\u989d\u5ea6\u3002 \u82e5\u4e0d\u9650\u5236\uff0c\u5219\u8868\u793a\u53ef\u4ee5\u65e0\u9650\u5236\u4f7f\u7528\u3002

  • CPU \u8bf7\u6c42\uff08Core\uff09
  • CPU \u9650\u5236\uff08Core\uff09
  • \u5185\u5b58\u8bf7\u6c42\uff08MB\uff09
  • \u5185\u5b58\u9650\u5236\uff08MB\uff09
  • \u5b58\u50a8\u8bf7\u6c42\u603b\u91cf\uff08GB\uff09
  • \u5b58\u50a8\u5377\u58f0\u660e\uff08\u4e2a\uff09
  • GPU \u7c7b\u578b\u3001\u89c4\u683c\u3001\u6570\u91cf\uff08\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e Nvidia\u3001Ascend\u3001lluvatar\u7b49GPU\u5361\u7c7b\u578b\uff09

\u4e00\u4e2a\u8d44\u6e90\uff08\u96c6\u7fa4\uff09\u53ef\u4ee5\u88ab\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5171\u4eab\uff0c\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u4e5f\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u591a\u4e2a\u5171\u4eab\u96c6\u7fa4\u4e2d\u7684\u8d44\u6e90\u3002

"},{"location":"admin/ghippo/workspace/quota.html#_1","title":"\u8d44\u6e90\u7ec4\u548c\u5171\u4eab\u8d44\u6e90","text":"

\u5171\u4eab\u8d44\u6e90\u548c\u8d44\u6e90\u7ec4\u4e2d\u7684\u96c6\u7fa4\u8d44\u6e90\u5747\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\uff0c\u4f46\u662f\u96c6\u7fa4\u7ed1\u5b9a\u548c\u5171\u4eab\u7ed9\u540c\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5c06\u4f1a\u4ea7\u751f\u4e24\u79cd\u622a\u7136\u4e0d\u540c\u7684\u6548\u679c\u3002

  1. \u7ed1\u5b9a\u8d44\u6e90

    \u4f7f\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u7528\u6237/\u7528\u6237\u7ec4\u5177\u6709\u8be5\u96c6\u7fa4\u7684\u5168\u90e8\u7ba1\u7406\u548c\u4f7f\u7528\u6743\u9650\uff0cWorkspace Admin \u5c06\u88ab\u6620\u5c04\u4e3a Cluster Admin\u3002 Workspace Admin \u80fd\u591f\u8fdb\u5165\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7ba1\u7406\u8be5\u96c6\u7fa4\u3002

    Note

    \u5f53\u524d\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u6682\u65e0 Cluster Editor \u548c Cluster Viewer \u89d2\u8272\uff0c\u56e0\u6b64 Workspace Editor\u3001Workspace Viewer \u8fd8\u65e0\u6cd5\u6620\u5c04\u3002

  2. \u65b0\u589e\u5171\u4eab\u8d44\u6e90

    \u4f7f\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u7528\u6237/\u7528\u6237\u7ec4\u5177\u6709\u8be5\u96c6\u7fa4\u8d44\u6e90\u7684\u4f7f\u7528\u6743\u9650\uff0c\u8fd9\u4e9b\u8d44\u6e90\u53ef\u4ee5\u5728\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff08Namespace\uff09\u65f6\u4f7f\u7528\u3002

    \u4e0e\u8d44\u6e90\u7ec4\u4e0d\u540c\uff0c\u5c06\u96c6\u7fa4\u5171\u4eab\u5230\u5de5\u4f5c\u7a7a\u95f4\u65f6\uff0c\u7528\u6237\u5728\u5de5\u4f5c\u7a7a\u95f4\u7684\u89d2\u8272\u4e0d\u4f1a\u6620\u5c04\u5230\u8d44\u6e90\u4e0a\uff0c\u56e0\u6b64 Workspace Admin \u4e0d\u4f1a\u88ab\u6620\u5c04\u4e3a Cluster admin\u3002

\u672c\u8282\u5c55\u793a 3 \u4e2a\u4e0e\u8d44\u6e90\u914d\u989d\u6709\u5173\u7684\u573a\u666f\u3002

"},{"location":"admin/ghippo/workspace/quota.html#_2","title":"\u521b\u5efa\u547d\u540d\u7a7a\u95f4","text":"

\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u65f6\u4f1a\u6d89\u53ca\u5230\u8d44\u6e90\u914d\u989d\u3002

  1. \u5728\u5de5\u4f5c\u7a7a\u95f4 ws01 \u65b0\u589e\u4e00\u4e2a\u5171\u4eab\u96c6\u7fa4\u3002

  2. \u5728\u5e94\u7528\u5de5\u4f5c\u53f0\u9009\u62e9\u5de5\u4f5c\u7a7a\u95f4 ws01 \u548c\u5171\u4eab\u96c6\u7fa4\uff0c\u521b\u5efa\u547d\u540d\u7a7a\u95f4 ns01\u3002

    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u4e2d\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4e0d\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\u3002
    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u4e2d\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff08\u4f8b\u5982 CPU \u8bf7\u6c42 = 100 core\uff09\uff0c\u5219\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u65f6 CPU \u8bf7\u6c42 \u2264 100 core \u3002
"},{"location":"admin/ghippo/workspace/quota.html#_3","title":"\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4","text":"

\u524d\u63d0\uff1a\u5de5\u4f5c\u7a7a\u95f4 ws01 \u5df2\u65b0\u589e\u5171\u4eab\u96c6\u7fa4\uff0c\u64cd\u4f5c\u8005\u4e3a Workspace Admin + Kpanda Owner \u6216 Admin \u89d2\u8272\u3002

\u4ee5\u4e0b\u4e24\u79cd\u7ed1\u5b9a\u65b9\u5f0f\u7684\u6548\u679c\u76f8\u540c\u3002

  • \u5728\u5bb9\u5668\u7ba1\u7406\u4e2d\u5c06\u521b\u5efa\u7684\u547d\u540d\u7a7a\u95f4 ns01 \u7ed1\u5b9a\u5230 ws01

    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5747\u53ef\u6210\u529f\u7ed1\u5b9a\u3002
    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u5fc5\u987b\u6ee1\u8db3 CPU \u8bf7\u6c42 \u2264 100 core \u624d\u80fd\u7ed1\u5b9a\u6210\u529f\u3002
  • \u5728\u5168\u5c40\u7ba1\u7406\u4e2d\uff0c\u5c06\u547d\u540d\u7a7a\u95f4 ns01 \u7ed1\u5b9a\u5230 ws01

    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5747\u53ef\u6210\u529f\u7ed1\u5b9a\u3002
    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u5fc5\u987b\u6ee1\u8db3 CPU \u8bf7\u6c42 \u2264 100 core \u624d\u80fd\u7ed1\u5b9a\u6210\u529f\u3002
"},{"location":"admin/ghippo/workspace/quota.html#_4","title":"\u4ece\u5de5\u4f5c\u7a7a\u95f4\u89e3\u7ed1\u547d\u540d\u7a7a\u95f4","text":"

\u4ee5\u4e0b\u4e24\u79cd\u89e3\u7ed1\u65b9\u5f0f\u7684\u6548\u679c\u76f8\u540c\u3002

  • \u5728\u5bb9\u5668\u7ba1\u7406\u4e2d\u5c06\u547d\u540d\u7a7a\u95f4 ns01 \u4ece\u5de5\u4f5c\u7a7a\u95f4 ws01 \u89e3\u7ed1

    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u4e2d\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u89e3\u7ed1\u540e\u5747\u4e0d\u4f1a\u5bf9\u8d44\u6e90\u914d\u989d\u4ea7\u751f\u5f71\u54cd\u3002
    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u547d\u540d\u7a7a\u95f4 ns01 \u4e5f\u8bbe\u7f6e\u4e86\u8d44\u6e90\u914d\u989d\uff0c\u5219\u89e3\u7ed1\u540e\u5c06\u91ca\u653e\u76f8\u5e94\u7684\u8d44\u6e90\u989d\u5ea6\u3002
  • \u5728\u5168\u5c40\u7ba1\u7406\u4e2d\u5c06\u547d\u540d\u7a7a\u95f4 ns01 \u4ece\u5de5\u4f5c\u7a7a\u95f4 ws01 \u89e3\u7ed1

    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u89e3\u7ed1\u540e\u5747\u4e0d\u4f1a\u5bf9\u8d44\u6e90\u914d\u989d\u4ea7\u751f\u5f71\u54cd\u3002
    • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u547d\u540d\u7a7a\u95f4 ns01 \u4e5f\u8bbe\u7f6e\u4e86\u8d44\u6e90\u914d\u989d\uff0c\u5219\u89e3\u7ed1\u540e\u5c06\u91ca\u653e\u76f8\u5e94\u7684\u8d44\u6e90\u989d\u5ea6\u3002
"},{"location":"admin/ghippo/workspace/res-gp-and-shared-res.html","title":"\u8d44\u6e90\u7ec4\u4e0e\u5171\u4eab\u8d44\u6e90\u7684\u533a\u522b","text":"

\u8d44\u6e90\u7ec4\u4e0e\u5171\u4eab\u8d44\u6e90\u5747\u652f\u6301\u7ed1\u5b9a\u96c6\u7fa4\uff0c\u4f46\u4f7f\u7528\u4e0a\u5b58\u5728\u5f88\u5927\u533a\u522b\u3002

"},{"location":"admin/ghippo/workspace/res-gp-and-shared-res.html#_2","title":"\u4f7f\u7528\u573a\u666f\u533a\u522b","text":"
  • \u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\uff1a\u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\u901a\u5e38\u88ab\u7528\u6765\u6279\u91cf\u6388\u6743\u3002\u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\u540e\uff0c \u5de5\u4f5c\u7a7a\u95f4\u7ba1\u7406\u5458\u5c06\u88ab\u6620\u5c04\u4e3a\u96c6\u7fa4\u7ba1\u7406\u5458\uff0c\u80fd\u591f\u7ba1\u7406\u5e76\u4f7f\u7528\u96c6\u7fa4\u8d44\u6e90\u3002
  • \u5171\u4eab\u8d44\u6e90\u7ed1\u5b9a\u96c6\u7fa4\uff1a\u8d44\u6e90\u5171\u4eab\u7ed1\u5b9a\u96c6\u7fa4\u901a\u5e38\u88ab\u7528\u6765\u505a\u8d44\u6e90\u9650\u989d\u3002 \u5178\u578b\u7684\u573a\u666f\u662f\u5e73\u53f0\u7ba1\u7406\u5458\u5c06\u96c6\u7fa4\u5206\u914d\u7ed9\u4e00\u7ea7\u4f9b\u5e94\u5546\u540e\uff0c\u518d\u7531\u4e00\u7ea7\u4f9b\u5e94\u5546\u5206\u914d\u7ed9\u4e8c\u7ea7\u4f9b\u5e94\u5546\u5e76\u5bf9\u4e8c\u7ea7\u4f9b\u5e94\u5546\u8fdb\u884c\u8d44\u6e90\u9650\u989d\u3002

\u8bf4\u660e\uff1a\u5728\u8be5\u573a\u666f\u4e2d\uff0c\u9700\u8981\u5e73\u53f0\u7ba1\u7406\u5458\u5bf9\u4e8c\u7ea7\u4f9b\u5e94\u5546\u8fdb\u884c\u8d44\u6e90\u9650\u5236\uff0c\u6682\u65f6\u8fd8\u4e0d\u652f\u6301\u4e00\u7ea7\u4f9b\u5e94\u5546\u9650\u5236\u4e8c\u7ea7\u4f9b\u5e94\u5546\u7684\u96c6\u7fa4\u989d\u5ea6\u3002

"},{"location":"admin/ghippo/workspace/res-gp-and-shared-res.html#_3","title":"\u96c6\u7fa4\u989d\u5ea6\u7684\u4f7f\u7528\u533a\u522b","text":"
  • \u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\uff1a\u5de5\u4f5c\u7a7a\u95f4\u7684\u7ba1\u7406\u5458\u5c06\u88ab\u6620\u5c04\u4e3a\u8be5\u96c6\u7fa4\u7684\u7ba1\u7406\u5458\uff0c\u76f8\u5f53\u4e8e\u5728\u5bb9\u5668\u7ba1\u7406-\u6743\u9650\u7ba1\u7406\u4e2d\u88ab\u6388\u4e88 Cluster Admin \u89d2\u8272\uff0c \u80fd\u591f\u65e0\u9650\u5236\u652f\u914d\u8be5\u96c6\u7fa4\u8d44\u6e90\uff0c\u7ba1\u7406\u8282\u70b9\u7b49\u91cd\u8981\u5185\u5bb9\uff0c\u4e14\u8d44\u6e90\u7ec4\u4e0d\u80fd\u591f\u88ab\u8d44\u6e90\u9650\u989d\u3002
  • \u5171\u4eab\u8d44\u6e90\u7ed1\u5b9a\u8d44\u6e90\uff1a\u5de5\u4f5c\u7a7a\u95f4\u7ba1\u7406\u5458\u4ec5\u80fd\u591f\u4f7f\u7528\u96c6\u7fa4\u4e2d\u7684\u989d\u5ea6\u5728\u5e94\u7528\u5de5\u4f5c\u53f0\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff0c\u4e0d\u5177\u5907\u96c6\u7fa4\u7684\u7ba1\u7406\u6743\u9650\u3002 \u82e5\u5bf9\u8be5\u5de5\u4f5c\u7a7a\u95f4\u9650\u5236\u989d\u5ea6\uff0c\u5219\u5de5\u4f5c\u7a7a\u95f4\u7ba1\u7406\u4ec5\u80fd\u591f\u5728\u989d\u5ea6\u8303\u56f4\u5185\u521b\u5efa\u5e76\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u3002
"},{"location":"admin/ghippo/workspace/res-gp-and-shared-res.html#_4","title":"\u8d44\u6e90\u7c7b\u578b\u7684\u533a\u522b","text":"
  • \u8d44\u6e90\u7ec4\uff1a\u80fd\u591f\u7ed1\u5b9a\u96c6\u7fa4\u3001\u96c6\u7fa4-\u547d\u540d\u7a7a\u95f4\u3001\u591a\u4e91\u3001\u591a\u4e91-\u547d\u540d\u7a7a\u95f4\u3001\u7f51\u683c\u3001\u7f51\u683c-\u547d\u540d\u7a7a\u95f4
  • \u5171\u4eab\u8d44\u6e90\uff1a\u4ec5\u80fd\u591f\u7ed1\u5b9a\u96c6\u7fa4
"},{"location":"admin/ghippo/workspace/res-gp-and-shared-res.html#_5","title":"\u8d44\u6e90\u7ec4\u4e0e\u5171\u4eab\u8d44\u6e90\u7684\u76f8\u540c\u70b9","text":"

\u5728\u8d44\u6e90\u7ec4/\u5171\u4eab\u8d44\u6e90\u7ed1\u5b9a\u96c6\u7fa4\u540e\u90fd\u53ef\u4ee5\u524d\u5f80\u5e94\u7528\u5de5\u4f5c\u53f0\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff0c\u521b\u5efa\u540e\u547d\u540d\u7a7a\u95f4\u5c06\u81ea\u52a8\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\u3002

"},{"location":"admin/ghippo/workspace/workspace.html","title":"\u521b\u5efa/\u5220\u9664\u5de5\u4f5c\u7a7a\u95f4","text":"

\u5de5\u4f5c\u7a7a\u95f4\u662f\u4e00\u79cd\u8d44\u6e90\u8303\u7574\uff0c\u4ee3\u8868\u4e00\u79cd\u8d44\u6e90\u5c42\u7ea7\u5173\u7cfb\u3002 \u5de5\u4f5c\u7a7a\u95f4\u53ef\u4ee5\u5305\u542b\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u6ce8\u518c\u4e2d\u5fc3\u7b49\u8d44\u6e90\u3002 \u901a\u5e38\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5bf9\u5e94\u4e00\u4e2a\u9879\u76ee\uff0c\u53ef\u4ee5\u4e3a\u6bcf\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u4e0d\u540c\u7684\u8d44\u6e90\uff0c\u6307\u6d3e\u4e0d\u540c\u7684\u7528\u6237\u548c\u7528\u6237\u7ec4\u3002

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u3002

  1. \u4f7f\u7528 admin/folder admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u3002

  2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4 \u6309\u94ae\u3002

  3. \u586b\u5199\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u3001\u6240\u5c5e\u6587\u4ef6\u5939\u7b49\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\u3002

Tip

\u521b\u5efa\u6210\u529f\u540e\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u5c06\u663e\u793a\u5728\u5de6\u4fa7\u7684\u6811\u72b6\u7ed3\u6784\u4e2d\uff0c\u4ee5\u4e0d\u540c\u7684\u56fe\u6807\u8868\u793a\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u3002

Note

\u9009\u4e2d\u67d0\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u6216\u6587\u4ef6\u5939\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 ... \u53ef\u4ee5\u8fdb\u884c\u7f16\u8f91\u6216\u5220\u9664\u3002

  • \u5f53\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u8d44\u6e90\u7ec4\u3001\u5171\u4eab\u8d44\u6e90\u4e2d\u5b58\u5728\u8d44\u6e90\u65f6\uff0c\u8be5\u5de5\u4f5c\u7a7a\u95f4\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u8d44\u6e90\u89e3\u7ed1\u540e\u518d\u5220\u9664\u3002
  • \u5f53\u5fae\u670d\u52a1\u5f15\u64ce\u6a21\u5757\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u5b58\u5728\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u8d44\u6e90\u65f6\uff0c\u8be5\u5de5\u4f5c\u7a7a\u95f4\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u79fb\u9664\u540e\u518d\u5220\u9664\u5de5\u4f5c\u7a7a\u95f4\u3002
  • \u5f53\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u5b58\u5728\u955c\u50cf\u7a7a\u95f4\u6216\u96c6\u6210\u4ed3\u5e93\u65f6\uff0c\u8be5\u5de5\u4f5c\u7a7a\u95f4\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u955c\u50cf\u7a7a\u95f4\u89e3\u7ed1\uff0c\u5c06\u4ed3\u5e93\u96c6\u6210\u5220\u9664\u540e\u518d\u5220\u9664\u5de5\u4f5c\u7a7a\u95f4\u3002
"},{"location":"admin/ghippo/workspace/ws-folder.html","title":"\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7","text":"

\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u662f\u4e00\u4e2a\u5177\u6709\u5c42\u7ea7\u7684\u8d44\u6e90\u9694\u79bb\u548c\u8d44\u6e90\u5206\u7ec4\u7279\u6027\uff0c\u4e3b\u8981\u89e3\u51b3\u8d44\u6e90\u7edf\u4e00\u6388\u6743\u3001\u8d44\u6e90\u5206\u7ec4\u4ee5\u53ca\u8d44\u6e90\u9650\u989d\u95ee\u9898\u3002

\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u6709\u4e24\u4e2a\u6982\u5ff5\uff1a\u5de5\u4f5c\u7a7a\u95f4\u548c\u6587\u4ef6\u5939\u3002

"},{"location":"admin/ghippo/workspace/ws-folder.html#_2","title":"\u5de5\u4f5c\u7a7a\u95f4","text":"

\u5de5\u4f5c\u7a7a\u95f4\u53ef\u901a\u8fc7 \u6388\u6743 \u3001 \u8d44\u6e90\u7ec4 \u548c \u5171\u4eab\u8d44\u6e90 \u6765\u7ba1\u7406\u8d44\u6e90\uff0c\u4f7f\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u4e4b\u95f4\u80fd\u591f\u5171\u4eab\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u8d44\u6e90\u3002

  • \u8d44\u6e90

    \u8d44\u6e90\u5904\u4e8e\u8d44\u6e90\u7ba1\u7406\u6a21\u5757\u5c42\u7ea7\u7ed3\u6784\u7684\u6700\u4f4e\u5c42\u7ea7\uff0c\u8d44\u6e90\u5305\u62ec Cluster\u3001Namespace\u3001Pipeline\u3001\u7f51\u5173\u7b49\u3002 \u6240\u6709\u8fd9\u4e9b\u8d44\u6e90\u7684\u7236\u7ea7\u53ea\u80fd\u662f\u5de5\u4f5c\u7a7a\u95f4\uff0c\u800c\u5de5\u4f5c\u7a7a\u95f4\u4f5c\u4e3a\u8d44\u6e90\u5bb9\u5668\u662f\u4e00\u79cd\u8d44\u6e90\u5206\u7ec4\u5355\u4f4d\u3002

  • \u5de5\u4f5c\u7a7a\u95f4

    \u5de5\u4f5c\u7a7a\u95f4\u901a\u5e38\u4ee3\u6307\u4e00\u4e2a\u9879\u76ee\u6216\u73af\u5883\uff0c\u6bcf\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u7684\u8d44\u6e90\u76f8\u5bf9\u4e8e\u5176\u4ed6\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u8d44\u6e90\u65f6\u903b\u8f91\u9694\u79bb\u7684\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u6388\u6743\uff0c\u6388\u4e88\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u540c\u4e00\u7ec4\u8d44\u6e90\u7684\u4e0d\u540c\u8bbf\u95ee\u6743\u9650\u3002

    \u4ece\u5c42\u6b21\u7ed3\u6784\u7684\u5e95\u5c42\u7b97\u8d77\uff0c\u5de5\u4f5c\u7a7a\u95f4\u4f4d\u4e8e\u7b2c\u4e00\u5c42\uff0c\u4e14\u5305\u542b\u8d44\u6e90\u3002 \u9664\u5171\u4eab\u8d44\u6e90\u5916\uff0c\u6240\u6709\u8d44\u6e90\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u7236\u9879\u3002\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u4e5f\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u7236\u7ea7\u6587\u4ef6\u5939\u3002

    \u8d44\u6e90\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u8fdb\u884c\u5206\u7ec4\uff0c\u800c\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u5b58\u5728\u4e24\u79cd\u5206\u7ec4\u6a21\u5f0f\uff0c\u5206\u522b\u662f \u8d44\u6e90\u7ec4 \u548c \u5171\u4eab\u8d44\u6e90 \u3002

  • \u8d44\u6e90\u7ec4

    \u4e00\u4e2a\u8d44\u6e90\u53ea\u80fd\u52a0\u5165\u4e00\u4e2a\u8d44\u6e90\u7ec4\uff0c\u8d44\u6e90\u7ec4\u4e0e\u5de5\u4f5c\u7a7a\u95f4\u4e00\u4e00\u5bf9\u5e94\u3002 \u8d44\u6e90\u88ab\u52a0\u5165\u5230\u8d44\u6e90\u7ec4\u540e\uff0cWorkspace Admin \u5c06\u83b7\u5f97\u8d44\u6e90\u7684\u7ba1\u7406\u6743\u9650\uff0c\u76f8\u5f53\u4e8e\u8be5\u8d44\u6e90\u7684\u6240\u6709\u8005\u3002

  • \u5171\u4eab\u8d44\u6e90

    \u800c\u5bf9\u4e8e\u5171\u4eab\u8d44\u6e90\u6765\u8bf4\uff0c\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u53ef\u4ee5\u5171\u4eab\u540c\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u8d44\u6e90\u3002 \u8d44\u6e90\u7684\u6240\u6709\u8005\uff0c\u53ef\u4ee5\u9009\u62e9\u5c06\u81ea\u5df1\u62e5\u6709\u7684\u8d44\u6e90\u5171\u4eab\u7ed9\u5de5\u4f5c\u7a7a\u95f4\u4f7f\u7528\uff0c\u4e00\u822c\u5171\u4eab\u65f6\u8d44\u6e90\u6240\u6709\u8005\u4f1a\u9650\u5236\u88ab\u5171\u4eab\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u4f7f\u7528\u7684\u8d44\u6e90\u989d\u5ea6\u3002 \u8d44\u6e90\u88ab\u5171\u4eab\u540e\uff0cWorkspace Admin \u4ec5\u5177\u6709\u8d44\u6e90\u9650\u989d\u4e0b\u7684\u8d44\u6e90\u4f7f\u7528\u6743\u9650\uff0c\u65e0\u6cd5\u7ba1\u7406\u8d44\u6e90\u6216\u8005\u8c03\u6574\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u4f7f\u7528\u7684\u8d44\u6e90\u91cf\u3002

    \u540c\u65f6\u5171\u4eab\u8d44\u6e90\u5bf9\u4e8e\u8d44\u6e90\u672c\u8eab\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u53ea\u6709 Cluster\uff08\u96c6\u7fa4\uff09\u8d44\u6e90\u53ef\u4ee5\u88ab\u5171\u4eab\u3002 Cluster Admin \u80fd\u591f\u5c06 Cluster \u8d44\u6e90\u5206\u4eab\u7ed9\u4e0d\u540c\u7684\u5de5\u4f5c\u7a7a\u95f4\u4f7f\u7528\uff0c\u5e76\u4e14\u9650\u5236\u5de5\u4f5c\u7a7a\u95f4\u5728\u6b64 Cluster \u4e0a\u7684\u4f7f\u7528\u989d\u5ea6\u3002

    Workspace Admin \u5728\u8d44\u6e90\u9650\u989d\u5185\u80fd\u591f\u521b\u5efa\u591a\u4e2a Namespace\uff0c\u4f46\u662f Namespace \u7684\u8d44\u6e90\u989d\u5ea6\u603b\u548c\u4e0d\u80fd\u8d85\u8fc7 Cluster \u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684\u8d44\u6e90\u9650\u989d\u3002 \u5bf9\u4e8e Kubernetes \u8d44\u6e90\uff0c\u5f53\u524d\u80fd\u591f\u5206\u4eab\u7684\u8d44\u6e90\u7c7b\u578b\u4ec5\u6709 Cluster\u3002

"},{"location":"admin/ghippo/workspace/ws-folder.html#_3","title":"\u6587\u4ef6\u5939","text":"

\u6587\u4ef6\u5939\u53ef\u7528\u4e8e\u6784\u5efa\u4f01\u4e1a\u4e1a\u52a1\u5c42\u7ea7\u5173\u7cfb\u3002

  • \u6587\u4ef6\u5939\u662f\u5728\u5de5\u4f5c\u7a7a\u95f4\u57fa\u7840\u4e4b\u4e0a\u7684\u8fdb\u4e00\u6b65\u5206\u7ec4\u673a\u5236\uff0c\u5177\u6709\u5c42\u7ea7\u7ed3\u6784\u3002 \u4e00\u4e2a\u6587\u4ef6\u5939\u53ef\u4ee5\u5305\u542b\u5de5\u4f5c\u7a7a\u95f4\u3001\u5176\u4ed6\u6587\u4ef6\u5939\u6216\u4e24\u8005\u7684\u7ec4\u5408\uff0c\u80fd\u591f\u5f62\u6210\u6811\u72b6\u7684\u7ec4\u7ec7\u5173\u7cfb\u3002

  • \u501f\u52a9\u6587\u4ef6\u5939\u60a8\u53ef\u4ee5\u6620\u5c04\u4f01\u4e1a\u4e1a\u52a1\u5c42\u7ea7\u5173\u7cfb\uff0c\u6309\u7167\u90e8\u95e8\u5bf9\u5de5\u4f5c\u7a7a\u95f4\u8fdb\u884c\u5206\u7ec4\u3002 \u6587\u4ef6\u5939\u4e0d\u76f4\u63a5\u4e0e\u8d44\u6e90\u6302\u94a9\uff0c\u800c\u662f\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u95f4\u63a5\u5b9e\u73b0\u8d44\u6e90\u5206\u7ec4\u3002

  • \u6587\u4ef6\u5939\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u7236\u7ea7\u6587\u4ef6\u5939\uff0c\u800c\u6839\u6587\u4ef6\u5939\u662f\u5c42\u6b21\u7ed3\u6784\u7684\u6700\u9ad8\u5c42\u7ea7\u3002 \u6839\u6587\u4ef6\u5939\u6ca1\u6709\u7236\u7ea7\uff0c\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u5747\u6302\u9760\u5230\u6839\u6587\u4ef6\u5939\u4e0b\u3002

\u53e6\u5916\uff0c\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u5728\u6587\u4ef6\u5939\u4e2d\u80fd\u591f\u901a\u8fc7\u5c42\u7ea7\u7ed3\u6784\u7ee7\u627f\u6765\u81ea\u7236\u9879\u7684\u6743\u9650\u3002 \u7528\u6237\u5728\u5c42\u6b21\u7ed3\u6784\u4e2d\u7684\u6743\u9650\u6765\u81ea\u5f53\u524d\u5c42\u7ea7\u7684\u6743\u9650\u4ee5\u53ca\u7ee7\u627f\u5176\u7236\u9879\u6743\u9650\u7684\u7ec4\u5408\u7ed3\u679c\uff0c\u6743\u9650\u4e4b\u95f4\u662f\u52a0\u5408\u5173\u7cfb\u4e0d\u5b58\u5728\u4e92\u65a5\u3002

"},{"location":"admin/ghippo/workspace/ws-permission.html","title":"\u5de5\u4f5c\u7a7a\u95f4\u6743\u9650\u8bf4\u660e","text":"

\u5de5\u4f5c\u7a7a\u95f4\u5177\u6709\u6743\u9650\u6620\u5c04\u548c\u8d44\u6e90\u9694\u79bb\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237/\u7528\u6237\u7ec4\u5728\u5de5\u4f5c\u7a7a\u95f4\u7684\u6743\u9650\u6620\u5c04\u5230\u5176\u4e0b\u7684\u8d44\u6e90\u4e0a\u3002 \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u5de5\u4f5c\u7a7a\u95f4\u662f Workspace Admin \u89d2\u8272\uff0c\u540c\u65f6\u5de5\u4f5c\u7a7a\u95f4-\u8d44\u6e90\u7ec4\u4e2d\u7ed1\u5b9a\u4e86\u8d44\u6e90 Namespace\uff0c\u5219\u6620\u5c04\u540e\u8be5\u7528\u6237/\u7528\u6237\u7ec4\u5c06\u6210\u4e3a Namespace Admin\u3002

Note

\u5de5\u4f5c\u7a7a\u95f4\u7684\u6743\u9650\u6620\u5c04\u80fd\u529b\u4e0d\u4f1a\u4f5c\u7528\u5230\u5171\u4eab\u8d44\u6e90\u4e0a\uff0c\u56e0\u4e3a\u5171\u4eab\u662f\u5c06\u96c6\u7fa4\u7684\u4f7f\u7528\u6743\u9650\u5171\u4eab\u7ed9\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u800c\u4e0d\u662f\u5c06\u7ba1\u7406\u6743\u9650\u53d7\u8ba9\u7ed9\u5de5\u4f5c\u7a7a\u95f4\uff0c\u56e0\u6b64\u4e0d\u4f1a\u5b9e\u73b0\u6743\u9650\u7ee7\u627f\u548c\u89d2\u8272\u6620\u5c04\u3002

"},{"location":"admin/ghippo/workspace/ws-permission.html#_2","title":"\u5e94\u7528\u573a\u666f","text":"

\u901a\u8fc7\u5c06\u8d44\u6e90\u7ed1\u5b9a\u5230\u4e0d\u540c\u7684\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u5b9e\u73b0\u8d44\u6e90\u9694\u79bb\u3002 \u56e0\u6b64\u501f\u52a9\u6743\u9650\u6620\u5c04\u3001\u8d44\u6e90\u9694\u79bb\u548c\u5171\u4eab\u8d44\u6e90\u80fd\u529b\u80fd\u591f\u5c06\u8d44\u6e90\u7075\u6d3b\u5206\u914d\u7ed9\u5404\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u3002

\u901a\u5e38\u9002\u7528\u4e8e\u4ee5\u4e0b\u4e24\u4e2a\u573a\u666f\uff1a

  • \u96c6\u7fa4\u4e00\u5bf9\u4e00

    \u666e\u901a\u96c6\u7fa4 \u90e8\u95e8/\u79df\u6237\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09 \u7528\u9014 \u96c6\u7fa4 01 A \u7ba1\u7406\u548c\u4f7f\u7528 \u96c6\u7fa4 02 B \u7ba1\u7406\u548c\u4f7f\u7528
  • \u96c6\u7fa4\u4e00\u5bf9\u591a

    \u96c6\u7fa4 \u90e8\u95e8/\u79df\u6237\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09 \u8d44\u6e90\u9650\u989d \u96c6\u7fa4 01 A 100 \u6838 CPU B 50 \u6838 CPU
"},{"location":"admin/ghippo/workspace/ws-permission.html#_3","title":"\u6743\u9650\u8bf4\u660e","text":"\u64cd\u4f5c\u5bf9\u8c61 \u64cd\u4f5c Workspace Admin Workspace Editor Workspace Viewer \u672c\u8eab \u67e5\u770b \u2713 \u2713 \u2713 - \u6388\u6743 \u2713 \u2717 \u2717 - \u4fee\u6539\u522b\u540d \u2713 \u2713 \u2717 \u8d44\u6e90\u7ec4 \u67e5\u770b \u2713 \u2713 \u2713 - \u8d44\u6e90\u7ed1\u5b9a \u2713 \u2717 \u2717 - \u89e3\u9664\u7ed1\u5b9a \u2713 \u2717 \u2717 \u5171\u4eab\u8d44\u6e90 \u67e5\u770b \u2713 \u2713 \u2713 - \u65b0\u589e\u5171\u4eab \u2713 \u2717 \u2717 - \u89e3\u9664\u5171\u4eab \u2713 \u2717 \u2717 - \u8d44\u6e90\u9650\u989d \u2713 \u2717 \u2717 - \u4f7f\u7528\u5171\u4eab\u8d44\u6e90 [^1] \u2713 \u2717 \u2717"},{"location":"admin/ghippo/workspace/wsbind-permission.html","title":"\u8d44\u6e90\u7ed1\u5b9a\u6743\u9650\u8bf4\u660e","text":"

\u5047\u5982\u7528\u6237\u5c0f\u660e\uff08\u201c\u5c0f\u660e\u201d\u4ee3\u8868\u4efb\u4f55\u6709\u8d44\u6e90\u7ed1\u5b9a\u9700\u6c42\u7684\u7528\u6237\uff09\u5df2\u7ecf\u5177\u5907\u4e86 Workspace Admin \u89d2\u8272\u6216\u5df2\u901a\u8fc7\u81ea\u5b9a\u4e49\u89d2\u8272\u6388\u6743\uff0c \u540c\u65f6\u81ea\u5b9a\u4e49\u89d2\u8272\u4e2d\u5305\u542b\u5de5\u4f5c\u7a7a\u95f4\u7684\u201c\u8d44\u6e90\u7ed1\u5b9a\u201d\u6743\u9650\uff0c\u5e0c\u671b\u5c06\u67d0\u4e2a\u96c6\u7fa4\u6216\u8005\u67d0\u4e2a\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u5176\u6240\u5728\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u3002

\u8981\u5c06\u96c6\u7fa4/\u547d\u540d\u7a7a\u95f4\u8d44\u6e90\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\uff0c\u4e0d\u4ec5\u9700\u8981\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684\u201c\u8d44\u6e90\u7ed1\u5b9a\u201d\u6743\u9650\uff0c\u8fd8\u9700\u8981 Cluster Admin \u7684\u8d44\u6e90\u6743\u9650\u3002

"},{"location":"admin/ghippo/workspace/wsbind-permission.html#_2","title":"\u7ed9\u5c0f\u660e\u6388\u6743","text":"
  1. \u4f7f\u7528\u5e73\u53f0 Admin \u89d2\u8272\uff0c \u5728 \u5de5\u4f5c\u7a7a\u95f4 -> \u6388\u6743 \u9875\u9762\u7ed9\u5c0f\u660e\u6388\u4e88 Workspace Admin \u89d2\u8272\u3002

  2. \u7136\u540e\u5728 \u5bb9\u5668\u7ba1\u7406 -> \u6743\u9650\u7ba1\u7406 \u9875\u9762\uff0c\u901a\u8fc7 \u6dfb\u52a0\u6388\u6743 \u5c06\u5c0f\u660e\u6388\u6743\u4e3a Cluster Admin\u3002

"},{"location":"admin/ghippo/workspace/wsbind-permission.html#_3","title":"\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4","text":"

\u4f7f\u7528\u5c0f\u660e\u7684\u8d26\u53f7\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5728 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \u9875\u9762\uff0c\u901a\u8fc7 \u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4 \u529f\u80fd\uff0c \u5c0f\u660e\u53ef\u4ee5\u5c06\u6307\u5b9a\u96c6\u7fa4\u7ed1\u5b9a\u5230\u81ea\u5df1\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u3002

Note

\u5c0f\u660e\u80fd\u4e14\u53ea\u80fd\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5c06\u96c6\u7fa4\u6216\u8005\u8be5\u96c6\u7fa4\u4e0b\u7684\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u65e0\u6cd5\u5728\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u5b8c\u6210\u6b64\u64cd\u4f5c\u3002

\u7ed1\u5b9a\u547d\u540d\u7a7a\u95f4\u5230\u5de5\u4f5c\u7a7a\u95f4\u4e5f\u81f3\u5c11\u9700\u8981 Workspace Admin + Cluster Admin \u6743\u9650\u3002

"},{"location":"admin/host/createhost.html","title":"\u521b\u5efa\u548c\u542f\u52a8\u4e91\u4e3b\u673a","text":"

\u7528\u6237\u5b8c\u6210\u6ce8\u518c\uff0c\u4e3a\u5176\u5206\u914d\u4e86\u5de5\u4f5c\u7a7a\u95f4\u3001\u547d\u540d\u7a7a\u95f4\u548c\u8d44\u6e90\u540e\uff0c\u5373\u53ef\u4ee5\u521b\u5efa\u5e76\u542f\u52a8\u4e91\u4e3b\u673a\u3002

"},{"location":"admin/host/createhost.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
  • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
  • \u7528\u6237\u5df2\u6210\u529f\u6ce8\u518c
  • \u4e3a\u7528\u6237\u7ed1\u5b9a\u4e86\u5de5\u4f5c\u7a7a\u95f4
  • \u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u4e86\u8d44\u6e90
"},{"location":"admin/host/createhost.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
  2. \u70b9\u51fb \u521b\u5efa\u4e91\u4e3b\u673a -> \u901a\u8fc7\u6a21\u677f\u521b\u5efa

  3. \u5b9a\u4e49\u7684\u4e91\u4e3b\u673a\u5404\u9879\u914d\u7f6e\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65

    \u57fa\u672c\u914d\u7f6e\u6a21\u677f\u914d\u7f6e\u5b58\u50a8\u4e0e\u7f51\u7edc

  4. \u914d\u7f6e root \u5bc6\u7801\u6216 ssh \u5bc6\u94a5\u540e\u70b9\u51fb \u786e\u5b9a

  5. \u8fd4\u56de\u4e3b\u673a\u5217\u8868\uff0c\u7b49\u5f85\u72b6\u6001\u53d8\u4e3a \u8fd0\u884c\u4e2d \u4e4b\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u53f3\u4fa7\u7684 \u2507 \u542f\u52a8\u4e3b\u673a\u3002

\u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528\u4e91\u4e3b\u673a

"},{"location":"admin/host/usehost.html","title":"\u4f7f\u7528\u4e91\u4e3b\u673a","text":"

\u521b\u5efa\u5e76\u542f\u52a8\u4e91\u4e3b\u673a\u4e4b\u540e\uff0c\u7528\u6237\u5c31\u53ef\u4ee5\u5f00\u59cb\u4f7f\u7528\u4e91\u4e3b\u673a\u3002

"},{"location":"admin/host/usehost.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
  • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
  • \u7528\u6237\u5df2\u521b\u5efa\u5e76\u542f\u52a8\u4e91\u4e3b\u673a
"},{"location":"admin/host/usehost.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
  2. \u5bfc\u822a\u5230 \u5bb9\u5668\u7ba1\u7406 -> \u5bb9\u5668\u7f51\u7edc -> \u670d\u52a1 \uff0c\u70b9\u51fb\u670d\u52a1\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u670d\u52a1\u8be6\u60c5\u9875\uff0c\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u66f4\u65b0

  3. \u66f4\u6539\u7aef\u53e3\u8303\u56f4\u4e3a 30900-30999\uff0c\u4f46\u4e0d\u80fd\u51b2\u7a81\u3002

  4. \u4ee5\u7ec8\u7aef\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5bfc\u822a\u5230\u5bf9\u5e94\u7684\u670d\u52a1\uff0c\u67e5\u770b\u8bbf\u95ee\u7aef\u53e3\u3002

  5. \u5728\u5916\u7f51\u4f7f\u7528 SSH \u5ba2\u6237\u7aef\u767b\u5f55\u4e91\u4e3b\u673a

  6. \u81f3\u6b64\uff0c\u4f60\u53ef\u4ee5\u5728\u4e91\u4e3b\u673a\u4e0a\u6267\u884c\u5404\u9879\u64cd\u4f5c\u3002

\u4e0b\u4e00\u6b65\uff1a\u4e91\u8d44\u6e90\u5171\u4eab\uff1a\u914d\u989d\u7ba1\u7406

"},{"location":"admin/insight/alert-center/index.html","title":"\u544a\u8b66\u4e2d\u5fc3","text":"

\u544a\u8b66\u4e2d\u5fc3\u662f AI \u7b97\u529b\u5e73\u53f0 \u63d0\u4f9b\u7684\u4e00\u4e2a\u91cd\u8981\u529f\u80fd\uff0c\u5b83\u8ba9\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u754c\u9762\u65b9\u4fbf\u5730\u6309\u7167\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u67e5\u770b\u6240\u6709\u6d3b\u52a8\u548c\u5386\u53f2\u544a\u8b66\uff0c \u5e76\u6839\u636e\u544a\u8b66\u7ea7\u522b\uff08\u7d27\u6025\u3001\u8b66\u544a\u3001\u63d0\u793a\uff09\u6765\u641c\u7d22\u544a\u8b66\u3002

\u6240\u6709\u544a\u8b66\u90fd\u662f\u57fa\u4e8e\u9884\u8bbe\u7684\u544a\u8b66\u89c4\u5219\u8bbe\u5b9a\u7684\u9608\u503c\u6761\u4ef6\u89e6\u53d1\u7684\u3002\u5728 AI \u7b97\u529b\u5e73\u53f0\u4e2d\uff0c\u5185\u7f6e\u4e86\u4e00\u4e9b\u5168\u5c40\u544a\u8b66\u7b56\u7565\uff0c\u540c\u65f6\u60a8\u4e5f\u53ef\u4ee5\u968f\u65f6\u521b\u5efa\u3001\u5220\u9664\u544a\u8b66\u7b56\u7565\uff0c\u5bf9\u4ee5\u4e0b\u6307\u6807\u8fdb\u884c\u8bbe\u7f6e\uff1a

  • CPU \u4f7f\u7528\u91cf
  • \u5185\u5b58\u4f7f\u7528\u91cf
  • \u78c1\u76d8\u4f7f\u7528\u91cf
  • \u78c1\u76d8\u6bcf\u79d2\u8bfb\u6b21\u6570
  • \u78c1\u76d8\u6bcf\u79d2\u5199\u6b21\u6570
  • \u96c6\u7fa4\u78c1\u76d8\u8bfb\u53d6\u541e\u5410\u91cf
  • \u96c6\u7fa4\u78c1\u76d8\u5199\u5165\u541e\u5410\u91cf
  • \u7f51\u7edc\u53d1\u9001\u901f\u7387
  • \u7f51\u7edc\u63a5\u6536\u901f\u7387

\u8fd8\u53ef\u4ee5\u4e3a\u544a\u8b66\u89c4\u5219\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002\u544a\u8b66\u89c4\u5219\u5206\u4e3a\u6d3b\u8dc3\u548c\u8fc7\u671f\u89c4\u5219\uff0c\u652f\u6301\u542f\u7528/\u7981\u7528\u67d0\u4e9b\u89c4\u5219\u6765\u5b9e\u73b0\u544a\u8b66\u9759\u9ed8\u3002

\u5f53\u8fbe\u5230\u9608\u503c\u6761\u4ef6\u540e\uff0c\u53ef\u4ee5\u914d\u7f6e\u544a\u8b66\u901a\u77e5\u65b9\u5f0f\uff0c\u5305\u62ec\u90ae\u4ef6\u3001\u9489\u9489\u3001\u4f01\u4e1a\u5fae\u4fe1\u3001Webhook \u548c\u77ed\u4fe1\u901a\u77e5\u3002 \u6240\u6709\u901a\u77e5\u7684\u6d88\u606f\u6a21\u677f\u90fd\u53ef\u4ee5\u81ea\u5b9a\u4e49\uff0c\u540c\u65f6\u8fd8\u652f\u6301\u6309\u8bbe\u5b9a\u7684\u95f4\u9694\u65f6\u95f4\u53d1\u9001\u901a\u77e5\u3002

\u6b64\u5916\uff0c\u544a\u8b66\u4e2d\u5fc3\u8fd8\u652f\u6301\u901a\u8fc7\u963f\u91cc\u4e91\u3001\u817e\u8baf\u4e91\u7b49\u63d0\u4f9b\u7684\u77ed\u4fe1\u670d\u52a1\u5c06\u544a\u8b66\u6d88\u606f\u53d1\u9001\u7ed9\u6307\u5b9a\u7528\u6237\uff0c\u5b9e\u73b0\u591a\u79cd\u65b9\u5f0f\u7684\u544a\u8b66\u901a\u77e5\u3002

AI \u7b97\u529b\u5e73\u53f0 \u544a\u8b66\u4e2d\u5fc3\u662f\u4e00\u4e2a\u529f\u80fd\u5f3a\u5927\u7684\u544a\u8b66\u7ba1\u7406\u5e73\u53f0\uff0c\u53ef\u5e2e\u52a9\u7528\u6237\u53ca\u65f6\u53d1\u73b0\u548c\u89e3\u51b3\u96c6\u7fa4\u4e2d\u51fa\u73b0\u7684\u95ee\u9898\uff0c \u63d0\u9ad8\u4e1a\u52a1\u7a33\u5b9a\u6027\u548c\u53ef\u7528\u6027\uff0c\u4fbf\u4e8e\u96c6\u7fa4\u5de1\u68c0\u548c\u6545\u969c\u6392\u67e5\u3002

"},{"location":"admin/insight/alert-center/alert-policy.html","title":"\u544a\u8b66\u7b56\u7565","text":"

\u544a\u8b66\u7b56\u7565\u662f\u5728\u53ef\u89c2\u6d4b\u6027\u7cfb\u7edf\u4e2d\u5b9a\u4e49\u7684\u4e00\u7ec4\u89c4\u5219\u548c\u6761\u4ef6\uff0c\u7528\u4e8e\u68c0\u6d4b\u548c\u89e6\u53d1\u8b66\u62a5\uff0c\u4ee5\u4fbf\u5728\u7cfb\u7edf\u51fa\u73b0\u5f02\u5e38\u6216\u8fbe\u5230\u9884\u5b9a\u7684\u9608\u503c\u65f6\u53ca\u65f6\u901a\u77e5\u76f8\u5173\u4eba\u5458\u6216\u7cfb\u7edf\u3002

\u6bcf\u6761\u544a\u8b66\u7b56\u7565\u662f\u4e00\u7ec4\u544a\u8b66\u89c4\u5219\u7684\u96c6\u5408\uff0c\u652f\u6301\u5bf9\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5de5\u4f5c\u8d1f\u8f7d\u7b49\u8d44\u6e90\u3001\u65e5\u5fd7\u3001\u4e8b\u4ef6\u8bbe\u7f6e\u544a\u8b66\u89c4\u5219\u3002\u5f53\u544a\u8b66\u5bf9\u8c61\u8fbe\u5230\u7b56\u7565\u4e0b\u4efb\u4e00\u89c4\u5219\u8bbe\u5b9a\u7684\u9608\u503c\uff0c\u5219\u4f1a\u81ea\u52a8\u89e6\u53d1\u544a\u8b66\u5e76\u53d1\u9001\u901a\u77e5\u3002

"},{"location":"admin/insight/alert-center/alert-policy.html#_2","title":"\u67e5\u770b\u544a\u8b66\u7b56\u7565","text":"
  1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027\u3002
  2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u544a\u8b66\u4e2d\u5fc3 -> \u544a\u8b66\u7b56\u7565\u3002

    • \u96c6\u7fa4\uff1a\u5355\u51fb\u96c6\u7fa4\u4e0b\u62c9\u6846\u53ef\u5207\u6362\u96c6\u7fa4\uff1b
    • \u547d\u540d\u7a7a\u95f4\uff1a\u5355\u51fb\u547d\u540d\u7a7a\u95f4\u5207\u6362\u4e0b\u62c9\u6846\u3002

  3. \u70b9\u51fb\u544a\u8b66\u7b56\u7565\u540d\u79f0\u53ef\u67e5\u770b\u7b56\u7565\u7684\u57fa\u672c\u4fe1\u606f\u3001\u89c4\u5219\u4ee5\u53ca\u901a\u77e5\u914d\u7f6e\u3002

    1. \u5728\u89c4\u5219\u5217\u8868\u4e2d\u53ef\u67e5\u770b\u89c4\u5219\u7c7b\u578b\u3001\u89c4\u5219\u7684\u8868\u8fbe\u5f0f\u3001\u7ea7\u522b\u3001\u72b6\u6001\u7b49\u4fe1\u606f\u3002
    2. \u8fdb\u5165\u7b56\u7565\u8be6\u60c5\uff0c\u53ef\u4ee5\u6dfb\u52a0\u3001\u7f16\u8f91\u3001\u5220\u9664\u5176\u4e0b\u7684\u544a\u8b66\u89c4\u5219\u3002

"},{"location":"admin/insight/alert-center/alert-policy.html#_3","title":"\u521b\u5efa\u544a\u8b66\u7b56\u7565","text":"
  1. \u586b\u5199\u57fa\u672c\u4fe1\u606f\uff0c\u9009\u62e9\u4e00\u4e2a\u6216\u591a\u4e2a\u96c6\u7fa4\u3001\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\u4e3a\u544a\u8b66\u5bf9\u8c61\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002

    Note

    • \u9009\u62e9\u5168\u90e8\u96c6\u7fa4\u3001\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\uff1a\u521b\u5efa\u7684\u544a\u8b66\u89c4\u5219\u5bf9\u6240\u6709\u5df2\u5b89\u88c5 insight-agent \u7684\u96c6\u7fa4\u751f\u6548\u3002
    • \u9009\u62e9\u5355\u4e2a\u6216\u591a\u4e2a\u96c6\u7fa4\u96c6\u7fa4\u3001\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\uff1a\u521b\u5efa\u7684\u544a\u8b66\u89c4\u5219\u4ec5\u5bf9\u6240\u9009\u7684\u8d44\u6e90\u5bf9\u8c61\u751f\u6548\u3002
    • \u540c\u65f6\uff0c\u7528\u6237\u53ea\u80fd\u5bf9\u5df2\u6743\u9650\u7684\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u544a\u8b66\u89c4\u5219\u3002
"},{"location":"admin/insight/alert-center/alert-policy.html#_4","title":"\u624b\u52a8\u6dfb\u52a0\u89c4\u5219","text":"
  1. \u5728\u521b\u5efa\u544a\u8b66\u7b56\u7565\u7684\u7b2c\u4e8c\u90e8\u4e2d\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4e0a\u89d2\u7684\u6dfb\u52a0\u89c4\u5219\u3002

  2. \u5728\u5f39\u7a97\u4e2d\u521b\u5efa\u544a\u8b66\u89c4\u5219\uff0c\u586b\u5199\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a\u3002

    • \u6a21\u677f\u89c4\u5219\uff1a\u9884\u5b9a\u4e49\u4e86\u57fa\u7840\u6307\u6807\uff0c\u53ef\u4ee5\u6309 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u3001\u7f51\u7edc\u8bbe\u5b9a\u8981\u76d1\u63a7\u7684\u6307\u6807\u3002
    • PromQL \u89c4\u5219\uff1a\u8f93\u5165\u4e00\u4e2a PromQL \u8868\u8fbe\u5f0f\uff0c\u5177\u4f53\u8bf7\u67e5\u8be2 Prometheus \u8868\u8fbe\u5f0f\u3002
    • \u6301\u7eed\u65f6\u957f\uff1a\u544a\u8b66\u88ab\u89e6\u53d1\u4e14\u6301\u7eed\u65f6\u95f4\u8fbe\u5230\u8be5\u8bbe\u5b9a\u503c\u540e\uff0c\u544a\u8b66\u7b56\u7565\u5c06\u53d8\u4e3a\u89e6\u53d1\u4e2d\u72b6\u6001\u3002
    • \u544a\u8b66\u7ea7\u522b\uff1a\u5305\u542b\u7d27\u6025\u3001\u8b66\u544a\u3001\u4fe1\u606f\u4e09\u79cd\u7ea7\u522b\u3002
    • \u9ad8\u7ea7\u8bbe\u7f6e\uff1a\u53ef\u4ee5\u81ea\u5b9a\u4e49\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

    Info

    \u7cfb\u7edf\u5b9a\u4e49\u4e86\u5185\u7f6e\u6807\u7b7e\uff0c\u82e5\u81ea\u5b9a\u4e49\u6807\u7b7e\u4e0e\u5185\u7f6e\u6807\u7b7e\u7684\u952e\u503c\u76f8\u540c\uff0c\u5219\u81ea\u5b9a\u4e49\u6807\u7b7e\u4e0d\u751f\u6548\u3002 \u5185\u7f6e\u6807\u7b7e\u6709\uff1aseverity\u3001rule_id\uff0csource\u3001cluster_name\u3001group_id\u3001 target_type \u548c target\u3002

"},{"location":"admin/insight/alert-center/alert-policy.html#_5","title":"\u521b\u5efa\u65e5\u5fd7\u89c4\u5219","text":"

\u5b8c\u6210\u57fa\u672c\u4fe1\u606f\u7684\u586b\u5199\u540e\uff0c\u70b9\u51fb \u6dfb\u52a0\u89c4\u5219\uff0c\u89c4\u5219\u7c7b\u578b\u9009\u62e9 \u65e5\u5fd7\u89c4\u5219\u3002

Note

\u4ec5\u5f53\u8d44\u6e90\u5bf9\u8c61\u9009\u62e9\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u652f\u6301\u521b\u5efa\u65e5\u5fd7\u89c4\u5219\u3002

\u5b57\u6bb5\u8bf4\u660e\uff1a

  • \u8fc7\u6ee4\u6761\u4ef6\uff1a\u67e5\u8be2\u65e5\u5fd7\u5185\u5bb9\u7684\u5b57\u6bb5\uff0c\u652f\u6301\u4e0e\u3001\u6216\u3001\u6b63\u5219\u5339\u914d\u3001\u6a21\u7cca\u5339\u914d\u56db\u79cd\u8fc7\u6ee4\u6761\u4ef6\u3002
  • \u5224\u65ad\u6761\u4ef6\uff1a\u6839\u636e \u8fc7\u6ee4\u6761\u4ef6\uff0c\u8f93\u5165\u5173\u952e\u5b57\u6216\u5339\u914d\u6761\u4ef6\u3002
  • \u65f6\u95f4\u8303\u56f4\uff1a\u65e5\u5fd7\u67e5\u8be2\u7684\u65f6\u95f4\u8303\u56f4\u3002
  • \u9608\u503c\u6761\u4ef6\uff1a\u5728\u8f93\u5165\u6846\u4e2d\u8f93\u5165\u544a\u8b66\u9608\u503c\u3002\u5f53\u8fbe\u5230\u8bbe\u7f6e\u7684\u9608\u503c\u65f6\uff0c\u5219\u89e6\u53d1\u544a\u8b66\u3002\u652f\u6301\u7684\u6bd4\u8f83\u8fd0\u7b97\u7b26\u6709\uff1a >\u3001\u2265\u3001=\u3001\u2264\u3001<\u3002
  • \u544a\u8b66\u7ea7\u522b\uff1a\u9009\u62e9\u544a\u8b66\u7ea7\u522b\uff0c\u7528\u4e8e\u8868\u793a\u544a\u8b66\u7684\u4e25\u91cd\u7a0b\u5ea6\u3002
"},{"location":"admin/insight/alert-center/alert-policy.html#_6","title":"\u521b\u5efa\u4e8b\u4ef6\u89c4\u5219","text":"

\u5b8c\u6210\u57fa\u672c\u4fe1\u606f\u7684\u586b\u5199\u540e\uff0c\u70b9\u51fb \u6dfb\u52a0\u89c4\u5219\uff0c\u89c4\u5219\u7c7b\u578b\u9009\u62e9 \u4e8b\u4ef6\u89c4\u5219\u3002

Note

\u4ec5\u5f53\u8d44\u6e90\u5bf9\u8c61\u9009\u62e9\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u652f\u6301\u521b\u5efa\u4e8b\u4ef6\u89c4\u5219\u3002

\u5b57\u6bb5\u8bf4\u660e\uff1a

  • \u4e8b\u4ef6\u89c4\u5219\uff1a\u4ec5\u652f\u6301\u8d44\u6e90\u5bf9\u8c61\u9009\u62e9\u5de5\u4f5c\u8d1f\u8f7d
  • \u4e8b\u4ef6\u539f\u56e0\uff1a\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\u7c7b\u578b\u7684\u4e8b\u4ef6\u539f\u56e0\u4e0d\u540c\uff0c\u4e8b\u4ef6\u539f\u56e0\u4e4b\u95f4\u662f\u201c\u548c\u201d\u7684\u5173\u7cfb\u3002
  • \u65f6\u95f4\u8303\u56f4\uff1a\u68c0\u6d4b\u8be5\u65f6\u95f4\u8303\u56f4\u5185\u4ea7\u751f\u6570\u636e\uff0c\u82e5\u8fbe\u5230\u8bbe\u7f6e\u7684\u9608\u503c\u6761\u4ef6\uff0c\u5219\u89e6\u53d1\u544a\u8b66\u4e8b\u4ef6\u3002
  • \u9608\u503c\u6761\u4ef6\uff1a\u5f53\u4ea7\u751f\u7684\u4e8b\u4ef6\u8fbe\u5230\u8bbe\u7f6e\u7684\u9608\u503c\u65f6\uff0c\u5219\u89e6\u53d1\u544a\u8b66\u4e8b\u4ef6\u3002
  • \u8d8b\u52bf\u56fe\uff1a\u9ed8\u8ba4\u67e5\u8be2 10 \u5206\u949f\u5185\u7684\u4e8b\u4ef6\u53d8\u5316\u8d8b\u52bf\uff0c\u6bcf\u4e2a\u70b9\u7684\u6570\u503c\u7edf\u8ba1\u7684\u662f\u5f53\u524d\u65f6\u95f4\u70b9\u5230\u4e4b\u524d\u7684\u67d0\u6bb5\u65f6\u95f4\uff08\u65f6\u95f4\u8303\u56f4\uff09\u5185\u53d1\u751f\u7684\u603b\u6b21\u6570\u3002
"},{"location":"admin/insight/alert-center/alert-policy.html#_7","title":"\u5bfc\u5165\u89c4\u5219\u6a21\u677f","text":"
  1. \u53ef\u70b9\u51fb \u6a21\u677f\u5bfc\u5165\uff0c\u9009\u62e9\u5e73\u53f0\u7ba1\u7406\u5458\u5df2\u521b\u5efa\u597d\u7684\u544a\u8b66\u6a21\u677f\u6279\u91cf\u5bfc\u5165\u544a\u8b66\u89c4\u5219\u3002

  2. \u70b9\u51fb \u4e0b\u4e00\u6b65 \u540e\u914d\u7f6e\u901a\u77e5\u3002

  3. \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u8fd4\u56de\u544a\u8b66\u7b56\u7565\u5217\u8868\u3002

Tip

\u65b0\u5efa\u7684\u544a\u8b66\u7b56\u7565\u4e3a \u672a\u89e6\u53d1 \u72b6\u6001\u3002\u4e00\u65e6\u6ee1\u8db3\u89c4\u5219\u4e2d\u7684\u9608\u503c\u6761\u4ef6\u548c\u6301\u7eed\u65f6\u95f4\u540e\uff0c\u5c06\u53d8\u4e3a \u89e6\u53d1\u4e2d \u72b6\u6001\u3002

Warning

\u5220\u9664\u540e\u7684\u544a\u8b66\u7b56\u7565\u5c06\u5b8c\u5168\u6d88\u5931\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

"},{"location":"admin/insight/alert-center/alert-policy.html#yaml","title":"\u901a\u8fc7 YAML \u5bfc\u5165\u544a\u8b66\u7b56\u7565","text":"
  1. \u8fdb\u5165\u544a\u8b66\u7b56\u7565\u5217\u8868\uff0c\u70b9\u51fb YAML \u521b\u5efa\u3002

  2. \u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u7684\u9009\u62e9\u662f\u4e3a\u4e86\u544a\u8b66\u7b56\u7565\u7684\u7ba1\u7406\u6743\u9650\u3002

  3. YAML \u7f16\u8f91\u5668\u4e2d\u8bf7\u586b\u5199 spec \u53ca\u5176\u4e2d\u7684\u5185\u5bb9\uff0c\u4ec5\u652f\u6301\u5bfc\u5165\u4e00\u4e2a group\u3002
  4. \u544a\u8b66\u89c4\u5219\u540d\u79f0 \u9700\u8981\u7b26\u5408\u89c4\u8303\uff1a\u540d\u79f0\u53ea\u80fd\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u4e0b\u5212\u7ebf\uff08_\uff09\u548c\u8fde\u5b57\u7b26\uff08-\uff09\uff0c\u5fc5\u987b\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002
  5. \u5fc5\u586b severity \u4e14\u7b26\u5408\u89c4\u8303\uff1acritical\u3001warning\u3001info\u3002
  6. \u5fc5\u586b\u8868\u8fbe\u5f0f expr\u3002

  7. \u5bfc\u5165 YAML \u6587\u4ef6\u540e\uff0c\u70b9\u51fb \u9884\u89c8\uff0c\u53ef\u4ee5\u5bf9\u5bfc\u5165\u7684 YAML \u683c\u5f0f\u8fdb\u884c\u9a8c\u8bc1\uff0c\u5e76\u5feb\u901f\u786e\u8ba4\u5bfc\u5165\u7684\u544a\u8b66\u89c4\u5219\u3002

"},{"location":"admin/insight/alert-center/alert-template.html","title":"\u544a\u8b66\u6a21\u677f","text":"

\u544a\u8b66\u6a21\u677f\u53ef\u652f\u6301\u5e73\u53f0\u7ba1\u7406\u5458\u521b\u5efa\u544a\u8b66\u6a21\u677f\u53ca\u89c4\u5219\uff0c\u4e1a\u52a1\u4fa7\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u544a\u8b66\u6a21\u677f\u521b\u5efa\u544a\u8b66\u7b56\u7565\u3002 \u8fd9\u4e2a\u529f\u80fd\u53ef\u4ee5\u51cf\u5c11\u4e1a\u52a1\u4eba\u5458\u5bf9\u544a\u8b66\u89c4\u5219\u7684\u7ba1\u7406\uff0c\u4e14\u53ef\u4ee5\u6839\u636e\u73af\u5883\u5b9e\u9645\u60c5\u51b5\u81ea\u884c\u4fee\u6539\u544a\u8b66\u9608\u503c\u3002

"},{"location":"admin/insight/alert-center/alert-template.html#_2","title":"\u521b\u5efa\u544a\u8b66\u6a21\u677f","text":"
  1. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u7b56\u7565\uff0c\u5355\u51fb\u9876\u90e8\u7684 \u544a\u8b66\u6a21\u677f \u3002

  2. \u70b9\u51fb \u521b\u5efa\u544a\u8b66\u6a21\u677f \uff0c\u8bbe\u7f6e\u544a\u8b66\u6a21\u677f\u7684\u540d\u79f0\u3001\u63cf\u8ff0\u7b49\u4fe1\u606f\u3002

    \u53c2\u6570 \u8bf4\u660e \u6a21\u677f\u540d\u79f0 \u540d\u79f0\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u8fde\u5b57\u7b26\uff08-\uff09\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002 \u63cf\u8ff0 \u63cf\u8ff0\u53ef\u5305\u542b\u4efb\u610f\u5b57\u7b26\uff0c\u6700\u957f 256 \u4e2a\u5b57\u7b26\u3002 \u8d44\u6e90\u7c7b\u578b \u7528\u4e8e\u6307\u5b9a\u544a\u8b66\u6a21\u677f\u7684\u5339\u914d\u7c7b\u578b\u3002 \u544a\u8b66\u89c4\u5219 \u652f\u6301\u9884\u5b9a\u4e49\u591a\u4e2a\u544a\u8b66\u89c4\u5219\uff0c\u53ef\u6dfb\u52a0\u6a21\u677f\u89c4\u5219\u3001PromQL \u89c4\u5219\u3002
  3. \u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u540e\u8fd4\u56de\u544a\u8b66\u6a21\u677f\u5217\u8868\uff0c\u70b9\u51fb\u6a21\u677f\u540d\u79f0\u540e\u53ef\u67e5\u770b\u6a21\u677f\u8be6\u60c5\u3002

"},{"location":"admin/insight/alert-center/alert-template.html#_3","title":"\u7f16\u8f91\u544a\u8b66\u6a21\u677f","text":"

\u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540e\u7684 \u2507 \uff0c\u70b9\u51fb \u7f16\u8f91\uff0c\u8fdb\u5165\u6291\u5236\u89c4\u5219\u7684\u7f16\u8f91\u9875\u3002

"},{"location":"admin/insight/alert-center/alert-template.html#_4","title":"\u5220\u9664\u544a\u8b66\u6a21\u677f","text":"

\u70b9\u51fb\u76ee\u6807\u6a21\u677f\u540e\u4fa7\u7684 \u2507 \uff0c\u70b9\u51fb \u5220\u9664\uff0c\u5728\u8f93\u5165\u6846\u4e2d\u8f93\u5165\u544a\u8b66\u6a21\u677f\u7684\u540d\u79f0\u5373\u53ef\u5220\u9664\u3002

"},{"location":"admin/insight/alert-center/inhibition.html","title":"\u544a\u8b66\u6291\u5236","text":"

\u544a\u8b66\u6291\u5236\u4e3b\u8981\u662f\u5bf9\u4e8e\u67d0\u4e9b\u4e0d\u9700\u8981\u7acb\u5373\u5173\u6ce8\u7684\u544a\u8b66\u8fdb\u884c\u4e34\u65f6\u9690\u85cf\u6216\u8005\u964d\u4f4e\u5176\u4f18\u5148\u7ea7\u7684\u4e00\u79cd\u673a\u5236\u3002\u8fd9\u4e2a\u529f\u80fd\u7684\u76ee\u7684\u662f\u4e3a\u4e86\u51cf\u5c11\u4e0d\u5fc5\u8981\u7684\u544a\u8b66\u4fe1\u606f\u5bf9\u8fd0\u7ef4\u4eba\u5458\u7684\u5e72\u6270\uff0c\u4f7f\u4ed6\u4eec\u80fd\u591f\u96c6\u4e2d\u7cbe\u529b\u5904\u7406\u66f4\u91cd\u8981\u7684\u95ee\u9898\u3002

\u544a\u8b66\u6291\u5236\u901a\u8fc7\u5b9a\u4e49\u4e00\u7ec4\u89c4\u5219\u6765\u8bc6\u522b\u548c\u5ffd\u7565\u67d0\u4e9b\u544a\u8b66\uff0c\u5f53\u5b83\u4eec\u5728\u7279\u5b9a\u6761\u4ef6\u4e0b\u53d1\u751f\u65f6\u3002\u4e3b\u8981\u6709\u4ee5\u4e0b\u51e0\u79cd\u60c5\u51b5\uff1a

  • \u7236\u5b50\u5173\u7cfb\u6291\u5236\uff1a\u5f53\u4e00\u4e2a\u7236\u544a\u8b66\uff08\u4f8b\u5982\u67d0\u4e2a\u8282\u70b9\u7684\u5d29\u6e83\uff09\u89e6\u53d1\u65f6\uff0c\u53ef\u4ee5\u6291\u5236\u6240\u6709\u7531\u6b64\u5f15\u8d77\u7684\u5b50\u544a\u8b66\uff08\u4f8b\u5982\u8be5\u8282\u70b9\u4e0a\u8fd0\u884c\u7684\u5bb9\u5668\u5d29\u6e83\uff09\u3002
  • \u76f8\u4f3c\u544a\u8b66\u6291\u5236\uff1a\u5f53\u591a\u4e2a\u544a\u8b66\u5177\u6709\u76f8\u540c\u7684\u7279\u5f81\uff08\u4f8b\u5982\u540c\u4e00\u5b9e\u4f8b\u4e0a\u7684\u76f8\u540c\u95ee\u9898\uff09\u65f6\uff0c\u53ef\u4ee5\u6291\u5236\u91cd\u590d\u7684\u544a\u8b66\u901a\u77e5\u3002
"},{"location":"admin/insight/alert-center/inhibition.html#_2","title":"\u521b\u5efa\u6291\u5236\u89c4\u5219","text":"
  1. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u964d\u566a\uff0c\u5355\u51fb\u9876\u90e8\u7684 \u544a\u8b66\u6291\u5236 \u3002

  2. \u70b9\u51fb \u65b0\u5efa\u6291\u5236\u89c4\u5219 \uff0c\u8bbe\u7f6e\u6291\u5236\u89c4\u5219\u7684\u540d\u79f0\u3001\u89c4\u5219\u7b49\u3002

    Note

    \u901a\u8fc7\u89c4\u5219\u6807\u7b7e\u548c\u544a\u8b66\u6807\u7b7e\u5b9a\u4e49\u4e00\u7ec4\u89c4\u5219\u6765\u8bc6\u522b\u548c\u5ffd\u7565\u67d0\u4e9b\u544a\u8b66\uff0c\u8fbe\u5230\u907f\u514d\u540c\u4e00\u95ee\u9898\u53ef\u80fd\u4f1a\u89e6\u53d1\u591a\u4e2a\u76f8\u4f3c\u6216\u76f8\u5173\u7684\u544a\u8b66\u7684\u95ee\u9898\u3002

    \u53c2\u6570\u65f6\u95f4 \u8bf4\u660e \u6291\u5236\u89c4\u5219\u540d\u79f0 \u6291\u5236\u89c4\u5219\u540d\u79f0\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u8fde\u5b57\u7b26\uff08-\uff09\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002 \u63cf\u8ff0 \u63cf\u8ff0\u53ef\u5305\u542b\u4efb\u610f\u5b57\u7b26\uff0c\u6700\u957f 256 \u4e2a\u5b57\u7b26\u3002 \u96c6\u7fa4 \u8be5\u6291\u5236\u89c4\u5219\u4f5c\u7528\u7684\u96c6\u7fa4\u3002 \u547d\u540d\u7a7a\u95f4 \u8be5\u6291\u5236\u89c4\u5219\u4f5c\u7528\u7684\u547d\u540d\u7a7a\u95f4\u3002 \u6839\u6e90\u544a\u8b66 \u901a\u8fc7\u586b\u5199\u7684\u6807\u7b7e\u6761\u4ef6\u5339\u914d\u544a\u8b66\uff0c\u4f1a\u5c06\u7b26\u5408\u6240\u6709\u6807\u7b7e\u6761\u4ef6\u7684\u544a\u8b66\u4e0e\u7b26\u5408\u6291\u5236\u6761\u4ef6\u7684\u8fdb\u884c\u5bf9\u6bd4\uff0c\u4e0d\u7b26\u5408\u6291\u5236\u6761\u4ef6\u7684\u544a\u8b66\u5c06\u7167\u5e38\u53d1\u9001\u6d88\u606f\u7ed9\u7528\u6237\u3002 \u53d6\u503c\u8303\u56f4\u8bf4\u660e\uff1a - \u544a\u8b66\u7ea7\u522b\uff1a\u6307\u6807\u6216\u4e8b\u4ef6\u544a\u8b66\u7684\u7ea7\u522b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3a\uff1a\u7d27\u6025\u3001\u91cd\u8981\u3001\u63d0\u793a\u3002 - \u8d44\u6e90\u7c7b\u578b\uff1a\u544a\u8b66\u5bf9\u8c61\u6240\u5bf9\u5e94\u7684\u8d44\u6e90\u7c7b\u578b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3a\uff1a\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u65e0\u72b6\u6001\u8d1f\u8f7d\u3001\u6709\u72b6\u5bb9\u8d1f\u8f7d\u3001\u5b88\u62a4\u8fdb\u7a0b\u3001\u5bb9\u5668\u7ec4\u3002 - \u6807\u7b7e\uff1a\u544a\u8b66\u6807\u8bc6\u5c5e\u6027\uff0c\u7531\u6807\u7b7e\u540d\u548c\u6807\u7b7e\u503c\u6784\u6210\uff0c\u652f\u6301\u7528\u6237\u81ea\u5b9a\u4e49\u3002 \u6291\u5236\u544a\u8b66 \u7528\u4e8e\u6307\u5b9a\u76ee\u6807\u8b66\u62a5\uff08\u5c06\u88ab\u6291\u5236\u7684\u8b66\u62a5\uff09\u7684\u5339\u914d\u6761\u4ef6\uff0c\u7b26\u5408\u6240\u6709\u6807\u7b7e\u6761\u4ef6\u7684\u544a\u8b66\u5c06\u4e0d\u4f1a\u518d\u53d1\u9001\u6d88\u606f\u7ed9\u7528\u6237\u3002 \u5339\u914d\u6807\u7b7e \u7528\u4e8e\u6307\u5b9a\u5e94\u8be5\u6bd4\u8f83\u7684\u6807\u7b7e\u5217\u8868\uff0c\u4ee5\u786e\u5b9a\u6e90\u8b66\u62a5\u548c\u76ee\u6807\u8b66\u62a5\u662f\u5426\u5339\u914d\u3002\u53ea\u6709\u5728\u00a0equal\u00a0\u4e2d\u6307\u5b9a\u7684\u6807\u7b7e\u5728\u6e90\u548c\u76ee\u6807\u8b66\u62a5\u4e2d\u7684\u503c\u5b8c\u5168\u76f8\u540c\u7684\u60c5\u51b5\u4e0b\uff0c\u624d\u4f1a\u89e6\u53d1\u6291\u5236\u3002equal\u00a0\u5b57\u6bb5\u662f\u53ef\u9009\u7684\u3002\u5982\u679c\u7701\u7565\u00a0equal\u00a0\u5b57\u6bb5\uff0c\u5219\u4f1a\u5c06\u6240\u6709\u6807\u7b7e\u7528\u4e8e\u5339\u914d
  3. \u70b9\u51fb**\u786e\u5b9a**\u5b8c\u6210\u521b\u5efa\u540e\u8fd4\u56de\u544a\u8b66\u6291\u5236\u5217\u8868\uff0c\u70b9\u51fb\u544a\u8b66\u6291\u5236\u540d\u79f0\u540e\u53ef\u67e5\u770b\u6291\u5236\u89c4\u5219\u8be6\u60c5\u3002

"},{"location":"admin/insight/alert-center/inhibition.html#_3","title":"\u67e5\u770b\u89c4\u5219\u6807\u7b7e","text":"
  1. \u70b9\u51fb\u53f3\u4fa7\u5bfc\u822a\u680f\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u7b56\u7565 \uff0c\u70b9\u51fb\u89c4\u5219\u6240\u5728\u7684\u7b56\u7565\u8be6\u60c5\u3002
  2. \u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540d\u79f0\uff0c\u67e5\u770b\u89c4\u5219\u8be6\u60c5\uff0c\u67e5\u770b\u5bf9\u5e94\u544a\u8b66\u89c4\u5219\u7684\u6807\u7b7e\u3002

    Note

    \u5728\u6dfb\u52a0\u89c4\u5219\u65f6\u53ef\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

"},{"location":"admin/insight/alert-center/inhibition.html#_4","title":"\u67e5\u770b\u544a\u8b66\u6807\u7b7e","text":"
  1. \u70b9\u51fb\u53f3\u4fa7\u5bfc\u822a\u680f\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u5217\u8868 \uff0c\u70b9\u51fb\u544a\u8b66\u6240\u5728\u884c\u67e5\u770b\u544a\u8b66\u8be6\u60c5\u3002

    Note

    \u544a\u8b66\u6807\u7b7e\u7528\u4e8e\u63cf\u8ff0\u544a\u8b66\u7684\u8be6\u7ec6\u4fe1\u606f\u548c\u5c5e\u6027\uff0c\u53ef\u4ee5\u7528\u6765\u521b\u5efa\u6291\u5236\u89c4\u5219\u3002

"},{"location":"admin/insight/alert-center/inhibition.html#_5","title":"\u7f16\u8f91\u6291\u5236\u89c4\u5219","text":"
  1. \u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540e\u4fa7\u7684 \u2507 \uff0c\u70b9\u51fb \u7f16\u8f91\uff0c\u8fdb\u5165\u6291\u5236\u89c4\u5219\u7684\u7f16\u8f91\u9875\u3002

"},{"location":"admin/insight/alert-center/inhibition.html#_6","title":"\u5220\u9664\u6291\u5236\u89c4\u5219","text":"

\u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540e\u4fa7\u7684 \u2507 \uff0c\u70b9\u51fb \u5220\u9664\uff0c\u5728\u8f93\u5165\u6846\u4e2d\u8f93\u5165\u6291\u5236\u89c4\u5219\u7684\u540d\u79f0\u5373\u53ef\u5220\u9664\u3002

"},{"location":"admin/insight/alert-center/message.html","title":"\u901a\u77e5\u914d\u7f6e","text":"

\u5728 \u901a\u77e5\u914d\u7f6e \u9875\u9762\uff0c\u53ef\u4ee5\u914d\u7f6e\u901a\u8fc7\u90ae\u4ef6\u3001\u4f01\u4e1a\u5fae\u4fe1\u3001\u9489\u9489\u3001Webhook \u548c\u77ed\u4fe1\u7b49\u65b9\u5f0f\u5411\u7528\u6237\u53d1\u9001\u6d88\u606f\u3002

"},{"location":"admin/insight/alert-center/message.html#_2","title":"\u90ae\u4ef6\u7ec4","text":"
  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u540e\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e\uff0c\u9ed8\u8ba4\u4f4d\u4e8e\u90ae\u4ef6\u901a\u77e5\u5bf9\u8c61\u3002

  2. \u70b9\u51fb \u6dfb\u52a0\u90ae\u7bb1\u7ec4\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u90ae\u4ef6\u5730\u5740\u3002

  3. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u90ae\u7bb1\u7ec4\u3002

"},{"location":"admin/insight/alert-center/message.html#_3","title":"\u4f01\u4e1a\u5fae\u4fe1","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u4f01\u4e1a\u5fae\u4fe1\u3002

    \u6709\u5173\u4f01\u4e1a\u5fae\u4fe1\u7fa4\u673a\u5668\u4eba\u7684 URL\uff0c\u8bf7\u53c2\u9605\u4f01\u4e1a\u5fae\u4fe1\u5b98\u65b9\u6587\u6863\uff1a\u5982\u4f55\u4f7f\u7528\u7fa4\u673a\u5668\u4eba\u3002

  2. \u70b9\u51fb \u6dfb\u52a0\u7fa4\u673a\u5668\u4eba\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u7fa4\u673a\u5668\u4eba\u3002

  3. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u7fa4\u673a\u5668\u4eba\u3002

"},{"location":"admin/insight/alert-center/message.html#_4","title":"\u9489\u9489","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u9489\u9489\uff0c\u70b9\u51fb \u6dfb\u52a0\u7fa4\u673a\u5668\u4eba\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u7fa4\u673a\u5668\u4eba\u3002

    \u6709\u5173\u9489\u9489\u7fa4\u673a\u5668\u4eba\u7684 URL\uff0c\u8bf7\u53c2\u9605\u9489\u9489\u5b98\u65b9\u6587\u6863\uff1a\u81ea\u5b9a\u4e49\u673a\u5668\u4eba\u63a5\u5165\u3002

    Note

    \u52a0\u7b7e\u7684\u65b9\u5f0f\u662f\u9489\u9489\u673a\u5668\u4eba\u4e0e\u5f00\u53d1\u8005\u53cc\u5411\u8fdb\u884c\u5b89\u5168\u8ba4\u8bc1\uff0c\u82e5\u5728\u521b\u5efa\u9489\u9489\u673a\u5668\u4eba\u65f6\u5f00\u542f\u4e86\u52a0\u7b7e\uff0c\u5219\u9700\u8981\u5728\u6b64\u5904\u8f93\u5165\u9489\u9489\u751f\u6210\u7684\u5bc6\u94a5\u3002 \u53ef\u53c2\u8003\u9489\u9489\u81ea\u5b9a\u4e49\u673a\u5668\u4eba\u5b89\u5168\u8bbe\u7f6e\u3002

  2. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u7fa4\u673a\u5668\u4eba\u3002

"},{"location":"admin/insight/alert-center/message.html#_5","title":"\u98de\u4e66","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u98de\u4e66\uff0c\u70b9\u51fb \u6dfb\u52a0\u7fa4\u673a\u5668\u4eba\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u7fa4\u673a\u5668\u4eba\u3002

    Note

    \u5f53\u98de\u4e66\u7684\u7fa4\u673a\u5668\u4eba\u5f00\u542f\u7b7e\u540d\u6821\u9a8c\u65f6\uff0c\u6dfb\u52a0\u98de\u4e66\u901a\u77e5\u65f6\u9700\u8981\u586b\u5199\u5bf9\u5e94\u7684\u7b7e\u540d\u5bc6\u94a5\u3002\u8bf7\u67e5\u9605 \u81ea\u5b9a\u4e49\u673a\u5668\u4eba\u4f7f\u7528\u6307\u5357\u3002

  2. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u7fa4\u673a\u5668\u4eba\u3002

"},{"location":"admin/insight/alert-center/message.html#webhook","title":"Webhook","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> Webhook\u3002

    \u6709\u5173 Webhook URL \u53ca\u66f4\u591a\u914d\u7f6e\u65b9\u5f0f\uff0c\u8bf7\u53c2\u9605 webhook \u6587\u6863\u3002

  2. \u70b9\u51fb \u65b0\u5efa Webhook\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a Webhook\u3002

    HTTP Headers\uff1a\u975e\u5fc5\u586b\uff0c\u8bbe\u7f6e\u8bf7\u6c42\u5934\u3002\u53ef\u4ee5\u6dfb\u52a0\u591a\u4e2a Headers\u3002

    Note

    \u6709\u5173 Webhook URL \u53ca\u66f4\u591a\u914d\u7f6e\u65b9\u5f0f\uff0c\u8bf7\u53c2\u9605 webhook \u6587\u6863\u3002

  3. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664 Webhook\u3002

"},{"location":"admin/insight/alert-center/message.html#_6","title":"\u7ad9\u5185\u4fe1","text":"

Note

\u544a\u8b66\u6d88\u606f\u53d1\u9001\u81f3\u7528\u6237\u4e2a\u4eba\u7684\u7ad9\u5185\u4fe1\uff0c\u70b9\u51fb\u9876\u90e8\u7684 \ud83d\udd14 \u7b26\u53f7\u53ef\u4ee5\u67e5\u770b\u901a\u77e5\u6d88\u606f\u3002

  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u7ad9\u5185\u4fe1\uff0c\u70b9\u51fb\u521b\u5efa\u3002

    • \u7ad9\u5185\u4fe1\u901a\u77e5\u5141\u8bb8\u6dfb\u52a0\u591a\u4e2a\u7528\u6237\u3002

  2. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de \u7ad9\u5185\u4fe1\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\u3002

"},{"location":"admin/insight/alert-center/message.html#_7","title":"\u77ed\u4fe1\u7ec4","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u77ed\u4fe1\uff0c\u70b9\u51fb \u6dfb\u52a0\u77ed\u4fe1\u7ec4\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u77ed\u4fe1\u7ec4\u3002

  2. \u5728\u5f39\u7a97\u4e2d\u8f93\u5165\u540d\u79f0\u3001\u63a5\u6536\u77ed\u4fe1\u7684\u5bf9\u8c61\u3001\u624b\u673a\u53f7\u4ee5\u53ca\u901a\u77e5\u670d\u52a1\u5668\u3002

    \u901a\u77e5\u670d\u52a1\u5668\u9700\u8981\u9884\u5148\u5728 \u901a\u77e5\u914d\u7f6e -> \u901a\u77e5\u670d\u52a1\u5668 \u4e2d\u6dfb\u52a0\u521b\u5efa\u3002\u76ee\u524d\u652f\u6301\u963f\u91cc\u4e91\u3001\u817e\u8baf\u4e91\u4e24\u79cd\u4e91\u670d\u52a1\u5668\uff0c\u5177\u4f53\u914d\u7f6e\u7684\u53c2\u6570\u8bf7\u53c2\u9605\u81ea\u5df1\u7684\u4e91\u670d\u52a1\u5668\u4fe1\u606f\u3002

  3. \u77ed\u4fe1\u7ec4\u6dfb\u52a0\u6210\u529f\u540e\uff0c\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u77ed\u4fe1\u7ec4\u3002

"},{"location":"admin/insight/alert-center/msg-template.html","title":"\u6d88\u606f\u6a21\u677f","text":"

\u53ef\u89c2\u6d4b\u6027\u63d0\u4f9b\u81ea\u5b9a\u4e49\u6d88\u606f\u6a21\u677f\u5185\u5bb9\u7684\u80fd\u529b\uff0c\u652f\u6301\u90ae\u4ef6\u3001\u4f01\u4e1a\u5fae\u4fe1\u3001\u9489\u9489\u3001Webhook\u3001\u98de\u4e66\u3001\u7ad9\u5185\u4fe1\u7b49\u4e0d\u540c\u7684\u901a\u77e5\u5bf9\u8c61\u5b9a\u4e49\u4e0d\u540c\u7684\u6d88\u606f\u901a\u77e5\u5185\u5bb9\u3002

"},{"location":"admin/insight/alert-center/msg-template.html#_2","title":"\u521b\u5efa\u6d88\u606f\u6a21\u677f","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u544a\u8b66\u4e2d\u5fc3 -> \u6d88\u606f\u6a21\u677f\u3002

    Insight \u9ed8\u8ba4\u5185\u7f6e\u4e2d\u82f1\u6587\u4e24\u4e2a\u6a21\u677f\uff0c\u4ee5\u4fbf\u7528\u6237\u4f7f\u7528\u3002

  2. \u70b9\u51fb \u65b0\u5efa\u6d88\u606f\u6a21\u677f \u6309\u94ae\uff0c\u586b\u5199\u6a21\u677f\u5185\u5bb9\u3002

Info

\u53ef\u89c2\u6d4b\u6027\u9884\u7f6e\u4e86\u6d88\u606f\u6a21\u677f\u3002\u82e5\u9700\u8981\u5b9a\u4e49\u6a21\u677f\u7684\u5185\u5bb9\uff0c\u8bf7\u53c2\u8003\u914d\u7f6e\u901a\u77e5\u6a21\u677f\u3002

"},{"location":"admin/insight/alert-center/msg-template.html#_3","title":"\u6d88\u606f\u6a21\u677f\u8be6\u60c5","text":"

\u70b9\u51fb\u67d0\u4e00\u6d88\u606f\u6a21\u677f\u7684\u540d\u79f0\uff0c\u53f3\u4fa7\u6ed1\u5757\u53ef\u67e5\u770b\u6d88\u606f\u6a21\u677f\u7684\u8be6\u60c5\u3002

\u53c2\u6570 \u53d8\u91cf \u63cf\u8ff0 \u89c4\u5219\u540d\u79f0 {{ .Labels.alertname }} \u89e6\u53d1\u544a\u8b66\u7684\u89c4\u5219\u540d\u79f0 \u7b56\u7565\u540d\u79f0 {{ .Labels.alertgroup }} \u89e6\u53d1\u544a\u8b66\u89c4\u5219\u6240\u5c5e\u7684\u544a\u8b66\u7b56\u7565\u540d\u79f0 \u544a\u8b66\u7ea7\u522b {{ .Labels.severity }} \u89e6\u53d1\u544a\u8b66\u7684\u7ea7\u522b \u96c6\u7fa4 {{ .Labels.cluster }} \u89e6\u53d1\u544a\u8b66\u7684\u8d44\u6e90\u6240\u5728\u7684\u96c6\u7fa4 \u547d\u540d\u7a7a\u95f4 {{ .Labels.namespace }} \u89e6\u53d1\u544a\u8b66\u7684\u8d44\u6e90\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4 \u8282\u70b9 {{ .Labels.node }} \u89e6\u53d1\u544a\u8b66\u7684\u8d44\u6e90\u6240\u5728\u7684\u8282\u70b9 \u8d44\u6e90\u7c7b\u578b {{ .Labels.target_type }} \u544a\u8b66\u5bf9\u8c61\u7684\u8d44\u6e90\u7c7b\u578b \u8d44\u6e90\u540d\u79f0 {{ .Labels.target }} \u89e6\u53d1\u544a\u8b66\u7684\u5bf9\u8c61\u540d\u79f0 \u89e6\u53d1\u503c {{ .Annotations.value }} \u89e6\u53d1\u544a\u8b66\u901a\u77e5\u65f6\u7684\u6307\u6807\u503c \u53d1\u751f\u65f6\u95f4 {{ .StartsAt }} \u544a\u8b66\u5f00\u59cb\u53d1\u751f\u7684\u65f6\u95f4 \u7ed3\u675f\u65f6\u95f4 {{ .EndsAT }} \u544a\u8b66\u7ed3\u675f\u7684\u65f6\u95f4 \u63cf\u8ff0 {{ .Annotations.description }} \u544a\u8b66\u7684\u8be6\u7ec6\u63cf\u8ff0 \u6807\u7b7e {{ for .labels}} {{end}} \u544a\u8b66\u7684\u6240\u6709\u6807\u7b7e\uff0c\u4f7f\u7528 for \u51fd\u6570\u904d\u5386 labels \u5217\u8868\uff0c\u83b7\u53d6\u544a\u8b66\u7684\u6240\u6709\u6807\u7b7e\u5185\u5bb9\u3002"},{"location":"admin/insight/alert-center/msg-template.html#_4","title":"\u7f16\u8f91\u6216\u5220\u9664\u6d88\u606f\u6a21\u677f","text":"

\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507\uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u7f16\u8f91 \u6216 \u5220\u9664\uff0c\u53ef\u4ee5\u4fee\u6539\u6216\u5220\u9664\u6d88\u606f\u6a21\u677f\u3002

Warning

\u8bf7\u6ce8\u610f\uff0c\u5220\u9664\u6a21\u677f\u540e\u65e0\u6cd5\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

"},{"location":"admin/insight/alert-center/silent.html","title":"\u544a\u8b66\u9759\u9ed8","text":"

\u544a\u8b66\u9759\u9ed8\u662f\u6307\u5728\u7279\u5b9a\u7684\u65f6\u95f4\u8303\u56f4\u5185\uff0c\u6839\u636e\u5b9a\u4e49\u597d\u7684\u89c4\u5219\u5bf9\u7b26\u5408\u6761\u4ef6\u7684\u544a\u8b66\u4e0d\u518d\u53d1\u9001\u544a\u8b66\u901a\u77e5\u3002\u8be5\u529f\u80fd\u53ef\u4ee5\u5e2e\u52a9\u8fd0\u7ef4\u4eba\u5458\u907f\u514d\u5728\u67d0\u4e9b\u64cd\u4f5c\u6216\u4e8b\u4ef6\u671f\u95f4\u63a5\u6536\u5230\u8fc7\u591a\u7684\u566a\u58f0\u544a\u8b66\uff0c\u540c\u65f6\u4fbf\u4e8e\u66f4\u52a0\u7cbe\u786e\u5730\u5904\u7406\u771f\u6b63\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u3002

\u5728\u544a\u8b66\u9759\u9ed8\u9875\u9762\u4e0a\uff0c\u7528\u6237\u53ef\u4ee5\u770b\u5230\u4e24\u4e2a\u9875\u7b7e\uff1a\u6d3b\u8dc3\u89c4\u5219\u548c\u8fc7\u671f\u89c4\u5219\u3002 \u5176\u4e2d\uff0c\u6d3b\u8dc3\u89c4\u5219\u8868\u793a\u76ee\u524d\u6b63\u5728\u751f\u6548\u7684\u89c4\u5219\uff0c\u800c\u8fc7\u671f\u89c4\u5219\u5219\u662f\u4ee5\u524d\u5b9a\u4e49\u8fc7\u4f46\u5df2\u7ecf\u8fc7\u671f\uff08\u6216\u8005\u7528\u6237\u4e3b\u52a8\u5220\u9664\uff09\u7684\u89c4\u5219\u3002

"},{"location":"admin/insight/alert-center/silent.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u544a\u8b66\u4e2d\u5fc3 -> \u544a\u8b66\u9759\u9ed8 ,\u70b9\u51fb \u65b0\u5efa\u9759\u9ed8\u89c4\u5219 \u6309\u94ae\u3002

  2. \u586b\u5199\u9759\u9ed8\u89c4\u5219\u7684\u5404\u9879\u53c2\u6570\uff0c\u5982\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u6807\u7b7e\u3001\u65f6\u95f4\u7b49\uff0c\u4ee5\u5b9a\u4e49\u8fd9\u6761\u89c4\u5219\u7684\u4f5c\u7528\u8303\u56f4\u548c\u751f\u6548\u65f6\u95f4\u3002

  3. \u8fd4\u56de\u89c4\u5219\u5217\u8868\uff0c\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u9759\u9ed8\u89c4\u5219\u3002

\u901a\u8fc7\u544a\u8b66\u9759\u9ed8\u529f\u80fd\uff0c\u60a8\u53ef\u4ee5\u7075\u6d3b\u5730\u63a7\u5236\u54ea\u4e9b\u544a\u8b66\u9700\u8981\u88ab\u5ffd\u7565\uff0c\u5728\u4ec0\u4e48\u65f6\u95f4\u6bb5\u5185\u751f\u6548\uff0c\u4ece\u800c\u63d0\u9ad8\u8fd0\u7ef4\u6548\u7387\uff0c\u51cf\u5c11\u8bef\u62a5\u7684\u53ef\u80fd\u6027\u3002

"},{"location":"admin/insight/alert-center/sms-provider.html","title":"\u914d\u7f6e\u901a\u77e5\u670d\u52a1\u5668","text":"

\u53ef\u89c2\u6d4b\u6027 Insight \u652f\u6301\u77ed\u4fe1\u901a\u77e5\uff0c\u76ee\u524d\u901a\u8fc7\u96c6\u6210\u963f\u91cc\u4e91\u3001\u817e\u8baf\u4e91\u7684\u77ed\u4fe1\u670d\u52a1\u53d1\u9001\u544a\u8b66\u6d88\u606f\u3002\u672c\u6587\u4ecb\u7ecd\u4e86\u5982\u4f55\u5728 insight \u4e2d\u914d\u7f6e\u77ed\u4fe1\u901a\u77e5\u7684\u670d\u52a1\u5668\u3002\u77ed\u4fe1\u7b7e\u540d\u4e2d\u652f\u6301\u7684\u53d8\u91cf\u4e3a\u6d88\u606f\u6a21\u677f\u4e2d\u7684\u9ed8\u8ba4\u53d8\u91cf\uff0c\u540c\u65f6\u7531\u4e8e\u77ed\u4fe1\u5b57\u6570\u6709\u9650\uff0c\u5efa\u8bae\u9009\u62e9\u8f83\u4e3a\u660e\u786e\u7684\u53d8\u91cf\u3002

\u5982\u4f55\u914d\u7f6e\u77ed\u4fe1\u63a5\u6536\u4eba\u53ef\u53c2\u8003\u6587\u6863\uff1a\u914d\u7f6e\u77ed\u4fe1\u901a\u77e5\u7ec4\u3002

"},{"location":"admin/insight/alert-center/sms-provider.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u8fdb\u5165 \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u901a\u77e5\u670d\u52a1\u5668 \u3002

  2. \u70b9\u51fb \u6dfb\u52a0\u901a\u77e5\u670d\u52a1\u5668 \u3002

    1. \u914d\u7f6e\u963f\u91cc\u4e91\u670d\u52a1\u5668\u3002

      \u7533\u8bf7\u963f\u91cc\u4e91\u77ed\u4fe1\u670d\u52a1\uff0c\u8bf7\u53c2\u8003\u963f\u91cc\u4e91\u77ed\u4fe1\u670d\u52a1\u3002

      \u5b57\u6bb5\u8bf4\u660e\uff1a

      • AccessKey ID \uff1a\u963f\u91cc\u4e91\u7528\u4e8e\u6807\u8bc6\u7528\u6237\u7684\u53c2\u6570\u3002
      • AccessKey Secret \uff1a\u963f\u91cc\u4e91\u7528\u4e8e\u9a8c\u8bc1\u7528\u6237\u7684\u5bc6\u94a5\u3002AccessKey Secret \u5fc5\u987b\u4fdd\u5bc6\u3002
      • \u77ed\u4fe1\u7b7e\u540d \uff1a\u77ed\u4fe1\u670d\u52a1\u652f\u6301\u6839\u636e\u7528\u6237\u9700\u6c42\u521b\u5efa\u7b26\u5408\u8981\u6c42\u7684\u7b7e\u540d\u3002\u53d1\u9001\u77ed\u4fe1\u65f6\uff0c\u77ed\u4fe1\u5e73\u53f0\u4f1a\u5c06\u5df2\u5ba1\u6838\u901a\u8fc7\u7684\u77ed\u4fe1\u7b7e\u540d\u6dfb\u52a0\u5230\u77ed\u4fe1\u5185\u5bb9\u4e2d\uff0c\u518d\u53d1\u9001\u7ed9\u77ed\u4fe1\u63a5\u6536\u65b9\u3002
      • \u6a21\u677f CODE \uff1a\u77ed\u4fe1\u6a21\u677f\u662f\u53d1\u9001\u77ed\u4fe1\u7684\u5177\u4f53\u5185\u5bb9\u3002
      • \u53c2\u6570\u6a21\u677f \uff1a\u77ed\u4fe1\u6b63\u6587\u6a21\u677f\u53ef\u4ee5\u5305\u542b\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u901a\u8fc7\u53d8\u91cf\u5b9e\u73b0\u81ea\u5b9a\u4e49\u77ed\u4fe1\u5185\u5bb9\u3002

      \u8bf7\u53c2\u8003\u963f\u91cc\u4e91\u53d8\u91cf\u89c4\u8303\u3002

      Note

      \u4e3e\u4f8b\uff1a\u5728\u963f\u91cc\u4e91\u5b9a\u4e49\u7684\u6a21\u677f\u5185\u5bb9\u4e3a\uff1a\\({severity}\uff1a\\) \u88ab\u89e6\u53d1\u3002\u53c2\u6570\u6a21\u677f\u4e2d\u7684\u914d\u7f6e\u53c2\u8003\u4e0a\u56fe\u3002} \u5728 ${startat

    2. \u914d\u7f6e\u817e\u8baf\u4e91\u670d\u52a1\u5668\u3002

      \u7533\u8bf7\u817e\u8baf\u4e91\u77ed\u4fe1\u670d\u52a1\uff0c\u8bf7\u53c2\u8003\u817e\u8baf\u4e91\u77ed\u4fe1\u3002

      \u5b57\u6bb5\u8bf4\u660e\uff1a

      • Secret ID \uff1a\u817e\u8baf\u4e91\u7528\u4e8e\u6807\u8bc6 API \u8c03\u7528\u8005\u8eab\u4efd\u53c2\u6570\u3002
      • SecretKey \uff1a\u817e\u8baf\u4e91\u7528\u4e8e\u9a8c\u8bc1 API \u8c03\u7528\u8005\u7684\u8eab\u4efd\u7684\u53c2\u6570\u3002
      • \u77ed\u4fe1\u6a21\u677f ID \uff1a\u77ed\u4fe1\u6a21\u677f ID\uff0c\u7531\u817e\u8baf\u4e91\u7cfb\u7edf\u81ea\u52a8\u751f\u6210\u3002
      • \u7b7e\u540d\u5185\u5bb9 \uff1a\u77ed\u4fe1\u7b7e\u540d\u5185\u5bb9\uff0c\u5373\u5728\u817e\u8baf\u4e91\u77ed\u4fe1\u7b7e\u540d\u4e2d\u5b9a\u4e49\u7684\u5b9e\u9645\u7f51\u7ad9\u540d\u7684\u5168\u79f0\u6216\u7b80\u79f0\u3002
      • SdkAppId \uff1a\u77ed\u4fe1 SdkAppId\uff0c\u5728\u817e\u8baf\u4e91\u77ed\u4fe1\u63a7\u5236\u53f0\u6dfb\u52a0\u5e94\u7528\u540e\u751f\u6210\u7684\u5b9e\u9645 SdkAppId\u3002
      • \u53c2\u6570\u6a21\u677f \uff1a\u77ed\u4fe1\u6b63\u6587\u6a21\u677f\u53ef\u4ee5\u5305\u542b\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u901a\u8fc7\u53d8\u91cf\u5b9e\u73b0\u81ea\u5b9a\u4e49\u77ed\u4fe1\u5185\u5bb9\u3002\u8bf7\u53c2\u8003\uff1a\u817e\u8baf\u4e91\u53d8\u91cf\u89c4\u8303\u3002

      Note

      \u4e3e\u4f8b\uff1a\u5728\u817e\u8baf\u4e91\u5b9a\u4e49\u7684\u6a21\u677f\u5185\u5bb9\u4e3a\uff1a{1}\uff1a{2} \u5728 {3} \u88ab\u89e6\u53d1\u3002\u53c2\u6570\u6a21\u677f\u4e2d\u7684\u914d\u7f6e\u53c2\u8003\u4e0a\u56fe\u3002

"},{"location":"admin/insight/best-practice/debug-log.html","title":"\u65e5\u5fd7\u91c7\u96c6\u6392\u969c\u6307\u5357","text":"

\u5728\u96c6\u7fa4\u4e2d\u5b89\u88c5 insight-agent \u540e\uff0c insight-agent \u4e2d\u7684 Fluent Bit \u4f1a\u9ed8\u8ba4\u91c7\u96c6\u96c6\u7fa4\u4e2d\u7684\u65e5\u5fd7\uff0c\u5305\u62ec Kubernetes \u4e8b\u4ef6\u65e5\u5fd7\u3001\u8282\u70b9\u65e5\u5fd7\u3001\u5bb9\u5668\u65e5\u5fd7\u7b49\u3002 Fluent Bit \u5df2\u914d\u7f6e\u597d\u5404\u79cd\u65e5\u5fd7\u91c7\u96c6\u63d2\u4ef6\u3001\u76f8\u5173\u7684\u8fc7\u6ee4\u5668\u63d2\u4ef6\u53ca\u65e5\u5fd7\u8f93\u51fa\u63d2\u4ef6\u3002 \u8fd9\u4e9b\u63d2\u4ef6\u7684\u5de5\u4f5c\u72b6\u6001\u51b3\u5b9a\u4e86\u65e5\u5fd7\u91c7\u96c6\u662f\u5426\u6b63\u5e38\u3002 \u4e0b\u9762\u662f\u4e00\u4e2a\u9488\u5bf9 Fluent Bit \u7684\u4eea\u8868\u76d8\uff0c\u5b83\u7528\u6765\u76d1\u63a7\u5404\u4e2a\u96c6\u7fa4\u4e2d Fluent Bit \u7684\u5de5\u4f5c\u60c5\u51b5\u548c\u63d2\u4ef6\u7684\u91c7\u96c6\u3001\u5904\u7406\u3001\u5bfc\u51fa\u65e5\u5fd7\u7684\u60c5\u51b5\u3002

  1. \u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\uff0c\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u4eea\u8868\u76d8 \u3002

  2. \u70b9\u51fb\u4eea\u8868\u76d8\u6807\u9898 \u6982\u89c8 \u3002

  3. \u5207\u6362\u5230 insight-system -> Fluent Bit \u4eea\u8868\u76d8\u3002

  4. Fluent Bit \u4eea\u8868\u76d8\u4e0a\u65b9\u6709\u51e0\u4e2a\u9009\u9879\u6846\uff0c\u53ef\u4ee5\u9009\u62e9\u65e5\u5fd7\u91c7\u96c6\u63d2\u4ef6\u3001\u65e5\u5fd7\u8fc7\u6ee4\u63d2\u4ef6\u3001\u65e5\u5fd7\u8f93\u51fa\u63d2\u4ef6\u53ca\u6240\u5728\u96c6\u7fa4\u540d\u3002

"},{"location":"admin/insight/best-practice/debug-log.html#_2","title":"\u63d2\u4ef6\u8bf4\u660e","text":"

\u6b64\u5904\u8bf4\u660e Fluent Bit \u7684\u51e0\u4e2a\u63d2\u4ef6\u3002

\u65e5\u5fd7\u91c7\u96c6\u63d2\u4ef6

input plugin \u63d2\u4ef6\u4ecb\u7ecd \u91c7\u96c6\u76ee\u5f55 tail.kube \u91c7\u96c6\u5bb9\u5668\u65e5\u5fd7 /var/log/containers/*.log tail.kubeevent \u91c7\u96c6 Kubernetes \u4e8b\u4ef6\u65e5\u5fd7 /var/log/containers/-kubernetes-event-exporter.log tail.syslog.dmesg \u91c7\u96c6\u4e3b\u673a dmesg \u65e5\u5fd7 /var/log/dmesg tail.syslog.messages \u91c7\u96c6\u4e3b\u673a\u5e38\u7528\u65e5\u5fd7 /var/log/secure, /var/log/messages, /var/log/syslog,/var/log/auth.log syslog.syslog.RSyslog \u91c7\u96c6 RSyslog \u65e5\u5fd7 systemd.syslog.systemd \u91c7\u96c6 Journald daemon \u65e5\u5fd7 tail.audit_log.k8s \u91c7\u96c6 Kubernetes \u5ba1\u8ba1\u65e5\u5fd7 /var/log//audit/.log tail.audit_log.ghippo \u91c7\u96c6\u5168\u5c40\u7ba1\u7406\u5ba1\u8ba1\u65e5\u5fd7 /var/log/containers/_ghippo-system_audit-log.log tail.skoala-gw \u91c7\u96c6\u5fae\u670d\u52a1\u7f51\u5173\u65e5\u5fd7 /var/log/containers/_skoala-gw.log

\u65e5\u5fd7\u8fc7\u6ee4\u63d2\u4ef6

filter plugin \u63d2\u4ef6\u4ecb\u7ecd Lua.audit_log.k8s \u4f7f\u7528 lua \u8fc7\u6ee4\u7b26\u5408\u6761\u4ef6\u7684 Kubernetes \u5ba1\u8ba1\u65e5\u5fd7

Note

\u8fc7\u6ee4\u5668\u63d2\u4ef6\u4e0d\u6b62 Lua.audit_log.k8s\uff0c\u8fd9\u91cc\u53ea\u4ecb\u7ecd\u4f1a\u4e22\u5f03\u65e5\u5fd7\u7684\u8fc7\u6ee4\u5668\u3002

\u65e5\u5fd7\u8f93\u51fa\u63d2\u4ef6

output plugin \u63d2\u4ef6\u4ecb\u7ecd es.kube.kubeevent.syslog \u628a Kubernetes \u5ba1\u8ba1\u65e5\u5fd7\u3001\u4e8b\u4ef6\u65e5\u5fd7\uff0csyslog \u65e5\u5fd7\u5199\u5165 ElasticSearch \u96c6\u7fa4 forward.audit_log \u628a Kubernetes \u5ba1\u8ba1\u65e5\u5fd7\u548c\u5168\u5c40\u7ba1\u7406\u7684\u5ba1\u8ba1\u65e5\u5fd7\u53d1\u9001\u5230 \u5168\u5c40\u7ba1\u7406 es.skoala \u628a\u5fae\u670d\u52a1\u7f51\u5173\u7684\u8bf7\u6c42\u65e5\u5fd7\u548c\u5b9e\u4f8b\u65e5\u5fd7\u5199\u5165\u5230 ElasticSearch \u96c6\u7fa4"},{"location":"admin/insight/best-practice/debug-trace.html","title":"\u94fe\u8def\u91c7\u96c6\u6392\u969c\u6307\u5357","text":"

\u5728\u5c1d\u8bd5\u6392\u67e5\u94fe\u8def\u6570\u636e\u91c7\u96c6\u7684\u95ee\u9898\u524d\uff0c\u9700\u5148\u7406\u89e3\u94fe\u8def\u6570\u636e\u7684\u4f20\u8f93\u8def\u5f84\uff0c\u4e0b\u9762\u662f\u94fe\u8def\u6570\u636e\u4f20\u8f93\u793a\u610f\u56fe\uff1a

graph TB\n\nsdk[Language proble / SDK] --> workload[Workload cluster otel collector]\n--> otel[Global cluster otel collector]\n--> jaeger[Global cluster jaeger collector]\n--> es[Elasticsearch cluster]\n\nclassDef plain fill:#ddd,stroke:#fff,stroke-width:1px,color:#000;\nclassDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;\nclassDef cluster fill:#fff,stroke:#bbb,stroke-width:1px,color:#326ce5;\n\nclass sdk,workload,otel,jaeger,es cluster

\u5982\u4e0a\u56fe\u6240\u793a\uff0c\u5728\u4efb\u4e00\u6b65\u9aa4\u4f20\u8f93\u5931\u8d25\u90fd\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u67e5\u8be2\u51fa\u94fe\u8def\u6570\u636e\u3002\u5982\u679c\u60a8\u5728\u5b8c\u6210\u5e94\u7528\u94fe\u8def\u589e\u5f3a\u540e\u53d1\u73b0\u6ca1\u6709\u94fe\u8def\u6570\u636e\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u6b65\u9aa4\uff1a

  1. \u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\uff0c\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u4eea\u8868\u76d8 \u3002

  2. \u70b9\u51fb\u4eea\u8868\u76d8\u6807\u9898 \u6982\u89c8 \u3002

  3. \u5207\u6362\u5230 insight-system -> insight tracing debug \u4eea\u8868\u76d8\u3002

  4. \u53ef\u4ee5\u770b\u5230\u8be5\u4eea\u8868\u76d8\u7531\u4e09\u4e2a\u533a\u5757\u7ec4\u6210\uff0c\u5206\u522b\u8d1f\u8d23\u76d1\u63a7\u4e0d\u540c\u96c6\u7fa4\u3001\u4e0d\u540c\u7ec4\u4ef6\u4f20\u8f93\u94fe\u8def\u7684\u6570\u636e\u60c5\u51b5\u3002\u901a\u8fc7\u751f\u6210\u7684\u65f6\u5e8f\u56fe\u8868\uff0c\u68c0\u67e5\u94fe\u8def\u6570\u636e\u4f20\u8f93\u662f\u5426\u5b58\u5728\u95ee\u9898\u3002

    • workload opentelemetry collector
    • global opentelemetry collector
    • global jaeger collector

"},{"location":"admin/insight/best-practice/debug-trace.html#_2","title":"\u533a\u5757\u4ecb\u7ecd","text":"
  1. workload opentelemetry collector

    \u5c55\u793a\u4e0d\u540c\u5de5\u4f5c\u96c6\u7fa4\u7684 opentelemetry collector \u5728\u63a5\u53d7 language probe/SDK \u94fe\u8def\u6570\u636e\uff0c\u53d1\u9001\u805a\u5408\u94fe\u8def\u6570\u636e\u60c5\u51b5\u3002\u53ef\u4ee5\u901a\u8fc7\u5de6\u4e0a\u89d2\u7684 Cluster \u9009\u62e9\u6846\u9009\u62e9\u6240\u5728\u7684\u96c6\u7fa4\u3002

    Note

    \u6839\u636e\u8fd9\u56db\u5f20\u65f6\u5e8f\u56fe\uff0c\u53ef\u4ee5\u5224\u65ad\u51fa\u8be5\u96c6\u7fa4\u7684 opentelemetry collector \u662f\u5426\u6b63\u5e38\u8fd0\u884c\u3002

  2. global opentelemetry collector

    \u5c55\u793a \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u7684 opentelemetry collector \u5728\u63a5\u6536 \u5de5\u4f5c\u96c6\u7fa4 \u4e2d otel collector \u94fe\u8def\u6570\u636e\u4ee5\u53ca\u53d1\u9001\u805a\u5408\u94fe\u8def\u6570\u636e\u7684\u60c5\u51b5\u3002

    Note

    \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u7684 opentelemetry collector \u8fd8\u8d1f\u8d23\u53d1\u9001\u6240\u6709\u5de5\u4f5c\u96c6\u7fa4\u7684\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u7684\u5ba1\u8ba1\u65e5\u5fd7\u4ee5\u53ca Kubernetes \u5ba1\u8ba1\u65e5\u5fd7\uff08\u9ed8\u8ba4\u4e0d\u91c7\u96c6\uff09\u5230\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u7684 audit server \u7ec4\u4ef6\u3002

  3. global jaeger collector

    \u5c55\u793a \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u7684 jaeger collector \u5728\u63a5\u6536 \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u4e2d otel collector \u7684\u6570\u636e\uff0c\u5e76\u53d1\u9001\u94fe\u8def\u6570\u636e\u5230 ElasticSearch \u96c6\u7fa4\u7684\u60c5\u51b5\u3002

"},{"location":"admin/insight/best-practice/find_root_cause.html","title":"\u4f7f\u7528 Insight \u5b9a\u4f4d\u5e94\u7528\u5f02\u5e38","text":"

\u672c\u6587\u5c06\u4ee5 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u4e3e\u4f8b\uff0c\u8bb2\u89e3\u5982\u4f55\u901a\u8fc7 Insight \u53d1\u73b0 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u5f02\u5e38\u7684\u7ec4\u4ef6\u5e76\u5206\u6790\u51fa\u7ec4\u4ef6\u5f02\u5e38\u7684\u6839\u56e0\u3002

\u672c\u6587\u5047\u8bbe\u4f60\u5df2\u7ecf\u4e86\u89e3 Insight \u7684\u4ea7\u54c1\u529f\u80fd\u6216\u613f\u666f\u3002

"},{"location":"admin/insight/best-practice/find_root_cause.html#_1","title":"\u62d3\u6251\u56fe \u2014 \u4ece\u5b8f\u89c2\u5bdf\u89c9\u5f02\u5e38","text":"

\u968f\u7740\u4f01\u4e1a\u5bf9\u5fae\u670d\u52a1\u67b6\u6784\u7684\u5b9e\u8df5\uff0c\u4f01\u4e1a\u4e2d\u7684\u670d\u52a1\u6570\u91cf\u53ef\u80fd\u4f1a\u9762\u4e34\u7740\u6570\u91cf\u591a\u3001\u8c03\u7528\u590d\u6742\u7684\u60c5\u51b5\uff0c\u5f00\u53d1\u6216\u8fd0\u7ef4\u4eba\u5458\u5f88\u96be\u7406\u6e05\u670d\u52a1\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c \u56e0\u6b64\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86\u62d3\u6251\u56fe\u76d1\u63a7\u7684\u529f\u80fd\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u62d3\u6251\u56fe\u5bf9\u5f53\u524d\u7cfb\u7edf\u4e2d\u8fd0\u884c\u7684\u5fae\u670d\u52a1\u72b6\u51b5\u8fdb\u884c\u521d\u6b65\u8bca\u65ad\u3002

\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6211\u4eec\u901a\u8fc7\u62d3\u6251\u56fe\u53d1\u73b0\u5176\u4e2d Insight-Server \u8fd9\u4e2a\u8282\u70b9\u7684\u989c\u8272\u4e3a \u7ea2\u8272 \uff0c\u5e76\u5c06\u9f20\u6807\u79fb\u5230\u8be5\u8282\u70b9\u4e0a\uff0c \u53d1\u73b0\u8be5\u8282\u70b9\u7684\u9519\u8bef\u7387\u4e3a 2.11% \u3002\u56e0\u6b64\uff0c\u6211\u4eec\u5e0c\u671b\u67e5\u770b\u66f4\u591a\u7ec6\u8282\u53bb\u627e\u5230\u9020\u6210\u8be5\u670d\u52a1\u9519\u8bef\u7387\u4e0d\u4e3a 0 \u7684\u539f\u56e0:

\u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u70b9\u51fb\u6700\u9876\u90e8\u7684\u670d\u52a1\u540d\uff0c\u8fdb\u5165\u5230\u8be5\u670d\u52a1\u7684\u603b\u89c8\u754c\u9762\uff1a

"},{"location":"admin/insight/best-practice/find_root_cause.html#_2","title":"\u670d\u52a1\u603b\u89c8 \u2014 \u5177\u4f53\u5206\u6790\u7684\u5f00\u59cb","text":"

\u5f53\u4f60\u9700\u8981\u6839\u636e\u670d\u52a1\u7684\u5165\u53e3\u548c\u51fa\u53e3\u6d41\u91cf\u5206\u522b\u5206\u6790\u7684\u65f6\u5019\uff0c\u4f60\u53ef\u4ee5\u5728\u53f3\u4e0a\u89d2\u8fdb\u884c\u7b5b\u9009\u5207\u6362\uff0c\u7b5b\u9009\u6570\u636e\u4e4b\u540e\uff0c\u6211\u4eec\u53d1\u73b0\u8be5\u670d\u52a1\u6709\u5f88\u591a \u64cd\u4f5c \u5bf9\u5e94\u7684\u9519\u8bef\u7387\u90fd\u4e0d\u4e3a 0. \u6b64\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u70b9\u51fb \u67e5\u770b\u94fe\u8def \u5bf9\u8be5 \u64cd\u4f5c \u5728\u8fd9\u6bb5\u65f6\u95f4\u4ea7\u751f\u7684\u5e76\u8bb0\u5f55\u4e0b\u6765\u7684\u94fe\u8def\u8fdb\u884c\u5206\u6790\uff1a

"},{"location":"admin/insight/best-practice/find_root_cause.html#_3","title":"\u94fe\u8def\u8be6\u60c5 \u2014 \u627e\u5230\u9519\u8bef\u6839\u56e0\uff0c\u6d88\u706d\u5b83\u4eec","text":"

\u5728\u94fe\u8def\u5217\u8868\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u76f4\u89c2\u5730\u53d1\u73b0\u94fe\u8def\u5217\u8868\u4e2d\u5b58\u5728\u7740 \u9519\u8bef \u7684\u94fe\u8def\uff08\u4e0a\u56fe\u4e2d\u7ea2\u6846\u5708\u8d77\u6765\u7684\uff09\uff0c\u6211\u4eec\u53ef\u4ee5\u70b9\u51fb\u9519\u8bef\u7684\u94fe\u8def\u67e5\u770b\u94fe\u8def\u8be6\u60c5\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

\u5728\u94fe\u8def\u56fe\u4e2d\u6211\u4eec\u4e5f\u53ef\u4ee5\u4e00\u773c\u5c31\u53d1\u73b0\u94fe\u8def\u7684\u6700\u540e\u4e00\u6761\u6570\u636e\u662f\u5904\u4e8e \u9519\u8bef \u72b6\u6001\uff0c\u5c06\u5176\u53f3\u8fb9 Logs \u5c55\u5f00\uff0c\u6211\u4eec\u5b9a\u4f4d\u5230\u4e86\u9020\u6210\u8fd9\u6b21\u8bf7\u6c42\u9519\u8bef\u7684\u539f\u56e0\uff1a

\u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\u65b9\u6cd5\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5b9a\u4f4d\u5230\u5176\u4ed6 \u64cd\u4f5c \u9519\u8bef\u7684\u94fe\u8def\uff1a

"},{"location":"admin/insight/best-practice/find_root_cause.html#_4","title":"\u63a5\u4e0b\u6765 \u2014 \u4f60\u6765\u5206\u6790\uff01","text":""},{"location":"admin/insight/best-practice/grafana-use-db.html","title":"Insight Grafana \u6301\u4e45\u5316\u5230\u6570\u636e\u5e93","text":"

Insight \u4f7f\u7528\u4e91\u539f\u751f\u7684 GrafanaOperator + CRD \u7684\u65b9\u5f0f\u6765\u4f7f\u7528 Grafana\u3002\u6211\u4eec\u63a8\u8350\u4f7f\u7528 GrafanaDashboard(CRD) \u6765\u63cf\u8ff0\u4eea\u8868\u76d8\u7684 JSON \u6570\u636e\uff0c\u5373\u901a\u8fc7 GrafanaDashboard \u6765\u589e\u52a0\u3001\u5220\u9664\u3001\u4fee\u6539\u4eea\u8868\u76d8\u3002

\u56e0\u4e3a Grafana \u9ed8\u8ba4\u4f7f\u7528 SQLite3 \u4f5c\u4e3a\u672c\u5730\u6570\u636e\u5e93\u6765\u5b58\u50a8\u914d\u7f6e\u4fe1\u606f\uff0c\u4f8b\u5982\u7528\u6237\u3001\u4eea\u8868\u76d8\u3001\u544a\u8b66\u7b49\u3002 \u5f53\u7528\u6237\u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd\uff0c\u901a\u8fc7 UI \u521b\u5efa\u6216\u8005\u5bfc\u5165\u4eea\u8868\u76d8\u4e4b\u540e\uff0c\u6570\u636e\u5c06\u4e34\u65f6\u5b58\u50a8\u5728 SQLite3 \u4e2d\u3002 \u5f53 Grafana \u91cd\u542f\u4e4b\u540e\uff0c\u5c06\u91cd\u7f6e\u6240\u6709\u7684\u4eea\u8868\u76d8\u7684\u6570\u636e\uff0c\u5c06\u53ea\u5c55\u793a\u901a\u8fc7 GrafanaDashboard CR \u63cf\u8ff0\u7684\u4eea\u8868\u76d8\u6570\u636e\uff0c\u800c\u901a\u8fc7 UI \u521b\u5efa\uff0c\u5220\u9664\uff0c\u4fee\u6539\u4e5f\u90fd\u5c06\u88ab\u5168\u90e8\u91cd\u7f6e\u3002

Grafana \u652f\u6301\u4f7f\u7528\u5916\u90e8\u7684 MySQL\u3001PostgreSQL \u7b49\u6570\u636e\u5e93\u66ff\u4ee3\u5185\u7f6e\u7684 SQLite3 \u4f5c\u4e3a\u5185\u90e8\u5b58\u50a8\u3002\u672c\u6587\u63cf\u8ff0\u4e86\u5982\u679c\u7ed9 Insight \u63d0\u4f9b\u7684 Grafana \u914d\u7f6e\u5916\u7f6e\u7684\u6570\u636e\u5e93\u3002

"},{"location":"admin/insight/best-practice/grafana-use-db.html#_1","title":"\u4f7f\u7528\u5916\u90e8\u6570\u636e\u5e93","text":"

\u7ed3\u5408 Grafana\uff08\u5f53\u524d\u955c\u50cf\u7248\u672c 9.3.14\uff09\u7684\u5b98\u65b9\u6587\u6863\u3002\u6839\u636e\u5982\u4e0b\u6b65\u9aa4\u914d\u7f6e\u4f7f\u7528\u5916\u90e8\u7684\u6570\u636e\u5e93\uff0c\u793a\u4f8b\u4ee5 MySQL \u4e3a\u4f8b\uff1a

  1. \u5728\u5916\u90e8\u6570\u636e\u5e93\uff08MySQL /PostgreSQL\uff09\u4e2d\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u5e93\uff08DB\uff09\u3002
  2. \u914d\u7f6e Grafana \u4f7f\u7528\u8fd9\u4e2a\u6570\u636e\u5e93\uff08MySQL \u7684 MGR \u6a21\u5f0f\u9700\u8981\u989d\u5916\u5904\u7406\uff09\u3002
"},{"location":"admin/insight/best-practice/grafana-use-db.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u521d\u59cb\u5316\u6570\u636e\u5e93

    \u5728\u6570\u636e\u5e93\u4e2d\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 database \u7ed9 Grafana \u4f7f\u7528\uff0c\u5efa\u8bae\u540d\u79f0\u4e3a grafana

  2. \u914d\u7f6e Grafana \u4f7f\u7528 DB

    \u5728 insight-system \u4e0b\uff0c\u540d\u4e3a insight-grafana-operator-grafana \u7684 Grafana \u7684 CR \u91cc\u7684\u914d\u7f6e\uff1a

    apiVersion: integreatly.org/v1alpha1\nkind: Grafana\nmetadata:\n  name: insight-grafana-operator-grafana\n  namespace: insight-system\nspec:\n  baseImage: 10.64.40.50/docker.m.daocloud.io/grafana/grafana:9.3.14\n  config:\n    // \u5728 config \u7684\u5c3e\u90e8\u8ffd\u52a0\n+   database:\n+     type: mysql # \u652f\u6301 mysql, postgres\n+     host: \"10.6.216.101:30782\" # \u6570\u636e\u5e93\u7684 Endpoint\n+     name: \"grafana\"  # \u63d0\u524d\u521b\u5efa\u7684 database\n+     user: \"grafana\"\n+     password: \"grafana_password\"\n
  3. \u5982\u4e0b\u662f\u914d\u7f6e\u5b8c\u6210\u540e\u5728 Grafana \u7684\u914d\u7f6e\u6587\u4ef6 grafana-config \u91cc\u7684\u914d\u7f6e\u4fe1\u606f\u3002

    [database]\n  host = 10.6.216.101:30782\n  name = grafana\n  password = grafana_password\n  type = mysql\n  user = grafana\n
    1. \u5728 insight.yaml \u6dfb\u52a0\u5982\u4e0b\u914d\u7f6e\uff1a

      grafana-operator:\n  grafana:\n    config:\n      database:\n        type: mysql\n        host: \"10.6.216.101:30782\"\n        name: \"grafana\"\n        user: \"grafana\"\n        password: \"grafana_password\"\n
    2. \u5347\u7ea7 insight server\uff0c\u5efa\u8bae\u901a\u8fc7 Helm \u5347\u7ea7\u3002

      helm upgrade insight insight/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --version ${version}\n
  4. \u901a\u8fc7\u547d\u4ee4\u884c\u8fdb\u884c\u5347\u7ea7\u3002

    1. \u83b7\u53d6 insight Helm \u4e2d\u539f\u6765\u7684\u914d\u7f6e\u3002

      helm get values insight -n insight-system -o yaml > insight.yaml\n
    2. \u6307\u5b9a\u539f\u6765\u914d\u7f6e\u6587\u4ef6\u5e76\u4fdd\u5b58 grafana \u6570\u636e\u5e93\u7684\u8fde\u63a5\u4fe1\u606f\u3002

      helm upgrade --install \\\n    --version ${version} \\\n    insight insight/insight -n insight-system \\\n    -f ./insight.yaml \\\n    --set grafana-operator.grafana.config.database.type=mysql \\\n    --set grafana-operator.grafana.config.database.host=10.6.216.101:30782 \\\n    --set grafana-operator.grafana.config.database.name=grafana \\\n    --set grafana-operator.grafana.config.database.user=grafana \\\n    --set grafana-operator.grafana.config.database.password=grafana_password \n
"},{"location":"admin/insight/best-practice/grafana-use-db.html#_3","title":"\u6ce8\u610f\u4e8b\u9879","text":"
  1. \u7528\u6237\u662f\u5426\u4f1a\u8986\u76d6\u5185\u7f6e\u4eea\u8868\u76d8\uff0c\u5bfc\u81f4\u5347\u7ea7\u5931\u8d25\uff1f

    \u56de\u590d\uff1a\u4f1a\u3002\u5f53\u7528\u6237\u7f16\u8f91\u4e86 Dashbaord A\uff08v1.1\uff09\uff0c\u4e14 Insight \u4e5f\u5347\u7ea7\u4e86 Dashboard A\uff08v2.0\uff09\uff0c \u5347\u7ea7\u4e4b\u540e\uff08\u5347\u7ea7\u955c\u50cf\uff09\uff1b\u7528\u6237\u770b\u5230\u5185\u5bb9\u8fd8\u662f v1.1\uff0c\u800c v2.0 \u662f\u4e0d\u4f1a\u66f4\u65b0\u5230\u73af\u5883\u91cc\u3002

  2. \u5f53\u4f7f\u7528 MGR \u6a21\u5f0f MySQL \u65f6\u4f1a\u5b58\u5728\u95ee\u9898\uff0c\u5bfc\u81f4 grafana-deployment \u65e0\u6cd5\u6b63\u5e38\u542f\u52a8\u3002

    \u539f\u56e0\uff1a\u8868 alert_rule_tag_v1 \u548c annotation_tag_v2 \u4e2d\u6ca1\u6709\u4e3b\u952e\uff0c\u800c mysql mgr \u5fc5\u987b\u6709\u4e3b\u952e

    \u89e3\u51b3\u65b9\u6cd5\uff1a\u5411 alert_rule_tag_v1 \u548c annotation_tag_v2 \u4e34\u65f6\u8868\u6dfb\u52a0\u4e3b\u952e\uff1a

    alter table alert_rule_tag_v1\n    add constraint alert_rule_tag_v1_pk\n        primary key (tag_id, alert_id);\n\nalter table annotation_tag_v2\n    add constraint annotation_tag_v2_pk\n        primary key (tag_id, annotation_id);\n
"},{"location":"admin/insight/best-practice/insight-kafka.html","title":"Kafka + Elasticsearch \u6d41\u5f0f\u67b6\u6784\u5e94\u5bf9\u8d85\u5927\u89c4\u6a21\u65e5\u5fd7\u65b9\u6848","text":"

\u968f\u7740\u4e1a\u52a1\u53d1\u5c55\uff0c\u8d8a\u6765\u8d8a\u591a\u7684\u5e94\u7528\u4ea7\u751f\u7684\u65e5\u5fd7\u6570\u636e\u4f1a\u8d8a\u6765\u8d8a\u591a\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u7cfb\u7edf\u80fd\u591f\u6b63\u5e38\u91c7\u96c6\u5e76\u5206\u6790\u5e9e\u6742\u7684\u65e5\u5fd7\u6570\u636e\u65f6\uff0c \u4e00\u822c\u505a\u6cd5\u662f\u5f15\u5165 Kafka \u7684\u6d41\u5f0f\u67b6\u6784\u6765\u89e3\u51b3\u5927\u91cf\u6570\u636e\u5f02\u6b65\u91c7\u96c6\u7684\u65b9\u6848\u3002\u91c7\u96c6\u5230\u7684\u65e5\u5fd7\u6570\u636e\u4f1a\u7ecf\u8fc7 Kafka \u6d41\u8f6c\uff0c \u7531\u76f8\u5e94\u7684\u6570\u636e\u6d88\u8d39\u7ec4\u4ef6\u5c06\u6570\u636e\u4ece Kafka \u6d88\u8d39\u5b58\u5165\u5230 Elasticsearch \u4e2d\uff0c\u5e76\u901a\u8fc7 Insight \u8fdb\u884c\u53ef\u89c6\u5316\u5c55\u793a\u4e0e\u5206\u6790\u3002

\u672c\u6587\u5c06\u4ecb\u7ecd\u4ee5\u4e0b\u4e24\u79cd\u65b9\u6848\uff1a

  • Fluentbit + Kafka + Logstash + Elasticsearch
  • Fluentbit + Kafka + Vector + Elasticsearch

\u5f53\u6211\u4eec\u5728\u65e5\u5fd7\u7cfb\u7edf\u4e2d\u5f15\u5165 Kafka \u4e4b\u540e\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u56fe\u6240\u793a\uff1a

\u4e0a\u9762\u4e24\u79cd\u65b9\u6848\u4e2d\u6709\u5171\u901a\u7684\u5730\u65b9\uff0c\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\u6d88\u8d39 Kafka \u6570\u636e\u7684\u7ec4\u4ef6\uff0c\u540c\u65f6\uff0c\u4e3a\u4e86\u4e0d\u5f71\u54cd Insight \u6570\u636e\u5206\u6790\uff0c \u6211\u4eec\u9700\u8981\u5728\u6d88\u8d39 Kafka \u6570\u636e\u5e76\u5199\u5165\u5230 ES \u7684\u6570\u636e\u548c\u539f\u6765 Fluentbit \u76f4\u63a5\u5199\u5165 ES \u7684\u6570\u636e\u7684\u683c\u5f0f\u4e00\u81f4\u3002

\u9996\u5148\u6211\u4eec\u6765\u770b\u770b Fluentbit \u600e\u4e48\u5c06\u65e5\u5fd7\u5199\u5165 Kafka\uff1a

"},{"location":"admin/insight/best-practice/insight-kafka.html#fluentbit-output","title":"\u4fee\u6539 Fluentbit Output \u914d\u7f6e","text":"

\u5f53 Kafka \u96c6\u7fa4\u51c6\u5907\u5c31\u7eea\u4e4b\u540e\uff0c\u6211\u4eec\u9700\u8981\u4fee\u6539 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b ConfigMap \u7684\u5185\u5bb9\uff0c \u65b0\u589e\u4ee5\u4e0b\u4e09\u4e2a Kafka Output \u5e76\u6ce8\u91ca\u539f\u6765\u4e09\u4e2a Elasticsearch Output\uff1a

\u5047\u8bbe Kafka Brokers \u5730\u5740\u4e3a\uff1a insight-kafka.insight-system.svc.cluster.local:9092

    [OUTPUT]\n        Name        kafka\n        Match_Regex (?:kube|syslog)\\.(.*)\n        Brokers     insight-kafka.insight-system.svc.cluster.local:9092\n        Topics      insight-logs\n        format      json\n        timestamp_key @timestamp\n        rdkafka.batch.size 65536\n        rdkafka.compression.level 6\n        rdkafka.compression.type lz4\n        rdkafka.linger.ms 0\n        rdkafka.log.connection.close false\n        rdkafka.message.max.bytes 2.097152e+06\n        rdkafka.request.required.acks 1\n    [OUTPUT]\n        Name        kafka\n        Match_Regex (?:skoala-gw)\\.(.*)\n        Brokers     insight-kafka.insight-system.svc.cluster.local:9092\n        Topics      insight-gw-skoala\n        format      json\n        timestamp_key @timestamp\n        rdkafka.batch.size 65536\n        rdkafka.compression.level 6\n        rdkafka.compression.type lz4\n        rdkafka.linger.ms 0\n        rdkafka.log.connection.close false\n        rdkafka.message.max.bytes 2.097152e+06\n        rdkafka.request.required.acks 1\n    [OUTPUT]\n        Name        kafka\n        Match_Regex (?:kubeevent)\\.(.*)\n        Brokers     insight-kafka.insight-system.svc.cluster.local:9092\n        Topics      insight-event\n        format      json\n        timestamp_key @timestamp\n        rdkafka.batch.size 65536\n        rdkafka.compression.level 6\n        rdkafka.compression.type lz4\n        rdkafka.linger.ms 0\n        rdkafka.log.connection.close false\n        rdkafka.message.max.bytes 2.097152e+06\n        rdkafka.request.required.acks 1\n

\u63a5\u4e0b\u6765\u5c31\u662f\u6d88\u8d39 Kafka \u6570\u636e\u4e4b\u540e\u5199\u5230 ES \u7684\u7ec6\u5fae\u5dee\u522b\u3002 \u6b63\u5982\u672c\u6587\u5f00\u59cb\u7684\u63cf\u8ff0\uff0c\u672c\u6587\u5c06\u4ecb\u7ecd Logstash \u4e0e Vector \u4f5c\u4e3a\u6d88\u8d39 Kafka \u7684\u4e24\u79cd\u65b9\u5f0f\u3002

"},{"location":"admin/insight/best-practice/insight-kafka.html#kafka-elasticsearch_1","title":"\u6d88\u8d39 Kafka \u5e76\u5199\u5165 Elasticsearch","text":"

\u5047\u8bbe Elasticsearch \u7684\u5730\u5740\u4e3a\uff1ahttps://mcamel-common-es-cluster-es-http.mcamel-system:9200

"},{"location":"admin/insight/best-practice/insight-kafka.html#logstash","title":"\u901a\u8fc7 Logstash \u6d88\u8d39","text":"

\u5982\u679c\u4f60\u5bf9 Logstash \u6280\u672f\u6808\u6bd4\u8f83\u719f\u6089\uff0c\u4f60\u53ef\u4ee5\u7ee7\u7eed\u4f7f\u7528\u8be5\u65b9\u5f0f\u3002

\u5f53\u4f60\u901a\u8fc7 Helm \u90e8\u7f72 Logstash \u7684\u65f6\u5019\uff0c \u5728 logstashPipeline \u4e2d\u589e\u52a0\u5982\u4e0b Pipeline \u5373\u53ef\uff1a

replicas: 3\nresources:\n  requests:\n    cpu: 100m\n    memory: 1536Mi\n  limits:\n    cpu: 1000m\n    memory: 1536Mi\nlogstashConfig:\n  logstash.yml: |\n    http.host: 0.0.0.0\n    xpack.monitoring.enabled: false\nlogstashPipeline:\n  insight-event.conf: |\n    input {\n      kafka {\n        add_field => {\"kafka_topic\" => \"insight-event\"}\n        topics => [\"insight-event\"]         \n        bootstrap_servers => \"172.30.120.189:32082\" # kafka\u7684ip \u548c\u7aef\u53e3\n        enable_auto_commit => true\n        consumer_threads => 1                       # \u5bf9\u5e94 partition \u7684\u6570\u91cf\n        decorate_events => true\n        codec => \"plain\"\n      }\n    }\n\n    filter {\n      mutate { gsub => [ \"message\", \"@timestamp\", \"_@timestamp\"] }\n      json {source => \"message\"}\n      date {\n        match => [ \"_@timestamp\", \"UNIX\" ]\n        remove_field => \"_@timestamp\"\n        remove_tag => \"_timestampparsefailure\"\n      }\n      mutate {\n        remove_field => [\"event\", \"message\"]\n      }\n    }\n\n    output {\n      if [kafka_topic] == \"insight-event\" {\n        elasticsearch {\n          hosts => [\"https://172.30.120.201:32427\"] # elasticsearch \u5730\u5740\n          user => 'elastic'                         # elasticsearch \u7528\u6237\u540d\n          ssl => 'true'\n          password => '0OWj4D54GTH3xK06f9Gg01Zk'    # elasticsearch \u5bc6\u7801\n          ssl_certificate_verification => 'false'\n          action => \"create\"\n          index => \"insight-es-k8s-event-logs-alias\"\n          data_stream => \"false\"\n        }\n      }\n    }\n  insight-gw-skoala.conf: |\n    input {\n      kafka {\n        add_field => {\"kafka_topic\" => \"insight-gw-skoala\"}\n        topics => [\"insight-gw-skoala\"]         \n        bootstrap_servers => \"172.30.120.189:32082\"\n        enable_auto_commit => true\n        consumer_threads => 1\n        decorate_events => true\n        codec => \"plain\"\n      }\n    }\n\n    filter {\n      mutate { gsub => [ \"message\", \"@timestamp\", \"_@timestamp\"] }\n      json {source => \"message\"}\n      date {\n        match => [ \"_@timestamp\", \"UNIX\" ]\n        remove_field => \"_@timestamp\"\n        remove_tag => \"_timestampparsefailure\"\n      }\n      mutate {\n        remove_field => [\"event\", \"message\"]\n      }\n    }\n\n    output {\n      if [kafka_topic] == \"insight-gw-skoala\" {\n        elasticsearch {\n          hosts => [\"https://172.30.120.201:32427\"]\n          user => 'elastic'\n          ssl => 'true'\n          password => '0OWj4D54GTH3xK06f9Gg01Zk'\n          ssl_certificate_verification => 'false'\n          action => \"create\"\n          index => \"skoala-gw-alias\"\n          data_stream => \"false\"\n        }\n      }\n    }\n  insight-logs.conf: |\n    input {\n      kafka {\n        add_field => {\"kafka_topic\" => \"insight-logs\"}\n        topics => [\"insight-logs\"]         \n        bootstrap_servers => \"172.30.120.189:32082\"   \n        enable_auto_commit => true\n        consumer_threads => 1\n        decorate_events => true\n        codec => \"plain\"\n      }\n    }\n\n    filter {\n      mutate { gsub => [ \"message\", \"@timestamp\", \"_@timestamp\"] }\n      json {source => \"message\"}\n      date {\n        match => [ \"_@timestamp\", \"UNIX\" ]\n        remove_field => \"_@timestamp\"\n        remove_tag => \"_timestampparsefailure\"\n      }\n      mutate {\n        remove_field => [\"event\", \"message\"]\n      }\n    }\n\n    output {\n      if [kafka_topic] == \"insight-logs\" {\n        elasticsearch {\n          hosts => [\"https://172.30.120.201:32427\"]\n          user => 'elastic'\n          ssl => 'true'\n          password => '0OWj4D54GTH3xK06f9Gg01Zk'\n          ssl_certificate_verification => 'false'\n          action => \"create\"\n          index => \"insight-es-k8s-logs-alias\"\n          data_stream => \"false\"\n        }\n      }\n    }\n
"},{"location":"admin/insight/best-practice/insight-kafka.html#vector","title":"\u901a\u8fc7 Vector \u6d88\u8d39","text":"

\u5982\u679c\u4f60\u5bf9 Vector \u6280\u672f\u6808\u6bd4\u8f83\u719f\u6089\uff0c\u4f60\u53ef\u4ee5\u7ee7\u7eed\u4f7f\u7528\u8be5\u65b9\u5f0f\u3002

\u5f53\u4f60\u901a\u8fc7 Helm \u90e8\u7f72 Vector \u7684\u65f6\u5019\uff0c\u5f15\u7528\u5982\u4e0b\u89c4\u5219\u7684 Configmap \u914d\u7f6e\u6587\u4ef6\u5373\u53ef\uff1a

metadata:\n  name: vector\napiVersion: v1\ndata:\n  aggregator.yaml: |\n    api:\n      enabled: true\n      address: '0.0.0.0:8686'\n    sources:\n      insight_logs_kafka:\n        type: kafka\n        bootstrap_servers: 'insight-kafka.insight-system.svc.cluster.local:9092'\n        group_id: consumer-group-insight\n        topics:\n          - insight-logs\n      insight_event_kafka:\n        type: kafka\n        bootstrap_servers: 'insight-kafka.insight-system.svc.cluster.local:9092'\n        group_id: consumer-group-insight\n        topics:\n          - insight-event\n      insight_gw_skoala_kafka:\n        type: kafka\n        bootstrap_servers: 'insight-kafka.insight-system.svc.cluster.local:9092'\n        group_id: consumer-group-insight\n        topics:\n          - insight-gw-skoala\n    transforms:\n      insight_logs_remap:\n        type: remap\n        inputs:\n          - insight_logs_kafka\n        source: |2\n              . = parse_json!(string!(.message))\n              .@timestamp = now()\n      insight_event_kafka_remap:\n        type: remap\n        inputs:\n          - insight_event_kafka\n          - insight_gw_skoala_kafka\n        source: |2\n              . = parse_json!(string!(.message))\n              .@timestamp = now()\n      insight_gw_skoala_kafka_remap:\n        type: remap\n        inputs:\n          - insight_gw_skoala_kafka\n        source: |2\n              . = parse_json!(string!(.message))\n              .@timestamp = now()\n    sinks:\n      insight_es_logs:\n        type: elasticsearch\n        inputs:\n          - insight_logs_remap\n        api_version: auto\n        auth:\n          strategy: basic\n          user: elastic\n          password: 8QZJ656ax3TXZqQh205l3Ee0\n        bulk:\n          index: insight-es-k8s-logs-alias-1418\n        endpoints:\n          - 'https://mcamel-common-es-cluster-es-http.mcamel-system:9200'\n        tls:\n          verify_certificate: false\n          verify_hostname: false\n      insight_es_event:\n        type: elasticsearch\n        inputs:\n          - insight_event_kafka_remap\n        api_version: auto\n        auth:\n          strategy: basic\n          user: elastic\n          password: 8QZJ656ax3TXZqQh205l3Ee0\n        bulk:\n          index: insight-es-k8s-event-logs-alias-1418\n        endpoints:\n          - 'https://mcamel-common-es-cluster-es-http.mcamel-system:9200'\n        tls:\n          verify_certificate: false\n          verify_hostname: false\n      insight_es_gw_skoala:\n        type: elasticsearch\n        inputs:\n          - insight_gw_skoala_kafka_remap\n        api_version: auto\n        auth:\n          strategy: basic\n          user: elastic\n          password: 8QZJ656ax3TXZqQh205l3Ee0\n        bulk:\n          index: skoala-gw-alias-1418\n        endpoints:\n          - 'https://mcamel-common-es-cluster-es-http.mcamel-system:9200'\n        tls:\n          verify_certificate: false\n          verify_hostname: false\n
"},{"location":"admin/insight/best-practice/insight-kafka.html#_1","title":"\u68c0\u67e5\u662f\u5426\u6b63\u5e38\u5de5\u4f5c","text":"

\u4f60\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b Insight \u65e5\u5fd7\u67e5\u8be2\u754c\u9762\u662f\u5426\u6709\u6700\u65b0\u7684\u6570\u636e\uff0c\u6216\u8005\u67e5\u770b\u539f\u672c Elasticsearch \u7684\u7d22\u5f15\u7684\u6570\u91cf\u6709\u6ca1\u6709\u589e\u957f\uff0c\u589e\u957f\u5373\u4ee3\u8868\u914d\u7f6e\u6210\u529f\u3002

"},{"location":"admin/insight/best-practice/insight-kafka.html#_2","title":"\u53c2\u8003","text":"
  • Logstash Helm Chart
  • Vector Helm Chart
  • Vector \u5b9e\u8df5
  • Vector Perfomance
"},{"location":"admin/insight/best-practice/integration_deepflow.html","title":"\u96c6\u6210 DeepFlow","text":"

DeepFlow \u662f\u4e00\u6b3e\u57fa\u4e8e eBPF \u7684\u53ef\u89c2\u6d4b\u6027\u4ea7\u54c1\u3002\u5b83\u7684\u793e\u533a\u7248\u5df2\u7ecf\u88ab\u96c6\u6210\u8fdb Insight \u4e2d\uff0c\u4ee5\u4e0b\u662f\u96c6\u6210\u65b9\u5f0f\u3002

"},{"location":"admin/insight/best-practice/integration_deepflow.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
  • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5df2\u7ecf\u5b89\u88c5 Insight
  • Insight \u6700\u4f4e\u7248\u672c\u8981\u6c42\u4e3a v0.23.0
  • \u4e86\u89e3\u5e76\u6ee1\u8db3 DeepFlow \u8fd0\u884c\u6743\u9650\u53ca\u5185\u6838\u8981\u6c42
  • \u5b58\u50a8\u5377\u5c31\u7eea
"},{"location":"admin/insight/best-practice/integration_deepflow.html#deepflow-insight","title":"\u5b89\u88c5 DeepFlow \u548c\u914d\u7f6e Insight","text":"

\u5b89\u88c5 DeepFlow \u7ec4\u4ef6\u9700\u8981\u7528\u5230\u4e24\u4e2a Chart\uff1a

  • deepflow\uff1a\u5305\u542b deepflow-app\u3001deepflow-server\u3001deepflow-clickhouse\u3001deepflow-agent \u7b49\u7ec4\u4ef6\u3002 \u4e00\u822c deepflow \u4f1a\u90e8\u7f72\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\uff0c\u6240\u4ee5\u5b83\u4e5f\u4e00\u5e76\u5b89\u88c5\u4e86 deepflow-agent
  • deepflow-agent\uff1a\u53ea\u5305\u542b\u4e86 deepflow-agent \u7ec4\u4ef6\uff0c\u7528\u4e8e\u91c7\u96c6 eBPF \u6570\u636e\u5e76\u53d1\u9001\u7ed9 deepflow-server
"},{"location":"admin/insight/best-practice/integration_deepflow.html#deepflow_1","title":"\u5b89\u88c5 DeepFlow","text":"

DeepFlow \u9700\u8981\u5b89\u88c5\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u3002

  1. \u8fdb\u5165 kpanda-global-cluster \u96c6\u7fa4\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u5185\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u4ed3\u5e93\u9009\u62e9 community \uff0c\u641c\u7d22\u6846\u627e\u5230 deepflow:

  2. \u70b9\u51fb deepflow \u5361\u7247\u8fdb\u5165\u8be6\u60c5\u9875\uff1a

  3. \u70b9\u51fb \u5b89\u88c5 \uff0c\u8fdb\u5165\u5b89\u88c5\u754c\u9762\uff1a

  4. \u5927\u90e8\u5206 values \u90fd\u6709\u9ed8\u8ba4\u503c\u3002\u5176\u4e2d Clickhouse \u548c Mysql \u90fd\u9700\u8981\u7533\u8bf7\u5b58\u50a8\u5377\uff0c\u5b83\u4eec\u7684\u9ed8\u8ba4\u5927\u5c0f\u90fd\u662f 10Gi \uff0c \u53ef\u4ee5\u901a\u8fc7 persistence \u5173\u952e\u5b57\u641c\u7d22\u5230\u76f8\u5173\u914d\u7f6e\u5e76\u4fee\u6539\u3002

  5. \u914d\u7f6e\u597d\u540e\u5c31\u53ef\u4ee5\u70b9\u51fb \u786e\u5b9a \uff0c\u6267\u884c\u5b89\u88c5\u4e86\u3002

"},{"location":"admin/insight/best-practice/integration_deepflow.html#insight","title":"\u4fee\u6539 Insight \u914d\u7f6e","text":"

\u5728\u5b89\u88c5 DeepFlow \u540e\uff0c\u8fd8\u9700\u8981\u5728 Insight \u4e2d\u5f00\u542f\u76f8\u5173\u7684\u529f\u80fd\u5f00\u5173\u3002

  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u5185\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u914d\u7f6e\u9879 \uff0c \u901a\u8fc7\u641c\u7d22\u6846\u627e\u5230 insight-server-config \u5e76\u8fdb\u884c\u7f16\u8f91\uff1a

  2. \u5728 YAML \u914d\u7f6e\u4e2d\u627e\u5230 eBPF Flow feature \u8fd9\u4e2a\u529f\u80fd\u5f00\u5173\u5e76\u5c06\u5b83\u5f00\u542f:

  3. \u4fdd\u5b58\u66f4\u6539\uff0c\u91cd\u542f insight-server \u540e\uff0cInsight \u4e3b\u754c\u9762\u5c31\u4f1a\u51fa\u73b0 \u7f51\u7edc\u89c2\u6d4b :

"},{"location":"admin/insight/best-practice/integration_deepflow.html#deepflow-agent","title":"\u5b89\u88c5 DeepFlow Agent","text":"

DeepFlow Agent \u901a\u8fc7 deepflow-agent Chart \u6765\u5b89\u88c5\u5728\u5b50\u96c6\u7fa4\u4e2d\uff0c\u7528\u4e8e\u91c7\u96c6\u5b50\u96c6\u7fa4\u7684 eBPF \u89c2\u6d4b\u6570\u636e\u5e76\u4e0a\u62a5\u5230\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u3002 \u7c7b\u4f3c\u4e8e\u5b89\u88c5 deepflow\uff0c\u901a\u8fc7 Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u4ed3\u5e93\u9009\u62e9 community \uff0c \u901a\u8fc7\u641c\u7d22\u6846\u67e5\u8be2 deepflow-agent\uff0c\u6309\u6d41\u7a0b\u8fdb\u5165\u5b89\u88c5\u754c\u9762\u3002

\u53c2\u6570\u8bf4\u660e\uff1a

  • DeployComponent \u90e8\u7f72\u6a21\u5f0f\uff0c\u9ed8\u8ba4\u4e3a daemonset
  • timezone \u65f6\u533a\uff0c\u9ed8\u8ba4\u4e3a Asia/Shanghai
  • DeepflowServerNodeIPS \u5bf9\u5e94 deepflow server \u5b89\u88c5\u96c6\u7fa4\u7684\u8282\u70b9\u5730\u5740
  • deepflowK8sClusterID \u96c6\u7fa4 UUID
  • agentGroupID agent \u7ec4 ID
  • controllerPort deepflow server \u7684\u6570\u636e\u4e0a\u62a5\u7aef\u53e3\uff0c\u53ef\u4ee5\u4e0d\u586b\uff0c\u9ed8\u8ba4\u4e3a 30035
  • clusterNAME \u96c6\u7fa4\u540d\u79f0

\u914d\u7f6e\u597d\u540e\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u5b89\u88c5\u3002

"},{"location":"admin/insight/best-practice/integration_deepflow.html#_2","title":"\u4f7f\u7528","text":"

\u5728\u6b63\u786e\u5b89\u88c5 DeepFlow \u540e\uff0c\u70b9\u51fb \u7f51\u7edc\u89c2\u6d4b \u5c31\u53ef\u4ee5\u8fdb\u5165 DeepFlow Grafana UI\u3002 \u5b83\u5185\u7f6e\u4e86\u5927\u91cf\u7684 Dashboard \u53ef\u4f9b\u67e5\u770b\u4e0e\u5e2e\u52a9\u5206\u6790\u95ee\u9898\uff0c \u70b9\u51fb DeepFlow Templates \uff0c\u53ef\u4ee5\u6d4f\u89c8\u6240\u6709\u53ef\u4ee5\u67e5\u770b\u7684 Dashboard\uff1a

"},{"location":"admin/insight/best-practice/sw-to-otel.html","title":"\u4f7f\u7528 OpenTelemetry \u96f6\u4ee3\u7801\u63a5\u6536 SkyWalking \u94fe\u8def\u6570\u636e","text":"

\u53ef\u89c2\u6d4b\u6027 Insight \u901a\u8fc7 OpenTelemetry \u5c06\u5e94\u7528\u6570\u636e\u8fdb\u884c\u4e0a\u62a5\u3002\u82e5\u60a8\u7684\u5e94\u7528\u5df2\u4f7f\u7528 Skywalking \u6765\u91c7\u96c6\u94fe\u8def\uff0c \u53ef\u53c2\u8003\u672c\u6587\u8fdb\u884c\u96f6\u4ee3\u7801\u6539\u9020\u5c06\u94fe\u8def\u6570\u636e\u63a5\u5165 Insight\u3002

"},{"location":"admin/insight/best-practice/sw-to-otel.html#_1","title":"\u4ee3\u7801\u89e3\u8bfb","text":"

\u4e3a\u4e86\u80fd\u517c\u5bb9\u4e0d\u540c\u7684\u5206\u5e03\u5f0f\u8ffd\u8e2a\u5b9e\u73b0\uff0cOpenTelemetry \u63d0\u4f9b\u4e86\u7ec4\u4ef6\u690d\u5165\u7684\u65b9\u5f0f\uff0c\u8ba9\u4e0d\u540c\u7684\u5382\u5546\u80fd\u591f\u7ecf\u7531 OpenTelemetry \u6807\u51c6\u5316\u6570\u636e\u5904\u7406\u540e\u8f93\u51fa\u5230\u4e0d\u540c\u7684\u540e\u7aef\u3002Jaeger \u4e0e Zipkin \u5728\u793e\u533a\u4e2d\u5b9e\u73b0\u4e86 JaegerReceiver\u3001ZipkinReceiver\u3002 \u6211\u4eec\u4e5f\u4e3a\u793e\u533a\u8d21\u732e\u4e86 SkyWalkingReceiver\uff0c\u5e76\u8fdb\u884c\u4e86\u6301\u7eed\u7684\u6253\u78e8\uff0c\u73b0\u5728\u5df2\u7ecf\u5177\u5907\u4e86\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u4f7f\u7528\u7684\u6761\u4ef6\uff0c \u800c\u4e14\u65e0\u9700\u4fee\u6539\u4efb\u4f55\u4e00\u884c\u4e1a\u52a1\u4ee3\u7801\u3002

OpenTelemetry \u4e0e SkyWalking \u6709\u4e00\u4e9b\u5171\u540c\u70b9\uff1a\u90fd\u662f\u4f7f\u7528 Trace \u6765\u5b9a\u4e49\u4e00\u6b21\u8ffd\u8e2a\uff0c\u5e76\u4f7f\u7528 Span \u6765\u6807\u8bb0\u8ffd\u8e2a\u91cc\u7684\u6700\u5c0f\u7c92\u5ea6\u3002 \u4f46\u662f\u5728\u4e00\u4e9b\u7ec6\u8282\u548c\u5b9e\u73b0\u4e0a\u8fd8\u662f\u4f1a\u6709\u5dee\u522b\uff1a

- Skywalking OpenTelemetry \u6570\u636e\u7ed3\u6784 span -> Segment -> Trace Span -> Trace \u5c5e\u6027\u4fe1\u606f Tags Attributes \u5e94\u7528\u65f6\u95f4 Logs Events \u5f15\u7528\u5173\u7cfb References Links

\u660e\u786e\u4e86\u8fd9\u4e9b\u5dee\u5f02\u540e\uff0c\u5c31\u53ef\u4ee5\u5f00\u59cb\u5b9e\u73b0\u5c06 SkyWalking Trace \u8f6c\u6362\u4e3a OpenTelemetry Trace\u3002\u4e3b\u8981\u5de5\u4f5c\u5305\u62ec\uff1a

  1. \u5982\u4f55\u6784\u9020 OpenTelemetry \u7684 TraceId \u548c SpanId

  2. \u5982\u4f55\u6784\u9020 OpenTelemetry \u7684 ParentSpanId

  3. \u5982\u4f55\u5728 OpenTelemetry Span \u4e2d\u4fdd\u7559 SkyWalking \u7684\u539f\u59cb TraceId\u3001SegmentId\u3001SpanId

\u9996\u5148\uff0c\u6211\u4eec\u6765\u770b\u5982\u4f55\u6784\u9020 OpenTelemetry \u7684 TraceId \u548c SpanId\u3002SkyWalking \u548c OpenTelemetry \u90fd\u662f\u901a\u8fc7 TraceId \u4e32\u8054\u8d77\u5404\u4e2a\u5206\u5e03\u5f0f\u670d\u52a1\u8c03\u7528\uff0c\u5e76\u901a\u8fc7 SpanId \u6765\u6807\u8bb0\u6bcf\u4e00\u4e2a Span\uff0c\u4f46\u662f\u5b9e\u73b0\u89c4\u683c\u6709\u8f83\u5927\u5dee\u5f02\uff1a

Info

\u4ee3\u7801\u5b9e\u73b0\u89c1 GitHub\uff1a

  1. Skywalking Receiver
  2. PR: Create skywalking component folder/structure
  3. PR: add Skywalking tracing receiver impl

\u5177\u4f53\u6765\u8bb2\uff0cSkyWalking TraceId \u548c SegmentId \u6240\u6709\u53ef\u80fd\u7684\u683c\u5f0f\u5982\u4e0b\uff1a

\u5176\u4e2d\uff0c\u5728 OpenTelemetry \u534f\u8bae\u91cc\uff0cSpan \u5728\u6240\u6709 Trace \u4e2d\u90fd\u662f\u552f\u4e00\u7684\uff0c\u800c\u5728 SkyWalking \u4e2d\uff0c Span \u4ec5\u5728\u6bcf\u4e2a Segment \u91cc\u662f\u552f\u4e00\u7684\uff0c\u8fd9\u8bf4\u660e\u8981\u901a\u8fc7 SegmentId \u4e0e SpanId \u7ed3\u5408\u624d\u80fd\u5728 SkyWalking \u4e2d\u5bf9 Span \u505a\u552f\u4e00\u6807\u8bc6\uff0c\u5e76\u8f6c\u6362\u4e3a OpenTelemetry \u7684 SpanId\u3002

Info

\u4ee3\u7801\u5b9e\u73b0\u89c1 GitHub\uff1a

  1. Skywalking Receiver
  2. PR: Fix skywalking traceid and spanid convertion

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u770b\u5982\u4f55\u6784\u9020 OpenTelemetry \u7684 ParentSpanId\u3002\u5728\u4e00\u4e2a Segment \u5185\u90e8\uff0c SkyWalking \u7684 ParentSpanId \u5b57\u6bb5\u53ef\u76f4\u63a5\u7528\u4e8e\u6784\u9020 OpenTelemetry \u7684 ParentSpanId \u5b57\u6bb5\u3002 \u4f46\u5f53\u4e00\u4e2a Trace \u8de8\u591a\u4e2a Segment \u65f6\uff0cSkyWalking \u662f\u901a\u8fc7 Reference \u4e2d\u7684 ParentTraceSegmentId \u548c ParentSpanId \u8868\u793a\u7684\u5173\u8054\u4fe1\u606f\uff0c\u4e8e\u662f\u6b64\u65f6\u9700\u8981\u901a\u8fc7 Reference \u4e2d\u7684\u4fe1\u606f\u6784\u5efa OpenTelemetry \u7684 ParentSpanId\u3002

\u4ee3\u7801\u5b9e\u73b0\u89c1 GitHub\uff1aSkywalking Receiver

\u6700\u540e\uff0c\u6211\u4eec\u6765\u770b\u5982\u4f55\u5728 OpenTelemetry Span \u4e2d\u4fdd\u7559 SkyWalking \u7684\u539f\u59cb TraceId\u3001SegmentId\u3001SpanId\u3002 \u6211\u4eec\u643a\u5e26\u8fd9\u4e9b\u539f\u59cb\u4fe1\u606f\u662f\u4e3a\u4e86\u80fd\u5c06\u5206\u5e03\u5f0f\u8ffd\u8e2a\u540e\u7aef\u5c55\u73b0\u7684 OpenTelemetry TraceId\u3001SpanId \u4e0e\u5e94\u7528\u7a0b\u5e8f\u65e5\u5fd7\u4e2d\u7684 SkyWalking TraceId\u3001SegmentId\u3001SpanId \u8fdb\u884c\u5173\u8054\uff0c\u6253\u901a\u8ffd\u8e2a\u548c\u65e5\u5fd7\u3002\u6211\u4eec\u9009\u62e9\u5c06 SkyWalking \u4e2d\u539f\u6709\u7684 TraceId\u3001SegmentId\u3001ParentSegmentId \u643a\u5e26\u5230 OpenTelemetry Attributes \u4e2d\u3002

Info

\u4ee3\u7801\u5b9e\u73b0\u89c1 GitHub\uff1a

  1. \u4ee3\u7801\u5b9e\u73b0\u89c1 GitHub\uff1aSkywalking Receiver
  2. Add extra link attributes from skywalking ref

\u7ecf\u8fc7\u4e0a\u8ff0\u4e00\u7cfb\u5217\u8f6c\u6362\u540e\uff0c\u6211\u4eec\u5c06 SkyWalking Segment Object \u5b8c\u6574\u7684\u8f6c\u6362\u4e3a\u4e86 OpenTelmetry Trace\uff0c\u5982\u4e0b\u56fe\uff1a

"},{"location":"admin/insight/best-practice/sw-to-otel.html#demo","title":"\u90e8\u7f72 Demo","text":"

\u4e0b\u9762\u6211\u4eec\u4ee5\u4e00\u4e2a Demo \u6765\u5c55\u793a\u4f7f\u7528 OpenTelemetry \u6536\u96c6\u3001\u5c55\u793a SkyWalking \u8ffd\u8e2a\u6570\u636e\u7684\u5b8c\u6574\u8fc7\u7a0b\u3002

\u9996\u5148\uff0c\u5728\u90e8\u7f72 OpenTelemetry Agent \u4e4b\u540e\uff0c\u5f00\u542f\u5982\u4e0b\u914d\u7f6e\uff0c\u5373\u53ef\u5728 OpenTelemetry \u4e2d\u62e5\u6709\u517c\u5bb9 SkyWalking \u534f\u8bae\u7684\u80fd\u529b\uff1a

# otel-agent config\nreceivers:\n  # add the following config\n  skywalking:\n    protocols:\n      grpc:\n        endpoint: 0.0.0.0:11800 # \u63a5\u6536 SkyWalking Agent \u4e0a\u62a5\u7684 Trace \u6570\u636e\n      http: \n        endpoint: 0.0.0.0:12800 # \u63a5\u6536\u4ece\u524d\u7aef/ nginx \u7b49 HTTP \u534f\u8bae\u4e0a\u62a5\u7684 Trace \u6570\u636e\nservice: \n  pipelines: \n    traces:      \n      # add receiver __skywalking__ \n      receivers: [skywalking]\n\n# otel-agent service yaml\nspec:\n  ports: \n    - name: sw-http\n      port: 12800    \n      protocol: TCP    \n      targetPort: 12800 \n    - name: sw-grpc     \n      port: 11800 \n      protocol: TCP  \n      targetPort: 11800\n

\u63a5\u4e0b\u6765\u9700\u8981\u5c06\u4e1a\u52a1\u5e94\u7528\u5bf9\u63a5\u7684 SkyWalking OAP Service\uff08\u5982 oap:11800\uff09\u4fee\u6539\u4e3a OpenTelemetry Agent Service\uff08\u5982 otel-agent:11800\uff09\uff0c \u5c31\u53ef\u4ee5\u5f00\u59cb\u4f7f\u7528 OpenTelemetry \u63a5\u6536 SkyWalking \u63a2\u9488\u7684\u8ffd\u8e2a\u6570\u636e\u4e86\u3002

\u6211\u4eec\u4ee5 SkyWalking-showcase Demo \u4e3a\u4f8b\u5c55\u793a\u6574\u4e2a\u6548\u679c\u3002\u5b83\u4f7f\u7528 SkyWalking Agent \u505a\u8ffd\u8e2a\uff0c\u901a\u8fc7 OpenTelemetry \u6807\u51c6\u5316\u5904\u7406\u540e\u4f7f\u7528 Jaeger \u6765\u5448\u73b0\u6700\u7ec8\u6548\u679c\uff1a

\u901a\u8fc7 SkyWalking Showcase \u7684\u67b6\u6784\u56fe\uff0c\u53ef\u77e5 SkyWalking \u7684\u6570\u636e\u7ecf\u8fc7 OpenTelemetry \u6807\u51c6\u5316\u540e\uff0c\u4f9d\u7136\u5b8c\u6574\u3002\u5728\u8fd9\u4e2a Trace \u91cc\uff0c \u8bf7\u6c42\u4ece app/homepage \u53d1\u8d77\uff0c\u4e4b\u540e\u5728 app \u540c\u65f6\u53d1\u8d77\u4e24\u4e2a\u8bf7\u6c42 /rcmd/\u4e0e/songs/top\uff0c\u5206\u53d1\u5230 recommandation/songs \u4e24\u4e2a\u670d\u52a1\u4e2d\uff0c \u5e76\u6700\u7ec8\u5230\u8fbe\u6570\u636e\u5e93\u8fdb\u884c\u67e5\u8be2\uff0c\u4ece\u800c\u5b8c\u6210\u6574\u4e2a\u8bf7\u6c42\u94fe\u8def\u3002

\u53e6\u5916\uff0c\u6211\u4eec\u4e5f\u53ef\u4ece Jaeger \u9875\u9762\u4e2d\u67e5\u770b\u5230\u539f\u59cb SkyWalking Id \u4fe1\u606f\uff0c\u4fbf\u4e8e\u4e0e\u5e94\u7528\u65e5\u5fd7\u5173\u8054\uff1a

"},{"location":"admin/insight/best-practice/tail-based-sampling.html","title":"\u94fe\u8def\u6570\u636e\u91c7\u6837\u4ecb\u7ecd\u4e0e\u914d\u7f6e","text":"

\u4f7f\u7528\u5206\u5e03\u5f0f\u94fe\u8def\u8ddf\u8e2a\uff0c\u53ef\u4ee5\u5728\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u89c2\u5bdf\u8bf7\u6c42\u5982\u4f55\u5728\u5404\u4e2a\u7cfb\u7edf\u4e2d\u6d41\u8f6c\u3002\u4e0d\u53ef\u5426\u8ba4\uff0c\u5b83\u975e\u5e38\u5b9e\u7528\uff0c\u4f8b\u5982\u4e86\u89e3\u60a8\u7684\u670d\u52a1\u8fde\u63a5\u548c\u8bca\u65ad\u5ef6\u8fdf\u95ee\u9898\uff0c\u4ee5\u53ca\u8bb8\u591a\u5176\u4ed6\u597d\u5904\u3002

\u4f46\u662f\uff0c\u5982\u679c\u60a8\u7684\u5927\u591a\u6570\u8bf7\u6c42\u90fd\u6210\u529f\u4e86\uff0c\u5e76\u4e14\u6ca1\u6709\u51fa\u73b0\u4e0d\u53ef\u63a5\u53d7\u7684\u5ef6\u8fdf\u6216\u9519\u8bef\uff0c\u90a3\u4e48\u60a8\u771f\u7684\u9700\u8981\u6240\u6709\u8fd9\u4e9b\u6570\u636e\u5417\uff1f\u6240\u4ee5\uff0c\u4f60\u5e76\u4e0d\u603b\u662f\u9700\u8981\u5927\u91cf\u6216\u8005\u5168\u91cf\u7684\u6570\u636e\u6765\u627e\u5230\u6b63\u786e\u7684\u89c1\u89e3\u3002\u60a8\u53ea\u9700\u8981\u901a\u8fc7\u6070\u5f53\u7684\u6570\u636e\u91c7\u6837\u5373\u53ef\u3002

\u91c7\u6837\u80cc\u540e\u7684\u60f3\u6cd5\u662f\u63a7\u5236\u53d1\u9001\u5230\u53ef\u89c2\u5bdf\u6027\u6536\u96c6\u5668\u7684\u94fe\u8def\uff0c\u4ece\u800c\u964d\u4f4e\u91c7\u96c6\u6210\u672c\u3002\u4e0d\u540c\u7684\u7ec4\u7ec7\u6709\u4e0d\u540c\u7684\u539f\u56e0\uff0c\u6bd4\u5982\u4e3a\u4ec0\u4e48\u8981\u62bd\u6837\uff0c\u4ee5\u53ca\u60f3\u8981\u62bd\u6837\u4ec0\u4e48\u6768\u7684\u6570\u636e\u3002\u6240\u4ee5\uff0c\u6211\u4eec\u9700\u8981\u81ea\u5b9a\u4e49\u91c7\u6837\u7b56\u7565\uff1a

  • \u7ba1\u7406\u6210\u672c\uff1a\u5982\u679c\u9700\u8981\u5b58\u50a8\u5927\u91cf\u7684\u9065\u6d4b\u6570\u636e\uff0c\u5219\u9700\u8981\u4ed8\u51fa\u66f4\u591a\u7684\u8ba1\u7b97\u3001\u5b58\u50a8\u6210\u672c\u3002
  • \u5173\u6ce8\u6709\u8da3\u7684\u8ddf\u8e2a\uff1a\u4e0d\u540c\u7ec4\u7ec7\u5173\u6ce8\u7684\u6570\u636e\u4e5f\u4e0d\u540c\u3002
  • \u8fc7\u6ee4\u6389\u566a\u97f3\uff1a\u4f8b\u5982\uff0c\u60a8\u53ef\u80fd\u5e0c\u671b\u8fc7\u6ee4\u6389\u5065\u5eb7\u68c0\u67e5\u3002

\u5728\u8ba8\u8bba\u91c7\u6837\u65f6\u4f7f\u7528\u4e00\u81f4\u7684\u672f\u8bed\u662f\u5f88\u91cd\u8981\u7684\u3002Trace \u6216 Span \u88ab\u89c6\u4e3a \u91c7\u6837 \u6216 \u672a\u91c7\u6837\uff1a

  • \u91c7\u6837\uff1aTrace \u6216 Span \u88ab\u5904\u7406\u5e76\u4fdd\u5b58\u3002\u4e3a\u5b83\u88ab\u91c7\u6837\u8005\u9009\u62e9\u4e3a\u603b\u4f53\u7684\u4ee3\u8868\uff0c\u6240\u4ee5\u5b83\u88ab\u8ba4\u4e3a\u662f \u91c7\u6837\u7684\u3002
  • \u672a\u91c7\u6837\uff1a\u4e0d\u88ab\u5904\u7406\u6216\u4fdd\u5b58\u7684 Trace \u6216 Span\u3002\u56e0\u4e3a\u5b83\u4e0d\u662f\u7531\u91c7\u6837\u5668\u9009\u62e9\u7684\uff0c\u6240\u4ee5\u88ab\u8ba4\u4e3a\u662f \u672a\u91c7\u6837\u3002
"},{"location":"admin/insight/best-practice/tail-based-sampling.html#_2","title":"\u91c7\u6837\u7684\u65b9\u5f0f\u6709\u54ea\u4e9b\uff1f","text":""},{"location":"admin/insight/best-practice/tail-based-sampling.html#head-sampling","title":"\u5934\u90e8\u91c7\u6837\uff08Head Sampling\uff09","text":"

\u5934\u90e8\u62bd\u6837\u662f\u4e00\u79cd\u7528\u4e8e\u5c3d\u65e9\u505a\u51fa\u62bd\u6837\u51b3\u5b9a\u7684\u91c7\u6837\u6280\u672f\u3002\u91c7\u6837\u6216\u5220\u9664 Trace/Span \u7684\u51b3\u5b9a\u4e0d\u662f\u901a\u8fc7\u68c0\u67e5\u6574\u4e2a Trace \u6765\u505a\u51fa\u7684\u3002

\u4f8b\u5982\uff0c\u6700\u5e38\u89c1\u7684\u5934\u90e8\u91c7\u6837\u5f62\u5f0f\u662f\u4e00\u81f4\u6982\u7387\u91c7\u6837\u3002\u5b83\u4e5f\u53ef\u4ee5\u79f0\u4e3a\u786e\u5b9a\u6027\u91c7\u6837\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5c06\u6839\u636e TraceID \u548c\u8981\u91c7\u6837\u7684\u6240\u9700 Trace \u767e\u5206\u6bd4\u505a\u51fa\u91c7\u6837\u51b3\u7b56\u3002\u8fd9\u53ef\u786e\u4fdd\u4ee5\u4e00\u81f4\u7684\u901f\u7387\uff08\u4f8b\u5982\u6240\u6709 Trace\u7684 5%\uff09\u5bf9\u6574\u4e2a Trace \u8fdb\u884c\u91c7\u6837\u5e76\u4e14\u4e0d\u9057\u6f0f Span\u3002

\u5934\u90e8\u91c7\u6837\u7684\u597d\u5904\u662f\uff1a - \u6613\u4e8e\u7406\u89e3 - \u6613\u4e8e\u914d\u7f6e - \u9ad8\u6548 - \u53ef\u4ee5\u5728\u8ddf\u8e2a\u6536\u96c6\u7ba1\u9053\u4e2d\u7684\u4efb\u4f55\u4f4d\u7f6e\u5b8c\u6210

\u5934\u90e8\u91c7\u6837\u7684\u4e3b\u8981\u7f3a\u70b9\u662f\u65e0\u6cd5\u6839\u636e\u6574\u4e2a Trace \u4e2d\u7684\u6570\u636e\u505a\u51fa\u91c7\u6837\u51b3\u7b56\u3002\u8fd9\u610f\u5473\u7740\u5934\u90e8\u62bd\u6837\u4f5c\u4e3a\u4e00\u79cd\u949d\u5668\u662f\u6709\u6548\u7684\uff0c\u4f46\u5bf9\u4e8e\u5fc5\u987b\u8003\u8651\u6574\u4e2a\u7cfb\u7edf\u4fe1\u606f\u7684\u62bd\u6837\u7b56\u7565\u6765\u8bf4\uff0c\u8fd9\u662f\u5b8c\u5168\u4e0d\u591f\u7684\u3002\u4f8b\u5982\uff0c\u65e0\u6cd5\u4f7f\u7528\u5934\u90e8\u91c7\u6837\u6765\u786e\u4fdd\u5bf9\u6240\u6709\u5177\u6709\u8bef\u5dee\u7684\u8ff9\u7ebf\u8fdb\u884c\u91c7\u6837\u3002\u4e3a\u6b64\uff0c\u60a8\u9700\u8981\u5c3e\u90e8\u91c7\u6837\u3002

"},{"location":"admin/insight/best-practice/tail-based-sampling.html#tail-sampling","title":"\u5c3e\u90e8\u91c7\u6837\uff08Tail Sampling\uff09\u2014\u2014 \u63a8\u8350\u65b9\u6848","text":"

\u5c3e\u90e8\u91c7\u6837\u662f\u901a\u8fc7\u8003\u8651 Trace \u5185\u7684\u5168\u90e8\u6216\u5927\u90e8\u5206 Span \u6765\u51b3\u5b9a\u5bf9 Trace \u8fdb\u884c\u91c7\u6837\u3002\u5c3e\u90e8\u91c7\u6837\u5141\u8bb8\u60a8\u6839\u636e\u4ece Trace \u7684\u4e0d\u540c\u90e8\u5206\u4f7f\u7528\u7684\u7279\u5b9a\u6761\u4ef6\u5bf9 Trace \u8fdb\u884c\u91c7\u6837\uff0c\u800c\u5934\u90e8\u91c7\u6837\u5219\u4e0d\u5177\u6709\u6b64\u9009\u9879\u3002

\u5982\u4f55\u4f7f\u7528\u5c3e\u90e8\u91c7\u6837\u7684\u4e00\u4e9b\u793a\u4f8b\u5305\u62ec\uff1a

  • \u59cb\u7ec8\u5bf9\u5305\u542b\u9519\u8bef\u7684 Trace \u8fdb\u884c\u91c7\u6837
  • \u57fa\u4e8e\u603b\u4f53\u5ef6\u8fdf\u7684\u91c7\u6837
  • \u6839\u636e Trace \u4e2d\u4e00\u4e2a\u6216\u591a\u4e2a Span \u4e0a\u7279\u5b9a\u5c5e\u6027\u7684\u5b58\u5728\u6216\u503c\u5bf9 Trace \u8fdb\u884c\u91c7\u6837; \u4f8b\u5982\uff0c\u5bf9\u6e90\u81ea\u65b0\u90e8\u7f72\u7684\u670d\u52a1\u7684\u66f4\u591a Trace \u8fdb\u884c\u91c7\u6837
  • \u6839\u636e\u7279\u5b9a\u6761\u4ef6\u5bf9 Trace \u5e94\u7528\u4e0d\u540c\u7684\u91c7\u6837\u7387

\u6b63\u5982\u4f60\u6240\u770b\u5230\u7684\uff0c\u5c3e\u90e8\u91c7\u6837\u6709\u7740\u66f4\u9ad8\u7a0b\u5ea6\u7684\u590d\u6742\u5ea6\u3002\u5bf9\u4e8e\u5fc5\u987b\u5bf9\u9065\u6d4b\u6570\u636e\u8fdb\u884c\u91c7\u6837\u7684\u5927\u578b\u7cfb\u7edf\uff0c\u51e0\u4e4e\u603b\u662f\u9700\u8981\u4f7f\u7528\u5c3e\u90e8\u91c7\u6837\u6765\u5e73\u8861\u6570\u636e\u91cf\u548c\u6570\u636e\u7684\u6709\u7528\u6027\u3002

\u5982\u4eca\uff0c\u5c3e\u90e8\u91c7\u6837\u6709\u4e09\u4e2a\u4e3b\u8981\u7f3a\u70b9\uff1a

  • \u5c3e\u90e8\u91c7\u6837\u53ef\u80fd\u96be\u4ee5\u64cd\u4f5c\u3002\u5b9e\u73b0\u5c3e\u90e8\u91c7\u6837\u7684\u7ec4\u4ef6\u5fc5\u987b\u662f\u53ef\u4ee5\u63a5\u53d7\u548c\u5b58\u50a8\u5927\u91cf\u6570\u636e\u7684\u6709\u72b6\u6001\u7cfb\u7edf\u3002\u6839\u636e\u6d41\u91cf\u6a21\u5f0f\uff0c\u8fd9\u53ef\u80fd\u9700\u8981\u6570\u5341\u4e2a\u751a\u81f3\u6570\u767e\u4e2a\u8282\u70b9\uff0c\u8fd9\u4e9b\u8282\u70b9\u90fd\u4ee5\u4e0d\u540c\u7684\u65b9\u5f0f\u5229\u7528\u8d44\u6e90\u3002\u6b64\u5916\uff0c\u5982\u679c\u5c3e\u90e8\u91c7\u6837\u5668\u65e0\u6cd5\u8ddf\u4e0a\u63a5\u6536\u7684\u6570\u636e\u91cf\uff0c\u5219\u53ef\u80fd\u9700\u8981\u201c\u56de\u9000\u201d\u5230\u8ba1\u7b97\u5bc6\u96c6\u5ea6\u8f83\u4f4e\u7684\u91c7\u6837\u6280\u672f\u3002\u7531\u4e8e\u8fd9\u4e9b\u56e0\u7d20\uff0c\u76d1\u63a7\u5c3e\u90e8\u91c7\u6837\u7ec4\u4ef6\u4ee5\u786e\u4fdd\u5b83\u4eec\u62e5\u6709\u505a\u51fa\u6b63\u786e\u91c7\u6837\u51b3\u7b56\u6240\u9700\u7684\u8d44\u6e90\u81f3\u5173\u91cd\u8981\u3002
  • \u5c3e\u90e8\u91c7\u6837\u53ef\u80fd\u96be\u4ee5\u5b9e\u73b0\u3002\u6839\u636e\u60a8\u53ef\u7528\u7684\u91c7\u6837\u6280\u672f\u7c7b\u578b\uff0c\u5b83\u5e76\u4e0d\u603b\u662f\u201c\u4e00\u52b3\u6c38\u9038\u201d\u7684\u4e8b\u60c5\u3002\u968f\u7740\u7cfb\u7edf\u7684\u53d8\u5316\uff0c\u60a8\u7684\u91c7\u6837\u7b56\u7565\u4e5f\u4f1a\u53d1\u751f\u53d8\u5316\u3002\u5bf9\u4e8e\u5927\u578b\u800c\u590d\u6742\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u5b9e\u73b0\u91c7\u6837\u7b56\u7565\u7684\u89c4\u5219\u4e5f\u53ef\u4ee5\u662f\u5e9e\u5927\u800c\u590d\u6742\u7684\u3002
  • \u5982\u4eca\uff0c\u5c3e\u90e8\u91c7\u6837\u5668\u901a\u5e38\u6700\u7ec8\u5c5e\u4e8e\u4f9b\u5e94\u5546\u7279\u5b9a\u6280\u672f\u9886\u57df\u3002\u5982\u679c\u60a8\u4f7f\u7528\u4ed8\u8d39\u4f9b\u5e94\u5546\u6765\u5b9e\u73b0\u53ef\u89c2\u6d4b\u6027\uff0c\u5219\u53ef\u7528\u7684\u6700\u6709\u6548\u7684\u5c3e\u90e8\u91c7\u6837\u9009\u9879\u53ef\u80fd\u4ec5\u9650\u4e8e\u4f9b\u5e94\u5546\u63d0\u4f9b\u7684\u5185\u5bb9\u3002

\u6700\u540e\uff0c\u5bf9\u4e8e\u67d0\u4e9b\u7cfb\u7edf\uff0c\u5c3e\u90e8\u91c7\u6837\u53ef\u4ee5\u4e0e\u5934\u90e8\u91c7\u6837\u7ed3\u5408\u4f7f\u7528\u3002\u4f8b\u5982\uff0c\u4e00\u7ec4\u751f\u6210\u5927\u91cf Trace \u6570\u636e\u7684\u670d\u52a1\u53ef\u80fd\u9996\u5148\u4f7f\u7528\u5934\u90e8\u91c7\u6837\u4ec5\u5bf9\u4e00\u5c0f\u90e8\u5206\u8ddf\u8e2a\u8fdb\u884c\u91c7\u6837\uff0c\u7136\u540e\u5728\u9065\u6d4b\u7ba1\u9053\u4e2d\u7a0d\u540e\u4f7f\u7528\u5c3e\u90e8\u91c7\u6837\u5728\u5bfc\u51fa\u5230\u540e\u7aef\u4e4b\u524d\u505a\u51fa\u66f4\u590d\u6742\u7684\u91c7\u6837\u51b3\u7b56\u3002\u8fd9\u6837\u505a\u901a\u5e38\u662f\u4e3a\u4e86\u4fdd\u62a4\u9065\u6d4b\u7ba1\u9053\u514d\u4e8e\u8fc7\u8f7d\u3002

AI \u7b97\u529b\u4e2d\u5fc3 Insight \u76ee\u524d\u63a8\u8350\u4f7f\u7528\u5c3e\u90e8\u91c7\u6837\u5e76\u4f18\u5148\u652f\u6301\u5c3e\u90e8\u91c7\u6837\u3002

\u5c3e\u90e8\u91c7\u6837\u5904\u7406\u5668\u6839\u636e\u4e00\u7ec4\u5b9a\u4e49\u7684\u7b56\u7565\u5bf9\u94fe\u8def\u8fdb\u884c\u91c7\u6837\u3002\u4f46\u662f\uff0c\u94fe\u8def\u7684\u6240\u6709\u8de8\u5ea6\uff08Span\uff09\u5fc5\u987b\u7531\u540c\u4e00\u6536\u96c6\u5668\u5b9e\u4f8b\u63a5\u6536\uff0c\u4ee5\u505a\u51fa\u6709\u6548\u7684\u91c7\u6837\u51b3\u7b56\u3002

\u56e0\u6b64\uff0c\u9700\u8981\u5bf9 Insight \u7684 Global Opentelemetry Collector \u67b6\u6784\u8fdb\u884c\u8c03\u6574\u4ee5\u5b9e\u73b0\u5c3e\u90e8\u91c7\u6837\u7b56\u7565\u3002

"},{"location":"admin/insight/best-practice/tail-based-sampling.html#insight","title":"Insight \u5177\u4f53\u6539\u52a8","text":"

\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u7684 insight-opentelemetry-collector \u524d\u9762\u5f15\u5165\u5177\u6709\u8d1f\u8f7d\u5747\u8861\u80fd\u529b\u7684 Opentelemetry Collector Gateway \u7ec4\u4ef6\uff0c\u4f7f\u5f97\u540c\u4e00\u7ec4 Trace \u80fd\u591f\u6839\u636e TraceID \u8def\u7531\u5230\u540c\u4e00\u4e2a Opentelemetry Collector \u5b9e\u4f8b\u3002

  1. \u90e8\u7f72\u5177\u6709\u8d1f\u8f7d\u5747\u8861\u80fd\u529b\u7684 OTEL COL Gateway \u7ec4\u4ef6

    \u5982\u679c\u60a8\u4f7f\u7528\u4e86 Insight 0.25.x \u7248\u672c\uff0c\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0b Helm Upgrade \u53c2\u6570 --set opentelemetry-collector-gateway.enabled=true \u5feb\u901f\u5f00\u542f\uff0c\u4ee5\u6b64\u8df3\u8fc7\u5982\u4e0b\u90e8\u7f72\u8fc7\u7a0b\u3002

    \u53c2\u7167\u4ee5\u4e0b YAML \u914d\u7f6e\u6765\u90e8\u7f72\u3002

    \u70b9\u51fb\u67e5\u770b\u90e8\u7f72\u914d\u7f6e
    kind: ClusterRole\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n  name: insight-otel-collector-gateway\nrules:\n- apiGroups: [\"\"]\n  resources: [\"endpoints\"]\n  verbs: [\"get\", \"watch\", \"list\"]\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: insight-otel-collector-gateway\n  namespace: insight-system\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: insight-otel-collector-gateway\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: insight-otel-collector-gateway\nsubjects:\n- kind: ServiceAccount\n  name: insight-otel-collector-gateway\n  namespace: insight-system\n---\nkind: ConfigMap\nmetadata:\n  labels:\n    app.kubernetes.io/component: opentelemetry-collector\n    app.kubernetes.io/instance: insight-otel-collector-gateway\n    app.kubernetes.io/name: insight-otel-collector-gateway\n  name: insight-otel-collector-gateway-collector\n  namespace: insight-system\napiVersion: v1\ndata:\n  collector.yaml: |\n    receivers:\n      otlp:\n        protocols:\n          grpc:\n          http:\n      jaeger:\n        protocols:\n          grpc:\n    processors:\n\n    extensions:\n      health_check:\n      pprof:\n        endpoint: :1888\n      zpages:\n        endpoint: :55679\n    exporters:\n      logging:\n      loadbalancing:\n        routing_key: \"traceID\"\n        protocol:\n          otlp:\n            # all options from the OTLP exporter are supported\n            # except the endpoint\n            timeout: 1s\n            tls:\n              insecure: true\n        resolver:\n          k8s:\n            service: insight-opentelemetry-collector\n            ports:\n              - 4317\n    service:\n      extensions: [pprof, zpages, health_check]\n      pipelines:\n        traces:\n          receivers: [otlp, jaeger]\n          exporters: [loadbalancing]\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  labels:\n    app.kubernetes.io/component: opentelemetry-collector\n    app.kubernetes.io/instance: insight-otel-collector-gateway\n    app.kubernetes.io/name: insight-otel-collector-gateway\n  name: insight-otel-collector-gateway\n  namespace: insight-system\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app.kubernetes.io/component: opentelemetry-collector\n      app.kubernetes.io/instance: insight-otel-collector-gateway\n      app.kubernetes.io/name: insight-otel-collector-gateway\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io/component: opentelemetry-collector\n        app.kubernetes.io/instance: insight-otel-collector-gateway\n        app.kubernetes.io/name: insight-otel-collector-gateway\n    spec:\n      containers:\n      - args:\n        - --config=/conf/collector.yaml\n        env:\n        - name: POD_NAME\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: metadata.name\n        image: ghcr.m.daocloud.io/openinsight-proj/opentelemetry-collector-contrib:5baef686672cfe5551e03b5c19d3072c432b6f33\n        imagePullPolicy: IfNotPresent\n        livenessProbe:\n          failureThreshold: 3\n          httpGet:\n            path: /\n            port: 13133\n            scheme: HTTP\n          periodSeconds: 10\n          successThreshold: 1\n          timeoutSeconds: 1\n        name: otc-container\n        resources:\n          limits:\n            cpu: '1'\n            memory: 2Gi\n          requests:\n            cpu: 100m\n            memory: 400Mi\n        ports:\n        - containerPort: 14250\n          name: jaeger-grpc\n          protocol: TCP\n        - containerPort: 8888\n          name: metrics\n          protocol: TCP\n        - containerPort: 4317\n          name: otlp-grpc\n          protocol: TCP\n        - containerPort: 4318\n          name: otlp-http\n          protocol: TCP\n        - containerPort: 55679\n          name: zpages\n          protocol: TCP\n\n        volumeMounts:\n        - mountPath: /conf\n          name: otc-internal\n\n      serviceAccount: insight-otel-collector-gateway\n      serviceAccountName: insight-otel-collector-gateway\n      volumes:\n      - configMap:\n          defaultMode: 420\n          items:\n          - key: collector.yaml\n            path: collector.yaml\n          name: insight-otel-collector-gateway-collector\n        name: otc-internal\n---\nkind: Service\napiVersion: v1\nmetadata:\n  name: insight-opentelemetry-collector-gateway\n  namespace: insight-system\n  labels:\n    app.kubernetes.io/component: opentelemetry-collector\n    app.kubernetes.io/instance: insight-otel-collector-gateway\n    app.kubernetes.io/name: insight-otel-collector-gateway\nspec:\n  ports:\n    - name: fluentforward\n      protocol: TCP\n      port: 8006\n      targetPort: 8006\n    - name: jaeger-compact\n      protocol: UDP\n      port: 6831\n      targetPort: 6831\n    - name: jaeger-grpc\n      protocol: TCP\n      port: 14250\n      targetPort: 14250\n    - name: jaeger-thrift\n      protocol: TCP\n      port: 14268\n      targetPort: 14268\n    - name: metrics\n      protocol: TCP\n      port: 8888\n      targetPort: 8888\n    - name: otlp\n      protocol: TCP\n      appProtocol: grpc\n      port: 4317\n      targetPort: 4317\n    - name: otlp-http\n      protocol: TCP\n      port: 4318\n      targetPort: 4318\n    - name: zipkin\n      protocol: TCP\n      port: 9411\n      targetPort: 9411\n    - name: zpages\n      protocol: TCP\n      port: 55679\n      targetPort: 55679\n  selector:\n    app.kubernetes.io/component: opentelemetry-collector\n    app.kubernetes.io/instance: insight-otel-collector-gateway\n    app.kubernetes.io/name: insight-otel-collector-gateway\n
  2. \u914d\u7f6e\u5c3e\u90e8\u91c7\u6837\u89c4\u5219

    Note

    \u9700\u8981\u5728\u539f\u672c insight-otel-collector-config configmap \u914d\u7f6e\u7ec4\u4e2d\u589e\u52a0\u5c3e\u90e8\u91c7\u6837\uff08tail_sampling processors\uff09\u7684\u89c4\u5219\u3002

  3. \u5728 processor \u4e2d\u589e\u52a0\u5982\u4e0b\u5185\u5bb9\uff0c\u5177\u4f53\u89c4\u5219\u53ef\u8c03\u6574\uff1b\u53c2\u8003 OTel \u5b98\u65b9\u793a\u4f8b\u3002

    ........\ntail_sampling:\n  decision_wait: 10s # \u7b49\u5f85 10 \u79d2\uff0c\u8d85\u8fc7 10 \u79d2\u540e\u7684 traceid \u5c06\u4e0d\u518d\u5904\u7406\n  num_traces: 1500000  # \u5185\u5b58\u4e2d\u4fdd\u5b58\u7684 trace \u6570\uff0c\u5047\u8bbe\u6bcf\u79d2 1000 \u6761 trace\uff0c\u6700\u5c0f\u4e0d\u4f4e\u4e8e 1000 * decision_wait * 2\uff1b\n                       # \u8bbe\u7f6e\u8fc7\u5927\u4f1a\u5360\u7528\u8fc7\u591a\u7684\u5185\u5b58\u8d44\u6e90\uff0c\u8fc7\u5c0f\u4f1a\u5bfc\u81f4\u90e8\u5206 trace \u88ab drop \u6389\n  expected_new_traces_per_sec: 10\n  policies: # \u4e0a\u62a5\u7b56\u7565\n    [\n        {\n          name: latency-policy,\n          type: latency,  # \u8017\u65f6\u8d85\u8fc7 500ms \u4e0a\u62a5\n          latency: {threshold_ms: 500}\n        },\n        {\n          name: status_code-policy,\n          type: status_code,  # \u72b6\u6001\u7801\u4e3a ERROR \u7684\u4e0a\u62a5\n          status_code: {status_codes: [ ERROR ]}\n        }\n    ]\n......\ntail_sampling: # \u7ec4\u5408\u91c7\u6837\n  decision_wait: 10s # \u7b49\u5f85 10 \u79d2\uff0c\u8d85\u8fc7 10 \u79d2\u540e\u7684 traceid \u5c06\u4e0d\u518d\u5904\u7406\n  num_traces: 1500000  # \u5185\u5b58\u4e2d\u4fdd\u5b58\u7684 trace \u6570\uff0c\u5047\u8bbe\u6bcf\u79d2 1000 \u6761 trace\uff0c\u6700\u5c0f\u4e0d\u4f4e\u4e8e 1000 * decision_wait * 2\uff1b\n                       # \u8bbe\u7f6e\u8fc7\u5927\u4f1a\u5360\u7528\u8fc7\u591a\u7684\u5185\u5b58\u8d44\u6e90\uff0c\u8fc7\u5c0f\u4f1a\u5bfc\u81f4\u90e8\u5206 trace \u88ab drop \u6389\n  expected_new_traces_per_sec: 10\n  policies: [\n      {\n        name: debug-worker-cluster-sample-policy,\n        type: and,\n        and:\n          {\n            and_sub_policy:\n              [\n                {\n                  name: service-name-policy,\n                  type: string_attribute,\n                  string_attribute:\n                    { key: k8s.cluster.id, values: [xxxxxxx] },\n                },\n                {\n                  name: trace-status-policy,\n                  type: status_code,\n                  status_code: { status_codes: [ERROR] },\n                },\n                {\n                  name: probabilistic-policy,\n                  type: probabilistic,\n                  probabilistic: { sampling_percentage: 1 },\n                }\n              ]\n          }\n      }\n    ]\n
  4. \u5728 insight-otel-collector-config configmap \u4e2d\u7684 otel col pipeline \u4e2d\u6fc0\u6d3b\u8be5 processor\uff1a

    traces:\n  exporters:\n    - servicegraph\n    - otlp/jaeger\n  processors:\n    - memory_limiter\n    - tail_sampling # \ud83d\udc48\n    - batch\n  receivers:\n    - otlp\n
  5. \u91cd\u542f insight-opentelemetry-collector \u7ec4\u4ef6\u3002

  6. \u90e8\u7f72\u6216\u66f4\u65b0 Insight-agent\uff0c\u5c06\u94fe\u8def\u6570\u636e\u7684\u4e0a\u62a5\u5730\u5740\u4fee\u6539\u4e3a opentelemetry-collector-gateway LB \u7684 4317 \u7aef\u53e3\u5730\u5740\u3002

    ....\n    exporters:\n      otlp/global:\n        endpoint: insight-opentelemetry-collector-gateway.insight-system.svc.cluster.local:4317  # \ud83d\udc48 \u4fee\u6539\u4e3a gateway/lb \u5730\u5740\n
"},{"location":"admin/insight/best-practice/tail-based-sampling.html#_3","title":"\u53c2\u8003","text":"
  • sampling
"},{"location":"admin/insight/collection-manag/agent-status.html","title":"insight-agent \u7ec4\u4ef6\u72b6\u6001\u8bf4\u660e","text":"

\u5728 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u53ef\u89c2\u6d4b\u6027 Insight \u4f5c\u4e3a\u591a\u96c6\u7fa4\u89c2\u6d4b\u4ea7\u54c1\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u7684\u7edf\u4e00\u91c7\u96c6\uff0c\u9700\u8981\u7528\u6237\u5b89\u88c5 Helm \u5e94\u7528 insight-agent \uff08\u9ed8\u8ba4\u5b89\u88c5\u5728 insight-system \u547d\u540d\u7a7a\u95f4\uff09\u3002\u53c2\u9605\u5982\u4f55\u5b89\u88c5 insight-agent \u3002

"},{"location":"admin/insight/collection-manag/agent-status.html#_1","title":"\u72b6\u6001\u8bf4\u660e","text":"

\u5728 \u53ef\u89c2\u6d4b\u6027 -> \u91c7\u96c6\u7ba1\u7406 \u90e8\u5206\u53ef\u67e5\u770b\u5404\u96c6\u7fa4\u5b89\u88c5 insight-agent \u7684\u60c5\u51b5\u3002

  • \u672a\u5b89\u88c5 \uff1a\u8be5\u96c6\u7fa4\u4e2d\u672a\u5728 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u5b89\u88c5 insight-agent
  • \u8fd0\u884c\u4e2d \uff1a\u8be5\u96c6\u7fa4\u4e2d\u6210\u529f\u5b89\u88c5 insight-agent \uff0c\u4e14\u90e8\u7f72\u7684\u6240\u6709\u7ec4\u4ef6\u5747\u5904\u4e8e\u8fd0\u884c\u4e2d\u72b6\u6001
  • \u5f02\u5e38 \uff1a\u82e5 insight-agent \u5904\u4e8e\u6b64\u72b6\u6001\uff0c\u8bf4\u660e helm \u90e8\u7f72\u5931\u8d25\u6216\u5b58\u5728\u90e8\u7f72\u7684\u7ec4\u4ef6\u5904\u4e8e\u975e\u8fd0\u884c\u4e2d\u72b6\u6001

\u53ef\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u6392\u67e5\uff1a

  1. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u82e5\u72b6\u6001\u4e3a deployed \uff0c\u5219\u6267\u884c\u4e0b\u4e00\u6b65\u3002\u82e5\u4e3a failed \uff0c\u7531\u4e8e\u4f1a\u5f71\u54cd\u5e94\u7528\u7684\u5347\u7ea7\uff0c\u5efa\u8bae\u5728 \u5bb9\u5668\u7ba1\u7406 -> helm \u5e94\u7528 \u5378\u8f7d\u540e\u91cd\u65b0\u5b89\u88c5 :

    helm list -n insight-system\n
  2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6216\u5728 \u53ef\u89c2\u6d4b\u6027 -> \u91c7\u96c6\u7ba1\u7406 \u4e2d\u67e5\u770b\u8be5\u96c6\u7fa4\u90e8\u7f72\u7684\u7ec4\u4ef6\u7684\u72b6\u6001\uff0c\u82e5\u5b58\u5728\u975e \u8fd0\u884c\u4e2d \u72b6\u6001\u7684\u5bb9\u5668\u7ec4\uff0c\u8bf7\u91cd\u542f\u5f02\u5e38\u7684\u5bb9\u5668\u7ec4\u3002

    kubectl get pods -n insight-system\n
"},{"location":"admin/insight/collection-manag/agent-status.html#_2","title":"\u8865\u5145\u8bf4\u660e","text":"
  1. insight-agent \u4e2d\u6307\u6807\u91c7\u96c6\u7ec4\u4ef6 Prometheus \u7684\u8d44\u6e90\u6d88\u8017\u4e0e\u96c6\u7fa4\u4e2d\u8fd0\u884c\u7684\u5bb9\u5668\u7ec4\u6570\u91cf\u5b58\u5728\u6b63\u6bd4\u5173\u7cfb\uff0c \u8bf7\u6839\u636e\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 Prometheus \u7684\u8d44\u6e90\uff0c\u8bf7\u53c2\u8003\uff1aPrometheus \u8d44\u6e90\u89c4\u5212

  2. \u7531\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u6307\u6807\u5b58\u50a8\u7ec4\u4ef6 vmstorage \u7684\u5b58\u50a8\u5bb9\u91cf\u4e0e\u5404\u4e2a\u96c6\u7fa4\u5bb9\u5668\u7ec4\u6570\u91cf\u603b\u548c\u5b58\u5728\u6b63\u6bd4\u5173\u7cfb\u3002

    • \u8bf7\u8054\u7cfb\u5e73\u53f0\u7ba1\u7406\u5458\u6839\u636e\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\u5bb9\u91cf\uff0c\u53c2\u9605 vmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212
    • \u6839\u636e\u591a\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 vmstorage \u78c1\u76d8\uff0c\u53c2\u9605 vmstorge \u78c1\u76d8\u6269\u5bb9
"},{"location":"admin/insight/collection-manag/collection-manag.html","title":"\u91c7\u96c6\u7ba1\u7406","text":"

\u91c7\u96c6\u7ba1\u7406 \u4e3b\u8981\u662f\u96c6\u4e2d\u7ba1\u7406\u3001\u5c55\u793a\u96c6\u7fa4\u5b89\u88c5\u91c7\u96c6\u63d2\u4ef6 insight-agent \u7684\u5165\u53e3\uff0c\u5e2e\u52a9\u7528\u6237\u5feb\u901f\u7684\u67e5\u770b\u96c6\u7fa4\u91c7\u96c6\u63d2\u4ef6\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u5e76\u63d0\u4f9b\u4e86\u5feb\u6377\u5165\u53e3\u914d\u7f6e\u91c7\u96c6\u89c4\u5219\u3002

\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u70b9\u51fb\u5de6\u4e0a\u89d2\u7684\uff0c\u9009\u62e9 \u53ef\u89c2\u6d4b\u6027 \u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u91c7\u96c6\u7ba1\u7406 \uff0c\u67e5\u770b\u5168\u90e8\u96c6\u7fa4\u91c7\u96c6\u63d2\u4ef6\u7684\u72b6\u6001\u3002

  3. \u96c6\u7fa4\u63a5\u5165 insight-agent \u4e14\u5904\u4e8e\u8fd0\u884c\u4e2d\u72b6\u6001\u65f6\uff0c\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u540d\u79f0\u8fdb\u5165\u8be6\u60c5\u3002

  4. \u5728 \u670d\u52a1\u76d1\u63a7 \u9875\u7b7e\u4e2d\uff0c\u70b9\u51fb\u5feb\u6377\u94fe\u63a5\u8df3\u8f6c\u5230 \u5bb9\u5668\u7ba1\u7406 -> \u81ea\u5b9a\u4e49\u8d44\u6e90 \u6dfb\u52a0\u670d\u52a1\u53d1\u73b0\u89c4\u5219\u3002

"},{"location":"admin/insight/collection-manag/metric-collect.html","title":"\u6307\u6807\u6293\u53d6\u65b9\u5f0f","text":"

Prometheus \u4e3b\u8981\u901a\u8fc7 Pull \u7684\u65b9\u5f0f\u6765\u6293\u53d6\u76ee\u6807\u670d\u52a1\u66b4\u9732\u51fa\u6765\u7684\u76d1\u63a7\u63a5\u53e3\uff0c\u56e0\u6b64\u9700\u8981\u914d\u7f6e\u5bf9\u5e94\u7684\u6293\u53d6\u4efb\u52a1\u6765\u8bf7\u6c42\u76d1\u63a7\u6570\u636e\u5e76\u5199\u5165\u5230 Prometheus \u63d0\u4f9b\u7684\u5b58\u50a8\u4e2d\uff0c\u76ee\u524d Prometheus \u670d\u52a1\u63d0\u4f9b\u4e86\u5982\u4e0b\u51e0\u4e2a\u4efb\u52a1\u7684\u914d\u7f6e\uff1a

  • \u539f\u751f Job \u914d\u7f6e\uff1a\u63d0\u4f9b Prometheus \u539f\u751f\u6293\u53d6 Job \u7684\u914d\u7f6e\u3002
  • Pod Monitor\uff1a\u5728 K8S \u751f\u6001\u4e0b\uff0c\u57fa\u4e8e Prometheus Operator \u6765\u6293\u53d6 Pod \u4e0a\u5bf9\u5e94\u7684\u76d1\u63a7\u6570\u636e\u3002
  • Service Monitor\uff1a\u5728 K8S \u751f\u6001\u4e0b\uff0c\u57fa\u4e8e Prometheus Operator \u6765\u6293\u53d6 Service \u5bf9\u5e94 Endpoints \u4e0a\u7684\u76d1\u63a7\u6570\u636e\u3002

Note

[ ] \u4e2d\u7684\u914d\u7f6e\u9879\u4e3a\u53ef\u9009\u3002

"},{"location":"admin/insight/collection-manag/metric-collect.html#job","title":"\u539f\u751f Job \u914d\u7f6e","text":"

\u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

# \u6293\u53d6\u4efb\u52a1\u540d\u79f0\uff0c\u540c\u65f6\u4f1a\u5728\u5bf9\u5e94\u6293\u53d6\u7684\u6307\u6807\u4e2d\u52a0\u4e86\u4e00\u4e2a label(job=job_name)\njob_name: <job_name>\n\n# \u6293\u53d6\u4efb\u52a1\u65f6\u95f4\u95f4\u9694\n[ scrape_interval: <duration> | default = <global_config.scrape_interval> ]\n\n# \u6293\u53d6\u8bf7\u6c42\u8d85\u65f6\u65f6\u95f4\n[ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ]\n\n# \u6293\u53d6\u4efb\u52a1\u8bf7\u6c42 URI \u8def\u5f84\n[ metrics_path: <path> | default = /metrics ]\n\n# \u89e3\u51b3\u5f53\u6293\u53d6\u7684 label \u4e0e\u540e\u7aef Prometheus \u6dfb\u52a0 label \u51b2\u7a81\u65f6\u7684\u5904\u7406\u3002\n# true: \u4fdd\u7559\u6293\u53d6\u5230\u7684 label\uff0c\u5ffd\u7565\u4e0e\u540e\u7aef Prometheus \u51b2\u7a81\u7684 label\uff1b\n# false: \u5bf9\u51b2\u7a81\u7684 label\uff0c\u628a\u6293\u53d6\u7684 label \u524d\u52a0\u4e0a exported_<original-label>\uff0c\u6dfb\u52a0\u540e\u7aef Prometheus \u589e\u52a0\u7684 label\uff1b\n[ honor_labels: <boolean> | default = false ]\n\n# \u662f\u5426\u4f7f\u7528\u6293\u53d6\u5230 target \u4e0a\u4ea7\u751f\u7684\u65f6\u95f4\u3002\n# true: \u5982\u679c target \u4e2d\u6709\u65f6\u95f4\uff0c\u4f7f\u7528 target \u4e0a\u7684\u65f6\u95f4\uff1b\n# false: \u76f4\u63a5\u5ffd\u7565 target \u4e0a\u7684\u65f6\u95f4\uff1b\n[ honor_timestamps: <boolean> | default = true ]\n\n# \u6293\u53d6\u534f\u8bae: http \u6216\u8005 https\n[ scheme: <scheme> | default = http ]\n\n# \u6293\u53d6\u8bf7\u6c42\u5bf9\u5e94 URL \u53c2\u6570\nparams:\n  [ <string>: [<string>, ...] ]\n\n# \u901a\u8fc7 basic auth \u8bbe\u7f6e\u6293\u53d6\u8bf7\u6c42\u5934\u4e2d `Authorization` \u7684\u503c\uff0cpassword/password_file \u4e92\u65a5\uff0c\u4f18\u5148\u53d6 password_file \u91cc\u9762\u7684\u503c\u3002\nbasic_auth:\n  [ username: <string> ]\n  [ password: <secret> ]\n  [ password_file: <string> ]\n\n# \u901a\u8fc7 bearer token \u8bbe\u7f6e\u6293\u53d6\u8bf7\u6c42\u5934\u4e2d `Authorization` bearer_token/bearer_token_file \u4e92\u65a5\uff0c\u4f18\u5148\u53d6 bearer_token \u91cc\u9762\u7684\u503c\u3002\n[ bearer_token: <secret> ]\n\n# \u901a\u8fc7 bearer token \u8bbe\u7f6e\u6293\u53d6\u8bf7\u6c42\u5934\u4e2d `Authorization` bearer_token/bearer_token_file \u4e92\u65a5\uff0c\u4f18\u5148\u53d6 bearer_token \u91cc\u9762\u7684\u503c\u3002\n[ bearer_token_file: <filename> ]\n\n# \u6293\u53d6\u8fde\u63a5\u662f\u5426\u901a\u8fc7 TLS \u5b89\u5168\u901a\u9053\uff0c\u914d\u7f6e\u5bf9\u5e94\u7684 TLS \u53c2\u6570\ntls_config:\n  [ <tls_config> ]\n\n# \u901a\u8fc7\u4ee3\u7406\u670d\u52a1\u6765\u6293\u53d6 target \u4e0a\u7684\u6307\u6807\uff0c\u586b\u5199\u5bf9\u5e94\u7684\u4ee3\u7406\u670d\u52a1\u5730\u5740\u3002\n[ proxy_url: <string> ]\n\n# \u901a\u8fc7\u9759\u6001\u914d\u7f6e\u6765\u6307\u5b9a target\uff0c\u8be6\u89c1\u4e0b\u9762\u7684\u8bf4\u660e\u3002\nstatic_configs:\n  [ - <static_config> ... ]\n\n# CVM \u670d\u52a1\u53d1\u73b0\u914d\u7f6e\uff0c\u8be6\u89c1\u4e0b\u9762\u7684\u8bf4\u660e\u3002\ncvm_sd_configs:\n  [ - <cvm_sd_config> ... ]\n\n# \u5728\u6293\u53d6\u6570\u636e\u4e4b\u540e\uff0c\u628a target \u4e0a\u5bf9\u5e94\u7684 label \u901a\u8fc7 relabel \u7684\u673a\u5236\u8fdb\u884c\u6539\u5199\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\u3002\nrelabel_configs:\n  [ - <relabel_config> ... ]\n\n# \u6570\u636e\u6293\u53d6\u5b8c\u6210\u5199\u5165\u4e4b\u524d\uff0c\u901a\u8fc7 relabel \u673a\u5236\u8fdb\u884c\u6539\u5199 label \u5bf9\u5e94\u7684\u503c\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\u3002\nmetric_relabel_configs:\n  [ - <relabel_config> ... ]\n\n# \u4e00\u6b21\u6293\u53d6\u6570\u636e\u70b9\u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n[ sample_limit: <int> | default = 0 ]\n\n# \u4e00\u6b21\u6293\u53d6 Target \u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n[ target_limit: <int> | default = 0 ]\n
"},{"location":"admin/insight/collection-manag/metric-collect.html#pod-monitor","title":"Pod Monitor","text":"

\u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

# Prometheus Operator CRD \u7248\u672c\napiVersion: monitoring.coreos.com/v1\n# \u5bf9\u5e94 K8S \u7684\u8d44\u6e90\u7c7b\u578b\uff0c\u8fd9\u91cc\u9762 Pod Monitor\nkind: PodMonitor\n# \u5bf9\u5e94 K8S \u7684 Metadata\uff0c\u8fd9\u91cc\u53ea\u7528\u5173\u5fc3 name\uff0c\u5982\u679c\u6ca1\u6709\u6307\u5b9a jobLabel\uff0c\u5bf9\u5e94\u6293\u53d6\u6307\u6807 label \u4e2d job \u7684\u503c\u4e3a <namespace>/<name>\nmetadata:\n  name: redis-exporter # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus  # namespace \u56fa\u5b9a\uff0c\u4e0d\u9700\u8981\u4fee\u6539\n# \u63cf\u8ff0\u6293\u53d6\u76ee\u6807 Pod \u7684\u9009\u53d6\u53ca\u6293\u53d6\u4efb\u52a1\u7684\u914d\u7f6e\n  label:\n    operator.insight.io/managed-by: insight # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\nspec:\n  # \u586b\u5199\u5bf9\u5e94 Pod \u7684 label\uff0cpod monitor \u4f1a\u53d6\u5bf9\u5e94\u7684\u503c\u4f5c\u4e3a job label \u7684\u503c\u3002\n  # \u5982\u679c\u67e5\u770b\u7684\u662f Pod Yaml\uff0c\u53d6 pod.metadata.labels \u4e2d\u7684\u503c\u3002\n  # \u5982\u679c\u67e5\u770b\u7684\u662f Deployment/Daemonset/Statefulset\uff0c\u53d6 spec.template.metadata.labels\u3002\n  [ jobLabel: string ]\n  # \u628a\u5bf9\u5e94 Pod \u4e0a\u7684 Label \u6dfb\u52a0\u5230 Target \u7684 Label \u4e2d\n  [ podTargetLabels: []string ]\n  # \u4e00\u6b21\u6293\u53d6\u6570\u636e\u70b9\u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ sampleLimit: uint64 ]\n  # \u4e00\u6b21\u6293\u53d6 Target \u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ targetLimit: uint64 ]\n  # \u914d\u7f6e\u9700\u8981\u6293\u53d6\u66b4\u9732\u7684 Prometheus HTTP \u63a5\u53e3\uff0c\u53ef\u4ee5\u914d\u7f6e\u591a\u4e2a Endpoint\n  podMetricsEndpoints:\n  [ - <endpoint_config> ... ] # \u8be6\u89c1\u4e0b\u9762 endpoint \u8bf4\u660e\n  # \u9009\u62e9\u8981\u76d1\u63a7 Pod \u6240\u5728\u7684 namespace\uff0c\u4e0d\u586b\u4e3a\u9009\u53d6\u6240\u6709 namespace\n  [ namespaceSelector: ]\n    # \u662f\u5426\u9009\u53d6\u6240\u6709 namespace\n    [ any: bool ]\n    # \u9700\u8981\u9009\u53d6 namespace \u5217\u8868\n    [ matchNames: []string ]\n  # \u586b\u5199\u8981\u76d1\u63a7 Pod \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 Pod [K8S metav1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#labelselector-v1-meta)\n  selector:\n    [ matchExpressions: array ]\n      [ example: - {key: tier, operator: In, values: [cache]} ]\n    [ matchLabels: object ]\n      [ example: k8s-app: redis-exporter ]\n
"},{"location":"admin/insight/collection-manag/metric-collect.html#1","title":"\u4e3e\u4f8b 1","text":"
apiVersion: monitoring.coreos.com/v1\nkind: PodMonitor\nmetadata:\n  name: redis-exporter # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus # namespace \u56fa\u5b9a\uff0c\u4e0d\u8981\u4fee\u6539\n  label:\n    operator.insight.io/managed-by: insight  # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\uff0c\u5fc5\u586b\u3002\nspec:\n  podMetricsEndpoints:\n    - interval: 30s\n      port: metric-port # \u586b\u5199 pod yaml \u4e2d Prometheus Exporter \u5bf9\u5e94\u7684 Port \u7684 Name\n      path: /metrics # \u586b\u5199 Prometheus Exporter \u5bf9\u5e94\u7684 Path \u7684\u503c\uff0c\u4e0d\u586b\u9ed8\u8ba4 /metrics\n      relabelings:\n        - action: replace\n          sourceLabels:\n            - instance\n          regex: (.*)\n          targetLabel: instance\n          replacement: \"crs-xxxxxx\" # \u8c03\u6574\u6210\u5bf9\u5e94\u7684 Redis \u5b9e\u4f8b ID\n        - action: replace\n          sourceLabels:\n            - instance\n          regex: (.*)\n          targetLabel: ip\n          replacement: \"1.x.x.x\" # \u8c03\u6574\u6210\u5bf9\u5e94\u7684 Redis \u5b9e\u4f8b IP\n  namespaceSelector: # \u9009\u62e9\u8981\u76d1\u63a7 Pod \u6240\u5728\u7684 namespace\n    matchNames:\n      - redis-test\n  selector: # \u586b\u5199\u8981\u76d1\u63a7 Pod \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 pod\n    matchLabels:\n      k8s-app: redis-exporter\n
"},{"location":"admin/insight/collection-manag/metric-collect.html#2","title":"\u4e3e\u4f8b 2","text":"
job_name: prometheus\nscrape_interval: 30s\nstatic_configs:\n- targets:\n  - 127.0.0.1:9090\n
"},{"location":"admin/insight/collection-manag/metric-collect.html#service-monitor","title":"Service Monitor","text":"

\u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

# Prometheus Operator CRD \u7248\u672c\napiVersion: monitoring.coreos.com/v1\n# \u5bf9\u5e94 K8S \u7684\u8d44\u6e90\u7c7b\u578b\uff0c\u8fd9\u91cc\u9762 Service Monitor\nkind: ServiceMonitor\n# \u5bf9\u5e94 K8S \u7684 Metadata\uff0c\u8fd9\u91cc\u53ea\u7528\u5173\u5fc3 name\uff0c\u5982\u679c\u6ca1\u6709\u6307\u5b9a jobLabel\uff0c\u5bf9\u5e94\u6293\u53d6\u6307\u6807 label \u4e2d job \u7684\u503c\u4e3a Service \u7684\u540d\u79f0\u3002\nmetadata:\n  name: redis-exporter # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus  # namespace \u56fa\u5b9a\uff0c\u4e0d\u9700\u8981\u4fee\u6539\n# \u63cf\u8ff0\u6293\u53d6\u76ee\u6807 Pod \u7684\u9009\u53d6\u53ca\u6293\u53d6\u4efb\u52a1\u7684\u914d\u7f6e\n  label:\n    operator.insight.io/managed-by: insight  # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\uff0c\u5fc5\u586b\u3002\nspec:\n  # \u586b\u5199\u5bf9\u5e94 Pod \u7684 label(metadata/labels)\uff0cservice monitor \u4f1a\u53d6\u5bf9\u5e94\u7684\u503c\u4f5c\u4e3a job label \u7684\u503c\n  [ jobLabel: string ]\n  # \u628a\u5bf9\u5e94 service \u4e0a\u7684 Label \u6dfb\u52a0\u5230 Target \u7684 Label \u4e2d\n  [ targetLabels: []string ]\n  # \u628a\u5bf9\u5e94 Pod \u4e0a\u7684 Label \u6dfb\u52a0\u5230 Target \u7684 Label \u4e2d\n  [ podTargetLabels: []string ]\n  # \u4e00\u6b21\u6293\u53d6\u6570\u636e\u70b9\u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ sampleLimit: uint64 ]\n  # \u4e00\u6b21\u6293\u53d6 Target \u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ targetLimit: uint64 ]\n  # \u914d\u7f6e\u9700\u8981\u6293\u53d6\u66b4\u9732\u7684 Prometheus HTTP \u63a5\u53e3\uff0c\u53ef\u4ee5\u914d\u7f6e\u591a\u4e2a Endpoint\n  endpoints:\n  [ - <endpoint_config> ... ] # \u8be6\u89c1\u4e0b\u9762 endpoint \u8bf4\u660e\n  # \u9009\u62e9\u8981\u76d1\u63a7 Pod \u6240\u5728\u7684 namespace\uff0c\u4e0d\u586b\u4e3a\u9009\u53d6\u6240\u6709 namespace\n  [ namespaceSelector: ]\n    # \u662f\u5426\u9009\u53d6\u6240\u6709 namespace\n    [ any: bool ]\n    # \u9700\u8981\u9009\u53d6 namespace \u5217\u8868\n    [ matchNames: []string ]\n  # \u586b\u5199\u8981\u76d1\u63a7 Pod \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 Pod [K8S metav1.LabelSelector](https://v1-17.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#labelselector-v1-meta)\n  selector:\n    [ matchExpressions: array ]\n      [ example: - {key: tier, operator: In, values: [cache]} ]\n    [ matchLabels: object ]\n      [ example: k8s-app: redis-exporter ]\n
"},{"location":"admin/insight/collection-manag/metric-collect.html#_2","title":"\u4e3e\u4f8b","text":"
apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: go-demo # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus # namespace \u56fa\u5b9a\uff0c\u4e0d\u8981\u4fee\u6539\n  label:\n    operator.insight.io/managed-by: insight  # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\uff0c\u5fc5\u586b\u3002\nspec:\n  endpoints:\n    - interval: 30s\n      # \u586b\u5199 service yaml \u4e2d Prometheus Exporter \u5bf9\u5e94\u7684 Port \u7684 Name\n      port: 8080-8080-tcp\n      # \u586b\u5199 Prometheus Exporter \u5bf9\u5e94\u7684 Path \u7684\u503c\uff0c\u4e0d\u586b\u9ed8\u8ba4 /metrics\n      path: /metrics\n      relabelings:\n        # ** \u5fc5\u987b\u8981\u6709\u4e00\u4e2a label \u4e3a application\uff0c\u8fd9\u91cc\u5047\u8bbe k8s \u6709\u4e00\u4e2a label \u4e3a app\uff0c\n        # \u6211\u4eec\u901a\u8fc7 relabel \u7684 replace \u52a8\u4f5c\u628a\u5b83\u66ff\u6362\u6210\u4e86 application\n        - action: replace\n          sourceLabels: [__meta_kubernetes_pod_label_app]\n          targetLabel: application\n  # \u9009\u62e9\u8981\u76d1\u63a7 service \u6240\u5728\u7684 namespace\n  namespaceSelector:\n    matchNames:\n      - golang-demo\n  # \u586b\u5199\u8981\u76d1\u63a7 service \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 service\n  selector:\n    matchLabels:\n      app: golang-app-demo\n
"},{"location":"admin/insight/collection-manag/metric-collect.html#endpoint_config","title":"endpoint_config","text":"

\u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

# \u5bf9\u5e94 port \u7684\u540d\u79f0\uff0c\u8fd9\u91cc\u9700\u8981\u6ce8\u610f\u4e0d\u662f\u5bf9\u5e94\u7684\u7aef\u53e3\uff0c\u9ed8\u8ba4\uff1a80\uff0c\u5bf9\u5e94\u7684\u53d6\u503c\u5982\u4e0b\uff1a\n# ServiceMonitor: \u5bf9\u5e94 Service>spec/ports/name;\n# PodMonitor: \u8bf4\u660e\u5982\u4e0b\uff1a\n#   \u5982\u679c\u67e5\u770b\u7684\u662f Pod Yaml\uff0c\u53d6 pod.spec.containers.ports.name \u4e2d\u7684\u503c\u3002\n#   \u5982\u679c\u67e5\u770b\u7684\u662f Deployment/Daemonset/Statefulset\uff0c\u53d6\u503c spec.template.spec.containers.ports.name\n[ port: string | default = 80]\n# \u6293\u53d6\u4efb\u52a1\u8bf7\u6c42 URI \u8def\u5f84\n[ path: string | default = /metrics ]\n# \u6293\u53d6\u534f\u8bae: http \u6216\u8005 https\n[ scheme: string | default = http]\n# \u6293\u53d6\u8bf7\u6c42\u5bf9\u5e94 URL \u53c2\u6570\n[ params: map[string][]string]\n# \u6293\u53d6\u4efb\u52a1\u95f4\u9694\u7684\u65f6\u95f4\n[ interval: string | default = 30s ]\n# \u6293\u53d6\u4efb\u52a1\u8d85\u65f6\n[ scrapeTimeout: string | default = 30s]\n# \u6293\u53d6\u8fde\u63a5\u662f\u5426\u901a\u8fc7 TLS \u5b89\u5168\u901a\u9053\uff0c\u914d\u7f6e\u5bf9\u5e94\u7684 TLS \u53c2\u6570\n[ tlsConfig: TLSConfig ]\n# \u901a\u8fc7\u5bf9\u5e94\u7684\u6587\u4ef6\u8bfb\u53d6 bearer token \u5bf9\u5e94\u7684\u503c\uff0c\u653e\u5230\u6293\u53d6\u4efb\u52a1\u7684 header \u4e2d\n[ bearerTokenFile: string ]\n# \u901a\u8fc7\u5bf9\u5e94\u7684 K8S secret key \u8bfb\u53d6\u5bf9\u5e94\u7684 bearer token\uff0c\u6ce8\u610f secret namespace \u9700\u8981\u548c PodMonitor/ServiceMonitor \u76f8\u540c\n[ bearerTokenSecret: string ]\n# \u89e3\u51b3\u5f53\u6293\u53d6\u7684 label \u4e0e\u540e\u7aef Prometheus \u6dfb\u52a0 label \u51b2\u7a81\u65f6\u7684\u5904\u7406\u3002\n# true: \u4fdd\u7559\u6293\u53d6\u5230\u7684 label\uff0c\u5ffd\u7565\u4e0e\u540e\u7aef Prometheus \u51b2\u7a81\u7684 label\uff1b\n# false: \u5bf9\u51b2\u7a81\u7684 label\uff0c\u628a\u6293\u53d6\u7684 label \u524d\u52a0\u4e0a exported_<original-label>\uff0c\u6dfb\u52a0\u540e\u7aef Prometheus \u589e\u52a0\u7684 label\uff1b\n[ honorLabels: bool | default = false ]\n# \u662f\u5426\u4f7f\u7528\u6293\u53d6\u5230 target \u4e0a\u4ea7\u751f\u7684\u65f6\u95f4\u3002\n# true: \u5982\u679c target \u4e2d\u6709\u65f6\u95f4\uff0c\u4f7f\u7528 target \u4e0a\u7684\u65f6\u95f4\uff1b\n# false: \u76f4\u63a5\u5ffd\u7565 target \u4e0a\u7684\u65f6\u95f4\uff1b\n[ honorTimestamps: bool | default = true ]\n# basic auth \u7684\u8ba4\u8bc1\u4fe1\u606f\uff0cusername/password \u586b\u5199\u5bf9\u5e94 K8S secret key \u7684\u503c\uff0c\u6ce8\u610f secret namespace \u9700\u8981\u548c PodMonitor/ServiceMonitor \u76f8\u540c\u3002\n[ basicAuth: BasicAuth ]\n# \u901a\u8fc7\u4ee3\u7406\u670d\u52a1\u6765\u6293\u53d6 target \u4e0a\u7684\u6307\u6807\uff0c\u586b\u5199\u5bf9\u5e94\u7684\u4ee3\u7406\u670d\u52a1\u5730\u5740\n[ proxyUrl: string ]\n# \u5728\u6293\u53d6\u6570\u636e\u4e4b\u540e\uff0c\u628a target \u4e0a\u5bf9\u5e94\u7684 label \u901a\u8fc7 relabel \u7684\u673a\u5236\u8fdb\u884c\u6539\u5199\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\nrelabelings:\n[ - <relabel_config> ...]\n# \u6570\u636e\u6293\u53d6\u5b8c\u6210\u5199\u5165\u4e4b\u524d\uff0c\u901a\u8fc7 relabel \u673a\u5236\u8fdb\u884c\u6539\u5199 label \u5bf9\u5e94\u7684\u503c\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\nmetricRelabelings:\n[ - <relabel_config> ...]\n
"},{"location":"admin/insight/collection-manag/metric-collect.html#relabel_config","title":"relabel_config","text":"

\u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

# \u4ece\u539f\u59cb labels \u4e2d\u53d6\u54ea\u4e9b label \u7684\u503c\u8fdb\u884c relabel\uff0c\u53d6\u51fa\u6765\u7684\u503c\u901a\u8fc7 separator \u4e2d\u7684\u5b9a\u4e49\u8fdb\u884c\u5b57\u7b26\u62fc\u63a5\u3002\n# \u5982\u679c\u662f PodMonitor/ServiceMonitor \u5bf9\u5e94\u7684\u914d\u7f6e\u9879\u4e3a sourceLabels\n[ source_labels: '[' <labelname> [, ...] ']' ]\n# \u5b9a\u4e49\u9700\u8981 relabel \u7684 label \u503c\u62fc\u63a5\u7684\u5b57\u7b26\uff0c\u9ed8\u8ba4\u4e3a ';'\n[ separator: <string> | default = ; ]\n\n# action \u4e3a replace/hashmod \u65f6\uff0c\u901a\u8fc7 target_label \u6765\u6307\u5b9a\u5bf9\u5e94 label name\u3002\n# \u5982\u679c\u662f PodMonitor/ServiceMonitor \u5bf9\u5e94\u7684\u914d\u7f6e\u9879\u4e3a targetLabel\n[ target_label: <labelname> ]\n\n# \u9700\u8981\u5bf9 source labels \u5bf9\u5e94\u503c\u8fdb\u884c\u6b63\u5219\u5339\u914d\u7684\u8868\u8fbe\u5f0f\n[ regex: <regex> | default = (.*) ]\n\n# action \u4e3a hashmod \u65f6\u7528\u5230\uff0c\u6839\u636e source label \u5bf9\u5e94\u503c md5 \u53d6\u6a21\u503c\n[ modulus: <int> ]\n\n# action \u4e3a replace \u7684\u65f6\u5019\uff0c\u901a\u8fc7 replacement \u6765\u5b9a\u4e49\u5f53 regex \u5339\u914d\u4e4b\u540e\u9700\u8981\u66ff\u6362\u7684\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u7ed3\u5408 regex \u6b63\u89c4\u5219\u8868\u8fbe\u5f0f\u66ff\u6362\n[ replacement: <string> | default = $1 ]\n\n# \u57fa\u4e8e regex \u5339\u914d\u5230\u7684\u503c\u8fdb\u884c\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u5bf9\u5e94\u7684 action \u5982\u4e0b\uff0c\u9ed8\u8ba4\u4e3a replace\uff1a\n# replace: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u901a\u8fc7 replacement \u4e2d\u5b9a\u4e49\u7684\u503c\u66ff\u6362\u76f8\u5e94\u7684\u503c\uff0c\u5e76\u901a\u8fc7 target_label \u8bbe\u503c\u5e76\u6dfb\u52a0\u76f8\u5e94\u7684 label\n# keep: \u5982\u679c regex \u6ca1\u6709\u5339\u914d\u5230\uff0c\u4e22\u5f03\n# drop: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u4e22\u5f03\n# hashmod: \u901a\u8fc7 moduels \u6307\u5b9a\u7684\u503c\u628a source label \u5bf9\u5e94\u7684 md5 \u503c\u53d6\u6a21\n# \u5e76\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684 label\uff0clabel name \u901a\u8fc7 target_label \u6307\u5b9a\n# labelmap: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u4f7f\u7528 replacement \u66ff\u6362\u5bf9\u5c31\u7684 label name\n# labeldrop: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u5220\u9664\u5bf9\u5e94\u7684 label\n# labelkeep: \u5982\u679c regex \u6ca1\u6709\u5339\u914d\u5230\uff0c\u5220\u9664\u5bf9\u5e94\u7684 label\n[ action: <relabel_action> | default = replace ]\n
"},{"location":"admin/insight/collection-manag/probe-module.html","title":"\u81ea\u5b9a\u4e49\u63a2\u6d4b\u65b9\u5f0f","text":"

Insight \u4f7f\u7528 Prometheus \u5b98\u65b9\u63d0\u4f9b\u7684 Blackbox Exporter \u4f5c\u4e3a\u9ed1\u76d2\u76d1\u63a7\u89e3\u51b3\u65b9\u6848\uff0c\u53ef\u4ee5\u901a\u8fc7 HTTP\u3001HTTPS\u3001DNS\u3001ICMP\u3001TCP \u548c gRPC \u65b9\u5f0f\u5bf9\u76ee\u6807\u5b9e\u4f8b\u8fdb\u884c\u68c0\u6d4b\u3002\u53ef\u7528\u4e8e\u4ee5\u4e0b\u4f7f\u7528\u573a\u666f\uff1a

  • HTTP/HTTPS\uff1aURL/API\u53ef\u7528\u6027\u68c0\u6d4b
  • ICMP\uff1a\u4e3b\u673a\u5b58\u6d3b\u68c0\u6d4b
  • TCP\uff1a\u7aef\u53e3\u5b58\u6d3b\u68c0\u6d4b
  • DNS\uff1a\u57df\u540d\u89e3\u6790

\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u5df2\u6709\u7684 Blackbox ConfigMap \u4e2d\u914d\u7f6e\u81ea\u5b9a\u4e49\u7684\u63a2\u6d4b\u65b9\u5f0f\u3002

Insight \u9ed8\u8ba4\u672a\u5f00\u542f ICMP \u63a2\u6d4b\u65b9\u5f0f\uff0c\u56e0\u4e3a ICMP \u9700\u8981\u66f4\u9ad8\u6743\u9650\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u4ee5 ICMP \u548c HTTP \u63a2\u6d4b\u65b9\u5f0f\u4f5c\u4e3a\u793a\u4f8b\uff0c\u5c55\u793a\u5982\u4f55\u4fee\u6539 ConfigMap \u4ee5\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684 ICMP \u548c HTTP \u63a2\u6d4b\u3002

"},{"location":"admin/insight/collection-manag/probe-module.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u8fdb\u5165\u76ee\u6807\u96c6\u7fa4\u7684\u8be6\u60c5\uff1b
  2. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\uff0c\u9009\u62e9 \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u914d\u7f6e\u9879 \uff1b
  3. \u627e\u5230\u540d\u4e3a insight-agent-prometheus-blackbox-exporter \u7684\u914d\u7f6e\u9879\uff0c\u70b9\u51fb \u7f16\u8f91 YAML\uff1b

    \u5728 modules \u4e0b\u6dfb\u52a0\u81ea\u5b9a\u4e49\u63a2\u6d4b\u65b9\u5f0f\uff1a

HTTP \u63a2\u6d4bICMP \u63a2\u6d4b
module:\n  http_2xx:\n    prober: http\n    timeout: 5s\n    http:\n      valid_http_versions: [HTTP/1.1, HTTP/2]\n      valid_status_codes: []  # Defaults to 2xx\n      method: GET\n

module:\n  ICMP: # ICMP \u63a2\u6d4b\u914d\u7f6e\u7684\u793a\u4f8b\n    prober: icmp\n    timeout: 5s\n    icmp:\n      preferred_ip_protocol: ip4\nicmp_example: # ICMP \u63a2\u6d4b\u914d\u7f6e\u7684\u793a\u4f8b 2\n  prober: icmp\n  timeout: 5s\n  icmp:\n    preferred_ip_protocol: \"ip4\"\n    source_ip_address: \"127.0.0.1\"\n
\u7531\u4e8e ICMP \u9700\u8981\u66f4\u9ad8\u6743\u9650\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u63d0\u5347 Pod \u6743\u9650\uff0c\u5426\u5219\u4f1a\u51fa\u73b0 operation not permitted \u7684\u9519\u8bef\u3002\u6709\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u63d0\u5347\u6743\u9650\uff1a

  • \u65b9\u5f0f\u4e00\uff1a \u76f4\u63a5\u7f16\u8f91 BlackBox Exporter \u90e8\u7f72\u6587\u4ef6\u5f00\u542f

    apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: insight-agent-prometheus-blackbox-exporter\n  namespace: insight-system\nspec:\n  template:\n    spec:\n      containers:\n        - name: blackbox-exporter\n          image: # ... (image, args, ports \u7b49\u4fdd\u6301\u4e0d\u53d8)\n          imagePullPolicy: IfNotPresent\n          securityContext:\n            allowPrivilegeEscalation: false\n            capabilities:\n              add:\n              - NET_RAW\n              drop:\n              - ALL\n            readOnlyRootFilesystem: true\n            runAsGroup: 0\n            runAsNonRoot: false\n            runAsUser: 0\n
  • \u65b9\u5f0f\u4e8c\uff1a \u901a\u8fc7 Helm Upgrade \u65b9\u5f0f\u63d0\u6743

    prometheus-blackbox-exporter:\n  enabled: true\n  securityContext:\n    runAsUser: 0\n    runAsGroup: 0\n    readOnlyRootFilesystem: true\n    runAsNonRoot: false\n    allowPrivilegeEscalation: false\n    capabilities:\n      add: [\"NET_RAW\"]\n

Info

\u66f4\u591a\u63a2\u6d4b\u65b9\u5f0f\u53ef\u53c2\u8003 blackbox_exporter Configuration\u3002

"},{"location":"admin/insight/collection-manag/probe-module.html#_3","title":"\u5176\u4ed6\u53c2\u8003","text":"

\u4ee5\u4e0b YAML \u6587\u4ef6\u4e2d\u5305\u542b\u4e86 HTTP\u3001TCP\u3001SMTP\u3001ICMP\u3001DNS \u7b49\u591a\u79cd\u63a2\u6d4b\u65b9\u5f0f\uff0c\u53ef\u6839\u636e\u9700\u6c42\u81ea\u884c\u4fee\u6539 insight-agent-prometheus-blackbox-exporter \u7684\u914d\u7f6e\u6587\u4ef6\u3002

\u70b9\u51fb\u67e5\u770b\u5b8c\u6574\u7684 YAML \u6587\u4ef6
kind: ConfigMap\napiVersion: v1\nmetadata:\n  name: insight-agent-prometheus-blackbox-exporter\n  namespace: insight-system\n  labels:\n    app.kubernetes.io/instance: insight-agent\n    app.kubernetes.io/managed-by: Helm\n    app.kubernetes.io/name: prometheus-blackbox-exporter\n    app.kubernetes.io/version: v0.24.0\n    helm.sh/chart: prometheus-blackbox-exporter-8.8.0\n  annotations:\n    meta.helm.sh/release-name: insight-agent\n    meta.helm.sh/release-namespace: insight-system\ndata:\n  blackbox.yaml: |\n    modules:\n      HTTP_GET:\n        prober: http\n        timeout: 5s\n        http:\n          method: GET\n          valid_http_versions: [\"HTTP/1.1\", \"HTTP/2.0\"]\n          follow_redirects: true\n          preferred_ip_protocol: \"ip4\"\n      HTTP_POST:\n        prober: http\n        timeout: 5s\n        http:\n          method: POST\n          body_size_limit: 1MB\n      TCP:\n        prober: tcp\n        timeout: 5s\n      # \u9ed8\u8ba4\u672a\u5f00\u542f\uff1a\n      # ICMP:\n      #   prober: icmp\n      #   timeout: 5s\n      #   icmp:\n      #     preferred_ip_protocol: ip4\n      SSH:\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n          - expect: \"^SSH-2.0-\"\n      POP3S:\n        prober: tcp\n        tcp:\n          query_response:\n          - expect: \"^+OK\"\n          tls: true\n          tls_config:\n            insecure_skip_verify: false\n      http_2xx_example:               # http \u63a2\u6d4b\u793a\u4f8b\n        prober: http\n        timeout: 5s                   # \u63a2\u6d4b\u7684\u8d85\u65f6\u65f6\u95f4\n        http:\n          valid_http_versions: [\"HTTP/1.1\", \"HTTP/2.0\"]                   # \u8fd4\u56de\u4fe1\u606f\u4e2d\u7684 Version\uff0c\u4e00\u822c\u9ed8\u8ba4\u5373\u53ef\n          valid_status_codes: []  # Defaults to 2xx                       # \u6709\u6548\u7684\u8fd4\u56de\u7801\u8303\u56f4\uff0c\u5982\u679c\u8bf7\u6c42\u7684\u8fd4\u56de\u7801\u5728\u8be5\u8303\u56f4\u5185\uff0c\u89c6\u4e3a\u63a2\u6d4b\u6210\u529f\n          method: GET                 # \u8bf7\u6c42\u65b9\u6cd5\n          headers:                    # \u8bf7\u6c42\u7684\u5934\u90e8\n            Host: vhost.example.com\n            Accept-Language: en-US\n            Origin: example.com\n          no_follow_redirects: false  # \u662f\u5426\u5141\u8bb8\u91cd\u5b9a\u5411\n          fail_if_ssl: false   \n          fail_if_not_ssl: false\n          fail_if_body_matches_regexp:\n            - \"Could not connect to database\"\n          fail_if_body_not_matches_regexp:\n            - \"Download the latest version here\"\n          fail_if_header_matches: # Verifies that no cookies are set\n            - header: Set-Cookie\n              allow_missing: true\n              regexp: '.*'\n          fail_if_header_not_matches:\n            - header: Access-Control-Allow-Origin\n              regexp: '(\\*|example\\.com)'\n          tls_config:                  # \u9488\u5bf9 https \u8bf7\u6c42\u7684 tls \u7684\u914d\u7f6e\n            insecure_skip_verify: false\n          preferred_ip_protocol: \"ip4\" # defaults to \"ip6\"                 # \u9996\u9009\u7684 IP \u534f\u8bae\u7248\u672c\n          ip_protocol_fallback: false  # no fallback to \"ip6\"            \n      http_post_2xx:                   # \u5e26 Body \u7684 http \u63a2\u6d4b\u7684\u793a\u4f8b\n        prober: http\n        timeout: 5s\n        http:\n          method: POST                 # \u63a2\u6d4b\u7684\u8bf7\u6c42\u65b9\u6cd5\n          headers:\n            Content-Type: application/json\n          body: '{\"username\":\"admin\",\"password\":\"123456\"}'                   # \u63a2\u6d4b\u65f6\u643a\u5e26\u7684 body\n      http_basic_auth_example:         # \u5e26\u7528\u6237\u540d\u5bc6\u7801\u7684\u63a2\u6d4b\u7684\u793a\u4f8b\n        prober: http\n        timeout: 5s\n        http:\n          method: POST\n          headers:\n            Host: \"login.example.com\"\n          basic_auth:                  # \u63a2\u6d4b\u65f6\u8981\u52a0\u7684\u7528\u6237\u540d\u5bc6\u7801\n            username: \"username\"\n            password: \"mysecret\"\n      http_custom_ca_example:\n        prober: http\n        http:\n          method: GET\n          tls_config:                  # \u6307\u5b9a\u63a2\u6d4b\u65f6\u4f7f\u7528\u7684\u6839\u8bc1\u4e66\n            ca_file: \"/certs/my_cert.crt\"\n      http_gzip:\n        prober: http\n        http:\n          method: GET\n          compression: gzip            # \u63a2\u6d4b\u65f6\u4f7f\u7528\u7684\u538b\u7f29\u65b9\u6cd5\n      http_gzip_with_accept_encoding:\n        prober: http\n        http:\n          method: GET\n          compression: gzip\n          headers:\n            Accept-Encoding: gzip\n      tls_connect:                     # TCP \u63a2\u6d4b\u7684\u793a\u4f8b\n        prober: tcp\n        timeout: 5s\n        tcp:\n          tls: true                    # \u662f\u5426\u4f7f\u7528 TLS\n      tcp_connect_example:\n        prober: tcp\n        timeout: 5s\n      imap_starttls:                   # \u63a2\u6d4b IMAP \u90ae\u7bb1\u670d\u52a1\u5668\u7684\u914d\u7f6e\u793a\u4f8b\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n            - expect: \"OK.*STARTTLS\"\n            - send: \". STARTTLS\"\n            - expect: \"OK\"\n            - starttls: true\n            - send: \". capability\"\n            - expect: \"CAPABILITY IMAP4rev1\"\n      smtp_starttls:                   # \u63a2\u6d4b SMTP \u90ae\u7bb1\u670d\u52a1\u5668\u7684\u914d\u7f6e\u793a\u4f8b\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n            - expect: \"^220 ([^ ]+) ESMTP (.+)$\"\n            - send: \"EHLO prober\\r\"\n            - expect: \"^250-STARTTLS\"\n            - send: \"STARTTLS\\r\"\n            - expect: \"^220\"\n            - starttls: true\n            - send: \"EHLO prober\\r\"\n            - expect: \"^250-AUTH\"\n            - send: \"QUIT\\r\"\n      irc_banner_example:\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n            - send: \"NICK prober\"\n            - send: \"USER prober prober prober :prober\"\n            - expect: \"PING :([^ ]+)\"\n              send: \"PONG ${1}\"\n            - expect: \"^:[^ ]+ 001\"\n      # icmp_example:                    # ICMP \u63a2\u6d4b\u914d\u7f6e\u7684\u793a\u4f8b\n      #   prober: icmp\n      #   timeout: 5s\n      #   icmp:\n      #     preferred_ip_protocol: \"ip4\"\n      #     source_ip_address: \"127.0.0.1\"\n      dns_udp_example:                 # \u4f7f\u7528 UDP \u8fdb\u884c DNS \u67e5\u8be2\u7684\u793a\u4f8b\n        prober: dns\n        timeout: 5s\n        dns:\n          query_name: \"www.prometheus.io\"                 # \u8981\u89e3\u6790\u7684\u57df\u540d\n          query_type: \"A\"              # \u8be5\u57df\u540d\u5bf9\u5e94\u7684\u7c7b\u578b\n          valid_rcodes:\n          - NOERROR\n          validate_answer_rrs:\n            fail_if_matches_regexp:\n            - \".*127.0.0.1\"\n            fail_if_all_match_regexp:\n            - \".*127.0.0.1\"\n            fail_if_not_matches_regexp:\n            - \"www.prometheus.io.\\t300\\tIN\\tA\\t127.0.0.1\"\n            fail_if_none_matches_regexp:\n            - \"127.0.0.1\"\n          validate_authority_rrs:\n            fail_if_matches_regexp:\n            - \".*127.0.0.1\"\n          validate_additional_rrs:\n            fail_if_matches_regexp:\n            - \".*127.0.0.1\"\n      dns_soa:\n        prober: dns\n        dns:\n          query_name: \"prometheus.io\"\n          query_type: \"SOA\"\n      dns_tcp_example:               # \u4f7f\u7528 TCP \u8fdb\u884c DNS \u67e5\u8be2\u7684\u793a\u4f8b\n        prober: dns\n        dns:\n          transport_protocol: \"tcp\" # defaults to \"udp\"\n          preferred_ip_protocol: \"ip4\" # defaults to \"ip6\"\n          query_name: \"www.prometheus.io\"\n
"},{"location":"admin/insight/collection-manag/service-monitor.html","title":"\u914d\u7f6e\u670d\u52a1\u53d1\u73b0\u89c4\u5219","text":"

\u53ef\u89c2\u6d4b Insight \u652f\u6301\u901a\u8fc7 \u5bb9\u5668\u7ba1\u7406 \u521b\u5efa CRD ServiceMonitor \u7684\u65b9\u5f0f\u6765\u6ee1\u8db3\u60a8\u81ea\u5b9a\u4e49\u670d\u52a1\u53d1\u73b0\u7684\u91c7\u96c6\u9700\u6c42\u3002 \u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528 ServiceMonitor \u81ea\u884c\u5b9a\u4e49 Pod \u53d1\u73b0\u7684 Namespace \u8303\u56f4\u4ee5\u53ca\u901a\u8fc7 matchLabel \u6765\u9009\u62e9\u76d1\u542c\u7684 Service\u3002

"},{"location":"admin/insight/collection-manag/service-monitor.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u96c6\u7fa4\u5df2\u5b89\u88c5 Helm \u5e94\u7528 insight-agent \u4e14\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

"},{"location":"admin/insight/collection-manag/service-monitor.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u91c7\u96c6\u7ba1\u7406 \uff0c\u67e5\u770b\u5168\u90e8\u96c6\u7fa4\u91c7\u96c6\u63d2\u4ef6\u7684\u72b6\u6001\u3002

  2. \u70b9\u51fb\u5217\u8868\u4e2d\u7684\u67d0\u4e2a\u96c6\u7fa4\u540d\u79f0\u8fdb\u5165\u91c7\u96c6\u914d\u7f6e\u8be6\u60c5\u3002

  3. \u70b9\u51fb\u94fe\u63a5\u8df3\u8f6c\u5230 \u5bb9\u5668\u7ba1\u7406 \u4e2d\u521b\u5efa Service Monitor\u3002

    apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: micrometer-demo # (1)\n  namespace: insight-system # (2)\n    labels: \n      operator.insight.io/managed-by: insight\nspec:\n  endpoints: # (3)\n    - honorLabels: true\n        interval: 15s\n        path: /actuator/prometheus\n        port: http\n  namespaceSelector: # (4)\n    matchNames:\n      - insight-system  # (5)\n  selector: # (6)\n    matchLabels:\n          micrometer-prometheus-discovery: \"true\"\n
    1. \u6307\u5b9a ServiceMonitor \u7684\u540d\u79f0
    2. \u6307\u5b9a ServiceMonitor \u7684\u547d\u540d\u7a7a\u95f4
    3. \u8fd9\u662f\u670d\u52a1\u7aef\u70b9\uff0c\u4ee3\u8868 Prometheus \u6240\u9700\u7684\u91c7\u96c6 Metrics \u7684\u5730\u5740\u3002 endpoints \u4e3a\u4e00\u4e2a\u6570\u7ec4\uff0c \u540c\u65f6\u53ef\u4ee5\u521b\u5efa\u591a\u4e2a endpoints \u3002\u6bcf\u4e2a endpoints \u5305\u542b\u4e09\u4e2a\u5b57\u6bb5\uff0c\u6bcf\u4e2a\u5b57\u6bb5\u7684\u542b\u4e49\u5982\u4e0b\uff1a

      • interval \uff1a\u6307\u5b9a Prometheus \u5bf9\u5f53\u524d endpoints \u91c7\u96c6\u7684\u5468\u671f\u3002\u5355\u4f4d\u4e3a\u79d2\uff0c\u5728\u672c\u6b21\u793a\u4f8b\u4e2d\u8bbe\u5b9a\u4e3a 15s \u3002
      • path \uff1a\u6307\u5b9a Prometheus \u7684\u91c7\u96c6\u8def\u5f84\u3002\u5728\u672c\u6b21\u793a\u4f8b\u4e2d\uff0c\u6307\u5b9a\u4e3a /actuator/prometheus \u3002
      • port \uff1a\u6307\u5b9a\u91c7\u96c6\u6570\u636e\u9700\u8981\u901a\u8fc7\u7684\u7aef\u53e3\uff0c\u8bbe\u7f6e\u7684\u7aef\u53e3\u4e3a\u91c7\u96c6\u7684 Service \u7aef\u53e3\u6240\u8bbe\u7f6e\u7684 name \u3002
    4. \u8fd9\u662f\u9700\u8981\u53d1\u73b0\u7684 Service \u7684\u8303\u56f4\u3002 namespaceSelector \u5305\u542b\u4e24\u4e2a\u4e92\u65a5\u5b57\u6bb5\uff0c\u5b57\u6bb5\u7684\u542b\u4e49\u5982\u4e0b\uff1a

      • any \uff1a\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u503c true \uff0c\u5f53\u8be5\u5b57\u6bb5\u88ab\u8bbe\u7f6e\u65f6\uff0c\u5c06\u76d1\u542c\u6240\u6709\u7b26\u5408 Selector \u8fc7\u6ee4\u6761\u4ef6\u7684 Service \u7684\u53d8\u52a8\u3002
      • matchNames \uff1a\u6570\u7ec4\u503c\uff0c\u6307\u5b9a\u9700\u8981\u76d1\u542c\u7684 namespace \u7684\u8303\u56f4\u3002\u4f8b\u5982\uff0c\u53ea\u60f3\u76d1\u542c default \u548c insight-system \u4e24\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\u7684 Service\uff0c\u90a3\u4e48 matchNames \u8bbe\u7f6e\u5982\u4e0b\uff1a

        namespaceSelector:\n  matchNames:\n    - default\n    - insight-system\n
    5. \u6b64\u5904\u5339\u914d\u7684\u547d\u540d\u7a7a\u95f4\u4e3a\u9700\u8981\u66b4\u9732\u6307\u6807\u7684\u5e94\u7528\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4

    6. \u7528\u4e8e\u9009\u62e9 Service
"},{"location":"admin/insight/compati-test/k8s-compatibility.html","title":"Kubernetes \u96c6\u7fa4\u517c\u5bb9\u6027\u6d4b\u8bd5","text":"

\u2705\uff1a\u6d4b\u8bd5\u901a\u8fc7\uff1b \u274c\uff1a\u6d4b\u8bd5\u672a\u901a\u8fc7\uff1b\u7a7a\uff1a\u672a\u8fdb\u884c\u6d4b\u8bd5\uff1b

"},{"location":"admin/insight/compati-test/k8s-compatibility.html#insight-server-kubernetes","title":"Insight Server \u7684 Kubernetes \u517c\u5bb9\u6027\u6d4b\u8bd5","text":"\u573a\u666f \u6d4b\u8bd5\u65b9\u5f0f K8s 1.31 K8s 1.30 K8s 1.29 K8s 1.28 K8s 1.27 K8s 1.26 k8s 1.25.0 k8s 1.24 k8s 1.23 k8s 1.22 \u57fa\u7ebf\u573a\u666f E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u6307\u6807\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u65e5\u5fd7\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u94fe\u8def\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u544a\u8b66\u4e2d\u5fc3 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u62d3\u6251\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705"},{"location":"admin/insight/compati-test/k8s-compatibility.html#insight-agent-kubernetes","title":"Insight Agent \u7684 Kubernetes \u517c\u5bb9\u6027\u6d4b\u8bd5","text":"\u573a\u666f \u6d4b\u8bd5\u65b9\u5f0f K8s 1.31 K8s 1.30 K8s 1.29 K8s 1.28 K8s 1.27 K8s 1.26 k8s 1.25 k8s 1.24 k8s 1.23 k8s 1.22 k8s 1.21 k8s 1.20 k8s 1.19 k8s 1.18 k8s 1.17 k8s 1.16 \u57fa\u7ebf\u573a\u666f E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u274c \u274c \u274c \u6307\u6807\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u274c \u274c \u274c \u65e5\u5fd7\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u274c \u274c \u274c \u94fe\u8def\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u274c \u274c \u274c \u544a\u8b66\u4e2d\u5fc3 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u274c \u274c \u274c \u62d3\u6251\u67e5\u8be2 E2E \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u2705 \u274c \u274c \u274c

Note

Insight Agent \u7248\u672c\u517c\u5bb9\u5386\u53f2\uff1a

  1. Insight Agent \u4ece v0.16.x \u5f00\u59cb\u4e0d\u517c\u5bb9 k8s v1.16.15
  2. Insight Agent v0.20.0 \u517c\u5bb9 k8s v1.18.20
  3. Insight Agent v0.19.2/v0.18.2/v0.17.x \u4e0d\u517c\u5bb9 k8s v1.18.20
  4. Insight Agent v0.30.1 \u4e0d\u517c\u5bb9 k8s v1.18.x \u53ca \u4ee5\u4e0b\u7248\u672c
"},{"location":"admin/insight/compati-test/ocp-compatibility.html","title":"Openshift 4.x \u96c6\u7fa4\u517c\u5bb9\u6027\u6d4b\u8bd5","text":"

\u2705\uff1a\u6d4b\u8bd5\u901a\u8fc7\uff1b \u274c\uff1a\u6d4b\u8bd5\u672a\u901a\u8fc7\u3002

Note

\u8868\u683c\u4e2d\u7684\u6d4b\u8bd5\u529f\u80fd\u975e\u5168\u91cf\u3002

case \u6d4b\u8bd5\u65b9\u5f0f ocp4.10(k8s 1.23.0) \u5907\u6ce8 \u91c7\u96c6\u5e76\u67e5\u8be2 web \u5e94\u7528\u7684\u6307\u6807 \u624b\u5de5 \u2705 \u6dfb\u52a0\u81ea\u5b9a\u4e49\u6307\u6807\u91c7\u96c6 \u624b\u5de5 \u2705 \u67e5\u8be2\u5b9e\u65f6\u6307\u6807 \u624b\u5de5 \u2705 \u77ac\u65f6\u6307\u6807\u67e5\u8be2 \u624b\u5de5 \u2705 \u77ac\u65f6\u6307\u6807api\u5b57\u6bb5\u529f\u80fd\u9a8c\u8bc1 \u624b\u5de5 \u2705 \u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u6307\u6807 \u624b\u5de5 \u2705 \u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u6307\u6807 api \u5b57\u6bb5\u529f\u80fd\u9a8c\u8bc1 \u624b\u5de5 \u2705 \u6279\u91cf\u67e5\u8be2\u96c6\u7fa4CPU\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u96c6\u7fa4 CPU \u603b\u91cf\u3001\u96c6\u7fa4\u5185\u5b58\u4f7f\u7528\u91cf\uff0c\u96c6\u7fa4\u8282\u70b9\u603b\u6570 \u624b\u5de5 \u2705 \u6279\u91cf\u67e5\u8be2\u8282\u70b9CPU\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u8282\u70b9 CPU \u603b\u91cf\u3001\u8282\u70b9\u5185\u5b58\u4f7f\u7528\u91cf \u624b\u5de5 \u2705 \u6279\u91cf\u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u96c6\u7fa4CPU\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u96c6\u7fa4 CPU \u603b\u91cf\u3001\u96c6\u7fa4\u5185\u5b58\u4f7f\u7528\u91cf\uff0c\u96c6\u7fa4\u8282\u70b9\u603b\u6570 \u624b\u5de5 \u2705 \u6279\u91cf\u67e5\u8be2\u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u6307\u6807 api \u5b57\u6bb5\u529f\u80fd\u9a8c\u8bc1 \u624b\u5de5 \u2705 \u67e5\u8be2 Pod \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 SVC \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 statefulset \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 Deployment \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 NPD \u65e5\u5fd7 \u624b\u5de5 \u2705 \u65e5\u5fd7\u7b5b\u9009 \u624b\u5de5 \u2705 \u65e5\u5fd7\u6a21\u7cca\u67e5\u8be2-workloadSearch \u624b\u5de5 \u2705 \u65e5\u5fd7\u6a21\u7cca\u67e5\u8be2-podSearch \u624b\u5de5 \u2705 \u65e5\u5fd7\u6a21\u7cca\u67e5\u8be2-containerSearch \u624b\u5de5 \u2705 \u65e5\u5fd7\u7cbe\u786e\u67e5\u8be2-cluster \u624b\u5de5 \u2705 \u65e5\u5fd7\u7cbe\u786e\u67e5\u8be2-namespace \u624b\u5de5 \u2705 \u65e5\u5fd7\u67e5\u8be2 api \u5b57\u6bb5\u529f\u80fd\u9a8c\u8bc1 \u624b\u5de5 \u2705 \u544a\u8b66\u89c4\u5219-\u589e\u5220\u6539\u67e5 \u624b\u5de5 \u2705 \u544a\u8b66\u6a21\u677f-\u589e\u5220\u6539\u67e5 \u624b\u5de5 \u2705 \u901a\u77e5\u65b9\u5f0f-\u589e\u5220\u6539\u67e5 \u624b\u5de5 \u2705 \u94fe\u8def\u67e5\u8be2 \u624b\u5de5 \u2705 \u62d3\u6251\u67e5\u8be2 \u624b\u5de5 \u2705"},{"location":"admin/insight/compati-test/rancher-compatibility.html","title":"Rancher \u96c6\u7fa4\u517c\u5bb9\u6027\u6d4b\u8bd5","text":"

\u2705\uff1a\u6d4b\u8bd5\u901a\u8fc7\uff1b \u274c\uff1a\u6d4b\u8bd5\u672a\u901a\u8fc7\u3002

Note

\u8868\u683c\u4e2d\u7684\u6d4b\u8bd5\u529f\u80fd\u975e\u5168\u91cf\u3002

case \u6d4b\u8bd5\u65b9\u5f0f Rancher rke2c1(k8s 1.24.11) \u5907\u6ce8 \u91c7\u96c6\u5e76\u67e5\u8be2 web \u5e94\u7528\u7684\u6307\u6807 \u624b\u5de5 \u2705 \u6dfb\u52a0\u81ea\u5b9a\u4e49\u6307\u6807\u91c7\u96c6 \u624b\u5de5 \u2705 \u67e5\u8be2\u5b9e\u65f6\u6307\u6807 \u624b\u5de5 \u2705 \u67e5\u8be2\u77ac\u65f6\u6307\u6807 \u624b\u5de5 \u2705 \u9a8c\u8bc1\u67e5\u8be2\u77ac\u65f6\u6307\u6807 API \u63a5\u53e3 \u624b\u5de5 \u2705 \u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u6307\u6807 \u624b\u5de5 \u2705 \u9a8c\u8bc1\u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u6307\u6807 API \u63a5\u53e3 \u624b\u5de5 \u2705 \u6279\u91cf\u67e5\u8be2\u96c6\u7fa4 CPU\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u96c6\u7fa4 CPU \u603b\u91cf\u3001\u96c6\u7fa4\u5185\u5b58\u4f7f\u7528\u91cf\uff0c\u96c6\u7fa4\u8282\u70b9\u603b\u6570 \u624b\u5de5 \u2705 \u6279\u91cf\u67e5\u8be2\u8282\u70b9 CPU\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u8282\u70b9 CPU \u603b\u91cf\u3001\u8282\u70b9\u5185\u5b58\u4f7f\u7528\u91cf \u624b\u5de5 \u2705 \u6279\u91cf\u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u96c6\u7fa4 CPU\u3001\u5185\u5b58\u4f7f\u7528\u7387\u3001\u96c6\u7fa4 CPU \u603b\u91cf\u3001\u96c6\u7fa4\u5185\u5b58\u4f7f\u7528\u91cf\uff0c\u96c6\u7fa4\u8282\u70b9\u603b\u6570 \u624b\u5de5 \u2705 \u9a8c\u8bc1\u6279\u91cf\u67e5\u8be2\u4e00\u6bb5\u65f6\u95f4\u5185\u6307\u6807 API \u63a5\u53e3 \u624b\u5de5 \u2705 \u67e5\u8be2 Pod \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 SVC \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 statefulset \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 Deployment \u65e5\u5fd7 \u624b\u5de5 \u2705 \u67e5\u8be2 NPD \u65e5\u5fd7 \u624b\u5de5 \u2705 \u7b5b\u9009\u65e5\u5fd7 \u624b\u5de5 \u2705 \u6a21\u7cca\u67e5\u8be2\u65e5\u5fd7-workloadSearch \u624b\u5de5 \u2705 \u6a21\u7cca\u67e5\u8be2\u65e5\u5fd7-podSearch \u624b\u5de5 \u2705 \u6a21\u7cca\u67e5\u8be2\u65e5\u5fd7-containerSearch \u624b\u5de5 \u2705 \u7cbe\u786e\u67e5\u8be2\u65e5\u5fd7-cluster \u624b\u5de5 \u2705 \u7cbe\u786e\u67e5\u8be2\u65e5\u5fd7-namespace \u624b\u5de5 \u2705 \u9a8c\u8bc1\u67e5\u8be2\u65e5\u5fd7 API \u63a5\u53e3 \u624b\u5de5 \u2705 \u544a\u8b66\u89c4\u5219 - \u589e\u5220\u6539\u67e5 \u624b\u5de5 \u2705 \u544a\u8b66\u6a21\u677f - \u589e\u5220\u6539\u67e5 \u624b\u5de5 \u2705 \u901a\u77e5\u65b9\u5f0f - \u589e\u5220\u6539\u67e5 \u624b\u5de5 \u2705 \u94fe\u8def\u67e5\u8be2 \u624b\u5de5 \u2705 \u62d3\u6251\u67e5\u8be2 \u624b\u5de5 \u2705"},{"location":"admin/insight/dashboard/dashboard.html","title":"\u4eea\u8868\u76d8","text":"

Grafana \u662f\u4e00\u79cd\u5f00\u6e90\u7684\u6570\u636e\u53ef\u89c6\u5316\u548c\u76d1\u63a7\u5e73\u53f0\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u56fe\u8868\u548c\u9762\u677f\uff0c\u7528\u4e8e\u5b9e\u65f6\u76d1\u63a7\u3001\u5206\u6790\u548c\u53ef\u89c6\u5316\u5404\u79cd\u6570\u636e\u6e90\u7684\u6307\u6807\u548c\u65e5\u5fd7\u3002\u53ef\u89c2\u6d4b\u6027 Insight \u4f7f\u7528\u5f00\u6e90 Grafana \u63d0\u4f9b\u76d1\u63a7\u670d\u52a1\uff0c\u652f\u6301\u4ece\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u547d\u540d\u7a7a\u95f4\u7b49\u591a\u7ef4\u5ea6\u67e5\u770b\u8d44\u6e90\u6d88\u8017\u60c5\u51b5\uff0c

\u5173\u4e8e\u5f00\u6e90 Grafana \u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 Grafana \u5b98\u65b9\u6587\u6863\u3002

"},{"location":"admin/insight/dashboard/dashboard.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 \u4eea\u8868\u76d8 \u3002

    • \u5728 Insight /\u6982\u89c8 \u4eea\u8868\u76d8\u4e2d\uff0c\u53ef\u67e5\u770b\u591a\u9009\u96c6\u7fa4\u7684\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\uff0c\u5e76\u4ee5\u547d\u540d\u7a7a\u95f4\u3001\u5bb9\u5668\u7ec4\u7b49\u591a\u4e2a\u7ef4\u5ea6\u5206\u6790\u4e86\u8d44\u6e90\u4f7f\u7528\u3001\u7f51\u7edc\u3001\u5b58\u50a8\u7b49\u60c5\u51b5\u3002

    • \u70b9\u51fb\u4eea\u8868\u76d8\u5de6\u4e0a\u4fa7\u7684\u4e0b\u62c9\u6846\u53ef\u5207\u6362\u96c6\u7fa4\u3002

    • \u70b9\u51fb\u4eea\u8868\u76d8\u53f3\u4e0b\u4fa7\u53ef\u5207\u6362\u67e5\u8be2\u7684\u65f6\u95f4\u8303\u56f4\u3002

  2. Insight \u7cbe\u9009\u591a\u4e2a\u793e\u533a\u63a8\u8350\u4eea\u8868\u76d8\uff0c\u53ef\u4ece\u8282\u70b9\u3001\u547d\u540d\u7a7a\u95f4\u3001\u5de5\u4f5c\u8d1f\u8f7d\u7b49\u591a\u4e2a\u7ef4\u5ea6\u8fdb\u884c\u76d1\u63a7\u3002\u70b9\u51fb insight-system / Insight /\u6982\u89c8 \u533a\u57df\u5207\u6362\u4eea\u8868\u76d8\u3002

Note

  1. \u8bbf\u95ee Grafana UI \u8bf7\u53c2\u8003\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u767b\u5f55 Grafana\u3002

  2. \u5bfc\u5165\u81ea\u5b9a\u4e49\u4eea\u8868\u76d8\u8bf7\u53c2\u8003\u5bfc\u5165\u81ea\u5b9a\u4e49\u4eea\u8868\u76d8\u3002

"},{"location":"admin/insight/dashboard/import-dashboard.html","title":"\u5bfc\u5165\u81ea\u5b9a\u4e49\u4eea\u8868\u76d8","text":"

\u901a\u8fc7\u4f7f\u7528 Grafana CRD\uff0c\u53ef\u4ee5\u5c06\u4eea\u8868\u677f\u7684\u7ba1\u7406\u548c\u90e8\u7f72\u7eb3\u5165\u5230 Kubernetes \u7684\u751f\u547d\u5468\u671f\u7ba1\u7406\u4e2d\uff0c\u5b9e\u73b0\u4eea\u8868\u677f\u7684\u7248\u672c\u63a7\u5236\u3001\u81ea\u52a8\u5316\u90e8\u7f72\u548c\u96c6\u7fa4\u7ea7\u7684\u7ba1\u7406\u3002\u672c\u9875\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7 CRD \u548c UI \u754c\u9762\u5bfc\u5165\u81ea\u5b9a\u4e49\u7684\u4eea\u8868\u76d8\u3002

"},{"location":"admin/insight/dashboard/import-dashboard.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0 \u5e73\u53f0\uff0c\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \uff0c\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u9009\u62e9 kpanda-global-cluster \u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u5728\u5217\u8868\u4e2d\u67e5\u627e grafanadashboards.integreatly.org \u6587\u4ef6\uff0c\u8fdb\u5165\u8be6\u60c5\u3002

  3. \u70b9\u51fb Yaml \u521b\u5efa \uff0c\u4f7f\u7528\u4ee5\u4e0b\u6a21\u677f\uff0c\u5728 Json \u5b57\u6bb5\u4e2d\u66ff\u6362\u4eea\u8868\u76d8 JSON\u3002

    • namespace \uff1a\u586b\u5199\u76ee\u6807\u547d\u540d\u7a7a\u95f4\uff1b
    • name \uff1a\u586b\u5199\u4eea\u8868\u76d8\u7684\u540d\u79f0\u3002
    • label \uff1a\u5fc5\u586b\uff0c operator.insight.io/managed-by: insight \u3002
    apiVersion: integreatly.org/v1alpha1\nkind: GrafanaDashboard\nmetadata:\n  labels:\n    app: insight-grafana-operator\n    operator.insight.io/managed-by: insight\n  name: sample-dashboard\n  namespace: insight-system\nspec:\n  json: >\n    {\n      \"id\": null,\n      \"title\": \"Simple Dashboard\",\n      \"tags\": [],\n      \"style\": \"dark\",\n      \"timezone\": \"browser\",\n      \"editable\": true,\n      \"hideControls\": false,\n      \"graphTooltip\": 1,\n      \"panels\": [],\n      \"time\": {\n        \"from\": \"now-6h\",\n        \"to\": \"now\"\n      },\n      \"timepicker\": {\n        \"time_options\": [],\n        \"refresh_intervals\": []\n      },\n      \"templating\": {\n        \"list\": []\n      },\n      \"annotations\": {\n        \"list\": []\n      },\n      \"refresh\": \"5s\",\n      \"schemaVersion\": 17,\n      \"version\": 0,\n      \"links\": []\n    }\n
  4. \u70b9\u51fb \u786e\u8ba4 \u540e\uff0c\u7a0d\u7b49\u7247\u523b\u5373\u53ef\u5728 \u4eea\u8868\u76d8 \u4e2d\u67e5\u770b\u521a\u521a\u5bfc\u5165\u7684\u4eea\u8868\u76d8\u3002

Info

\u81ea\u5b9a\u4e49\u8bbe\u8ba1\u4eea\u8868\u76d8\uff0c\u8bf7\u53c2\u8003\u6dfb\u52a0\u4eea\u8868\u76d8\u9762\u677f\u3002

"},{"location":"admin/insight/dashboard/login-grafana.html","title":"\u8bbf\u95ee\u539f\u751f Grafana","text":"

Insight \u501f\u52a9 Grafana \u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u53ef\u89c6\u5316\u80fd\u529b\uff0c\u540c\u65f6\u4fdd\u7559\u4e86\u8bbf\u95ee\u539f\u751f Grafana \u7684\u5165\u53e3\u3002

"},{"location":"admin/insight/dashboard/login-grafana.html#_1","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u767b\u5f55\u6d4f\u89c8\u5668\uff0c\u5728\u6d4f\u89c8\u5668\u4e2d\u8f93\u5165 Grafana \u5730\u5740\u3002

    \u8bbf\u95ee\u5730\u5740\uff1a http://ip:\u8bbf\u95ee\u7aef\u53e3/ui/insight-grafana/login

    \u4f8b\u5982\uff1a http://10.6.10.233:30209/ui/insight-grafana/login

  2. \u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u767b\u5f55\uff0c\u4f7f\u7528\u9ed8\u8ba4\u7528\u6237\u540d\u3001\u5bc6\u7801\uff08admin/admin\uff09\u8fdb\u884c\u767b\u5f55\u3002

  3. \u70b9\u51fb Log in \u5b8c\u6210\u767b\u5f55\u3002

"},{"location":"admin/insight/dashboard/overview.html","title":"\u6982\u89c8","text":"

\u6982\u7387 \u4ec5\u7edf\u8ba1\u5df2\u5b89\u88c5 insight-agent \u4e14\u5176\u8fd0\u884c\u72b6\u6001\u4e3a\u6b63\u5e38\u7684\u96c6\u7fa4\u6570\u636e\u3002\u53ef\u5728\u6982\u89c8\u4e2d\u591a\u96c6\u7fa4\u7684\u8d44\u6e90\u6982\u51b5\uff1a

  • \u544a\u8b66\u7edf\u8ba1\uff1a\u53ef\u67e5\u770b\u6240\u6709\u96c6\u7fa4\u7684\u6b63\u5728\u544a\u8b66\u7684\u7edf\u8ba1\u6570\u636e\u3002
  • \u8d44\u6e90\u6d88\u8017\uff1a\u53ef\u6309 CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u548c\u78c1\u76d8\u4f7f\u7528\u7387\u5206\u522b\u67e5\u770b\u8fd1\u4e00\u5c0f\u65f6 TOP5 \u96c6\u7fa4\u3001\u8282\u70b9\u7684\u8d44\u6e90\u53d8\u5316\u8d8b\u52bf\u3002
  • \u9ed8\u8ba4\u6309\u7167\u6839\u636e CPU \u4f7f\u7528\u7387\u6392\u5e8f\u3002\u60a8\u53ef\u5207\u6362\u6307\u6807\u5207\u6362\u96c6\u7fa4\u3001\u8282\u70b9\u7684\u6392\u5e8f\u65b9\u5f0f\u3002
  • \u8d44\u6e90\u53d8\u5316\u8d8b\u52bf\uff1a\u53ef\u67e5\u770b\u8fd1 15 \u5929\u7684\u8282\u70b9\u4e2a\u6570\u8d8b\u52bf\u4ee5\u53ca\u4e00\u5c0f\u65f6 Pod \u7684\u8fd0\u884c\u8d8b\u52bf\u3002
  • \u670d\u52a1\u8bf7\u6c42\u6392\u884c\uff1a\u53ef\u67e5\u770b\u591a\u96c6\u7fa4\u4e2d\u8bf7\u6c42\u5ef6\u65f6\u3001\u9519\u8bef\u7387\u6392\u884c TOP5 \u7684\u670d\u52a1\u53ca\u6240\u5728\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u3002
"},{"location":"admin/insight/dashboard/overview.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

\u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u6982\u89c8 \u3002

"},{"location":"admin/insight/data-query/log.html","title":"\u65e5\u5fd7\u67e5\u8be2","text":"

Insight \u9ed8\u8ba4\u91c7\u96c6\u8282\u70b9\u65e5\u5fd7\u3001\u5bb9\u5668\u65e5\u5fd7\u4ee5\u53ca kubernetes \u5ba1\u8ba1\u65e5\u5fd7\u3002\u5728\u65e5\u5fd7\u67e5\u8be2\u9875\u9762\u4e2d\uff0c\u53ef\u67e5\u8be2\u767b\u5f55\u8d26\u53f7\u6743\u9650\u5185\u7684\u6807\u51c6\u8f93\u51fa (stdout) \u65e5\u5fd7\uff0c\u5305\u62ec\u8282\u70b9\u65e5\u5fd7\u3001\u4ea7\u54c1\u65e5\u5fd7\u3001Kubenetes \u5ba1\u8ba1\u65e5\u5fd7\u7b49\uff0c\u5feb\u901f\u5728\u5927\u91cf\u65e5\u5fd7\u4e2d\u67e5\u8be2\u5230\u6240\u9700\u7684\u65e5\u5fd7\uff0c\u540c\u65f6\u7ed3\u5408\u65e5\u5fd7\u7684\u6765\u6e90\u4fe1\u606f\u548c\u4e0a\u4e0b\u6587\u539f\u59cb\u6570\u636e\u8f85\u52a9\u5b9a\u4f4d\u95ee\u9898\u3002

"},{"location":"admin/insight/data-query/log.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u3002
  2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u65e5\u5fd7 \u3002

    • \u9ed8\u8ba4\u67e5\u8be2\u6700\u8fd1 24 \u5c0f\u65f6\uff1b
    • \u7b2c\u4e00\u6b21\u8fdb\u5165\u65f6\uff0c\u9ed8\u8ba4\u6839\u636e\u767b\u5f55\u8d26\u53f7\u6743\u9650\u67e5\u8be2\u6709\u6743\u9650\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u7684\u5bb9\u5668\u65e5\u5fd7\uff1b

  3. \u9876\u90e8 Tab \u9ed8\u8ba4\u8fdb\u5165 \u666e\u901a\u67e5\u8be2 \u3002

    1. \u70b9\u51fb \u7b5b\u9009 \u5c55\u5f00\u8fc7\u6ee4\u9762\u677f\uff0c\u53ef\u5207\u6362\u65e5\u5fd7\u641c\u7d22\u6761\u4ef6\u548c\u7c7b\u578b\u3002
    2. \u65e5\u5fd7\u7c7b\u578b\uff1a

      • \u5bb9\u5668\u65e5\u5fd7 \uff1a\u8bb0\u5f55\u96c6\u7fa4\u4e2d\u5bb9\u5668\u5185\u90e8\u7684\u6d3b\u52a8\u548c\u4e8b\u4ef6\uff0c\u5305\u62ec\u5e94\u7528\u7a0b\u5e8f\u7684\u8f93\u51fa\u3001\u9519\u8bef\u6d88\u606f\u3001\u8b66\u544a\u548c\u8c03\u8bd5\u4fe1\u606f\u7b49\u3002\u652f\u6301\u901a\u8fc7\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u5bb9\u5668\u7ec4\u3001\u5bb9\u5668\u8fc7\u6ee4\u65e5\u5fd7\u3002
      • \u8282\u70b9\u65e5\u5fd7 \uff1a\u8bb0\u5f55\u96c6\u7fa4\u4e2d\u6bcf\u4e2a\u8282\u70b9\u7684\u7cfb\u7edf\u7ea7\u522b\u65e5\u5fd7\u3002\u8fd9\u4e9b\u65e5\u5fd7\u5305\u542b\u8282\u70b9\u7684\u64cd\u4f5c\u7cfb\u7edf\u3001\u5185\u6838\u3001\u670d\u52a1\u548c\u7ec4\u4ef6\u7684\u76f8\u5173\u4fe1\u606f\u3002\u652f\u6301\u901a\u8fc7\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u6587\u4ef6\u8def\u5f84\u8fc7\u6ee4\u65e5\u5fd7\u3002
    3. \u652f\u6301\u5bf9\u5355\u4e2a\u5173\u952e\u5b57\u8fdb\u884c\u6a21\u7cca\u641c\u7d22\u3002

  4. \u9876\u90e8\u5207\u6362 Tab \u9009\u62e9 Lucene \u8bed\u6cd5\u67e5\u8be2 \u3002

    \u7b2c\u4e00\u6b21\u8fdb\u5165\u65f6\uff0c\u9ed8\u8ba4\u9009\u62e9\u767b\u5f55\u8d26\u53f7\u6743\u9650\u67e5\u8be2\u6709\u6743\u9650\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u7684\u5bb9\u5668\u65e5\u5fd7\u3002

    Lucene \u8bed\u6cd5\u8bf4\u660e\uff1a

    1. \u4f7f\u7528 \u903b\u8f91\u64cd\u4f5c\u7b26\uff08AND\u3001OR\u3001NOT\u3001\"\" \uff09\u7b26\u67e5\u8be2\u591a\u4e2a\u5173\u952e\u5b57\uff0c\u4f8b\u5982\uff1akeyword1 AND (keyword2 OR keyword3) NOT keyword4\u3002
    2. \u4f7f\u7528\u6ce2\u6d6a\u53f7 (~) \u5b9e\u73b0\u6a21\u7cca\u67e5\u8be2\uff0c\u5728 \"~\" \u540e\u53ef\u6307\u5b9a\u53ef\u9009\u7684\u53c2\u6570\uff0c\u7528\u4e8e\u63a7\u5236\u6a21\u7cca\u67e5\u8be2\u7684\u76f8\u4f3c\u5ea6\uff0c\u4e0d\u6307\u5b9a\u5219\u9ed8\u8ba4\u4f7f\u7528 0.5\u3002\u4f8b\u5982\uff1aerror~\u3002
    3. \u4f7f\u7528\u901a\u914d\u7b26 (*\u3001?) \u7528\u4f5c\u5355\u5b57\u7b26\u901a\u914d\u7b26\uff0c\u8868\u793a\u5339\u914d\u4efb\u610f\u4e00\u4e2a\u5b57\u7b26\u3002
    4. \u4f7f\u7528\u65b9\u62ec\u53f7 [ ] \u6216\u82b1\u62ec\u53f7 { } \u6765\u67e5\u8be2\u8303\u56f4\uff0c\u65b9\u62ec\u53f7\u00a0[ ]\u00a0\u8868\u793a\u95ed\u533a\u95f4\uff0c\u5305\u542b\u8fb9\u754c\u503c\u3002\u82b1\u62ec\u53f7\u00a0{ }\u00a0\u8868\u793a\u5f00\u533a\u95f4\uff0c\u6392\u9664\u8fb9\u754c\u503c\u3002\u8303\u56f4\u67e5\u8be2\u53ea\u9002\u7528\u4e8e\u80fd\u591f\u8fdb\u884c\u6392\u5e8f\u7684\u5b57\u6bb5\u7c7b\u578b\uff0c\u5982\u6570\u5b57\u3001\u65e5\u671f\u7b49\u3002\u4f8b\u5982\uff1atimestamp:[2022-01-01 TO 2022-01-31]\u3002
    5. \u66f4\u591a\u7528\u6cd5\u8bf7\u67e5\u770b\uff1aLucene \u8bed\u6cd5\u8bf4\u660e\u3002
"},{"location":"admin/insight/data-query/log.html#_3","title":"\u5176\u4ed6\u64cd\u4f5c","text":""},{"location":"admin/insight/data-query/log.html#_4","title":"\u67e5\u770b\u65e5\u5fd7\u4e0a\u4e0b\u6587","text":"

\u70b9\u51fb\u65e5\u5fd7\u540e\u7684\u6309\u94ae\uff0c\u5728\u53f3\u4fa7\u5212\u51fa\u9762\u677f\u4e2d\u53ef\u67e5\u770b\u8be5\u6761\u65e5\u5fd7\u7684\u9ed8\u8ba4 100 \u6761\u4e0a\u4e0b\u6587\u3002\u53ef\u5207\u6362 \u663e\u793a\u884c\u6570 \u67e5\u770b\u66f4\u591a\u4e0a\u4e0b\u6587\u5185\u5bb9\u3002

"},{"location":"admin/insight/data-query/log.html#_5","title":"\u5bfc\u51fa\u65e5\u5fd7\u6570\u636e","text":"

\u70b9\u51fb\u5217\u8868\u53f3\u4e0a\u4fa7\u7684\u4e0b\u8f7d\u6309\u94ae\u3002

  • \u652f\u6301\u914d\u7f6e\u5bfc\u51fa\u7684\u65e5\u5fd7\u5b57\u6bb5\uff0c\u6839\u636e\u65e5\u5fd7\u7c7b\u578b\u53ef\u914d\u7f6e\u7684\u5b57\u6bb5\u4e0d\u540c\uff0c\u5176\u4e2d \u65e5\u5fd7\u5185\u5bb9 \u5b57\u6bb5\u4e3a\u5fc5\u9009\u3002
  • \u652f\u6301\u5c06\u65e5\u5fd7\u67e5\u8be2\u7ed3\u679c\u5bfc\u51fa\u4e3a .txt \u6216 .csv \u683c\u5f0f\u3002

"},{"location":"admin/insight/data-query/metric.html","title":"\u6307\u6807\u67e5\u8be2","text":"

\u6307\u6807\u67e5\u8be2\u652f\u6301\u67e5\u8be2\u5bb9\u5668\u5404\u8d44\u6e90\u7684\u6307\u6807\u6570\u636e\uff0c\u53ef\u67e5\u770b\u76d1\u63a7\u6307\u6807\u7684\u8d8b\u52bf\u53d8\u5316\u3002\u540c\u65f6\uff0c\u9ad8\u7ea7\u67e5\u8be2\u652f\u6301\u539f\u751f PromQL \u8bed\u53e5\u8fdb\u884c\u6307\u6807\u67e5\u8be2\u3002

"},{"location":"admin/insight/data-query/metric.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
  • \u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002
"},{"location":"admin/insight/data-query/metric.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u3002

  2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u6307\u6807 \u3002

  3. \u9009\u62e9\u96c6\u7fa4\u3001\u7c7b\u578b\u3001\u8282\u70b9\u3001\u6307\u6807\u540d\u79f0\u67e5\u8be2\u6761\u4ef6\u540e\uff0c\u70b9\u51fb \u641c\u7d22 \uff0c\u5c4f\u5e55\u53f3\u4fa7\u5c06\u663e\u793a\u5bf9\u5e94\u6307\u6807\u56fe\u8868\u53ca\u6570\u636e\u8be6\u60c5\u3002

  4. \u652f\u6301\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u3002\u53ef\u624b\u52a8\u70b9\u51fb \u5237\u65b0 \u56fe\u6807\u6216\u9009\u62e9\u9ed8\u8ba4\u65f6\u95f4\u95f4\u9694\u8fdb\u884c\u5237\u65b0\u3002

  5. \u70b9\u51fb \u9ad8\u7ea7\u67e5\u8be2 \u9875\u7b7e\u901a\u8fc7\u539f\u751f\u7684 PromQL \u67e5\u8be2\u3002

Note

\u53c2\u9605 PromQL \u8bed\u6cd5\u3002

"},{"location":"admin/insight/faq/expand-once-es-full.html","title":"ElasticSearch \u6570\u636e\u585e\u6ee1\u5982\u4f55\u64cd\u4f5c\uff1f","text":"

\u5f53 ElasticSearch \u5185\u5b58\u5360\u6ee1\u65f6\uff0c\u53ef\u4ee5\u9009\u62e9\u6269\u5bb9\u6216\u8005\u5220\u9664\u6570\u636e\u6765\u89e3\u51b3\uff1a

\u4f60\u53ef\u4ee5\u8fd0\u884c\u5982\u4e0b\u547d\u4ee4\u67e5\u770b ES \u8282\u70b9\u7684\u8d44\u6e90\u5360\u6bd4\u3002

kubectl get pod -n mcamel-system | grep common-es-cluster-masters-es | awk '{print $1}' | xargs -I {} kubectl exec {} -n mcamel-system -c elasticsearch -- df -h | grep /usr/share/elasticsearch/data\n
"},{"location":"admin/insight/faq/expand-once-es-full.html#_1","title":"\u6269\u5bb9","text":"

\u5728\u4e3b\u673a\u8282\u70b9\u8fd8\u6709\u8d44\u6e90\u7684\u60c5\u51b5\u4e0b\uff0c \u6269\u5bb9 \u662f\u4e00\u79cd\u5e38\u89c1\u7684\u65b9\u6848\uff0c\u4e5f\u5c31\u662f\u63d0\u9ad8 PVC \u7684\u5bb9\u91cf\u3002

  1. \u5148\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6 es-data-0 \u8282\u70b9\u7684 PVC \u914d\u7f6e\uff0c\u8bf7\u4ee5\u5b9e\u9645\u7684\u73af\u5883\u7684 PVC \u4e3a\u51c6\u3002

    kubectl edit -n mcamel-system pvc elasticsearch-data-mcamel-common-es-cluster-masters-es-data-0\n
  2. \u7136\u540e\u4fee\u6539\u4ee5\u4e0b storage \u5b57\u6bb5\uff08\u9700\u8981\u4f7f\u7528\u7684\u5b58\u50a8\u7c7b SC \u53ef\u4ee5\u6269\u5bb9\uff09

    spec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 35Gi # (1)!\n
    1. \u8fd9\u4e2a\u6570\u503c\u9700\u8c03\u6574
"},{"location":"admin/insight/faq/expand-once-es-full.html#_2","title":"\u5220\u9664\u6570\u636e","text":"

\u5f53 ElasticSearch \u5185\u5b58\u5360\u6ee1\u65f6\uff0c\u4f60\u8fd8\u53ef\u4ee5\u5220\u9664 index \u6570\u636e\u91ca\u653e\u8d44\u6e90\u3002

\u4f60\u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u5165 Kibana \u9875\u9762\uff0c\u624b\u52a8\u6267\u884c\u5220\u9664\u64cd\u4f5c\u3002

  1. \u9996\u5148\u660e\u786e Kibana Pod \u662f\u5426\u5b58\u5728\u5e76\u4e14\u6b63\u5e38\u8fd0\u884c\uff1a

    kubectl get po -n mcamel-system |grep mcamel-common-es-cluster-masters-kb\n
  2. \u82e5\u4e0d\u5b58\u5728\uff0c\u5219\u624b\u52a8\u8bbe\u7f6e replica \u4e3a 1\uff0c\u5e76\u4e14\u7b49\u5f85\u670d\u52a1\u6b63\u5e38\u8fd0\u884c\uff1b\u82e5\u5b58\u5728\uff0c\u5219\u8df3\u8fc7\u8be5\u6b65\u9aa4

    kubectl scale -n mcamel-system deployment mcamel-common-es-cluster-masters-kb --replicas 1\n
  3. \u4fee\u6539 Kibana \u7684 Service \u4e3a NodePort \u66b4\u9732\u8bbf\u95ee\u65b9\u5f0f

    kubectl patch svc -n mcamel-system mcamel-common-es-cluster-masters-kb-http -p '{\"spec\":{\"type\":\"NodePort\"}}'\n\n# \u4fee\u6539\u5b8c\u6210\u540e\u67e5\u770b NodePort\u3002\u6b64\u4f8b\u7684\u7aef\u53e3\u4e3a 30128\uff0c\u5219\u8bbf\u95ee\u65b9\u5f0f\u4e3a https://{\u96c6\u7fa4\u4e2d\u7684\u8282\u70b9IP}:30128\n[root@insight-master1 ~]# kubectl get svc -n mcamel-system |grep mcamel-common-es-cluster-masters-kb-http\nmcamel-common-es-cluster-masters-kb-http   NodePort    10.233.51.174   <none>   5601:30128/TCP    108m\n
  4. \u83b7\u53d6 ElasticSearch \u7684 Secret\uff0c\u7528\u4e8e\u767b\u5f55 Kibana\uff08\u7528\u6237\u540d\u4e3a elastic\uff09

    kubectl get secrets -n mcamel-system mcamel-common-es-cluster-masters-es-elastic-user -o jsonpath=\"{.data.elastic}\" |base64 -d\n
  5. \u8fdb\u5165 Kibana -> Stack Management -> Index Management \uff0c\u6253\u5f00 Include hidden indices \u9009\u9879\uff0c\u5373\u53ef\u89c1\u6240\u6709\u7684 index\u3002 \u6839\u636e index \u7684\u5e8f\u53f7\u5927\u5c0f\uff0c\u4fdd\u7559\u5e8f\u53f7\u5927\u7684 index\uff0c\u5220\u9664\u5e8f\u53f7\u5c0f\u7684 index\u3002

"},{"location":"admin/insight/faq/ignore-pod-log-collect.html","title":"\u5bb9\u5668\u65e5\u5fd7\u9ed1\u540d\u5355","text":""},{"location":"admin/insight/faq/ignore-pod-log-collect.html#_2","title":"\u914d\u7f6e\u65b9\u5f0f","text":"
  1. \u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u4e0d\u9700\u8981\u91c7\u96c6\u5bb9\u5668\u65e5\u5fd7\u7684 Pod, \u5728 Pod \u7684 annotation \u4e2d\u6dfb\u52a0 insight.opentelemetry.io/log-ignore: \"true\" \u6765\u6307\u5b9a\u4e0d\u9700\u8981\u91c7\u96c6\u7684\u5bb9\u5668\u65e5\u5fd7\uff0c\u4f8b\u5982\uff1a

    apiVersion: apps/v1\nkind: Pod\nmetadata:\n  name: log-generator\nspec:\n  selector:\n    matchLabels:\n      app.kubernetes.io/name: log-generator\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io/name: log-generator\n      annotations:\n        insight.opentelemetry.io/log-ignore: \"true\"\n    spec:\n      containers:\n        - name: nginx\n          image: banzaicloud/log-generator:0.3.2\n
  2. \u91cd\u542f Pod\uff0c\u7b49\u5f85 Pod \u6062\u590d\u8fd0\u884c\u72b6\u6001\u4e4b\u540e\uff0cFluenbit \u5c06\u4e0d\u518d\u91c7\u96c6\u8fd9\u4e2a Pod \u5185\u7684\u5bb9\u5668\u7684\u65e5\u5fd7\u3002

"},{"location":"admin/insight/faq/traceclockskew.html","title":"\u94fe\u8def\u6570\u636e\u4e2d\u7684\u65f6\u949f\u504f\u79fb","text":"

\u5728\u4e00\u4e2a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\uff0c\u7531\u4e8e Clock Skew\uff08\u65f6\u949f\u504f\u659c\u8c03\u6574\uff09\u5f71\u54cd\uff0c \u4e0d\u540c\u4e3b\u673a\u95f4\u5b58\u5728\u65f6\u95f4\u6f02\u79fb\u73b0\u8c61\u3002\u901a\u4fd7\u6765\u8bf4\uff0c\u4e0d\u540c\u4e3b\u673a\u5728\u540c\u4e00\u65f6\u523b\u7684\u7cfb\u7edf\u65f6\u95f4\u662f\u6709\u5fae\u5c0f\u7684\u504f\u5dee\u7684\u3002

\u94fe\u8def\u8ffd\u8e2a\u7cfb\u7edf\u662f\u4e00\u4e2a\u5178\u578b\u7684\u5206\u5e03\u5f0f\u7cfb\u7edf\uff0c\u5b83\u5728\u6d89\u53ca\u65f6\u95f4\u6570\u636e\u91c7\u96c6\u4e0a\u4e5f\u53d7\u8fd9\u79cd\u73b0\u8c61\u5f71\u54cd\uff0c\u6bd4\u5982\u5728\u4e00\u6761\u94fe\u8def\u4e2d\u670d\u52a1\u7aef span \u7684\u5f00\u59cb\u65f6\u95f4\u65e9\u4e8e\u5ba2\u6237\u7aef span\uff0c \u8fd9\u79cd\u73b0\u8c61\u903b\u8f91\u4e0a\u662f\u4e0d\u5b58\u5728\u7684\uff0c\u4f46\u662f\u7531\u4e8e\u65f6\u949f\u504f\u79fb\u5f71\u54cd\uff0c\u94fe\u8def\u6570\u636e\u5728\u5404\u4e2a\u670d\u52a1\u4e2d\u88ab\u91c7\u96c6\u5230\u7684\u90a3\u4e00\u523b\u4e3b\u673a\u95f4\u7684\u7cfb\u7edf\u65f6\u5b58\u5728\u504f\u5dee\uff0c\u6700\u7ec8\u9020\u6210\u5982\u4e0b\u56fe\u6240\u793a\u7684\u73b0\u8c61\uff1a

\u4e0a\u56fe\u4e2d\u51fa\u73b0\u7684\u73b0\u8c61\u7406\u8bba\u4e0a\u65e0\u6cd5\u6d88\u9664\u3002\u4f46\u8be5\u73b0\u8c61\u8f83\u5c11\uff0c\u5373\u4f7f\u51fa\u73b0\u4e5f\u4e0d\u4f1a\u5f71\u54cd\u670d\u52a1\u95f4\u7684\u8c03\u7528\u5173\u7cfb\u3002

\u76ee\u524d Insight \u4f7f\u7528 Jaeger UI \u6765\u5c55\u793a\u94fe\u8def\u6570\u636e\uff0cUI \u5728\u9047\u5230\u8fd9\u79cd\u94fe\u8def\u65f6\u4f1a\u63d0\u9192\uff1a

\u76ee\u524d Jaeger \u7684\u793e\u533a\u6b63\u5728\u5c1d\u8bd5\u901a\u8fc7 UI \u5c42\u9762\u6765\u4f18\u5316\u8fd9\u4e2a\u95ee\u9898\u3002

\u66f4\u591a\u7684\u76f8\u5173\u8d44\u6599\uff0c\u8bf7\u53c2\u8003\uff1a

  • Clock Skew Adjuster considered harmful
  • Add ability to display unadjusted trace in the UI
  • Clock Skew Adjustment
"},{"location":"admin/insight/infra/cluster.html","title":"\u96c6\u7fa4\u76d1\u63a7","text":"

\u901a\u8fc7\u96c6\u7fa4\u76d1\u63a7\uff0c\u4f60\u53ef\u4ee5\u67e5\u770b\u96c6\u7fa4\u7684\u57fa\u672c\u4fe1\u606f\u3001\u8be5\u96c6\u7fa4\u4e2d\u7684\u8d44\u6e90\u6d88\u8017\u4ee5\u53ca\u4e00\u6bb5\u65f6\u95f4\u7684\u8d44\u6e90\u6d88\u8017\u53d8\u5316\u8d8b\u52bf\u7b49\u3002

"},{"location":"admin/insight/infra/cluster.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

"},{"location":"admin/insight/infra/cluster.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u96c6\u7fa4 \u3002\u5728\u8be5\u9875\u9762\u53ef\u67e5\u770b\u4ee5\u4e0b\u4fe1\u606f\uff1a

    • \u8d44\u6e90\u6982\u89c8 \uff1a\u591a\u9009\u96c6\u7fa4\u4e2d\u7684\u8282\u70b9\u3001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6b63\u5e38\u548c\u5168\u90e8\u7684\u6570\u91cf\u7edf\u8ba1\uff1b
    • \u6545\u969c \uff1a\u7edf\u8ba1\u5f53\u524d\u96c6\u7fa4\u4ea7\u751f\u7684\u544a\u8b66\u6570\u91cf\uff1b
    • \u8d44\u6e90\u6d88\u8017 \uff1a\u6240\u9009\u96c6\u7fa4\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u7684\u5b9e\u9645\u4f7f\u7528\u91cf\u548c\u603b\u91cf\uff1b
    • \u6307\u6807\u8bf4\u660e \uff1a\u6240\u9009\u96c6\u7fa4\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u8bfb\u5199\u3001\u7f51\u7edc\u63a5\u6536\u53d1\u9001\u7684\u53d8\u5316\u8d8b\u52bf\u3002

  3. \u5207\u6362\u5230 \u8d44\u6e90\u6c34\u4f4d\u7ebf\u76d1\u63a7 \u9875\u7b7e\uff0c\u53ef\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u66f4\u591a\u76d1\u63a7\u6570\u636e\u3002

"},{"location":"admin/insight/infra/cluster.html#_4","title":"\u53c2\u8003\u6307\u6807\u8bf4\u660e","text":"\u6307\u6807\u540d \u8bf4\u660e CPU \u4f7f\u7528\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u8d44\u6e90\u7684\u5b9e\u9645 CPU \u7528\u91cf\u4e0e\u6240\u6709\u8282\u70b9\u7684 CPU \u603b\u91cf\u7684\u6bd4\u7387\u3002 CPU \u5206\u914d\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u7684 CPU \u8bf7\u6c42\u91cf\u7684\u603b\u548c\u4e0e\u6240\u6709\u8282\u70b9\u7684 CPU \u603b\u91cf\u7684\u6bd4\u7387\u3002 \u5185\u5b58\u4f7f\u7528\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u8d44\u6e90\u7684\u5b9e\u9645\u5185\u5b58\u7528\u91cf\u4e0e\u6240\u6709\u8282\u70b9\u7684\u5185\u5b58\u603b\u91cf\u7684\u6bd4\u7387\u3002 \u5185\u5b58\u5206\u914d\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u7684\u5185\u5b58\u8bf7\u6c42\u91cf\u7684\u603b\u548c\u4e0e\u6240\u6709\u8282\u70b9\u7684\u5185\u5b58\u603b\u91cf\u7684\u6bd4\u7387\u3002"},{"location":"admin/insight/infra/container.html","title":"\u5bb9\u5668\u76d1\u63a7","text":"

\u5bb9\u5668\u76d1\u63a7\u662f\u5bf9\u96c6\u7fa4\u7ba1\u7406\u4e2d\u5de5\u4f5c\u8d1f\u8f7d\u7684\u76d1\u63a7\uff0c\u5728\u5217\u8868\u4e2d\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u57fa\u672c\u4fe1\u606f\u548c\u72b6\u6001\u3002\u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\uff0c\u53ef\u67e5\u770b\u6b63\u5728\u544a\u8b66\u7684\u6570\u91cf\u4ee5\u53ca CPU\u3001\u5185\u5b58\u7b49\u8d44\u6e90\u6d88\u8017\u7684\u53d8\u5316\u8d8b\u52bf\u3002

"},{"location":"admin/insight/infra/container.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u96c6\u7fa4\u5df2\u5b89\u88c5 insight-agent\uff0c\u4e14\u6240\u6709\u7684\u5bb9\u5668\u7ec4\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

  • \u5b89\u88c5 insight-agent\uff0c\u8bf7\u53c2\u8003\u5728\u7ebf\u5b89\u88c5 insight-agent \u6216\u79bb\u7ebf\u5347\u7ea7 insight-agent\u3002
"},{"location":"admin/insight/infra/container.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u67e5\u770b\u670d\u52a1\u76d1\u63a7\u6307\u6807\uff1a

  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u5de5\u4f5c\u8d1f\u8f7d \u3002

  3. \u5207\u6362\u9876\u90e8 Tab\uff0c\u67e5\u770b\u4e0d\u540c\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\u3002

  4. \u70b9\u51fb\u76ee\u6807\u5de5\u4f5c\u8d1f\u8f7d\u540d\u79f0\u67e5\u770b\u8be6\u60c5\u3002

    1. \u6545\u969c\uff1a\u5728\u6545\u969c\u5361\u7247\u4e2d\u7edf\u8ba1\u8be5\u5de5\u4f5c\u8d1f\u8f7d\u5f53\u524d\u6b63\u5728\u544a\u8b66\u7684\u603b\u6570\u3002
    2. \u8d44\u6e90\u6d88\u8017\uff1a\u5728\u8be5\u5361\u7247\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684 CPU\u3001\u5185\u5b58\u3001\u7f51\u7edc\u7684\u4f7f\u7528\u60c5\u51b5\u3002
    3. \u76d1\u63a7\u6307\u6807\uff1a\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u9ed8\u8ba4 1 \u5c0f\u65f6\u7684 CPU\u3001\u5185\u5b58\u3001\u7f51\u7edc\u548c\u78c1\u76d8\u7684\u53d8\u5316\u8d8b\u52bf\u3002

  5. \u5207\u6362 Tab \u5230 \u5bb9\u5668\u7ec4\u5217\u8868 \uff0c\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u5404\u4e2a\u5bb9\u5668\u7ec4\u72b6\u6001\u3001\u6240\u5728\u8282\u70b9\u3001\u91cd\u542f\u6b21\u6570\u7b49\u4fe1\u606f\u3002

  6. \u5207\u6362 Tab \u5230 JVM \u76d1\u63a7 \uff0c\u53ef\u67e5\u770b\u5404\u4e2a\u5bb9\u5668\u7ec4\u7684 JVM \u6307\u6807\u3002

    Note

    1. JVM \u76d1\u63a7\u529f\u80fd\u4ec5\u652f\u6301 Java \u8bed\u8a00\u3002
    2. \u5f00\u542f JVM \u76d1\u63a7\u529f\u80fd\uff0c\u8bf7\u53c2\u8003\u5f00\u59cb\u76d1\u63a7 Java \u5e94\u7528\u3002
"},{"location":"admin/insight/infra/container.html#_4","title":"\u6307\u6807\u53c2\u8003\u8bf4\u660e","text":"\u6307\u6807\u540d\u79f0 \u8bf4\u660e CPU \u4f7f\u7528\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684 CPU \u4f7f\u7528\u91cf\u4e4b\u548c\u3002 CPU \u8bf7\u6c42\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684 CPU \u8bf7\u6c42\u91cf\u4e4b\u548c\u3002 CPU \u9650\u5236\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684 CPU \u9650\u5236\u91cf\u4e4b\u548c\u3002 \u5185\u5b58\u4f7f\u7528\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c\u3002 \u5185\u5b58\u8bf7\u6c42\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c\u3002 \u5185\u5b58\u9650\u5236\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u9650\u5236\u91cf\u4e4b\u548c\u3002 \u78c1\u76d8\u8bfb\u5199\u901f\u7387 \u6307\u5b9a\u65f6\u95f4\u8303\u56f4\u5185\u78c1\u76d8\u6bcf\u79d2\u8fde\u7eed\u8bfb\u53d6\u548c\u5199\u5165\u7684\u603b\u548c\uff0c\u8868\u793a\u78c1\u76d8\u6bcf\u79d2\u8bfb\u53d6\u548c\u5199\u5165\u64cd\u4f5c\u6570\u7684\u6027\u80fd\u5ea6\u91cf\u3002 \u7f51\u7edc\u53d1\u9001\u63a5\u6536\u901f\u7387 \u6307\u5b9a\u65f6\u95f4\u8303\u56f4\u5185\uff0c\u6309\u5de5\u4f5c\u8d1f\u8f7d\u7edf\u8ba1\u7684\u7f51\u7edc\u6d41\u91cf\u7684\u6d41\u5165\u3001\u6d41\u51fa\u901f\u7387\u3002"},{"location":"admin/insight/infra/event.html","title":"\u4e8b\u4ef6\u67e5\u8be2","text":"

AI \u7b97\u529b\u5e73\u53f0 Insight \u652f\u6301\u6309\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u67e5\u8be2\u4e8b\u4ef6\uff0c\u5e76\u63d0\u4f9b\u4e86\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03\u56fe\uff0c\u5bf9\u91cd\u8981\u4e8b\u4ef6\u8fdb\u884c\u7edf\u8ba1\u3002

"},{"location":"admin/insight/infra/event.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u3002
  2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u57fa\u7840\u8bbe\u7f6e > \u4e8b\u4ef6 \u3002

"},{"location":"admin/insight/infra/event.html#_3","title":"\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03","text":"

\u9ed8\u8ba4\u663e\u793a\u6700\u8fd1 12 \u5c0f\u65f6\u5185\u53d1\u751f\u7684\u4e8b\u4ef6\uff0c\u60a8\u53ef\u4ee5\u5728\u53f3\u4e0a\u89d2\u9009\u62e9\u4e0d\u540c\u7684\u65f6\u95f4\u8303\u56f4\u6765\u67e5\u770b\u8f83\u957f\u6216\u8f83\u77ed\u7684\u65f6\u95f4\u6bb5\u3002 \u60a8\u8fd8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u91c7\u6837\u95f4\u9694\u4e3a 1 \u5206\u949f\u81f3 5 \u5c0f\u65f6\u3002

\u901a\u8fc7\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03\u56fe\uff0c\u60a8\u53ef\u4ee5\u76f4\u89c2\u5730\u4e86\u89e3\u4e8b\u4ef6\u7684\u5bc6\u96c6\u7a0b\u5ea6\u548c\u5206\u6563\u60c5\u51b5\u3002 \u8fd9\u6709\u52a9\u4e8e\u5bf9\u540e\u7eed\u7684\u96c6\u7fa4\u8fd0\u7ef4\u8fdb\u884c\u8bc4\u4f30\uff0c\u5e76\u505a\u597d\u51c6\u5907\u548c\u5b89\u6392\u5de5\u4f5c\u3002 \u5982\u679c\u4e8b\u4ef6\u5bc6\u96c6\u53d1\u751f\u5728\u7279\u5b9a\u65f6\u6bb5\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u8c03\u914d\u66f4\u591a\u7684\u8d44\u6e90\u6216\u91c7\u53d6\u76f8\u5e94\u63aa\u65bd\u6765\u786e\u4fdd\u96c6\u7fa4\u7a33\u5b9a\u6027\u548c\u9ad8\u53ef\u7528\u6027\u3002 \u800c\u5982\u679c\u4e8b\u4ef6\u8f83\u4e3a\u5206\u6563\uff0c\u5728\u6b64\u671f\u95f4\u60a8\u53ef\u4ee5\u5408\u7406\u5b89\u6392\u5176\u4ed6\u8fd0\u7ef4\u5de5\u4f5c\uff0c\u4f8b\u5982\u7cfb\u7edf\u4f18\u5316\u3001\u5347\u7ea7\u6216\u5904\u7406\u5176\u4ed6\u4efb\u52a1\u3002

\u901a\u8fc7\u7efc\u5408\u8003\u8651\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03\u56fe\u548c\u65f6\u95f4\u8303\u56f4\uff0c\u60a8\u80fd\u66f4\u597d\u5730\u89c4\u5212\u548c\u7ba1\u7406\u96c6\u7fa4\u7684\u8fd0\u7ef4\u5de5\u4f5c\uff0c\u786e\u4fdd\u7cfb\u7edf\u7a33\u5b9a\u6027\u548c\u53ef\u9760\u6027\u3002

"},{"location":"admin/insight/infra/event.html#_4","title":"\u4e8b\u4ef6\u603b\u6570\u548c\u7edf\u8ba1","text":"

\u901a\u8fc7\u91cd\u8981\u4e8b\u4ef6\u7edf\u8ba1\uff0c\u60a8\u53ef\u4ee5\u65b9\u4fbf\u5730\u4e86\u89e3\u955c\u50cf\u62c9\u53d6\u5931\u8d25\u6b21\u6570\u3001\u5065\u5eb7\u68c0\u67e5\u5931\u8d25\u6b21\u6570\u3001\u5bb9\u5668\u7ec4\uff08Pod\uff09\u8fd0\u884c\u5931\u8d25\u6b21\u6570\u3001 Pod \u8c03\u5ea6\u5931\u8d25\u6b21\u6570\u3001\u5bb9\u5668 OOM \u5185\u5b58\u8017\u5c3d\u6b21\u6570\u3001\u5b58\u50a8\u5377\u6302\u8f7d\u5931\u8d25\u6b21\u6570\u4ee5\u53ca\u6240\u6709\u4e8b\u4ef6\u7684\u603b\u6570\u3002\u8fd9\u4e9b\u4e8b\u4ef6\u901a\u5e38\u5206\u4e3a\u300cWarning\u300d\u548c\u300cNormal\u300d\u4e24\u7c7b\u3002

"},{"location":"admin/insight/infra/event.html#_5","title":"\u4e8b\u4ef6\u5217\u8868","text":"

\u4e8b\u4ef6\u5217\u8868\u4ee5\u65f6\u95f4\u4e3a\u8f74\uff0c\u4ee5\u6d41\u6c34\u7684\u5f62\u5f0f\u5c55\u793a\u53d1\u751f\u7684\u4e8b\u4ef6\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u300c\u6700\u8fd1\u53d1\u751f\u65f6\u95f4\u300d\u548c\u300c\u7ea7\u522b\u300d\u8fdb\u884c\u6392\u5e8f\u3002

\u70b9\u51fb\u53f3\u4fa7\u7684 \u2699\ufe0f \u56fe\u6807\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u559c\u597d\u548c\u9700\u6c42\u6765\u81ea\u5b9a\u4e49\u663e\u793a\u7684\u5217\u3002

\u5728\u9700\u8981\u7684\u65f6\u5019\uff0c\u60a8\u8fd8\u53ef\u4ee5\u70b9\u51fb\u5237\u65b0\u56fe\u6807\u6765\u66f4\u65b0\u5f53\u524d\u7684\u4e8b\u4ef6\u5217\u8868\u3002

"},{"location":"admin/insight/infra/event.html#_6","title":"\u5176\u4ed6\u64cd\u4f5c","text":"
  1. \u5728\u4e8b\u4ef6\u5217\u8868\u4e2d\u64cd\u4f5c\u5217\u7684\u56fe\u6807\uff0c\u53ef\u67e5\u770b\u67d0\u4e00\u4e8b\u4ef6\u7684\u5143\u6570\u636e\u4fe1\u606f\u3002

  2. \u70b9\u51fb\u9876\u90e8\u9875\u7b7e\u7684 \u4e0a\u4e0b\u6587 \u53ef\u67e5\u770b\u8be5\u4e8b\u4ef6\u5bf9\u5e94\u8d44\u6e90\u7684\u5386\u53f2\u4e8b\u4ef6\u8bb0\u5f55\u3002

"},{"location":"admin/insight/infra/event.html#_7","title":"\u53c2\u8003","text":"

\u6709\u5173\u7cfb\u7edf\u81ea\u5e26\u7684 Event \u4e8b\u4ef6\u7684\u8be6\u7ec6\u542b\u4e49\uff0c\u8bf7\u53c2\u9605 Kubenetest API \u4e8b\u4ef6\u5217\u8868\u3002

"},{"location":"admin/insight/infra/namespace.html","title":"\u547d\u540d\u7a7a\u95f4\u76d1\u63a7","text":"

\u4ee5\u547d\u540d\u7a7a\u95f4\u4e3a\u7ef4\u5ea6\uff0c\u5feb\u901f\u67e5\u8be2\u547d\u540d\u7a7a\u95f4\u5185\u7684\u8d44\u6e90\u6d88\u8017\u548c\u53d8\u5316\u8d8b\u52bf\u3002

"},{"location":"admin/insight/infra/namespace.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

"},{"location":"admin/insight/infra/namespace.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd > \u547d\u540d\u7a7a\u95f4 \u3002\u5728\u8be5\u9875\u9762\u53ef\u67e5\u770b\u4ee5\u4e0b\u4fe1\u606f\uff1a

    1. \u5207\u6362\u547d\u540d\u7a7a\u95f4\uff1a\u5728\u9876\u90e8\u5207\u6362\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\uff1b
    2. \u8d44\u6e90\u6982\u89c8\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6b63\u5e38\u548c\u5168\u90e8\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u91cf\uff1b
    3. \u6545\u969c\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b\u4ea7\u751f\u7684\u544a\u8b66\u6570\u91cf\uff1b
    4. \u4e8b\u4ef6\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b 24 \u5c0f\u65f6\u5185 Warning \u7ea7\u522b\u7684\u4e8b\u4ef6\u6570\u91cf\uff1b
    5. \u8d44\u6e90\u6d88\u8017\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b\u5bb9\u5668\u7ec4\u7684 CPU\u3001\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c \u53ca CPU\u3001\u5185\u5b58\u914d\u989d\u60c5\u51b5\u3002

"},{"location":"admin/insight/infra/namespace.html#_4","title":"\u6307\u6807\u8bf4\u660e","text":"\u6307\u6807\u540d \u8bf4\u660e CPU \u4f7f\u7528\u91cf \u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e2d\u5bb9\u5668\u7ec4\u7684 CPU \u4f7f\u7528\u91cf\u4e4b\u548c \u5185\u5b58\u4f7f\u7528\u91cf \u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e2d\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c \u5bb9\u5668\u7ec4 CPU \u4f7f\u7528\u91cf \u547d\u540d\u7a7a\u95f4\u4e2d\u5404\u5bb9\u5668\u7ec4\u7684 CPU \u4f7f\u7528\u91cf \u5bb9\u5668\u7ec4\u5185\u5b58\u4f7f\u7528\u91cf \u547d\u540d\u7a7a\u95f4\u4e2d\u5404\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf"},{"location":"admin/insight/infra/node.html","title":"\u8282\u70b9\u76d1\u63a7","text":"

\u901a\u8fc7\u8282\u70b9\u76d1\u63a7\uff0c\u4f60\u53ef\u4ee5\u6982\u89c8\u6240\u9009\u96c6\u7fa4\u4e0b\u8282\u70b9\u7684\u5f53\u524d\u5065\u5eb7\u72b6\u6001\u3001\u5bf9\u5e94\u5bb9\u5668\u7ec4\u7684\u5f02\u5e38\u6570\u91cf\uff1b \u5728\u5f53\u524d\u8282\u70b9\u8be6\u60c5\u9875\uff0c\u4f60\u53ef\u4ee5\u67e5\u770b\u6b63\u5728\u544a\u8b66\u7684\u6570\u91cf\u4ee5\u53ca CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u7b49\u8d44\u6e90\u6d88\u8017\u7684\u53d8\u5316\u8d8b\u52bf\u56fe\u3002

"},{"location":"admin/insight/infra/node.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

"},{"location":"admin/insight/infra/node.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u8282\u70b9 \u3002\u5728\u8be5\u9875\u9762\u53ef\u67e5\u770b\u4ee5\u4e0b\u4fe1\u606f\uff1a

    • \u96c6\u7fa4\u5207\u6362 \uff1a\u5207\u6362\u9876\u90e8\u7684\u4e0b\u62c9\u6846\u53ef\u5207\u6362\u96c6\u7fa4\uff1b
    • \u8282\u70b9\u5217\u8868 \uff1a\u6240\u9009\u96c6\u7fa4\u4e2d\u7684\u8282\u70b9\u5217\u8868\uff0c\u5355\u51fb\u5207\u6362\u8282\u70b9\u3002
    • \u6545\u969c \uff1a\u7edf\u8ba1\u5f53\u524d\u96c6\u7fa4\u4ea7\u751f\u7684\u544a\u8b66\u6570\u91cf\uff1b
    • \u8d44\u6e90\u6d88\u8017 \uff1a\u6240\u9009\u8282\u70b9\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u7684\u5b9e\u9645\u4f7f\u7528\u91cf\u548c\u603b\u91cf\uff1b
    • \u6307\u6807\u8bf4\u660e \uff1a\u6240\u9009\u8282\u70b9\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u8bfb\u5199\u3001\u7f51\u7edc\u63a5\u6536\u53d1\u9001\u7684\u53d8\u5316\u8d8b\u52bf\u3002

  3. \u5207\u6362\u5230 \u8d44\u6e90\u6c34\u4f4d\u7ebf\u76d1\u63a7 \u9875\u7b7e\uff0c\u53ef\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684\u66f4\u591a\u76d1\u63a7\u6570\u636e\u3002

"},{"location":"admin/insight/infra/probe.html","title":"\u62e8\u6d4b","text":"

\u62e8\u6d4b\uff08Probe\uff09\u6307\u7684\u662f\u57fa\u4e8e\u9ed1\u76d2\u76d1\u63a7\uff0c\u5b9a\u671f\u901a\u8fc7 HTTP\u3001TCP \u7b49\u65b9\u5f0f\u5bf9\u76ee\u6807\u8fdb\u884c\u8fde\u901a\u6027\u6d4b\u8bd5\uff0c\u5feb\u901f\u53d1\u73b0\u6b63\u5728\u53d1\u751f\u7684\u6545\u969c\u3002

Insight \u57fa\u4e8e Prometheus Blackbox Exporter \u5de5\u5177\u901a\u8fc7 HTTP\u3001HTTPS\u3001DNS\u3001TCP \u548c ICMP \u7b49\u534f\u8bae\uff0c\u5bf9\u7f51\u7edc\u8fdb\u884c\u63a2\u6d4b\u5e76\u8fd4\u56de\u63a2\u6d4b\u7ed3\u679c\u4ee5\u4fbf\u4e86\u89e3\u7f51\u7edc\u72b6\u6001\u3002

"},{"location":"admin/insight/infra/probe.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u76ee\u6807\u96c6\u7fa4\u4e2d\u5df2\u6210\u529f\u90e8\u7f72 insight-agent\uff0c\u4e14\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

"},{"location":"admin/insight/infra/probe.html#_3","title":"\u67e5\u770b\u62e8\u6d4b\u4efb\u52a1","text":"
  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\uff1b
  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u62e8\u6d4b\u3002

    • \u70b9\u51fb\u8868\u683c\u4e2d\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u4e0b\u62c9\u6846\uff0c\u53ef\u5207\u6362\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4
    • \u4f60\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u2699\ufe0f \u4fee\u6539\u663e\u793a\u7684\u5217\uff0c\u9ed8\u8ba4\u4e3a\u62e8\u6d4b\u540d\u79f0\u3001\u63a2\u6d4b\u65b9\u5f0f\u3001\u63a2\u6d4b\u76ee\u6807\u3001\u8fde\u901a\u72b6\u6001\u3001\u521b\u5efa\u65f6\u95f4
    • \u8fde\u901a\u72b6\u6001\u6709 3 \u79cd\uff1a
      • \u6b63\u5e38\uff1aProbe \u6210\u529f\u8fde\u63a5\u5230\u4e86\u76ee\u6807\uff0c\u76ee\u6807\u8fd4\u56de\u4e86\u9884\u671f\u7684\u54cd\u5e94
      • \u5f02\u5e38\uff1aProbe \u65e0\u6cd5\u8fde\u63a5\u5230\u76ee\u6807\uff0c\u6216\u76ee\u6807\u6ca1\u6709\u8fd4\u56de\u9884\u671f\u7684\u54cd\u5e94
      • Pending\uff1aProbe \u6b63\u5728\u5c1d\u8bd5\u8fde\u63a5\u76ee\u6807
    • \u4f60\u53ef\u4ee5\u5728 \ud83d\udd0d \u641c\u7d22\u6846\u4e2d\u952e\u5165\u540d\u79f0\uff0c\u6a21\u7cca\u641c\u7d22\u67d0\u4e9b\u62e8\u6d4b\u4efb\u52a1

"},{"location":"admin/insight/infra/probe.html#_4","title":"\u521b\u5efa\u62e8\u6d4b\u4efb\u52a1","text":"
  1. \u70b9\u51fb \u521b\u5efa\u62e8\u6d4b\u4efb\u52a1\u3002
  2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65

    • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u62e8\u6d4b\u7684\u96c6\u7fa4
    • \u547d\u540d\u7a7a\u95f4\uff1a\u62e8\u6d4b\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4

  3. \u914d\u7f6e\u63a2\u6d4b\u53c2\u6570\u3002

    • Blackbox \u5b9e\u4f8b\uff1a\u9009\u62e9\u8d1f\u8d23\u63a2\u6d4b\u7684 blackbox \u5b9e\u4f8b
    • \u63a2\u6d4b\u65b9\u5f0f\uff1a
      • HTTP\uff1a\u901a\u8fc7\u53d1\u9001 HTTP \u6216 HTTPS \u8bf7\u6c42\u5230\u76ee\u6807 URL\uff0c\u68c0\u6d4b\u5176\u8fde\u901a\u6027\u548c\u54cd\u5e94\u65f6\u95f4\uff0c\u8fd9\u53ef\u4ee5\u7528\u4e8e\u76d1\u6d4b\u7f51\u7ad9\u6216 Web \u5e94\u7528\u7684\u53ef\u7528\u6027\u548c\u6027\u80fd
      • TCP\uff1a\u901a\u8fc7\u5efa\u7acb\u5230\u76ee\u6807\u4e3b\u673a\u548c\u7aef\u53e3\u7684 TCP \u8fde\u63a5\uff0c\u68c0\u6d4b\u5176\u8fde\u901a\u6027\u548c\u54cd\u5e94\u65f6\u95f4\u3002\u8fd9\u53ef\u4ee5\u7528\u4e8e\u76d1\u6d4b\u57fa\u4e8e TCP \u7684\u670d\u52a1\uff0c\u5982 Web \u670d\u52a1\u5668\u3001\u6570\u636e\u5e93\u670d\u52a1\u5668\u7b49
      • \u5176\u4ed6\uff1a\u652f\u6301\u901a\u8fc7\u914d\u7f6e ConfigMap \u81ea\u5b9a\u4e49\u63a2\u6d4b\u65b9\u5f0f\uff0c\u53ef\u53c2\u8003\u81ea\u5b9a\u4e49\u62e8\u6d4b\u65b9\u5f0f
    • \u63a2\u6d4b\u76ee\u6807\uff1a\u63a2\u6d4b\u7684\u76ee\u6807\u5730\u5740\uff0c\u652f\u6301\u57df\u540d\u6216 IP \u5730\u5740\u7b49
    • \u6807\u7b7e\uff1a\u81ea\u5b9a\u4e49\u6807\u7b7e\uff0c\u8be5\u6807\u7b7e\u4f1a\u81ea\u52a8\u6dfb\u52a0\u5230 Prometheus \u7684 Label \u4e2d
    • \u63a2\u6d4b\u95f4\u9694\uff1a\u63a2\u6d4b\u95f4\u9694\u65f6\u95f4
    • \u63a2\u6d4b\u8d85\u65f6\uff1a\u63a2\u6d4b\u76ee\u6807\u65f6\u7684\u6700\u957f\u7b49\u5f85\u65f6\u95f4

  4. \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

Warning

\u62e8\u6d4b\u4efb\u52a1\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u9700\u8981\u5927\u6982 3 \u5206\u949f\u7684\u65f6\u95f4\u6765\u540c\u6b65\u914d\u7f6e\u3002\u5728\u6b64\u671f\u95f4\uff0c\u4e0d\u4f1a\u8fdb\u884c\u63a2\u6d4b\uff0c\u65e0\u6cd5\u67e5\u770b\u63a2\u6d4b\u7ed3\u679c\u3002

"},{"location":"admin/insight/infra/probe.html#_5","title":"\u7f16\u8f91\u62e8\u6d4b\u4efb\u52a1","text":"

\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 -> \u7f16\u8f91\uff0c\u5b8c\u6210\u7f16\u8f91\u540e\u70b9\u51fb \u786e\u5b9a\u3002

"},{"location":"admin/insight/infra/probe.html#_6","title":"\u67e5\u770b\u76d1\u63a7\u9762\u677f","text":"

\u70b9\u51fb\u62e8\u6d4b\u540d\u79f0 \u67e5\u770b\u62e8\u6d4b\u4efb\u52a1\u4e2d\u6bcf\u4e2a\u76ee\u6807\u7684\u76d1\u63a7\u72b6\u6001\uff0c\u4ee5\u56fe\u8868\u65b9\u5f0f\u663e\u793a\u9488\u5bf9\u7f51\u7edc\u72b6\u51b5\u7684\u63a2\u6d4b\u7ed3\u679c\u3002

\u6307\u6807\u540d\u79f0 \u63cf\u8ff0 Current Status Response \u8868\u793a HTTP \u63a2\u6d4b\u8bf7\u6c42\u7684\u54cd\u5e94\u72b6\u6001\u7801\u3002 Ping Status \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u662f\u5426\u6210\u529f\u30021 \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u6210\u529f\uff0c0 \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u5931\u8d25\u3002 IP Protocol \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u4f7f\u7528\u7684 IP \u534f\u8bae\u7248\u672c\u3002 SSL Expiry \u8868\u793a SSL/TLS \u8bc1\u4e66\u7684\u6700\u65e9\u5230\u671f\u65f6\u95f4\u3002 DNS Response (Latency) \u8868\u793a\u6574\u4e2a\u63a2\u6d4b\u8fc7\u7a0b\u7684\u6301\u7eed\u65f6\u95f4\uff0c\u5355\u4f4d\u662f\u79d2\u3002 HTTP Duration \u8868\u793a\u4ece\u53d1\u9001\u8bf7\u6c42\u5230\u63a5\u6536\u5230\u5b8c\u6574\u54cd\u5e94\u7684\u6574\u4e2a\u8fc7\u7a0b\u7684\u65f6\u95f4\u3002"},{"location":"admin/insight/infra/probe.html#_7","title":"\u5220\u9664\u62e8\u6d4b\u4efb\u52a1","text":"

\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 -> \u5220\u9664\uff0c\u786e\u8ba4\u65e0\u8bef\u540e\u70b9\u51fb \u786e\u5b9a\u3002

Caution

\u5220\u9664\u64cd\u4f5c\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

"},{"location":"admin/insight/quickstart/install/index.html","title":"\u5f00\u59cb\u89c2\u6d4b","text":"

AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u5b9e\u73b0\u4e86\u5bf9\u591a\u4e91\u591a\u96c6\u7fa4\u7684\u7eb3\u7ba1\uff0c\u5e76\u652f\u6301\u521b\u5efa\u96c6\u7fa4\u3002\u5728\u6b64\u57fa\u7840\u4e0a\uff0c\u53ef\u89c2\u6d4b\u6027 Insight \u4f5c\u4e3a\u591a\u96c6\u7fa4\u7edf\u4e00\u89c2\u6d4b\u65b9\u6848\uff0c\u901a\u8fc7\u90e8\u7f72 insight-agent \u63d2\u4ef6\u5b9e\u73b0\u5bf9\u591a\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u7684\u91c7\u96c6\uff0c\u5e76\u652f\u6301\u901a\u8fc7 AI \u7b97\u529b\u4e2d\u5fc3 \u53ef\u89c2\u6d4b\u6027\u4ea7\u54c1\u5b9e\u73b0\u5bf9\u6307\u6807\u3001\u65e5\u5fd7\u3001\u94fe\u8def\u6570\u636e\u7684\u67e5\u8be2\u3002

insight-agent \u662f\u53ef\u89c2\u6d4b\u6027\u5b9e\u73b0\u5bf9\u591a\u96c6\u7fa4\u6570\u636e\u91c7\u96c6\u7684\u5de5\u5177\uff0c\u5b89\u88c5\u540e\u65e0\u9700\u4efb\u4f55\u4fee\u6539\uff0c\u5373\u53ef\u5b9e\u73b0\u5bf9\u6307\u6807\u3001\u65e5\u5fd7\u4ee5\u53ca\u94fe\u8def\u6570\u636e\u7684\u81ea\u52a8\u5316\u91c7\u96c6\u3002

\u901a\u8fc7 \u5bb9\u5668\u7ba1\u7406 \u521b\u5efa\u7684\u96c6\u7fa4\u9ed8\u8ba4\u4f1a\u5b89\u88c5 insight-agent\uff0c\u6545\u5728\u6b64\u4ec5\u9488\u5bf9\u63a5\u5165\u7684\u96c6\u7fa4\u5982\u4f55\u5f00\u542f\u89c2\u6d4b\u80fd\u529b\u63d0\u4f9b\u6307\u5bfc\u3002

  • \u5728\u7ebf\u5b89\u88c5 insight-agent

\u53ef\u89c2\u6d4b\u6027 Insight \u4f5c\u4e3a\u591a\u96c6\u7fa4\u7684\u7edf\u4e00\u89c2\u6d4b\u5e73\u53f0\uff0c\u5176\u90e8\u5206\u7ec4\u4ef6\u7684\u8d44\u6e90\u6d88\u8017\u4e0e\u521b\u5efa\u96c6\u7fa4\u7684\u6570\u636e\u3001\u63a5\u5165\u96c6\u7fa4\u7684\u6570\u91cf\u606f\u606f\u76f8\u5173\uff0c\u5728\u5b89\u88c5 insight-agent \u65f6\uff0c\u9700\u8981\u6839\u636e\u96c6\u7fa4\u89c4\u6a21\u5bf9\u76f8\u5e94\u7ec4\u4ef6\u7684\u8d44\u6e90\u8fdb\u884c\u8c03\u6574\u3002

  1. \u6839\u636e\u521b\u5efa\u96c6\u7fa4\u7684\u89c4\u6a21\u6216\u63a5\u5165\u96c6\u7fa4\u7684\u89c4\u6a21\uff0c\u8c03\u6574 insight-agent \u4e2d\u91c7\u96c6\u7ec4\u4ef6 Prometheus \u7684 CPU \u548c\u5185\u5b58\uff0c\u8bf7\u53c2\u8003: Prometheus \u8d44\u6e90\u89c4\u5212

  2. \u7531\u4e8e\u591a\u96c6\u7fa4\u7684\u6307\u6807\u6570\u636e\u4f1a\u7edf\u4e00\u5b58\u50a8\uff0c\u5219\u9700\u8981 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u7ba1\u7406\u5458\u6839\u636e\u521b\u5efa\u96c6\u7fa4\u7684\u89c4\u6a21\u3001\u63a5\u5165\u96c6\u7fa4\u7684\u89c4\u6a21\u5bf9\u5e94\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\uff0c\u8bf7\u53c2\u8003\uff1avmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212\u3002

  3. \u5982\u4f55\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\uff0c\u8bf7\u53c2\u8003\uff1avmstorge \u78c1\u76d8\u6269\u5bb9\u3002

\u7531\u4e8e AI \u7b97\u529b\u4e2d\u5fc3 \u652f\u6301\u5bf9\u591a\u4e91\u591a\u96c6\u7fa4\u7684\u7eb3\u7ba1\uff0cinsight-agent \u76ee\u524d\u4e5f\u5b8c\u6210\u4e86\u90e8\u5206\u9a8c\u8bc1\uff0c\u7531\u4e8e\u76d1\u63a7\u7ec4\u4ef6\u51b2\u7a81\u95ee\u9898\u5bfc\u81f4\u5728 Openshift 4.x \u96c6\u7fa4\u4e2d\u5b89\u88c5 insight-agent \u4f1a\u51fa\u73b0\u95ee\u9898\uff0c\u82e5\u60a8\u9047\u5230\u540c\u6837\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6587\u6863\uff1a

  • \u5728 Openshift 4.x \u5b89\u88c5 insight-agent
"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html","title":"\u5f00\u542f\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f","text":"

\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u4e3a\u4e86\u63d0\u9ad8\u5927\u89c4\u6a21\u73af\u5883\u4e0b\u7684\u6570\u636e\u5199\u5165\u80fd\u529b\uff0c\u652f\u6301\u5c06\u65e5\u5fd7\u5207\u6362\u4e3a \u5927\u65e5\u5fd7 \u6a21\u5f0f\u3001\u5c06\u94fe\u8def\u5207\u6362\u4e3a \u5927\u94fe\u8def \u6a21\u5f0f\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u4ee5\u4e0b\u51e0\u79cd\u5f00\u542f\u65b9\u5f0f\uff1a

  • \u901a\u8fc7\u5b89\u88c5\u5668\u5f00\u542f\u6216\u5347\u7ea7\u81f3\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f\uff08\u901a\u8fc7 manifest.yaml \u4e2d\u540c\u4e00\u4e2a\u53c2\u6570\u503c\u63a7\u5236\uff09
  • \u901a\u8fc7 Helm \u547d\u4ee4\u624b\u52a8\u5f00\u542f\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f
"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_2","title":"\u65e5\u5fd7","text":"

\u672c\u8282\u8bf4\u660e\u666e\u901a\u65e5\u5fd7\u6a21\u5f0f\u548c\u5927\u65e5\u5fd7\u6a21\u5f0f\u7684\u533a\u522b\u3002

"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_3","title":"\u65e5\u5fd7\u6a21\u5f0f","text":"

\u7ec4\u4ef6\uff1aFluentbit + Elasticsearch

\u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a ES \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_4","title":"\u5927\u65e5\u5fd7\u6a21\u5f0f","text":"

\u7ec4\u4ef6\uff1aFluentbit + Kafka + Vector + Elasticsearch

\u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a Kafka \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_5","title":"\u94fe\u8def","text":"

\u672c\u8282\u8bf4\u660e\u666e\u901a\u94fe\u8def\u6a21\u5f0f\u548c\u5927\u94fe\u8def\u6a21\u5f0f\u7684\u533a\u522b\u3002

"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_6","title":"\u94fe\u8def\u6a21\u5f0f","text":"

\u7ec4\u4ef6\uff1aAgent opentelemetry-collector + Global opentelemetry-collector + Jaeger-collector + Elasticsearch

\u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a OTlp \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_7","title":"\u5927\u94fe\u8def\u6a21\u5f0f","text":"

\u7ec4\u4ef6\uff1aAgent opentelemetry-collector + Kafka + Global opentelemetry-collector + Jaeger-collector + Elasticsearch

\u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a Kafka \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_8","title":"\u901a\u8fc7\u5b89\u88c5\u5668\u5f00\u542f","text":"

\u901a\u8fc7\u5b89\u88c5\u5668\u90e8\u7f72/\u5347\u7ea7 AI \u7b97\u529b\u4e2d\u5fc3 \u65f6\u4f7f\u7528\u7684 manifest.yaml \u4e2d\u5b58\u5728 infrastructures.kafka \u5b57\u6bb5\uff0c \u5982\u679c\u60f3\u5f00\u542f\u53ef\u89c2\u6d4b\u7684\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f\uff0c\u5219\u9700\u8981\u542f\u7528 kafka\uff1a

manifest.yaml
apiVersion: manifest.daocloud.io/v1alpha1\nkind: DCEManifest\n...\ninfrastructures:\n  ...\n  kafka:\n    enable: true # \u9ed8\u8ba4\u4e3a false\n    cpuLimit: 1\n    memLimit: 2Gi\n    pvcSize: 15Gi\n
"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_9","title":"\u5f00\u542f","text":"

\u5b89\u88c5\u65f6\u4f7f\u7528\u542f\u7528 kafka \u7684 manifest.yaml\uff0c\u5219\u4f1a\u9ed8\u8ba4\u5b89\u88c5 kafka \u4e2d\u95f4\u4ef6\uff0c \u5e76\u5728\u5b89\u88c5 Insight \u65f6\u9ed8\u8ba4\u5f00\u542f\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f\u3002\u5b89\u88c5\u547d\u4ee4\u4e3a\uff1a

./dce5-installer cluster-create -c clusterConfig.yaml -m manifest.yaml\n
"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_10","title":"\u5347\u7ea7","text":"

\u5347\u7ea7\u540c\u6837\u662f\u4fee\u6539 kafka \u5b57\u6bb5\u3002\u4f46\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u56e0\u4e3a\u8001\u73af\u5883\u5b89\u88c5\u65f6\u4f7f\u7528\u7684\u662f kafka: false\uff0c \u6240\u4ee5\u73af\u5883\u4e2d\u65e0 kafka\u3002\u6b64\u65f6\u5347\u7ea7\u9700\u8981\u6307\u5b9a\u5347\u7ea7 middleware\uff0c\u624d\u4f1a\u540c\u65f6\u5b89\u88c5 kafka \u4e2d\u95f4\u4ef6\u3002\u5347\u7ea7\u547d\u4ee4\u4e3a\uff1a

./dce5-installer cluster-create -c clusterConfig.yaml -m manifest.yaml -u gproduct,middleware\n

Note

\u5728\u5347\u7ea7\u5b8c\u6210\u540e\uff0c\u9700\u8981\u624b\u52a8\u91cd\u542f\u4ee5\u4e0b\u7ec4\u4ef6\uff1a

  • insight-agent-fluent-bit
  • insight-agent-opentelemetry-collector
  • insight-opentelemetry-collector
"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#helm","title":"\u901a\u8fc7 Helm \u547d\u4ee4\u5f00\u542f","text":"

\u524d\u63d0\u6761\u4ef6\uff1a\u9700\u8981\u4fdd\u8bc1\u5b58\u5728 \u53ef\u7528\u7684 kafka \u4e14\u5730\u5740\u53ef\u6b63\u5e38\u8bbf\u95ee\u3002

\u6839\u636e\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6\u8001\u7248\u672c insight \u548c insight-agent \u7684 values\uff08\u5efa\u8bae\u505a\u597d\u5907\u4efd\uff09\uff1a

helm get values insight -n insight-system -o yaml > insight.yaml\nhelm get values insight-agent -n insight-system -o yaml > insight-agent.yaml\n
"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_11","title":"\u5f00\u542f\u5927\u65e5\u5fd7","text":"

\u6709\u4ee5\u4e0b\u51e0\u79cd\u65b9\u5f0f\u5f00\u542f\u6216\u5347\u7ea7\u81f3\u5927\u65e5\u5fd7\u6a21\u5f0f\uff1a

\u5728 helm upgrade \u547d\u4ee4\u4e2d\u4f7f\u7528 --set\u4fee\u6539 YAML \u540e\u8fd0\u884c helm upgrade\u5bb9\u5668\u7ba1\u7406 UI \u5347\u7ea7

\u5148\u8fd0\u884c\u4ee5\u4e0b insight \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --set global.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.kafka.enabled=true \\\n  --set vector.enabled=true \\\n  --version 0.30.1\n

\u7136\u540e\u8fd0\u884c\u4ee5\u4e0b insight-agent \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --set global.exporters.logging.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.exporters.logging.output=kafka \\\n  --version 0.30.1\n

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539 YAMl \u540e\u8fd0\u884c helm upgrade \u547d\u4ee4\uff1a

  1. \u4fee\u6539 insight.yaml

    insight.yaml
    global:\n  ...\n  kafka:\n    brokers: 10.6.216.111:30592\n    enabled: true\n...\nvector:\n  enabled: true\n
  2. \u5347\u7ea7 insight \u7ec4\u4ef6\uff1a

    helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --version 0.30.1\n
  3. \u4fee\u6539 insight-agent.yaml

    insight-agent.yaml
    global:\n  ...\n  exporters:\n    ...\n    logging:\n      ...\n      kafka:\n        brokers: 10.6.216.111:30592\n      output: kafka\n
  4. \u5347\u7ea7 insight-agent\uff1a

    helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --version 0.30.1\n

\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\uff0c\u627e\u5230\u5bf9\u5e94\u7684\u96c6\u7fa4\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 Helm \u5e94\u7528 \uff0c\u627e\u5230\u5e76\u66f4\u65b0 insight-agent\u3002

\u5728 Logging Settings \u4e2d\uff0c\u4e3a output \u9009\u62e9 kafka\uff0c\u5e76\u586b\u5199\u6b63\u786e\u7684 brokers \u5730\u5740\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u5347\u7ea7\u5b8c\u6210\u540e\uff0c\u9700\u624b\u52a8\u91cd\u542f insight-agent-fluent-bit \u7ec4\u4ef6\u3002

"},{"location":"admin/insight/quickstart/install/big-log-and-trace.html#_12","title":"\u5f00\u542f\u5927\u94fe\u8def","text":"

\u6709\u4ee5\u4e0b\u51e0\u79cd\u65b9\u5f0f\u5f00\u542f\u6216\u5347\u7ea7\u81f3\u5927\u94fe\u8def\u6a21\u5f0f\uff1a

\u5728 helm upgrade \u547d\u4ee4\u4e2d\u4f7f\u7528 --set\u4fee\u6539 YAML \u540e\u8fd0\u884c helm upgrade\u5bb9\u5668\u7ba1\u7406 UI \u5347\u7ea7

\u5148\u8fd0\u884c\u4ee5\u4e0b insight \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --set global.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.kafka.enabled=true \\\n  --set global.tracing.kafkaReceiver.enabled=true \\\n  --version 0.30.1\n

\u7136\u540e\u8fd0\u884c\u4ee5\u4e0b insight-agent \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --set global.exporters.trace.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.exporters.trace.output=kafka \\\n  --version 0.30.1\n

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539 YAMl \u540e\u8fd0\u884c helm upgrade \u547d\u4ee4\uff1a

  1. \u4fee\u6539 insight.yaml

    insight.yaml
    global:\n  ...\n  kafka:\n    brokers: 10.6.216.111:30592\n    enabled: true\n...\ntracing:\n  ...\n  kafkaReceiver:\n    enabled: true\n
  2. \u5347\u7ea7 insight \u7ec4\u4ef6\uff1a

    helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --version 0.30.1\n
  3. \u4fee\u6539 insight-agent.yaml

    insight-agent.yaml
    global:\n  ...\n  exporters:\n    ...\n    trace:\n      ...\n      kafka:\n        brokers: 10.6.216.111:30592\n      output: kafka\n
  4. \u5347\u7ea7 insight-agent\uff1a

    helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --version 0.30.1\n

\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\uff0c\u627e\u5230\u5bf9\u5e94\u7684\u96c6\u7fa4\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 Helm \u5e94\u7528 \uff0c\u627e\u5230\u5e76\u66f4\u65b0 insight-agent\u3002

\u5728 Trace Settings \u4e2d\uff0c\u4e3a output \u9009\u62e9 kafka\uff0c\u5e76\u586b\u5199\u6b63\u786e\u7684 brokers \u5730\u5740\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u5347\u7ea7\u5b8c\u6210\u540e\uff0c\u9700\u624b\u52a8 \u91cd\u542f insight-agent-opentelemetry-collector \u548c insight-opentelemetry-collector \u7ec4\u4ef6\u3002

"},{"location":"admin/insight/quickstart/install/component-scheduling.html","title":"\u81ea\u5b9a\u4e49 Insight \u7ec4\u4ef6\u8c03\u5ea6\u7b56\u7565","text":"

\u5f53\u90e8\u7f72\u53ef\u89c2\u6d4b\u5e73\u53f0 Insight \u5230 Kubernetes \u73af\u5883\u65f6\uff0c\u6b63\u786e\u7684\u8d44\u6e90\u7ba1\u7406\u548c\u4f18\u5316\u81f3\u5173\u91cd\u8981\u3002 Insight \u5305\u542b\u591a\u4e2a\u6838\u5fc3\u7ec4\u4ef6\uff0c\u5982 Prometheus\u3001OpenTelemetry\u3001FluentBit\u3001Vector\u3001Elasticsearch \u7b49\uff0c \u8fd9\u4e9b\u7ec4\u4ef6\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u56e0\u4e3a\u8d44\u6e90\u5360\u7528\u95ee\u9898\u5bf9\u96c6\u7fa4\u5185\u5176\u4ed6 Pod \u7684\u6027\u80fd\u4ea7\u751f\u8d1f\u9762\u5f71\u54cd\u3002 \u4e3a\u4e86\u6709\u6548\u5730\u7ba1\u7406\u8d44\u6e90\u5e76\u4f18\u5316\u96c6\u7fa4\u7684\u8fd0\u884c\uff0c\u8282\u70b9\u4eb2\u548c\u6027\u6210\u4e3a\u4e00\u9879\u91cd\u8981\u7684\u914d\u7f6e\u9009\u9879\u3002

\u672c\u6587\u5c06\u91cd\u70b9\u63a2\u8ba8\u5982\u4f55\u901a\u8fc7\u6c61\u70b9\u548c\u8282\u70b9\u4eb2\u548c\u6027\u7684\u914d\u7f6e\u7b56\u7565\uff0c\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u80fd\u591f\u5728\u9002\u5f53\u7684\u8282\u70b9\u4e0a\u8fd0\u884c\uff0c \u5e76\u907f\u514d\u8d44\u6e90\u7ade\u4e89\u6216\u4e89\u7528\uff0c\u4ece\u800c\u786e\u4fdd\u6574\u4e2a Kubernetes \u96c6\u7fa4\u7684\u7a33\u5b9a\u6027\u548c\u9ad8\u6548\u6027\u3002

"},{"location":"admin/insight/quickstart/install/component-scheduling.html#insight_1","title":"\u901a\u8fc7\u6c61\u70b9\u4e3a Insight \u914d\u7f6e\u4e13\u6709\u8282\u70b9","text":"

\u7531\u4e8e Insight Agent \u5305\u542b\u4e86 DaemonSet \u7ec4\u4ef6\uff0c\u6240\u4ee5\u672c\u8282\u6240\u8ff0\u7684\u914d\u7f6e\u65b9\u5f0f\u662f\u8ba9\u9664\u4e86 Insight DameonSet \u4e4b\u5916\u7684\u5176\u4f59\u7ec4\u4ef6\u5747\u8fd0\u884c\u5728\u4e13\u6709\u8282\u70b9\u4e0a\u3002

\u8be5\u65b9\u5f0f\u662f\u901a\u8fc7\u4e3a\u4e13\u6709\u8282\u70b9\u6dfb\u52a0\u6c61\u70b9\uff08taint\uff09\uff0c\u5e76\u914d\u5408\u6c61\u70b9\u5bb9\u5fcd\u5ea6\uff08tolerations\uff09\u6765\u5b9e\u73b0\u7684\u3002 \u66f4\u591a\u7ec6\u8282\u53ef\u4ee5\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u3002

\u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u547d\u4ee4\u4e3a\u8282\u70b9\u6dfb\u52a0\u53ca\u79fb\u9664\u6c61\u70b9\uff1a

# \u6dfb\u52a0\u6c61\u70b9\nkubectl taint nodes worker1 node.daocloud.io=insight-only:NoSchedule\n\n# \u79fb\u9664\u6c61\u70b9\nkubectl taint nodes worker1 node.daocloud.io:NoSchedule-\n

\u6709\u4ee5\u4e0b\u4e24\u79cd\u9014\u5f84\u8ba9 Insight \u7ec4\u4ef6\u8c03\u5ea6\u81f3\u4e13\u6709\u8282\u70b9\uff1a

"},{"location":"admin/insight/quickstart/install/component-scheduling.html#1","title":"1. \u4e3a\u6bcf\u4e2a\u7ec4\u4ef6\u6dfb\u52a0\u6c61\u70b9\u5bb9\u5fcd\u5ea6","text":"

\u9488\u5bf9 insight-server \u548c insight-agent \u4e24\u4e2a Chart \u5206\u522b\u8fdb\u884c\u914d\u7f6e\uff1a

insight-server Chart \u914d\u7f6einsight-agent Chart \u914d\u7f6e
server:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nui:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nrunbook:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\n# mysql:\nvictoria-metrics-k8s-stack:\n  victoria-metrics-operator:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n  vmcluster:\n    spec:\n      vmstorage:\n        tolerations:\n          - key: \"node.daocloud.io\"\n            operator: \"Equal\"\n            value: \"insight-only\"\n            effect: \"NoSchedule\"\n      vmselect:\n        tolerations:\n          - key: \"node.daocloud.io\"\n            operator: \"Equal\"\n            value: \"insight-only\"\n            effect: \"NoSchedule\"\n      vminsert:\n        tolerations:\n          - key: \"node.daocloud.io\"\n            operator: \"Equal\"\n            value: \"insight-only\"\n            effect: \"NoSchedule\"\n  vmalert:\n    spec:\n      tolerations:\n        - key: \"node.daocloud.io\"\n          operator: \"Equal\"\n          value: \"insight-only\"\n          effect: \"NoSchedule\"\n  alertmanager:\n    spec:\n      tolerations:\n        - key: \"node.daocloud.io\"\n          operator: \"Equal\"\n          value: \"insight-only\"\n          effect: \"NoSchedule\"\n\njaeger:\n  collector:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n  query:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n\nopentelemetry-collector-aggregator:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nopentelemetry-collector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\ngrafana-operator:\n  operator:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n  grafana:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\nkibana:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nelastic-alert:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nvector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n
kube-prometheus-stack:\n  prometheus:\n    prometheusSpec:\n      tolerations:\n        - key: \"node.daocloud.io\"\n          operator: \"Equal\"\n          value: \"insight-only\"\n          effect: \"NoSchedule\"\n  prometheus-node-exporter:\n    tolerations:\n      - effect: NoSchedule\n        operator: Exists\n  prometheusOperator:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n\nkube-state-metrics:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nopentelemetry-operator:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nopentelemetry-collector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\ntailing-sidecar-operator:\n  operator:\n    tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nopentelemetry-kubernetes-collector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nprometheus-blackbox-exporter:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\netcd-exporter:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\" \n
"},{"location":"admin/insight/quickstart/install/component-scheduling.html#2","title":"2. \u901a\u8fc7\u547d\u540d\u7a7a\u95f4\u7ea7\u522b\u914d\u7f6e","text":"

\u8ba9 insight-system \u547d\u540d\u7a7a\u95f4\u7684 Pod \u90fd\u5bb9\u5fcd node.daocloud.io=insight-only \u6c61\u70b9\u3002

  1. \u8c03\u6574 apiserver \u7684\u914d\u7f6e\u6587\u4ef6 /etc/kubernetes/manifests/kube-apiserver.yaml\uff0c\u653e\u5f00 PodTolerationRestriction,PodNodeSelector, \u53c2\u8003\u4e0b\u56fe\uff1a

  2. \u7ed9 insight-system \u547d\u540d\u7a7a\u95f4\u589e\u52a0\u6ce8\u89e3\uff1a

    apiVersion: v1\nkind: Namespace\nmetadata:\n  name: insight-system\n  annotations:\n    scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Equal\", \"effect\": \"NoSchedule\", \"key\": \"node.daocloud.io\", \"value\": \"insight-only\"}]'\n

\u91cd\u542f insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u9762\u7684\u7ec4\u4ef6\u5373\u53ef\u6b63\u5e38\u5bb9\u5fcd insight-system \u4e0b\u7684 Pod \u8c03\u5ea6\u3002

"},{"location":"admin/insight/quickstart/install/component-scheduling.html#label","title":"\u4e3a\u8282\u70b9\u6dfb\u52a0 Label \u548c\u8282\u70b9\u4eb2\u548c\u6027\u6765\u7ba1\u7406\u7ec4\u4ef6\u8c03\u5ea6","text":"

Info

\u8282\u70b9\u4eb2\u548c\u6027\u6982\u5ff5\u4e0a\u7c7b\u4f3c\u4e8e nodeSelector\uff0c\u5b83\u4f7f\u4f60\u53ef\u4ee5\u6839\u636e\u8282\u70b9\u4e0a\u7684 \u6807\u7b7e(label) \u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002 \u8282\u70b9\u4eb2\u548c\u6027\u6709\u4e24\u79cd\uff1a

  1. requiredDuringSchedulingIgnoredDuringExecution\uff1a\u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector\uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002
  2. preferredDuringSchedulingIgnoredDuringExecution\uff1a\u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002

\u66f4\u8fc7\u7ec6\u8282\u8bf7\u53c2\u8003 kubernetes \u5b98\u65b9\u6587\u6863\u3002

\u4e3a\u4e86\u5b9e\u73b0\u4e0d\u540c\u7528\u6237\u5bf9 Insight \u7ec4\u4ef6\u8c03\u5ea6\u7684\u7075\u6d3b\u9700\u6c42\uff0cInsight \u5206\u522b\u63d0\u4f9b\u4e86\u8f83\u4e3a\u7ec6\u7c92\u5ea6\u7684 Label \u6765\u5b9e\u73b0\u4e0d\u540c\u7ec4\u4ef6\u7684\u8c03\u5ea6\u7b56\u7565\uff0c\u4ee5\u4e0b\u662f\u6807\u7b7e\u4e0e\u7ec4\u4ef6\u7684\u5173\u7cfb\u8bf4\u660e\uff1a

\u6807\u7b7e Key \u6807\u7b7e Value \u8bf4\u660e node.daocloud.io/insight-any \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u4ee3\u8868 Insight \u6240\u6709\u7ec4\u4ef6\u4f18\u5148\u8003\u8651\u5e26\u4e86\u8be5\u6807\u7b7e\u7684\u8282\u70b9 node.daocloud.io/insight-prometheus \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 Prometheus \u7ec4\u4ef6 node.daocloud.io/insight-vmstorage \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 VictoriaMetrics vmstorage \u7ec4\u4ef6 node.daocloud.io/insight-vector \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 Vector \u7ec4\u4ef6 node.daocloud.io/insight-otel-col \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 OpenTelemetry \u7ec4\u4ef6

\u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u547d\u4ee4\u4e3a\u8282\u70b9\u6dfb\u52a0\u53ca\u79fb\u9664\u6807\u7b7e\uff1a

# \u4e3a node8 \u6dfb\u52a0\u6807\u7b7e\uff0c\u5148\u5c06 insight-prometheus \u8c03\u5ea6\u5230 node8 \nkubectl label nodes node8 node.daocloud.io/insight-prometheus=true\n\n# \u79fb\u9664 node8 \u7684 node.daocloud.io/insight-prometheus \u6807\u7b7e\nkubectl label nodes node8 node.daocloud.io/insight-prometheus-\n

\u4ee5\u4e0b\u662f insight-prometheus \u7ec4\u4ef6\u5728\u90e8\u7f72\u65f6\u9ed8\u8ba4\u7684\u4eb2\u548c\u6027\u504f\u597d\uff1a

affinity:\n  nodeAffinity:\n    preferredDuringSchedulingIgnoredDuringExecution:\n    - preference:\n        matchExpressions:\n        - key: node-role.kubernetes.io/control-plane\n          operator: DoesNotExist\n      weight: 1\n    - preference:\n        matchExpressions:\n        - key: node.daocloud.io/insight-prometheus # (1)!\n          operator: Exists\n      weight: 2\n    - preference:\n        matchExpressions:\n        - key: node.daocloud.io/insight-any\n          operator: Exists\n      weight: 3\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 1\n          podAffinityTerm:\n            topologyKey: kubernetes.io/hostname\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/instance\n                  operator: In\n                  values:\n                    - insight-agent-kube-prometh-prometheus\n
  1. \u5148\u5c06 insight-prometheus \u8c03\u5ea6\u5230\u5e26\u6709 node.daocloud.io/insight-prometheus \u6807\u7b7e\u7684\u8282\u70b9
"},{"location":"admin/insight/quickstart/install/gethosturl.html","title":"\u83b7\u53d6\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u6570\u636e\u5b58\u50a8\u5730\u5740","text":"

\u53ef\u89c2\u6d4b\u6027\u662f\u591a\u96c6\u7fa4\u7edf\u4e00\u89c2\u6d4b\u7684\u4ea7\u54c1\uff0c\u4e3a\u5b9e\u73b0\u5bf9\u591a\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u7684\u7edf\u4e00\u5b58\u50a8\u3001\u67e5\u8be2\uff0c \u5b50\u96c6\u7fa4\u9700\u8981\u5c06\u91c7\u96c6\u7684\u89c2\u6d4b\u6570\u636e\u4e0a\u62a5\u7ed9\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u8fdb\u884c\u7edf\u4e00\u5b58\u50a8\u3002 \u672c\u6587\u63d0\u4f9b\u4e86\u5728\u5b89\u88c5\u91c7\u96c6\u7ec4\u4ef6 insight-agent \u65f6\u5fc5\u586b\u7684\u5b58\u50a8\u7ec4\u4ef6\u7684\u5730\u5740\u3002

"},{"location":"admin/insight/quickstart/install/gethosturl.html#insight-agent","title":"\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5b89\u88c5 insight-agent","text":"

\u5982\u679c\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5b89\u88c5 insight-agent\uff0c\u63a8\u8350\u901a\u8fc7\u57df\u540d\u6765\u8bbf\u95ee\u96c6\u7fa4\uff1a

export vminsert_host=\"vminsert-insight-victoria-metrics-k8s-stack.insight-system.svc.cluster.local\" # (1)!\nexport es_host=\"insight-es-master.insight-system.svc.cluster.local\" # (2)!\nexport otel_col_host=\"insight-opentelemetry-collector.insight-system.svc.cluster.local\" # (3)!\n
"},{"location":"admin/insight/quickstart/install/gethosturl.html#insight-agent_1","title":"\u5728\u5176\u4ed6\u96c6\u7fa4\u5b89\u88c5 insight-agent","text":""},{"location":"admin/insight/quickstart/install/gethosturl.html#insight-server","title":"\u901a\u8fc7 Insight Server \u63d0\u4f9b\u7684\u63a5\u53e3\u83b7\u53d6\u5730\u5740","text":"
  1. \u7ba1\u7406\u96c6\u7fa4\u4f7f\u7528\u9ed8\u8ba4\u7684 LoadBalancer \u65b9\u5f0f\u66b4\u9732

    \u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

    export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})\ncurl --location --request POST 'http://'\"${INSIGHT_SERVER_IP}\"'/apis/insight.io/v1alpha1/agentinstallparam'\n

    Note

    \u8bf7\u66ff\u6362\u547d\u4ee4\u4e2d\u7684 ${INSIGHT_SERVER_IP} \u53c2\u6570\u3002

    \u83b7\u5f97\u5982\u4e0b\u8fd4\u56de\u503c\uff1a

    {\n  \"values\": {\n    \"global\": {\n      \"exporters\": {\n        \"logging\": {\n          \"host\": \"10.6.182.32\"\n        },\n        \"metric\": {\n          \"host\": \"10.6.182.32\"\n        },\n        \"auditLog\": {\n          \"host\": \"10.6.182.32\"\n        },\n        \"trace\": {\n          \"host\": \"10.6.182.32\"\n        }\n      }\n    },\n    \"opentelemetry-operator\": {\n      \"enabled\": true\n    },\n    \"opentelemetry-collector\": {\n      \"enabled\": true\n    }\n  }\n}\n
    • global.exporters.logging.host \u662f\u65e5\u5fd7\u670d\u52a1\u5730\u5740\uff0c\u4e0d\u9700\u8981\u518d\u8bbe\u7f6e\u5bf9\u5e94\u670d\u52a1\u7684\u7aef\u53e3\uff0c\u90fd\u4f1a\u4f7f\u7528\u76f8\u5e94\u9ed8\u8ba4\u503c
    • global.exporters.metric.host \u662f\u6307\u6807\u670d\u52a1\u5730\u5740
    • global.exporters.trace.host \u662f\u94fe\u8def\u670d\u52a1\u5730\u5740
    • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u5730\u5740\uff08\u548c\u94fe\u8def\u4f7f\u7528\u7684\u540c\u4e00\u4e2a\u670d\u52a1\u4e0d\u540c\u7aef\u53e3\uff09
  2. \u7ba1\u7406\u96c6\u7fa4\u7981\u7528 LoadBalancer

    \u8c03\u7528\u63a5\u53e3\u65f6\u9700\u8981\u989d\u5916\u4f20\u9012\u96c6\u7fa4\u4e2d\u4efb\u610f\u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u8282\u70b9 IP\uff0c\u4f1a\u4f7f\u7528\u8be5 IP \u62fc\u63a5\u51fa\u5bf9\u5e94\u670d\u52a1\u7684\u5b8c\u6574\u8bbf\u95ee\u5730\u5740\u3002

    export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})\ncurl --location --request POST 'http://'\"${INSIGHT_SERVER_IP}\"'/apis/insight.io/v1alpha1/agentinstallparam' --data '{\"extra\": {\"EXPORTER_EXTERNAL_IP\": \"10.5.14.51\"}}'\n

    \u5c06\u83b7\u5f97\u5982\u4e0b\u7684\u8fd4\u56de\u503c\uff1a

    {\n  \"values\": {\n    \"global\": {\n      \"exporters\": {\n        \"logging\": {\n          \"scheme\": \"https\",\n          \"host\": \"10.5.14.51\",\n          \"port\": 32007,\n          \"user\": \"elastic\",\n          \"password\": \"j8V1oVoM1184HvQ1F3C8Pom2\"\n        },\n        \"metric\": {\n          \"host\": \"10.5.14.51\",\n          \"port\": 30683\n        },\n        \"auditLog\": {\n          \"host\": \"10.5.14.51\",\n          \"port\": 30884\n        },\n        \"trace\": {\n          \"host\": \"10.5.14.51\",\n          \"port\": 30274\n        }\n      }\n    },\n    \"opentelemetry-operator\": {\n      \"enabled\": true\n    },\n    \"opentelemetry-collector\": {\n      \"enabled\": true\n    }\n  }\n}\n
    • global.exporters.logging.host \u662f\u65e5\u5fd7\u670d\u52a1\u5730\u5740
    • global.exporters.logging.port \u662f\u65e5\u5fd7\u670d\u52a1\u66b4\u9732\u7684 NodePort
    • global.exporters.metric.host \u662f\u6307\u6807\u670d\u52a1\u5730\u5740
    • global.exporters.metric.port \u662f\u6307\u6807\u670d\u52a1\u66b4\u9732\u7684 NodePort
    • global.exporters.trace.host \u662f\u94fe\u8def\u670d\u52a1\u5730\u5740
    • global.exporters.trace.port \u662f\u94fe\u8def\u670d\u52a1\u66b4\u9732\u7684 NodePort
    • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u5730\u5740\uff08\u548c\u94fe\u8def\u4f7f\u7528\u7684\u540c\u4e00\u4e2a\u670d\u52a1\u4e0d\u540c\u7aef\u53e3\uff09
    • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u66b4\u9732\u7684 NodePort
"},{"location":"admin/insight/quickstart/install/gethosturl.html#loadbalancer","title":"\u901a\u8fc7 LoadBalancer \u8fde\u63a5","text":"
  1. \u82e5\u96c6\u7fa4\u4e2d\u5f00\u542f LoadBalancer \u4e14\u4e3a Insight \u8bbe\u7f6e\u4e86 VIP \u65f6\uff0c\u60a8\u4e5f\u53ef\u4ee5\u624b\u52a8\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6 vminsert \u4ee5\u53ca opentelemetry-collector \u7684\u5730\u5740\u4fe1\u606f\uff1a

    $ kubectl get service -n insight-system | grep lb\nlb-insight-opentelemetry-collector               LoadBalancer   10.233.23.12    <pending>     4317:31286/TCP,8006:31351/TCP  24d\nlb-vminsert-insight-victoria-metrics-k8s-stack   LoadBalancer   10.233.63.67    <pending>     8480:31629/TCP                 24d\n
    • lb-vminsert-insight-victoria-metrics-k8s-stack \u662f\u6307\u6807\u670d\u52a1\u7684\u5730\u5740
    • lb-insight-opentelemetry-collector \u662f\u94fe\u8def\u670d\u52a1\u7684\u5730\u5740
  2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6 elasticsearch \u5730\u5740\u4fe1\u606f\uff1a

    $ kubectl get service -n mcamel-system | grep es\nmcamel-common-es-cluster-masters-es-http               NodePort    10.233.16.120   <none>        9200:30465/TCP               47d\n

    mcamel-common-es-cluster-masters-es-http \u662f\u65e5\u5fd7\u670d\u52a1\u7684\u5730\u5740

"},{"location":"admin/insight/quickstart/install/gethosturl.html#nodeport","title":"\u901a\u8fc7 NodePort \u8fde\u63a5","text":"

\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7981\u7528 LB \u7279\u6027

\u5728\u8be5\u60c5\u51b5\u4e0b\uff0c\u9ed8\u8ba4\u4e0d\u4f1a\u521b\u5efa\u4e0a\u8ff0\u7684 LoadBalancer \u8d44\u6e90\uff0c\u5bf9\u5e94\u670d\u52a1\u540d\u4e3a\uff1a

  • vminsert-insight-victoria-metrics-k8s-stack\uff08\u6307\u6807\u670d\u52a1\uff09
  • common-es\uff08\u65e5\u5fd7\u670d\u52a1\uff09
  • insight-opentelemetry-collector\uff08\u94fe\u8def\u670d\u52a1\uff09

\u4e0a\u9762\u4e24\u79cd\u60c5\u51b5\u83b7\u53d6\u5230\u5bf9\u5e94\u670d\u52a1\u7684\u5bf9\u5e94\u7aef\u53e3\u4fe1\u606f\u540e\uff0c\u8fdb\u884c\u5982\u4e0b\u8bbe\u7f6e\uff1a

--set global.exporters.logging.host=  # (1)!\n--set global.exporters.logging.port=  # (2)!\n--set global.exporters.metric.host=   # (3)!\n--set global.exporters.metric.port=   # (4)!\n--set global.exporters.trace.host=    # (5)!\n--set global.exporters.trace.port=    # (6)!\n--set global.exporters.auditLog.host= # (7)!\n
  1. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
  2. \u65e5\u5fd7\u670d\u52a1 9200 \u7aef\u53e3\u5bf9\u5e94\u7684 NodePort
  3. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
  4. \u6307\u6807\u670d\u52a1 8480 \u7aef\u53e3\u5bf9\u5e94\u7684 NodePort
  5. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
  6. \u94fe\u8def\u670d\u52a1 4317 \u7aef\u53e3\u5bf9\u5e94\u7684 NodePort
  7. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
"},{"location":"admin/insight/quickstart/install/helm-installagent.html","title":"\u901a\u8fc7 Helm \u90e8\u7f72 Insight Agent","text":"

\u672c\u6587\u63cf\u8ff0\u4e86\u5728\u547d\u4ee4\u884c\u4e2d\u901a\u8fc7 Helm \u547d\u4ee4\u5b89\u88c5 Insight Agent \u793e\u533a\u7248\u7684\u64cd\u4f5c\u6b65\u9aa4\u3002

"},{"location":"admin/insight/quickstart/install/helm-installagent.html#insight-agent","title":"\u5b89\u88c5 Insight Agent","text":"
  1. \u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u6dfb\u52a0\u955c\u50cf\u4ed3\u5e93\u7684\u5730\u5740

    helm repo add insight https://release.daocloud.io/chartrepo/insight\nhelm repo upgrade\nhelm search repo  insight/insight-agent --versions\n
  2. \u5b89\u88c5 Insight Agent \u9700\u8981\u786e\u4fdd\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u7684 Insight Server \u6b63\u5e38\u8fd0\u884c\uff0c\u6267\u884c\u4ee5\u4e0b\u5b89\u88c5\u547d\u4ee4\u5b89\u88c5 Insight Agent \u793e\u533a\u7248\uff0c\u8be5\u914d\u7f6e\u4e0d\u542f\u7528 Tracing \u529f\u80fd\uff1a

    helm upgrade --install --create-namespace --cleanup-on-fail \\\n    --version ${version} \\      # \u8bf7\u6307\u5b9a\u90e8\u7f72\u7248\u672c\n    insight-agent  insight/insight-agent \\\n    --set global.exporters.logging.elasticsearch.host=10.10.10.x \\    # \u8bf7\u66ff\u6362\u201c10.10.10.x\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u7684\u5730\u5740\n    --set global.exporters.logging.elasticsearch.port=32517 \\     # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u66b4\u9732\u7684\u7aef\u53e3\n    --set global.exporters.logging.elasticsearch.user=elastic \\     # \u8bf7\u66ff\u6362\u201celastic\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u7684\u7528\u6237\u540d\n    --set global.exporters.logging.elasticsearch.password=dangerous \\  # \u8bf7\u66ff\u6362\u201cdangerous\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u7684\u5bc6\u7801\n    --set global.exporters.metric.host=${vminsert_address} \\    # \u8bf7\u66ff\u6362\u201c10.10.10.x\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d vminsert \u7684\u5730\u5740\n    --set global.exporters.metric.port=${vminsert_port} \\    # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d vminsert \u7684\u5730\u5740\n    --set global.exporters.auditLog.host=${opentelemetry-collector address} \\     # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d opentelemetry-collector \u7684\u7aef\u53e3\n    --set global.exporters.auditLog.port=${otel_col_auditlog_port}\\   # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d opentelemetry-collector \u5bb9\u5668\u7aef\u53e3\u4e3a 8006 \u7684 service \u5bf9\u5916\u8bbf\u95ee\u7684\u5730\u5740\n    -n insight-system\n

    Info

    \u53ef\u53c2\u8003 \u5982\u4f55\u83b7\u53d6\u8fde\u63a5\u5730\u5740 \u83b7\u53d6\u5730\u5740\u4fe1\u606f\u3002

  3. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u5b89\u88c5\u72b6\u6001\uff1a

    helm list -A\nkubectl get pods -n insight-system\n
"},{"location":"admin/insight/quickstart/install/helm-installagent.html#_1","title":"\u5982\u4f55\u83b7\u53d6\u8fde\u63a5\u5730\u5740","text":""},{"location":"admin/insight/quickstart/install/helm-installagent.html#insight-agent_1","title":"\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5b89\u88c5 Insight Agent","text":"

\u5982\u679c Agent \u662f\u5b89\u88c5\u5728\u7ba1\u7406\u96c6\u7fa4\uff0c\u63a8\u8350\u901a\u8fc7\u57df\u540d\u6765\u8bbf\u95ee\u96c6\u7fa4\uff1a

export vminsert_host=\"vminsert-insight-victoria-metrics-k8s-stack.insight-system.svc.cluster.local\" # \u6307\u6807\nexport es_host=\"insight-es-master.insight-system.svc.cluster.local\" # \u65e5\u5fd7\nexport otel_col_host=\"insight-opentelemetry-collector.insight-system.svc.cluster.local\" # \u94fe\u8def\n
"},{"location":"admin/insight/quickstart/install/helm-installagent.html#insight-agent_2","title":"\u5728\u5de5\u4f5c\u96c6\u7fa4\u5b89\u88c5 Insight Agent","text":"\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528\u9ed8\u8ba4\u7684 LoadBalancer\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\u64cd\u4f5c\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528 Nodeport

\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528\u9ed8\u8ba4\u7684 LoadBalancer \u65b9\u5f0f\u66b4\u9732\u670d\u52a1\u65f6\uff0c\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})\ncurl --location --request POST 'http://'\"${INSIGHT_SERVER_IP}\"'/apis/insight.io/v1alpha1/agentinstallparam'\n

\u5c06\u83b7\u5f97\u5982\u4e0b\u7684\u8fd4\u56de\u503c\uff1a

{\"global\":{\"exporters\":{\"logging\":{\"output\":\"elasticsearch\",\"elasticsearch\":{\"host\":\"10.6.182.32\"},\"kafka\":{},\"host\":\"10.6.182.32\"},\"metric\":{\"host\":\"10.6.182.32\"},\"auditLog\":    {\"host\":\"10.6.182.32\"}}},\"opentelemetry-operator\":{\"enabled\":true},\"opentelemetry-collector\":{\"enabled\":true}}\n

\u5176\u4e2d\uff1a

  • global.exporters.logging.elasticsearch.host \u662f\u65e5\u5fd7\u670d\u52a1\u5730\u5740\u3010\u4e0d\u9700\u8981\u518d\u8bbe\u7f6e\u5bf9\u5e94\u670d\u52a1\u7684\u7aef\u53e3\uff0c\u90fd\u4f1a\u4f7f\u7528\u76f8\u5e94\u9ed8\u8ba4\u503c\u3011\uff1b
  • global.exporters.metric.host \u662f\u6307\u6807\u670d\u52a1\u5730\u5740\uff1b
  • global.exporters.trace.host \u662f\u94fe\u8def\u670d\u52a1\u5730\u5740\uff1b
  • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u5730\u5740 (\u548c\u94fe\u8def\u4f7f\u7528\u7684\u540c\u4e00\u4e2a\u670d\u52a1\u4e0d\u540c\u7aef\u53e3)\uff1b

\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

kubectl get service -n insight-system | grep lb\nkubectl get service -n mcamel-system | grep es\n

\u5176\u4e2d\uff1a

  • lb-vminsert-insight-victoria-metrics-k8s-stack \u662f\u6307\u6807\u670d\u52a1\u7684\u5730\u5740\uff1b
  • lb-insight-opentelemetry-collector \u662f\u94fe\u8def\u670d\u52a1\u7684\u5730\u5740;
  • mcamel-common-es-cluster-masters-es-http \u662f\u65e5\u5fd7\u670d\u52a1\u7684\u5730\u5740;

\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528 Nodeport \u65b9\u5f0f\u66b4\u9732\u670d\u52a1\u65f6\uff0c\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

kubectl get service -n insight-system\nkubectl get service -n mcamel-system\n

\u5176\u4e2d\uff1a

  • vminsert-insight-victoria-metrics-k8s-stack \u662f\u6307\u6807\u670d\u52a1\u7684\u5730\u5740\uff1b
  • insight-opentelemetry-collector \u662f\u94fe\u8def\u670d\u52a1\u7684\u5730\u5740;
  • mcamel-common-es-cluster-masters-es-http \u662f\u65e5\u5fd7\u670d\u52a1\u7684\u5730\u5740;
"},{"location":"admin/insight/quickstart/install/helm-installagent.html#insight-agent_3","title":"\u5347\u7ea7 Insight Agent","text":"
  1. \u767b\u5f55\u76ee\u6807\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u5907\u4efd --set \u53c2\u6570\u3002

    helm get values insight-agent -n insight-system -o yaml > insight-agent.yaml\n
  2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u66f4\u65b0\u4ed3\u5e93\u3002

    helm repo upgrade\n
  3. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5347\u7ea7\u3002

    helm upgrade insight-agent insight/insight-agent \\\n-n insight-system \\\n-f ./insight-agent.yaml \\\n--version ${version}   # \u6307\u5b9a\u5347\u7ea7\u7248\u672c\n
  4. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u5b89\u88c5\u72b6\u6001\uff1a

    kubectl get pods -n insight-system\n
"},{"location":"admin/insight/quickstart/install/helm-installagent.html#insight-agent_4","title":"\u5378\u8f7d Insight Agent","text":"
helm uninstall insight-agent -n insight-system --timeout 10m\n
"},{"location":"admin/insight/quickstart/install/install-agent.html","title":"\u5728\u7ebf\u5b89\u88c5 insight-agent","text":"

insight-agent \u662f\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u91c7\u96c6\u7684\u63d2\u4ef6\uff0c\u652f\u6301\u5bf9\u6307\u6807\u3001\u94fe\u8def\u3001\u65e5\u5fd7\u6570\u636e\u7684\u7edf\u4e00\u89c2\u6d4b\u3002\u672c\u6587\u63cf\u8ff0\u4e86\u5982\u4f55\u5728\u5728\u7ebf\u73af\u5883\u4e2d\u4e3a\u63a5\u5165\u96c6\u7fa4\u5b89\u88c5 insight-agent\u3002

"},{"location":"admin/insight/quickstart/install/install-agent.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
  • \u96c6\u7fa4\u5df2\u6210\u529f\u63a5\u5165 \u5bb9\u5668\u7ba1\u7406 \u6a21\u5757\u3002\u5982\u4f55\u63a5\u5165\u96c6\u7fa4\uff0c\u8bf7\u53c2\u8003\uff1a\u63a5\u5165\u96c6\u7fa4
"},{"location":"admin/insight/quickstart/install/install-agent.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \u6a21\u5757\uff0c\u5728 \u96c6\u7fa4\u5217\u8868 \u4e2d\u627e\u5230\u8981\u5b89\u88c5 insight-agent \u7684\u96c6\u7fa4\u540d\u79f0\u3002

  2. \u9009\u62e9 \u7acb\u5373\u5b89\u88c5 \u8df3\u8f6c\uff0c\u6216\u70b9\u51fb\u96c6\u7fa4\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u5185\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u641c\u7d22\u6846\u67e5\u8be2 insight-agent \uff0c\u70b9\u51fb\u8be5\u5361\u7247\u8fdb\u5165\u8be6\u60c5\u3002

  3. \u67e5\u770b insight-agent \u7684\u5b89\u88c5\u9875\u9762\uff0c\u70b9\u51fb \u5b89\u88c5 \u8fdb\u5165\u4e0b\u4e00\u6b65\u3002

  4. \u9009\u62e9\u5b89\u88c5\u7684\u7248\u672c\u5e76\u5728\u4e0b\u65b9\u8868\u5355\u5206\u522b\u586b\u5199\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u5bf9\u5e94\u6570\u636e\u5b58\u50a8\u7ec4\u4ef6\u7684\u5730\u5740\uff0c\u786e\u8ba4\u586b\u5199\u7684\u4fe1\u606f\u65e0\u8bef\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

    • insight-agent \u9ed8\u8ba4\u90e8\u7f72\u5728\u96c6\u7fa4\u7684 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u3002
    • \u5efa\u8bae\u5b89\u88c5\u6700\u65b0\u7248\u672c\u7684 insight-agent\u3002
    • \u7cfb\u7edf\u9ed8\u8ba4\u5df2\u586b\u5199\u6570\u636e\u4e0a\u62a5\u7684\u7ec4\u4ef6\u7684\u5730\u5740\uff0c\u4ecd\u8bf7\u60a8\u68c0\u67e5\u65e0\u8bef\u540e\u518d\u70b9\u51fb \u786e\u5b9a \u00a0\u8fdb\u884c\u5b89\u88c5\u3002 \u5982\u9700\u4fee\u6539\u6570\u636e\u4e0a\u62a5\u5730\u5740\uff0c\u8bf7\u53c2\u8003\uff1a\u83b7\u53d6\u6570\u636e\u4e0a\u62a5\u5730\u5740\u3002

  5. \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de\u00a0 Helm \u5e94\u7528 \u5217\u8868\uff0c\u5f53\u5e94\u7528 insight-agent \u7684\u72b6\u6001\u4ece\u00a0 \u672a\u5c31\u7eea \u53d8\u4e3a \u5df2\u90e8\u7f72 \uff0c\u4e14\u6240\u6709\u7684\u7ec4\u4ef6\u72b6\u6001\u4e3a \u8fd0\u884c\u4e2d \u65f6\uff0c\u5219\u5b89\u88c5\u6210\u529f\u3002\u7b49\u5f85\u4e00\u6bb5\u65f6\u95f4\u540e\uff0c\u53ef\u5728 \u53ef\u89c2\u6d4b\u6027 \u6a21\u5757\u67e5\u770b\u8be5\u96c6\u7fa4\u7684\u6570\u636e\u3002

Note

  • \u70b9\u51fb\u6700\u53f3\u4fa7\u7684 \u2507 \uff0c\u60a8\u53ef\u4ee5\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u6267\u884c\u66f4\u591a\u64cd\u4f5c\uff0c\u5982 \u66f4\u65b0 \u3001 \u67e5\u770b YAML \u548c \u5220\u9664 \u3002
"},{"location":"admin/insight/quickstart/install/knownissues.html","title":"\u5df2\u77e5\u95ee\u9898","text":"

\u672c\u9875\u5217\u51fa\u4e00\u4e9b Insight Agent \u5b89\u88c5\u548c\u5378\u8f7d\u6709\u5173\u7684\u95ee\u9898\u53ca\u5176\u89e3\u51b3\u529e\u6cd5\u3002

"},{"location":"admin/insight/quickstart/install/knownissues.html#v0230","title":"v0.23.0","text":""},{"location":"admin/insight/quickstart/install/knownissues.html#insight-agent","title":"Insight Agent","text":""},{"location":"admin/insight/quickstart/install/knownissues.html#insight-agent_1","title":"Insight Agent \u5378\u8f7d\u5931\u8d25","text":"

\u5f53\u4f60\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u5378\u8f7d Insight Agent \u65f6\u3002

helm uninstall insight-agent -n insight-system\n

otel-oprator \u6240\u4f7f\u7528\u7684 tls secret \u672a\u88ab\u5378\u8f7d\u6389\u3002

otel-operator \u5b9a\u4e49\u7684\u201c\u91cd\u590d\u5229\u7528 tls secret\u201d\u7684\u903b\u8f91\u4e2d\uff0c\u4f1a\u53bb\u5224\u65ad otel-oprator \u7684 MutationConfiguration \u662f\u5426\u5b58\u5728\u5e76\u91cd\u590d\u5229\u7528 MutationConfiguration \u4e2d\u7ed1\u5b9a\u7684 CA cert\u3002\u4f46\u662f\u7531\u4e8e helm uninstall \u5df2\u5378\u8f7d MutationConfiguration\uff0c\u5bfc\u81f4\u51fa\u73b0\u7a7a\u503c\u3002

\u7efc\u4e0a\u8bf7\u624b\u52a8\u5220\u9664\u5bf9\u5e94\u7684 secret\uff0c\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u4efb\u9009\u4e00\u79cd\u5373\u53ef\uff1a

  • \u901a\u8fc7\u547d\u4ee4\u884c\u5220\u9664\uff1a\u767b\u5f55\u76ee\u6807\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

    kubectl -n insight-system delete secret insight-agent-opentelemetry-operator-controller-manager-service-cert\n
  • \u901a\u8fc7 UI \u5220\u9664\uff1a\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5bb9\u5668\u7ba1\u7406\uff0c\u9009\u62e9\u76ee\u6807\u96c6\u7fa4\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u8fdb\u5165\u5bc6\u94a5\uff0c\u8f93\u5165 insight-agent-opentelemetry-operator-controller-manager-service-cert\uff0c\u9009\u62e9\u5220\u9664\u3002

"},{"location":"admin/insight/quickstart/install/knownissues.html#v0220","title":"v0.22.0","text":""},{"location":"admin/insight/quickstart/install/knownissues.html#insight-agent_2","title":"Insight Agent","text":""},{"location":"admin/insight/quickstart/install/knownissues.html#insight-agent_3","title":"\u5347\u7ea7 Insight Agent \u65f6\u66f4\u65b0\u65e5\u5fd7\u6536\u96c6\u7aef\uff0c\u672a\u751f\u6548","text":"

\u66f4\u65b0 insight-agent \u65e5\u5fd7\u914d\u7f6e\u4ece elasticsearch \u6539\u4e3a kafka \u6216\u8005\u4ece kafka \u6539\u4e3a elasticsearch\uff0c\u5b9e\u9645\u4e0a\u90fd\u672a\u751f\u6548\uff0c\u8fd8\u662f\u4f7f\u7528\u66f4\u65b0\u524d\u914d\u7f6e\u3002

\u89e3\u51b3\u65b9\u6848 \uff1a

\u624b\u52a8\u91cd\u542f\u96c6\u7fa4\u4e2d\u7684 fluentbit\u3002

"},{"location":"admin/insight/quickstart/install/knownissues.html#v0210","title":"v0.21.0","text":""},{"location":"admin/insight/quickstart/install/knownissues.html#insight-agent_4","title":"Insight Agent","text":""},{"location":"admin/insight/quickstart/install/knownissues.html#podmonitor-jvm","title":"PodMonitor \u91c7\u96c6\u591a\u4efd JVM \u6307\u6807\u6570\u636e","text":"
  1. \u8fd9\u4e2a\u7248\u672c\u7684 PodMonitor/insight-kubernetes-pod \u5b58\u5728\u7f3a\u9677\uff1a\u4f1a\u9519\u8bef\u5730\u521b\u5efa Job \u53bb\u91c7\u96c6\u6807\u8bb0\u4e86 insight.opentelemetry.io/metric-scrape=true \u7684 Pod \u7684\u6240\u6709 container\uff1b\u800c\u5b9e\u9645\u4e0a\u53ea\u9700\u91c7\u96c6 insight.opentelemetry.io/metric-port \u6240\u5bf9\u5e94 container \u7684\u7aef\u53e3\u3002

  2. \u56e0\u4e3a PodMonitor \u58f0\u660e\u4e4b\u540e\uff0cPromethuesOperator \u4f1a\u9884\u8bbe\u7f6e\u4e00\u4e9b\u670d\u52a1\u53d1\u73b0\u914d\u7f6e\u3002 \u518d\u8003\u8651\u5230 CRD \u7684\u517c\u5bb9\u6027\u7684\u95ee\u9898\u3002\u56e0\u6b64\uff0c\u653e\u5f03\u901a\u8fc7 PodMonitor \u6765\u914d\u7f6e\u901a\u8fc7 annotation \u521b\u5efa\u91c7\u96c6\u4efb\u52a1\u7684\u673a\u5236\u3002

  3. \u901a\u8fc7 Prometheus \u81ea\u5e26\u7684 additional scrape config \u673a\u5236\uff0c\u5c06\u670d\u52a1\u53d1\u73b0\u89c4\u5219\u914d\u7f6e\u5728 secret \u4e2d\uff0c\u5728\u5f15\u5165 Prometheus \u91cc\u3002

\u7efc\u4e0a\uff1a

  1. \u5220\u9664\u8fd9\u4e2a PodMonitor \u7684\u5f53\u524d insight-kubernetes-pod
  2. \u4f7f\u7528\u65b0\u7684\u89c4\u5219

\u65b0\u7684\u89c4\u5219\u91cc\u901a\u8fc7 action: keepequal \u6765\u6bd4\u8f83 source_labels \u548c target_label \u7684\u4e00\u81f4\u6027\uff0c \u6765\u5224\u65ad\u662f\u5426\u8981\u7ed9\u67d0\u4e2a container \u7684 port \u521b\u5efa\u91c7\u96c6\u4efb\u52a1\u3002\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u4e2a\u662f Prometheus 2.41.0\uff082022-12-20\uff09\u548c\u66f4\u9ad8\u7248\u672c\u624d\u5177\u5907\u7684\u529f\u80fd\u3002

+    - source_labels: [__meta_kubernetes_pod_annotation_insight_opentelemetry_io_metric_port]\n+      separator: ;\n+      target_label: __meta_kubernetes_pod_container_port_number\n+      action: keepequal\n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html","title":"\u5347\u7ea7\u6ce8\u610f\u4e8b\u9879","text":"

\u672c\u9875\u4ecb\u7ecd\u4e00\u4e9b\u5347\u7ea7 insight-server \u548c insight-agent \u7684\u6ce8\u610f\u4e8b\u9879\u3002

"},{"location":"admin/insight/quickstart/install/upgrade-note.html#insight-agent","title":"insight-agent","text":""},{"location":"admin/insight/quickstart/install/upgrade-note.html#v028x-v029x","title":"\u4ece v0.28.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.29.x","text":"

\u7531\u4e8e v0.29.0 \u5347\u7ea7\u4e86 Opentelemetry \u793e\u533a\u7684 operator chart \u7248\u672c\uff0cvalues \u4e2d\u7684 featureGates \u7684\u652f\u6301\u7684\u503c\u6709\u6240\u53d8\u5316\uff0c\u56e0\u6b64\uff0c\u5728 upgrade \u4e4b\u524d\uff0c\u9700\u8981\u5c06 featureGates \u7684\u503c\u8bbe\u7f6e\u4e3a\u7a7a, \u5373\uff1a

-  --set opentelemetry-operator.manager.featureGates=\"+operator.autoinstrumentation.go,+operator.autoinstrumentation.multi-instrumentation,+operator.autoinstrumentation.nginx\" \\\n+  --set opentelemetry-operator.manager.featureGates=\"\"\n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html#insight-server","title":"insight-server","text":""},{"location":"admin/insight/quickstart/install/upgrade-note.html#v026x-v027x","title":"\u4ece v0.26.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.27.x \u6216\u66f4\u9ad8\u7248\u672c","text":"

\u5728 v0.27.x \u7248\u672c\u4e2d\u5c06 vector \u7ec4\u4ef6\u7684\u5f00\u5173\u5355\u72ec\u62bd\u51fa\u3002\u6545\u539f\u6709\u73af\u5883\u5f00\u542f\u4e86 vector\uff0c\u90a3\u5728\u5347\u7ea7 insight-server \u65f6\uff0c\u9700\u8981\u6307\u5b9a --set vector.enabled=true \u3002

"},{"location":"admin/insight/quickstart/install/upgrade-note.html#v019x-020x","title":"\u4ece v0.19.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 0.20.x","text":"

\u5728\u5347\u7ea7 Insight \u4e4b\u524d\uff0c\u60a8\u9700\u8981\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u624b\u52a8\u5220\u9664 jaeger-collector \u548c jaeger-query \u90e8\u7f72\uff1a

kubectl -n insight-system delete deployment insight-jaeger-collector\nkubectl -n insight-system delete deployment insight-jaeger-query\n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html#v017x-v018x","title":"\u4ece v0.17.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.18.x","text":"

\u7531\u4e8e 0.18.x \u4e2d\u66f4\u65b0\u4e86 Jaeger \u76f8\u5173\u90e8\u7f72\u6587\u4ef6\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-server \u524d\u624b\u52a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

kubectl -n insight-system delete deployment insight-jaeger-collector\nkubectl -n insight-system delete deployment insight-jaeger-query\n

\u7531\u4e8e 0.18.x \u4e2d\u6307\u6807\u540d\u4ea7\u751f\u4e86\u53d8\u52a8\uff0c\u56e0\u6b64\uff0c\u9700\u8981\u5728\u5347\u7ea7 insight-server \u4e4b\u540e\uff0cinsight-agent \u4e5f\u5e94\u8be5\u505a\u5347\u7ea7\u3002

\u6b64\u5916\uff0c\u8c03\u6574\u4e86\u5f00\u542f\u94fe\u8def\u6a21\u5757\u7684\u53c2\u6570\uff0c\u4ee5\u53ca ElasticSearch \u8fde\u63a5\u8c03\u6574\u3002\u5177\u4f53\u53c2\u8003\u4ee5\u4e0b\u53c2\u6570\uff1a

+  --set global.tracing.enable=true \\\n-  --set jaeger.collector.enabled=true \\\n-  --set jaeger.query.enabled=true \\\n+  --set global.elasticsearch.scheme=${your-external-elasticsearch-scheme} \\\n+  --set global.elasticsearch.host=${your-external-elasticsearch-host} \\\n+  --set global.elasticsearch.port=${your-external-elasticsearch-port} \\\n+  --set global.elasticsearch.user=${your-external-elasticsearch-username} \\\n+  --set global.elasticsearch.password=${your-external-elasticsearch-password} \\\n-  --set jaeger.storage.elasticsearch.scheme=${your-external-elasticsearch-scheme} \\\n-  --set jaeger.storage.elasticsearch.host=${your-external-elasticsearch-host} \\\n-  --set jaeger.storage.elasticsearch.port=${your-external-elasticsearch-port} \\\n-  --set jaeger.storage.elasticsearch.user=${your-external-elasticsearch-username} \\\n-  --set jaeger.storage.elasticsearch.password=${your-external-elasticsearch-password} \\\n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html#v015x-v016x","title":"\u4ece v0.15.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.16.x","text":"

\u7531\u4e8e 0.16.x \u4e2d\u4f7f\u7528\u4e86 vmalertmanagers CRD \u7684\u65b0\u7279\u6027\u53c2\u6570 disableRouteContinueEnforce\uff0c \u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-server \u524d\u624b\u52a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u3002

kubectl apply --server-side -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.33.0/config/crd/bases/operator.victoriametrics.com_vmalertmanagers.yaml --force-conflicts\n

Note

\u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b Insight \u79bb\u7ebf\u5305\u540e\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u66f4\u65b0 CRD\u3002

kubectl apply --server-side -f insight/dependency-crds --force-conflicts \n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html#insight-agent_1","title":"insight-agent","text":""},{"location":"admin/insight/quickstart/install/upgrade-note.html#v023x-v024x","title":"\u4ece v0.23.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.24.x","text":"

\u7531\u4e8e 0.24.x \u7248\u672c\u4e2d OTEL operator chart \u4e2d\u65b0\u589e\u4e86 CRD\uff0c\u4f46\u7531\u4e8e Helm Upgrade \u65f6\u5e76\u4e0d\u4f1a\u66f4\u65b0 CRD\uff0c\u56e0\u6b64\uff0c\u9700\u8981\u624b\u52a8\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

kubectl apply -f https://raw.githubusercontent.com/open-telemetry/opentelemetry-helm-charts/main/charts/opentelemetry-operator/crds/crd-opentelemetry.io_opampbridges.yaml\n

\u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b insight-agent \u79bb\u7ebf\u5305\u540e\u53ef\u627e\u5230\u4e0a\u8ff0 CRD \u7684 yaml\uff0c\u89e3\u538b Insight-Agent Chart \u4e4b\u540e\u624b\u52a8\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

kubectl apply -f charts/agent/crds/crd-opentelemetry.io_opampbridges.yaml\n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html#v019x-v020x","title":"\u4ece v0.19.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.20.x","text":"

\u7531\u4e8e 0.20.x \u4e2d\u589e\u52a0\u4e86 Kafka \u65e5\u5fd7\u5bfc\u51fa\u914d\u7f6e\uff0c\u65e5\u5fd7\u5bfc\u51fa\u914d\u7f6e\u505a\u4e86\u4e00\u4e9b\u8c03\u6574\u3002\u5347\u7ea7 insight-agent \u4e4b\u524d\u9700\u8981\u6ce8\u610f\u53c2\u6570\u53d8\u5316\uff0c \u5373\u539f\u6765 logging \u7684\u914d\u7f6e\u5df2\u7ecf\u79fb\u5230\u4e86\u914d\u7f6e\u4e2d logging.elasticsearch\uff1a

-  --set global.exporters.logging.host \\\n-  --set global.exporters.logging.port \\\n+  --set global.exporters.logging.elasticsearch.host \\\n+  --set global.exporters.logging.elasticsearch.port \\\n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html#v017x-v018x_1","title":"\u4ece v0.17.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.18.x","text":"

\u7531\u4e8e 0.18.x \u4e2d\u66f4\u65b0\u4e86 Jaeger \u76f8\u5173\u90e8\u7f72\u6587\u4ef6\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-agent \u524d\u9700\u8981\u6ce8\u610f\u53c2\u6570\u7684\u6539\u52a8\u3002

+  --set global.exporters.trace.enable=true \\\n-  --set opentelemetry-collector.enabled=true \\\n-  --set opentelemetry-operator.enabled=true \\\n
"},{"location":"admin/insight/quickstart/install/upgrade-note.html#v016x-v017x","title":"\u4ece v0.16.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.17.x","text":"

\u5728 v0.17.x \u7248\u672c\u4e2d\u5c06 kube-prometheus-stack chart \u7248\u672c\u4ece 41.9.1 \u5347\u7ea7\u81f3 45.28.1, \u5176\u4e2d\u4f7f\u7528\u7684 CRD \u4e5f\u5b58\u5728\u4e00\u4e9b\u5b57\u6bb5\u7684\u5347\u7ea7\uff0c\u5982 servicemonitor \u7684 attachMetadata \u5b57\u6bb5\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-agent \u524d\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.65.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --force-conflicts\n

\u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b insight-agent \u79bb\u7ebf\u5305\u540e\uff0c\u5728 insight-agent/dependency-crds \u4e2d\u627e\u5230\u4e0a\u8ff0 CRD \u7684 yaml\u3002

"},{"location":"admin/insight/quickstart/install/upgrade-note.html#v011x-v012x","title":"\u4ece v0.11.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.12.x","text":"

\u5728 v0.12.x \u5c06 kube-prometheus-stack chart \u4ece 39.6.0 \u5347\u7ea7\u5230 41.9.1\uff0c\u5176\u4e2d\u5305\u62ec prometheus-operator \u5347\u7ea7\u5230 v0.60.1, prometheus-node-exporter chart \u5347\u7ea7\u5230 4.3.0 \u7b49\u3002 prometheus-node-exporter \u5347\u7ea7\u540e\u4f7f\u7528\u4e86 Kubernetes \u63a8\u8350 label\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7\u524d\u5220\u9664 node-exporter \u7684 DaemonSet\u3002 prometheus-operator \u66f4\u65b0\u4e86 CRD\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-agent \u524d\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

kubectl delete daemonset insight-agent-prometheus-node-exporter -n insight-system\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml --force-conflicts\n

Note

\u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b insight-agent \u79bb\u7ebf\u5305\u540e\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u66f4\u65b0 CRD\u3002

kubectl apply --server-side -f insight-agent/dependency-crds --force-conflicts\n
"},{"location":"admin/insight/quickstart/otel/operator.html","title":"\u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a","text":"

\u76ee\u524d\u53ea\u6709 Java\u3001NodeJs\u3001Python\u3001.Net\u3001Golang \u652f\u6301 Operator \u7684\u65b9\u5f0f\u65e0\u4fb5\u5165\u63a5\u5165\u3002

"},{"location":"admin/insight/quickstart/otel/operator.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u8bf7\u786e\u4fdd insight-agent \u5df2\u7ecf\u5c31\u7eea\u3002\u5982\u82e5\u6ca1\u6709\uff0c\u8bf7\u53c2\u8003\u5b89\u88c5 insight-agent \u91c7\u96c6\u6570\u636e\u5e76\u786e\u4fdd\u4ee5\u4e0b\u4e09\u9879\u5c31\u7eea\uff1a

  • \u4e3a insight-agent \u5f00\u542f trace \u529f\u80fd
  • trace \u6570\u636e\u7684\u5730\u5740\u4ee5\u53ca\u7aef\u53e3\u662f\u5426\u586b\u5199\u6b63\u786e
  • deployment/insight-agent-opentelemetry-operator \u548c deployment/insight-agent-opentelemetry-collector \u5bf9\u5e94\u7684 Pod \u5df2\u7ecf\u51c6\u5907\u5c31\u7eea
"},{"location":"admin/insight/quickstart/otel/operator.html#instrumentation-cr","title":"\u5b89\u88c5 Instrumentation CR","text":"

Tip

\u4ece Insight v0.22.0 \u5f00\u59cb\uff0c\u4e0d\u518d\u9700\u8981\u624b\u52a8\u5b89\u88c5 Instrumentation CR\u3002

\u5728 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u5b89\u88c5\uff0c\u4e0d\u540c\u7248\u672c\u4e4b\u95f4\u6709\u4e00\u4e9b\u7ec6\u5c0f\u7684\u5dee\u522b\u3002

Insight v0.21.xInsight v0.20.xInsight v0.18.xInsight v0.17.xInsight v0.16.x
K8S_CLUSTER_UID=$(kubectl get namespace kube-system -o jsonpath='{.metadata.uid}')\nkubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/openinsight-proj/autoinstrumentation-java:1.31.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n      - name: OTEL_K8S_CLUSTER_UID\n        value: $K8S_CLUSTER_UID\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0\n  dotnet:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha\nEOF\n
kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.29.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0\n  dotnet:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0-rc.2\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha\nEOF\n
kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.25.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.37.0\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.38b0\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.1-alpha\nEOF\n
kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.23.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.34.0\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.33b0\nEOF\n
kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.23.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.34.0\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.33b0\nEOF\n
"},{"location":"admin/insight/quickstart/otel/operator.html#_2","title":"\u4e0e\u670d\u52a1\u7f51\u683c\u94fe\u8def\u4e32\u8054\u573a\u666f","text":"

\u5982\u679c\u60a8\u5f00\u542f\u4e86\u670d\u52a1\u7f51\u683c\u7684\u94fe\u8def\u8ffd\u8e2a\u80fd\u529b\uff0c\u9700\u8981\u989d\u5916\u589e\u52a0\u4e00\u4e2a\u73af\u5883\u53d8\u91cf\u6ce8\u5165\u7684\u914d\u7f6e\uff1a

"},{"location":"admin/insight/quickstart/otel/operator.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b","text":"
  1. \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3.0\uff0c\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \u540e\u9009\u62e9\u8fdb\u5165\u76ee\u6807\u96c6\u7fa4\uff0c
  2. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u627e\u5230 instrumentations.opentelemetry.io \u540e\u8fdb\u5165\u8be6\u60c5\u9875\u3002
  3. \u9009\u62e9 insight-system \u547d\u540d\u7a7a\u95f4\u540e\uff0c\u7f16\u8f91 insight-opentelemetry-autoinstrumentation \uff0c\u5728 spec:env: \u4e0b\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a

        - name: OTEL_SERVICE_NAME\n      valueFrom:\n        fieldRef:\n          fieldPath: metadata.labels['app'] \n

    \u5b8c\u6574\u7684\u547d\u4ee4\u5982\u4e0b\uff08For Insight v0.21.x\uff09\uff1a

    K8S_CLUSTER_UID=$(kubectl get namespace kube-system -o jsonpath='{.metadata.uid}')\nkubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n    - name: OTEL_SERVICE_NAME\n      valueFrom:\n        fieldRef:\n          fieldPath: metadata.labels['app'] \n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/openinsight-proj/autoinstrumentation-java:1.31.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n      - name: OTEL_K8S_CLUSTER_UID\n        value: $K8S_CLUSTER_UID\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0\n  dotnet:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha\nEOF\n
"},{"location":"admin/insight/quickstart/otel/operator.html#_4","title":"\u6dfb\u52a0\u6ce8\u89e3\uff0c\u81ea\u52a8\u63a5\u5165\u94fe\u8def","text":"

\u4ee5\u4e0a\u5c31\u7eea\u4e4b\u540e\uff0c\u60a8\u5c31\u53ef\u4ee5\u901a\u8fc7\u6ce8\u89e3\uff08Annotation\uff09\u65b9\u5f0f\u4e3a\u5e94\u7528\u7a0b\u5e8f\u63a5\u5165\u94fe\u8def\u8ffd\u8e2a\u4e86\uff0cOTel \u76ee\u524d\u652f\u6301\u901a\u8fc7\u6ce8\u89e3\u7684\u65b9\u5f0f\u63a5\u5165\u94fe\u8def\u3002 \u6839\u636e\u670d\u52a1\u8bed\u8a00\uff0c\u9700\u8981\u6dfb\u52a0\u4e0a\u4e0d\u540c\u7684 pod annotations\u3002\u6bcf\u4e2a\u670d\u52a1\u53ef\u6dfb\u52a0\u4e24\u7c7b\u6ce8\u89e3\u4e4b\u4e00\uff1a

  • \u53ea\u6ce8\u5165\u73af\u5883\u53d8\u91cf\u6ce8\u89e3

    \u8fd9\u7c7b\u6ce8\u89e3\u53ea\u6709\u4e00\u4e2a\uff0c\u7528\u4e8e\u6dfb\u52a0 otel \u76f8\u5173\u7684\u73af\u5883\u53d8\u91cf\uff0c\u6bd4\u5982\u94fe\u8def\u4e0a\u62a5\u5730\u5740\u3001\u5bb9\u5668\u6240\u5728\u7684\u96c6\u7fa4 id\u3001\u547d\u540d\u7a7a\u95f4\u7b49\uff08\u8fd9\u4e2a\u6ce8\u89e3\u5728\u5e94\u7528\u4e0d\u652f\u6301\u81ea\u52a8\u63a2\u9488\u8bed\u8a00\u65f6\u5341\u5206\u6709\u7528\uff09

    instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

    \u5176\u4e2d value \u88ab / \u5206\u6210\u4e24\u90e8\u5206\uff0c\u7b2c\u4e00\u4e2a\u503c (insight-system) \u662f\u4e0a\u4e00\u6b65\u5b89\u88c5\u7684 CR \u7684\u547d\u540d\u7a7a\u95f4\uff0c \u7b2c\u4e8c\u4e2a\u503c (insight-opentelemetry-autoinstrumentation) \u662f\u8fd9\u4e2a CR \u7684\u540d\u5b57\u3002

  • \u81ea\u52a8\u63a2\u9488\u6ce8\u5165\u4ee5\u53ca\u73af\u5883\u53d8\u91cf\u6ce8\u5165\u6ce8\u89e3

    \u8fd9\u7c7b\u6ce8\u89e3\u76ee\u524d\u6709 4 \u4e2a\uff0c\u5206\u522b\u5bf9\u5e94 4 \u79cd\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\uff1ajava\u3001nodejs\u3001python\u3001dotnet\uff0c \u4f7f\u7528\u5b83\u540e\u5c31\u4f1a\u5bf9 spec.pod \u4e0b\u7684\u7b2c\u4e00\u4e2a\u5bb9\u5668\u6ce8\u5165\u81ea\u52a8\u63a2\u9488\u4ee5\u53ca otel \u9ed8\u8ba4\u73af\u5883\u53d8\u91cf\uff1a

    Java \u5e94\u7528NodeJs \u5e94\u7528Python \u5e94\u7528Dotnet \u5e94\u7528Golang \u5e94\u7528
    instrumentation.opentelemetry.io/inject-java: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
    instrumentation.opentelemetry.io/inject-nodejs: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
    instrumentation.opentelemetry.io/inject-python: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
    instrumentation.opentelemetry.io/inject-dotnet: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

    \u7531\u4e8e Go \u81ea\u52a8\u68c0\u6d4b\u9700\u8981\u8bbe\u7f6e OTEL_GO_AUTO_TARGET_EXE\uff0c \u56e0\u6b64\u60a8\u5fc5\u987b\u901a\u8fc7\u6ce8\u89e3\u6216 Instrumentation \u8d44\u6e90\u63d0\u4f9b\u6709\u6548\u7684\u53ef\u6267\u884c\u8def\u5f84\u3002\u672a\u8bbe\u7f6e\u6b64\u503c\u4f1a\u5bfc\u81f4 Go \u81ea\u52a8\u68c0\u6d4b\u6ce8\u5165\u4e2d\u6b62\uff0c\u4ece\u800c\u5bfc\u81f4\u63a5\u5165\u94fe\u8def\u5931\u8d25\u3002

    instrumentation.opentelemetry.io/inject-go: \"insight-system/insight-opentelemetry-autoinstrumentation\"\ninstrumentation.opentelemetry.io/otel-go-auto-target-exe: \"/path/to/container/executable\"\n

    Go \u81ea\u52a8\u68c0\u6d4b\u4e5f\u9700\u8981\u63d0\u5347\u6743\u9650\u3002\u4ee5\u4e0b\u6743\u9650\u662f\u81ea\u52a8\u8bbe\u7f6e\u7684\u5e76\u4e14\u662f\u5fc5\u9700\u7684\u3002

    securityContext:\n  privileged: true\n  runAsUser: 0\n

Tip

OpenTelemetry Operator \u5728\u6ce8\u5165\u63a2\u9488\u65f6\u4f1a\u81ea\u52a8\u6dfb\u52a0\u4e00\u4e9b OTel \u76f8\u5173\u73af\u5883\u53d8\u91cf\uff0c\u540c\u65f6\u4e5f\u652f\u6301\u8fd9\u4e9b\u73af\u5883\u53d8\u91cf\u7684\u8986\u76d6\u3002\u8fd9\u4e9b\u73af\u5883\u53d8\u91cf\u7684\u8986\u76d6\u4f18\u5148\u7ea7\uff1a

original container env vars -> language specific env vars -> common env vars -> instrument spec configs' vars\n

\u4f46\u662f\u9700\u8981\u907f\u514d\u624b\u52a8\u8986\u76d6 OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\uff0c\u5b83\u5728 Operator \u5185\u90e8\u4f5c\u4e3a\u4e00\u4e2a Pod \u662f\u5426\u5df2\u7ecf\u6ce8\u5165\u63a2\u9488\u7684\u6807\u8bc6\uff0c\u5982\u679c\u624b\u52a8\u6dfb\u52a0\u4e86\uff0c\u63a2\u9488\u53ef\u80fd\u65e0\u6cd5\u6ce8\u5165\u3002

"},{"location":"admin/insight/quickstart/otel/operator.html#demo","title":"\u81ea\u52a8\u6ce8\u5165\u793a\u4f8b Demo","text":"

\u6ce8\u610f\u8fd9\u4e2a annotations \u662f\u52a0\u5728 spec.annotations \u4e0b\u7684\u3002

apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-app\n  labels:\n    app: my-app\nspec:\n  selector:\n    matchLabels:\n      app: my-app\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: my-app\n      annotations:\n        instrumentation.opentelemetry.io/inject-java: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n    spec:\n      containers:\n      - name: myapp\n        image: jaegertracing/vertx-create-span:operator-e2e-tests\n        ports:\n          - containerPort: 8080\n            protocol: TCP\n

\u6700\u7ec8\u751f\u6210\u7684 YAML \u5185\u5bb9\u5982\u4e0b\uff1a

apiVersion: v1\nkind: Pod\nmetadata:\n  name: my-deployment-with-sidecar-565bd877dd-nqkk6\n  generateName: my-deployment-with-sidecar-565bd877dd-\n  namespace: default\n  uid: aa89ca0d-620c-4d20-8bc1-37d67bad4ea4\n  resourceVersion: '2668986'\n  creationTimestamp: '2022-04-08T05:58:48Z'\n  labels:\n    app: my-pod-with-sidecar\n    pod-template-hash: 565bd877dd\n  annotations:\n    cni.projectcalico.org/containerID: 234eae5e55ea53db2a4bc2c0384b9a1021ed3908f82a675e4a92a49a7e80dd61\n    cni.projectcalico.org/podIP: 192.168.134.133/32\n    cni.projectcalico.org/podIPs: 192.168.134.133/32\n    instrumentation.opentelemetry.io/inject-java: \"insight-system/insight-opentelemetry-autoinstrumentation\"\nspec:\n  volumes:\n    - name: kube-api-access-sp2mz\n      projected:\n        sources:\n          - serviceAccountToken:\n              expirationSeconds: 3607\n              path: token\n          - configMap:\n              name: kube-root-ca.crt\n              items:\n                - key: ca.crt\n                  path: ca.crt\n          - downwardAPI:\n              items:\n                - path: namespace\n                  fieldRef:\n                    apiVersion: v1\n                    fieldPath: metadata.namespace\n        defaultMode: 420\n    - name: opentelemetry-auto-instrumentation\n      emptyDir: {}\n  initContainers:\n    - name: opentelemetry-auto-instrumentation\n      image: >-\n        ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java\n      command:\n        - cp\n        - /javaagent.jar\n        - /otel-auto-instrumentation/javaagent.jar\n      resources: {}\n      volumeMounts:\n        - name: opentelemetry-auto-instrumentation\n          mountPath: /otel-auto-instrumentation\n        - name: kube-api-access-sp2mz\n          readOnly: true\n          mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n      terminationMessagePath: /dev/termination-log\n      terminationMessagePolicy: File\n      imagePullPolicy: Always\n  containers:\n    - name: myapp\n      image: ghcr.io/pavolloffay/spring-petclinic:latest\n      env:\n        - name: OTEL_JAVAAGENT_DEBUG\n          value: 'true'\n        - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n          value: 'true'\n        - name: SPLUNK_PROFILER_ENABLED\n          value: 'false'\n        - name: JAVA_TOOL_OPTIONS\n          value: ' -javaagent:/otel-auto-instrumentation/javaagent.jar'\n        - name: OTEL_TRACES_EXPORTER\n          value: otlp\n        - name: OTEL_EXPORTER_OTLP_ENDPOINT\n          value: http://insight-agent-opentelemetry-collector.svc.cluster.local:4317\n        - name: OTEL_EXPORTER_OTLP_TIMEOUT\n          value: '20'\n        - name: OTEL_TRACES_SAMPLER\n          value: parentbased_traceidratio\n        - name: OTEL_TRACES_SAMPLER_ARG\n          value: '0.85'\n        - name: SPLUNK_TRACE_RESPONSE_HEADER_ENABLED\n          value: 'true'\n        - name: OTEL_SERVICE_NAME\n          value: my-deployment-with-sidecar\n        - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: metadata.name\n        - name: OTEL_RESOURCE_ATTRIBUTES_POD_UID\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: metadata.uid\n        - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: spec.nodeName\n        - name: OTEL_RESOURCE_ATTRIBUTES\n          value: >-\n            k8s.container.name=myapp,k8s.deployment.name=my-deployment-with-sidecar,k8s.deployment.uid=8de6929d-dda0-436c-bca1-604e9ca7ea4e,k8s.namespace.name=default,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),k8s.pod.uid=$(OTEL_RESOURCE_ATTRIBUTES_POD_UID),k8s.replicaset.name=my-deployment-with-sidecar-565bd877dd,k8s.replicaset.uid=190d5f6e-ba7f-4794-b2e6-390b5879a6c4\n        - name: OTEL_PROPAGATORS\n          value: jaeger,b3\n      resources: {}\n      volumeMounts:\n        - name: kube-api-access-sp2mz\n          readOnly: true\n          mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n        - name: opentelemetry-auto-instrumentation\n          mountPath: /otel-auto-instrumentation\n      terminationMessagePath: /dev/termination-log\n      terminationMessagePolicy: File\n      imagePullPolicy: Always\n  restartPolicy: Always\n  terminationGracePeriodSeconds: 30\n  dnsPolicy: ClusterFirst\n  serviceAccountName: default\n  serviceAccount: default\n  nodeName: k8s-master3\n  securityContext:\n    runAsUser: 1000\n    runAsGroup: 3000\n    fsGroup: 2000\n  schedulerName: default-scheduler\n  tolerations:\n    - key: node.kubernetes.io/not-ready\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n    - key: node.kubernetes.io/unreachable\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n  priority: 0\n  enableServiceLinks: true\n  preemptionPolicy: PreemptLowerPriority\n
"},{"location":"admin/insight/quickstart/otel/operator.html#_5","title":"\u94fe\u8def\u67e5\u8be2","text":"

\u5982\u4f55\u67e5\u8be2\u5df2\u7ecf\u63a5\u5165\u7684\u670d\u52a1\uff0c\u53c2\u8003\u94fe\u8def\u67e5\u8be2\u3002

"},{"location":"admin/insight/quickstart/otel/otel.html","title":"\u4f7f\u7528 OTel \u8d4b\u4e88\u5e94\u7528\u53ef\u89c2\u6d4b\u6027","text":"

\u589e\u5f3a\u662f\u4f7f\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u80fd\u591f\u751f\u6210\u9065\u6d4b\u6570\u636e\u7684\u8fc7\u7a0b\u3002\u5373\u4e00\u4e9b\u53ef\u4ee5\u5e2e\u52a9\u60a8\u76d1\u89c6\u6216\u6d4b\u91cf\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u72b6\u6001\u7684\u4e1c\u897f\u3002

OpenTelemetry \u662f\u9886\u5148\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u4e3a\u4e3b\u8981\u7f16\u7a0b\u8bed\u8a00\u548c\u6d41\u884c\u6846\u67b6\u63d0\u4f9b\u68c0\u6d4b\u5e93\u3002\u5b83\u662f\u4e91\u539f\u751f\u8ba1\u7b97\u57fa\u91d1\u4f1a\u4e0b\u7684\u4e00\u4e2a\u9879\u76ee\uff0c\u5f97\u5230\u4e86\u793e\u533a\u5e9e\u5927\u8d44\u6e90\u7684\u652f\u6301\u3002 \u5b83\u4e3a\u91c7\u96c6\u7684\u6570\u636e\u63d0\u4f9b\u6807\u51c6\u5316\u7684\u6570\u636e\u683c\u5f0f\uff0c\u65e0\u9700\u96c6\u6210\u7279\u5b9a\u7684\u4f9b\u5e94\u5546\u3002

Insight \u652f\u6301\u7528\u4e8e\u68c0\u6d4b\u5e94\u7528\u7a0b\u5e8f\u7684 OpenTelemetry \u6765\u589e\u5f3a\u60a8\u7684\u5e94\u7528\u7a0b\u5e8f\u3002

\u672c\u6307\u5357\u4ecb\u7ecd\u4e86\u4f7f\u7528 OpenTelemetry \u8fdb\u884c\u9065\u6d4b\u589e\u5f3a\u7684\u57fa\u672c\u6982\u5ff5\u3002 OpenTelemetry \u8fd8\u6709\u4e00\u4e2a\u7531\u5e93\u3001\u63d2\u4ef6\u3001\u96c6\u6210\u548c\u5176\u4ed6\u6709\u7528\u5de5\u5177\u7ec4\u6210\u7684\u751f\u6001\u7cfb\u7edf\u6765\u6269\u5c55\u5b83\u3002 \u60a8\u53ef\u4ee5\u5728 Otel Registry \u4e2d\u627e\u5230\u8fd9\u4e9b\u8d44\u6e90\u3002

\u60a8\u53ef\u4ee5\u4f7f\u7528\u4efb\u4f55\u5f00\u653e\u6807\u51c6\u5e93\u8fdb\u884c\u9065\u6d4b\u589e\u5f3a\uff0c\u5e76\u4f7f\u7528 Insight \u4f5c\u4e3a\u53ef\u89c2\u5bdf\u6027\u540e\u7aef\u6765\u6444\u53d6\u3001\u5206\u6790\u548c\u53ef\u89c6\u5316\u6570\u636e\u3002

\u4e3a\u4e86\u589e\u5f3a\u60a8\u7684\u4ee3\u7801\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 OpenTelemetry \u4e3a\u7279\u5b9a\u8bed\u8a00\u63d0\u4f9b\u7684\u589e\u5f3a\u64cd\u4f5c\uff1a

Insight \u76ee\u524d\u63d0\u4f9b\u4e86\u4f7f\u7528 OpenTelemetry \u589e\u5f3a .Net NodeJS\u3001Java\u3001Python \u548c Golang \u5e94\u7528\u7a0b\u5e8f\u7684\u7b80\u5355\u65b9\u6cd5\u3002\u8bf7\u9075\u5faa\u4ee5\u4e0b\u6307\u5357\u3002

"},{"location":"admin/insight/quickstart/otel/otel.html#_1","title":"\u94fe\u8def\u589e\u5f3a","text":"
  • \u94fe\u8def\u63a5\u5165\u7684\u6700\u4f73\u5b9e\u8df5\uff1a\u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a
  • \u4ee5 Go \u8bed\u8a00\u4e3a\u4f8b\u7684\u624b\u52a8\u57cb\u70b9\u63a5\u5165\uff1a\u4f7f\u7528 OpenTelemetry SDK \u589e\u5f3a Go \u5e94\u7528\u7a0b\u5e8f
  • \u5229\u7528 ebpf \u5b9e\u73b0 Go \u8bed\u8a00\u65e0\u4fb5\u5165\u63a2\u9488\uff08\u5b9e\u9a8c\u6027\u529f\u80fd\uff09
"},{"location":"admin/insight/quickstart/otel/send_tracing_to_insight.html","title":"\u5411 Insight \u53d1\u9001\u94fe\u8def\u6570\u636e","text":"

\u6b64\u6587\u6863\u4e3b\u8981\u63cf\u8ff0\u5ba2\u6237\u5e94\u7528\u5982\u4f55\u81ea\u884c\u5c06\u94fe\u8def\u6570\u636e\u4e0a\u62a5\u7ed9 Insight\u3002\u4e3b\u8981\u5305\u542b\u5982\u4e0b\u4e24\u79cd\u573a\u666f\uff1a

  1. \u5ba2\u6237\u5e94\u7528\u901a\u8fc7 OTEL Agent/SDK \u4e0a\u62a5\u94fe\u8def\u7ed9 Insight
  2. \u901a\u8fc7 Opentelemtry Collector(\u7b80\u79f0 OTEL COL) \u5c06\u94fe\u8def\u8f6c\u53d1\u7ed9 Insight

\u5728\u6bcf\u4e2a\u5df2\u5b89\u88c5 Insight Agent \u7684\u96c6\u7fa4\u4e2d\u90fd\u6709 insight-agent-otel-col \u7ec4\u4ef6\u7528\u4e8e\u7edf\u4e00\u63a5\u6536\u8be5\u96c6\u7fa4\u7684\u94fe\u8def\u6570\u636e\u3002 \u56e0\u6b64\uff0c\u8be5\u7ec4\u4ef6\u4f5c\u4e3a\u7528\u6237\u63a5\u5165\u4fa7\u7684\u5165\u53e3\uff0c\u9700\u8981\u5148\u83b7\u53d6\u8be5\u5730\u5740\u3002\u53ef\u4ee5\u901a\u8fc7 AI \u7b97\u529b\u4e2d\u5fc3 \u754c\u9762\u83b7\u53d6\u8be5\u96c6\u7fa4 Opentelemtry Collector \u7684\u5730\u5740\uff0c \u6bd4\u5982 insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317 \uff1a

\u9664\u6b64\u4e4b\u5916\uff0c\u9488\u5bf9\u4e0d\u540c\u4e0a\u62a5\u65b9\u5f0f\uff0c\u6709\u4e00\u4e9b\u7ec6\u5fae\u5dee\u522b\uff1a

"},{"location":"admin/insight/quickstart/otel/send_tracing_to_insight.html#otel-agentsdk-insight-agent-opentelemtry-collector","title":"\u5ba2\u6237\u5e94\u7528\u901a\u8fc7 OTel Agent/SDK \u4e0a\u62a5\u94fe\u8def\u7ed9 Insight Agent Opentelemtry Collector","text":"

\u4e3a\u4e86\u80fd\u591f\u5c06\u94fe\u8def\u6570\u636e\u6b63\u5e38\u4e0a\u62a5\u81f3 Insight \u5e76\u80fd\u591f\u5728 Insight \u6b63\u5e38\u5c55\u793a\uff0c\u9700\u8981\u5e76\u5efa\u8bae\u901a\u8fc7\u5982\u4e0b\u73af\u5883\u53d8\u91cf\u63d0\u4f9b OTLP \u6240\u9700\u7684\u5143\u6570\u636e (Resource Attribute)\uff0c\u6709\u4e24\u79cd\u65b9\u5f0f\u53ef\u5b9e\u73b0\uff1a

  • \u5728\u90e8\u7f72\u6587\u4ef6 YAML \u4e2d\u624b\u52a8\u6dfb\u52a0\uff0c\u4f8b\u5982\uff1a

    ...\n- name: OTEL_EXPORTER_OTLP_ENDPOINT\n  value: \"http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\"\n- name: \"OTEL_SERVICE_NAME\"\n  value: my-java-app-name\n- name: \"OTEL_K8S_NAMESPACE\"\n  valueFrom:\n    fieldRef:\n      apiVersion: v1\n      fieldPath: metadata.namespace\n- name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\n  valueFrom:\n    fieldRef:\n      apiVersion: v1\n      fieldPath: spec.nodeName\n- name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME\n  valueFrom:\n    fieldRef:\n      apiVersion: v1\n      fieldPath: metadata.name\n- name: OTEL_RESOURCE_ATTRIBUTES\n  value: \"k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)\"\n
  • \u5229\u7528 Insight Agent \u81ea\u52a8\u6ce8\u5165\u5982\u4e0a\u5143\u6570\u636e (Resource Attribute) \u80fd\u529b

    \u786e\u4fdd Insight Agent \u6b63\u5e38\u5de5\u4f5c\u5e76 \u5b89\u88c5 Instrumentation CR \u4e4b\u540e\uff0c \u53ea\u9700\u8981\u4e3a Pod \u6dfb\u52a0\u5982\u4e0b Annotation \u5373\u53ef\uff1a

    instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

    \u4e3e\u4f8b\uff1a

    apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-deployment-with-aotu-instrumentation\nspec:\n  selector:\n    matchLabels:\n      app.kubernetes.io/name: my-deployment-with-aotu-instrumentation-kuberntes\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io/name: my-deployment-with-aotu-instrumentation-kuberntes\n      annotations:\n        sidecar.opentelemetry.io/inject: \"false\"\n        instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
"},{"location":"admin/insight/quickstart/otel/send_tracing_to_insight.html#opentelemtry-collector-insight-agent-opentelemtry-collector","title":"\u901a\u8fc7 Opentelemtry Collector \u5c06\u94fe\u8def\u8f6c\u53d1\u7ed9 Insight Agent Opentelemtry Collector","text":"

\u5728\u4fdd\u8bc1\u5e94\u7528\u6dfb\u52a0\u4e86\u5982\u4e0a\u5143\u6570\u636e\u4e4b\u540e\uff0c\u53ea\u9700\u5728\u5ba2\u6237 Opentelemtry Collector \u91cc\u9762\u65b0\u589e\u4e00\u4e2a OTLP Exporter \u5c06\u94fe\u8def\u6570\u636e\u8f6c\u53d1\u7ed9 Insight Agent Opentelemtry Collector \u5373\u53ef\uff0c\u5982\u4e0b Opentelemtry Collector \u914d\u7f6e\u6587\u4ef6\u6240\u793a\uff1a

...\nexporters:\n  otlp/insight:\n    endpoint: insight-opentelemetry-collector.insight-system.svc.cluster.local:4317\nservice:\n...\npipelines:\n...\ntraces:\n  exporters:\n    - otlp/insight\n
"},{"location":"admin/insight/quickstart/otel/send_tracing_to_insight.html#_1","title":"\u53c2\u8003","text":"
  • \u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a
  • \u4f7f\u7528 OTel \u8d4b\u4e88\u5e94\u7528\u53ef\u89c2\u6d4b\u6027
"},{"location":"admin/insight/quickstart/otel/golang/golang.html","title":"\u4f7f\u7528 OTel SDK \u589e\u5f3a Go \u5e94\u7528\u7a0b\u5e8f","text":"

Golang \u65e0\u4fb5\u5165\u5f0f\u63a5\u5165\u94fe\u8def\u8bf7\u53c2\u8003 \u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a \u6587\u6863\uff0c\u901a\u8fc7\u6ce8\u89e3\u5b9e\u73b0\u81ea\u52a8\u63a5\u5165\u94fe\u8def\u3002

OpenTelemetry \u4e5f\u7b80\u79f0\u4e3a OTel\uff0c\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u53ef\u89c2\u6d4b\u6027\u6846\u67b6\uff0c\u53ef\u4ee5\u5e2e\u52a9\u5728 Go \u5e94\u7528\u7a0b\u5e8f\u4e2d\u751f\u6210\u548c\u6536\u96c6\u9065\u6d4b\u6570\u636e\uff1a\u94fe\u8def\u3001\u6307\u6807\u548c\u65e5\u5fd7\u3002

\u672c\u6587\u4e3b\u8981\u8bb2\u89e3\u5982\u4f55\u5728 Go \u5e94\u7528\u7a0b\u5e8f\u4e2d\u901a\u8fc7 OpenTelemetry Go SDK \u589e\u5f3a\u5e76\u63a5\u5165\u94fe\u8def\u76d1\u63a7\u3002

"},{"location":"admin/insight/quickstart/otel/golang/golang.html#otel-sdk-go_1","title":"\u4f7f\u7528 OTel SDK \u589e\u5f3a Go \u5e94\u7528","text":""},{"location":"admin/insight/quickstart/otel/golang/golang.html#_1","title":"\u5b89\u88c5\u76f8\u5173\u4f9d\u8d56","text":"

\u5fc5\u987b\u5148\u5b89\u88c5\u4e0e OpenTelemetry exporter \u548c SDK \u76f8\u5173\u7684\u4f9d\u8d56\u9879\u3002\u5982\u679c\u60a8\u6b63\u5728\u4f7f\u7528\u5176\u4ed6\u8bf7\u6c42\u8def\u7531\u5668\uff0c\u8bf7\u53c2\u8003\u8bf7\u6c42\u8def\u7531\u3002 \u5207\u6362/\u8fdb\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u6e90\u6587\u4ef6\u5939\u540e\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

go get go.opentelemetry.io/otel@v1.19.0 \\\n  go.opentelemetry.io/otel/trace@v1.19.0 \\\n  go.opentelemetry.io/otel/sdk@v1.19.0 \\\n  go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin@v0.46.1 \\\n  go.opentelemetry.io/otel/exporters/otlp/otlptrace@v1.19.0 \\\n  go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@v1.19.0\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#otel-sdk","title":"\u4f7f\u7528 OTel SDK \u521b\u5efa\u521d\u59cb\u5316\u51fd\u6570","text":"

\u4e3a\u4e86\u8ba9\u5e94\u7528\u7a0b\u5e8f\u80fd\u591f\u53d1\u9001\u6570\u636e\uff0c\u9700\u8981\u4e00\u4e2a\u51fd\u6570\u6765\u521d\u59cb\u5316 OpenTelemetry\u3002\u5728 main.go \u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u4ee3\u7801\u7247\u6bb5:

import (\n    \"context\"\n    \"os\"\n    \"time\"\n\n    \"go.opentelemetry.io/otel\"\n    \"go.opentelemetry.io/otel/exporters/otlp/otlptrace\"\n    \"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\"\n    \"go.opentelemetry.io/otel/propagation\"\n    \"go.opentelemetry.io/otel/sdk/resource\"\n    sdktrace \"go.opentelemetry.io/otel/sdk/trace\"\n    semconv \"go.opentelemetry.io/otel/semconv/v1.7.0\"\n    \"go.uber.org/zap\"\n    \"google.golang.org/grpc\"\n)\n\nvar tracerExp *otlptrace.Exporter\n\nfunc retryInitTracer() func() {\n    var shutdown func()\n    go func() {\n        for {\n            // otel will reconnected and re-send spans when otel col recover. so, we don't need to re-init tracer exporter.\n            if tracerExp == nil {\n                shutdown = initTracer()\n            } else {\n                break\n            }\n            time.Sleep(time.Minute * 5)\n        }\n    }()\n    return shutdown\n}\n\nfunc initTracer() func() {\n    // temporarily set timeout to 10s\n    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n    defer cancel()\n\n    serviceName, ok := os.LookupEnv(\"OTEL_SERVICE_NAME\")\n    if !ok {\n        serviceName = \"server_name\"\n        os.Setenv(\"OTEL_SERVICE_NAME\", serviceName)\n    }\n    otelAgentAddr, ok := os.LookupEnv(\"OTEL_EXPORTER_OTLP_ENDPOINT\")\n    if !ok {\n        otelAgentAddr = \"http://localhost:4317\"\n        os.Setenv(\"OTEL_EXPORTER_OTLP_ENDPOINT\", otelAgentAddr)\n    }\n    zap.S().Infof(\"OTLP Trace connect to: %s with service name: %s\", otelAgentAddr, serviceName)\n\n    traceExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithInsecure(), otlptracegrpc.WithDialOption(grpc.WithBlock()))\n    if err != nil {\n        handleErr(err, \"OTLP Trace gRPC Creation\")\n        return nil\n    }\n\n    tracerProvider := sdktrace.NewTracerProvider(\n        sdktrace.WithBatcher(traceExporter),\n        sdktrace.WithSampler(sdktrace.AlwaysSample()),\n    sdktrace.WithResource(resource.NewWithAttributes(semconv.SchemaURL)))\n\n    otel.SetTracerProvider(tracerProvider)\n    otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))\n\n    tracerExp = traceExporter\n    return func() {\n        // Shutdown will flush any remaining spans and shut down the exporter.\n        handleErr(tracerProvider.Shutdown(ctx), \"failed to shutdown TracerProvider\")\n    }\n}\n\nfunc handleErr(err error, message string) {\n    if err != nil {\n        zap.S().Errorf(\"%s: %v\", message, err)\n    }\n}\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#maingo","title":"\u5728 main.go \u4e2d\u521d\u59cb\u5316\u8ddf\u8e2a\u5668","text":"

\u4fee\u6539 main \u51fd\u6570\u4ee5\u5728 main.go \u4e2d\u521d\u59cb\u5316\u8ddf\u8e2a\u5668\u3002\u53e6\u5916\u5f53\u60a8\u7684\u670d\u52a1\u5173\u95ed\u65f6\uff0c\u5e94\u8be5\u8c03\u7528 TracerProvider.Shutdown() \u786e\u4fdd\u5bfc\u51fa\u6240\u6709 Span\u3002\u8be5\u670d\u52a1\u5c06\u8be5\u8c03\u7528\u4f5c\u4e3a\u4e3b\u51fd\u6570\u4e2d\u7684\u5ef6\u8fdf\u51fd\u6570\uff1a

func main() {\n    // start otel tracing\n    if shutdown := retryInitTracer(); shutdown != nil {\n            defer shutdown()\n        }\n    ......\n}\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#otel-gin","title":"\u4e3a\u5e94\u7528\u6dfb\u52a0 OTel Gin \u4e2d\u95f4\u4ef6","text":"

\u901a\u8fc7\u5728 main.go \u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u884c\u6765\u914d\u7f6e Gin \u4ee5\u4f7f\u7528\u4e2d\u95f4\u4ef6:

import (\n    ....\n  \"go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin\"\n)\n\nfunc main() {\n    ......\n    r := gin.Default()\n    r.Use(otelgin.Middleware(\"my-app\"))\n    ......\n}\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#_2","title":"\u8fd0\u884c\u5e94\u7528\u7a0b\u5e8f","text":"
  • \u672c\u5730\u8c03\u8bd5\u8fd0\u884c

    \u6ce8\u610f: \u6b64\u6b65\u9aa4\u4ec5\u7528\u4e8e\u672c\u5730\u5f00\u53d1\u8c03\u8bd5\uff0c\u751f\u4ea7\u73af\u5883\u4e2d Operator \u4f1a\u81ea\u52a8\u5b8c\u6210\u4ee5\u4e0b\u73af\u5883\u53d8\u91cf\u7684\u6ce8\u5165\u3002

    \u4ee5\u4e0a\u6b65\u9aa4\u5df2\u7ecf\u5b8c\u6210\u4e86\u521d\u59cb\u5316 SDK \u7684\u5de5\u4f5c\uff0c\u73b0\u5728\u5982\u679c\u9700\u8981\u5728\u672c\u5730\u5f00\u53d1\u8fdb\u884c\u8c03\u8bd5\uff0c\u9700\u8981\u63d0\u524d\u83b7\u53d6\u5230 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b insight-agent-opentelemerty-collector \u7684\u5730\u5740\uff0c\u5047\u8bbe\u4e3a\uff1a insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317 \u3002

    \u56e0\u6b64\uff0c\u53ef\u4ee5\u5728\u4f60\u672c\u5730\u542f\u52a8\u5e94\u7528\u7a0b\u5e8f\u7684\u65f6\u5019\u6dfb\u52a0\u5982\u4e0b\u73af\u5883\u53d8\u91cf\uff1a

    OTEL_SERVICE_NAME=my-golang-app OTEL_EXPORTER_OTLP_ENDPOINT=http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317 go run main.go...\n
  • \u751f\u4ea7\u73af\u5883\u8fd0\u884c

    \u8bf7\u53c2\u8003\u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a \u4e2d \u53ea\u6ce8\u5165\u73af\u5883\u53d8\u91cf\u6ce8\u89e3 \u76f8\u5173\u4ecb\u7ecd\uff0c\u4e3a deployment yaml \u6dfb\u52a0\u6ce8\u89e3\uff1a

    instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

    \u5982\u679c\u65e0\u6cd5\u4f7f\u7528\u6ce8\u89e3\u7684\u65b9\u5f0f\uff0c\u60a8\u53ef\u4ee5\u624b\u52a8\u5728 deployment yaml \u6dfb\u52a0\u5982\u4e0b\u73af\u5883\u53d8\u91cf\uff1a

\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\nenv:\n  - name: OTEL_EXPORTER_OTLP_ENDPOINT\n    value: 'http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317'\n  - name: OTEL_SERVICE_NAME\n    value: \"your depolyment name\" # (1)!\n  - name: OTEL_K8S_NAMESPACE\n    valueFrom:\n      fieldRef:\n        apiVersion: v1\n        fieldPath: metadata.namespace\n  - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\n    valueFrom:\n      fieldRef:\n        apiVersion: v1\n        fieldPath: spec.nodeName\n  - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME\n    valueFrom:\n      fieldRef:\n        apiVersion: v1\n        fieldPath: metadata.name\n  - name: OTEL_RESOURCE_ATTRIBUTES\n    value: 'k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)'\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n
  1. \u4fee\u6539\u6b64\u503c
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#_3","title":"\u8bf7\u6c42\u8def\u7531","text":""},{"location":"admin/insight/quickstart/otel/golang/golang.html#opentelemetry-gingonic","title":"OpenTelemetry gin/gonic \u589e\u5f3a","text":"
# Add one line to your import() stanza depending upon your request router:\nmiddleware \"go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin\"\n

\u7136\u540e\u6ce8\u5165 OpenTelemetry \u4e2d\u95f4\u4ef6\uff1a

router.Use(middleware.Middleware(\"my-app\"))\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#opentelemetry-gorillamux","title":"OpenTelemetry gorillamux \u589e\u5f3a","text":"
# Add one line to your import() stanza depending upon your request router:\nmiddleware \"go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux\"\n

\u7136\u540e\u6ce8\u5165 OpenTelemetry \u4e2d\u95f4\u4ef6\uff1a

router.Use(middleware.Middleware(\"my-app\"))\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#grpc","title":"gRPC \u589e\u5f3a","text":"

\u540c\u6837\uff0cOpenTelemetry \u4e5f\u53ef\u4ee5\u5e2e\u52a9\u60a8\u81ea\u52a8\u68c0\u6d4b gRPC \u8bf7\u6c42\u3002\u8981\u68c0\u6d4b\u60a8\u62e5\u6709\u7684\u4efb\u4f55 gRPC \u670d\u52a1\u5668\uff0c\u8bf7\u5c06\u62e6\u622a\u5668\u6dfb\u52a0\u5230\u670d\u52a1\u5668\u7684\u5b9e\u4f8b\u5316\u4e2d\u3002

import (\n  grpcotel \"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc\"\n)\nfunc main() {\n  [...]\n\n    s := grpc.NewServer(\n        grpc.UnaryInterceptor(grpcotel.UnaryServerInterceptor()),\n        grpc.StreamInterceptor(grpcotel.StreamServerInterceptor()),\n    )\n}\n

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u679c\u4f60\u7684\u7a0b\u5e8f\u91cc\u9762\u4f7f\u7528\u5230\u4e86 Grpc Client \u8c03\u7528\u7b2c\u4e09\u65b9\u670d\u52a1\uff0c\u4f60\u8fd8\u9700\u8981\u5bf9 Grpc Client \u6dfb\u52a0\u62e6\u622a\u5668\uff1a

    [...]\n\n    conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()),\n        grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor()),\n        grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor()),\n    )\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#_4","title":"\u5982\u679c\u4e0d\u4f7f\u7528\u8bf7\u6c42\u8def\u7531","text":"
import (\n  \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n)\n

\u5728\u5c06 http.Handler \u4f20\u9012\u7ed9 ServeMux \u7684\u6bcf\u4e2a\u5730\u65b9\uff0c\u60a8\u90fd\u5c06\u5305\u88c5\u5904\u7406\u7a0b\u5e8f\u51fd\u6570\u3002\u4f8b\u5982\uff0c\u5c06\u8fdb\u884c\u4ee5\u4e0b\u66ff\u6362\uff1a

- mux.Handle(\"/path\", h)\n+ mux.Handle(\"/path\", otelhttp.NewHandler(h, \"description of path\"))\n---\n- mux.Handle(\"/path\", http.HandlerFunc(f))\n+ mux.Handle(\"/path\", otelhttp.NewHandler(http.HandlerFunc(f), \"description of path\"))\n

\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u60a8\u53ef\u4ee5\u786e\u4fdd\u4f7f\u7528 othttp \u5305\u88c5\u7684\u6bcf\u4e2a\u51fd\u6570\u90fd\u4f1a\u81ea\u52a8\u6536\u96c6\u5176\u5143\u6570\u636e\u5e76\u542f\u52a8\u76f8\u5e94\u7684\u8ddf\u8e2a\u3002

"},{"location":"admin/insight/quickstart/otel/golang/golang.html#_5","title":"\u6570\u636e\u5e93\u8bbf\u95ee\u589e\u5f3a","text":""},{"location":"admin/insight/quickstart/otel/golang/golang.html#golang-gorm","title":"Golang Gorm","text":"

OpenTelemetry \u793e\u533a\u4e5f\u5f00\u53d1\u4e86\u6570\u636e\u5e93\u8bbf\u95ee\u5e93\u7684\u4e2d\u95f4\u4ef6\uff0c\u6bd4\u5982 Gorm:

import (\n    \"github.com/uptrace/opentelemetry-go-extra/otelgorm\"\n    \"gorm.io/driver/sqlite\"\n    \"gorm.io/gorm\"\n)\n\ndb, err := gorm.Open(sqlite.Open(\"file::memory:?cache=shared\"), &gorm.Config{})\nif err != nil {\n    panic(err)\n}\n\notelPlugin := otelgorm.NewPlugin(otelgorm.WithDBName(\"mydb\"), # \u7f3a\u5931\u4f1a\u5bfc\u81f4\u6570\u636e\u5e93\u76f8\u5173\u62d3\u6251\u5c55\u793a\u4e0d\u5b8c\u6574\n    otelgorm.WithAttributes(semconv.ServerAddress(\"memory\"))) # \u7f3a\u5931\u4f1a\u5bfc\u81f4\u6570\u636e\u5e93\u76f8\u5173\u62d3\u6251\u5c55\u793a\u4e0d\u5b8c\u6574\nif err := db.Use(otelPlugin); err != nil {\n    panic(err)\n}\n

"},{"location":"admin/insight/quickstart/otel/golang/golang.html#span","title":"\u81ea\u5b9a\u4e49 Span","text":"

\u5f88\u591a\u65f6\u5019\uff0cOpenTelemetry \u63d0\u4f9b\u7684\u4e2d\u95f4\u4ef6\u4e0d\u80fd\u5e2e\u52a9\u6211\u4eec\u8bb0\u5f55\u66f4\u591a\u5185\u90e8\u8c03\u7528\u7684\u51fd\u6570\uff0c\u9700\u8981\u6211\u4eec\u81ea\u5b9a\u4e49 Span \u6765\u8bb0\u5f55

 \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n    _, span := otel.Tracer(\"GetServiceDetail\").Start(ctx,\n        \"spanMetricDao.GetServiceDetail\",\n        trace.WithSpanKind(trace.SpanKindInternal))\n    defer span.End()\n  \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#span_1","title":"\u5411 span \u6dfb\u52a0\u81ea\u5b9a\u4e49\u5c5e\u6027\u548c\u4e8b\u4ef6","text":"

\u4e5f\u53ef\u4ee5\u5c06\u81ea\u5b9a\u4e49\u5c5e\u6027\u6216\u6807\u7b7e\u8bbe\u7f6e\u4e3a Span\u3002\u8981\u6dfb\u52a0\u81ea\u5b9a\u4e49\u5c5e\u6027\u548c\u4e8b\u4ef6\uff0c\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

"},{"location":"admin/insight/quickstart/otel/golang/golang.html#_6","title":"\u5bfc\u5165\u8ddf\u8e2a\u548c\u5c5e\u6027\u5e93","text":"
import (\n    ...\n    \"go.opentelemetry.io/otel/attribute\"\n    \"go.opentelemetry.io/otel/trace\"\n)\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#span_2","title":"\u4ece\u4e0a\u4e0b\u6587\u4e2d\u83b7\u53d6\u5f53\u524d Span","text":"
span := trace.SpanFromContext(c.Request.Context())\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#span_3","title":"\u5728\u5f53\u524d Span \u4e2d\u8bbe\u7f6e\u5c5e\u6027","text":"
span.SetAttributes(attribute.String(\"controller\", \"books\"))\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#span-event","title":"\u4e3a\u5f53\u524d Span \u6dfb\u52a0 Event","text":"

\u6dfb\u52a0 span \u4e8b\u4ef6\u662f\u4f7f\u7528 span \u5bf9\u8c61\u4e0a\u7684 AddEvent \u5b8c\u6210\u7684\u3002

span.AddEvent(msg)\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#_7","title":"\u8bb0\u5f55\u9519\u8bef\u548c\u5f02\u5e38","text":"
import \"go.opentelemetry.io/otel/codes\"\n\n// \u83b7\u53d6\u5f53\u524d span\nspan := trace.SpanFromContext(ctx)\n\n// RecordError \u4f1a\u81ea\u52a8\u5c06\u4e00\u4e2a\u9519\u8bef\u8f6c\u6362\u6210 span even\nspan.RecordError(err)\n\n// \u6807\u8bb0\u8fd9\u4e2a span \u9519\u8bef\nspan.SetStatus(codes.Error, \"internal error\")\n
"},{"location":"admin/insight/quickstart/otel/golang/golang.html#_8","title":"\u53c2\u8003","text":"

\u6709\u5173 Demo \u6f14\u793a\u8bf7\u53c2\u8003\uff1a - opentelemetry-demo/productcatalogservice - opentelemetry-collector-contrib/demo

"},{"location":"admin/insight/quickstart/otel/golang/meter.html","title":"\u4f7f\u7528 OTel SDK \u4e3a\u5e94\u7528\u7a0b\u5e8f\u66b4\u9732\u6307\u6807","text":"

\u672c\u6587\u4ec5\u4f9b\u5e0c\u671b\u8bc4\u4f30\u6216\u63a2\u7d22\u6b63\u5728\u5f00\u53d1\u7684 OTLP \u6307\u6807\u7684\u7528\u6237\u53c2\u8003\u3002

OpenTelemetry \u9879\u76ee\u8981\u6c42\u4ee5\u5fc5\u987b\u5728 OpenTelemetry \u534f\u8bae (OTLP) \u4e2d\u53d1\u51fa\u6570\u636e\u7684\u8bed\u8a00\u63d0\u4f9b API \u548c SDK\u3002

"},{"location":"admin/insight/quickstart/otel/golang/meter.html#golang","title":"\u9488\u5bf9 Golang \u5e94\u7528\u7a0b\u5e8f","text":"

Golang \u53ef\u4ee5\u901a\u8fc7 sdk \u66b4\u9732 runtime \u6307\u6807\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5728\u5e94\u7528\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u65b9\u6cd5\u5f00\u542f metrics \u66b4\u9732\u5668\uff1a

"},{"location":"admin/insight/quickstart/otel/golang/meter.html#_1","title":"\u5b89\u88c5\u76f8\u5173\u4f9d\u8d56","text":"

\u5207\u6362/\u8fdb\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u6e90\u6587\u4ef6\u5939\u540e\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

go get go.opentelemetry.io/otel \\\n  go.opentelemetry.io/otel/attribute \\\n  go.opentelemetry.io/otel/exporters/prometheus \\\n  go.opentelemetry.io/otel/metric/global \\\n  go.opentelemetry.io/otel/metric/instrument \\\n  go.opentelemetry.io/otel/sdk/metric\n
"},{"location":"admin/insight/quickstart/otel/golang/meter.html#otel-sdk_1","title":"\u4f7f\u7528 OTel SDK \u521b\u5efa\u521d\u59cb\u5316\u51fd\u6570","text":"
import (\n    .....\n\n    \"go.opentelemetry.io/otel/attribute\"\n    otelPrometheus \"go.opentelemetry.io/otel/exporters/prometheus\"\n    \"go.opentelemetry.io/otel/metric/global\"\n    \"go.opentelemetry.io/otel/metric/instrument\"\n    \"go.opentelemetry.io/otel/sdk/metric/aggregator/histogram\"\n    controller \"go.opentelemetry.io/otel/sdk/metric/controller/basic\"\n    \"go.opentelemetry.io/otel/sdk/metric/export/aggregation\"\n    processor \"go.opentelemetry.io/otel/sdk/metric/processor/basic\"\n    selector \"go.opentelemetry.io/otel/sdk/metric/selector/simple\"\n)\nfunc (s *insightServer) initMeter() *otelPrometheus.Exporter {\n    s.meter = global.Meter(\"xxx\")\n\n    config := otelPrometheus.Config{\n        DefaultHistogramBoundaries: []float64{1, 2, 5, 10, 20, 50},\n        Gatherer:                   prometheus.DefaultGatherer,\n        Registry:                   prometheus.NewRegistry(),\n        Registerer:                 prometheus.DefaultRegisterer,\n    }\n\n    c := controller.New(\n        processor.NewFactory(\n            selector.NewWithHistogramDistribution(\n                histogram.WithExplicitBoundaries(config.DefaultHistogramBoundaries),\n            ),\n            aggregation.CumulativeTemporalitySelector(),\n            processor.WithMemory(true),\n        ),\n    )\n\n    exporter, err := otelPrometheus.New(config, c)\n    if err != nil {\n        zap.S().Panicf(\"failed to initialize prometheus exporter %v\", err)\n    }\n\n    global.SetMeterProvider(exporter.MeterProvider())\n\n    http.HandleFunc(\"/metrics\", exporter.ServeHTTP)\n\n    go func() {\n        _ = http.ListenAndServe(fmt.Sprintf(\":%d\", 8888), nil)\n    }()\n\n    zap.S().Info(\"Prometheus server running on \", fmt.Sprintf(\":%d\", port))\n    return exporter\n}\n

\u4ee5\u4e0a\u65b9\u6cd5\u4f1a\u4e3a\u60a8\u7684\u5e94\u7528\u66b4\u9732\u4e00\u4e2a\u6307\u6807\u63a5\u53e3: http://localhost:8888/metrics

\u968f\u540e\uff0c\u5728 main.go \u4e2d\u5bf9\u5176\u8fdb\u884c\u521d\u59cb\u5316\uff1a

func main() {\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n    tp := initMeter()\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n}\n

\u6b64\u5916\uff0c\u5982\u679c\u60f3\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6307\u6807\uff0c\u53ef\u4ee5\u53c2\u8003\uff1a

// exposeClusterMetric expose metric like \"insight_logging_count{} 1\"\nfunc (s *insightServer) exposeLoggingMetric(lserver *log.LogService) {\n    s.meter = global.Meter(\"insight.io/basic\")\n\n    var lock sync.Mutex\n    logCounter, err := s.meter.AsyncFloat64().Counter(\"insight_log_total\")\n    if err != nil {\n        zap.S().Panicf(\"failed to initialize instrument: %v\", err)\n    }\n\n    _ = s.meter.RegisterCallback([]instrument.Asynchronous{logCounter}, func(ctx context.Context) {\n        lock.Lock()\n        defer lock.Unlock()\n        count, err := lserver.Count(ctx)\n        if err == nil || count != -1 {\n            logCounter.Observe(ctx, float64(count))\n        }\n    })\n}\n

\u968f\u540e\uff0c\u5728 main.go \u8c03\u7528\u8be5\u65b9\u6cd5\uff1a

\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\ns.exposeLoggingMetric(lservice)\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n

\u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee http://localhost:8888/metrics \u6765\u68c0\u67e5\u60a8\u7684\u6307\u6807\u662f\u5426\u6b63\u5e38\u5de5\u4f5c\u3002

"},{"location":"admin/insight/quickstart/otel/golang/meter.html#java","title":"\u9488\u5bf9 Java \u5e94\u7528\u7a0b\u5e8f","text":"

Java \u5728\u4f7f\u7528 otel agent \u5728\u5b8c\u6210\u94fe\u8def\u7684\u81ea\u52a8\u63a5\u5165\u7684\u57fa\u7840\u4e0a\uff0c\u901a\u8fc7\u6dfb\u52a0\u73af\u5883\u53d8\u91cf\uff1a

OTEL_METRICS_EXPORTER=prometheus\n

\u5c31\u53ef\u4ee5\u76f4\u63a5\u66b4\u9732 JVM \u76f8\u5173\u6307\u6807\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee http://localhost:8888/metrics \u6765\u68c0\u67e5\u60a8\u7684\u6307\u6807\u662f\u5426\u6b63\u5e38\u5de5\u4f5c\u3002

\u968f\u540e\uff0c\u518d\u914d\u5408 prometheus serviceMonitor \u5373\u53ef\u5b8c\u6210\u6307\u6807\u7684\u63a5\u5165\u3002 \u5982\u679c\u60f3\u66b4\u9732\u81ea\u5b9a\u4e49\u6307\u6807\u8bf7\u53c2\u9605 opentelemetry-java-docs/prometheus\u3002

\u4e3b\u8981\u5206\u4ee5\u4e0b\u4e24\u6b65\uff1a

  • \u521b\u5efa meter provider\uff0c\u5e76\u6307\u5b9a prometheus \u4f5c\u4e3a exporter\u3002

    /*\n* Copyright The OpenTelemetry Authors\n* SPDX-License-Identifier: Apache-2.0\n*/\n\npackage io.opentelemetry.example.prometheus;\n\nimport io.opentelemetry.api.metrics.MeterProvider;\nimport io.opentelemetry.exporter.prometheus.PrometheusHttpServer;\nimport io.opentelemetry.sdk.metrics.SdkMeterProvider;\nimport io.opentelemetry.sdk.metrics.export.MetricReader;\n\npublic final class ExampleConfiguration {\n\n  /**\n  * Initializes the Meter SDK and configures the prometheus collector with all default settings.\n  *\n  * @param prometheusPort the port to open up for scraping.\n  * @return A MeterProvider for use in instrumentation.\n  */\n  static MeterProvider initializeOpenTelemetry(int prometheusPort) {\n    MetricReader prometheusReader = PrometheusHttpServer.builder().setPort(prometheusPort).build();\n\n    return SdkMeterProvider.builder().registerMetricReader(prometheusReader).build();\n  }\n}\n
  • \u81ea\u5b9a\u4e49 meter \u5e76\u5f00\u542f http server

    package io.opentelemetry.example.prometheus;\n\nimport io.opentelemetry.api.common.Attributes;\nimport io.opentelemetry.api.metrics.Meter;\nimport io.opentelemetry.api.metrics.MeterProvider;\nimport java.util.concurrent.ThreadLocalRandom;\n\n/**\n* Example of using the PrometheusHttpServer to convert OTel metrics to Prometheus format and expose\n* these to a Prometheus instance via a HttpServer exporter.\n*\n* <p>A Gauge is used to periodically measure how many incoming messages are awaiting processing.\n* The Gauge callback gets executed every collection interval.\n*/\npublic final class PrometheusExample {\n  private long incomingMessageCount;\n\n  public PrometheusExample(MeterProvider meterProvider) {\n    Meter meter = meterProvider.get(\"PrometheusExample\");\n    meter\n        .gaugeBuilder(\"incoming.messages\")\n        .setDescription(\"No of incoming messages awaiting processing\")\n        .setUnit(\"message\")\n        .buildWithCallback(result -> result.record(incomingMessageCount, Attributes.empty()));\n  }\n\n  void simulate() {\n    for (int i = 500; i > 0; i--) {\n      try {\n        System.out.println(\n            i + \" Iterations to go, current incomingMessageCount is:  \" + incomingMessageCount);\n        incomingMessageCount = ThreadLocalRandom.current().nextLong(100);\n        Thread.sleep(1000);\n      } catch (InterruptedException e) {\n        // ignored here\n      }\n    }\n  }\n\n  public static void main(String[] args) {\n    int prometheusPort = 8888;\n\n    // it is important to initialize the OpenTelemetry SDK as early as possible in your process.\n    MeterProvider meterProvider = ExampleConfiguration.initializeOpenTelemetry(prometheusPort);\n\n    PrometheusExample prometheusExample = new PrometheusExample(meterProvider);\n\n    prometheusExample.simulate();\n\n    System.out.println(\"Exiting\");\n  }\n}\n

\u968f\u540e\uff0c\u5f85 java \u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u4e4b\u540e\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee http://localhost:8888/metrics \u6765\u68c0\u67e5\u60a8\u7684\u6307\u6807\u662f\u5426\u6b63\u5e38\u5de5\u4f5c\u3002

"},{"location":"admin/insight/quickstart/otel/golang/meter.html#insight","title":"Insight \u91c7\u96c6\u6307\u6807","text":"

\u6700\u540e\u91cd\u8981\u7684\u662f\uff0c\u60a8\u5df2\u7ecf\u5728\u5e94\u7528\u7a0b\u5e8f\u4e2d\u66b4\u9732\u51fa\u4e86\u6307\u6807\uff0c\u73b0\u5728\u9700\u8981 Insight \u6765\u91c7\u96c6\u6307\u6807\u3002

\u63a8\u8350\u7684\u6307\u6807\u66b4\u9732\u65b9\u5f0f\u662f\u901a\u8fc7 servicemonitor \u6216\u8005 podmonitor\u3002

"},{"location":"admin/insight/quickstart/otel/golang/meter.html#servicemonitorpodmonitor","title":"\u521b\u5efa servicemonitor/podmonitor","text":"

\u6dfb\u52a0\u7684 servicemonitor/podmonitor \u9700\u8981\u6253\u4e0a label\uff1a\"operator.insight.io/managed-by\": \"insight\" \u624d\u4f1a\u88ab Operator \u8bc6\u522b\uff1a

apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: example-app\n  labels:\n    operator.insight.io/managed-by: insight\nspec:\n  selector:\n    matchLabels:\n      app: example-app\n  endpoints:\n  - port: web\n  namespaceSelector:\n    any: true\n
"},{"location":"admin/insight/quickstart/otel/java/index.html","title":"\u5f00\u59cb\u76d1\u63a7 Java \u5e94\u7528","text":"
  1. Java \u5e94\u7528\u94fe\u8def\u63a5\u5165\u4e0e\u76d1\u63a7\u8bf7\u53c2\u8003 \u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a \u6587\u6863\uff0c\u901a\u8fc7\u6ce8\u89e3\u5b9e\u73b0\u81ea\u52a8\u63a5\u5165\u94fe\u8def\u3002

  2. Java \u5e94\u7528\u7684 JVM \u8fdb\u884c\u76d1\u63a7\uff1a\u5df2\u7ecf\u66b4\u9732 JVM \u6307\u6807\u548c\u4ecd\u672a\u66b4\u9732 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5982\u4f55\u4e0e\u53ef\u89c2\u6d4b\u6027 Insight \u5bf9\u63a5\u3002

  3. \u5982\u679c\u60a8\u7684 Java \u5e94\u7528\u672a\u5f00\u59cb\u66b4\u9732 JVM \u6307\u6807\uff0c\u60a8\u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u6587\u6863\uff1a

    • \u4f7f\u7528 JMX Exporter \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807
    • \u4f7f\u7528 OpenTelemetry Java Agent \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807
  4. \u5982\u679c\u60a8\u7684 Java \u5e94\u7528\u5df2\u7ecf\u66b4\u9732 JVM \u6307\u6807\uff0c\u60a8\u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u6587\u6863\uff1a

    • \u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027
  5. \u5c06 TraceId \u548c SpanId \u5199\u5165 Java \u5e94\u7528\u65e5\u5fd7, \u5b9e\u73b0\u94fe\u8def\u6570\u636e\u4e0e\u65e5\u5fd7\u6570\u636e\u5173\u8054

"},{"location":"admin/insight/quickstart/otel/java/mdc.html","title":"\u5c06 TraceId \u548c SpanId \u5199\u5165 Java \u5e94\u7528\u65e5\u5fd7","text":"

\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 OpenTelemetry \u5c06 TraceId \u548c SpanId \u81ea\u52a8\u5199\u5165 Java \u5e94\u7528\u65e5\u5fd7\u3002 TraceId \u4e0e SpanId \u5199\u5165\u65e5\u5fd7\u540e\uff0c\u60a8\u53ef\u4ee5\u5c06\u5206\u5e03\u5f0f\u94fe\u8def\u6570\u636e\u4e0e\u65e5\u5fd7\u6570\u636e\u5173\u8054\u8d77\u6765\uff0c\u5b9e\u73b0\u66f4\u9ad8\u6548\u7684\u6545\u969c\u8bca\u65ad\u548c\u6027\u80fd\u5206\u6790\u3002

"},{"location":"admin/insight/quickstart/otel/java/mdc.html#_1","title":"\u652f\u6301\u7684\u65e5\u5fd7\u5e93","text":"

\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 Logger MDC auto-instrumentation\u3002

\u65e5\u5fd7\u6846\u67b6 \u652f\u6301\u81ea\u52a8\u57cb\u70b9\u7684\u7248\u672c \u624b\u52a8\u57cb\u70b9\u9700\u8981\u5f15\u5165\u7684\u4f9d\u8d56 Log4j 1 1.2+ \u65e0 Log4j 2 2.7+ opentelemetry-log4j-context-data-2.17-autoconfigure Logback 1.0+ opentelemetry-logback-mdc-1.0"},{"location":"admin/insight/quickstart/otel/java/mdc.html#logbackspringboot","title":"\u4f7f\u7528 Logback\uff08SpringBoot \u9879\u76ee\uff09","text":"

Spring Boot \u9879\u76ee\u5185\u7f6e\u4e86\u65e5\u5fd7\u6846\u67b6\uff0c\u5e76\u4e14\u9ed8\u8ba4\u4f7f\u7528 Logback \u4f5c\u4e3a\u5176\u65e5\u5fd7\u5b9e\u73b0\u3002\u5982\u679c\u60a8\u7684 Java \u9879\u76ee\u4e3a SpringBoot \u9879\u76ee\uff0c\u53ea\u9700\u5c11\u91cf\u914d\u7f6e\u5373\u53ef\u5c06 TraceId \u5199\u5165\u65e5\u5fd7\u3002

\u5728 application.properties \u4e2d\u8bbe\u7f6e logging.pattern.level\uff0c\u6dfb\u52a0 %mdc{trace_id} \u4e0e %mdc{span_id} \u5230\u65e5\u5fd7\u4e2d\u3002

logging.pattern.level=trace_id=%mdc{trace_id} span_id=%mdc{span_id} %5p ....\u7701\u7565...\n

\u4ee5\u4e0b\u4e3a\u65e5\u5fd7\u793a\u4f8b\uff1a

2024-06-26 10:56:31.200 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'\n2024-06-26 10:56:31.201 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'\n2024-06-26 10:56:31.209 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms\n2024-06-26 10:56:31.296 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=5743699405074f4e  INFO 53724 --- [nio-8081-exec-1] com.example.httpserver.ot.OTServer       : hello world\n
"},{"location":"admin/insight/quickstart/otel/java/mdc.html#log4j2","title":"\u4f7f\u7528 Log4j2","text":"
  1. \u5728 pom.xml \u4e2d\u6dfb\u52a0 OpenTelemetry Log4j2 \u4f9d\u8d56:

    Tip

    \u8bf7\u5c06 OPENTELEMETRY_VERSION \u66ff\u6362\u4e3a\u6700\u65b0\u7248\u672c

    <dependencies>\n  <dependency>\n    <groupId>io.opentelemetry.instrumentation</groupId>\n    <artifactId>opentelemetry-log4j-context-data-2.17-autoconfigure</artifactId>\n    <version>OPENTELEMETRY_VERSION</version>\n    <scope>runtime</scope>\n  </dependency>\n</dependencies>\n
  2. \u4fee\u6539 log4j2.xml \u914d\u7f6e\uff0c\u5728 pattern \u4e2d\u6dfb\u52a0 %X{trace_id} \u4e0e %X{span_id}\uff0c\u53ef\u4ee5\u5c06 TraceId \u4e0e SpanId \u81ea\u52a8\u5199\u5165\u65e5\u5fd7:

    <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n  <Appenders>\n    <Console name=\"Console\" target=\"SYSTEM_OUT\">\n      <PatternLayout\n          pattern=\"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} - %msg%n\"/>\n    </Console>\n  </Appenders>\n  <Loggers>\n    <Root>\n      <AppenderRef ref=\"Console\" level=\"All\"/>\n    </Root>\n  </Loggers>\n</Configuration>\n
  3. \u4f7f\u7528 Logback \u5728 pom.xml \u4e2d\u6dfb\u52a0 OpenTelemetry Logback \u4f9d\u8d56\u3002

    Tip

    \u8bf7\u5c06 OPENTELEMETRY_VERSION \u66ff\u6362\u4e3a\u6700\u65b0\u7248\u672c

    <dependencies>\n  <dependency>\n    <groupId>io.opentelemetry.instrumentation</groupId>\n    <artifactId>opentelemetry-logback-mdc-1.0</artifactId>\n    <version>OPENTELEMETRY_VERSION</version>\n  </dependency>\n</dependencies>\n
  4. \u4fee\u6539 log4j2.xml \u914d\u7f6e\uff0c\u5728 pattern \u4e2d\u6dfb\u52a0 %X{trace_id} \u4e0e %X{span_id}\uff0c\u53ef\u4ee5\u5c06 TraceId \u4e0e SpanId \u81ea\u52a8\u5199\u5165\u65e5\u5fd7:

    <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n  <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">\n    <encoder>\n      <pattern>%d{HH:mm:ss.SSS} trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} %msg%n</pattern>\n    </encoder>\n  </appender>\n\n  <!-- Just wrap your logging appender, for example ConsoleAppender, with OpenTelemetryAppender -->\n  <appender name=\"OTEL\" class=\"io.opentelemetry.instrumentation.logback.mdc.v1_0.OpenTelemetryAppender\">\n    <appender-ref ref=\"CONSOLE\"/>\n  </appender>\n\n  <!-- Use the wrapped \"OTEL\" appender instead of the original \"CONSOLE\" one -->\n  <root level=\"INFO\">\n    <appender-ref ref=\"OTEL\"/>\n  </root>\n\n</configuration>\n
"},{"location":"admin/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html","title":"\u4f7f\u7528 JMX Exporter \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807","text":"

JMX-Exporter \u63d0\u4f9b\u4e86\u4e24\u79cd\u7528\u6cd5:

  1. \u542f\u52a8\u72ec\u7acb\u8fdb\u7a0b\u3002JVM \u542f\u52a8\u65f6\u6307\u5b9a\u53c2\u6570\uff0c\u66b4\u9732 JMX \u7684 RMI \u63a5\u53e3\uff0cJMX Exporter \u8c03\u7528 RMI \u83b7\u53d6 JVM \u8fd0\u884c\u65f6\u72b6\u6001\u6570\u636e\uff0c \u8f6c\u6362\u4e3a Prometheus metrics \u683c\u5f0f\uff0c\u5e76\u66b4\u9732\u7aef\u53e3\u8ba9 Prometheus \u91c7\u96c6\u3002
  2. JVM \u8fdb\u7a0b\u5185\u542f\u52a8(in-process)\u3002JVM \u542f\u52a8\u65f6\u6307\u5b9a\u53c2\u6570\uff0c\u901a\u8fc7 javaagent \u7684\u5f62\u5f0f\u8fd0\u884c JMX-Exporter \u7684 jar \u5305\uff0c \u8fdb\u7a0b\u5185\u8bfb\u53d6 JVM \u8fd0\u884c\u65f6\u72b6\u6001\u6570\u636e\uff0c\u8f6c\u6362\u4e3a Prometheus metrics \u683c\u5f0f\uff0c\u5e76\u66b4\u9732\u7aef\u53e3\u8ba9 Prometheus \u91c7\u96c6\u3002

Note

\u5b98\u65b9\u4e0d\u63a8\u8350\u4f7f\u7528\u7b2c\u4e00\u79cd\u65b9\u5f0f\uff0c\u4e00\u65b9\u9762\u914d\u7f6e\u590d\u6742\uff0c\u53e6\u4e00\u65b9\u9762\u56e0\u4e3a\u5b83\u9700\u8981\u4e00\u4e2a\u5355\u72ec\u7684\u8fdb\u7a0b\uff0c\u800c\u8fd9\u4e2a\u8fdb\u7a0b\u672c\u8eab\u7684\u76d1\u63a7\u53c8\u6210\u4e86\u65b0\u7684\u95ee\u9898\uff0c \u6240\u4ee5\u672c\u6587\u91cd\u70b9\u56f4\u7ed5\u7b2c\u4e8c\u79cd\u7528\u6cd5\u8bb2\u5982\u4f55\u5728 Kubernetes \u73af\u5883\u4e0b\u4f7f\u7528 JMX Exporter \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807\u3002

\u8fd9\u91cc\u4f7f\u7528\u7b2c\u4e8c\u79cd\u7528\u6cd5\uff0c\u542f\u52a8 JVM \u65f6\u9700\u8981\u6307\u5b9a JMX Exporter \u7684 jar \u5305\u6587\u4ef6\u548c\u914d\u7f6e\u6587\u4ef6\u3002 jar \u5305\u662f\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u4e0d\u597d\u901a\u8fc7 configmap \u6302\u8f7d\uff0c\u914d\u7f6e\u6587\u4ef6\u6211\u4eec\u51e0\u4e4e\u4e0d\u9700\u8981\u4fee\u6539\uff0c \u6240\u4ee5\u5efa\u8bae\u662f\u76f4\u63a5\u5c06 JMX Exporter \u7684 jar \u5305\u548c\u914d\u7f6e\u6587\u4ef6\u90fd\u6253\u5305\u5230\u4e1a\u52a1\u5bb9\u5668\u955c\u50cf\u4e2d\u3002

\u5176\u4e2d\uff0c\u7b2c\u4e8c\u79cd\u65b9\u5f0f\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u5c06 JMX Exporter \u7684 jar \u6587\u4ef6\u653e\u5728\u4e1a\u52a1\u5e94\u7528\u955c\u50cf\u4e2d\uff0c \u4e5f\u53ef\u4ee5\u9009\u62e9\u5728\u90e8\u7f72\u7684\u65f6\u5019\u6302\u8f7d\u8fdb\u53bb\u3002\u8fd9\u91cc\u5206\u522b\u5bf9\u4e24\u79cd\u65b9\u5f0f\u505a\u4e00\u4e2a\u4ecb\u7ecd\uff1a

"},{"location":"admin/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html#jmx-exporter-jar","title":"\u65b9\u5f0f\u4e00\uff1a\u5c06 JMX Exporter JAR \u6587\u4ef6\u6784\u5efa\u81f3\u4e1a\u52a1\u955c\u50cf\u4e2d","text":"

prometheus-jmx-config.yaml \u5185\u5bb9\u5982\u4e0b\uff1a

prometheus-jmx-config.yaml
...\nssl: false\nlowercaseOutputName: false\nlowercaseOutputLabelNames: false\nrules:\n- pattern: \".*\"\n

Note

\u66f4\u591a\u914d\u7f6e\u9879\u8bf7\u53c2\u8003\u5e95\u90e8\u4ecb\u7ecd\u6216Prometheus \u5b98\u65b9\u6587\u6863\u3002

\u7136\u540e\u51c6\u5907 jar \u5305\u6587\u4ef6\uff0c\u53ef\u4ee5\u5728 jmx_exporter \u7684 Github \u9875\u9762\u627e\u5230\u6700\u65b0\u7684 jar \u5305\u4e0b\u8f7d\u5730\u5740\u5e76\u53c2\u8003\u5982\u4e0b Dockerfile:

FROM openjdk:11.0.15-jre\nWORKDIR /app/\nCOPY target/my-app.jar ./\nCOPY prometheus-jmx-config.yaml ./\nRUN set -ex; \\\n    curl -L -O https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar;\nENV JAVA_TOOL_OPTIONS=-javaagent:/app/jmx_prometheus_javaagent-0.17.2.jar=8088:/app/prometheus-jmx-config.yaml\nEXPOSE 8081 8999 8080 8888\nENTRYPOINT java $JAVA_OPTS -jar my-app.jar\n

\u6ce8\u610f\uff1a

  • \u542f\u52a8\u53c2\u6570\u683c\u5f0f\uff1a-javaagent:=:
  • \u8fd9\u91cc\u4f7f\u7528\u4e86 8088 \u7aef\u53e3\u66b4\u9732 JVM \u7684\u76d1\u63a7\u6307\u6807\uff0c\u5982\u679c\u548c Java \u5e94\u7528\u51b2\u7a81\uff0c\u53ef\u81ea\u884c\u66f4\u6539
"},{"location":"admin/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html#init-container","title":"\u65b9\u5f0f\u4e8c\uff1a\u901a\u8fc7 init container \u5bb9\u5668\u6302\u8f7d","text":"

\u6211\u4eec\u9700\u8981\u5148\u5c06 JMX exporter \u505a\u6210 Docker \u955c\u50cf, \u4ee5\u4e0b Dockerfile \u4ec5\u4f9b\u53c2\u8003\uff1a

FROM alpine/curl:3.14\nWORKDIR /app/\n# \u5c06\u524d\u9762\u521b\u5efa\u7684 config \u6587\u4ef6\u62f7\u8d1d\u81f3\u955c\u50cf\nCOPY prometheus-jmx-config.yaml ./\n# \u5728\u7ebf\u4e0b\u8f7d jmx prometheus javaagent jar\nRUN set -ex; \\\n    curl -L -O https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar;\n

\u6839\u636e\u4e0a\u9762 Dockerfile \u6784\u5efa\u955c\u50cf\uff1a docker build -t my-jmx-exporter .

\u5728 Java \u5e94\u7528\u90e8\u7f72 Yaml \u4e2d\u52a0\u5165\u5982\u4e0b init container\uff1a

\u70b9\u51fb\u5c55\u5f00 YAML \u6587\u4ef6
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-demo-app\n  labels:\n    app: my-demo-app\nspec:\n  selector:\n    matchLabels:\n      app: my-demo-app\n  template:\n    metadata:\n      labels:\n        app: my-demo-app\n    spec:\n      imagePullSecrets:\n      - name: registry-pull\n      initContainers:\n      - name: jmx-sidecar\n        image: my-jmx-exporter\n        command: [\"cp\", \"-r\", \"/app/jmx_prometheus_javaagent-0.17.2.jar\", \"/target/jmx_prometheus_javaagent-0.17.2.jar\"]  \u278a\n        volumeMounts:\n        - name: sidecar\n          mountPath: /target\n      containers:\n      - image: my-demo-app-image\n        name: my-demo-app\n        resources:\n          requests:\n            memory: \"1000Mi\"\n            cpu: \"500m\"\n          limits:\n            memory: \"1000Mi\"\n            cpu: \"500m\"\n        ports:\n        - containerPort: 18083\n        env:\n        - name: JAVA_TOOL_OPTIONS\n          value: \"-javaagent:/app/jmx_prometheus_javaagent-0.17.2.jar=8088:/app/prometheus-jmx-config.yaml\" \u278b\n        volumeMounts:\n        - name: host-time\n          mountPath: /etc/localtime\n          readOnly: true\n        - name: sidecar\n          mountPath: /sidecar\n      volumes:\n      - name: host-time\n        hostPath:\n          path: /etc/localtime\n      - name: sidecar  #\u5171\u4eab agent \u6587\u4ef6\u5939\n        emptyDir: {}\n      restartPolicy: Always\n

\u7ecf\u8fc7\u5982\u4e0a\u7684\u6539\u9020\u4e4b\u540e\uff0c\u793a\u4f8b\u5e94\u7528 my-demo-app \u5177\u5907\u4e86\u66b4\u9732 JVM \u6307\u6807\u7684\u80fd\u529b\u3002 \u8fd0\u884c\u670d\u52a1\u4e4b\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 http://lcoalhost:8088 \u8bbf\u95ee\u670d\u52a1\u66b4\u9732\u51fa\u6765\u7684 prometheus \u683c\u5f0f\u7684\u6307\u6807\u3002

\u63a5\u7740\uff0c\u60a8\u53ef\u4ee5\u53c2\u8003 \u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027\u3002

"},{"location":"admin/insight/quickstart/otel/java/jvm-monitor/legacy-jvm.html","title":"\u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027","text":"

\u5982\u679c\u60a8\u7684 Java \u5e94\u7528\u901a\u8fc7\u5176\u4ed6\u65b9\u5f0f\uff08\u6bd4\u5982 Spring Boot Actuator\uff09\u66b4\u9732\u4e86 JVM \u7684\u76d1\u63a7\u6307\u6807\uff0c \u6211\u4eec\u9700\u8981\u8ba9\u76d1\u63a7\u6570\u636e\u88ab\u91c7\u96c6\u5230\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u6dfb\u52a0\u6ce8\u89e3\uff08Kubernetes Annotations\uff09\u7684\u65b9\u5f0f\u8ba9 Insight \u6765\u91c7\u96c6\u5df2\u6709\u7684 JVM \u6307\u6807\uff1a

annatation: \n  insight.opentelemetry.io/metric-scrape: \"true\" # \u662f\u5426\u91c7\u96c6\n  insight.opentelemetry.io/metric-path: \"/\"      # \u91c7\u96c6\u6307\u6807\u7684\u8def\u5f84\n  insight.opentelemetry.io/metric-port: \"9464\"   # \u91c7\u96c6\u6307\u6807\u7684\u7aef\u53e3\n

\u4f8b\u5982\u4e3a my-deployment-app \u6dfb\u52a0\u6ce8\u89e3\uff1a

apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-deployment-app\nspec:\n  selector:\n    matchLabels:\n      app: my-deployment-app\n      app.kubernetes.io/name: my-deployment-app\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: my-deployment-app\n        app.kubernetes.io/name: my-deployment-app\n      annotations:\n        insight.opentelemetry.io/metric-scrape: \"true\" # \u662f\u5426\u91c7\u96c6\n        insight.opentelemetry.io/metric-path: \"/\"      # \u91c7\u96c6\u6307\u6807\u7684\u8def\u5f84\n        insight.opentelemetry.io/metric-port: \"9464\"   # \u91c7\u96c6\u6307\u6807\u7684\u7aef\u53e3\n

\u4ee5\u4e0b\u662f\u5b8c\u6574\u793a\u4f8b\uff1a

---\napiVersion: v1\nkind: Service\nmetadata:\n  name: spring-boot-actuator-prometheus-metrics-demo\nspec:\n  type: NodePort\n  selector:\n    #app: my-deployment-with-aotu-instrumentation-app\n    app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo\n  ports:\n    - name: http\n      port: 8080\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: spring-boot-actuator-prometheus-metrics-demo\nspec:\n  selector:\n    matchLabels:\n      #app: my-deployment-with-aotu-instrumentation-app\n      app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo\n      annotations:\n        insight.opentelemetry.io/metric-scrape: \"true\" # \u662f\u5426\u91c7\u96c6\n        insight.opentelemetry.io/metric-path: \"/actuator/prometheus\"      # \u91c7\u96c6\u6307\u6807\u7684\u8def\u5f84\n        insight.opentelemetry.io/metric-port: \"8080\"   # \u91c7\u96c6\u6307\u6807\u7684\u7aef\u53e3\n    spec:\n      containers:\n        - name: myapp\n          image: docker.m.daocloud.io/wutang/spring-boot-actuator-prometheus-metrics-demo\n          ports:\n            - name: http\n              containerPort: 8080\n          resources:\n            limits:\n              cpu: 500m\n              memory: 800Mi\n            requests:\n              cpu: 200m\n              memory: 400Mi\n

\u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0cInsight \u4f1a\u901a\u8fc7 :8080//actuator/prometheus \u6293\u53d6\u901a\u8fc7 Spring Boot Actuator \u66b4\u9732\u51fa\u6765\u7684 Prometheus \u6307\u6807\u3002

"},{"location":"admin/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html","title":"\u4f7f\u7528 OpenTelemetry Java Agent \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807","text":"

\u5728 Opentelemetry Agent v1.20.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\uff0cOpentelemetry Agent \u65b0\u589e\u4e86 JMX Metric Insight \u6a21\u5757\uff0c\u5982\u679c\u4f60\u7684\u5e94\u7528\u5df2\u7ecf\u96c6\u6210\u4e86 Opentelemetry Agent \u53bb\u91c7\u96c6\u5e94\u7528\u94fe\u8def\uff0c\u90a3\u4e48\u4f60\u4e0d\u518d\u9700\u8981\u53e6\u5916\u5f15\u5165\u5176\u4ed6 Agent \u53bb\u4e3a\u6211\u4eec\u7684\u5e94\u7528\u66b4\u9732 JMX \u6307\u6807\u3002Opentelemetry Agent \u4e5f\u662f\u901a\u8fc7\u68c0\u6d4b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u672c\u5730\u53ef\u7528\u7684 MBean \u516c\u5f00\u7684\u6307\u6807\uff0c\u5bf9\u5176\u8fdb\u884c\u6536\u96c6\u5e76\u66b4\u9732\u6307\u6807\u3002

Opentelemetry Agent \u4e5f\u9488\u5bf9\u5e38\u89c1\u7684 Java Server \u6216\u6846\u67b6\u5185\u7f6e\u4e86\u4e00\u4e9b\u76d1\u63a7\u7684\u6837\u4f8b\uff0c\u8bf7\u53c2\u8003\u9884\u5b9a\u4e49\u7684\u6307\u6807\u3002

\u4f7f\u7528 OpenTelemetry Java Agent \u540c\u6837\u9700\u8981\u8003\u8651\u5982\u4f55\u5c06 JAR \u6302\u8f7d\u8fdb\u5bb9\u5668\uff0c\u9664\u4e86\u53ef\u4ee5\u53c2\u8003\u4e0a\u9762 JMX Exporter \u6302\u8f7d JAR \u6587\u4ef6\u7684\u65b9\u5f0f\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u501f\u52a9 Opentelemetry \u63d0\u4f9b\u7684 Operator \u7684\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u52a8\u4e3a\u6211\u4eec\u7684\u5e94\u7528\u5f00\u542f JVM \u6307\u6807\u66b4\u9732\uff1a

\u5982\u679c\u4f60\u7684\u5e94\u7528\u5df2\u7ecf\u96c6\u6210\u4e86 Opentelemetry Agent \u53bb\u91c7\u96c6\u5e94\u7528\u94fe\u8def\uff0c\u90a3\u4e48\u4f60\u4e0d\u518d\u9700\u8981\u53e6\u5916\u5f15\u5165\u5176\u4ed6 Agent \u53bb\u4e3a\u6211\u4eec\u7684\u5e94\u7528\u66b4\u9732 JMX \u6307\u6807\u3002Opentelemetry Agent \u901a\u8fc7\u68c0\u6d4b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u672c\u5730\u53ef\u7528\u7684 MBean \u516c\u5f00\u7684\u6307\u6807\uff0c\u73b0\u5728\u53ef\u4ee5\u672c\u5730\u6536\u96c6\u5e76\u66b4\u9732\u6307\u6807\u63a5\u53e3\u3002

\u4f46\u662f\uff0c\u622a\u81f3\u76ee\u524d\u7248\u672c\uff0c\u4f60\u4ecd\u7136\u9700\u8981\u624b\u52a8\u4e3a\u5e94\u7528\u52a0\u4e0a\u76f8\u5e94\u6ce8\u89e3\u4e4b\u540e\uff0cJVM \u6570\u636e\u624d\u4f1a\u88ab Insight \u91c7\u96c6\u5230\uff0c\u5177\u4f53\u6ce8\u89e3\u5185\u5bb9\u8bf7\u53c2\u8003 \u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027\u3002

"},{"location":"admin/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html#java","title":"\u4e3a Java \u4e2d\u95f4\u4ef6\u66b4\u9732\u6307\u6807","text":"

Opentelemetry Agent \u4e5f\u5185\u7f6e\u4e86\u4e00\u4e9b\u4e2d\u95f4\u4ef6\u76d1\u63a7\u7684\u6837\u4f8b\uff0c\u8bf7\u53c2\u8003 \u9884\u5b9a\u4e49\u6307\u6807\u3002

\u9ed8\u8ba4\u6ca1\u6709\u6307\u5b9a\u4efb\u4f55\u7c7b\u578b\uff0c\u9700\u8981\u901a\u8fc7 -Dotel.jmx.target.system JVM Options \u6307\u5b9a,\u6bd4\u5982 -Dotel.jmx.target.system=jetty,kafka-broker \u3002

"},{"location":"admin/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html#_1","title":"\u53c2\u8003","text":"
  • Gaining JMX Metric Insights with the OpenTelemetry Java Agent

  • Otel jmx metrics

"},{"location":"admin/insight/quickstart/other/install-agent-on-ocp.html","title":"OpenShift \u5b89\u88c5 Insight Agent","text":"

\u867d\u7136 OpenShift \u7cfb\u7edf\u81ea\u5e26\u4e86\u4e00\u5957\u76d1\u63a7\u7cfb\u7edf\uff0c\u56e0\u4e3a\u6570\u636e\u91c7\u96c6\u7ea6\u5b9a\u7684\u4e00\u4e9b\u89c4\u5219\uff0c\u6211\u4eec\u8fd8\u662f\u4f1a\u5b89\u88c5 Insight Agent\u3002

\u5176\u4e2d\uff0c\u5b89\u9664\u4e86\u57fa\u7840\u7684\u5b89\u88c5\u914d\u7f6e\u4e4b\u5916\uff0chelm install \u7684\u65f6\u5019\u8fd8\u9700\u8981\u589e\u52a0\u5982\u4e0b\u7684\u53c2\u6570\uff1a

## \u9488\u5bf9 fluentbit \u76f8\u5173\u7684\u53c2\u6570\uff1b\n--set fluent-bit.ocp.enabled=true \\\n--set fluent-bit.serviceAccount.create=false \\\n--set fluent-bit.securityContext.runAsUser=0 \\\n--set fluent-bit.securityContext.seLinuxOptions.type=spc_t \\\n--set fluent-bit.securityContext.readOnlyRootFilesystem=false \\\n--set fluent-bit.securityContext.allowPrivilegeEscalation=false \\\n\n## \u542f\u7528\u9002\u914d OpenShift4.x \u7684 Prometheus(CR)\n--set compatibility.openshift.prometheus.enabled=true \\\n\n## \u5173\u95ed\u9ad8\u7248\u672c\u7684 Prometheus \u5b9e\u4f8b\n--set kube-prometheus-stack.prometheus.enabled=false \\\n--set kube-prometheus-stack.kubeApiServer.enabled=false \\\n--set kube-prometheus-stack.kubelet.enabled=false \\\n--set kube-prometheus-stack.kubeControllerManager.enabled=false \\\n--set kube-prometheus-stack.coreDns.enabled=false \\\n--set kube-prometheus-stack.kubeDns.enabled=false \\\n--set kube-prometheus-stack.kubeEtcd.enabled=false \\\n--set kube-prometheus-stack.kubeEtcd.enabled=false \\\n--set kube-prometheus-stack.kubeScheduler.enabled=false \\\n--set kube-prometheus-stack.kubeStateMetrics.enabled=false \\\n--set kube-prometheus-stack.nodeExporter.enabled=false \\\n\n## \u9650\u5236 PrometheusOperator \u5904\u7406\u7684 namespace\uff0c\u907f\u514d\u4e0e OpenShift \u81ea\u5e26\u7684 PrometheusOperator \u76f8\u4e92\u7ade\u4e89\n--set kube-prometheus-stack.prometheusOperator.kubeletService.namespace=\"insight-system\" \\\n--set kube-prometheus-stack.prometheusOperator.prometheusInstanceNamespaces=\"insight-system\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[0]=\"openshift-monitoring\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[1]=\"openshift-user-workload-monitoring\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[2]=\"openshift-customer-monitoring\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[3]=\"openshift-route-monitor-operator\" \\\n
"},{"location":"admin/insight/quickstart/other/install-agent-on-ocp.html#openshift-prometheus","title":"\u901a\u8fc7 OpenShift \u81ea\u8eab\u673a\u5236\uff0c\u5c06\u7cfb\u7edf\u76d1\u63a7\u6570\u636e\u5199\u5165 Prometheus \u4e2d","text":"
apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: cluster-monitoring-config\n  namespace: openshift-monitoring\ndata:\n  config.yaml: |\n    prometheusK8s:\n      remoteWrite:\n        - queueConfig:\n            batchSendDeadline: 60s\n            maxBackoff: 5s\n            minBackoff: 30ms\n            minShards: 1\n            capacity: 5000\n            maxSamplesPerSend: 1000\n            maxShards: 100\n          remoteTimeout: 30s\n          url: http://insight-agent-prometheus.insight-system.svc.cluster.local:9090/api/v1/write\n          writeRelabelConfigs:\n            - action: keep\n              regex: etcd|kubelet|node-exporter|apiserver|kube-state-metrics\n              sourceLabels:\n                - job\n
"},{"location":"admin/insight/quickstart/res-plan/index.html","title":"\u90e8\u7f72\u5bb9\u91cf\u89c4\u5212","text":"

\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u4e3a\u4e86\u907f\u514d\u6d88\u8017\u8fc7\u591a\u8d44\u6e90\uff0c\u5df2\u7ecf\u8bbe\u7f6e\u4e86\u8d44\u6e90\u4e0a\u7ebf\uff08resource limit\uff09\uff0c\u53ef\u89c2\u6d4b\u7cfb\u7edf\u9700\u8981\u5904\u7406\u5927\u91cf\u7684\u6570\u636e\uff0c\u5982\u679c\u5bb9\u91cf\u89c4\u5212\u4e0d\u5408\u7406\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8d1f\u8f7d\u8fc7\u9ad8\uff0c\u5f71\u54cd\u7a33\u5b9a\u6027\u548c\u53ef\u9760\u6027\u3002

"},{"location":"admin/insight/quickstart/res-plan/index.html#_2","title":"\u89c2\u6d4b\u7ec4\u4ef6\u7684\u8d44\u6e90\u89c4\u5212","text":"

\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u5305\u542b Insight \u548c Insight Agent\u3002\u5176\u4e2d\uff0cInsight \u4e3b\u8981\u8d1f\u8d23\u89c2\u6d4b\u6570\u636e\u7684\u5b58\u50a8\uff0c\u5206\u6790\u4e0e\u5c55\u793a\u3002\u800c Insight Agent \u5305\u542b\u4e86\u6570\u636e\u91c7\u96c6\u3001\u6570\u636e\u5904\u7406\u3001\u6570\u636e\u4e0a\u4f20\u7b49\u529f\u80fd\u3002

"},{"location":"admin/insight/quickstart/res-plan/index.html#_3","title":"\u5b58\u50a8\u7ec4\u4ef6\u7684\u5bb9\u91cf\u89c4\u5212","text":"

Insight \u7684\u5b58\u50a8\u7ec4\u4ef6\u4e3b\u8981\u5305\u62ec ElasticSearch \u548c VictoriaMetrics. \u5176\u4e2d\uff0cElasticSearch \u4e3b\u8981\u8d1f\u8d23\u5b58\u50a8\u548c\u67e5\u8be2\u65e5\u5fd7\u4e0e\u94fe\u8def\u6570\u636e\uff0cVictoriaMetrics \u4e3b\u8981\u8d1f\u8d23\u5b58\u50a8\u548c\u67e5\u8be2\u6307\u6807\u6570\u636e\u3002

  • VictoriaMetircs: \u5176\u78c1\u76d8\u7528\u91cf\u4e0e\u5b58\u50a8\u7684\u6307\u6807\u6709\u5173\uff0c\u6839\u636e vmstorage \u7684\u78c1\u76d8\u89c4\u5212 \u9884\u4f30\u5bb9\u91cf\u540e \u8c03\u6574 vmstorage \u78c1\u76d8\u3002
"},{"location":"admin/insight/quickstart/res-plan/index.html#_4","title":"\u91c7\u96c6\u5668\u7684\u8d44\u6e90\u89c4\u5212","text":"

Insight Agent \u7684\u91c7\u96c6\u5668\u4e2d\u5305\u542b Proemtheus\uff0c\u867d\u7136 Prometheus \u672c\u8eab\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u5728 Insight Agent \u4e2d\uff0cPrometheus \u4f1a\u88ab\u7528\u4e8e\u91c7\u96c6\u6570\u636e\uff0c\u56e0\u6b64\u9700\u8981\u5bf9 Prometheus \u7684\u8d44\u6e90\u8fdb\u884c\u89c4\u5212\u3002

  • Prometheus\uff1a\u5176\u8d44\u6e90\u7528\u91cf\u4e0e\u91c7\u96c6\u7684\u6307\u6807\u91cf\u6709\u5173\uff0c\u53ef\u4ee5\u53c2\u8003 Prometheus \u8d44\u6e90\u89c4\u5212 \u8fdb\u884c\u8c03\u6574\u3002
"},{"location":"admin/insight/quickstart/res-plan/modify-vms-disk.html","title":"vmstorge \u78c1\u76d8\u6269\u5bb9","text":"

\u672c\u6587\u63cf\u8ff0\u4e86 vmstorge \u78c1\u76d8\u6269\u5bb9\u7684\u65b9\u6cd5\uff0c vmstorge \u78c1\u76d8\u89c4\u8303\u8bf7\u53c2\u8003 vmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212\u3002

"},{"location":"admin/insight/quickstart/res-plan/modify-vms-disk.html#_1","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/insight/quickstart/res-plan/modify-vms-disk.html#_2","title":"\u5f00\u542f\u5b58\u50a8\u6c60\u6269\u5bb9","text":"
  1. \u4ee5\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7ba1\u7406\u5458\u6743\u9650\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\uff0c\u70b9\u51fb \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb kpanda-global-cluster \u96c6\u7fa4\u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \uff0c\u627e\u5230 vmstorage \u7ed1\u5b9a\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

  3. \u70b9\u51fb\u67d0\u4e2a vmstorage PVC\uff0c\u8fdb\u5165 vmstorage \u7684\u6570\u636e\u5377\u58f0\u660e\u8be6\u60c5\uff0c\u786e\u8ba4\u8be5 PVC \u7ed1\u5b9a\u7684\u5b58\u50a8\u6c60\u3002

  4. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u5b58\u50a8\u6c60(SC) \uff0c\u627e\u5230 local-path \uff0c\u70b9\u51fb\u76ee\u6807\u53f3\u4fa7\u7684 \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u7f16\u8f91 \u3002

  5. \u5f00\u542f \u6269\u5bb9 \u540e\u70b9\u51fb \u786e\u5b9a \u3002

"},{"location":"admin/insight/quickstart/res-plan/modify-vms-disk.html#vmstorage","title":"\u66f4\u6539 vmstorage \u7684\u78c1\u76d8\u5bb9\u91cf","text":"
  1. \u4ee5\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7ba1\u7406\u5458\u6743\u9650\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\uff0c\u8fdb\u5165 kpanda-global-cluster \u96c6\u7fa4\u8be6\u60c5\u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u627e\u5230 vmcluster \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\u3002

  3. \u70b9\u51fb\u8be5 vmcluster \u81ea\u5b9a\u4e49\u8d44\u6e90\u8fdb\u5165\u8be6\u60c5\u9875\uff0c\u5207\u6362\u5230 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u4ece insight-victoria-metrics-k8s-stack \u53f3\u4fa7\u83dc\u5355\u9009\u62e9 \u7f16\u8f91 YAML \u3002

  4. \u6839\u636e\u56fe\u4f8b\u4fee\u6539\u540e\u70b9\u51fb \u786e\u5b9a \u3002

  5. \u518d\u6b21\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \uff0c\u627e\u5230 vmstorage \u7ed1\u5b9a\u7684\u6570\u636e\u5377\u58f0\u660e\u786e\u8ba4\u4fee\u6539\u5df2\u751f\u6548\u3002\u5728\u67d0\u4e2a PVC \u8be6\u60c5\u9875\uff0c\u70b9\u51fb\u5173\u8054\u5b58\u50a8\u6e90 (PV)\u3002

  6. \u6253\u5f00\u6570\u636e\u5377\u8be6\u60c5\u9875\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u66f4\u65b0 \u6309\u94ae\u3002

  7. \u4fee\u6539 \u5bb9\u91cf \u540e\u70b9\u51fb \u786e\u5b9a \uff0c\u7a0d\u7b49\u7247\u523b\u7b49\u5230\u6269\u5bb9\u6210\u529f\u3002

"},{"location":"admin/insight/quickstart/res-plan/modify-vms-disk.html#_3","title":"\u514b\u9686\u5b58\u50a8\u5377","text":"

\u82e5\u5b58\u50a8\u5377\u6269\u5bb9\u5931\u8d25\uff0c\u53ef\u53c2\u8003\u4ee5\u4e0b\u65b9\u6cd5\u514b\u9686\u5b58\u50a8\u5377\u3002

  1. \u4ee5\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7ba1\u7406\u5458\u6743\u9650\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\uff0c\u8fdb\u5165 kpanda-global-cluster \u96c6\u7fa4\u8be6\u60c5\u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5de5\u4f5c\u8d1f\u8f7d -> \u6709\u72b6\u6001\u8d1f\u8f7d \uff0c\u627e\u5230 vmstorage \u7684\u6709\u72b6\u6001\u8d1f\u8f7d\uff0c\u70b9\u51fb\u76ee\u6807\u53f3\u4fa7\u7684 \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u72b6\u6001 -> \u505c\u6b62 -> \u786e\u5b9a \u3002

  3. \u5728\u547d\u4ee4\u884c\u4e2d\u767b\u5f55 kpanda-global-cluster \u96c6\u7fa4\u7684 master \u8282\u70b9\u540e\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u590d\u5236 vmstorage \u5bb9\u5668\u4e2d\u7684 vm-data \u76ee\u5f55\u5c06\u6307\u6807\u4fe1\u606f\u5b58\u50a8\u5728\u672c\u5730\uff1a

    kubectl cp -n insight-system vmstorage-insight-victoria-metrics-k8s-stack-1:vm-data ./vm-data\n
  4. \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u8fdb\u5165 kpanda-global-cluster \u96c6\u7fa4\u8be6\u60c5\uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u514b\u9686 \uff0c\u5e76\u4fee\u6539\u6570\u636e\u5377\u7684\u5bb9\u91cf\u3002

  5. \u5220\u9664\u4e4b\u524d vmstorage \u7684\u6570\u636e\u5377\u3002

  6. \u7a0d\u7b49\u7247\u523b\uff0c\u5f85\u5b58\u50a8\u5377\u58f0\u660e\u8ddf\u514b\u9686\u7684\u6570\u636e\u5377\u7ed1\u5b9a\u540e\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u5c06\u7b2c 3 \u6b65\u4e2d\u5bfc\u51fa\u7684\u6570\u636e\u5bfc\u5165\u5230\u5bf9\u5e94\u7684\u5bb9\u5668\u4e2d\uff0c\u7136\u540e\u5f00\u542f\u4e4b\u524d\u6682\u505c\u7684 vmstorage \u3002

    kubectl cp -n insight-system ./vm-data vmstorage-insight-victoria-metrics-k8s-stack-1:vm-data\n
"},{"location":"admin/insight/quickstart/res-plan/prometheus-res.html","title":"Prometheus \u8d44\u6e90\u89c4\u5212","text":"

Prometheus \u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u53d7\u5230\u96c6\u7fa4\u5bb9\u5668\u6570\u91cf\u4ee5\u53ca\u5f00\u542f Istio \u7684\u5f71\u54cd\uff0c\u4f1a\u5bfc\u81f4 Prometheus \u7684 CPU\u3001\u5185\u5b58\u7b49\u8d44\u6e90\u4f7f\u7528\u91cf\u8d85\u51fa\u8bbe\u5b9a\u7684\u8d44\u6e90\u3002

\u4e3a\u4e86\u4fdd\u8bc1\u4e0d\u540c\u89c4\u6a21\u96c6\u7fa4\u4e0b Prometheus \u7684\u6b63\u5e38\u8fd0\u884c\uff0c\u9700\u8981\u6839\u636e\u96c6\u7fa4\u7684\u5b9e\u9645\u89c4\u6a21\u5bf9 Prometheus \u8fdb\u884c\u8d44\u6e90\u8c03\u6574\u3002

"},{"location":"admin/insight/quickstart/res-plan/prometheus-res.html#_1","title":"\u53c2\u8003\u8d44\u6e90\u89c4\u5212","text":"

\u5728\u672a\u5f00\u542f\u7f51\u683c\u60c5\u51b5\u4e0b\uff0c\u6d4b\u8bd5\u60c5\u51b5\u7edf\u8ba1\u51fa\u7cfb\u7edf Job \u6307\u6807\u91cf\u4e0e Pod \u7684\u5173\u7cfb\u4e3a Series \u6570\u91cf = 800 * Pod \u6570\u91cf

\u5728\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6\uff0c\u5f00\u542f\u529f\u80fd\u540e Pod \u4ea7\u751f\u7684 Istio \u76f8\u5173\u6307\u6807\u6570\u91cf\u7ea7\u4e3a Series \u6570\u91cf = 768 * Pod \u6570\u91cf

"},{"location":"admin/insight/quickstart/res-plan/prometheus-res.html#_2","title":"\u5f53\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6","text":"

\u4ee5\u4e0b\u8d44\u6e90\u89c4\u5212\u4e3a \u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c \u573a\u666f\u4e0b\uff0cPrometheus \u7684\u8d44\u6e90\u89c4\u5212\u63a8\u8350\uff1a

\u96c6\u7fa4\u89c4\u6a21(Pod \u6570) \u6307\u6807\u91cf(\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c) CPU(core) \u5185\u5b58(GB) 100 8w Request: 0.5Limit\uff1a1 Request\uff1a2GBLimit\uff1a4GB 200 16w Request\uff1a1Limit\uff1a1.5 Request\uff1a3GBLimit\uff1a6GB 300 24w Request\uff1a1Limit\uff1a2 Request\uff1a3GBLimit\uff1a6GB 400 32w Request\uff1a1Limit\uff1a2 Request\uff1a4GBLimit\uff1a8GB 500 40w Request\uff1a1.5Limit\uff1a3 Request\uff1a5GBLimit\uff1a10GB 800 64w Request\uff1a2Limit\uff1a4 Request\uff1a8GBLimit\uff1a16GB 1000 80w Request\uff1a2.5Limit\uff1a5 Request\uff1a9GBLimit\uff1a18GB 2000 160w Request\uff1a3.5Limit\uff1a7 Request\uff1a20GBLimit\uff1a40GB 3000 240w Request\uff1a4Limit\uff1a8 Request\uff1a33GBLimit\uff1a66GB"},{"location":"admin/insight/quickstart/res-plan/prometheus-res.html#_3","title":"\u5f53\u5f00\u542f\u670d\u52a1\u7f51\u683c\u529f\u80fd\u65f6","text":"

\u4ee5\u4e0b\u8d44\u6e90\u89c4\u5212\u4e3a \u5f00\u542f\u670d\u52a1\u7f51\u683c \u573a\u666f\u4e0b\uff0cPrometheus \u7684\u8d44\u6e90\u89c4\u5212\u63a8\u8350\uff1a

\u96c6\u7fa4\u89c4\u6a21(Pod \u6570) \u6307\u6807\u91cf(\u5df2\u5f00\u542f\u670d\u52a1\u7f51\u683c) CPU(core) \u5185\u5b58(GB) 100 15w Request: 1Limit\uff1a2 Request\uff1a3GBLimit\uff1a6GB 200 31w Request\uff1a2Limit\uff1a3 Request\uff1a5GBLimit\uff1a10GB 300 46w Request\uff1a2Limit\uff1a4 Request\uff1a6GBLimit\uff1a12GB 400 62w Request\uff1a2Limit\uff1a4 Request\uff1a8GBLimit\uff1a16GB 500 78w Request\uff1a3Limit\uff1a6 Request\uff1a10GBLimit\uff1a20GB 800 125w Request\uff1a4Limit\uff1a8 Request\uff1a15GBLimit\uff1a30GB 1000 156w Request\uff1a5Limit\uff1a10 Request\uff1a18GBLimit\uff1a36GB 2000 312w Request\uff1a7Limit\uff1a14 Request\uff1a40GBLimit\uff1a80GB 3000 468w Request\uff1a8Limit\uff1a16 Request\uff1a65GBLimit\uff1a130GB

Note

  1. \u8868\u683c\u4e2d\u7684 Pod \u6570\u91cf \u6307\u96c6\u7fa4\u4e2d\u57fa\u672c\u7a33\u5b9a\u8fd0\u884c\u7684 Pod \u6570\u91cf\uff0c\u5982\u51fa\u73b0\u5927\u91cf\u7684 Pod \u91cd\u542f\uff0c\u5219\u4f1a\u9020\u6210\u77ed\u65f6\u95f4\u5185\u6307\u6807\u91cf\u7684\u9661\u589e\uff0c\u6b64\u65f6\u8d44\u6e90\u9700\u8981\u8fdb\u884c\u76f8\u5e94\u4e0a\u8c03\u3002
  2. Prometheus \u5185\u5b58\u4e2d\u9ed8\u8ba4\u4fdd\u5b58\u4e24\u5c0f\u65f6\u6570\u636e\uff0c\u4e14\u96c6\u7fa4\u4e2d\u5f00\u542f\u4e86 Remote Write \u529f\u80fd\u65f6\uff0c\u4f1a\u5360\u7528\u4e00\u5b9a\u5185\u5b58\uff0c\u8d44\u6e90\u8d85\u914d\u6bd4\u5efa\u8bae\u914d\u7f6e\u4e3a 2\u3002
  3. \u8868\u683c\u4e2d\u6570\u636e\u4e3a\u63a8\u8350\u503c\uff0c\u9002\u7528\u4e8e\u901a\u7528\u60c5\u51b5\u3002\u5982\u73af\u5883\u6709\u7cbe\u786e\u7684\u8d44\u6e90\u8981\u6c42\uff0c\u5efa\u8bae\u5728\u96c6\u7fa4\u8fd0\u884c\u4e00\u6bb5\u65f6\u95f4\u540e\uff0c\u67e5\u770b\u5bf9\u5e94 Prometheus \u7684\u8d44\u6e90\u5360\u7528\u91cf\u8fdb\u884c\u7cbe\u786e\u914d\u7f6e\u3002
"},{"location":"admin/insight/quickstart/res-plan/vms-res-plan.html","title":"vmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212","text":"

vmstorage \u662f\u8d1f\u8d23\u5b58\u50a8\u53ef\u89c2\u6d4b\u6027\u591a\u96c6\u7fa4\u6307\u6807\u3002 \u4e3a\u4fdd\u8bc1 vmstorage \u7684\u7a33\u5b9a\u6027\uff0c\u9700\u8981\u6839\u636e\u96c6\u7fa4\u6570\u91cf\u53ca\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\u5bb9\u91cf\u3002 \u66f4\u591a\u8d44\u6599\u8bf7\u53c2\u8003\uff1avmstorage \u4fdd\u7559\u671f\u4e0e\u78c1\u76d8\u7a7a\u95f4\u3002

"},{"location":"admin/insight/quickstart/res-plan/vms-res-plan.html#_1","title":"\u6d4b\u8bd5\u7ed3\u679c","text":"

\u7ecf\u8fc7 14 \u5929\u5bf9\u4e0d\u540c\u89c4\u6a21\u7684\u96c6\u7fa4\u7684 vmstorage \u7684\u78c1\u76d8\u89c2\u6d4b\uff0c \u6211\u4eec\u53d1\u73b0 vmstorage \u7684\u78c1\u76d8\u7528\u91cf\u4e0e\u5176\u5b58\u50a8\u7684\u6307\u6807\u91cf\u548c\u5355\u4e2a\u6570\u636e\u70b9\u5360\u7528\u78c1\u76d8\u6b63\u76f8\u5173\u3002

  1. \u77ac\u65f6\u5b58\u50a8\u7684\u6307\u6807\u91cf increase(vm_rows{ type != \"indexdb\"}[30s]) \u4ee5\u83b7\u53d6 30s \u5185\u589e\u52a0\u7684\u6307\u6807\u91cf
  2. \u5355\u4e2a\u6570\u636e\u70b9 (datapoint) \u7684\u5360\u7528\u78c1\u76d8\uff1a sum(vm_data_size_bytes{type!=\"indexdb\"}) /\u00a0sum(vm_rows{type\u00a0!=\u00a0\"indexdb\"})
"},{"location":"admin/insight/quickstart/res-plan/vms-res-plan.html#_2","title":"\u8ba1\u7b97\u65b9\u6cd5","text":"

\u78c1\u76d8\u7528\u91cf = \u77ac\u65f6\u6307\u6807\u91cf x 2 x \u5355\u4e2a\u6570\u636e\u70b9\u7684\u5360\u7528\u78c1\u76d8 x 60 x 24 x \u5b58\u50a8\u65f6\u95f4 (\u5929)

\u53c2\u6570\u8bf4\u660e\uff1a

  1. \u78c1\u76d8\u7528\u91cf\u5355\u4f4d\u4e3a Byte \u3002
  2. \u5b58\u50a8\u65f6\u957f(\u5929) x 60 x 24 \u5c06\u65f6\u95f4(\u5929)\u6362\u7b97\u6210\u5206\u949f\u4ee5\u4fbf\u8ba1\u7b97\u78c1\u76d8\u7528\u91cf\u3002
  3. Insight Agent \u4e2d Prometheus \u9ed8\u8ba4\u91c7\u96c6\u65f6\u95f4\u4e3a 30s \uff0c\u6545\u5728 1 \u5206\u949f\u5185\u4ea7\u751f\u4e24\u500d\u7684\u6307\u6807\u91cf\u3002
  4. vmstorage \u4e2d\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 1 \u4e2a\u6708\uff0c\u4fee\u6539\u914d\u7f6e\u8bf7\u53c2\u8003\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e\u3002

Warning

\u8be5\u516c\u5f0f\u4e3a\u901a\u7528\u65b9\u6848\uff0c\u5efa\u8bae\u5728\u8ba1\u7b97\u7ed3\u679c\u4e0a\u9884\u7559\u5197\u4f59\u78c1\u76d8\u5bb9\u91cf\u4ee5\u4fdd\u8bc1 vmstorage \u7684\u6b63\u5e38\u8fd0\u884c\u3002

"},{"location":"admin/insight/quickstart/res-plan/vms-res-plan.html#_3","title":"\u53c2\u8003\u5bb9\u91cf","text":"

\u8868\u683c\u4e2d\u6570\u636e\u662f\u6839\u636e\u9ed8\u8ba4\u5b58\u50a8\u65f6\u95f4\u4e3a\u4e00\u4e2a\u6708 (30 \u5929)\uff0c\u5355\u4e2a\u6570\u636e\u70b9 (datapoint) \u7684\u5360\u7528\u78c1\u76d8\u53d6 0.9 \u8ba1\u7b97\u6240\u5f97\u7ed3\u679c\u3002 \u591a\u96c6\u7fa4\u573a\u666f\u4e0b\uff0cPod \u6570\u91cf\u8868\u793a\u591a\u96c6\u7fa4 Pod \u6570\u91cf\u7684\u603b\u548c\u3002

"},{"location":"admin/insight/quickstart/res-plan/vms-res-plan.html#_4","title":"\u5f53\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6","text":"\u96c6\u7fa4\u89c4\u6a21 (Pod \u6570) \u6307\u6807\u91cf \u78c1\u76d8\u5bb9\u91cf 100 8w 6 GiB 200 16w 12 GiB 300 24w 18 GiB 400 32w 24 GiB 500 40w 30 GiB 800 64w 48 GiB 1000 80w 60 GiB 2000 160w 120 GiB 3000 240w 180 GiB"},{"location":"admin/insight/quickstart/res-plan/vms-res-plan.html#_5","title":"\u5f53\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6","text":"\u96c6\u7fa4\u89c4\u6a21 (Pod \u6570) \u6307\u6807\u91cf \u78c1\u76d8\u5bb9\u91cf 100 15w 12 GiB 200 31w 24 GiB 300 46w 36 GiB 400 62w 48 GiB 500 78w 60 GiB 800 125w 94 GiB 1000 156w 120 GiB 2000 312w 235 GiB 3000 468w 350 GiB"},{"location":"admin/insight/quickstart/res-plan/vms-res-plan.html#_6","title":"\u4e3e\u4f8b\u8bf4\u660e","text":"

AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u4e2d\u6709\u4e24\u4e2a\u96c6\u7fa4\uff0c\u5176\u4e2d\u5168\u5c40\u670d\u52a1\u96c6\u7fa4(\u5f00\u542f\u670d\u52a1\u7f51\u683c)\u4e2d\u8fd0\u884c 500 \u4e2a Pod\uff0c\u5de5\u4f5c\u96c6\u7fa4(\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c)\u8fd0\u884c\u4e86 1000 \u4e2a Pod\uff0c\u9884\u671f\u6307\u6807\u5b58 30 \u5929\u3002

  • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u6307\u6807\u91cf\u4e3a 800x500 + 768x500 = 784000
  • \u5de5\u4f5c\u96c6\u7fa4\u6307\u6807\u91cf\u4e3a 800x1000 = 800000

\u5219\u5f53\u524d vmstorage \u78c1\u76d8\u7528\u91cf\u5e94\u8bbe\u7f6e\u4e3a (784000+80000)x2x0.9x60x24x31 = 124384896000 byte = 116 GiB

Note

\u96c6\u7fa4\u4e2d\u6307\u6807\u91cf\u4e0e Pod \u6570\u91cf\u7684\u5173\u7cfb\u53ef\u53c2\u8003Prometheus \u8d44\u6e90\u89c4\u5212\u3002

"},{"location":"admin/insight/reference/alertnotification.html","title":"\u544a\u8b66\u901a\u77e5\u6d41\u7a0b\u8bf4\u660e","text":"

\u5728\u521b\u5efa\u544a\u8b66\u7b56\u7565\u65f6\uff0c\u53ef\u89c2\u6d4b\u6027 Insight \u652f\u6301\u4e3a\u540c\u7b56\u7565\u4e0b\u4e0d\u540c\u7ea7\u522b\u89e6\u53d1\u7684\u544a\u8b66\u914d\u7f6e\u4e0d\u540c\u7684\u901a\u77e5\u53d1\u9001\u95f4\u9694\uff0c\u4f46\u7531\u4e8e\u5728 Alertmanager \u539f\u751f\u914d\u7f6e\u4e2d\u5b58\u5728 group_interval \u548c repeat_interval \u4e24\u4e2a\u53c2\u6570\uff0c\u4f1a\u5bfc\u81f4\u544a\u8b66\u901a\u77e5\u7684\u5b9e\u9645\u53d1\u9001\u95f4\u9694\u5b58\u5728\u504f\u5dee\u3002

"},{"location":"admin/insight/reference/alertnotification.html#_2","title":"\u53c2\u6570\u914d\u7f6e","text":"

\u5728 Alertmanager \u914d\u7f6e\u5982\u4e0b\uff1a

route:  \n  group_by: [\"rulename\"]\n  group_wait: 30s\n  group_interval: 5m\n  repeat_interval: 1h\n

\u53c2\u6570\u8bf4\u660e\uff1a

  • group_wait \uff1a\u7528\u4e8e\u8bbe\u7f6e\u544a\u8b66\u901a\u77e5\u7684\u7b49\u5f85\u65f6\u95f4\u3002\u5f53 Alertmanager \u63a5\u6536\u5230\u4e00\u7ec4\u544a\u8b66\u65f6\uff0c\u5982\u679c\u5728 group_wait \u6307\u5b9a\u7684\u65f6\u95f4\u5185\u6ca1\u6709\u66f4\u591a\u7684\u544a\u8b66\uff0c\u5219 Alertmanager \u5c06\u7b49\u5f85\u4e00\u6bb5\u65f6\u95f4\u4ee5\u4fbf\u6536\u96c6\u5230\u66f4\u591a\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5e76\u5c06\u6240\u6709\u7b26\u5408\u6761\u4ef6\u7684\u544a\u8b66\u6dfb\u52a0\u5230\u540c\u4e00\u901a\u77e5\u4e2d\u3002

  • group_interval \uff1a\u7528\u4e8e\u8bbe\u7f6e\u4e00\u7ec4\u544a\u8b66\u5728\u88ab\u5408\u5e76\u6210\u5355\u4e00\u901a\u77e5\u524d\u7b49\u5f85\u7684\u65f6\u95f4\u3002\u5982\u679c\u5728\u8fd9\u4e2a\u65f6\u95f4\u5185\u6ca1\u6709\u6536\u5230\u66f4\u591a\u7684\u6765\u81ea\u540c\u4e00\u7ec4\u7684\u544a\u8b66\uff0c\u5219 Alertmanager \u5c06\u53d1\u9001\u4e00\u4e2a\u5305\u542b\u6240\u6709\u5df2\u63a5\u6536\u544a\u8b66\u7684\u901a\u77e5\u3002

  • repeat_interval \uff1a\u7528\u4e8e\u8bbe\u7f6e\u544a\u8b66\u901a\u77e5\u7684\u91cd\u590d\u53d1\u9001\u95f4\u9694\u3002\u5f53 Alertmanager \u53d1\u9001\u544a\u8b66\u901a\u77e5\u5230\u63a5\u6536\u5668\u540e\uff0c\u5982\u679c\u5728 repeat_interval \u53c2\u6570\u6307\u5b9a\u7684\u65f6\u95f4\u5185\u6301\u7eed\u6536\u5230\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5219 Alertmanager \u5c06\u91cd\u590d\u53d1\u9001\u544a\u8b66\u901a\u77e5\u3002

\u5f53\u540c\u65f6\u8bbe\u7f6e\u4e86 group_wait \u3001 group_interval \u548c repeat_interval \u53c2\u6570\u65f6\uff0cAlertmanager \u5c06\u6309\u7167\u4ee5\u4e0b\u65b9\u5f0f\u5904\u7406\u540c\u4e00 group \u4e0b\u7684\u544a\u8b66\u901a\u77e5\uff1a

  1. \u5f53 Alertmanager \u63a5\u6536\u5230\u7b26\u5408\u6761\u4ef6\u7684\u544a\u8b66\u65f6\uff0c\u5b83\u5c06\u7b49\u5f85\u81f3\u5c11 group_wait \u53c2\u6570\u4e2d\u6307\u5b9a\u7684\u65f6\u95f4\u4ee5\u4fbf\u6536\u96c6\u66f4\u591a\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5e76\u5c06\u6240\u6709\u7b26\u5408\u6761\u4ef6\u7684\u544a\u8b66\u6dfb\u52a0\u5230\u540c\u4e00\u901a\u77e5\u4e2d\u3002

  2. \u5982\u679c\u5728 group_wait \u65f6\u95f4\u5185\u6ca1\u6709\u63a5\u6536\u5230\u66f4\u591a\u7684\u544a\u8b66\uff0c\u5219\u5728\u8be5\u65f6\u95f4\u4e4b\u540e\uff0cAlertmanager \u4f1a\u5c06\u6240\u6536\u5230\u7684\u6240\u6709\u6b64\u7c7b\u8b66\u62a5\u53d1\u9001\u5230\u63a5\u6536\u5668\u3002\u5982\u679c\u6709\u5176\u4ed6\u7b26\u5408\u6761\u4ef6\u7684\u544a\u8b66\u5728\u6b64\u671f\u95f4\u5185\u5230\u8fbe\uff0c\u5219 Alertmanager \u5c06\u7ee7\u7eed\u7b49\u5f85\uff0c\u76f4\u5230\u6536\u96c6\u5230\u6240\u6709\u544a\u8b66\u6216\u8d85\u65f6\u3002

  3. \u5982\u679c\u5728 group_interval \u53c2\u6570\u4e2d\u6307\u5b9a\u7684\u65f6\u95f4\u5185\u63a5\u6536\u5230\u4e86\u66f4\u591a\u7684\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5219\u8fd9\u4e9b\u65b0\u544a\u8b66\u4e5f\u5c06\u88ab\u6dfb\u52a0\u5230\u5148\u524d\u7684\u901a\u77e5\u4e2d\u5e76\u4e00\u8d77\u53d1\u9001\u3002\u5982\u679c\u5728 group_interval \u65f6\u95f4\u7ed3\u675f\u540e\u4ecd\u7136\u6709\u672a\u53d1\u9001\u7684\u544a\u8b66\uff0cAlertmanager \u5c06\u4f1a\u91cd\u65b0\u5f00\u59cb\u4e00\u4e2a\u65b0\u7684\u8ba1\u65f6\u5468\u671f\uff0c\u5e76\u7b49\u5f85\u66f4\u591a\u7684\u544a\u8b66\uff0c\u76f4\u5230\u518d\u6b21\u8fbe\u5230 group_interval \u65f6\u95f4\u6216\u6536\u5230\u65b0\u7684\u544a\u8b66\u3002

  4. \u5982\u679c\u5728 repeat_interval \u53c2\u6570\u4e2d\u6307\u5b9a\u7684\u65f6\u95f4\u5185\u6301\u7eed\u6536\u5230\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5219 Alertmanager \u5c06\u91cd\u590d\u53d1\u9001\u4e4b\u524d\u5df2\u7ecf\u53d1\u9001\u8fc7\u7684\u8b66\u62a5\u901a\u77e5\u3002\u5728\u91cd\u590d\u53d1\u9001\u8b66\u62a5\u901a\u77e5\u65f6\uff0cAlertmanager \u4e0d\u518d\u7b49\u5f85 group_wait \u6216 group_interval \uff0c\u800c\u662f\u6839\u636e repeat_interval \u6307\u5b9a\u7684\u65f6\u95f4\u95f4\u9694\u8fdb\u884c\u91cd\u590d\u901a\u77e5\u3002

  5. \u5982\u679c\u5728 repeat_interval \u65f6\u95f4\u7ed3\u675f\u540e\u4ecd\u6709\u672a\u53d1\u9001\u7684\u544a\u8b66\uff0c\u5219 Alertmanager \u5c06\u91cd\u65b0\u5f00\u59cb\u4e00\u4e2a\u65b0\u7684\u8ba1\u65f6\u5468\u671f\uff0c\u5e76\u7ee7\u7eed\u7b49\u5f85\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u65b0\u544a\u8b66\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u5c06\u4e00\u76f4\u6301\u7eed\u4e0b\u53bb\uff0c\u76f4\u5230\u6ca1\u6709\u65b0\u544a\u8b66\u4e3a\u6b62\u6216 Alertmanager \u88ab\u505c\u6b62\u3002

"},{"location":"admin/insight/reference/alertnotification.html#_3","title":"\u4e3e\u4f8b\u8bf4\u660e","text":"

\u5728\u4e0b\u8ff0\u793a\u4f8b\u4e2d\uff0cAlertmanager \u5c06\u6240\u6709 CPU \u4f7f\u7528\u7387\u9ad8\u4e8e\u9608\u503c\u7684\u544a\u8b66\u5206\u914d\u5230\u4e00\u4e2a\u540d\u4e3a\u201ccritical_alerts\u201d\u7684\u7b56\u7565\u4e2d\u3002

groups:\n- name: critical_alerts\n  rules:\n  - alert: HighCPUUsage\n    expr: node_cpu_seconds_total{mode=\"idle\"} < 50\n    for: 5m\n    labels:\n      severity: critical\n    annotations:\n      summary: \"High CPU usage detected on instance {{ $labels.instance }}\"\n  group_by: [rulename]\n  group_wait: 30s\n  group_interval: 5m\n  repeat_interval: 1h\n

\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff1a

  • \u5f53 Alertmanager \u6536\u5230\u544a\u8b66\u65f6\uff0c\u5b83\u5c06\u7b49\u5f85\u81f3\u5c11 30 \u79d2\u4ee5\u4fbf\u6536\u96c6\u66f4\u591a\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5e76\u5c06\u5b83\u4eec\u6dfb\u52a0\u5230\u540c\u4e00\u901a\u77e5\u4e2d\u3002
  • \u5982\u679c\u5728 5 \u5206\u949f\u5185\u63a5\u6536\u5230\u4e86\u66f4\u591a\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5219\u8fd9\u4e9b\u65b0\u544a\u8b66\u4e5f\u5c06\u88ab\u6dfb\u52a0\u5230\u5148\u524d\u7684\u901a\u77e5\u4e2d\u5e76\u4e00\u8d77\u53d1\u9001\u3002\u5982\u679c\u5728 15\u5206\u949f\u540e\u4ecd\u6709\u672a\u53d1\u9001\u7684\u544a\u8b66\uff0c\u5219 Alertmanager \u5c06\u91cd\u65b0\u5f00\u59cb\u4e00\u4e2a\u65b0\u7684\u8ba1\u65f6\u5468\u671f\uff0c\u5e76\u7b49\u5f85\u66f4\u591a\u7684\u544a\u8b66\uff0c\u76f4\u5230\u518d\u6b21\u8fbe\u5230 5 \u5206\u949f\u6216\u6536\u5230\u65b0\u544a\u8b66\u3002
  • \u5982\u679c\u5728 1 \u5c0f\u65f6\u5185\u6301\u7eed\u6536\u5230\u76f8\u540c\u6807\u7b7e\u548c\u5185\u5bb9\u7684\u544a\u8b66\uff0c\u5219 Alertmanager \u5c06\u91cd\u590d\u53d1\u9001\u4e4b\u524d\u5df2\u7ecf\u53d1\u9001\u8fc7\u7684\u8b66\u62a5\u901a\u77e5\u3002

"},{"location":"admin/insight/reference/lucene.html","title":"Lucene \u8bed\u6cd5\u4f7f\u7528\u65b9\u6cd5","text":""},{"location":"admin/insight/reference/lucene.html#lucene_1","title":"Lucene \u7b80\u4ecb","text":"

Lucene \u662f Apache \u8f6f\u4ef6\u57fa\u91d1\u4f1a 4 jakarta \u9879\u76ee\u7ec4\u7684\u4e00\u4e2a\u5b50\u9879\u76ee\uff0c\u662f\u4e00\u4e2a\u5f00\u653e\u6e90\u4ee3\u7801\u7684\u5168\u6587\u68c0\u7d22\u5f15\u64ce\u5de5\u5177\u5305\u3002 Lucene \u7684\u76ee\u7684\u662f\u4e3a\u8f6f\u4ef6\u5f00\u53d1\u4eba\u5458\u63d0\u4f9b\u4e00\u4e2a\u7b80\u5355\u6613\u7528\u7684\u5de5\u5177\u5305\uff0c\u4ee5\u65b9\u4fbf\u7684\u5728\u76ee\u6807\u7cfb\u7edf\u4e2d\u5b9e\u73b0\u5168\u6587\u68c0\u7d22\u7684\u529f\u80fd\u3002

"},{"location":"admin/insight/reference/lucene.html#lucene_2","title":"Lucene \u8bed\u6cd5","text":"

Lucene \u7684\u8bed\u6cd5\u641c\u7d22\u683c\u5f0f\u5141\u8bb8\u60a8\u4ee5\u7075\u6d3b\u7684\u65b9\u5f0f\u6784\u5efa\u641c\u7d22\u67e5\u8be2\uff0c\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7684\u641c\u7d22\u9700\u6c42\u3002\u4ee5\u4e0b\u662f Lucene \u7684\u8bed\u6cd5\u641c\u7d22\u683c\u5f0f\u7684\u8be6\u7ec6\u8bf4\u660e\uff1a

"},{"location":"admin/insight/reference/lucene.html#_1","title":"\u5173\u952e\u5b57\u67e5\u8be2","text":"

\u8981\u901a\u8fc7 Lucene \u8bed\u6cd5\u5b9e\u73b0\u591a\u4e2a\u5173\u952e\u5b57\u7684\u67e5\u8be2\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u5e03\u5c14\u903b\u8f91\u64cd\u4f5c\u7b26\u6765\u7ec4\u5408\u591a\u4e2a\u5173\u952e\u5b57\u3002Lucene \u652f\u6301\u4ee5\u4e0b\u51e0\u79cd\u64cd\u4f5c\u7b26\uff1a

  1. AND \u64cd\u4f5c\u7b26

    • \u4f7f\u7528\u00a0 AND \u00a0\u6216\u00a0 && \u00a0\u6765\u8868\u793a\u903b\u8f91\u4e0e\u5173\u7cfb\u3002
    • \u4f8b\u5982\uff1a term1 AND term2 \u00a0\u6216\u00a0 term1 && term2
  2. OR \u64cd\u4f5c\u7b26

    • \u4f7f\u7528\u00a0 OR \u00a0\u6216\u00a0 || \u00a0\u6765\u8868\u793a\u903b\u8f91\u6216\u5173\u7cfb\u3002
    • \u4f8b\u5982\uff1a term1 OR term2 \u00a0\u6216\u00a0 term1 || term2
  3. NOT \u64cd\u4f5c\u7b26

    • \u4f7f\u7528\u00a0 NOT \u00a0\u6216\u00a0``\u00a0\u6765\u8868\u793a\u903b\u8f91\u975e\u5173\u7cfb\u3002
    • \u4f8b\u5982\uff1a term1 NOT term2 \u00a0\u6216\u00a0 term1 -term2
  4. \u5f15\u53f7

    • \u60a8\u53ef\u4ee5\u5c06\u4e00\u4e2a\u77ed\u8bed\u62ec\u5728\u5f15\u53f7\u4e2d\u4ee5\u8fdb\u884c\u7cbe\u786e\u5339\u914d\u3002
    • \u4f8b\u5982\uff1a \"exact phrase\"
"},{"location":"admin/insight/reference/lucene.html#_2","title":"\u4e3e\u4f8b","text":"
  1. \u6307\u5b9a\u5b57\u6bb5

    field1:keyword1 AND (field2:keyword2 OR field3:keyword3) NOT field4:keyword4\n

    \u89e3\u91ca\u5982\u4e0b\uff1a

    • \u67e5\u8be2\u5b57\u6bb5\u00a0 field1 \u00a0\u5fc5\u987b\u5305\u542b\u5173\u952e\u5b57\u00a0 keyword1 \u3002
    • \u540c\u65f6\uff0c\u5b57\u6bb5\u00a0 field2 \u00a0\u5fc5\u987b\u5305\u542b\u5173\u952e\u5b57\u00a0 keyword2 \u00a0\u6216\u5b57\u6bb5\u00a0 field3 \u00a0\u5fc5\u987b\u5305\u542b\u5173\u952e\u5b57\u00a0 keyword3 \u3002
    • \u6700\u540e\uff0c\u5b57\u6bb5\u00a0 field4 \u00a0\u4e0d\u5f97\u5305\u542b\u5173\u952e\u5b57\u00a0 keyword4 \u3002
  2. \u4e0d\u6307\u5b9a\u5b57\u6bb5

    keyword1 AND (keyword2 OR keyword3) NOT keyword4\n

    \u89e3\u91ca\u5982\u4e0b\uff1a

    • \u67e5\u8be2\u5173\u952e\u5b57\u00a0 keyword1 \u00a0\u5fc5\u987b\u5b58\u5728\u4e8e\u4efb\u610f\u53ef\u641c\u7d22\u7684\u5b57\u6bb5\u4e2d\u3002
    • \u540c\u65f6\uff0c\u5173\u952e\u5b57\u00a0 keyword2 \u00a0\u5fc5\u987b\u5b58\u5728\u6216\u5173\u952e\u5b57\u00a0 keyword3 \u00a0\u5fc5\u987b\u5b58\u5728\u4e8e\u4efb\u610f\u53ef\u641c\u7d22\u7684\u5b57\u6bb5\u4e2d\u3002
    • \u6700\u540e\uff0c\u5173\u952e\u5b57\u00a0 keyword4 \u00a0\u4e0d\u5f97\u5b58\u5728\u4e8e\u4efb\u610f\u53ef\u641c\u7d22\u7684\u5b57\u6bb5\u4e2d\u3002
"},{"location":"admin/insight/reference/lucene.html#_3","title":"\u6a21\u7cca\u67e5\u8be2","text":"

\u5728 Lucene \u4e2d\uff0c\u6a21\u7cca\u67e5\u8be2\u53ef\u4ee5\u901a\u8fc7\u6ce2\u6d6a\u53f7 ~ \u6765\u5b9e\u73b0\u8fd1\u4f3c\u5339\u914d\u3002\u60a8\u53ef\u4ee5\u6307\u5b9a\u4e00\u4e2a\u7f16\u8f91\u8ddd\u79bb\u6765\u9650\u5236\u5339\u914d\u7684\u76f8\u4f3c\u5ea6\u7a0b\u5ea6\u3002

term~\n

\u5728\u4e0a\u8ff0\u793a\u4f8b\u4e2d\uff0c term \u662f\u8981\u8fdb\u884c\u6a21\u7cca\u5339\u914d\u7684\u5173\u952e\u5b57\u3002

\u8bf7\u6ce8\u610f\u4ee5\u4e0b\u51e0\u70b9\uff1a

  • \u6ce2\u6d6a\u53f7\u00a0 ~ \u00a0\u540e\u9762\u53ef\u4ee5\u6307\u5b9a\u4e00\u4e2a\u53ef\u9009\u7684\u53c2\u6570\uff0c\u7528\u4e8e\u63a7\u5236\u6a21\u7cca\u67e5\u8be2\u7684\u76f8\u4f3c\u5ea6\u3002
  • \u53c2\u6570\u503c\u8303\u56f4\u4e3a 0 \u5230 2 \u4e4b\u95f4\uff0c\u5176\u4e2d 0 \u8868\u793a\u5b8c\u5168\u5339\u914d\uff0c1 \u8868\u793a\u4e00\u6b21\u7f16\u8f91\u64cd\u4f5c\uff08\u5982\u589e\u52a0\u3001\u5220\u9664\u6216\u66ff\u6362\u5b57\u7b26\uff09\u5185\u53ef\u4ee5\u5339\u914d\uff0c2 \u8868\u793a\u4e24\u6b21\u7f16\u8f91\u64cd\u4f5c\u5185\u53ef\u4ee5\u5339\u914d\u3002
  • \u5982\u679c\u4e0d\u6307\u5b9a\u53c2\u6570\u503c\uff0c\u9ed8\u8ba4\u4f7f\u7528 0.5 \u4f5c\u4e3a\u76f8\u4f3c\u5ea6\u9608\u503c\u3002
  • \u6a21\u7cca\u67e5\u8be2\u5c06\u8fd4\u56de\u4e0e\u7ed9\u5b9a\u5173\u952e\u5b57\u76f8\u4f3c\u7684\u6587\u6863\uff0c\u4f46\u4f1a\u6709\u4e00\u5b9a\u7684\u6027\u80fd\u5f00\u9500\uff0c\u7279\u522b\u662f\u5bf9\u4e8e\u8f83\u5927\u7684\u7d22\u5f15\u3002
"},{"location":"admin/insight/reference/lucene.html#_4","title":"\u901a\u914d\u7b26","text":"

Lucene \u652f\u6301\u4ee5\u4e0b\u4e24\u79cd\u901a\u914d\u7b26\u67e5\u8be2\uff1a

  1. * \u901a\u914d\u7b26\uff1a * \u7528\u4e8e\u5339\u914d\u96f6\u4e2a\u6216\u591a\u4e2a\u5b57\u7b26\u3002

    \u4f8b\u5982\uff0c te*t \u00a0\u53ef\u4ee5\u5339\u914d \"test\"\u3001\"text\"\u3001\"tempest\" \u7b49\u3002

  2. ? \u901a\u914d\u7b26\uff1a ? \u7528\u4e8e\u5339\u914d\u5355\u4e2a\u5b57\u7b26\u3002

    \u4f8b\u5982\uff0c te?t \u00a0\u53ef\u4ee5\u5339\u914d \"test\"\u3001\"text\" \u7b49\u3002

"},{"location":"admin/insight/reference/lucene.html#_5","title":"\u4e3e\u4f8b\u8bf4\u660e","text":"
te?t\n

\u5728\u4e0a\u8ff0\u793a\u4f8b\u4e2d\uff0c te?t \u8868\u793a\u5339\u914d\u4ee5 \"te\" \u5f00\u5934\uff0c\u63a5\u7740\u662f\u4e00\u4e2a\u4efb\u610f\u5b57\u7b26\uff0c\u7136\u540e\u4ee5 \"t\" \u7ed3\u5c3e\u7684\u8bcd\u3002\u8fd9\u79cd\u67e5\u8be2\u53ef\u4ee5\u5339\u914d\u4f8b\u5982 \"test\"\u3001\"text\"\u3001\"tent\" \u7b49\u3002

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u95ee\u53f7\u53ea\u80fd\u4ee3\u8868\u4e00\u4e2a\u5b57\u7b26\uff0c\u5982\u679c\u60f3\u8981\u5339\u914d\u591a\u4e2a\u5b57\u7b26\u6216\u8005\u662f\u53ef\u53d8\u957f\u5ea6\u7684\u5b57\u7b26\uff0c\u53ef\u4ee5\u4f7f\u7528\u661f\u53f7 * \u8fdb\u884c\u591a\u5b57\u7b26\u901a\u914d\u7b26\u5339\u914d\u3002 \u53e6\u5916\uff0c\u95ee\u53f7\u4e0d\u4f1a\u5339\u914d\u7a7a\u5b57\u7b26\u4e32\u3002

\u603b\u7ed3\u4e00\u4e0b\uff0cLucene \u8bed\u6cd5\u4e2d\u7684\u95ee\u53f7 ? \u7528\u4f5c\u5355\u5b57\u7b26\u901a\u914d\u7b26\uff0c\u8868\u793a\u5339\u914d\u4efb\u610f\u4e00\u4e2a\u5b57\u7b26\u3002\u901a\u8fc7\u5728\u641c\u7d22\u5173\u952e\u5b57\u4e2d\u4f7f\u7528\u95ee\u53f7\uff0c\u60a8\u53ef\u4ee5\u8fdb\u884c\u66f4\u7075\u6d3b\u548c\u5177\u4f53\u7684\u6a21\u5f0f\u5339\u914d\u3002

"},{"location":"admin/insight/reference/lucene.html#_6","title":"\u8303\u56f4\u67e5\u8be2","text":"

Lucene \u8bed\u6cd5\u652f\u6301\u8303\u56f4\u67e5\u8be2\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u65b9\u62ec\u53f7 [ ] \u6216\u82b1\u62ec\u53f7 { } \u6765\u8868\u793a\u8303\u56f4\u3002\u4ee5\u4e0b\u662f\u8303\u56f4\u67e5\u8be2\u7684\u793a\u4f8b\uff1a

  1. \u5305\u542b\u8fb9\u754c\u7684\u8303\u56f4\u67e5\u8be2\uff1a

    • \u65b9\u62ec\u53f7\u00a0 [ ] \u00a0\u8868\u793a\u95ed\u533a\u95f4\uff0c\u5305\u542b\u8fb9\u754c\u503c\u3002
    • \u4f8b\u5982\uff1a field:[value1 TO value2] \u00a0\u8868\u793a\u00a0 field \u00a0\u7684\u53d6\u503c\u8303\u56f4\u4ece\u00a0 value1 \u00a0\u5230\u00a0 value2 \uff08\u5305\u542b\u4e24\u8005\uff09\u3002
  2. \u6392\u9664\u8fb9\u754c\u7684\u8303\u56f4\u67e5\u8be2\uff1a

    • \u82b1\u62ec\u53f7\u00a0 { } \u00a0\u8868\u793a\u5f00\u533a\u95f4\uff0c\u6392\u9664\u8fb9\u754c\u503c\u3002
    • \u4f8b\u5982\uff1a field:{value1 TO value2} \u00a0\u8868\u793a\u00a0 field \u00a0\u7684\u53d6\u503c\u8303\u56f4\u5728\u00a0 value1 \u00a0\u548c\u00a0 value2 \u00a0\u4e4b\u95f4\uff08\u4e0d\u5305\u542b\u4e24\u8005\uff09\u3002
  3. \u7701\u7565\u8fb9\u754c\u7684\u8303\u56f4\u67e5\u8be2\uff1a

    • \u53ef\u4ee5\u7701\u7565\u4e00\u4e2a\u6216\u4e24\u4e2a\u8fb9\u754c\u503c\u6765\u6307\u5b9a\u65e0\u9650\u8303\u56f4\u3002
    • \u4f8b\u5982\uff1a field:[value TO ] \u00a0\u8868\u793a\u00a0 field \u00a0\u7684\u53d6\u503c\u8303\u56f4\u4ece\u00a0 value \u00a0\u5230\u6b63\u65e0\u7a77\uff0c field:[ TO value] \u00a0\u8868\u793a\u00a0 field \u00a0\u7684\u53d6\u503c\u8303\u56f4\u4ece\u8d1f\u65e0\u7a77\u5230\u00a0 value \u3002

    Note

    \u8bf7\u6ce8\u610f\uff0c\u8303\u56f4\u67e5\u8be2\u53ea\u9002\u7528\u4e8e\u80fd\u591f\u8fdb\u884c\u6392\u5e8f\u7684\u5b57\u6bb5\u7c7b\u578b\uff0c\u5982\u6570\u5b57\u3001\u65e5\u671f\u7b49\u3002\u540c\u65f6\uff0c\u786e\u4fdd\u5728\u67e5\u8be2\u65f6\u5c06\u8fb9\u754c\u503c\u6b63\u786e\u5730\u6307\u5b9a\u4e3a\u5b57\u6bb5\u7684\u5b9e\u9645\u503c\u7c7b\u578b\u3002 \u5982\u679c\u60a8\u5e0c\u671b\u5728\u6574\u4e2a\u7d22\u5f15\u4e2d\u8fdb\u884c\u8303\u56f4\u67e5\u8be2\u800c\u4e0d\u6307\u5b9a\u7279\u5b9a\u5b57\u6bb5\uff0c\u53ef\u4ee5\u4f7f\u7528\u901a\u914d\u7b26\u67e5\u8be2 * \u6765\u4ee3\u66ff\u5b57\u6bb5\u540d\u3002

"},{"location":"admin/insight/reference/lucene.html#_7","title":"\u4e3e\u4f8b\u8bf4\u660e","text":"
  1. \u6307\u5b9a\u5b57\u6bb5

    timestamp:[2022-01-01 TO 2022-01-31]\n

    \u8fd9\u5c06\u68c0\u7d22 timestamp \u5b57\u6bb5\u5728 2022 \u5e74 1 \u6708 1 \u65e5\u5230 2022 \u5e74 1 \u6708 31 \u65e5\u4e4b\u95f4\u7684\u6570\u636e\u3002

  2. \u4e0d\u6307\u5b9a\u5b57\u6bb5

    *:[value1 TO value2]\n

    \u8fd9\u5c06\u5728\u6574\u4e2a\u7d22\u5f15\u4e2d\u641c\u7d22\u53d6\u503c\u8303\u56f4\u4ece value1 \u5230 value2 \u7684\u6587\u6863\u3002

"},{"location":"admin/insight/reference/lucene.html#insight","title":"Insight \u5e38\u7528\u5173\u952e\u5b57","text":""},{"location":"admin/insight/reference/lucene.html#_8","title":"\u5bb9\u5668\u65e5\u5fd7","text":"
  • kubernetes.container_image: \u5bb9\u5668\u955c\u50cf\u540d\u79f0
  • kubernetes.container_name: \u5bb9\u5668\u540d\u79f0
  • kubernetes.namespace_name: \u547d\u540d\u7a7a\u95f4\u540d\u79f0
  • kubernetes.pod_name: Pod \u540d\u79f0
  • log: \u65e5\u5fd7\u5185\u5bb9
  • time: \u65e5\u5fd7\u65f6\u95f4\u6233
"},{"location":"admin/insight/reference/lucene.html#_9","title":"\u4e3b\u673a\u65e5\u5fd7","text":"
  • syslog.file: \u65e5\u5fd7\u6587\u4ef6\u8def\u5f84
  • syslog.host: \u4e3b\u673a\u540d\u79f0
  • log: \u65e5\u5fd7\u5185\u5bb9

\u5982\u679c\u4f60\u60f3\u8981\u7cbe\u786e\u5339\u914d\u67d0\u4e2a\u7279\u5b9a\u7684\u503c\uff0c\u53ef\u4ee5\u5728\u5173\u952e\u5b57\u540e\u52a0\u5165 .keyword \u540e\u7f00\uff0c\u4f8b\u5982 kubernetes.container_name.keyword\u3002

"},{"location":"admin/insight/reference/lucene.html#_10","title":"\u793a\u4f8b","text":"
  1. \u67e5\u8be2\u6307\u5b9a Pod \u4e2d\u6307\u5b9a\u5bb9\u5668\u7684\u65e5\u5fd7

    kubernetes.pod_name.keyword:nginx-pod AND kubernetes.container_name.keyword:nginx\n
    2. \u67e5\u8be2 Pod \u540d\u79f0\u4e2d\u5305\u542b nginx-pod \u7684\u5bb9\u5668\u65e5\u5fd7

    kubernetes.pod_name:nginx-pod\n
"},{"location":"admin/insight/reference/notify-helper.html","title":"\u901a\u77e5\u6a21\u677f\u4f7f\u7528\u8bf4\u660e","text":""},{"location":"admin/insight/reference/notify-helper.html#go-template","title":"\u6a21\u677f\u8bed\u6cd5\uff08Go Template\uff09\u8bf4\u660e","text":"

\u544a\u8b66\u901a\u77e5\u6a21\u677f\u91c7\u7528\u4e86 Go Template \u8bed\u6cd5\u6765\u6e32\u67d3\u6a21\u677f\u3002

\u6a21\u677f\u4f1a\u57fa\u4e8e\u4e0b\u9762\u7684\u6570\u636e\u8fdb\u884c\u6e32\u67d3\u3002

{\n    \"status\": \"firing\",\n    \"labels\": {\n        \"alertgroup\": \"test-group\",           // \u544a\u8b66\u7b56\u7565\u540d\u79f0\n        \"alertname\": \"test-rule\",          // \u544a\u8b66\u89c4\u5219\u540d\u79f0\n        \"cluster\": \"35b54a48-b66c-467b-a8dc-503c40826330\",\n        \"customlabel1\": \"v1\",\n        \"customlabel2\": \"v2\",\n        \"endpoint\": \"https\",\n        \"group_id\": \"01gypg06fcdf7rmqc4ksv97646\",\n        \"instance\": \"10.6.152.85:6443\",\n        \"job\": \"apiserver\",\n        \"namespace\": \"default\",\n        \"prometheus\": \"insight-system/insight-agent-kube-prometh-prometheus\",\n        \"prometheus_replica\": \"prometheus-insight-agent-kube-prometh-prometheus-0\",\n        \"rule_id\": \"01gypg06fcyn2g9zyehbrvcdfn\",\n        \"service\": \"kubernetes\",\n        \"severity\": \"critical\",\n        \"target\": \"35b54a48-b66c-467b-a8dc-503c40826330\",\n        \"target_type\": \"cluster\"\n   },\n    \"annotations\": {\n        \"customanno1\": \"v1\",\n        \"customanno2\": \"v2\",\n        \"description\": \"\u8fd9\u662f\u4e00\u6761\u6d4b\u8bd5\u89c4\u5219\uff0c10.6.152.85:6443 down\",\n        \"value\": \"1\"\n    },\n    \"startsAt\": \"2023-04-20T07:53:54.637363473Z\",\n    \"endsAt\": \"0001-01-01T00:00:00Z\",\n    \"generatorURL\": \"http://vmalert-insight-victoria-metrics-k8s-stack-df987997b-npsl9:8080/vmalert/alert?group_id=16797738747470868115&alert_id=10071735367745833597\",\n    \"fingerprint\": \"25c8d93d5bf58ac4\"\n}\n
"},{"location":"admin/insight/reference/notify-helper.html#_2","title":"\u4f7f\u7528\u8bf4\u660e","text":"
  1. . \u5b57\u7b26

    \u5728\u5f53\u524d\u4f5c\u7528\u57df\u4e0b\u6e32\u67d3\u6307\u5b9a\u5bf9\u8c61\u3002

    \u793a\u4f8b 1: \u53d6\u9876\u7ea7\u4f5c\u7528\u57df\u4e0b\u7684\u6240\u6709\u5185\u5bb9\uff0c\u5373\u793a\u4f8b\u4ee3\u7801\u4e2d\u4e0a\u4e0b\u6587\u6570\u636e\u7684\u5168\u90e8\u5185\u5bb9\u3002

    {{ . }}\n
  2. \u5224\u65ad\u8bed\u53e5 if / else

    \u4f7f\u7528 if \u68c0\u67e5\u6570\u636e\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\u53ef\u4ee5\u6267\u884c else\u3002

    {{if .Labels.namespace }}\u547d\u540d\u7a7a\u95f4\uff1a{{ .Labels.namespace }} \\n{{ end }}\n
  3. \u5faa\u73af\u51fd\u6570 for

    for \u51fd\u6570\u7528\u4e8e\u91cd\u590d\u6267\u884c\u4ee3\u7801\u5185\u5bb9\u3002

    \u793a\u4f8b 1: \u904d\u5386 labels \u5217\u8868\uff0c\u83b7\u53d6\u544a\u8b66\u7684\u6240\u6709 label \u5185\u5bb9\u3002

    {{ for .Labels}} \\n {{end}}\n
"},{"location":"admin/insight/reference/notify-helper.html#functions","title":"\u51fd\u6570\u8bf4\u660e FUNCTIONS","text":"

Insight \u7684\u201d\u901a\u77e5\u6a21\u677f\u201c\u548c\u201d\u77ed\u4fe1\u6a21\u677f\u201c\u652f\u6301 70 \u591a\u4e2a sprig \u51fd\u6570\uff0c\u4ee5\u53ca\u81ea\u7814\u7684\u51fd\u6570\u3002

"},{"location":"admin/insight/reference/notify-helper.html#sprig","title":"Sprig \u51fd\u6570","text":"

Sprig \u5185\u7f6e\u4e86 70 \u591a\u79cd\u5e38\u89c1\u7684\u6a21\u677f\u51fd\u6570\u5e2e\u52a9\u6e32\u67d3\u6570\u636e\u3002\u4ee5\u4e0b\u5217\u4e3e\u5e38\u89c1\u51fd\u6570\uff1a

  • \u65f6\u95f4\u64cd\u4f5c
  • \u5b57\u7b26\u4e32\u64cd\u4f5c
  • \u7c7b\u578b\u8f6c\u6362\u64cd\u4f5c
  • \u6574\u6570\u7684\u6570\u5b66\u8ba1\u7b97

\u66f4\u591a\u7ec6\u8282\u53ef\u4ee5\u67e5\u770b\u5b98\u65b9\u6587\u6863\u3002

"},{"location":"admin/insight/reference/notify-helper.html#_3","title":"\u81ea\u7814\u51fd\u6570","text":""},{"location":"admin/insight/reference/notify-helper.html#toclustername","title":"toClusterName","text":"

toClusterName \u51fd\u6570\u6839\u636e\u201c\u96c6\u7fa4\u552f\u4e00\u6807\u793a Id\u201d\u67e5\u8be2\u201c\u96c6\u7fa4\u540d\u201d\uff1b\u5982\u679c\u67e5\u8be2\u4e0d\u5230\u5bf9\u5e94\u7684\u96c6\u7fa4\uff0c\u5c06\u76f4\u63a5\u8fd4\u56de\u4f20\u5165\u7684\u96c6\u7fa4\u7684\u552f\u4e00\u6807\u793a\u3002

func toClusterName(id string) (string, error)\n

\u793a\u4f8b\uff1a

{{ toClusterName \"clusterId\" }}\n{{ \"clusterId\" | toClusterName }}\n
"},{"location":"admin/insight/reference/notify-helper.html#toclusterid","title":"toClusterId","text":"

toClusterId \u51fd\u6570\u6839\u636e\u201c\u96c6\u7fa4\u540d\u201d\u67e5\u8be2\u201c\u96c6\u7fa4\u552f\u4e00\u6807\u793a Id\u201d\uff1b\u5982\u679c\u67e5\u8be2\u4e0d\u5230\u5bf9\u5e94\u7684\u96c6\u7fa4\uff0c\u5c06\u76f4\u63a5\u8fd4\u56de\u4f20\u5165\u7684\u96c6\u7fa4\u540d\u3002

func toClusterId(name string) (string, error)\n

\u793a\u4f8b\uff1a

{{ toClusterId \"clusterName\" }}\n{{ \"clusterName\" | toClusterId }}\n
"},{"location":"admin/insight/reference/notify-helper.html#todateinzone","title":"toDateInZone","text":"

toDateInZone \u6839\u636e\u5b57\u7b26\u4e32\u65f6\u95f4\u8f6c\u6362\u6210\u6240\u9700\u7684\u65f6\u95f4\uff0c\u5e76\u8fdb\u884c\u683c\u5f0f\u5316\u3002

func toDateInZone(fmt string, date interface{}, zone string) string\n

\u793a\u4f8b 1\uff1a

{{ toDateInZone \"2006-01-02T15:04:05\" \"2022-08-15T05:59:08.064449533Z\" \"Asia/Shanghai\" }}\n

\u5c06\u83b7\u5f97\u8fd4\u56de\u503c 2022-08-15T13:59:08 \u3002\u6b64\u5916\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7 sprig \u5185\u7f6e\u7684\u51fd\u6570\u8fbe\u5230 toDateInZone \u7684\u6548\u679c\uff1a

{{ dateInZone \"2006-01-02T15:04:05\" (toDate \"2006-01-02T15:04:05Z07:00\" .StartsAt) \"Asia/Shanghai\" }}\n

\u793a\u4f8b 2\uff1a

{{ toDateInZone \"2006-01-02T15:04:05\" .StartsAt \"Asia/Shanghai\" }}\n\n## \u9608\u503c\u6a21\u677f\u8bf4\u660e\n\nInsight \u5185\u7f6e Webhook \u544a\u8b66\u6a21\u677f\u5982\u4e0b\uff0c\u5176\u4ed6\u5982\u90ae\u4ef6\u3001\u4f01\u4e1a\u5fae\u4fe1\u7b49\u5185\u5bb9\u76f8\u540c\uff0c\u53ea\u662f\u5bf9\u6362\u884c\u8fdb\u884c\u76f8\u5e94\u8c03\u6574\u3002\n\n```text\n\u89c4\u5219\u540d\u79f0\uff1a{{ .Labels.alertname }} \\n\n\u7b56\u7565\u540d\u79f0\uff1a{{ .Labels.alertgroup }} \\n\n\u544a\u8b66\u7ea7\u522b\uff1a{{ .Labels.severity }} \\n\n\u96c6\u7fa4\uff1a{{ .Labels.cluster }} \\n\n{{if .Labels.namespace }}\u547d\u540d\u7a7a\u95f4\uff1a{{ .Labels.namespace }} \\n{{ end }}\n{{if .Labels.node }}\u8282\u70b9\uff1a{{ .Labels.node }} \\n{{ end }}\n\u8d44\u6e90\u7c7b\u578b\uff1a{{ .Labels.target_type }} \\n\n{{if .Labels.target }}\u8d44\u6e90\u540d\u79f0\uff1a{{ .Labels.target }} \\n{{ end }}\n\u89e6\u53d1\u503c\uff1a{{ .Annotations.value }} \\n\n\u53d1\u751f\u65f6\u95f4\uff1a{{ .StartsAt }} \\n\n{{if ne \"0001-01-01T00:00:00Z\" .EndsAt }}\u7ed3\u675f\u65f6\u95f4\uff1a{{ .EndsAt }} \\n{{ end }}\n\u63cf\u8ff0\uff1a{{ .Annotations.description }} \\n\n
"},{"location":"admin/insight/reference/notify-helper.html#_4","title":"\u90ae\u7bb1\u4e3b\u9898\u53c2\u6570","text":"

\u7531\u4e8e Insight \u5728\u53d1\u9001\u544a\u8b66\u6d88\u606f\u65f6\uff0c\u4f1a\u5bf9\u540c\u4e00\u65f6\u95f4\u540c\u4e00\u6761\u89c4\u5219\u4ea7\u751f\u7684\u6d88\u606f\u8fdb\u884c\u5408\u5e76\u53d1\u9001\uff0c \u6240\u4ee5 email \u4e3b\u9898\u4e0d\u540c\u4e8e\u4e0a\u9762\u56db\u79cd\u6a21\u677f\uff0c\u53ea\u4f1a\u4f7f\u7528\u544a\u8b66\u6d88\u606f\u4e2d\u7684 commonLabels \u5185\u5bb9\u5bf9\u6a21\u677f\u8fdb\u884c\u6e32\u67d3\u3002\u9ed8\u8ba4\u6a21\u677f\u5982\u4e0b:

[{{ .status }}] [{{ .severity }}] \u544a\u8b66\uff1a{{ .alertname }}\n

\u5176\u4ed6\u53ef\u4f5c\u4e3a\u90ae\u7bb1\u4e3b\u9898\u7684\u5b57\u6bb5\u5982\u4e0b:

{{ .status }} \u544a\u8b66\u6d88\u606f\u7684\u89e6\u53d1\u72b6\u6001\n{{ .alertgroup }} \u544a\u8b66\u6240\u5c5e\u7684\u7b56\u7565\u540d\u79f0\n{{ .alertname }} \u544a\u8b66\u6240\u5c5e\u7684\u89c4\u5219\u540d\u79f0\n{{ .severity }} \u544a\u8b66\u7ea7\u522b\n{{ .target_type }} \u544a\u8b66\u8d44\u6e90\u7c7b\u578b\n{{ .target }} \u544a\u8b66\u8d44\u6e90\u5bf9\u8c61\n{{ .\u89c4\u5219\u5176\u4ed6\u81ea\u5b9a\u4e49 label key }}\n
"},{"location":"admin/insight/reference/tailing-sidecar.html","title":"\u901a\u8fc7 Sidecar \u91c7\u96c6\u5bb9\u5668\u65e5\u5fd7","text":"

Tailing Sidecar \u662f\u4e00\u4e2a\u6d41\u5f0f Sidecar \u5bb9\u5668\uff0c \u662f Kubernetes \u96c6\u7fa4\u7ea7\u7684\u65e5\u5fd7\u4ee3\u7406\u3002Tailing Sidercar \u53ef\u4ee5\u5728\u5bb9\u5668\u65e0\u6cd5\u5199\u5165\u6807\u51c6\u8f93\u51fa\u6216\u6807\u51c6\u9519\u8bef\u6d41\u65f6\uff0c\u65e0\u9700\u66f4\u6539\uff0c\u5373\u53ef\u81ea\u52a8\u6536\u53d6\u548c\u6c47\u603b\u5bb9\u5668\u5185\u65e5\u5fd7\u6587\u4ef6\u3002

Insight \u652f\u6301\u901a\u8fc7 Sidercar \u6a21\u5f0f\u91c7\u96c6\u65e5\u5fd7\uff0c\u5373\u5728\u6bcf\u4e2a Pod \u4e2d\u8fd0\u884c\u4e00\u4e2a Sidecar \u5bb9\u5668\u5c06\u65e5\u5fd7\u6570\u636e\u8f93\u51fa\u5230\u6807\u51c6\u8f93\u51fa\u6d41\uff0c\u4ee5\u4fbf FluentBit \u6536\u96c6\u5bb9\u5668\u65e5\u5fd7\u3002

Insight Agent \u4e2d\u9ed8\u8ba4\u5b89\u88c5\u4e86 tailing-sidecar operator \u3002 \u82e5\u60a8\u60f3\u5f00\u542f\u91c7\u96c6\u5bb9\u5668\u5185\u6587\u4ef6\u65e5\u5fd7\uff0c\u8bf7\u901a\u8fc7\u7ed9 Pod \u6dfb\u52a0\u6ce8\u89e3\u8fdb\u884c\u6807\u8bb0\uff0c tailing-sidecar operator \u5c06\u81ea\u52a8\u6ce8\u5165 Tailing Sidecar \u5bb9\u5668\uff0c \u88ab\u6ce8\u5165\u7684 Sidecar \u5bb9\u5668\u8bfb\u53d6\u4e1a\u52a1\u5bb9\u5668\u5185\u7684\u6587\u4ef6\uff0c\u5e76\u8f93\u51fa\u5230\u6807\u51c6\u8f93\u51fa\u6d41\u3002

\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

  1. \u4fee\u6539 Pod \u7684 YAML \u6587\u4ef6\uff0c\u5728 annotation \u5b57\u6bb5\u589e\u52a0\u5982\u4e0b\u53c2\u6570\uff1a

    metadata:\n  annotations:\n    tailing-sidecar:  <sidecar-name-0>:<volume-name-0>:<path-to-tail-0>;<sidecar-name-1>:<volume-name-1>:<path-to-tail-1>\n

    \u5b57\u6bb5\u8bf4\u660e\uff1a

    • sidecar-name-0 \uff1atailing sidecar \u5bb9\u5668\u540d\u79f0\uff08\u53ef\u9009\uff0c\u5982\u679c\u672a\u6307\u5b9a\u5bb9\u5668\u540d\u79f0\u5c06\u81ea\u52a8\u521b\u5efa\uff0c\u5b83\u5c06\u4ee5\u201ctailing-sidecar\u201d\u524d\u7f00\u5f00\u5934\uff09
    • volume-name-0 \uff1a\u5b58\u50a8\u5377\u540d\u79f0\uff1b
    • path-to-tail-0 \uff1a\u65e5\u5fd7\u7684\u6587\u4ef6\u8def\u5f84

    Note

    \u6bcf\u4e2a Pod \u53ef\u8fd0\u884c\u591a\u4e2a Sidecar \u5bb9\u5668\uff0c\u53ef\u4ee5\u901a\u8fc7 ; \u9694\u79bb\uff0c\u5b9e\u73b0\u4e0d\u540c Sidecar \u5bb9\u5668\u91c7\u96c6\u591a\u4e2a\u6587\u4ef6\u5230\u591a\u4e2a\u5b58\u50a8\u5377\u3002

  2. \u91cd\u542f Pod\uff0c\u5f85 Pod \u72b6\u6001\u53d8\u6210 \u8fd0\u884c\u4e2d \u540e\uff0c\u5219\u53ef\u901a\u8fc7 \u65e5\u5fd7\u67e5\u8be2 \u754c\u9762\uff0c\u67e5\u627e\u8be5 Pod \u7684\u5bb9\u5668\u5185\u65e5\u5fd7\u3002

"},{"location":"admin/insight/reference/used-metric-in-insight.html","title":"Insight \u53c2\u8003\u6307\u6807\u8bf4\u660e","text":"

\u672c\u6587\u4e2d\u7684\u6307\u6807\u662f\u57fa\u4e8e\u793e\u533a\u7684 kube-prometheus \u7684\u57fa\u7840\u4e4b\u4e0a\u6574\u7406\u800c\u6210\u3002 \u76ee\u524d\u6db5\u76d6\u4e86 Cluster\u3001Node\u3001Namespace\u3001Workload \u7b49\u591a\u4e2a\u5c42\u9762\u7684\u6307\u6807\u3002 \u672c\u6587\u679a\u4e3e\u4e86\u4e00\u4e9b\u5e38\u7528\u7684\u6307\u6807\u540d\u3001\u4e2d\u6587\u63cf\u8ff0\u548c\u5355\u4f4d\uff0c\u4ee5\u4fbf\u7d22\u5f15\u3002

"},{"location":"admin/insight/reference/used-metric-in-insight.html#cluster","title":"\u96c6\u7fa4\uff08Cluster\uff09","text":"\u6307\u6807\u540d \u4e2d\u6587\u63cf\u8ff0 \u5355\u4f4d cluster_cpu_utilization \u96c6\u7fa4 CPU \u4f7f\u7528\u7387 cluster_cpu_total \u96c6\u7fa4 CPU \u603b\u91cf Core cluster_cpu_usage \u96c6\u7fa4 CPU \u7528\u91cf Core cluster_cpu_requests_commitment \u96c6\u7fa4 CPU \u5206\u914d\u7387 cluster_memory_utilization \u96c6\u7fa4\u5185\u5b58\u4f7f\u7528\u7387 cluster_memory_usage \u96c6\u7fa4\u5185\u5b58\u4f7f\u7528\u91cf Byte cluster_memory_available \u96c6\u7fa4\u53ef\u7528\u5185\u5b58 Byte cluster_memory_requests_commitment \u96c6\u7fa4\u5185\u5b58\u5206\u914d\u7387 cluster_memory_total \u96c6\u7fa4\u5185\u5b58\u53ef\u7528\u91cf Byte cluster_net_utilization \u96c6\u7fa4\u7f51\u7edc\u6570\u636e\u4f20\u8f93\u901f\u7387 Byte/s cluster_net_bytes_transmitted \u96c6\u7fa4\u7f51\u7edc\u6570\u636e\u53d1\u9001 (\u4e0a\u884c) \u901f\u7387 Byte/s cluster_net_bytes_received \u96c6\u7fa4\u7f51\u7edc\u6570\u636e\u63a5\u53d7 (\u4e0b\u884c) \u901f\u7387 Byte/s cluster_disk_read_iops \u96c6\u7fa4\u78c1\u76d8\u6bcf\u79d2\u8bfb\u6b21\u6570 \u6b21/s cluster_disk_write_iops \u96c6\u7fa4\u78c1\u76d8\u6bcf\u79d2\u5199\u6b21\u6570 \u6b21/s cluster_disk_read_throughput \u96c6\u7fa4\u78c1\u76d8\u6bcf\u79d2\u8bfb\u53d6\u6570\u636e\u91cf Byte/s cluster_disk_write_throughput \u96c6\u7fa4\u78c1\u76d8\u6bcf\u79d2\u5199\u5165\u6570\u636e\u91cf Byte/s cluster_disk_size_capacity \u96c6\u7fa4\u78c1\u76d8\u603b\u5bb9\u91cf Byte cluster_disk_size_available \u96c6\u7fa4\u78c1\u76d8\u53ef\u7528\u5927\u5c0f Byte cluster_disk_size_usage \u96c6\u7fa4\u78c1\u76d8\u4f7f\u7528\u91cf Byte cluster_disk_size_utilization \u96c6\u7fa4\u78c1\u76d8\u4f7f\u7528\u7387 cluster_node_total \u96c6\u7fa4\u8282\u70b9\u603b\u6570 \u4e2a cluster_node_online \u96c6\u7fa4\u8282\u70b9\u603b\u6570 \u4e2a cluster_node_offline_count \u96c6\u7fa4\u5931\u8054\u7684\u8282\u70b9\u4e2a\u6570 \u4e2a cluster_pod_count \u96c6\u7fa4 Pod \u603b\u6570 \u4e2a cluster_pod_running_count \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c Pod \u4e2a\u6570 \u4e2a cluster_pod_abnormal_count \u96c6\u7fa4\u5f02\u5e38\u8fd0\u884c Pod \u4e2a\u6570 \u4e2a cluster_deployment_count \u96c6\u7fa4 Deployment \u603b\u6570 \u4e2a cluster_deployment_normal_count \u96c6\u7fa4\u6b63\u5e38\u7684 Deployment \u603b\u6570 \u4e2a cluster_deployment_abnormal_count \u96c6\u7fa4\u5f02\u5e38\u7684 Deployment \u603b\u6570 \u4e2a cluster_statefulset_count \u96c6\u7fa4 StatefulSet \u4e2a\u6570 \u4e2a cluster_statefulset_normal_count \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c StatefulSet \u4e2a\u6570 \u4e2a cluster_statefulset_abnormal_count \u96c6\u7fa4\u5f02\u5e38\u8fd0\u884c StatefulSet \u4e2a\u6570 \u4e2a cluster_daemonset_count \u96c6\u7fa4 DaemonSet \u4e2a\u6570 \u4e2a cluster_daemonset_normal_count \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c DaemonSet \u4e2a\u6570 \u4e2a cluster_daemonset_abnormal_count \u96c6\u7fa4\u5f02\u5e38\u8fd0\u884c DaemonSet \u4e2a\u6570 \u4e2a cluster_job_count \u96c6\u7fa4 Job \u603b\u6570 \u4e2a cluster_job_normal_count \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c Job \u4e2a\u6570 \u4e2a cluster_job_abnormal_count \u96c6\u7fa4\u5f02\u5e38\u8fd0\u884c Job \u4e2a\u6570 \u4e2a

Tip

\u4f7f\u7528\u7387\u4e00\u822c\u662f\uff080,1] \u533a\u95f4\u7684\u6570\u5b57\uff08\u4f8b\u5982\uff1a0.21\uff0c\u800c\u4e0d\u662f 21%\uff09

"},{"location":"admin/insight/reference/used-metric-in-insight.html#node","title":"\u8282\u70b9\uff08Node\uff09","text":"\u6307\u6807\u540d \u4e2d\u6587\u63cf\u8ff0 \u5355\u4f4d node_cpu_utilization \u8282\u70b9 CPU \u4f7f\u7528\u7387 node_cpu_total \u8282\u70b9 CPU \u603b\u91cf Core node_cpu_usage \u8282\u70b9 CPU \u7528\u91cf Core node_cpu_requests_commitment \u8282\u70b9 CPU \u5206\u914d\u7387 node_memory_utilization \u8282\u70b9\u5185\u5b58\u4f7f\u7528\u7387 node_memory_usage \u8282\u70b9\u5185\u5b58\u4f7f\u7528\u91cf Byte node_memory_requests_commitment \u8282\u70b9\u5185\u5b58\u5206\u914d\u7387 node_memory_available \u8282\u70b9\u53ef\u7528\u5185\u5b58 Byte node_memory_total \u8282\u70b9\u5185\u5b58\u53ef\u7528\u91cf Byte node_net_utilization \u8282\u70b9\u7f51\u7edc\u6570\u636e\u4f20\u8f93\u901f\u7387 Byte/s node_net_bytes_transmitted \u8282\u70b9\u7f51\u7edc\u6570\u636e\u53d1\u9001 (\u4e0a\u884c) \u901f\u7387 Byte/s node_net_bytes_received \u8282\u70b9\u7f51\u7edc\u6570\u636e\u63a5\u53d7 (\u4e0b\u884c) \u901f\u7387 Byte/s node_disk_read_iops \u8282\u70b9\u78c1\u76d8\u6bcf\u79d2\u8bfb\u6b21\u6570 \u6b21/s node_disk_write_iops \u8282\u70b9\u78c1\u76d8\u6bcf\u79d2\u5199\u6b21\u6570 \u6b21/s node_disk_read_throughput \u8282\u70b9\u78c1\u76d8\u6bcf\u79d2\u8bfb\u53d6\u6570\u636e\u91cf Byte/s node_disk_write_throughput \u8282\u70b9\u78c1\u76d8\u6bcf\u79d2\u5199\u5165\u6570\u636e\u91cf Byte/s node_disk_size_capacity \u8282\u70b9\u78c1\u76d8\u603b\u5bb9\u91cf Byte node_disk_size_available \u8282\u70b9\u78c1\u76d8\u53ef\u7528\u5927\u5c0f Byte node_disk_size_usage \u8282\u70b9\u78c1\u76d8\u4f7f\u7528\u91cf Byte node_disk_size_utilization \u8282\u70b9\u78c1\u76d8\u4f7f\u7528\u7387"},{"location":"admin/insight/reference/used-metric-in-insight.html#workload","title":"\u5de5\u4f5c\u8d1f\u8f7d\uff08Workload\uff09","text":"

\u76ee\u524d\u652f\u6301\u7684\u5de5\u4f5c\u8d1f\u8f7d\u7c7b\u578b\u5305\u62ec\uff1aDeployment\u3001StatefulSet\u3001DaemonSet\u3001Job \u548c CronJob\u3002

\u6307\u6807\u540d \u4e2d\u6587\u63cf\u8ff0 \u5355\u4f4d workload_cpu_usage \u5de5\u4f5c\u8d1f\u8f7d CPU \u7528\u91cf Core workload_cpu_limits \u5de5\u4f5c\u8d1f\u8f7d CPU \u9650\u5236\u91cf Core workload_cpu_requests \u5de5\u4f5c\u8d1f\u8f7d CPU \u8bf7\u6c42\u91cf Core workload_cpu_utilization \u5de5\u4f5c\u8d1f\u8f7d CPU \u4f7f\u7528\u7387 workload_memory_usage \u5de5\u4f5c\u8d1f\u8f7d\u5185\u5b58\u4f7f\u7528\u91cf Byte workload_memory_limits \u5de5\u4f5c\u8d1f\u8f7d \u5185\u5b58 \u9650\u5236\u91cf Byte workload_memory_requests \u5de5\u4f5c\u8d1f\u8f7d \u5185\u5b58 \u8bf7\u6c42\u91cf Byte workload_memory_utilization \u5de5\u4f5c\u8d1f\u8f7d\u5185\u5b58\u4f7f\u7528\u7387 workload_memory_usage_cached \u5de5\u4f5c\u8d1f\u8f7d\u5185\u5b58\u4f7f\u7528\u91cf\uff08\u5305\u542b\u7f13\u5b58\uff09 Byte workload_net_bytes_transmitted \u5de5\u4f5c\u8d1f\u8f7d\u7f51\u7edc\u6570\u636e\u53d1\u9001\u901f\u7387 Byte/s workload_net_bytes_received \u5de5\u4f5c\u8d1f\u8f7d\u7f51\u7edc\u6570\u636e\u63a5\u53d7\u901f\u7387 Byte/s workload_disk_read_throughput \u5de5\u4f5c\u8d1f\u8f7d\u78c1\u76d8\u6bcf\u79d2\u8bfb\u53d6\u6570\u636e\u91cf Byte/s workload_disk_write_throughput \u5de5\u4f5c\u8d1f\u8f7d\u78c1\u76d8\u6bcf\u79d2\u5199\u5165\u6570\u636e\u91cf Byte/s
  1. \u6b64\u5904\u8ba1\u7b97 workload \u603b\u91cf
  2. \u901a\u8fc7 workload_cpu_usage{workload_type=\"deployment\", workload=\"prometheus\"} \u7684\u65b9\u5f0f\u83b7\u53d6\u6307\u6807
  3. workload_pod_utilization \u8ba1\u7b97\u89c4\u5219\uff1a workload_pod_usage / workload_pod_request
"},{"location":"admin/insight/reference/used-metric-in-insight.html#pod","title":"\u5bb9\u5668\u7ec4\uff08Pod\uff09","text":"\u6307\u6807\u540d \u4e2d\u6587\u63cf\u8ff0 \u5355\u4f4d pod_cpu_usage \u5bb9\u5668\u7ec4 CPU \u7528\u91cf Core pod_cpu_limits \u5bb9\u5668\u7ec4 CPU \u9650\u5236\u91cf Core pod_cpu_requests \u5bb9\u5668\u7ec4 CPU \u8bf7\u6c42\u91cf Core pod_cpu_utilization \u5bb9\u5668\u7ec4 CPU \u4f7f\u7528\u7387 pod_memory_usage \u5bb9\u5668\u7ec4\u5185\u5b58\u4f7f\u7528\u91cf Byte pod_memory_limits \u5bb9\u5668\u7ec4\u5185\u5b58\u9650\u5236\u91cf Byte pod_memory_requests \u5bb9\u5668\u7ec4\u5185\u5b58\u8bf7\u6c42\u91cf Byte pod_memory_utilization \u5bb9\u5668\u7ec4\u5185\u5b58\u4f7f\u7528\u7387 pod_memory_usage_cached \u5bb9\u5668\u7ec4\u5185\u5b58\u4f7f\u7528\u91cf\uff08\u5305\u542b\u7f13\u5b58\uff09 Byte pod_net_bytes_transmitted \u5bb9\u5668\u7ec4\u7f51\u7edc\u6570\u636e\u53d1\u9001\u901f\u7387 Byte/s pod_net_bytes_received \u5bb9\u5668\u7ec4\u7f51\u7edc\u6570\u636e\u63a5\u53d7\u901f\u7387 Byte/s pod_disk_read_throughput \u5bb9\u5668\u7ec4\u78c1\u76d8\u6bcf\u79d2\u8bfb\u53d6\u6570\u636e\u91cf Byte/s pod_disk_write_throughput \u5bb9\u5668\u7ec4\u78c1\u76d8\u6bcf\u79d2\u5199\u5165\u6570\u636e\u91cf Byte/s

\u901a\u8fc7 pod_cpu_usage{workload_type=\"deployment\", workload=\"prometheus\"} \u83b7\u53d6\u540d\u4e3a prometheus \u7684 Deployment \u6240\u62e5\u6709\u7684\u6240\u6709 Pod \u7684 CPU \u4f7f\u7528\u7387\u3002

"},{"location":"admin/insight/reference/used-metric-in-insight.html#span","title":"Span \u6307\u6807","text":"\u6307\u6807\u540d \u4e2d\u6587\u63cf\u8ff0 \u5355\u4f4d calls_total \u670d\u52a1\u8bf7\u6c42\u603b\u6570 duration_milliseconds_bucket \u670d\u52a1\u5ef6\u65f6\u76f4\u65b9\u56fe duration_milliseconds_sum \u670d\u52a1\u603b\u5ef6\u65f6 ms duration_milliseconds_count \u670d\u52a1\u5ef6\u65f6\u8bb0\u5f55\u6761\u6570 otelcol_processor_groupbytrace_spans_released \u91c7\u96c6\u5230\u7684 span \u6570 otelcol_processor_groupbytrace_traces_released \u91c7\u96c6\u5230\u7684 trace \u6570 traces_service_graph_request_total \u670d\u52a1\u8bf7\u6c42\u603b\u6570 (\u62d3\u6251\u529f\u80fd\u4f7f\u7528) traces_service_graph_request_server_seconds_sum \u670d\u52a1\u603b\u5ef6\u65f6 (\u62d3\u6251\u529f\u80fd\u4f7f\u7528) ms traces_service_graph_request_server_seconds_bucket \u670d\u52a1\u5ef6\u65f6\u76f4\u65b9\u56fe (\u62d3\u6251\u529f\u80fd\u4f7f\u7528) traces_service_graph_request_server_seconds_count \u670d\u52a1\u8bf7\u6c42\u603b\u6570 (\u62d3\u6251\u529f\u80fd\u4f7f\u7528)"},{"location":"admin/insight/system-config/modify-config.html","title":"\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e","text":"

\u53ef\u89c2\u6d4b\u6027\u4f1a\u9ed8\u8ba4\u6301\u4e45\u5316\u4fdd\u5b58\u6307\u6807\u3001\u65e5\u5fd7\u3001\u94fe\u8def\u7684\u6570\u636e\uff0c\u60a8\u53ef\u53c2\u9605\u672c\u6587\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e\u3002\u8be5\u6587\u6863\u4ec5\u9002\u7528\u4e8e\u5185\u7f6e\u90e8\u7f72\u7684 Elasticsearch\uff0c\u82e5\u4f7f\u7528\u5916\u90e8 Elasticsearch \u53ef\u81ea\u884c\u8c03\u6574\u3002

"},{"location":"admin/insight/system-config/modify-config.html#_2","title":"\u5982\u4f55\u4fee\u6539\u6307\u6807\u6570\u636e\u4fdd\u7559\u671f\u9650","text":"

\u5148 ssh \u767b\u5f55\u5230\u5bf9\u5e94\u7684\u8282\u70b9\uff0c\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u6307\u6807\u6570\u636e\u4fdd\u7559\u671f\u9650\u3002

  1. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

    kubectl edit vmcluster insight-victoria-metrics-k8s-stack -n insight-system\n
  2. \u5728 Yaml \u6587\u4ef6\u4e2d\uff0c retentionPeriod \u7684\u9ed8\u8ba4\u503c\u4e3a 14 \uff0c\u5355\u4f4d\u4e3a \u5929 \u3002\u60a8\u53ef\u6839\u636e\u9700\u6c42\u4fee\u6539\u53c2\u6570\u3002

    apiVersion: operator.victoriametrics.com/v1beta1\nkind: VMCluster\nmetadata:\n  annotations:\n    meta.helm.sh/release-name: insight\n    meta.helm.sh/release-namespace: insight-system\n  creationTimestamp: \"2022-08-25T04:31:02Z\"\n  finalizers:\n  - apps.victoriametrics.com/finalizer\n  generation: 2\n  labels:\n    app.kubernetes.io/instance: insight\n    app.kubernetes.io/managed-by: Helm\n    app.kubernetes.io/name: victoria-metrics-k8s-stack\n    app.kubernetes.io/version: 1.77.2\n    helm.sh/chart: victoria-metrics-k8s-stack-0.9.3\n  name: insight-victoria-metrics-k8s-stack\n  namespace: insight-system\n  resourceVersion: \"123007381\"\n  uid: 55cee8d6-c651-404b-b2c9-50603b405b54\nspec:\n  replicationFactor: 1\n  retentionPeriod: \"14\"\n  vminsert:\n    extraArgs:\n      maxLabelsPerTimeseries: \"45\"\n    image:\n      repository: docker.m.daocloud.io/victoriametrics/vminsert\n      tag: v1.80.0-cluster\n      replicaCount: 1\n
  3. \u4fdd\u5b58\u4fee\u6539\u540e\uff0c\u8d1f\u8d23\u5b58\u50a8\u6307\u6807\u7684\u7ec4\u4ef6\u7684\u5bb9\u5668\u7ec4\u4f1a\u81ea\u52a8\u91cd\u542f\uff0c\u7a0d\u7b49\u7247\u523b\u5373\u53ef\u3002

"},{"location":"admin/insight/system-config/modify-config.html#_3","title":"\u5982\u4f55\u4fee\u6539\u65e5\u5fd7\u6570\u636e\u5b58\u50a8\u65f6\u957f","text":"

\u5148 ssh \u767b\u5f55\u5230\u5bf9\u5e94\u7684\u8282\u70b9\uff0c\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u65e5\u5fd7\u6570\u636e\u4fdd\u7559\u671f\u9650\uff1a

"},{"location":"admin/insight/system-config/modify-config.html#json","title":"\u65b9\u6cd5\u4e00\uff1a\u4fee\u6539 Json \u6587\u4ef6","text":"
  1. \u4fee\u6539\u4ee5\u4e0b\u6587\u4ef6\u4e2d rollover \u5b57\u6bb5\u4e2d\u7684 max_age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002\u6ce8\u610f\u9700\u8981\u4fee\u6539\u7b2c\u4e00\u884c\u4e2d\u7684 Elastic \u7528\u6237\u540d\u548c\u5bc6\u7801\u3001IP \u5730\u5740\u548c\u7d22\u5f15\u3002

    curl  --insecure --location -u\"elastic:amyVt4o826e322TUVi13Ezw6\" -X PUT \"https://172.30.47.112:30468/_ilm/policy/insight-es-k8s-logs-policy?pretty\" -H 'Content-Type: application/json' -d'\n{\n    \"policy\": {\n        \"phases\": {\n            \"hot\": {\n                \"min_age\": \"0ms\",\n                \"actions\": {\n                    \"set_priority\": {\n                        \"priority\": 100\n                    },\n                    \"rollover\": {\n                        \"max_age\": \"8d\",\n                        \"max_size\": \"10gb\"\n                    }\n                }\n            },\n            \"warm\": {\n                \"min_age\": \"10d\",\n                \"actions\": {\n                    \"forcemerge\": {\n                        \"max_num_segments\": 1\n                    }\n                }\n            },\n            \"delete\": {\n                \"min_age\": \"30d\",\n                \"actions\": {\n                    \"delete\": {}\n                }\n            }\n        }\n    }\n}'\n
  2. \u4fee\u6539\u5b8c\u540e\uff0c\u6267\u884c\u4ee5\u4e0a\u547d\u4ee4\u3002\u5b83\u4f1a\u6253\u5370\u51fa\u5982\u4e0b\u6240\u793a\u5185\u5bb9\uff0c\u5219\u4fee\u6539\u6210\u529f\u3002

    {\n\"acknowledged\" : true\n}\n
"},{"location":"admin/insight/system-config/modify-config.html#ui","title":"\u65b9\u6cd5\u4e8c\uff1a\u4ece UI \u4fee\u6539","text":"
  1. \u767b\u5f55 kibana \uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f Stack Management \u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a Index Lifecycle Polices \uff0c\u5e76\u627e\u5230\u7d22\u5f15 insight-es-k8s-logs-policy \uff0c\u70b9\u51fb\u8fdb\u5165\u8be6\u60c5\u3002

  3. \u5c55\u5f00 Hot phase \u914d\u7f6e\u9762\u677f\uff0c\u4fee\u6539 Maximum age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002

  4. \u4fee\u6539\u5b8c\u540e\uff0c\u70b9\u51fb\u9875\u9762\u5e95\u90e8\u7684 Save policy \u5373\u4fee\u6539\u6210\u529f\u3002

"},{"location":"admin/insight/system-config/modify-config.html#_4","title":"\u5982\u4f55\u4fee\u6539\u94fe\u8def\u6570\u636e\u5b58\u50a8\u65f6\u957f","text":"

\u5148 ssh \u767b\u5f55\u5230\u5bf9\u5e94\u7684\u8282\u70b9\uff0c\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u94fe\u8def\u6570\u636e\u4fdd\u7559\u671f\u9650\uff1a

"},{"location":"admin/insight/system-config/modify-config.html#json_1","title":"\u65b9\u6cd5\u4e00\uff1a\u4fee\u6539 Json \u6587\u4ef6","text":"
  1. \u4fee\u6539\u4ee5\u4e0b\u6587\u4ef6\u4e2d rollover \u5b57\u6bb5\u4e2d\u7684 max_age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002\u6ce8\u610f\u9700\u8981\u4fee\u6539\u7b2c\u4e00\u884c\u4e2d\u7684 Elastic \u7528\u6237\u540d\u548c\u5bc6\u7801\u3001IP \u5730\u5740\u548c\u7d22\u5f15\u3002

    curl --insecure --location -u\"elastic:amyVt4o826e322TUVi13Ezw6\" -X PUT \"https://172.30.47.112:30468/_ilm/policy/jaeger-ilm-policy?pretty\" -H 'Content-Type: application/json' -d'\n{\n    \"policy\": {\n        \"phases\": {\n            \"hot\": {\n                \"min_age\": \"0ms\",\n                \"actions\": {\n                    \"set_priority\": {\n                        \"priority\": 100\n                    },\n                    \"rollover\": {\n                        \"max_age\": \"6d\",\n                        \"max_size\": \"10gb\"\n                    }\n                }\n            },\n            \"warm\": {\n                \"min_age\": \"10d\",\n                \"actions\": {\n                    \"forcemerge\": {\n                        \"max_num_segments\": 1\n                    }\n                }\n            },\n            \"delete\": {\n                \"min_age\": \"30d\",\n                \"actions\": {\n                    \"delete\": {}\n                }\n            }\n        }\n    }\n}'\n
  2. \u4fee\u6539\u5b8c\u540e\uff0c\u5728\u63a7\u5236\u53f0\u6267\u884c\u4ee5\u4e0a\u547d\u4ee4\u3002\u5b83\u4f1a\u6253\u5370\u51fa\u5982\u4e0b\u6240\u793a\u5185\u5bb9\uff0c\u5219\u4fee\u6539\u6210\u529f\u3002

    {\n\"acknowledged\" : true\n}\n
"},{"location":"admin/insight/system-config/modify-config.html#ui_1","title":"\u65b9\u6cd5\u4e8c\uff1a\u4ece UI \u4fee\u6539","text":"
  1. \u767b\u5f55 kibana \uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f Stack Management \u3002

  2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a Index Lifecycle Polices \uff0c\u5e76\u627e\u5230\u7d22\u5f15 jaeger-ilm-policy \uff0c\u70b9\u51fb\u8fdb\u5165\u8be6\u60c5\u3002

  3. \u5c55\u5f00 Hot phase \u914d\u7f6e\u9762\u677f\uff0c\u4fee\u6539 Maximum age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002

  4. \u4fee\u6539\u5b8c\u540e\uff0c\u70b9\u51fb\u9875\u9762\u5e95\u90e8\u7684 Save policy \u5373\u4fee\u6539\u6210\u529f\u3002

"},{"location":"admin/insight/system-config/system-component.html","title":"\u7cfb\u7edf\u7ec4\u4ef6","text":"

\u5728\u7cfb\u7edf\u7ec4\u4ef6\u9875\u9762\u53ef\u5feb\u901f\u7684\u67e5\u770b\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u4e2d\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u72b6\u6001\uff0c\u5f53\u7cfb\u7528\u7ec4\u4ef6\u53d1\u751f\u6545\u969c\u65f6\uff0c\u4f1a\u5bfc\u81f4\u53ef\u89c2\u6d4b\u6a21\u5757\u4e2d\u7684\u90e8\u5206\u529f\u80fd\u4e0d\u53ef\u7528\u3002

  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\uff0c
  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u7cfb\u7edf\u7ba1\u7406 -> \u7cfb\u7edf\u7ec4\u4ef6 \u3002

"},{"location":"admin/insight/system-config/system-component.html#_2","title":"\u7ec4\u4ef6\u8bf4\u660e","text":"\u6a21\u5757 \u7ec4\u4ef6\u540d\u79f0 \u8bf4\u660e \u6307\u6807 vminsert-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u5c06\u5404\u96c6\u7fa4\u4e2d Prometheus \u91c7\u96c6\u5230\u7684\u6307\u6807\u6570\u636e\u5199\u5165\u5b58\u50a8\u7ec4\u4ef6\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u5199\u5165\u5de5\u4f5c\u96c6\u7fa4\u7684\u6307\u6807\u6570\u636e\u3002 \u6307\u6807 vmalert-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u751f\u6548 VM Rule \u4e2d\u914d\u7f6e\u7684 recording \u548c Alert \u89c4\u5219\uff0c\u5e76\u5c06\u89e6\u53d1\u7684\u544a\u8b66\u89c4\u5219\u53d1\u9001\u7ed9 alertmanager\u3002 \u6307\u6807 vmalertmanager-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u5728\u544a\u8b66\u89e6\u65f6\u53d1\u9001\u6d88\u606f\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u53d1\u9001\u544a\u8b66\u4fe1\u606f\u3002 \u6307\u6807 vmselect-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u67e5\u8be2\u6307\u6807\u6570\u636e\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u67e5\u8be2\u6307\u6807\u3002 \u6307\u6807 vmstorage-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u5b58\u50a8\u591a\u96c6\u7fa4\u7684\u6307\u6807\u6570\u636e\u3002 \u4eea\u8868\u76d8 grafana-deployment \u63d0\u4f9b\u76d1\u63a7\u9762\u677f\u80fd\u529b\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u67e5\u770b\u5185\u7f6e\u7684\u4eea\u8868\u76d8\u3002 \u94fe\u8def insight-jaeger-collector \u8d1f\u8d23\u63a5\u6536\u00a0opentelemetry-collector\u00a0\u4e2d\u94fe\u8def\u6570\u636e\u5e76\u5c06\u5176\u8fdb\u884c\u5b58\u50a8\u3002 \u94fe\u8def insight-jaeger-query \u8d1f\u8d23\u67e5\u8be2\u5404\u96c6\u7fa4\u4e2d\u91c7\u96c6\u5230\u7684\u94fe\u8def\u6570\u636e\u3002 \u94fe\u8def insight-opentelemetry-collector \u8d1f\u8d23\u63a5\u6536\u5404\u5b50\u96c6\u7fa4\u8f6c\u53d1\u7684\u94fe\u8def\u6570\u636e \u65e5\u5fd7 elasticsearch \u8d1f\u8d23\u5b58\u50a8\u5404\u96c6\u7fa4\u7684\u65e5\u5fd7\u6570\u636e\u3002

Note

\u82e5\u4f7f\u7528\u5916\u90e8 Elasticsearch \u53ef\u80fd\u65e0\u6cd5\u83b7\u53d6\u90e8\u5206\u6570\u636e\u4ee5\u81f4\u4e8e Elasticsearch \u7684\u4fe1\u606f\u4e3a\u7a7a\u3002

"},{"location":"admin/insight/system-config/system-config.html","title":"\u7cfb\u7edf\u914d\u7f6e","text":"

\u7cfb\u7edf\u914d\u7f6e \u5c55\u793a\u6307\u6807\u3001\u65e5\u5fd7\u3001\u94fe\u8def\u9ed8\u8ba4\u7684\u4fdd\u5b58\u65f6\u957f\u4ee5\u53ca\u9ed8\u8ba4\u7684 Apdex \u9608\u503c\u3002

  1. \u70b9\u51fb\u53f3\u4fa7\u5bfc\u822a\u680f\uff0c\u9009\u62e9 \u7cfb\u7edf\u914d\u7f6e\u3002

  2. \u4fee\u6539\u5386\u53f2\u544a\u8b66\u5b58\u50a8\u65f6\u957f\uff0c\u70b9\u51fb \u7f16\u8f91 \u8f93\u5165\u76ee\u6807\u65f6\u957f\u3002

    \u5f53\u5b58\u50a8\u65f6\u957f\u8bbe\u7f6e\u4e3a \"0\" \u5c06\u4e0d\u6e05\u9664\u5386\u53f2\u544a\u8b66\u3002

  3. \u4fee\u6539\u62d3\u6251\u56fe\u6e32\u67d3\u9ed8\u8ba4\u914d\u7f6e\uff0c\u70b9\u51fb \u7f16\u8f91 \u6839\u636e\u9700\u6c42\u5b9a\u4e49\u7cfb\u7edf\u4e2d\u62d3\u6251\u56fe\u9608\u503c\u3002

    \u9608\u503c\u8bbe\u7f6e\u5fc5\u987b\u5927\u4e8e 0\uff0c\u524d\u9762\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5c0f\u4e8e\u540e\u9762\u586b\u5199\u7684\u3002\u4e14\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u8303\u56f4\u4e4b\u95f4\u3002

Note

\u4fee\u6539\u5176\u4ed6\u914d\u7f6e\uff0c\u8bf7\u70b9\u51fb\u67e5\u770b\u5982\u4f55\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e\uff1f

"},{"location":"admin/insight/trace/service.html","title":"\u670d\u52a1\u76d1\u63a7","text":"

\u5728 \u53ef\u89c2\u6d4b\u6027 Insight \u4e2d\u670d\u52a1\u662f\u6307\u4f7f\u7528 Opentelemtry SDK \u63a5\u5165\u94fe\u8def\u6570\u636e\uff0c\u670d\u52a1\u76d1\u63a7\u80fd\u591f\u8f85\u52a9\u8fd0\u7ef4\u8fc7\u7a0b\u4e2d\u89c2\u5bdf\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u72b6\u6001\u3002

\u5982\u4f55\u4f7f\u7528 OpenTelemetry \u8bf7\u53c2\u8003\u4f7f\u7528 OTel \u8d4b\u4e88\u5e94\u7528\u53ef\u89c2\u6d4b\u6027\u3002

"},{"location":"admin/insight/trace/service.html#_2","title":"\u540d\u8bcd\u89e3\u91ca","text":"
  • \u670d\u52a1 \uff1a\u670d\u52a1\u8868\u793a\u4e3a\u4f20\u5165\u8bf7\u6c42\u63d0\u4f9b\u76f8\u540c\u884c\u4e3a\u7684\u4e00\u7ec4\u5de5\u4f5c\u8d1f\u8f7d\u3002\u60a8\u53ef\u4ee5\u5728\u4f7f\u7528 OpenTelemetry SDK \u65f6\u5b9a\u4e49\u670d\u52a1\u540d\u79f0\u6216\u4f7f\u7528 Istio \u4e2d\u5b9a\u4e49\u7684\u540d\u79f0\u3002
  • \u64cd\u4f5c \uff1a\u64cd\u4f5c\u662f\u6307\u4e00\u4e2a\u670d\u52a1\u5904\u7406\u7684\u7279\u5b9a\u8bf7\u6c42\u6216\u64cd\u4f5c\uff0c\u6bcf\u4e2a Span \u90fd\u6709\u4e00\u4e2a\u64cd\u4f5c\u540d\u79f0\u3002
  • \u51fa\u53e3\u6d41\u91cf \uff1a\u51fa\u53e3\u6d41\u91cf\u662f\u6307\u5f53\u524d\u670d\u52a1\u53d1\u8d77\u8bf7\u6c42\u7684\u6240\u6709\u6d41\u91cf\u3002
  • \u5165\u53e3\u6d41\u91cf \uff1a\u5165\u53e3\u6d41\u91cf\u662f\u6307\u4e0a\u6e38\u670d\u52a1\u5bf9\u5f53\u524d\u670d\u52a1\u53d1\u8d77\u8bf7\u6c42\u7684\u6240\u6709\u6d41\u91cf\u3002
"},{"location":"admin/insight/trace/service.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

\u670d\u52a1\u5217\u8868\u9875\u9762\u5c55\u793a\u4e86\u96c6\u7fa4\u4e2d\u6240\u6709\u5df2\u63a5\u5165\u94fe\u8def\u6570\u636e\u7684\u670d\u52a1\u7684\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u3001\u8bf7\u6c42\u5ef6\u65f6\u7b49\u5173\u952e\u6307\u6807\u3002 \u60a8\u53ef\u4ee5\u6839\u636e\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u5bf9\u670d\u52a1\u8fdb\u884c\u8fc7\u6ee4\uff0c\u4e5f\u53ef\u4ee5\u6309\u7167\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u3001\u8bf7\u6c42\u5ef6\u65f6\u5bf9\u8be5\u5217\u8868\u8fdb\u884c\u6392\u5e8f\u3002\u5217\u8868\u4e2d\u7684\u6307\u6807\u6570\u636e\u9ed8\u8ba4\u65f6\u95f4\u4e3a 1 \u5c0f\u65f6\uff0c\u60a8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u3002

\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u67e5\u770b\u670d\u52a1\u76d1\u63a7\u6307\u6807\uff1a

  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u94fe\u8def\u8ffd\u8e2a -> \u670d\u52a1 \u3002

    Attention

    1. \u82e5\u5217\u8868\u4e2d\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u4e3a unknown \u65f6\uff0c\u5219\u8868\u793a\u8be5\u670d\u52a1\u672a\u89c4\u8303\u63a5\u5165\uff0c\u5efa\u8bae\u91cd\u65b0\u63a5\u5165\u3002
    2. \u82e5\u63a5\u5165\u7684\u670d\u52a1\u5b58\u5728\u540c\u540d\u4e14\u5747\u672a\u6b63\u786e\u586b\u5199\u73af\u5883\u53d8\u91cf\u4e2d\u7684 \u547d\u540d\u7a7a\u95f4 \u65f6\uff0c\u5217\u8868\u53ca\u670d\u52a1\u8be6\u60c5\u9875\u4e2d\u5c55\u793a\u7684\u76d1\u63a7\u6570\u636e\u4e3a\u591a\u4e2a\u670d\u52a1\u7684\u6c47\u603b\u6570\u636e\u3002
  3. \u70b9\u51fb\u670d\u52a1\u540d (\u4ee5 insight-server \u4e3a\u4f8b)\uff0c\u70b9\u51fb\u8fdb\u5165\u670d\u52a1\u8be6\u60c5\u9875\uff0c\u67e5\u770b\u670d\u52a1\u7684\u8be6\u7ec6\u6307\u6807\u548c\u8be5\u670d\u52a1\u7684\u64cd\u4f5c\u6307\u6807\u3002

    1. \u5728\u670d\u52a1\u62d3\u6251\u6a21\u5757\u4e2d\uff0c\u60a8\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u6240\u9009\u670d\u52a1\u7684\u4e0a\u4e0b\u5404\u4e00\u5c42\u7684\u670d\u52a1\u62d3\u6251\uff0c\u9f20\u6807\u60ac\u6d6e\u5728\u8282\u70b9\u4e0a\u65f6\u53ef\u4ee5\u67e5\u770b\u8282\u70b9\u7684\u4fe1\u606f\u3002
    2. \u5728\u6d41\u91cf\u6307\u6807\u6a21\u5757\uff0c\u60a8\u53ef\u67e5\u770b\u5230\u8be5\u670d\u52a1\u9ed8\u8ba4\u4e00\u5c0f\u65f6\u5185\u5168\u90e8\u8bf7\u6c42\uff08\u5305\u542b\u5165\u53e3\u6d41\u91cf\u548c\u51fa\u53e3\u6d41\u91cf\uff09\u7684\u76d1\u63a7\u6307\u6807\u3002
    3. \u652f\u6301\u901a\u8fc7\u53f3\u4e0a\u89d2\u7684\u65f6\u95f4\u9009\u62e9\u5668\u5feb\u901f\u9009\u62e9\u65f6\u95f4\u8303\u56f4\uff0c\u6216\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u3002
    4. \u5728 \u5173\u8054\u5bb9\u5668 \u6a21\u5757\u70b9\u51fb\u5bb9\u5668\u7ec4\u540d\u79f0\uff0c\u53ef\u8df3\u8f6c\u81f3\u5bb9\u5668\u7ec4\u8be6\u60c5\u9875\u3002

  4. \u70b9\u51fb Tab \u5207\u6362\u5230 \u64cd\u4f5c\u6307\u6807 \uff0c\u53ef\u67e5\u8be2\u591a\u9009\u670d\u52a1\u76f8\u540c\u64cd\u4f5c\u7684\u805a\u5408\u8d77\u6765\u7684\u6d41\u91cf\u6307\u6807\u3002

    1. \u652f\u6301\u5bf9\u64cd\u4f5c\u6307\u6807\u4e2d\u7684\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u3001\u8bf7\u6c42\u5ef6\u65f6\u7b49\u6307\u6807\u8fdb\u884c\u6392\u5e8f\u3002
    2. \u70b9\u51fb\u5355\u4e2a\u64cd\u4f5c\u540e\u7684\u56fe\u6807\uff0c\u53ef\u8df3\u8f6c\u81f3 \u8c03\u7528\u94fe \u5feb\u901f\u67e5\u8be2\u76f8\u5173\u94fe\u8def\u3002

"},{"location":"admin/insight/trace/service.html#_4","title":"\u670d\u52a1\u6307\u6807\u8bf4\u660e","text":"\u53c2\u6570 \u8bf4\u660e \u541e\u5410\u7387 \u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u8bf7\u6c42\u7684\u6570\u91cf\u3002 \u9519\u8bef\u7387 \u67e5\u8be2\u65f6\u95f4\u8303\u56f4\u5185\u9519\u8bef\u8bf7\u6c42\u4e0e\u8bf7\u6c42\u603b\u6570\u7684\u6bd4\u503c\u3002 P50 \u8bf7\u6c42\u5ef6\u65f6 \u5728\u6240\u6709\u7684\u8bf7\u6c42\u4e2d\uff0c\u6709 50% \u7684\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u5c0f\u4e8e\u6216\u7b49\u4e8e\u8be5\u503c\u3002 P95 \u8bf7\u6c42\u5ef6\u65f6 \u5728\u6240\u6709\u7684\u8bf7\u6c42\u4e2d\uff0c\u6709 95% \u7684\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u5c0f\u4e8e\u6216\u7b49\u4e8e\u8be5\u503c\u3002 P99 \u8bf7\u6c42\u5ef6\u65f6 \u5728\u6240\u6709\u7684\u8bf7\u6c42\u4e2d\uff0c\u6709 95% \u7684\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u5c0f\u4e8e\u6216\u7b49\u4e8e\u8be5\u503c\u3002"},{"location":"admin/insight/trace/topology.html","title":"\u670d\u52a1\u62d3\u6251","text":"

\u670d\u52a1\u62d3\u6251\u56fe\u662f\u5bf9\u670d\u52a1\u4e4b\u95f4\u8fde\u63a5\u3001\u901a\u4fe1\u548c\u4f9d\u8d56\u5173\u7cfb\u7684\u53ef\u89c6\u5316\u8868\u793a\u3002\u901a\u8fc7\u53ef\u89c6\u5316\u62d3\u6251\u4e86\u89e3\u670d\u52a1\u95f4\u7684\u8c03\u7528\u5173\u7cfb\uff0c \u67e5\u770b\u670d\u52a1\u5728\u6307\u5b9a\u65f6\u95f4\u5185\u7684\u8c03\u7528\u53ca\u5176\u6027\u80fd\u72b6\u51b5\u3002\u62d3\u6251\u56fe\u7684\u8282\u70b9\u4e4b\u95f4\u7684\u8054\u7cfb\u4ee3\u8868\u4e24\u4e2a\u670d\u52a1\u5728\u67e5\u8be2\u65f6\u95f4\u8303\u56f4\u5185\u670d\u52a1\u4e4b\u95f4\u7684\u5b58\u5728\u8c03\u7528\u5173\u7cfb\u3002

"},{"location":"admin/insight/trace/topology.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
  1. \u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002
  2. \u670d\u52a1\u5df2\u901a\u8fc7 Operator \u6216 Opentelemetry SDK \u7684\u65b9\u5f0f\u63a5\u5165\u94fe\u8def\u3002
"},{"location":"admin/insight/trace/topology.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u6a21\u5757
  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u94fe\u8def\u8ffd\u8e2a -> \u670d\u52a1\u62d3\u6251
  3. \u5728\u62d3\u6251\u56fe\u4e2d\uff0c\u60a8\u53ef\u6309\u9700\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a

    • \u5355\u51fb \u8282\u70b9\uff0c\u4ece\u53f3\u4fa7\u5212\u51fa\u670d\u52a1\u7684\u8be6\u60c5\uff0c\u53ef\u67e5\u770b\u670d\u52a1\u7684\u8bf7\u6c42\u5ef6\u65f6\u3001\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u7684\u6307\u6807\u3002\u70b9\u51fb\u670d\u52a1\u540d\u79f0\u53ef\u8df3\u8f6c\u81f3\u5bf9\u5e94\u670d\u52a1\u7684\u8be6\u60c5\u9875\u3002
    • \u9f20\u6807\u60ac\u6d6e\u5728\u8fde\u7ebf\u4e0a\u65f6\uff0c\u53ef\u67e5\u770b\u4e24\u4e2a\u670d\u52a1\u4e4b\u95f4\u8bf7\u6c42\u7684\u6d41\u91cf\u6307\u6807\u3002
    • \u5728 \u663e\u793a\u8bbe\u7f6e \u6a21\u5757\uff0c\u53ef\u914d\u7f6e\u62d3\u6251\u56fe\u4e2d\u7684\u663e\u793a\u5143\u7d20\u3002

  4. \u70b9\u51fb\u53f3\u4e0b\u89d2 \u56fe\u4f8b \uff0c\u53ef\u901a\u8fc7 \u4e34\u65f6\u914d\u7f6e \u4fee\u6539\u5f53\u524d\u7684\u62d3\u6251\u56fe\u5b9a\u4e49\u7684\u6e32\u67d3\u9608\u503c\uff0c\u8df3\u51fa\u6216\u5173\u95ed\u8be5\u9875\u9762\u5373\u4f1a\u4e22\u5931\u8be5\u914d\u7f6e\u3002

    \u9608\u503c\u8bbe\u7f6e\u5fc5\u987b\u5927\u4e8e 0\uff0c\u524d\u9762\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5c0f\u4e8e\u540e\u9762\u586b\u5199\u7684\u3002\u4e14\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u8303\u56f4\u4e4b\u95f4\u3002

"},{"location":"admin/insight/trace/topology.html#_4","title":"\u5176\u4ed6\u8282\u70b9","text":"

\u5728\u670d\u52a1\u62d3\u6251\u4e2d\u4f1a\u5b58\u5728\u6e38\u79bb\u5728\u96c6\u7fa4\u4e4b\u5916\u7684\u8282\u70b9\uff0c\u8fd9\u4e9b\u6e38\u79bb\u5728\u5916\u7684\u8282\u70b9\u53ef\u5206\u6210\u4e09\u7c7b\uff1a

  • \u6570\u636e\u5e93
  • \u6d88\u606f\u961f\u5217
  • \u865a\u62df\u8282\u70b9

  • \u82e5\u670d\u52a1\u53d1\u8d77\u8bf7\u6c42\u5230\u6570\u636e\u5e93\u6216\u6d88\u606f\u961f\u5217\u65f6\uff0c\u62d3\u6251\u56fe\u4e2d\u4f1a\u9ed8\u8ba4\u5c55\u793a\u8fd9\u4e24\u7c7b\u8282\u70b9\u3002 \u800c\u865a\u62df\u670d\u52a1\u8868\u793a\u96c6\u7fa4\u5185\u670d\u52a1\u8bf7\u6c42\u4e86\u96c6\u7fa4\u5916\u7684\u8282\u70b9\u6216\u8005\u672a\u63a5\u5165\u94fe\u8def\u7684\u670d\u52a1\uff0c\u62d3\u6251\u56fe\u4e2d\u9ed8\u8ba4\u4e0d\u4f1a\u5c55\u793a \u865a\u62df\u670d\u52a1\u3002

  • \u5f53\u670d\u52a1\u8bf7\u6c42\u5230 MySQL\u3001PostgreSQL\u3001Oracle Database \u8fd9\u4e09\u79cd\u6570\u636e\u5e93\u65f6\uff0c\u5728\u62d3\u6251\u56fe\u4e2d\u53ef\u4ee5\u770b\u5230\u8bf7\u6c42\u7684\u8be6\u7ec6\u6570\u636e\u5e93\u7c7b\u578b\u3002

"},{"location":"admin/insight/trace/topology.html#_5","title":"\u5f00\u542f\u865a\u62df\u8282\u70b9","text":"
  1. \u66f4\u65b0 insight-server chart \u7684 values\uff0c\u627e\u5230\u4e0b\u56fe\u6240\u793a\u53c2\u6570\uff0c\u5c06 false \u6539\u4e3a true\u3002

  2. \u5728\u670d\u52a1\u62d3\u6251\u7684\u663e\u793a\u8bbe\u7f6e\u4e2d\u52fe\u9009 \u865a\u62df\u670d\u52a1 \u3002

"},{"location":"admin/insight/trace/trace.html","title":"\u94fe\u8def\u67e5\u8be2","text":"

\u5728\u94fe\u8def\u67e5\u8be2\u9875\u9762\uff0c\u60a8\u53ef\u4ee5\u8fc7 TraceID \u6216\u7cbe\u786e\u67e5\u8be2\u8c03\u7528\u94fe\u8def\u8be6\u7ec6\u60c5\u51b5\u6216\u7ed3\u5408\u591a\u79cd\u6761\u4ef6\u7b5b\u9009\u67e5\u8be2\u8c03\u7528\u94fe\u8def\u3002

"},{"location":"admin/insight/trace/trace.html#_2","title":"\u540d\u8bcd\u89e3\u91ca","text":"
  • TraceID\uff1a\u7528\u4e8e\u6807\u8bc6\u4e00\u4e2a\u5b8c\u6574\u7684\u8bf7\u6c42\u8c03\u7528\u94fe\u8def\u3002
  • \u64cd\u4f5c\uff1a\u63cf\u8ff0 Span \u6240\u4ee3\u8868\u7684\u5177\u4f53\u64cd\u4f5c\u6216\u4e8b\u4ef6\u3002
  • \u5165\u53e3 Span\uff1a\u5165\u53e3 Span \u4ee3\u8868\u4e86\u6574\u4e2a\u8bf7\u6c42\u7684\u7b2c\u4e00\u4e2a\u8bf7\u6c42\u3002
  • \u5ef6\u65f6\uff1a\u6574\u4e2a\u8c03\u7528\u94fe\u4ece\u5f00\u59cb\u63a5\u6536\u8bf7\u6c42\u5230\u5b8c\u6210\u54cd\u5e94\u7684\u6301\u7eed\u65f6\u95f4\u3002
  • Span\uff1a\u6574\u4e2a\u94fe\u8def\u4e2d\u5305\u542b\u7684 Span \u4e2a\u6570\u3002
  • \u53d1\u751f\u65f6\u95f4\uff1a\u5f53\u524d\u94fe\u8def\u5f00\u59cb\u7684\u65f6\u95f4\u3002
  • Tag\uff1a\u4e00\u7ec4\u952e\u503c\u5bf9\u6784\u6210\u7684 Span \u6807\u7b7e\u96c6\u5408\uff0cTag \u662f\u7528\u6765\u5bf9 Span \u8fdb\u884c\u7b80\u5355\u7684\u6ce8\u89e3\u548c\u8865\u5145\uff0c\u6bcf\u4e2a Span \u53ef\u4ee5\u6709\u591a\u4e2a\u7b80\u76f4\u5bf9\u5f62\u5f0f\u7684 Tag\u3002
"},{"location":"admin/insight/trace/trace.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u67e5\u8be2\u94fe\u8def\uff1a

  1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\uff0c
  2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u94fe\u8def\u8ffd\u8e2a -> \u8c03\u7528\u94fe\u3002

    Note

    \u5217\u8868\u4e2d\u652f\u6301\u5bf9 Span \u6570\u3001\u5ef6\u65f6\u3001\u53d1\u751f\u65f6\u95f4\u8fdb\u884c\u6392\u5e8f\u3002

  3. \u70b9\u51fb\u7b5b\u9009\u680f\u4e2d\u7684 TraceID \u641c\u7d22 \u5207\u6362\u4f7f\u7528 TraceID \u641c\u7d22\u94fe\u8def\u3002

  4. \u4f7f\u7528 TraceID \u641c\u7d22\u8bf7\u8f93\u5165\u5b8c\u6574\u7684 TraceID\u3002

"},{"location":"admin/insight/trace/trace.html#_4","title":"\u5176\u4ed6\u64cd\u4f5c","text":""},{"location":"admin/insight/trace/trace.html#_5","title":"\u67e5\u770b\u94fe\u8def\u8be6\u60c5","text":"
  1. \u70b9\u51fb\u94fe\u8def\u5217\u8868\u4e2d\u7684\u67d0\u4e00\u94fe\u8def\u7684 TraceID\uff0c\u53ef\u67e5\u770b\u8be5\u94fe\u8def\u7684\u8be6\u60c5\u8c03\u7528\u60c5\u51b5\u3002

"},{"location":"admin/insight/trace/trace.html#_6","title":"\u67e5\u770b\u5173\u8054\u65e5\u5fd7","text":"
  1. \u70b9\u51fb\u94fe\u8def\u6570\u636e\u53f3\u4fa7\u7684\u56fe\u6807\uff0c\u53ef\u67e5\u8be2\u8be5\u94fe\u8def\u7684\u5173\u8054\u65e5\u5fd7\u3002

    • \u9ed8\u8ba4\u67e5\u8be2\u8be5\u94fe\u8def\u7684\u6301\u7eed\u65f6\u95f4\u53ca\u5176\u7ed3\u675f\u4e4b\u540e\u4e00\u5206\u949f\u5185\u7684\u65e5\u5fd7\u6570\u636e\u3002
    • \u67e5\u8be2\u7684\u65e5\u5fd7\u5185\u5bb9\u4e3a\u65e5\u5fd7\u6587\u672c\u4e2d\u5305\u542b\u8be5\u94fe\u8def\u7684 TraceID \u7684\u65e5\u5fd7\u548c\u94fe\u8def\u8c03\u7528\u8fc7\u7a0b\u4e2d\u76f8\u5173\u7684\u5bb9\u5668\u65e5\u5fd7\u3002
  2. \u70b9\u51fb \u67e5\u770b\u66f4\u591a \u540e\u53ef\u5e26\u6761\u4ef6\u8df3\u8f6c\u5230 \u65e5\u5fd7\u67e5\u8be2 \u7684\u9875\u9762\u3002

  3. \u9ed8\u8ba4\u641c\u7d22\u5168\u90e8\u65e5\u5fd7\uff0c\u4f46\u53ef\u4e0b\u62c9\u6839\u636e\u94fe\u8def\u7684 TraceID \u6216\u94fe\u8def\u8c03\u7528\u8fc7\u7a0b\u4e2d\u76f8\u5173\u7684\u5bb9\u5668\u65e5\u5fd7\u8fdb\u884c\u8fc7\u6ee4\u3002

    Note

    \u7531\u4e8e\u94fe\u8def\u4f1a\u8de8\u96c6\u7fa4\u6216\u8de8\u547d\u540d\u7a7a\u95f4\uff0c\u82e5\u7528\u6237\u6743\u9650\u4e0d\u8db3\uff0c\u5219\u65e0\u6cd5\u67e5\u8be2\u8be5\u94fe\u8def\u7684\u5173\u8054\u65e5\u5fd7\u3002

"},{"location":"admin/k8s/add-node.html","title":"\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9","text":"

\u5982\u679c\u8282\u70b9\u4e0d\u591f\u7528\u4e86\uff0c\u53ef\u4ee5\u6dfb\u52a0\u66f4\u591a\u8282\u70b9\u5230\u96c6\u7fa4\u4e2d\u3002

"},{"location":"admin/k8s/add-node.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
  • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
  • \u6709\u4e00\u4e2a\u7ba1\u7406\u5458\u5e10\u53f7
  • \u5df2\u521b\u5efa\u5e26 GPU \u8282\u70b9\u7684\u96c6\u7fa4
  • \u51c6\u5907\u4e00\u53f0\u4e91\u4e3b\u673a
"},{"location":"admin/k8s/add-node.html#_3","title":"\u6dfb\u52a0\u6b65\u9aa4","text":"
  1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
  2. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0

  3. \u8fdb\u5165\u96c6\u7fa4\u6982\u89c8\u9875\uff0c\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u63a5\u5165\u8282\u70b9 \u6309\u94ae

  4. \u6309\u7167\u5411\u5bfc\uff0c\u586b\u5199\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a

    \u57fa\u672c\u4fe1\u606f\u53c2\u6570\u914d\u7f6e

  5. \u5728\u5f39\u7a97\u4e2d\u70b9\u51fb \u786e\u5b9a

  6. \u8fd4\u56de\u8282\u70b9\u5217\u8868\uff0c\u65b0\u63a5\u5165\u7684\u8282\u70b9\u72b6\u6001\u4e3a \u63a5\u5165\u4e2d \uff0c\u7b49\u5f85\u51e0\u5206\u949f\u540e\u72b6\u6001\u53d8\u4e3a \u5065\u5eb7 \u5219\u8868\u793a\u63a5\u5165\u6210\u529f\u3002

Tip

\u5bf9\u4e8e\u521a\u63a5\u5165\u6210\u529f\u7684\u8282\u70b9\uff0c\u53ef\u80fd\u8fd8\u8981\u7b49 2-3 \u5206\u949f\u624d\u80fd\u8bc6\u522b\u51fa GPU\u3002

"},{"location":"admin/k8s/create-k8s.html","title":"\u521b\u5efa\u4e91\u4e0a Kubernetes \u96c6\u7fa4","text":"

\u90e8\u7f72 Kubernetes \u96c6\u7fa4\u662f\u4e3a\u4e86\u652f\u6301\u9ad8\u6548\u7684 AI \u7b97\u529b\u8c03\u5ea6\u548c\u7ba1\u7406\uff0c\u5b9e\u73b0\u5f39\u6027\u4f38\u7f29\uff0c\u63d0\u4f9b\u9ad8\u53ef\u7528\u6027\uff0c\u4ece\u800c\u4f18\u5316\u6a21\u578b\u8bad\u7ec3\u548c\u63a8\u7406\u8fc7\u7a0b\u3002

"},{"location":"admin/k8s/create-k8s.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
  • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0\u5df2
  • \u6709\u4e00\u4e2a\u7ba1\u7406\u5458\u6743\u9650\u7684\u8d26\u53f7
  • \u51c6\u5907\u4e00\u53f0\u5e26 GPU \u7684\u7269\u7406\u673a
  • \u5206\u914d\u4e24\u6bb5 IP \u5730\u5740\uff08Pod CIDR 18 \u4f4d\u3001SVC CIDR 18 \u4f4d\uff0c\u4e0d\u80fd\u4e0e\u73b0\u6709\u7f51\u6bb5\u51b2\u7a81\uff09
"},{"location":"admin/k8s/create-k8s.html#_2","title":"\u521b\u5efa\u6b65\u9aa4","text":"
  1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
  2. \u521b\u5efa\u5e76\u542f\u52a8 3 \u53f0\u4e0d\u5e26 GPU \u7684\u4e91\u4e3b\u673a\u7528\u4f5c\u96c6\u7fa4\u7684 Master \u8282\u70b9

    • \u914d\u7f6e\u8d44\u6e90\uff0cCPU 16 \u6838\uff0c\u5185\u5b58 32 GB\uff0c\u7cfb\u7edf\u76d8 200 GB\uff08ReadWriteOnce\uff09
    • \u7f51\u7edc\u6a21\u5f0f\u9009\u62e9 Bridge\uff08\u6865\u63a5\uff09
    • \u8bbe\u7f6e root \u5bc6\u7801\u6216\u6dfb\u52a0 SSH \u516c\u94a5\uff0c\u65b9\u4fbf\u4ee5 SSH \u8fde\u63a5
    • \u8bb0\u5f55\u597d 3 \u53f0\u4e3b\u673a\u7684 IP
  3. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa\u96c6\u7fa4 \u6309\u94ae

  4. \u6309\u7167\u5411\u5bfc\uff0c\u914d\u7f6e\u96c6\u7fa4\u7684\u5404\u9879\u53c2\u6570

    \u57fa\u672c\u4fe1\u606f\u8282\u70b9\u914d\u7f6e\u7f51\u7edc\u914d\u7f6eAddon \u914d\u7f6e\u9ad8\u7ea7\u914d\u7f6e

    \u914d\u7f6e\u5b8c\u8282\u70b9\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u5f00\u59cb\u68c0\u67e5 \uff0c

    \u6bcf\u4e2a\u8282\u70b9\u9ed8\u8ba4\u53ef\u8fd0\u884c 110 \u4e2a Pod\uff08\u5bb9\u5668\u7ec4\uff09\uff0c\u5982\u679c\u8282\u70b9\u914d\u7f6e\u6bd4\u8f83\u9ad8\uff0c\u53ef\u4ee5\u8c03\u6574\u5230 200 \u6216 300 \u4e2a Pod\u3002

  5. \u7b49\u5f85\u96c6\u7fa4\u521b\u5efa\u5b8c\u6210\u3002

  6. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\uff0c\u627e\u5230\u521a\u521b\u5efa\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u5bfc\u822a\u5230 Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u5728\u641c\u7d22\u6846\u5185\u641c\u7d22 metax-gpu-extensions\uff0c\u70b9\u51fb\u5361\u7247

  7. \u70b9\u51fb\u53f3\u4fa7\u7684 \u5b89\u88c5 \u6309\u94ae\uff0c\u5f00\u59cb\u5b89\u88c5 GPU \u63d2\u4ef6

    \u5e94\u7528\u8bbe\u7f6eKubernetes \u7f16\u6392\u786e\u8ba4

    \u8f93\u5165\u540d\u79f0\uff0c\u9009\u62e9\u547d\u540d\u7a7a\u95f4\uff0c\u5728 YAMl \u4e2d\u4fee\u6539\u955c\u50cf\u5730\u5740\uff1a

  8. \u81ea\u52a8\u8fd4\u56de Helm \u5e94\u7528\u5217\u8868\uff0c\u7b49\u5f85 metax-gpu-extensions \u72b6\u6001\u53d8\u4e3a \u5df2\u90e8\u7f72

  9. \u5230\u6b64\u96c6\u7fa4\u521b\u5efa\u6210\u529f\uff0c\u53ef\u4ee5\u53bb\u67e5\u770b\u96c6\u7fa4\u6240\u5305\u542b\u7684\u8282\u70b9\u3002\u4f60\u53ef\u4ee5\u53bb\u521b\u5efa AI \u5de5\u4f5c\u8d1f\u8f7d\u5e76\u4f7f\u7528 GPU \u4e86\u3002

\u4e0b\u4e00\u6b65\uff1a\u521b\u5efa AI \u5de5\u4f5c\u8d1f\u8f7d

"},{"location":"admin/k8s/remove-node.html","title":"\u79fb\u9664 GPU \u5de5\u4f5c\u8282\u70b9","text":"

GPU \u8d44\u6e90\u7684\u6210\u672c\u76f8\u5bf9\u8f83\u9ad8\uff0c\u5982\u679c\u6682\u65f6\u7528\u4e0d\u5230 GPU\uff0c\u53ef\u4ee5\u5c06\u5e26 GPU \u7684\u5de5\u4f5c\u8282\u70b9\u79fb\u9664\u3002 \u4ee5\u4e0b\u6b65\u9aa4\u4e5f\u540c\u6837\u9002\u7528\u4e8e\u79fb\u9664\u666e\u901a\u5de5\u4f5c\u8282\u70b9\u3002

"},{"location":"admin/k8s/remove-node.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
  • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
  • \u6709\u4e00\u4e2a\u7ba1\u7406\u5458\u5e10\u53f7
  • \u5df2\u521b\u5efa\u5e26 GPU \u8282\u70b9\u7684\u96c6\u7fa4
"},{"location":"admin/k8s/remove-node.html#_2","title":"\u79fb\u9664\u6b65\u9aa4","text":"
  1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
  2. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0

  3. \u8fdb\u5165\u96c6\u7fa4\u6982\u89c8\u9875\uff0c\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u627e\u5230\u8981\u79fb\u9664\u7684\u8282\u70b9\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u79fb\u9664\u8282\u70b9

  4. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u8282\u70b9\u540d\u79f0\uff0c\u786e\u8ba4\u65e0\u8bef\u540e\u70b9\u51fb \u5220\u9664

  5. \u81ea\u52a8\u8fd4\u56de\u8282\u70b9\u5217\u8868\uff0c\u72b6\u6001\u4e3a \u79fb\u9664\u4e2d \uff0c\u51e0\u5206\u949f\u540e\u5237\u65b0\u9875\u9762\uff0c\u8282\u70b9\u4e0d\u5728\u4e86\uff0c\u8bf4\u660e\u8282\u70b9\u88ab\u6210\u529f\u79fb\u9664

  6. \u4ece UI \u5217\u8868\u79fb\u9664\u8282\u70b9\u540e\uff0c\u901a\u8fc7 SSH \u767b\u5f55\u5230\u5df2\u79fb\u9664\u7684\u8282\u70b9\u4e3b\u673a\uff0c\u6267\u884c\u5173\u673a\u547d\u4ee4\u3002

Tip

\u5728 UI \u4e0a\u79fb\u9664\u8282\u70b9\u5e76\u5c06\u5176\u5173\u673a\u540e\uff0c\u8282\u70b9\u4e0a\u7684\u6570\u636e\u5e76\u672a\u88ab\u7acb\u5373\u5220\u9664\uff0c\u8282\u70b9\u6570\u636e\u4f1a\u88ab\u4fdd\u7559\u4e00\u6bb5\u65f6\u95f4\u3002

"},{"location":"admin/kpanda/backup/index.html","title":"\u5907\u4efd\u6062\u590d","text":"

\u5907\u4efd\u6062\u590d\u5206\u4e3a\u5907\u4efd\u548c\u6062\u590d\u4e24\u65b9\u9762\uff0c\u5b9e\u9645\u5e94\u7528\u65f6\u9700\u8981\u5148\u5907\u4efd\u7cfb\u7edf\u5728\u67d0\u4e00\u65f6\u70b9\u7684\u6570\u636e\uff0c\u7136\u540e\u5b89\u5168\u5b58\u50a8\u5730\u5907\u4efd\u6570\u636e\u3002\u540e\u7eed\u5982\u679c\u51fa\u73b0\u6570\u636e\u635f\u574f\u3001\u4e22\u5931\u3001\u8bef\u5220\u7b49\u4e8b\u6545\uff0c\u5c31\u53ef\u4ee5\u57fa\u4e8e\u4e4b\u524d\u7684\u6570\u636e\u5907\u4efd\u5feb\u901f\u8fd8\u539f\u7cfb\u7edf\uff0c\u7f29\u77ed\u6545\u969c\u65f6\u95f4\uff0c\u51cf\u5c11\u635f\u5931\u3002

  • \u5728\u771f\u5b9e\u7684\u751f\u4ea7\u73af\u5883\u4e2d\uff0c\u670d\u52a1\u53ef\u80fd\u5206\u5e03\u5f0f\u5730\u90e8\u7f72\u5728\u4e0d\u540c\u7684\u4e91\u3001\u4e0d\u540c\u533a\u57df\u6216\u53ef\u7528\u533a\uff0c\u5982\u679c\u67d0\u4e00\u4e2a\u57fa\u7840\u8bbe\u65bd\u81ea\u8eab\u51fa\u73b0\u6545\u969c\uff0c\u4f01\u4e1a\u9700\u8981\u5728\u5176\u4ed6\u53ef\u7528\u73af\u5883\u4e2d\u5feb\u901f\u6062\u590d\u5e94\u7528\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8de8\u4e91/\u8de8\u96c6\u7fa4\u7684\u5907\u4efd\u6062\u590d\u663e\u5f97\u975e\u5e38\u91cd\u8981\u3002
  • \u5728\u5927\u89c4\u6a21\u7cfb\u7edf\u4e2d\u5f80\u5f80\u6709\u5f88\u591a\u89d2\u8272\u548c\u7528\u6237\uff0c\u6743\u9650\u7ba1\u7406\u4f53\u7cfb\u590d\u6742\uff0c\u64cd\u4f5c\u8005\u4f17\u591a\uff0c\u96be\u514d\u6709\u4eba\u8bef\u64cd\u4f5c\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4e5f\u9700\u8981\u80fd\u591f\u901a\u8fc7\u4e4b\u524d\u5907\u4efd\u7684\u6570\u636e\u5feb\u901f\u56de\u6eda\u7cfb\u7edf\uff0c\u5426\u5219\u5982\u679c\u4f9d\u8d56\u4eba\u4e3a\u6392\u67e5\u6545\u969c\u3001\u4fee\u590d\u6545\u969c\u3001\u6062\u590d\u7cfb\u7edf\u5c31\u4f1a\u8017\u8d39\u5927\u91cf\u65f6\u95f4\uff0c\u7cfb\u7edf\u4e0d\u53ef\u7528\u65f6\u95f4\u8d8a\u957f\uff0c\u4f01\u4e1a\u7684\u635f\u5931\u8d8a\u5927\u3002
  • \u6b64\u5916\uff0c\u8fd8\u6709\u7f51\u7edc\u653b\u51fb\u3001\u81ea\u7136\u707e\u5bb3\u3001\u8bbe\u5907\u6545\u969c\u7b49\u5404\u79cd\u56e0\u7d20\u4e5f\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u4e8b\u6545

\u56e0\u6b64\uff0c\u5907\u4efd\u6062\u590d\u975e\u5e38\u91cd\u8981\uff0c\u53ef\u4ee5\u89c6\u4e4b\u4e3a\u7ef4\u62a4\u7cfb\u7edf\u7a33\u5b9a\u548c\u6570\u636e\u5b89\u5168\u7684\u6700\u540e\u4e00\u9053\u4fdd\u9669\u3002

\u5907\u4efd\u901a\u5e38\u5206\u4e3a\u5168\u91cf\u5907\u4efd\u3001\u589e\u91cf\u5907\u4efd\u3001\u5dee\u5f02\u5907\u4efd\u4e09\u79cd\u3002\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u76ee\u524d\u652f\u6301\u5168\u91cf\u5907\u4efd\u548c\u589e\u91cf\u5907\u4efd\u3002

\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u7684\u5907\u4efd\u6062\u590d\u53ef\u4ee5\u5206\u4e3a \u5e94\u7528\u5907\u4efd \u548c ETCD \u5907\u4efd \u4e24\u79cd\uff0c\u652f\u6301\u624b\u52a8\u5907\u4efd\uff0c\u6216\u57fa\u4e8e CronJob \u5b9a\u65f6\u81ea\u52a8\u5907\u4efd\u3002

  • \u5e94\u7528\u5907\u4efd

    \u5e94\u7528\u5907\u4efd\u6307\uff0c\u5907\u4efd\u96c6\u7fa4\u4e2d\u7684\u67d0\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\uff0c\u7136\u540e\u5c06\u8be5\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\u6062\u590d\u5230\u672c\u96c6\u7fa4\u6216\u8005\u5176\u4ed6\u96c6\u7fa4\u3002\u652f\u6301\u5907\u4efd\u6574\u4e2a\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u8d44\u6e90\uff0c\u4e5f\u652f\u6301\u901a\u8fc7\u6807\u7b7e\u9009\u62e9\u5668\u8fc7\u6ee4\uff0c\u4ec5\u5907\u4efd\u5e26\u6709\u7279\u5b9a\u6807\u7b7e\u7684\u8d44\u6e90\u3002

    \u5e94\u7528\u5907\u4efd\u652f\u6301\u8de8\u96c6\u7fa4\u5907\u4efd\u6709\u72b6\u6001\u5e94\u7528\uff0c\u5177\u4f53\u6b65\u9aa4\u53ef\u53c2\u8003MySQL \u5e94\u7528\u53ca\u6570\u636e\u7684\u8de8\u96c6\u7fa4\u5907\u4efd\u6062\u590d\u3002

  • ETCD \u5907\u4efd

    etcd \u662f Kubernetes \u7684\u6570\u636e\u5b58\u50a8\u7ec4\u4ef6\uff0cKubernetes \u5c06\u81ea\u8eab\u7684\u7ec4\u4ef6\u6570\u636e\u548c\u5176\u4e2d\u7684\u5e94\u7528\u6570\u636e\u90fd\u5b58\u50a8\u5728 etcd \u4e2d\u3002\u56e0\u6b64\uff0c\u5907\u4efd etcd \u5c31\u76f8\u5f53\u4e8e\u5907\u4efd\u6574\u4e2a\u96c6\u7fa4\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u5728\u6545\u969c\u65f6\u5feb\u901f\u5c06\u96c6\u7fa4\u6062\u590d\u5230\u4e4b\u524d\u67d0\u4e00\u65f6\u70b9\u7684\u72b6\u6001\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u76ee\u524d\u4ec5\u652f\u6301\u5c06 etcd \u5907\u4efd\u6570\u636e\u6062\u590d\u5230\u540c\u4e00\u96c6\u7fa4\uff08\u539f\u96c6\u7fa4\uff09\u3002

"},{"location":"admin/kpanda/backup/deployment.html","title":"\u5e94\u7528\u5907\u4efd","text":"

\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4e3a\u5e94\u7528\u505a\u5907\u4efd\uff0c\u672c\u6559\u7a0b\u4e2d\u4f7f\u7528\u7684\u6f14\u793a\u5e94\u7528\u540d\u4e3a dao-2048 \uff0c\u5c5e\u4e8e\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u3002

"},{"location":"admin/kpanda/backup/deployment.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u5728\u5bf9\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u8fdb\u884c\u5907\u4efd\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

  • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

  • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

  • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

  • \u5b89\u88c5 velero \u7ec4\u4ef6\uff0c\u4e14 velero \u7ec4\u4ef6\u8fd0\u884c\u6b63\u5e38\u3002

  • \u521b\u5efa\u4e00\u4e2a\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\uff08\u672c\u6559\u7a0b\u4e2d\u7684\u8d1f\u8f7d\u540d\u4e3a dao-2048 \uff09\uff0c\u5e76\u4e3a\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u6253\u4e0a app: dao-2048 \u7684\u6807\u7b7e\u3002

"},{"location":"admin/kpanda/backup/deployment.html#_3","title":"\u5907\u4efd\u5de5\u4f5c\u8d1f\u8f7d","text":"

\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u5907\u4efd\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d dao-2048 \u3002

  1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c \u70b9\u51fb \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d \u3002

  2. \u8fdb\u5165 \u5e94\u7528\u5907\u4efd \u5217\u8868\u9875\u9762\uff0c\u4ece\u96c6\u7fa4\u4e0b\u62c9\u5217\u8868\u4e2d\u9009\u62e9\u5df2\u5b89\u88c5\u4e86 velero \u548c dao-2048 \u7684\u96c6\u7fa4\u3002 \u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa\u5907\u4efd\u8ba1\u5212 \u6309\u94ae\u3002

  3. \u53c2\u8003\u4e0b\u65b9\u8bf4\u660e\u586b\u5199\u5907\u4efd\u914d\u7f6e\u3002

  4. \u53c2\u8003\u4e0b\u65b9\u8bf4\u660e\u8bbe\u7f6e\u5907\u4efd\u6267\u884c\u9891\u7387\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

    • \u5907\u4efd\u9891\u7387\uff1a\u57fa\u4e8e\u5206\u949f\u3001\u5c0f\u65f6\u3001\u5929\u3001\u5468\u3001\u6708\u8bbe\u7f6e\u4efb\u52a1\u6267\u884c\u7684\u65f6\u95f4\u5468\u671f\u3002\u652f\u6301\u7528\u6570\u5b57\u548c * \u81ea\u5b9a\u4e49 Cron \u8868\u8fbe\u5f0f\uff0c\u8f93\u5165\u8868\u8fbe\u5f0f\u540e\u4e0b\u65b9\u4f1a\u63d0\u793a\u5f53\u524d\u8868\u8fbe\u5f0f\u7684\u542b\u4e49\u3002\u6709\u5173\u8be6\u7ec6\u7684\u8868\u8fbe\u5f0f\u8bed\u6cd5\u89c4\u5219\uff0c\u53ef\u53c2\u8003 Cron \u65f6\u95f4\u8868\u8bed\u6cd5\u3002
    • \u7559\u5b58\u65f6\u957f\uff08\u5929\uff09\uff1a\u8bbe\u7f6e\u5907\u4efd\u8d44\u6e90\u4fdd\u5b58\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 30 \u5929\uff0c\u8fc7\u671f\u540e\u5c06\u4f1a\u88ab\u5220\u9664\u3002
    • \u5907\u4efd\u6570\u636e\u5377\uff08PV\uff09\uff1a\u662f\u5426\u5907\u4efd\u6570\u636e\u5377\uff08PV\uff09\u4e2d\u7684\u6570\u636e\uff0c\u652f\u6301\u76f4\u63a5\u590d\u5236\u548c\u4f7f\u7528 CSI \u5feb\u7167\u4e24\u79cd\u65b9\u5f0f\u3002
      • \u76f4\u63a5\u590d\u5236\uff1a\u76f4\u63a5\u590d\u5236\u6570\u636e\u5377\uff08PV\uff09\u4e2d\u7684\u6570\u636e\u7528\u4e8e\u5907\u4efd\uff1b
      • \u4f7f\u7528 CSI \u5feb\u7167\uff1a\u4f7f\u7528 CSI \u5feb\u7167\u6765\u5907\u4efd\u6570\u636e\u5377\uff08PV\uff09\u3002\u9700\u8981\u96c6\u7fa4\u4e2d\u6709\u53ef\u7528\u4e8e\u5907\u4efd\u7684 CSI \u5feb\u7167\u7c7b\u578b\u3002

  5. \u70b9\u51fb \u786e\u5b9a \uff0c\u9875\u9762\u4f1a\u81ea\u52a8\u8fd4\u56de\u5e94\u7528\u5907\u4efd\u8ba1\u5212\u5217\u8868\u3002\u60a8\u53ef\u4ee5\u627e\u5230\u65b0\u5efa\u7684 dao-2048 \u5907\u4efd\u8ba1\u5212\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u9009\u62e9 \u7acb\u5373\u6267\u884c \u5f00\u59cb\u5907\u4efd\u3002

  6. \u6b64\u65f6\u96c6\u7fa4\u7684 \u4e0a\u4e00\u6b21\u6267\u884c\u72b6\u6001 \u5c06\u8f6c\u53d8\u4e3a \u5907\u4efd\u4e2d \u3002\u7b49\u5f85\u5907\u4efd\u5b8c\u6210\u540e\u53ef\u4ee5\u70b9\u51fb\u5907\u4efd\u8ba1\u5212\u7684\u540d\u79f0\uff0c\u67e5\u770b\u5907\u4efd\u8ba1\u5212\u8be6\u60c5\u3002

Note

\u5982\u679c Job \u7c7b\u578b\u7684\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u4e3a \u6267\u884c\u5b8c\u6210 \uff0c\u5219\u4e0d\u652f\u6301\u5907\u4efd\u3002

"},{"location":"admin/kpanda/backup/etcd-backup.html","title":"etcd \u5907\u4efd","text":"

etcd \u5907\u4efd\u662f\u4ee5\u96c6\u7fa4\u6570\u636e\u4e3a\u6838\u5fc3\u7684\u5907\u4efd\u3002\u5728\u786c\u4ef6\u8bbe\u5907\u635f\u574f\uff0c\u5f00\u53d1\u6d4b\u8bd5\u914d\u7f6e\u9519\u8bef\u7b49\u573a\u666f\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7 etcd \u5907\u4efd\u6062\u590d\u96c6\u7fa4\u6570\u636e\u3002

\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4e3a\u96c6\u7fa4\u5236\u4f5c etcd \u5907\u4efd\u3002

"},{"location":"admin/kpanda/backup/etcd-backup.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
  • \u63a5\u5165\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

  • \u521b\u5efa\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

  • \u51c6\u5907\u4e00\u4e2a MinIO \u5b9e\u4f8b\u3002

"},{"location":"admin/kpanda/backup/etcd-backup.html#etcd_1","title":"\u521b\u5efa etcd \u5907\u4efd","text":"

\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u521b\u5efa etcd \u5907\u4efd\u3002

  1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d -> etcd \u5907\u4efd \uff0c\u70b9\u51fb \u5907\u4efd\u7b56\u7565 \u9875\u7b7e\uff0c\u7136\u540e\u5728\u53f3\u4fa7\u70b9\u51fb \u521b\u5efa\u5907\u4efd\u7b56\u7565 \u3002

  2. \u53c2\u8003\u4ee5\u4e0b\u8bf4\u660e\u586b\u5199 \u57fa\u672c\u4fe1\u606f \u3002\u586b\u5199\u5b8c\u6bd5\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \uff0c\u7cfb\u7edf\u5c06\u81ea\u52a8\u6821\u9a8c etcd \u7684\u8054\u901a\u6027\uff0c\u6821\u9a8c\u901a\u8fc7\u4e4b\u540e\u53ef\u4ee5\u8fdb\u884c\u4e0b\u4e00\u6b65\u3002

    • \u5907\u4efd\u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u5907\u4efd\u54ea\u4e2a\u96c6\u7fa4\u7684 etcd \u6570\u636e\uff0c\u5e76\u5728\u7ec8\u7aef\u767b\u5f55
    • etcd \u5730\u5740\uff1a\u683c\u5f0f\u4e3a https://${\u8282\u70b9IP}:${\u7aef\u53e3\u53f7}

      • \u5728\u6807\u51c6 Kubernetes \u96c6\u7fa4\u4e2d\uff0cetcd \u7684\u9ed8\u8ba4\u7aef\u53e3\u53f7\u4e3a 2379
      • \u5728\u516c\u6709\u4e91\u6258\u7ba1\u96c6\u7fa4\u4e2d\uff0c\u9700\u8981\u8054\u7cfb\u76f8\u5173\u5f00\u53d1\u4eba\u5458\u83b7\u53d6 etcd \u7684\u7aef\u53e3\u53f7\u3002 \u8fd9\u662f\u56e0\u4e3a\u516c\u6709\u4e91\u96c6\u7fa4\u7684\u63a7\u5236\u9762\u7ec4\u4ef6\u7531\u4e91\u670d\u52a1\u63d0\u4f9b\u5546\u7ef4\u62a4\u548c\u7ba1\u7406\uff0c\u7528\u6237\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee\u6216\u67e5\u770b\u8fd9\u4e9b\u7ec4\u4ef6\uff0c \u4e5f\u65e0\u6cd5\u901a\u8fc7\u5e38\u89c4\u547d\u4ee4\uff08\u5982 kubectl\uff09\u65e0\u6cd5\u83b7\u53d6\u5230\u63a7\u5236\u9762\u7684\u7aef\u53e3\u7b49\u4fe1\u606f\u3002
      \u83b7\u53d6\u7aef\u53e3\u53f7\u7684\u65b9\u5f0f
      1. \u5728 kube-system \u547d\u540d\u7a7a\u95f4\u4e0b\u67e5\u627e etcd Pod

        kubectl get po -n kube-system | grep etcd\n
      2. \u83b7\u53d6 etcd Pod \u7684 listen-client-urls \u4e2d\u7684\u7aef\u53e3\u53f7

        kubectl get po -n kube-system ${etcd_pod_name} -oyaml | grep listen-client-urls # (1)!\n
        1. \u5c06 etcd_pod_name \u66ff\u6362\u4e3a\u5b9e\u9645\u7684 Pod \u540d\u79f0

        \u9884\u671f\u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\uff0c\u8282\u70b9 IP \u540e\u7684\u6570\u5b57\u5373\u4e3a\u7aef\u53e3\u53f7:

        - --listen-client-urls=https://127.0.0.1:2379,https://10.6.229.191:2379\n
    • CA \u8bc1\u4e66\uff1a\u53ef\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\uff0c\u7136\u540e\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u7c98\u8d34\u5230\u5bf9\u5e94\u4f4d\u7f6e\uff1a

      cat /etc/kubernetes/ssl/etcd/ca.crt\n
    • Cert \u8bc1\u4e66\uff1a\u53ef\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\uff0c\u7136\u540e\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u7c98\u8d34\u5230\u5bf9\u5e94\u4f4d\u7f6e\uff1a

      cat /etc/kubernetes/ssl/apiserver-etcd-client.crt\n
    • Key\uff1a\u53ef\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\uff0c\u7136\u540e\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u7c98\u8d34\u5230\u5bf9\u5e94\u4f4d\u7f6e\uff1a

      cat /etc/kubernetes/ssl/apiserver-etcd-client.key\n

    Note

    \u70b9\u51fb\u8f93\u5165\u6846\u4e0b\u65b9\u7684 \u5982\u4f55\u83b7\u53d6 \u53ef\u4ee5\u5728 UI \u9875\u9762\u67e5\u770b\u83b7\u53d6\u5bf9\u5e94\u4fe1\u606f\u7684\u65b9\u5f0f\u3002

  3. \u53c2\u8003\u4ee5\u4e0b\u4fe1\u606f\u586b\u5199 \u5907\u4efd\u7b56\u7565 \u3002

    • \u5907\u4efd\u65b9\u5f0f\uff1a\u9009\u62e9\u624b\u52a8\u5907\u4efd\u6216\u5b9a\u65f6\u5907\u4efd

      • \u624b\u52a8\u5907\u4efd\uff1a\u57fa\u4e8e\u5907\u4efd\u914d\u7f6e\u7acb\u5373\u6267\u884c\u4e00\u6b21 etcd \u5168\u91cf\u6570\u636e\u7684\u5907\u4efd\u3002
      • \u5b9a\u65f6\u5907\u4efd\uff1a\u6309\u7167\u8bbe\u7f6e\u7684\u5907\u4efd\u9891\u7387\u5bf9 etcd \u6570\u636e\u8fdb\u884c\u5468\u671f\u6027\u5168\u91cf\u5907\u4efd\u3002
    • \u5907\u4efd\u94fe\u957f\u5ea6\uff1a\u6700\u591a\u4fdd\u7559\u591a\u5c11\u6761\u5907\u4efd\u6570\u636e\u3002\u9ed8\u8ba4\u4e3a 30 \u6761\u3002

    • \u5907\u4efd\u9891\u7387\uff1a\u652f\u6301\u5c0f\u65f6\u3001\u65e5\u3001\u5468\u3001\u6708\u7ea7\u522b\u548c\u81ea\u5b9a\u4e49\u65b9\u5f0f\u3002

  4. \u53c2\u8003\u4ee5\u4e0b\u4fe1\u606f\u586b\u5199 \u5b58\u50a8\u4f4d\u7f6e \u3002

    • \u5b58\u50a8\u4f9b\u5e94\u5546\uff1a\u9ed8\u8ba4\u9009\u62e9 S3 \u5b58\u50a8
    • \u5bf9\u8c61\u5b58\u50a8\u8bbf\u95ee\u5730\u5740\uff1aMinIO \u7684\u8bbf\u95ee\u5730\u5740
    • \u5b58\u50a8\u6876\uff1a\u5728 MinIO \u4e2d\u521b\u5efa\u4e00\u4e2a Bucket\uff0c\u586b\u5199 Bucket \u7684\u540d\u79f0
    • \u7528\u6237\u540d\uff1aMinIO \u7684\u767b\u5f55\u7528\u6237\u540d
    • \u5bc6\u7801\uff1aMinIO \u7684\u767b\u5f55\u5bc6\u7801

  5. \u70b9\u51fb \u786e\u5b9a \u540e\u9875\u9762\u81ea\u52a8\u8df3\u8f6c\u5230\u5907\u4efd\u7b56\u7565\u5217\u8868\uff0c\u53ef\u4ee5\u67e5\u770b\u76ee\u524d\u521b\u5efa\u597d\u7684\u6240\u6709\u7b56\u7565\u3002

    • \u5728\u7b56\u7565\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u6309\u94ae\u53ef\u4ee5\u67e5\u770b\u65e5\u5fd7\u3001\u67e5\u770b YAML\u3001\u66f4\u65b0\u7b56\u7565\u3001\u505c\u6b62\u7b56\u7565\u3001\u7acb\u5373\u6267\u884c\u7b56\u7565\u7b49\u3002
    • \u5f53\u5907\u4efd\u65b9\u5f0f\u4e3a\u624b\u52a8\u65f6\uff0c\u53ef\u4ee5\u70b9\u51fb \u7acb\u5373\u6267\u884c \u8fdb\u884c\u5907\u4efd\u3002
    • \u5f53\u5907\u4efd\u65b9\u5f0f\u4e3a\u5b9a\u65f6\u5907\u4efd\u65f6\uff0c\u5219\u4f1a\u6839\u636e\u914d\u7f6e\u7684\u65f6\u95f4\u8fdb\u884c\u5907\u4efd\u3002

"},{"location":"admin/kpanda/backup/etcd-backup.html#_2","title":"\u67e5\u770b\u5907\u4efd\u7b56\u7565\u65e5\u5fd7","text":"

\u70b9\u51fb \u65e5\u5fd7 \u53ef\u4ee5\u67e5\u770b\u65e5\u5fd7\u5185\u5bb9\uff0c\u9ed8\u8ba4\u5c55\u793a 100 \u884c\u3002\u82e5\u60f3\u67e5\u770b\u66f4\u591a\u65e5\u5fd7\u4fe1\u606f\u6216\u8005\u4e0b\u8f7d\u65e5\u5fd7\uff0c\u53ef\u5728\u65e5\u5fd7\u4e0a\u65b9\u6839\u636e\u63d0\u793a\u524d\u5f80\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u3002

"},{"location":"admin/kpanda/backup/etcd-backup.html#_3","title":"\u67e5\u770b\u5907\u4efd\u7b56\u7565\u8be6\u60c5","text":"

\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d -> etcd \u5907\u4efd \uff0c\u70b9\u51fb \u5907\u4efd\u7b56\u7565 \u9875\u7b7e\uff0c\u63a5\u7740\u70b9\u51fb\u7b56\u7565\u540d\u79f0\u53ef\u4ee5\u67e5\u770b\u7b56\u7565\u8be6\u60c5\u3002

"},{"location":"admin/kpanda/backup/etcd-backup.html#_4","title":"\u67e5\u770b\u5907\u4efd\u70b9","text":"
  1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d -> etcd \u5907\u4efd \uff0c\u70b9\u51fb \u5907\u4efd\u70b9 \u9875\u7b7e\u3002
  2. \u9009\u62e9\u76ee\u6807\u96c6\u7fa4\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u96c6\u7fa4\u4e0b\u6240\u6709\u5907\u4efd\u4fe1\u606f\u3002

    \u6bcf\u6267\u884c\u4e00\u6b21\u5907\u4efd\uff0c\u5bf9\u5e94\u751f\u6210\u4e00\u4e2a\u5907\u4efd\u70b9\uff0c\u53ef\u901a\u8fc7\u6210\u529f\u72b6\u6001\u7684\u5907\u4efd\u70b9\u5feb\u901f\u6062\u590d\u5e94\u7528\u3002

"},{"location":"admin/kpanda/backup/install-velero.html","title":"\u5b89\u88c5 velero \u63d2\u4ef6","text":"

velero \u662f\u4e00\u4e2a\u5907\u4efd\u548c\u6062\u590d Kubernetes \u96c6\u7fa4\u8d44\u6e90\u7684\u5f00\u6e90\u5de5\u5177\u3002\u5b83\u53ef\u4ee5\u5c06 Kubernetes \u96c6\u7fa4\u4e2d\u7684\u8d44\u6e90\u5907\u4efd\u5230\u4e91\u5b58\u50a8\u670d\u52a1\u3001\u672c\u5730\u5b58\u50a8\u6216\u5176\u4ed6\u4f4d\u7f6e\uff0c\u5e76\u4e14\u53ef\u4ee5\u5728\u9700\u8981\u65f6\u5c06\u8fd9\u4e9b\u8d44\u6e90\u6062\u590d\u5230\u540c\u4e00\u6216\u4e0d\u540c\u7684\u96c6\u7fa4\u4e2d\u3002

\u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528 Helm \u5e94\u7528 \u90e8\u7f72 velero \u63d2\u4ef6\u3002

"},{"location":"admin/kpanda/backup/install-velero.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

\u5b89\u88c5 velero \u63d2\u4ef6\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

  • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

  • \u521b\u5efa velero \u547d\u540d\u7a7a\u95f4\u3002

  • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

"},{"location":"admin/kpanda/backup/install-velero.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

\u8bf7\u6267\u884c\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 velero \u63d2\u4ef6\u3002

  1. \u5728\u96c6\u7fa4\u5217\u8868\u9875\u9762\u627e\u5230\u9700\u8981\u5b89\u88c5 velero \u63d2\u4ef6\u7684\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u5728\u641c\u7d22\u680f\u8f93\u5165 velero \u8fdb\u884c\u641c\u7d22\u3002

  2. \u9605\u8bfb velero \u63d2\u4ef6\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u672c\u6587\u5c06\u4ee5 4.0.2 \u7248\u672c\u4e3a\u4f8b\u8fdb\u884c\u5b89\u88c5\uff0c\u63a8\u8350\u5b89\u88c5 4.0.2 \u6216\u66f4\u9ad8\u7248\u672c\u3002

  3. \u586b\u5199\u548c\u914d\u7f6e\u53c2\u6570\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65

    \u57fa\u672c\u53c2\u6570\u53c2\u6570\u914d\u7f6e

    • \u540d\u79f0\uff1a\u5fc5\u586b\u53c2\u6570\uff0c\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09,\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 metrics-server-01\u3002
    • \u547d\u540d\u7a7a\u95f4\uff1a\u63d2\u4ef6\u5b89\u88c5\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4e3a velero \u547d\u540d\u7a7a\u95f4\u3002
    • \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 4.0.2 \u7248\u672c\u4e3a\u4f8b\u3002
    • \u5c31\u7eea\u7b49\u5f85\uff1a\u53ef\u9009\u53c2\u6570\uff0c\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u6240\u6709\u5173\u8054\u8d44\u6e90\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
    • \u5931\u8d25\u5220\u9664\uff1a\u53ef\u9009\u53c2\u6570\uff0c\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f\u5c31\u7eea\u7b49\u5f85\u3002\u5982\u679c\u5b89\u88c5\u5931\u8d25\uff0c\u5c06\u5220\u9664\u5b89\u88c5\u76f8\u5173\u8d44\u6e90\u3002
    • \u8be6\u60c5\u65e5\u5fd7\uff1a\u53ef\u9009\u53c2\u6570\uff0c\u5f00\u542f\u540e\u5c06\u8f93\u51fa\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

    Note

    \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u7ecf\u8fc7\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

    • S3 Credentials\uff1a

      • Use secret \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e true \u3002
      • Secret name \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e velero-s3-credential \u3002
      • SecretContents.aws_access_key_id = \uff1a\u914d\u7f6e\u8bbf\u95ee\u5bf9\u8c61\u5b58\u50a8\u7684\u7528\u6237\u540d\uff0c\u66ff\u6362 \u4e3a\u771f\u5b9e\u53c2\u6570\u3002
      • SecretContents.aws_secret_access_key = \uff1a\u914d\u7f6e\u8bbf\u95ee\u5bf9\u8c61\u5b58\u50a8\u7684\u5bc6\u7801\uff0c\u66ff\u6362 \u4e3a\u771f\u5b9e\u53c2\u6570\u3002

        config \"SecretContents \u6837\u4f8b\" [default] aws_access_key_id = minio aws_secret_access_key = minio123

      • Velero Configuration\uff1a

        • Backupstoragelocation \uff1avelero \u5907\u4efd\u6570\u636e\u5b58\u50a8\u7684\u4f4d\u7f6e
        • S3 bucket \uff1a\u7528\u4e8e\u4fdd\u5b58\u5907\u4efd\u6570\u636e\u7684\u5b58\u50a8\u6876\u540d\u79f0(\u9700\u4e3a minio \u5df2\u7ecf\u5b58\u5728\u7684\u771f\u5b9e\u5b58\u50a8\u6876)
        • Is default BackupStorage \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e true
        • S3 access mode \uff1avelero \u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u6a21\u5f0f\uff0c\u53ef\u4ee5\u9009\u62e9
          • ReadWrite \uff1a\u5141\u8bb8 velero \u8bfb\u5199\u5907\u4efd\u6570\u636e
          • ReadOnly \uff1a\u5141\u8bb8 velero \u8bfb\u53d6\u5907\u4efd\u6570\u636e\uff0c\u4e0d\u80fd\u4fee\u6539\u5907\u4efd\u6570\u636e
          • WriteOnly \uff1a\u53ea\u5141\u8bb8 velero \u5199\u5165\u5907\u4efd\u6570\u636e\uff0c\u4e0d\u80fd\u8bfb\u53d6\u5907\u4efd\u6570\u636e
        • S3 Configs \uff1aS3 \u5b58\u50a8\uff08minio\uff09\u7684\u8be6\u7ec6\u914d\u7f6e
        • S3 region \uff1a\u4e91\u5b58\u50a8\u7684\u5730\u7406\u533a\u57df\u3002\u9ed8\u8ba4\u4f7f\u7528 us-east-1 \u53c2\u6570\uff0c\u7531\u7cfb\u7edf\u7ba1\u7406\u5458\u63d0\u4f9b
        • S3 force path style \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e true
        • S3 server URL \uff1a\u5bf9\u8c61\u5b58\u50a8\uff08minio\uff09\u7684\u63a7\u5236\u53f0\u8bbf\u95ee\u5730\u5740\uff0cminio \u4e00\u822c\u63d0\u4f9b\u4e86 UI \u8bbf\u95ee\u548c\u63a7\u5236\u53f0\u8bbf\u95ee\u4e24\u4e2a\u670d\u52a1\uff0c\u6b64\u5904\u8bf7\u4f7f\u7528\u63a7\u5236\u53f0\u8bbf\u95ee\u7684\u5730\u5740

        Note

        \u8bf7\u786e\u4fdd s3 \u5b58\u50a8\u670d\u52a1\u65f6\u95f4\u8ddf\u5907\u4efd\u8fd8\u539f\u96c6\u7fa4\u65f6\u95f4\u5dee\u572810\u5206\u949f\u4ee5\u5185\uff0c\u6700\u597d\u662f\u65f6\u95f4\u4fdd\u6301\u540c\u6b65\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u6267\u884c\u5907\u4efd\u64cd\u4f5c\u3002

      • migration plugin configuration\uff1a\u542f\u7528\u4e4b\u540e\uff0c\u5c06\u5728\u4e0b\u4e00\u6b65\u7684 YAML \u4ee3\u7801\u6bb5\u4e2d\u65b0\u589e\uff1a

        ...\ninitContainers:\n  - image: 'release.daocloud.io/kcoral/velero-plugin-for-migration:v0.3.0'\n    imagePullPolicy: IfNotPresent\n    name: velero-plugin-for-migration\n    volumeMounts:\n      - mountPath: /target\n        name: plugins\n  - image: 'docker.m.daocloud.io/velero/velero-plugin-for-csi:v0.7.0'\n    imagePullPolicy: IfNotPresent\n    name: velero-plugin-for-csi\n    volumeMounts:\n      - mountPath: /target\n        name: plugins\n  - image: 'docker.m.daocloud.io/velero/velero-plugin-for-aws:v1.9.0'\n    imagePullPolicy: IfNotPresent\n    name: velero-plugin-for-aws\n    volumeMounts:\n      - mountPath: /target\n        name: plugins\n...\n
      • \u786e\u8ba4 YAML \u65e0\u8bef\u540e\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210 velero \u63d2\u4ef6\u7684\u5b89\u88c5\u3002 \u4e4b\u540e\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\uff0c\u7a0d\u7b49\u51e0\u5206\u949f\u540e\uff0c\u4e3a\u9875\u9762\u6267\u884c\u5237\u65b0\u64cd\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

      • "},{"location":"admin/kpanda/best-practice/add-master-node.html","title":"\u5bf9\u5de5\u4f5c\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u6269\u5bb9","text":"

        \u672c\u6587\u5c06\u4ee5\u4e00\u4e2a\u5355\u63a7\u5236\u8282\u70b9\u7684\u5de5\u4f5c\u96c6\u7fa4\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u624b\u52a8\u4e3a\u5de5\u4f5c\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u8fdb\u884c\u6269\u5bb9\uff0c\u4ee5\u5b9e\u73b0\u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u9ad8\u53ef\u7528\u3002

        Note

        • \u63a8\u8350\u5728\u754c\u9762\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u65f6\u5373\u5f00\u542f\u9ad8\u53ef\u7528\u6a21\u5f0f\uff0c\u624b\u52a8\u6269\u5bb9\u5de5\u4f5c\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u5b58\u5728\u4e00\u5b9a\u7684\u64cd\u4f5c\u98ce\u9669\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002
        • \u5f53\u5de5\u4f5c\u96c6\u7fa4\u7684\u9996\u4e2a\u63a7\u5236\u8282\u70b9\u6545\u969c\u6216\u5f02\u5e38\u65f6\uff0c\u5982\u679c\u60a8\u60f3\u66ff\u6362\u6216\u91cd\u65b0\u63a5\u5165\u9996\u4e2a\u63a7\u5236\u8282\u70b9\uff0c \u8bf7\u53c2\u8003\u66ff\u6362\u5de5\u4f5c\u96c6\u7fa4\u7684\u9996\u4e2a\u63a7\u5236\u8282\u70b9
        "},{"location":"admin/kpanda/best-practice/add-master-node.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u901a\u8fc7 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u521b\u5efa\u597d\u4e00\u4e2a\u5de5\u4f5c\u96c6\u7fa4\uff0c\u53ef\u53c2\u8003\u6587\u6863\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u3002
        • \u5de5\u4f5c\u96c6\u7fa4\u7684\u88ab\u7eb3\u7ba1\u96c6\u7fa4\u5b58\u5728\u5f53\u524d\u5e73\u53f0\u4e2d\uff0c\u5e76\u4e14\u72b6\u6001\u8fd0\u884c\u6b63\u5e38\u3002

        Note

        \u88ab\u7eb3\u7ba1\u96c6\u7fa4\uff1a\u5728\u754c\u9762\u521b\u5efa\u96c6\u7fa4\u65f6\u6307\u5b9a\u7684\u7528\u6765\u7ba1\u7406\u5f53\u524d\u96c6\u7fa4\uff0c\u5e76\u4e3a\u5f53\u524d\u96c6\u7fa4\u63d0\u4f9b kubernetes \u7248\u672c\u5347\u7ea7\u3001\u8282\u70b9\u6269\u7f29\u5bb9\u3001\u5378\u8f7d\u3001\u64cd\u4f5c\u8bb0\u5f55\u7b49\u80fd\u529b\u7684\u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/add-master-node.html#_3","title":"\u4fee\u6539\u4e3b\u673a\u6e05\u5355\u6587\u4ef6","text":"
        1. \u767b\u5f55\u5230\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u8fdb\u5165\u9700\u8981\u8fdb\u884c\u63a7\u5236\u8282\u70b9\u6269\u5bb9\u7684\u96c6\u7fa4\u6982\u89c8\u9875\u9762\uff0c\u5728 \u57fa\u672c\u4fe1\u606f \u5904\uff0c\u627e\u5230\u5f53\u524d\u96c6\u7fa4\u7684 \u88ab\u7eb3\u7ba1\u96c6\u7fa4 \uff0c \u70b9\u51fb\u88ab\u7eb3\u7ba1\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u88ab\u7eb3\u7ba1\u96c6\u7fa4\u7684\u6982\u89c8\u754c\u9762\u3002

        2. \u5728\u88ab\u7eb3\u7ba1\u96c6\u7fa4\u7684\u6982\u89c8\u754c\u9762\uff0c\u70b9\u51fb \u63a7\u5236\u53f0\uff0c\u6253\u5f00\u4e91\u7ec8\u7aef\u63a7\u5236\u53f0\uff0c\u5e76\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u627e\u5230\u5f85\u6269\u5bb9\u5de5\u4f5c\u96c6\u7fa4\u7684\u4e3b\u673a\u6e05\u5355\u6587\u4ef6\u3002

          kubectl get cm -n kubean-system ${ClusterName}-hosts-conf -oyaml\n

          ${ClusterName}\uff1a\u4e3a\u5f85\u6269\u5bb9\u5de5\u4f5c\u96c6\u7fa4\u7684\u540d\u79f0\u3002

        3. \u53c2\u8003\u4e0b\u65b9\u793a\u4f8b\u4fee\u6539\u4e3b\u673a\u6e05\u5355\u6587\u4ef6\uff0c\u65b0\u589e\u63a7\u5236\u8282\u70b9\u4fe1\u606f\u3002

          \u4fee\u6539\u524d\u4fee\u6539\u540e
          apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: tanghai-dev-hosts-conf\n  namespace: kubean-system\ndata:\n  hosts.yml: |\n    all:\n      hosts:\n        node1:\n          ip: 10.6.175.10 \n          access_ip: 10.6.175.10\n          ansible_host: 10.6.175.10 \n          ansible_connection: ssh\n          ansible_user: root\n          ansible_password: password01\n      children:\n        kube_control_plane:\n          hosts:\n            node1:\n        kube_node:\n          hosts:\n            node1:\n        etcd:\n          hosts:\n            node1:\n        k8s_cluster:\n          children:\n            kube_control_plane:\n            kube_node:\n        calico_rr:\n          hosts: {}\n......\n
          apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: tanghai-dev-hosts-conf\n  namespace: kubean-system\ndata:\n  hosts.yml: |\n    all:\n      hosts:\n        node1: # \u539f\u96c6\u7fa4\u4e2d\u5df2\u5b58\u5728\u7684\u4e3b\u8282\u70b9\n          ip: 10.6.175.10\n          access_ip: 10.6.175.10 \n          ansible_host: 10.6.175.10\n          ansible_connection: ssh\n          ansible_user: root\n          ansible_password: password01\n        node2: # \u96c6\u7fa4\u6269\u5bb9\u5f85\u65b0\u589e\u7684\u63a7\u5236\u8282\u70b9\n          ip: 10.6.175.20\n          access_ip: 10.6.175.20\n          ansible_host: 10.6.175.20\n          ansible_connection: ssh\n          ansible_user: root\n          ansible_password: password01\n        node3: # \u96c6\u7fa4\u6269\u5bb9\u5f85\u65b0\u589e\u7684\u63a7\u5236\u8282\u70b9\n          ip: 10.6.175.30 \n          access_ip: 10.6.175.30\n          ansible_host: 10.6.175.30 \n          ansible_connection: ssh\n          ansible_user: root\n          ansible_password: password01\n      children:\n        kube_control_plane:\n          hosts: # \u96c6\u7fa4\u4e2d\u7684\u63a7\u5236\u8282\u70b9\u7ec4\n            node1:\n            node2: # \u65b0\u589e\u63a7\u5236\u8282\u70b9 node2 \u5185\u5bb9 \n            node3: # \u65b0\u589e\u63a7\u5236\u8282\u70b9 node3 \u5185\u5bb9 \n        kube_node:\n          hosts: # \u96c6\u7fa4\u4e2d\u7684\u5de5\u4f5c\u8282\u70b9\u7ec4\n            node1:\n            node2: # \u65b0\u589e\u63a7\u5236\u8282\u70b9 node2 \u5185\u5bb9 \n            node3: # \u65b0\u589e\u63a7\u5236\u8282\u70b9 node3 \u5185\u5bb9 \n        etcd:\n          hosts: # \u96c6\u7fa4\u4e2d\u7684 ETCD \u8282\u70b9\u7ec4\n            node1:\n            node2: # \u65b0\u589e\u63a7\u5236\u8282\u70b9 node2 \u5185\u5bb9 \n            node3: # \u65b0\u589e\u63a7\u5236\u8282\u70b9 node3 \u5185\u5bb9 \n        k8s_cluster:\n          children:\n            kube_control_plane:\n            kube_node:\n        calico_rr:\n          hosts: {}\n
        "},{"location":"admin/kpanda/best-practice/add-master-node.html#clusteroperationyml","title":"\u65b0\u589e ClusterOperation.yml \u6269\u5bb9\u4efb\u52a1","text":"

        \u4f7f\u7528\u57fa\u4e8e\u4e0b\u9762\u7684 ClusterOperation.yml \u6a21\u677f\uff0c\u65b0\u589e\u4e00\u4e2a\u96c6\u7fa4\u63a7\u5236\u8282\u70b9\u6269\u5bb9\u4efb\u52a1 scale-master-node-ops.yaml \u3002

        ClusterOperation.yml
        apiVersion: kubean.io/v1alpha1\nkind: ClusterOperation\nmetadata:\n  name: cluster1-online-install-ops\nspec:\n  cluster: ${cluster-name} # (1)!\n  image: ghcr.m.daocloud.io/kubean-io/spray-job:v0.18.0 # (2)!\n  actionType: playbook\n  action: cluster.yml # (3)!\n  extraArgs: --limit=etcd,kube_control_plane -e ignore_assert_errors=yes\n  preHook:\n    - actionType: playbook\n      action: ping.yml\n    - actionType: playbook\n      action: disable-firewalld.yml\n    - actionType: playbook\n      action: enable-repo.yml  # (4)!\n      extraArgs: | # \u5982\u679c\u662f\u79bb\u7ebf\u73af\u5883\uff0c\u9700\u8981\u6dfb\u52a0 enable-repo.yml\uff0c\u5e76\u4e14 extraArgs \u53c2\u6570\u586b\u5199\u76f8\u5173 OS \u7684\u6b63\u786e repo_list\n        -e \"{repo_list: ['http://172.30.41.0:9000/kubean/centos/\\$releasever/os/\\$basearch','http://172.30.41.0:9000/kubean/centos-iso/\\$releasever/os/\\$basearch']}\"\n  postHook:\n    - actionType: playbook\n      action: upgrade-cluster.yml\n      extraArgs: --limit=etcd,kube_control_plane -e ignore_assert_errors=yes\n    - actionType: playbook\n      action: kubeconfig.yml\n    - actionType: playbook\n      action: cluster-info.yml\n
        1. \u6307\u5b9a cluster name
        2. \u6307\u5b9a kubean \u4efb\u52a1\u8fd0\u884c\u7684\u955c\u50cf\uff0c\u955c\u50cf\u5730\u5740\u8981\u4e0e\u4e4b\u524d\u6267\u884c\u90e8\u7f72\u65f6\u7684 job \u5176\u5185\u955c\u50cf\u4fdd\u6301\u4e00\u81f4
        3. \u5982\u679c\u4e00\u6b21\u6027\u6dfb\u52a0 Master\uff08etcd\uff09\u8282\u70b9\u8d85\u8fc7\uff08\u5305\u542b\uff09\u4e09\u4e2a\uff0c\u9700\u5728 cluster.yaml \u8ffd\u52a0\u989d\u5916\u53c2\u6570 -e etcd_retries=10 \u4ee5\u589e\u5927 etcd node join \u91cd\u8bd5\u6b21\u6570
        4. \u79bb\u7ebf\u73af\u5883\u4e0b\u9700\u8981\u6dfb\u52a0\u6b64 yaml\uff0c\u5e76\u4e14\u8bbe\u7f6e\u6b63\u786e\u7684 repo-list\uff08\u5b89\u88c5\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u5305\uff09\uff0c\u4ee5\u4e0b\u53c2\u6570\u503c\u4ec5\u4f9b\u53c2\u8003

        \u7136\u540e\u521b\u5efa\u5e76\u90e8\u7f72 scale-master-node-ops.yaml\u3002

        vi scale-master-node-ops.yaml\nkubectl apply -f scale-master-node-ops.yaml -n kubean-system\n

        \u6267\u884c\u5b8c\u4e0a\u8ff0\u6b65\u9aa4\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u9a8c\u8bc1\uff1a

        kubectl get node\n
        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html","title":"\u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u5de5\u4f5c\u8282\u70b9\u6269\u5bb9","text":"

        \u672c\u6587\u5c06\u4ecb\u7ecd\u79bb\u7ebf\u6a21\u5f0f\u4e0b\uff0c\u5982\u4f55\u624b\u52a8\u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u5de5\u4f5c\u8282\u70b9\u8fdb\u884c\u6269\u5bb9\u3002 \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u5efa\u8bae\u5728\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u540e\u5bf9\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u8fdb\u884c\u6269\u5bb9\uff0c\u8bf7\u5728\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u524d\u505a\u597d\u8d44\u6e90\u89c4\u5212\u3002

        Note

        \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0d\u652f\u6301\u6269\u5bb9\u3002

        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u901a\u8fc7\u706b\u79cd\u8282\u70b9\u5b8c\u6210 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u7684\u90e8\u7f72\uff0c\u5e76\u4e14\u706b\u79cd\u8282\u70b9\u4e0a\u7684 kind \u96c6\u7fa4\u8fd0\u884c\u6b63\u5e38\u3002
        • \u5fc5\u987b\u4f7f\u7528\u5e73\u53f0 Admin \u6743\u9650\u7684\u7528\u6237\u767b\u5f55\u3002
        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html#kind-kubeconfig","title":"\u83b7\u53d6\u706b\u79cd\u8282\u70b9\u4e0a kind \u96c6\u7fa4\u7684 kubeconfig","text":"
        1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u767b\u5f55\u706b\u79cd\u8282\u70b9\uff1a

          ssh root@\u706b\u79cd\u8282\u70b9 IP \u5730\u5740\n
        2. \u5728\u706b\u79cd\u8282\u70b9\u4e0a\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u83b7\u53d6 kind \u96c6\u7fa4\u7684 CONTAINER ID\uff1a

          [root@localhost ~]# podman ps\n\n# \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a\nCONTAINER ID  IMAGE                                      COMMAND     CREATED      STATUS      PORTS                                                                                                         NAMES\n220d662b1b6a  docker.m.daocloud.io/kindest/node:v1.26.2              2 weeks ago  Up 2 weeks  0.0.0.0:443->30443/tcp, 0.0.0.0:8081->30081/tcp, 0.0.0.0:9000-9001->32000-32001/tcp, 0.0.0.0:36674->6443/tcp  my-cluster-installer-control-plane\n
        3. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u8fdb\u5165 kind \u96c6\u7fa4\u5bb9\u5668\u5185\uff1a

          podman exec -it {CONTAINER ID} bash\n

          {CONTAINER ID} \u66ff\u6362\u4e3a\u60a8\u771f\u5b9e\u7684\u5bb9\u5668 ID

        4. \u5728 kind \u96c6\u7fa4\u5bb9\u5668\u5185\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u83b7\u53d6 kind \u96c6\u7fa4\u7684 kubeconfig \u914d\u7f6e\u4fe1\u606f\uff1a

          kubectl config view --minify --flatten --raw\n

        \u5f85\u63a7\u5236\u53f0\u8f93\u51fa\u540e\uff0c\u590d\u5236 kind \u96c6\u7fa4\u7684 kubeconfig \u914d\u7f6e\u4fe1\u606f\uff0c\u4e3a\u4e0b\u4e00\u6b65\u505a\u51c6\u5907\u3002

        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html#kind-clusterkubeanio","title":"\u5728\u706b\u79cd\u8282\u70b9\u4e0a kind \u96c6\u7fa4\u5185\u521b\u5efa cluster.kubean.io \u8d44\u6e90","text":"
        1. \u4f7f\u7528 podman exec -it {CONTAINER ID} bash \u547d\u4ee4\u8fdb\u5165 kind \u96c6\u7fa4\u5bb9\u5668\u5185\u3002

        2. \u5728 kind \u96c6\u7fa4\u5bb9\u5668\u5185\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u83b7\u53d6 kind \u96c6\u7fa4\u540d\u79f0 \uff1a

          kubectl get clusters\n
        3. \u590d\u5236\u5e76\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5728 kind \u96c6\u7fa4\u5185\u6267\u884c\uff0c\u4ee5\u521b\u5efa cluster.kubean.io \u8d44\u6e90\uff1a

          kubectl apply -f - <<EOF\napiVersion: kubean.io/v1alpha1\nkind: Cluster\nmetadata:\n  labels:\n    clusterName: kpanda-global-cluster\n  name: kpanda-global-cluster\nspec:\n  hostsConfRef:\n    name: my-cluster-hosts-conf\n    namespace: kubean-system\n  kubeconfRef:\n    name: my-cluster-kubeconf\n    namespace: kubean-system\n  varsConfRef:\n    name: my-cluster-vars-conf\n    namespace: kubean-system\nEOF\n

          Note

          spec.hostsConfRef.name\u3001spec.kubeconfRef.name\u3001spec.varsConfRef.name \u4e2d\u96c6\u7fa4\u540d\u79f0\u9ed8\u8ba4\u4e3a my-cluster\uff0c \u9700\u66ff\u6362\u6210\u4e0a\u4e00\u6b65\u9aa4\u4e2d\u83b7\u53d6\u7684 kind \u96c6\u7fa4\u540d\u79f0 \u3002

        4. \u5728 kind \u96c6\u7fa4\u5185\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u68c0\u9a8c cluster.kubean.io` \u8d44\u6e90\u662f\u5426\u6b63\u5e38\u521b\u5efa\uff1a

          kubectl get clusters\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          NAME                    AGE\nkpanda-global-cluster   3s\nmy-cluster              16d\n
        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html#kind-containerd","title":"\u66f4\u65b0\u706b\u79cd\u8282\u70b9\u4e0a\u7684 kind \u96c6\u7fa4\u91cc\u7684 containerd \u914d\u7f6e","text":"
        1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u5176\u4e2d\u4e00\u4e2a\u63a7\u5236\u8282\u70b9\uff1a

          ssh root@\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u63a7\u5236\u8282\u70b9 IP \u5730\u5740\n
        2. \u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u63a7\u5236\u8282\u70b9\u4e0a\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5c06\u63a7\u5236\u8282\u70b9\u7684 containerd \u914d\u7f6e\u6587\u4ef6 config.toml \u590d\u5236\u5230\u706b\u79cd\u8282\u70b9\u4e0a\uff1a

          scp /etc/containerd/config.toml root@{\u706b\u79cd\u8282\u70b9 IP}:/root\n
        3. \u5728\u706b\u79cd\u8282\u70b9\u4e0a\uff0c\u4ece\u63a7\u5236\u8282\u70b9\u62f7\u8d1d\u8fc7\u6765\u7684 containerd \u914d\u7f6e\u6587\u4ef6 config.toml \u4e2d\u9009\u53d6 \u975e\u5b89\u5168\u955c\u50cf registry \u7684\u90e8\u5206 \u52a0\u5165\u5230 kind \u96c6\u7fa4\u5185 config.toml

          \u975e\u5b89\u5168\u955c\u50cfregistry \u90e8\u5206\u793a\u4f8b\u5982\u4e0b\uff1a

          [plugins.\"io.containerd.grpc.v1.cri\".registry]\n  [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors]\n    [plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"10.6.202.20\"]\n      endpoint = [\"https://10.6.202.20\"]\n    [plugins.\"io.containerd.grpc.v1.cri\".registry.configs.\"10.6.202.20\".tls]\n      insecure_skip_verify = true\n

          Note

          \u7531\u4e8e kind \u96c6\u7fa4\u5185\u4e0d\u80fd\u76f4\u63a5\u4fee\u6539 config.toml \u6587\u4ef6\uff0c\u6545\u53ef\u4ee5\u5148\u590d\u5236\u4e00\u4efd\u6587\u4ef6\u51fa\u6765\u4fee\u6539\uff0c\u518d\u62f7\u8d1d\u5230 kind \u96c6\u7fa4\uff0c\u6b65\u9aa4\u5982\u4e0b\uff1a

          1. \u5728\u706b\u79cd\u8282\u70b9\u4e0a\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u5c06\u6587\u4ef6\u62f7\u8d1d\u51fa\u6765

            podman cp {CONTAINER ID}:/etc/containerd/config.toml ./config.toml.kind\n
          2. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u7f16\u8f91 config.toml \u6587\u4ef6

            vim ./config.toml.kind\n
          3. \u5c06\u4fee\u6539\u597d\u7684\u6587\u4ef6\u518d\u590d\u5236\u5230 kind \u96c6\u7fa4\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4

            podman cp ./config.toml.kind {CONTAINER ID}:/etc/containerd/config.toml\n

            {CONTAINER ID} \u66ff\u6362\u4e3a\u60a8\u771f\u5b9e\u7684\u5bb9\u5668 ID

        4. \u5728 kind \u96c6\u7fa4\u5185\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u91cd\u542f containerd \u670d\u52a1

          systemctl restart containerd\n
        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html#kind-ai","title":"\u5c06 kind \u96c6\u7fa4\u63a5\u5165 AI \u7b97\u529b\u4e2d\u5fc3\u96c6\u7fa4\u5217\u8868","text":"
        1. \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\uff0c\u8fdb\u5165\u5bb9\u5668\u7ba1\u7406\uff0c\u5728\u96c6\u7fa4\u5217\u8868\u9875\u53f3\u4fa7\u70b9\u51fb \u63a5\u5165\u96c6\u7fa4 \u6309\u94ae\uff0c\u8fdb\u5165\u63a5\u5165\u96c6\u7fa4\u9875\u9762\u3002

        2. \u5728\u63a5\u5165\u914d\u7f6e\u5904\uff0c\u586b\u5165\u5e76\u7f16\u8f91\u521a\u521a\u590d\u5236\u7684 kind \u96c6\u7fa4\u7684 kubeconfig \u914d\u7f6e\u3002

          apiVersion: v1\nclusters:\n- cluster:\n    insecure-skip-tls-verify: true # (1)!\n    certificate-authority-data: LS0TLSCFDFWEFEWFEWFGGEWGFWFEWGWEGFEWGEWGSDGFSDSD\n    server: https://my-cluster-installer-control-plane:6443 # (2)!\nname: my-cluster-installer\ncontexts:\n- context:\n    cluster: my-cluster-installer\n    user: kubernetes-admin\nname: kubernetes-admin@my-cluster-installer\ncurrent-context: kubernetes-admin@my-cluster-installer\nkind: Config\npreferences: {}\nusers:\n
          1. \u8df3\u8fc7 tls \u9a8c\u8bc1\uff0c\u8fd9\u4e00\u884c\u9700\u8981\u624b\u52a8\u6dfb\u52a0
          2. \u66ff\u6362\u4e3a\u706b\u79cd\u8282\u70b9\u7684 IP\uff0c\u7aef\u53e3 6443 \u66ff\u6362\u4e3a\u5728\u8282\u70b9\u6620\u5c04\u7684\u7aef\u53e3\uff08\u4f60\u53ef\u4ee5\u6267\u884c podman ps|grep 6443 \u547d\u4ee4\u67e5\u770b\u6620\u5c04\u7684\u7aef\u53e3\uff09

        3. \u70b9\u51fb \u786e\u8ba4 \u6309\u94ae\uff0c\u5b8c\u6210 kind \u96c6\u7fa4\u7684\u63a5\u5165\u3002

        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html#_3","title":"\u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6dfb\u52a0\u6807\u7b7e","text":"
        1. \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\uff0c\u8fdb\u5165\u5bb9\u5668\u7ba1\u7406\uff0c\u627e\u5230 kapnda-glabal-cluster \u96c6\u7fa4\uff0c\u5728\u53f3\u4fa7\u64cd\u4f5c\u5217\u8868\u627e\u5230 \u57fa\u7840\u914d\u7f6e \u83dc\u5355\u9879\u5e76\u8fdb\u5165\u57fa\u7840\u914d\u7f6e\u754c\u9762\u3002

        2. \u5728\u57fa\u7840\u914d\u7f6e\u9875\u9762\uff0c\u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6dfb\u52a0\u7684\u6807\u7b7e kpanda.io/managed-by=my-cluster\uff1a

        Note

        \u6807\u7b7e kpanda.io/managed-by=my-cluster \u4e2d\u7684 vaule \u503c\u4e3a\u63a5\u5165\u96c6\u7fa4\u65f6\u6307\u5b9a\u7684\u96c6\u7fa4\u540d\u79f0\uff0c\u9ed8\u8ba4\u4e3a my-cluster\uff0c\u5177\u4f53\u4f9d\u636e\u60a8\u7684\u5b9e\u9645\u60c5\u51b5\u3002

        "},{"location":"admin/kpanda/best-practice/add-worker-node-on-global.html#_4","title":"\u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6dfb\u52a0\u8282\u70b9","text":"
        1. \u8fdb\u5165\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u8282\u70b9\u5217\u8868\u9875\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u63a5\u5165\u8282\u70b9 \u6309\u94ae\u3002

        2. \u586b\u5165\u5f85\u63a5\u5165\u8282\u70b9\u7684 IP \u548c\u8ba4\u8bc1\u4fe1\u606f\u540e\u70b9\u51fb \u5f00\u59cb\u68c0\u67e5 \uff0c\u901a\u8fc7\u8282\u70b9\u68c0\u67e5\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

        3. \u5728 \u81ea\u5b9a\u4e49\u53c2\u6570 \u5904\u6dfb\u52a0\u5982\u4e0b\u81ea\u5b9a\u4e49\u53c2\u6570\uff1a

          download_run_once: false\ndownload_container: false\ndownload_force_cache: false\ndownload_localhost: false\n

        4. \u70b9\u51fb \u786e\u5b9a \u7b49\u5f85\u8282\u70b9\u6dfb\u52a0\u5b8c\u6210\u3002

        "},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html","title":"MySQL \u5e94\u7528\u53ca\u6570\u636e\u7684\u8de8\u96c6\u7fa4\u5907\u4efd\u6062\u590d","text":"

        \u672c\u6b21\u6f14\u793a\u5c06\u57fa\u4e8e AI \u7b97\u529b\u4e2d\u5fc3\u7684\u5e94\u7528\u5907\u4efd\u529f\u80fd\uff0c\u5b9e\u73b0\u4e00\u4e2a\u6709\u72b6\u6001\u5e94\u7528\u7684\u8de8\u96c6\u7fa4\u5907\u4efd\u8fc1\u79fb\u3002

        Note

        \u5f53\u524d\u64cd\u4f5c\u8005\u5e94\u5177\u6709 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u7ba1\u7406\u5458\u7684\u6743\u9650\u3002

        "},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#_1","title":"\u51c6\u5907\u6f14\u793a\u73af\u5883","text":""},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#_2","title":"\u51c6\u5907\u4e24\u4e2a\u96c6\u7fa4","text":"

        main-cluster \u4f5c\u4e3a\u5907\u4efd\u6570\u636e\u7684\u6e90\u96c6\u7fa4\uff0c recovery-cluster \u96c6\u7fa4\u4f5c\u4e3a\u9700\u8981\u6062\u590d\u6570\u636e\u7684\u76ee\u6807\u96c6\u7fa4\u3002

        \u96c6\u7fa4 IP \u8282\u70b9 main-cluster 10.6.175.100 1 \u8282\u70b9 recovery-cluster 10.6.175.110 1 \u8282\u70b9"},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#minio","title":"\u642d\u5efa MinIO \u914d\u7f6e","text":"MinIO \u670d\u52a1\u5668\u8bbf\u95ee\u5730\u5740 \u5b58\u50a8\u6876 \u7528\u6237\u540d \u5bc6\u7801 http://10.7.209.110:9000 mysql-demo root dangerous"},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#nfs","title":"\u5728\u4e24\u4e2a\u96c6\u7fa4\u90e8\u7f72 NFS \u5b58\u50a8\u670d\u52a1","text":"

        Note

        \u9700\u8981\u5728 \u6e90\u96c6\u7fa4\u548c\u76ee\u6807\u96c6\u7fa4 \u4e0a\u7684\u6240\u6709\u8282\u70b9\u4e0a\u90e8\u7f72 NFS \u5b58\u50a8\u670d\u52a1\u3002

        1. \u5728\u4e24\u4e2a\u96c6\u7fa4\u4e2d\u7684\u6240\u6709\u8282\u70b9\u5b89\u88c5 NFS \u6240\u9700\u7684\u4f9d\u8d56\u3002

          yum install nfs-utils iscsi-initiator-utils nfs-utils iscsi-initiator-utils nfs-utils iscsi-initiator-utils -y\n

          \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

          [root@g-master1 ~]# kubectl apply -f nfs.yaml\nclusterrole.rbac.authorization.k8s.io/nfs-provisioner-runner created\nclusterrolebinding.rbac.authorization.k8s.io/run-nfs-provisioner created\nrole.rbac.authorization.k8s.io/leader-locking-nfs-provisioner created\nrolebinding.rbac.authorization.k8s.io/leader-locking-nfs-provisioner created\nserviceaccount/nfs-provisioner created\nservice/nfs-provisioner created\ndeployment.apps/nfs-provisioner created\nstorageclass.storage.k8s.io/nfs created\n
        2. \u4e3a MySQL \u5e94\u7528\u51c6\u5907 NFS \u5b58\u50a8\u670d\u52a1\u3002

          \u767b\u5f55 main-cluster \u96c6\u7fa4\u548c recovery-cluster \u96c6\u7fa4\u7684\u4efb\u4e00\u63a7\u5236\u8282\u70b9\uff0c\u4f7f\u7528 vi nfs.yaml \u547d\u4ee4\u5728\u8282\u70b9\u4e0a\u521b\u5efa\u4e00\u4e2a \u540d\u4e3a nfs.yaml \u7684\u6587\u4ef6\uff0c\u5c06\u4e0b\u9762\u7684 YAML \u5185\u5bb9\u590d\u5236\u5230 nfs.yaml \u6587\u4ef6\u3002

          \u70b9\u51fb\u67e5\u770b\u5b8c\u6574\u7684 nfs.yaml nfs.yaml

          kind: ClusterRole\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\nname: nfs-provisioner-runner\nnamespace: nfs-system\nrules:\n- apiGroups: [\"\"]\n    resources: [\"persistentvolumes\"]\n    verbs: [\"get\", \"list\", \"watch\", \"create\", \"delete\"]\n- apiGroups: [\"\"]\n    resources: [\"persistentvolumeclaims\"]\n    verbs: [\"get\", \"list\", \"watch\", \"update\"]\n- apiGroups: [\"storage.k8s.io\"]\n    resources: [\"storageclasses\"]\n    verbs: [\"get\", \"list\", \"watch\"]\n- apiGroups: [\"\"]\n    resources: [\"events\"]\n    verbs: [\"create\", \"update\", \"patch\"]\n- apiGroups: [\"\"]\n    resources: [\"services\", \"endpoints\"]\n    verbs: [\"get\"]\n- apiGroups: [\"extensions\"]\n    resources: [\"podsecuritypolicies\"]\n    resourceNames: [\"nfs-provisioner\"]\n    verbs: [\"use\"]\n---\nkind: ClusterRoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\nname: run-nfs-provisioner\nsubjects:\n- kind: ServiceAccount\n    name: nfs-provisioner\n    # replace with namespace where provisioner is deployed\n    namespace: default\nroleRef:\nkind: ClusterRole\nname: nfs-provisioner-runner\napiGroup: rbac.authorization.k8s.io\n---\nkind: Role\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\nname: leader-locking-nfs-provisioner\nrules:\n- apiGroups: [\"\"]\n    resources: [\"endpoints\"]\n    verbs: [\"get\", \"list\", \"watch\", \"create\", \"update\", \"patch\"]\n---\nkind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\nname: leader-locking-nfs-provisioner\nsubjects:\n- kind: ServiceAccount\n    name: nfs-provisioner\n    # replace with namespace where provisioner is deployed\n    namespace: default\nroleRef:\nkind: Role\nname: leader-locking-nfs-provisioner\napiGroup: rbac.authorization.k8s.io\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\nname: nfs-provisioner\n---\nkind: Service\napiVersion: v1\nmetadata:\nname: nfs-provisioner\nlabels:\n    app: nfs-provisioner\nspec:\nports:\n    - name: nfs\n    port: 2049\n    - name: nfs-udp\n    port: 2049\n    protocol: UDP\n    - name: nlockmgr\n    port: 32803\n    - name: nlockmgr-udp\n    port: 32803\n    protocol: UDP\n    - name: mountd\n    port: 20048\n    - name: mountd-udp\n    port: 20048\n    protocol: UDP\n    - name: rquotad\n    port: 875\n    - name: rquotad-udp\n    port: 875\n    protocol: UDP\n    - name: rpcbind\n    port: 111\n    - name: rpcbind-udp\n    port: 111\n    protocol: UDP\n    - name: statd\n    port: 662\n    - name: statd-udp\n    port: 662\n    protocol: UDP\nselector:\n    app: nfs-provisioner\n---\nkind: Deployment\napiVersion: apps/v1\nmetadata:\nname: nfs-provisioner\nspec:\nselector:\n    matchLabels:\n    app: nfs-provisioner\nreplicas: 1\nstrategy:\n    type: Recreate\ntemplate:\n    metadata:\n    labels:\n        app: nfs-provisioner\n    spec:\n    serviceAccount: nfs-provisioner\n    containers:\n        - name: nfs-provisioner\n        resources:\n            limits:\n            cpu: \"1\"\n            memory: \"4294967296\"\n        image: release.daocloud.io/velero/nfs-provisioner:v3.0.0\n        ports:\n            - name: nfs\n            containerPort: 2049\n            - name: nfs-udp\n            containerPort: 2049\n            protocol: UDP\n            - name: nlockmgr\n            containerPort: 32803\n            - name: nlockmgr-udp\n            containerPort: 32803\n            protocol: UDP\n            - name: mountd\n            containerPort: 20048\n            - name: mountd-udp\n            containerPort: 20048\n            protocol: UDP\n            - name: rquotad\n            containerPort: 875\n            - name: rquotad-udp\n            containerPort: 875\n            protocol: UDP\n            - name: rpcbind\n            containerPort: 111\n            - name: rpcbind-udp\n            containerPort: 111\n            protocol: UDP\n            - name: statd\n            containerPort: 662\n            - name: statd-udp\n            containerPort: 662\n            protocol: UDP\n        securityContext:\n            capabilities:\n            add:\n                - DAC_READ_SEARCH\n                - SYS_RESOURCE\n        args:\n            - \"-provisioner=example.com/nfs\"\n        env:\n            - name: POD_IP\n            valueFrom:\n                fieldRef:\n                fieldPath: status.podIP\n            - name: SERVICE_NAME\n            value: nfs-provisioner\n            - name: POD_NAMESPACE\n            valueFrom:\n                fieldRef:\n                fieldPath: metadata.namespace\n        imagePullPolicy: \"IfNotPresent\"\n        volumeMounts:\n            - name: export-volume\n            mountPath: /export\n    volumes:\n        - name: export-volume\n        hostPath:\n            path: /data\n---\nkind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\nname: nfs\nprovisioner: example.com/nfs\nmountOptions:\n- vers=4.1\n

        3. \u5728\u4e24\u4e2a\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0a\u6267\u884c nfs.yaml \u6587\u4ef6\u3002

          kubectl apply -f nfs.yaml\n
        4. \u67e5\u770b NFS Pod \u72b6\u6001\uff0c\u7b49\u5f85\u5176\u72b6\u6001\u53d8\u4e3a running \uff08\u5927\u7ea6\u9700\u8981 2 \u5206\u949f\uff09\u3002

          kubectl get pod -n nfs-system -owide\n

          \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

          [root@g-master1 ~]# kubectl get pod -owide\nNAME                               READY   STATUS    RESTARTS   AGE     IP              NODE        NOMINATED NODE   READINESS GATES\nnfs-provisioner-7dfb9bcc45-74ws2   1/1     Running   0          4m45s   10.6.175.100   g-master1   <none>           <none>\n
        "},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#mysql_1","title":"\u90e8\u7f72 MySQL \u5e94\u7528","text":"
        1. \u4e3a MySQL \u5e94\u7528\u51c6\u5907\u57fa\u4e8e NFS \u5b58\u50a8\u7684 PVC\uff0c\u7528\u6765\u5b58\u50a8 MySQL \u670d\u52a1\u5185\u7684\u6570\u636e\u3002

          \u4f7f\u7528 vi pvc.yaml \u547d\u4ee4\u5728\u8282\u70b9\u4e0a\u521b\u5efa\u540d\u4e3a pvc.yaml \u7684\u6587\u4ef6\uff0c\u5c06\u4e0b\u9762\u7684 YAML \u5185\u5bb9\u590d\u5236\u5230 pvc.yaml \u6587\u4ef6\u5185\u3002

          pvc.yaml

          apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: mydata\n  namespace: default\nspec:\n  accessModes:\n  - ReadWriteOnce\n  resources:\n    requests:\n      storage: \"1Gi\"\n  storageClassName: nfs\n  volumeMode: Filesystem\n

        2. \u5728\u8282\u70b9\u4e0a\u4f7f\u7528 kubectl \u5de5\u5177\u6267\u884c pvc.yaml \u6587\u4ef6\u3002

          kubectl apply -f pvc.yaml\n

          \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

          [root@g-master1 ~]# kubectl apply -f pvc.yaml\npersistentvolumeclaim/mydata created\n

        3. \u90e8\u7f72 MySQL \u5e94\u7528\u3002

          \u4f7f\u7528 vi mysql.yaml \u547d\u4ee4\u5728\u8282\u70b9\u4e0a\u521b\u5efa\u540d\u4e3a mysql.yaml \u7684\u6587\u4ef6\uff0c\u5c06\u4e0b\u9762\u7684 YAML \u5185\u5bb9\u590d\u5236\u5230 mysql.yaml \u6587\u4ef6\u3002

          \u70b9\u51fb\u67e5\u770b\u5b8c\u6574\u7684 mysql.yaml nfs.yaml

          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  labels:\n    app: mysql-deploy\n  name: mysql-deploy\n  namespace: default\nspec:\n  progressDeadlineSeconds: 600\n  replicas: 1\n  revisionHistoryLimit: 10\n  selector:\n    matchLabels:\n      app: mysql-deploy\n  strategy:\n    rollingUpdate:\n      maxSurge: 25%\n      maxUnavailable: 25%\n    type: RollingUpdate\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: mysql-deploy\n      name: mysql-deploy\n    spec:\n      containers:\n      - args:\n        - --ignore-db-dir=lost+found\n        env:\n        - name: MYSQL_ROOT_PASSWORD\n          value: dangerous\n        image: release.daocloud.io/velero/mysql:5\n        imagePullPolicy: IfNotPresent\n        name: mysql-deploy\n        ports:\n        - containerPort: 3306\n          protocol: TCP\n        resources:\n          limits:\n            cpu: \"1\"\n            memory: \"4294967296\"\n        terminationMessagePath: /dev/termination-log\n        terminationMessagePolicy: File\n        volumeMounts:\n        - mountPath: /var/lib/mysql\n          name: data\n      dnsPolicy: ClusterFirst\n      restartPolicy: Always\n      schedulerName: default-scheduler\n      securityContext:\n        fsGroup: 999\n      terminationGracePeriodSeconds: 30\n      volumes:\n      - name: data\n        persistentVolumeClaim:\n          claimName: mydata\n

        4. \u5728\u8282\u70b9\u4e0a\u4f7f\u7528 kubectl \u5de5\u5177\u6267\u884c mysql.yaml \u6587\u4ef6\u3002

          kubectl apply -f mysql.yaml\n

          \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

          [root@g-master1 ~]# kubectl apply -f mysql.yaml\ndeployment.apps/mysql-deploy created\n
        5. \u67e5\u770b MySQL Pod \u72b6\u6001\u3002

          \u6267\u884c kubectl get pod | grep mysql \u67e5\u770b MySQL Pod \u72b6\u6001\uff0c\u7b49\u5f85\u5176\u72b6\u6001\u53d8\u4e3a running \uff08\u5927\u7ea6\u9700\u8981 2 \u5206\u949f\uff09\u3002

          \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

          [root@g-master1 ~]# kubectl get pod |grep mysql\nmysql-deploy-5d6f94cb5c-gkrks      1/1     Running   0          2m53s\n

          Note

          • \u5982\u679c MySQL Pod \u72b6\u6001\u957f\u671f\u5904\u4e8e\u975e running \u72b6\u6001\uff0c\u901a\u5e38\u662f\u56e0\u4e3a\u6ca1\u6709\u5728\u96c6\u7fa4\u7684\u6240\u6709\u8282\u70b9\u4e0a\u5b89\u88c5 NFS \u4f9d\u8d56\u3002
          • \u6267\u884c kubectl describe pod ${mysql pod \u540d\u79f0} \u67e5\u770b Pod \u7684\u8be6\u7ec6\u4fe1\u606f\u3002
          • \u5982\u679c\u62a5\u9519\u4e2d\u6709 MountVolume.SetUp failed for volume \"pvc-4ad70cc6-df37-4253-b0c9-8cb86518ccf8\" : mount failed: exit status 32 \u4e4b\u7c7b\u7684\u4fe1\u606f\uff0c\u8bf7\u5206\u522b\u6267\u884c kubectl delete -f nfs.yaml/pvc.yaml/mysql.yaml \u5220\u9664\u4e4b\u524d\u7684\u8d44\u6e90\u540e\uff0c\u91cd\u65b0\u4ece\u90e8\u7f72 NFS \u670d\u52a1\u5f00\u59cb\u3002
        6. \u5411 MySQL \u5e94\u7528\u5199\u5165\u6570\u636e\u3002

          \u4e3a\u4e86\u4fbf\u4e8e\u540e\u671f\u9a8c\u8bc1\u8fc1\u79fb\u6570\u636e\u662f\u5426\u6210\u529f\uff0c\u53ef\u4ee5\u4f7f\u7528\u811a\u672c\u5411 MySQL \u5e94\u7528\u4e2d\u5199\u5165\u6d4b\u8bd5\u6570\u636e\u3002

          1. \u4f7f\u7528 vi insert.sh \u547d\u4ee4\u5728\u8282\u70b9\u4e0a\u521b\u5efa\u540d\u4e3a insert.sh \u7684\u811a\u672c\uff0c\u5c06\u4e0b\u9762\u7684 YAML \u5185\u5bb9\u590d\u5236\u5230\u8be5\u811a\u672c\u3002

            insert.sh
            #!/bin/bash\n\nfunction rand(){\n    min=$1\n    max=$(($2-$min+1))\n    num=$(date +%s%N)\n    echo $(($num%$max+$min))\n}\n\nfunction insert(){\n    user=$(date +%s%N | md5sum | cut -c 1-9)\n    age=$(rand 1 100)\n\n    sql=\"INSERT INTO test.users(user_name, age)VALUES('${user}', ${age});\"\n    echo -e ${sql}\n\n    kubectl exec deploy/mysql-deploy -- mysql -uroot -pdangerous -e \"${sql}\"\n\n}\n\nkubectl exec deploy/mysql-deploy -- mysql -uroot -pdangerous -e \"CREATE DATABASE IF NOT EXISTS test;\"\nkubectl exec deploy/mysql-deploy -- mysql -uroot -pdangerous -e \"CREATE TABLE IF NOT EXISTS test.users(user_name VARCHAR(10) NOT NULL,age INT UNSIGNED)ENGINE=InnoDB DEFAULT CHARSET=utf8;\"\n\nwhile true;do\n    insert\n    sleep 1\ndone\n
          2. \u4e3a insert.sh \u811a\u672c\u6dfb\u52a0\u6743\u9650\u5e76\u8fd0\u884c\u8be5\u811a\u672c\u3002

            [root@g-master1 ~]# chmod +x insert.sh\n[root@g-master1 ~]# ./insert.sh\n

            \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

            mysql: [Warning] Using a password on the command line interface can be insecure.\nmysql: [Warning] Using a password on the command line interface can be insecure.\nINSERT INTO test.users(user_name, age)VALUES('dc09195ba', 10);\nmysql: [Warning] Using a password on the command line interface can be insecure.\nINSERT INTO test.users(user_name, age)VALUES('80ab6aa28', 70);\nmysql: [Warning] Using a password on the command line interface can be insecure.\nINSERT INTO test.users(user_name, age)VALUES('f488e3d46', 23);\nmysql: [Warning] Using a password on the command line interface can be insecure.\nINSERT INTO test.users(user_name, age)VALUES('e6098695c', 93);\nmysql: [Warning] Using a password on the command line interface can be insecure.\nINSERT INTO test.users(user_name, age)VALUES('eda563e7d', 63);\nmysql: [Warning] Using a password on the command line interface can be insecure.\nINSERT INTO test.users(user_name, age)VALUES('a4d1b8d68', 17);\nmysql: [Warning] Using a password on the command line interface can be insecure.\n
          3. \u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0b control \u548c c \u6682\u505c\u811a\u672c\u7684\u6267\u884c\u3002

          4. \u524d\u5f80 MySQL Pod \u67e5\u770b MySQL \u4e2d\u5199\u5165\u7684\u6570\u636e\u3002

            kubectl exec deploy/mysql-deploy -- mysql -uroot -pdangerous -e \"SELECT * FROM test.users;\"\n

            \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

            mysql: [Warning] Using a password on the command line interface can be insecure.\nuser_name   age\ndc09195ba   10\n80ab6aa28   70\nf488e3d46   23\ne6098695c   93\neda563e7d   63\na4d1b8d68   17\nea47546d9   86\na34311f2e   47\n740cefe17   33\nede85ea28   65\nb6d0d6a0e   46\nf0eb38e50   44\nc9d2f28f5   72\n8ddaafc6f   31\n3ae078d0e   23\n6e041631e   96\n
        "},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#velero","title":"\u5728\u4e24\u4e2a\u96c6\u7fa4\u5b89\u88c5 velero \u63d2\u4ef6","text":"

        Note

        \u9700\u8981\u5728 \u6e90\u96c6\u7fa4\u548c\u76ee\u6807\u96c6\u7fa4 \u4e0a\u5747\u5b89\u88c5 velero \u63d2\u4ef6\u3002

        \u53c2\u8003\u5b89\u88c5 velero \u63d2\u4ef6\u6587\u6863\u548c\u4e0b\u65b9\u7684 MinIO \u914d\u7f6e\uff0c\u5728 main-cluster \u96c6\u7fa4\u548c recovery-cluster \u96c6\u7fa4\u4e0a\u5b89\u88c5 velero \u63d2\u4ef6\u3002

        minio \u670d\u52a1\u5668\u8bbf\u95ee\u5730\u5740 \u5b58\u50a8\u6876 \u7528\u6237\u540d \u5bc6\u7801 http://10.7.209.110:9000 mysql-demo root dangerous

        Note

        \u5b89\u88c5\u63d2\u4ef6\u65f6\u9700\u8981\u5c06 S3url \u66ff\u6362\u4e3a\u6b64\u6b21\u6f14\u793a\u51c6\u5907\u7684 MinIO \u670d\u52a1\u5668\u8bbf\u95ee\u5730\u5740\uff0c\u5b58\u50a8\u6876\u66ff\u6362\u4e3a MinIO \u4e2d\u771f\u5b9e\u5b58\u5728\u7684\u5b58\u50a8\u6876\u3002

        "},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#mysql_2","title":"\u5907\u4efd MySQL \u5e94\u7528\u53ca\u6570\u636e","text":"
        1. \u5728\u5907\u4efd\u524d\u6211\u4eec\u9700\u8981\u5148\u4fdd\u8bc1\u6570\u636e\u5e93\u4e0d\u80fd\u6709\u65b0\u6570\u636e\u8fdb\u6765\uff0c\u6240\u4ee5\u8981\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\u6a21\u5f0f\uff1a

          mysql> set global read_only=1;    #1\u662f\u53ea\u8bfb\uff0c0\u662f\u8bfb\u5199\nmysql> show global variables like \"%read_only%\"; #\u67e5\u8be2\u72b6\u6001\n
        2. \u4e3a MySQL \u5e94\u7528\u53ca PVC \u6570\u636e\u6dfb\u52a0\u72ec\u6709\u7684\u6807\u7b7e\uff1a backup=mysql \uff0c\u4fbf\u4e8e\u5907\u4efd\u65f6\u9009\u62e9\u8d44\u6e90\u3002

          kubectl label deploy mysql-deploy backup=mysql # \u4e3a __mysql-deploy__ \u8d1f\u8f7d\u6dfb\u52a0\u6807\u7b7e\nkubectl label pod mysql-deploy-5d6f94cb5c-gkrks backup=mysql # \u4e3a mysql pod \u6dfb\u52a0\u6807\u7b7e\nkubectl label pvc mydata backup=mysql # \u4e3a mysql \u7684 pvc \u6dfb\u52a0\u6807\u7b7e\n
        3. \u53c2\u8003\u5e94\u7528\u5907\u4efd\u4e2d\u4ecb\u7ecd\u7684\u6b65\u9aa4\uff0c\u4ee5\u53ca\u4e0b\u65b9\u7684\u53c2\u6570\u521b\u5efa\u5e94\u7528\u5907\u4efd\u3002

          • \u540d\u79f0\uff1a backup-mysql \uff08\u53ef\u4ee5\u81ea\u5b9a\u4e49\uff09
          • \u6e90\u96c6\u7fa4\uff1a main-cluster
          • \u547d\u540d\u7a7a\u95f4\uff1adefault
          • \u8d44\u6e90\u8fc7\u6ee4-\u6307\u5b9a\u8d44\u6e90\u6807\u7b7e\uff1abackup:mysql

        4. \u521b\u5efa\u597d\u5907\u4efd\u8ba1\u5212\u4e4b\u540e\u9875\u9762\u4f1a\u81ea\u52a8\u8fd4\u56de\u5907\u4efd\u8ba1\u5212\u5217\u8868\uff0c\u627e\u5230\u65b0\u5efa\u7684\u5907\u4efd\u8ba1\u5212 backup-mysq \uff0c\u70b9\u51fb\u66f4\u591a\u64cd\u4f5c\u6309\u94ae ... \uff0c\u9009\u62e9 \u7acb\u5373\u6267\u884c \u6267\u884c\u65b0\u5efa\u7684\u5907\u4efd\u8ba1\u5212\u3002

        5. \u7b49\u5f85\u5907\u4efd\u8ba1\u5212\u6267\u884c\u5b8c\u6210\u540e\uff0c\u5373\u53ef\u6267\u884c\u540e\u7eed\u64cd\u4f5c\u3002

        "},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#mysql_3","title":"\u8de8\u96c6\u7fa4\u6062\u590d MySQL \u5e94\u7528\u53ca\u6570\u636e","text":"
        1. \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u9009\u62e9 \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d -> \u5e94\u7528\u5907\u4efd \u3002

        2. \u5728\u5de6\u4fa7\u529f\u80fd\u680f\u9009\u62e9 \u6062\u590d \uff0c\u7136\u540e\u5728\u53f3\u4fa7\u70b9\u51fb \u6062\u590d\u5907\u4efd \u3002

        3. \u67e5\u770b\u4ee5\u4e0b\u8bf4\u660e\u586b\u5199\u53c2\u6570\uff1a

          • \u540d\u79f0\uff1a restore-mysql \uff08\u53ef\u4ee5\u81ea\u5b9a\u4e49\uff09
          • \u5907\u4efd\u6e90\u96c6\u7fa4\uff1a main-cluster
          • \u5907\u4efd\u8ba1\u5212\uff1a backup-mysql
          • \u5907\u4efd\u70b9\uff1adefault
          • \u6062\u590d\u76ee\u6807\u96c6\u7fa4\uff1a recovery-cluster

        4. \u5237\u65b0\u5907\u4efd\u8ba1\u5212\u5217\u8868\uff0c\u7b49\u5f85\u5907\u4efd\u8ba1\u5212\u6267\u884c\u5b8c\u6210\u3002

        "},{"location":"admin/kpanda/best-practice/backup-mysql-on-nfs.html#_3","title":"\u9a8c\u8bc1\u6570\u636e\u662f\u5426\u6210\u529f\u6062\u590d","text":"
        1. \u767b\u5f55 recovery-cluster \u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\uff0c\u67e5\u770b mysql-deploy \u8d1f\u8f7d\u662f\u5426\u5df2\u7ecf\u6210\u529f\u5907\u4efd\u5230\u5f53\u524d\u96c6\u7fa4\u3002

          kubectl get pod\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          NAME                               READY   STATUS    RESTARTS   AGE\nmysql-deploy-5798f5d4b8-62k6c      1/1     Running   0          24h\n
        2. \u68c0\u67e5 MySQL \u6570\u636e\u8868\u4e2d\u7684\u6570\u636e\u662f\u5426\u6062\u590d\u6210\u529f\u3002

          kubectl exec deploy/mysql-deploy -- mysql -uroot -pdangerous -e \"SELECT * FROM test.users;\"\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          mysql: [Warning] Using a password on the command line interface can be insecure.\nuser_name   age\ndc09195ba   10\n80ab6aa28   70\nf488e3d46   23\ne6098695c   93\neda563e7d   63\na4d1b8d68   17\nea47546d9   86\na34311f2e   47\n740cefe17   33\nede85ea28   65\nb6d0d6a0e   46\nf0eb38e50   44\nc9d2f28f5   72\n8ddaafc6f   31\n3ae078d0e   23\n6e041631e   96\n

          Success

          \u53ef\u4ee5\u770b\u5230\uff0cPod \u4e2d\u7684\u6570\u636e\u548c main-cluster \u96c6\u7fa4\u4e2d Pod \u91cc\u9762\u7684\u6570\u636e\u4e00\u81f4\u3002\u8fd9\u8bf4\u660e\u5df2\u7ecf\u6210\u529f\u5730\u5c06 main-cluster \u4e2d\u7684 MySQL \u5e94\u7528\u53ca\u5176\u6570\u636e\u8de8\u96c6\u7fa4\u6062\u590d\u5230\u4e86 recovery-cluster \u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html","title":"\u5728 CentOS \u7ba1\u7406\u5e73\u53f0\u4e0a\u521b\u5efa RedHat 9.2 \u5de5\u4f5c\u96c6\u7fa4","text":"

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u5df2\u6709\u7684 CentOS \u7ba1\u7406\u5e73\u53f0\u4e0a\u521b\u5efa RedHat 9.2 \u5de5\u4f5c\u96c6\u7fa4\u3002

        Note

        \u672c\u6587\u4ec5\u9488\u5bf9\u79bb\u7ebf\u6a21\u5f0f\u4e0b\uff0c\u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u7ba1\u7406\u5e73\u53f0\u548c\u5f85\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u67b6\u6784\u5747\u4e3a AMD\u3002 \u521b\u5efa\u96c6\u7fa4\u65f6\u4e0d\u652f\u6301\u5f02\u6784\uff08AMD \u548c ARM \u6df7\u5408\uff09\u90e8\u7f72\uff0c\u60a8\u53ef\u4ee5\u5728\u96c6\u7fa4\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u901a\u8fc7\u63a5\u5165\u5f02\u6784\u8282\u70b9\u7684\u65b9\u5f0f\u8fdb\u884c\u96c6\u7fa4\u6df7\u5408\u90e8\u7f72\u7ba1\u7406\u3002

        "},{"location":"admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

        \u5df2\u7ecf\u90e8\u7f72\u597d\u4e00\u4e2a AI \u7b97\u529b\u4e2d\u5fc3\u5168\u6a21\u5f0f\uff0c\u5e76\u4e14\u706b\u79cd\u8282\u70b9\u8fd8\u5b58\u6d3b\uff0c\u90e8\u7f72\u53c2\u8003\u6587\u6863\u79bb\u7ebf\u5b89\u88c5 AI \u7b97\u529b\u4e2d\u5fc3\u5546\u4e1a\u7248

        "},{"location":"admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html#redhat","title":"\u4e0b\u8f7d\u5e76\u5bfc\u5165 RedHat \u76f8\u5173\u79bb\u7ebf\u5305","text":"

        \u8bf7\u786e\u4fdd\u5df2\u7ecf\u767b\u5f55\u5230\u706b\u79cd\u8282\u70b9\uff01\u5e76\u4e14\u4e4b\u524d\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u65f6\u4f7f\u7528\u7684 clusterConfig.yaml \u6587\u4ef6\u8fd8\u5728\u3002

        "},{"location":"admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html#redhat_1","title":"\u4e0b\u8f7d RedHat \u76f8\u5173\u79bb\u7ebf\u5305","text":"

        \u4e0b\u8f7d\u6240\u9700\u7684 RedHat OS package \u5305\u548c ISO \u79bb\u7ebf\u5305\uff1a

        \u8d44\u6e90\u540d \u8bf4\u660e \u4e0b\u8f7d\u5730\u5740 os-pkgs-redhat9-v0.9.3.tar.gz RedHat9.2 OS-package \u5305 https://github.com/kubean-io/kubean/releases/download/v0.9.3/os-pkgs-redhat9-v0.9.3.tar.gz ISO \u79bb\u7ebf\u5305 ISO \u5305\u5bfc\u5165\u706b\u79cd\u8282\u70b9\u811a\u672c \u524d\u5f80 RedHat \u5b98\u65b9\u5730\u5740\u767b\u5f55\u4e0b\u8f7d import-iso ISO \u5bfc\u5165\u706b\u79cd\u8282\u70b9\u811a\u672c https://github.com/kubean-io/kubean/releases/download/v0.9.3/import_iso.sh"},{"location":"admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html#os-pckage-minio","title":"\u5bfc\u5165 os pckage \u79bb\u7ebf\u5305\u81f3\u706b\u79cd\u8282\u70b9\u7684 minio","text":"

        \u89e3\u538b RedHat os pckage \u79bb\u7ebf\u5305

        \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u89e3\u538b\u4e0b\u8f7d\u7684 os pckage \u79bb\u7ebf\u5305\u3002\u6b64\u5904\u6211\u4eec\u4e0b\u8f7d\u7684 RedHat os pckage \u79bb\u7ebf\u5305\u3002

        tar -xvf os-pkgs-redhat9-v0.9.3.tar.gz \n

        os package \u89e3\u538b\u540e\u7684\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a

            os-pkgs\n    \u251c\u2500\u2500 import_ospkgs.sh       # \u8be5\u811a\u672c\u7528\u4e8e\u5bfc\u5165 os packages \u5230 MinIO \u6587\u4ef6\u670d\u52a1\n    \u251c\u2500\u2500 os-pkgs-amd64.tar.gz   # amd64 \u67b6\u6784\u7684 os packages \u5305\n    \u251c\u2500\u2500 os-pkgs-arm64.tar.gz   # arm64 \u67b6\u6784\u7684 os packages \u5305\n    \u2514\u2500\u2500 os-pkgs.sha256sum.txt  # os packages \u5305\u7684 sha256sum \u6548\u9a8c\u6587\u4ef6\n

        \u5bfc\u5165 OS Package \u81f3\u706b\u79cd\u8282\u70b9\u7684 MinIO

        \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5c06 os packages \u5305\u5230 MinIO \u6587\u4ef6\u670d\u52a1\u4e2d\uff1a

        MINIO_USER=rootuser MINIO_PASS=rootpass123 ./import_ospkgs.sh  http://127.0.0.1:9000 os-pkgs-redhat9-v0.9.3.tar.gz\n

        Note

        \u4e0a\u8ff0\u547d\u4ee4\u4ec5\u4ec5\u9002\u7528\u4e8e\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 MinIO \u670d\u52a1\uff0c\u5982\u679c\u4f7f\u7528\u5916\u90e8 MinIO \u8bf7\u5c06 http://127.0.0.1:9000 \u66ff\u6362\u4e3a\u5916\u90e8 MinIO \u7684\u8bbf\u95ee\u5730\u5740\u3002 \u201crootuser\u201d \u548c \u201crootpass123\u201d \u662f\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 MinIO \u670d\u52a1\u7684\u9ed8\u8ba4\u8d26\u6237\u548c\u5bc6\u7801\u3002\u201cos-pkgs-redhat9-v0.9.3.tar.gz\u201c \u4e3a\u6240\u4e0b\u8f7d\u7684 os package \u79bb\u7ebf\u5305\u7684\u540d\u79f0\u3002

        "},{"location":"admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html#iso-minio","title":"\u5bfc\u5165 ISO \u79bb\u7ebf\u5305\u81f3\u706b\u79cd\u8282\u70b9\u7684 MinIO","text":"

        \u6267\u884c\u5982\u4e0b\u547d\u4ee4, \u5c06 ISO \u5305\u5230 MinIO \u6587\u4ef6\u670d\u52a1\u4e2d:

        MINIO_USER=rootuser MINIO_PASS=rootpass123 ./import_iso.sh http://127.0.0.1:9000 rhel-9.2-x86_64-dvd.iso\n

        Note

        \u4e0a\u8ff0\u547d\u4ee4\u4ec5\u4ec5\u9002\u7528\u4e8e\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 MinIO \u670d\u52a1\uff0c\u5982\u679c\u4f7f\u7528\u5916\u90e8 MinIO \u8bf7\u5c06 http://127.0.0.1:9000 \u66ff\u6362\u4e3a\u5916\u90e8 MinIO \u7684\u8bbf\u95ee\u5730\u5740\u3002 \u201crootuser\u201d \u548c \u201crootpass123\u201d \u662f\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 MinIO \u670d\u52a1\u7684\u9ed8\u8ba4\u8d26\u6237\u548c\u5bc6\u7801\u3002 \u201crhel-9.2-x86_64-dvd.iso\u201c \u4e3a\u6240\u4e0b\u8f7d\u7684 ISO \u79bb\u7ebf\u5305\u3002

        "},{"location":"admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html#ui","title":"\u524d\u5f80 UI \u754c\u9762\u521b\u5efa\u96c6\u7fa4","text":"

        \u53c2\u8003\u6587\u6863\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u521b\u5efa RedHat 9.2 \u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/create-ubuntu-on-centos-platform.html","title":"\u5728 CentOS \u7ba1\u7406\u5e73\u53f0\u4e0a\u521b\u5efa Ubuntu \u5de5\u4f5c\u96c6\u7fa4","text":"

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u5df2\u6709\u7684 CentOS \u7ba1\u7406\u5e73\u53f0\u4e0a\u521b\u5efa Ubuntu \u5de5\u4f5c\u96c6\u7fa4\u3002

        Note

        \u672c\u6587\u4ec5\u9488\u5bf9\u79bb\u7ebf\u6a21\u5f0f\u4e0b\uff0c\u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u7ba1\u7406\u5e73\u53f0\u548c\u5f85\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u67b6\u6784\u5747\u4e3a AMD\u3002 \u521b\u5efa\u96c6\u7fa4\u65f6\u4e0d\u652f\u6301\u5f02\u6784\uff08AMD \u548c ARM \u6df7\u5408\uff09\u90e8\u7f72\uff0c\u60a8\u53ef\u4ee5\u5728\u96c6\u7fa4\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u901a\u8fc7\u63a5\u5165\u5f02\u6784\u8282\u70b9\u7684\u65b9\u5f0f\u8fdb\u884c\u96c6\u7fa4\u6df7\u5408\u90e8\u7f72\u7ba1\u7406\u3002

        "},{"location":"admin/kpanda/best-practice/create-ubuntu-on-centos-platform.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u90e8\u7f72\u597d\u4e00\u4e2a AI \u7b97\u529b\u4e2d\u5fc3\u5168\u6a21\u5f0f\uff0c\u5e76\u4e14\u706b\u79cd\u8282\u70b9\u8fd8\u5b58\u6d3b\uff0c\u90e8\u7f72\u53c2\u8003\u6587\u6863\u79bb\u7ebf\u5b89\u88c5 AI \u7b97\u529b\u4e2d\u5fc3\u5546\u4e1a\u7248
        "},{"location":"admin/kpanda/best-practice/create-ubuntu-on-centos-platform.html#ubuntu","title":"\u4e0b\u8f7d\u5e76\u5bfc\u5165 Ubuntu \u76f8\u5173\u79bb\u7ebf\u5305","text":"

        \u8bf7\u786e\u4fdd\u5df2\u7ecf\u767b\u5f55\u5230\u706b\u79cd\u8282\u70b9\uff01\u5e76\u4e14\u4e4b\u524d\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u65f6\u4f7f\u7528\u7684 clusterConfig.yaml \u6587\u4ef6\u8fd8\u5728\u3002

        "},{"location":"admin/kpanda/best-practice/create-ubuntu-on-centos-platform.html#ubuntu_1","title":"\u4e0b\u8f7d Ubuntu \u76f8\u5173\u79bb\u7ebf\u5305","text":"

        \u4e0b\u8f7d\u6240\u9700\u7684 Ubuntu OS package \u5305\u548c ISO \u79bb\u7ebf\u5305\uff1a

        \u8d44\u6e90\u540d \u8bf4\u660e \u4e0b\u8f7d\u5730\u5740 os-pkgs-ubuntu2204-v0.18.2.tar.gz Ubuntu1804 OS-package \u5305 https://github.com/kubean-io/kubean/releases/download/v0.18.2/os-pkgs-ubuntu2204-v0.18.2.tar.gz ISO \u79bb\u7ebf\u5305 ISO \u5305 http://mirrors.melbourne.co.uk/ubuntu-releases/"},{"location":"admin/kpanda/best-practice/create-ubuntu-on-centos-platform.html#os-package-iso-minio","title":"\u5bfc\u5165 OS Package \u548c ISO \u79bb\u7ebf\u5305\u81f3\u706b\u79cd\u8282\u70b9\u7684 MinIO","text":"

        \u53c2\u8003\u6587\u6863\u79bb\u7ebf\u8d44\u6e90\u5bfc\u5165\uff0c\u5bfc\u5165\u79bb\u7ebf\u8d44\u6e90\u81f3\u706b\u79cd\u8282\u70b9\u7684 MinIO\u3002

        "},{"location":"admin/kpanda/best-practice/create-ubuntu-on-centos-platform.html#ui","title":"\u524d\u5f80 UI \u754c\u9762\u521b\u5efa\u96c6\u7fa4","text":"

        \u53c2\u8003\u6587\u6863\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u521b\u5efa Ubuntu \u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/etcd-backup.html","title":"ETCD \u5907\u4efd\u8fd8\u539f","text":"

        \u4f7f\u7528 ETCD \u5907\u4efd\u529f\u80fd\u521b\u5efa\u5907\u4efd\u7b56\u7565\uff0c\u53ef\u4ee5\u5c06\u6307\u5b9a\u96c6\u7fa4\u7684 etcd \u6570\u636e\u5b9a\u65f6\u5907\u4efd\u5230 S3 \u5b58\u50a8\u4e2d\u3002\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u5982\u4f55\u5c06\u5df2\u7ecf\u5907\u4efd\u7684\u6570\u636e\u8fd8\u539f\u5230\u5f53\u524d\u96c6\u7fa4\u4e2d\u3002

        Note

        • AI \u7b97\u529b\u4e2d\u5fc3ETCD \u5907\u4efd\u8fd8\u539f\u4ec5\u9650\u4e8e\u9488\u5bf9\u540c\u4e00\u96c6\u7fa4\uff08\u8282\u70b9\u6570\u548c IP \u5730\u5740\u6ca1\u6709\u53d8\u5316\uff09\u8fdb\u884c\u5907\u4efd\u4e0e\u8fd8\u539f\u3002 \u4f8b\u5982\uff0c\u5907\u4efd\u4e86 A \u96c6\u7fa4 \u7684 etcd \u6570\u636e\u540e\uff0c\u53ea\u80fd\u5c06\u5907\u4efd\u6570\u636e\u8fd8\u539f\u5230 A \u96c6\u7fa4\u4e2d\uff0c\u4e0d\u80fd\u8fd8\u539f\u5230 B \u96c6\u7fa4\u3002
        • \u5bf9\u4e8e\u8de8\u96c6\u7fa4\u7684\u5907\u4efd\u4e0e\u8fd8\u539f\uff0c\u5efa\u8bae\u4f7f\u7528\u5e94\u7528\u5907\u4efd\u8fd8\u539f\u529f\u80fd\u3002
        • \u9996\u5148\u521b\u5efa\u5907\u4efd\u7b56\u7565\uff0c\u5907\u4efd\u5f53\u524d\u72b6\u6001\uff0c\u5efa\u8bae\u53c2\u8003ETCD \u5907\u4efd\u529f\u80fd\u3002

        \u4e0b\u9762\u901a\u8fc7\u5177\u4f53\u7684\u6848\u4f8b\u6765\u8bf4\u660e\u5907\u4efd\u8fd8\u539f\u7684\u6574\u4e2a\u8fc7\u7a0b\u3002

        "},{"location":"admin/kpanda/best-practice/etcd-backup.html#_1","title":"\u73af\u5883\u4fe1\u606f","text":"

        \u9996\u5148\u4ecb\u7ecd\u8fd8\u539f\u7684\u76ee\u6807\u96c6\u7fa4\u548c S3 \u5b58\u50a8\u7684\u57fa\u672c\u4fe1\u606f\u3002\u8fd9\u91cc\u4ee5 MinIo \u4f5c\u4e3a S3 \u5b58\u50a8\uff0c\u6574\u4e2a\u96c6\u7fa4\u6709 3 \u4e2a\u63a7\u5236\u9762\uff083 \u4e2a etcd \u526f\u672c\uff09\u3002

        IP \u4e3b\u673a \u89d2\u8272 \u5907\u6ce8 10.6.212.10 host01 k8s-master01 k8s \u8282\u70b9 1 10.6.212.11 host02 k8s-master02 k8s \u8282\u70b9 2 10.6.212.12 host03 k8s-master03 k8s \u8282\u70b9 3 10.6.212.13 host04 minio minio \u670d\u52a1"},{"location":"admin/kpanda/best-practice/etcd-backup.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":""},{"location":"admin/kpanda/best-practice/etcd-backup.html#etcdbrctl","title":"\u5b89\u88c5 etcdbrctl \u5de5\u5177","text":"

        \u4e3a\u4e86\u5b9e\u73b0 ETCD \u6570\u636e\u5907\u4efd\u8fd8\u539f\uff0c\u9700\u8981\u5728\u4e0a\u8ff0\u4efb\u610f\u4e00\u4e2a Kubernetes \u8282\u70b9\u4e0a\u5b89\u88c5 etcdbrctl \u5f00\u6e90\u5de5\u5177\u3002 \u6b64\u5de5\u5177\u6682\u65f6\u6ca1\u6709\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u9700\u8981\u81ea\u884c\u7f16\u8bd1\u3002\u7f16\u8bd1\u65b9\u5f0f\u8bf7\u53c2\u8003 Gardener / etcd-backup-restore \u672c\u5730\u5f00\u53d1\u6587\u6863\u3002

        \u5b89\u88c5\u5b8c\u6210\u540e\u7528\u5982\u4e0b\u547d\u4ee4\u68c0\u67e5\u5de5\u5177\u662f\u5426\u53ef\u7528\uff1a

        etcdbrctl -v\n

        \u9884\u671f\u8f93\u51fa\u5982\u4e0b:

        INFO[0000] etcd-backup-restore Version: v0.23.0-dev\nINFO[0000] Git SHA: b980beec\nINFO[0000] Go Version: go1.19.3\nINFO[0000] Go OS/Arch: linux/amd64\n
        "},{"location":"admin/kpanda/best-practice/etcd-backup.html#_3","title":"\u68c0\u67e5\u5907\u4efd\u6570\u636e","text":"

        \u8fd8\u539f\u4e4b\u524d\u9700\u8981\u68c0\u67e5\u4e0b\u5217\u4e8b\u9879\uff1a

        • \u662f\u5426\u5df2\u7ecf\u5728 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\u6210\u529f\u5907\u4efd\u4e86\u6570\u636e
        • \u68c0\u67e5 S3 \u5b58\u50a8\u4e2d\u5907\u4efd\u6570\u636e\u662f\u5426\u5b58\u5728

        Note

        AI \u7b97\u529b\u4e2d\u5fc3\u7684\u5907\u4efd\u662f\u5168\u91cf\u6570\u636e\u5907\u4efd\uff0c\u8fd8\u539f\u65f6\u5c06\u8fd8\u539f\u6700\u540e\u4e00\u6b21\u5907\u4efd\u7684\u5168\u91cf\u6570\u636e\u3002

        "},{"location":"admin/kpanda/best-practice/etcd-backup.html#_4","title":"\u5173\u95ed\u96c6\u7fa4","text":"

        \u5728\u5907\u4efd\u4e4b\u524d\uff0c\u5fc5\u987b\u8981\u5148\u5173\u95ed\u96c6\u7fa4\u3002\u9ed8\u8ba4\u96c6\u7fa4 etcd \u548c kube-apiserver \u90fd\u662f\u4ee5\u9759\u6001 Pod \u7684\u5f62\u5f0f\u542f\u52a8\u7684\u3002 \u8fd9\u91cc\u7684\u5173\u95ed\u96c6\u7fa4\u662f\u6307\u5c06\u9759\u6001 Pod manifest \u6587\u4ef6\u79fb\u52a8\u5230 /etc/kubernetes/manifest \u76ee\u5f55\u5916\uff0c\u96c6\u7fa4\u5c31\u4f1a\u79fb\u9664\u5bf9\u5e94 Pod\uff0c\u8fbe\u5230\u5173\u95ed\u670d\u52a1\u7684\u4f5c\u7528\u3002

        1. \u9996\u5148\u5220\u9664\u4e4b\u524d\u7684\u5907\u4efd\u6570\u636e\uff0c\u79fb\u9664\u6570\u636e\u5e76\u975e\u5c06\u73b0\u6709 etcd \u6570\u636e\u5220\u9664\uff0c\u800c\u662f\u6307\u4fee\u6539 etcd \u6570\u636e\u76ee\u5f55\u7684\u540d\u79f0\u3002 \u7b49\u5907\u4efd\u8fd8\u539f\u6210\u529f\u4e4b\u540e\u518d\u5220\u9664\u6b64\u76ee\u5f55\u3002\u8fd9\u6837\u505a\u7684\u76ee\u7684\u662f\uff0c\u5982\u679c etcd \u5907\u4efd\u8fd8\u539f\u5931\u8d25\uff0c\u8fd8\u53ef\u4ee5\u5c1d\u8bd5\u8fd8\u539f\u5f53\u524d\u96c6\u7fa4\u3002\u6b64\u6b65\u9aa4\u6bcf\u4e2a\u8282\u70b9\u5747\u9700\u6267\u884c\u3002

          rm -rf /var/lib/etcd_bak\n
        2. \u7136\u540e\u9700\u8981\u5173\u95ed kube-apiserver \u7684\u670d\u52a1\uff0c\u786e\u4fdd etcd \u7684\u6570\u636e\u6ca1\u6709\u65b0\u53d8\u5316\u3002\u6b64\u6b65\u9aa4\u6bcf\u4e2a\u8282\u70b9\u5747\u9700\u6267\u884c\u3002

          mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/kube-apiserver.yaml\n
        3. \u540c\u65f6\u8fd8\u9700\u8981\u5173\u95ed etcd \u7684\u670d\u52a1\u3002\u6b64\u6b65\u9aa4\u6bcf\u4e2a\u8282\u70b9\u5747\u9700\u6267\u884c\u3002

          mv /etc/kubernetes/manifests/etcd.yaml /tmp/etcd.yaml\n
        4. \u786e\u4fdd\u6240\u6709\u63a7\u5236\u5e73\u9762\u7684 kube-apiserver \u548c etcd \u670d\u52a1\u90fd\u5df2\u7ecf\u5173\u95ed\u3002

        5. \u5173\u95ed\u6240\u6709\u7684\u8282\u70b9\u540e\uff0c\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u68c0\u67e5 etcd \u96c6\u7fa4\u72b6\u6001\u3002\u6b64\u547d\u4ee4\u5728\u4efb\u610f\u4e00\u4e2a\u8282\u70b9\u6267\u884c\u5373\u53ef\u3002

          endpoints \u7684\u503c\u9700\u8981\u66ff\u6362\u4e3a\u5b9e\u9645\u8282\u70b9\u540d\u79f0

          etcdctl endpoint status --endpoints=controller-node-1:2379,controller-node-2:2379,controller-node-3:2379 -w table \\\n  --cacert=\"/etc/kubernetes/ssl/etcd/ca.crt\" \\\n  --cert=\"/etc/kubernetes/ssl/apiserver-etcd-client.crt\" \\\n  --key=\"/etc/kubernetes/ssl/apiserver-etcd-client.key\"\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff0c\u8868\u793a\u6240\u6709\u7684 etcd \u8282\u70b9\u90fd\u88ab\u9500\u6bc1\uff1a

          {\"level\":\"warn\",\"ts\":\"2023-03-29T17:51:50.817+0800\",\"logger\":\"etcd-client\",\"caller\":\"v3@v3.5.6/retry_interceptor.go:62\",\"msg\":\"retrying of unary invoker failed\",\"target\":\"etcd-endpoints://0xc0001ba000/controller-node-1:2379\",\"attempt\":0,\"error\":\"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \\\"transport: Error while dialing dial tcp 10.5.14.31:2379: connect: connection refused\\\"\"}\nFailed to get the status of endpoint controller-node-1:2379 (context deadline exceeded)\n{\"level\":\"warn\",\"ts\":\"2023-03-29T17:51:55.818+0800\",\"logger\":\"etcd-client\",\"caller\":\"v3@v3.5.6/retry_interceptor.go:62\",\"msg\":\"retrying of unary invoker failed\",\"target\":\"etcd-endpoints://0xc0001ba000/controller-node-2:2379\",\"attempt\":0,\"error\":\"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \\\"transport: Error while dialing dial tcp 10.5.14.32:2379: connect: connection refused\\\"\"}\nFailed to get the status of endpoint controller-node-2:2379 (context deadline exceeded)\n{\"level\":\"warn\",\"ts\":\"2023-03-29T17:52:00.820+0800\",\"logger\":\"etcd-client\",\"caller\":\"v3@v3.5.6/retry_interceptor.go:62\",\"msg\":\"retrying of unary invoker failed\",\"target\":\"etcd-endpoints://0xc0001ba000/controller-node-1:2379\",\"attempt\":0,\"error\":\"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \\\"transport: Error while dialing dial tcp 10.5.14.33:2379: connect: connection refused\\\"\"}\nFailed to get the status of endpoint controller-node-3:2379 (context deadline exceeded)\n+----------+----+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |\n+----------+----+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n+----------+----+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n
        "},{"location":"admin/kpanda/best-practice/etcd-backup.html#_5","title":"\u8fd8\u539f\u5907\u4efd","text":"

        \u53ea\u9700\u8981\u8fd8\u539f\u4e00\u4e2a\u8282\u70b9\u7684\u6570\u636e\uff0c\u5176\u4ed6\u8282\u70b9\u7684 etcd \u6570\u636e\u5c31\u4f1a\u81ea\u52a8\u8fdb\u884c\u540c\u6b65\u3002

        1. \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf

          \u4f7f\u7528 etcdbrctl \u8fd8\u539f\u6570\u636e\u4e4b\u524d\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u5c06\u8fde\u63a5 S3 \u7684\u8ba4\u8bc1\u4fe1\u606f\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\uff1a

          export ECS_ENDPOINT=http://10.6.212.13:9000 # (1)!\nexport ECS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE # (2)!\nexport ECS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY # (3)!\n
          1. S3 \u5b58\u50a8\u7684\u8bbf\u95ee\u70b9
          2. S3 \u5b58\u50a8\u7684\u7528\u6237\u540d
          3. S3 \u5b58\u50a8\u7684\u5bc6\u7801
        2. \u6267\u884c\u8fd8\u539f\u64cd\u4f5c

          \u6267\u884c etcdbrctl \u547d\u4ee4\u884c\u5de5\u5177\u6267\u884c\u8fd8\u539f\uff0c\u8fd9\u662f\u6700\u5173\u952e\u7684\u4e00\u6b65\u3002

          etcdbrctl restore --data-dir /var/lib/etcd/ --store-container=\"etcd-backup\" \\ \n  --storage-provider=ECS \\\n  --initial-cluster=controller-node1=https://10.6.212.10:2380 \\\n  --initial-advertise-peer-urls=https://10.6.212.10:2380 \n

          \u53c2\u6570\u8bf4\u660e\u5982\u4e0b\uff1a

          • --data-dir: etcd \u6570\u636e\u76ee\u5f55\uff0c\u6b64\u76ee\u5f55\u5fc5\u987b\u8ddf etcd \u6570\u636e\u76ee\u5f55\u4e00\u81f4\uff0cetcd \u624d\u80fd\u6b63\u5e38\u52a0\u8f7d\u6570\u636e\u3002
          • --store-container\uff1aS3 \u5b58\u50a8\u7684\u4f4d\u7f6e\uff0cMinIO \u4e2d\u5bf9\u5e94\u7684 bucket\uff0c\u5fc5\u987b\u8ddf\u6570\u636e\u5907\u4efd\u7684 bucket \u76f8\u5bf9\u5e94\u3002
          • --initial-cluster\uff1aetcd \u521d\u59cb\u5316\u914d\u7f6e, etcd \u96c6\u7fa4\u7684\u540d\u79f0\u5fc5\u987b\u8ddf\u539f\u6765\u4e00\u81f4\u3002
          • --initial-advertise-peer-urls\uff1aetcd member \u96c6\u7fa4\u4e4b\u95f4\u8bbf\u95ee\u5730\u5740\u3002\u5fc5\u987b\u8ddf etcd \u7684\u914d\u7f6e\u4fdd\u6301\u4e00\u81f4\u3002

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          INFO[0000] Finding latest set of snapshot to recover from...\nINFO[0000] Restoring from base snapshot: Full-00000000-00111147-1679991074  actor=restorer\nINFO[0001] successfully fetched data of base snapshot in 1.241380207 seconds  actor=restorer\n{\"level\":\"info\",\"ts\":1680011221.2511616,\"caller\":\"mvcc/kvstore.go:380\",\"msg\":\"restored last compact revision\",\"meta-bucket-name\":\"meta\",\"meta-bucket-name-key\":\"finishedCompactRev\",\"restored-compact-revision\":110327}\n{\"level\":\"info\",\"ts\":1680011221.3045986,\"caller\":\"membership/cluster.go:392\",\"msg\":\"added member\",\"cluster-id\":\"66638454b9dd7b8a\",\"local-member-id\":\"0\",\"added-peer-id\":\"123c2503a378fc46\",\"added-peer-peer-urls\":[\"https://10.6.212.10:2380\"]}\nINFO[0001] Starting embedded etcd server...              actor=restorer\n....\n\n{\"level\":\"info\",\"ts\":\"2023-03-28T13:47:02.922Z\",\"caller\":\"embed/etcd.go:565\",\"msg\":\"stopped serving peer traffic\",\"address\":\"127.0.0.1:37161\"}\n{\"level\":\"info\",\"ts\":\"2023-03-28T13:47:02.922Z\",\"caller\":\"embed/etcd.go:367\",\"msg\":\"closed etcd server\",\"name\":\"default\",\"data-dir\":\"/var/lib/etcd\",\"advertise-peer-urls\":[\"http://localhost:0\"],\"advertise-client-urls\":[\"http://localhost:0\"]}\nINFO[0003] Successfully restored the etcd data directory.\n

          \u53ef\u4ee5\u67e5\u770b etcd \u7684 YAML \u6587\u4ef6\u8fdb\u884c\u5bf9\u7167\uff0c\u4ee5\u514d\u914d\u7f6e\u9519\u8bef

          cat /tmp/etcd.yaml | grep initial-\n- --experimental-initial-corrupt-check=true\n- --initial-advertise-peer-urls=https://10.6.212.10:2380\n- --initial-cluster=controller-node-1=https://10.6.212.10:2380\n
        3. \u4ee5\u4e0b\u547d\u4ee4\u5728\u8282\u70b9 01 \u4e0a\u6267\u884c\uff0c\u4e3a\u4e86\u6062\u590d\u8282\u70b9 01 \u7684 etcd \u670d\u52a1\u3002

          \u9996\u5148\u5c06 etcd \u9759\u6001 Pod \u7684 manifest \u6587\u4ef6\u79fb\u52a8\u5230 /etc/kubernetes/manifests \u76ee\u5f55\u4e0b\uff0ckubelet \u5c06\u4f1a\u91cd\u542f etcd\uff1a

          mv /tmp/etcd.yaml /etc/kubernetes/manifests/etcd.yaml\n

          \u7136\u540e\u7b49\u5f85 etcd \u670d\u52a1\u542f\u52a8\u5b8c\u6210\u4ee5\u540e\uff0c\u68c0\u67e5 etcd \u7684\u72b6\u6001\uff0cetcd \u76f8\u5173\u8bc1\u4e66\u9ed8\u8ba4\u76ee\u5f55\uff1a /etc/kubernetes/ssl \u3002\u5982\u679c\u96c6\u7fa4\u8bc1\u4e66\u5b58\u653e\u5728\u5176\u4ed6\u4f4d\u7f6e\uff0c\u8bf7\u6307\u5b9a\u5bf9\u5e94\u8def\u5f84\u3002

          • \u68c0\u67e5 etcd \u96c6\u7fa4\u5217\u8868:

            etcdctl member list -w table \\\n--cacert=\"/etc/kubernetes/ssl/etcd/ca.crt\" \\\n--cert=\"/etc/kubernetes/ssl/apiserver-etcd-client.crt\" \\\n--key=\"/etc/kubernetes/ssl/apiserver-etcd-client.key\" \n

            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

            +------------------+---------+-------------------+--------------------------+--------------------------+------------+\n|        ID        | STATUS  |       NAME        |        PEER ADDRS        |       CLIENT ADDRS       | IS LEARNER |\n+------------------+---------+-------------------+--------------------------+--------------------------+------------+\n| 123c2503a378fc46 | started | controller-node-1 | https://10.6.212.10:2380 | https://10.6.212.10:2379 |      false |\n+------------------+---------+-------------------+--------------------------+--------------------------+------------+\n
          • \u67e5\u770b controller-node-1 \u72b6\u6001:

            etcdctl endpoint status --endpoints=controller-node-1:2379 -w table \\\n--cacert=\"/etc/kubernetes/ssl/etcd/ca.crt\" \\\n--cert=\"/etc/kubernetes/ssl/apiserver-etcd-client.crt\" \\\n--key=\"/etc/kubernetes/ssl/apiserver-etcd-client.key\"\n

            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

            +------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n|        ENDPOINT        |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |\n+------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n| controller-node-1:2379 | 123c2503a378fc46 |   3.5.6 |   15 MB |      true |      false |         3 |       1200 |               1199 |        |\n+------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n
        4. \u6062\u590d\u5176\u4ed6\u8282\u70b9\u6570\u636e

          \u4e0a\u8ff0\u6b65\u9aa4\u5df2\u7ecf\u8fd8\u539f\u4e86\u8282\u70b9 01 \u7684\u6570\u636e\uff0c\u82e5\u60f3\u8981\u8fd8\u539f\u5176\u4ed6\u8282\u70b9\u6570\u636e\uff0c\u53ea\u9700\u8981\u5c06 etcd \u7684 Pod \u542f\u52a8\u8d77\u6765\uff0c\u8ba9 etcd \u81ea\u5df1\u5b8c\u6210\u6570\u636e\u540c\u6b65\u3002

          • \u5728\u8282\u70b9 02 \u548c\u8282\u70b9 03 \u90fd\u6267\u884c\u76f8\u540c\u7684\u64cd\u4f5c\uff1a

            mv /tmp/etcd.yaml /etc/kubernetes/manifests/etcd.yaml\n
          • etcd member \u96c6\u7fa4\u4e4b\u95f4\u7684\u6570\u636e\u540c\u6b65\u9700\u8981\u4e00\u5b9a\u7684\u65f6\u95f4\uff0c\u53ef\u4ee5\u67e5\u770b etcd \u96c6\u7fa4\u72b6\u6001\uff0c\u786e\u4fdd\u6240\u6709 etcd \u96c6\u7fa4\u6b63\u5e38\uff1a

            \u68c0\u67e5 etcd \u96c6\u7fa4\u72b6\u6001\u662f\u5426\u6b63\u5e38:

            etcdctl member list -w table \\\n--cacert=\"/etc/kubernetes/ssl/etcd/ca.crt\" \\\n--cert=\"/etc/kubernetes/ssl/apiserver-etcd-client.crt\" \\\n--key=\"/etc/kubernetes/ssl/apiserver-etcd-client.key\"\n

            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

            +------------------+---------+-------------------+-------------------------+-------------------------+------------+\n|        ID        | STATUS  |    NAME           |       PEER ADDRS        |      CLIENT ADDRS       | IS LEARNER |\n+------------------+---------+-------------------+-------------------------+-------------------------+------------+\n| 6ea47110c5a87c03 | started | controller-node-1 | https://10.5.14.31:2380 | https://10.5.14.31:2379 |      false |\n| e222e199f1e318c4 | started | controller-node-2 | https://10.5.14.32:2380 | https://10.5.14.32:2379 |      false |\n| f64eeda321aabe2d | started | controller-node-3 | https://10.5.14.33:2380 | https://10.5.14.33:2379 |      false |\n+------------------+---------+-------------------+-------------------------+-------------------------+------------+\n

            \u68c0\u67e5 3 \u4e2a member \u8282\u70b9\u662f\u5426\u6b63\u5e38:

            etcdctl endpoint status --endpoints=controller-node-1:2379,controller-node-2:2379,controller-node-3:2379 -w table \\\n--cacert=\"/etc/kubernetes/ssl/etcd/ca.crt\" \\\n--cert=\"/etc/kubernetes/ssl/apiserver-etcd-client.crt\" \\\n--key=\"/etc/kubernetes/ssl/apiserver-etcd-client.key\"\n

            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

            +------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n|     ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |\n+------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n| controller-node-1:2379 | 6ea47110c5a87c03 |   3.5.6 |   88 MB |      true |      false |         6 |     199008 |             199008 |        |\n| controller-node-2:2379 | e222e199f1e318c4 |   3.5.6 |   88 MB |     false |      false |         6 |     199114 |             199114 |        |\n| controller-node-3:2379 | f64eeda321aabe2d |   3.5.6 |   88 MB |     false |      false |         6 |     199316 |             199316 |        |\n+------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+\n
        "},{"location":"admin/kpanda/best-practice/etcd-backup.html#_6","title":"\u6062\u590d\u96c6\u7fa4","text":"

        \u7b49\u6240\u6709\u8282\u70b9\u7684 etcd \u6570\u636e\u540c\u6b65\u5b8c\u6210\u540e\uff0c\u5219\u53ef\u4ee5\u5c06 kube-apiserver \u8fdb\u884c\u91cd\u65b0\u542f\u52a8\uff0c\u5c06\u6574\u4e2a\u96c6\u7fa4\u6062\u590d\u5230\u53ef\u8bbf\u95ee\u72b6\u6001\uff1a

        1. \u91cd\u65b0\u542f\u52a8 node1 \u7684 kube-apiserver \u670d\u52a1

          mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml\n
        2. \u91cd\u65b0\u542f\u52a8 node2 \u7684 kube-apiserver \u670d\u52a1

          mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml\n
        3. \u91cd\u65b0\u542f\u52a8 node3 \u7684 kube-apiserver \u670d\u52a1

          mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml\n
        4. \u7b49\u5f85 kubelet \u5c06 kube-apiserver \u542f\u52a8\u540e\uff0c\u68c0\u67e5\u8fd8\u539f\u7684 k8s \u6570\u636e\u662f\u5426\u6b63\u5e38\uff1a

          kubectl get nodes\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          NAME                STATUS     ROLES           AGE     VERSION\ncontroller-node-1   Ready      <none>          3h30m   v1.25.4\ncontroller-node-3   Ready      control-plane   3h29m   v1.25.4\ncontroller-node-3   Ready      control-plane   3h28m   v1.25.4\n
        "},{"location":"admin/kpanda/best-practice/hardening-cluster.html","title":"\u5982\u4f55\u52a0\u56fa\u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4","text":"

        \u5728 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\uff0c\u4f7f\u7528 CIS Benchmark (CIS) \u626b\u63cf\u4f7f\u7528\u754c\u9762\u521b\u5efa\u7684\u5de5\u4f5c\u96c6\u7fa4\uff0c\u6709\u4e00\u4e9b\u626b\u63cf\u9879\u5e76\u6ca1\u6709\u901a\u8fc7\u626b\u63cf\u3002 \u672c\u6587\u5c06\u57fa\u4e8e\u4e0d\u540c\u7684 CIS Benchmark \u7248\u672c\u8fdb\u884c\u52a0\u56fa\u8bf4\u660e\u3002

        "},{"location":"admin/kpanda/best-practice/hardening-cluster.html#cis-benchmark-127","title":"CIS Benchmark 1.27","text":"

        \u626b\u63cf\u73af\u5883\u8bf4\u660e\uff1a

        • kubernetes version: 1.25.4
        • containerd: 1.7.0
        • kubean version: 0.4.9
        • kubespary version: v2.22
        "},{"location":"admin/kpanda/best-practice/hardening-cluster.html#_2","title":"\u672a\u901a\u8fc7\u626b\u63cf\u9879","text":"
        1. [FAIL] 1.2.5 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
        2. [FAIL] 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
        3. [FAIL] 1.4.1 Ensure that the --profiling argument is set to false (Automated)
        4. [FAIL] 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
        "},{"location":"admin/kpanda/best-practice/hardening-cluster.html#_3","title":"\u626b\u63cf\u5931\u8d25\u539f\u56e0\u5206\u6790","text":"
        1. [FAIL] 1.2.5 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)

          \u539f\u56e0\uff1a CIS \u8981\u6c42 kube-apiserver \u5fc5\u987b\u6307\u5b9a kubelet \u7684 CA \u8bc1\u4e66\u8def\u5f84\uff1a

        2. [FAIL] 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)

          \u539f\u56e0\uff1a CIS \u8981\u6c42 kube-controller-manager \u7684 --bing-address=127.0.0.1

        3. [FAIL] 1.4.1 Ensure that the --profiling argument is set to false (Automated)

          \u539f\u56e0\uff1a CIS \u8981\u6c42 kube-scheduler \u8bbe\u7f6e --profiling=false

        4. [FAIL] 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)

          \u539f\u56e0\uff1a CIS \u8981\u6c42 \u8bbe\u7f6e kube-scheduler \u7684 --bind-address=127.0.0.1

        "},{"location":"admin/kpanda/best-practice/hardening-cluster.html#cis","title":"\u52a0\u56fa\u914d\u7f6e\u4ee5\u901a\u8fc7 CIS \u626b\u63cf","text":"

        kubespray \u5b98\u65b9\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u5b89\u5168\u626b\u63cf\u95ee\u9898\uff0c\u5728 v2.22 \u4e2d\u6dfb\u52a0\u9ed8\u8ba4\u503c\u89e3\u51b3\u4e86\u4e00\u90e8\u5206\u95ee\u9898\uff0c \u66f4\u591a\u7ec6\u8282\u8bf7\u53c2\u8003 kubespray \u52a0\u56fa\u6587\u6863\u3002

        • \u901a\u8fc7\u4fee\u6539 kubean var-config \u914d\u7f6e\u6587\u4ef6\u6765\u6dfb\u52a0\u53c2\u6570\uff1a

          kubernetes_audit: true\nkube_controller_manager_bind_address: 127.0.0.1\nkube_scheduler_bind_address: 127.0.0.1\nkube_kubeadm_scheduler_extra_args:\n  profiling: false\nkubelet_rotate_server_certificates: true\n
        • \u5728 AI \u7b97\u529b\u4e2d\u5fc3\u4e2d\uff0c\u4e5f\u63d0\u4f9b\u4e86\u901a\u8fc7 UI \u6765\u914d\u7f6e\u9ad8\u7ea7\u53c2\u6570\u7684\u529f\u80fd\uff0c\u5728\u521b\u5efa\u96c6\u7fa4\u6700\u540e\u4e00\u6b65\u6dfb\u52a0\u81ea\u5b9a\u4e49\u53c2\u6570\uff1a

        • \u8bbe\u7f6e\u81ea\u5b9a\u4e49\u53c2\u6570\u540e\uff0c\u5728 kubean \u7684 var-config \u7684 configmap \u4e2d\u6dfb\u52a0\u4e86\u5982\u4e0b\u53c2\u6570\uff1a

        • \u5b89\u88c5\u96c6\u7fa4\u540e\u8fdb\u884c\u626b\u63cf\uff1a

        \u626b\u63cf\u540e\u6240\u6709\u7684\u626b\u63cf\u9879\u90fd\u901a\u8fc7\u4e86\u626b\u63cf\uff08WARN \u548c INFO \u8ba1\u7b97\u4e3a PASS\uff09\uff0c \u7531\u4e8e CIS Benchmark \u4f1a\u4e0d\u65ad\u66f4\u65b0\uff0c\u6b64\u6587\u6863\u7684\u5185\u5bb9\u53ea\u9002\u7528\u4e8e CIS Benchmark 1.27\u3002

        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html","title":"\u8fb9\u7f18\u96c6\u7fa4\u90e8\u7f72\u548c\u7ba1\u7406\u5b9e\u8df5","text":"

        \u5bf9\u4e8e\u8d44\u6e90\u53d7\u9650\u7684\u8fb9\u7f18\u6216\u7269\u8054\u7f51\u573a\u666f\uff0cKubernetes \u65e0\u6cd5\u5f88\u597d\u7684\u6ee1\u8db3\u8d44\u6e90\u8981\u6c42\uff0c\u4e3a\u6b64\u9700\u8981\u4e00\u4e2a\u8f7b\u91cf\u5316 Kubernetes \u65b9\u6848\uff0c \u65e2\u80fd\u5b9e\u73b0\u5bb9\u5668\u7ba1\u7406\u548c\u7f16\u6392\u80fd\u529b\uff0c\u53c8\u80fd\u7ed9\u4e1a\u52a1\u5e94\u7528\u9884\u7559\u66f4\u591a\u8d44\u6e90\u7a7a\u95f4\u3002\u672c\u6587\u4ecb\u7ecd\u8fb9\u7f18\u96c6\u7fa4 k3s \u7684\u90e8\u7f72\u548c\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u5b9e\u8df5\u3002

        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html#_2","title":"\u8282\u70b9\u89c4\u5212","text":"

        \u67b6\u6784

        • x86_64
        • armhf
        • arm64/aarch64

        \u64cd\u4f5c\u7cfb\u7edf

        • \u53ef\u4ee5\u5728\u5927\u591a\u6570\u73b0\u4ee3 Linux \u7cfb\u7edf\u4e0a\u5de5\u4f5c

        CPU/\u5185\u5b58

        • \u5355\u8282\u70b9 K3s \u96c6\u7fa4

          \u6700\u5c0f CPU \u63a8\u8350 CPU \u6700\u5c0f\u5185\u5b58 \u63a8\u8350\u5185\u5b58 K3s cluster 1 core 2 cores 1.5 GB 2 GB
        • \u591a\u8282\u70b9 K3s \u96c6\u7fa4

          \u6700\u5c0f CPU \u63a8\u8350 CPU \u6700\u5c0f\u5185\u5b58 \u63a8\u8350\u5185\u5b58 K3s server 1 core 2 cores 1 GB 1.5 GB K3s agent 1 core 2 cores 512 MB 1 GB
        • \u8282\u70b9\u5165\u7ad9\u89c4\u5219

          • \u6839\u636e\u9700\u8981\u786e\u4fdd\u4ee5\u4e0b\u7aef\u53e3\u672a\u88ab\u5360\u7528
          • \u82e5\u6709\u7279\u6b8a\u8981\u6c42\u4e0d\u80fd\u5173\u95ed\u9632\u706b\u5899\uff0c\u9700\u786e\u4fdd\u7aef\u53e3\u4e3a\u653e\u884c
          \u534f\u8bae \u7aef\u53e3 \u6e90 \u76ee\u7684 \u63cf\u8ff0 TCP 2379-2380 Servers Servers \u9002\u7528\u4e8e HA\u4e0e\u5d4c\u5165\u5f0fetcd TCP 6443 Agents Servers K3s supervisor \u548c Kubernetes API Server UDP 8472 All nodes All nodes \u4ec5\u9002\u7528\u4e8eFlannel VXLAN TCP 10250 All nodes All nodes Kubelet metrics UDP 51820 All nodes All nodes \u4ec5\u9002\u7528\u4e8e\u5e26\u6709 IPv4\u7684Flannel Wireguard UDP 51821 All nodes All nodes \u4ec5\u9002\u7528\u4e8e\u5e26\u6709 IPv6\u7684Flannel Wireguard TCP 5001 All nodes All nodes \u4ec5\u9002\u7528\u4e8e\u5d4c\u5165\u5206\u5e03\u5f0f\u6ce8\u518c\u8868\uff08Spegel\uff09 TCP 6443 All nodes All nodes \u4ec5\u9002\u7528\u4e8e\u5d4c\u5165\u5206\u5e03\u5f0f\u6ce8\u518c\u8868\uff08Spegel\uff09
        • \u8282\u70b9\u89d2\u8272

          \u767b\u5f55\u7528\u6237\u9700\u5177\u5907 root \u6743\u9650

          server node agent node \u63cf\u8ff0 1 0 \u4e00\u53f0 server \u8282\u70b9 1 2 \u4e00\u53f0 server \u8282\u70b9\u3001\u4e24\u53f0 agent \u8282\u70b9 3 0 \u4e09\u53f0 server \u8282\u70b9
        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html#_3","title":"\u524d\u7f6e\u51c6\u5907","text":"
        1. \u4fdd\u5b58\u5b89\u88c5\u811a\u672c\u5230\u5b89\u88c5\u8282\u70b9\uff08\u4efb\u610f\u53ef\u4ee5\u8bbf\u95ee\u5230\u96c6\u7fa4\u8282\u70b9\u7684\u8282\u70b9\uff09

          $ cat > k3slcm <<'EOF'\n#!/bin/bash\nset -e\n\nairgap_image=${K3S_AIRGAP_IMAGE:-}\nk3s_bin=${K3S_BINARY:-}\ninstall_script=${K3S_INSTALL_SCRIPT:-}\n\nservers=${K3S_SERVERS:-}\nagents=${K3S_AGENTS:-}\nssh_user=${SSH_USER:-root}\nssh_password=${SSH_PASSWORD:-}\nssh_privatekey_path=${SSH_PRIVATEKEY_PATH:-}\nextra_server_args=${EXTRA_SERVER_ARGS:-}\nextra_agent_args=${EXTRA_AGENT_ARGS:-}\nfirst_server=$(cut -d, -f1 <<<\"$servers,\")\nother_servers=$(cut -d, -f2- <<<\"$servers,\")\n\ninstall_script_env=\"INSTALL_K3S_SKIP_SELINUX_RPM=true INSTALL_K3S_SELINUX_WARN=true \"\n[ -n \"$K3S_VERSION\" ] && install_script_env+=\"INSTALL_K3S_VERSION=$K3S_VERSION \"\n\nssh_opts=\"-q -o StrictHostkeyChecking=no -o UserKnownHostsFile=/dev/null -o ControlPath=/tmp/ssh_mux_%h_%p_%r -o ControlMaster=auto -o ControlPersist=10m\"\n\nif [ -n \"$ssh_privatekey_path\" ]; then\n  ssh_opts+=\" -i $ssh_privatekey_path\"\nelif [ -n \"$ssh_password\" ]; then\n  askpass=$(mktemp)\n  echo \"echo -n $ssh_password\" > $askpass\n  chmod 0755 $askpass\n  export SSH_ASKPASS=$askpass SSH_ASKPASS_REQUIRE=force\nelse\n  echo \"SSH_PASSWORD or SSH_PRIVATEKEY_PATH must be provided\" && exit 1\nfi\n\nlog_info() { echo -e \"\\033[36m* $*\\033[0m\"; }\nclean() { rm -f $askpass; }\ntrap clean EXIT\n\nIFS=',' read -ra all_nodes <<< \"$servers,$agents\"\nif [ -n \"$k3s_bin\" ]; then\n  for node in ${all_nodes[@]}; do\n    chmod +x \"$k3s_bin\" \"$install_script\"\n    ssh $ssh_opts \"$ssh_user@$node\" \"mkdir -p /usr/local/bin /var/lib/rancher/k3s/agent/images\"\n    log_info \"Copying $airgap_image to $node\"\n    scp -O $ssh_opts \"$airgap_image\" \"$ssh_user@$node:/var/lib/rancher/k3s/agent/images\"\n    log_info \"Copying $k3s_bin to $node\"\n    scp -O $ssh_opts \"$k3s_bin\" \"$ssh_user@$node:/usr/local/bin/k3s\"\n    log_info \"Copying $install_script to $node\"\n    scp -O $ssh_opts \"$install_script\" \"$ssh_user@$node:/usr/local/bin/k3s-install.sh\"\n  done\n  install_script_env+=\"INSTALL_K3S_SKIP_DOWNLOAD=true \"\nelse\n  for node in ${all_nodes[@]}; do\n    log_info \"Downloading install script for $node\"\n    ssh $ssh_opts \"$ssh_user@$node\" \"curl -sSLo /usr/local/bin/k3s-install.sh https://get.k3s.io/ && chmod +x /usr/local/bin/k3s-install.sh\"\n  done\nfi\n\nrestart_k3s() {\n  local node=$1\n  previous_k3s_version=$(ssh $ssh_opts \"$ssh_user@$first_server\" \"kubectl get no -o wide | awk '\\$6==\\\"$node\\\" {print \\$5}'\")\n  [ -n \"$previous_k3s_version\" -a \"$previous_k3s_version\" != \"$K3S_VERSION\" -a -n \"$k3s_bin\" ] && return 0 || return 1\n}\n\ntoken=mynodetoken\ninstall_script_env+=${K3S_INSTALL_SCRIPT_ENV:-}\nif [ -z \"$other_servers\" ]; then\n  log_info \"Installing on server node [$first_server]\"\n  ssh $ssh_opts \"$ssh_user@$first_server\" \"env $install_script_env /usr/local/bin/k3s-install.sh server --token $token $extra_server_args\"\n  ! restart_k3s \"$first_server\" || ssh $ssh_opts \"$ssh_user@$first_server\" \"systemctl restart k3s.service\"\nelse\n  log_info \"Installing on first server node [$first_server]\"\n  ssh $ssh_opts \"$ssh_user@$first_server\" \"env $install_script_env /usr/local/bin/k3s-install.sh server --cluster-init --token $token $extra_server_args\"\n  ! restart_k3s \"$first_server\" || ssh $ssh_opts \"$ssh_user@$first_server\" \"systemctl restart k3s.service\"\n  IFS=',' read -ra other_server_nodes <<< \"$other_servers\"\n  for node in ${other_server_nodes[@]}; do\n    log_info \"Installing on other server node [$node]\"\n    ssh $ssh_opts \"$ssh_user@$node\" \"env $install_script_env /usr/local/bin/k3s-install.sh server --server https://$first_server:6443 --token $token $extra_server_args\"\n    ! restart_k3s \"$node\" || ssh $ssh_opts \"$ssh_user@$node\" \"systemctl restart k3s.service\"\n  done\nfi\n\nif [ -n \"$agents\" ]; then\n  IFS=',' read -ra agent_nodes <<< \"$agents\"\n  for node in ${agent_nodes[@]}; do\n    log_info \"Installing on agent node [$node]\"\n    ssh $ssh_opts \"$ssh_user@$node\" \"env $install_script_env K3S_TOKEN=$token K3S_URL=https://$first_server:6443 /usr/local/bin/k3s-install.sh agent --token $token $extra_agent_args\"\n    ! restart_k3s \"$node\" || ssh $ssh_opts \"$ssh_user@$node\" \"systemctl restart k3s-agent.service\"\n  done\nfi\nEOF\n
        2. \uff08\u53ef\u9009\uff09\u79bb\u7ebf\u73af\u5883\u4e0b\uff0c\u5728\u4e00\u53f0\u53ef\u8054\u7f51\u8282\u70b9\u4e0b\u8f7d K3s \u76f8\u5173\u79bb\u7ebf\u8d44\u6e90\uff0c\u5e76\u62f7\u8d1d\u5230\u5b89\u88c5\u8282\u70b9

          ## [\u8054\u7f51\u8282\u70b9\u6267\u884c]\n\n# \u8bbe\u7f6e K3s \u7248\u672c\u4e3a v1.30.2+k3s1\n$ export k3s_version=v1.30.2+k3s1\n\n# \u79bb\u7ebf\u955c\u50cf\u5305\n# arm64\u94fe\u63a5\u4e3a https://github.com/k3s-io/k3s/releases/download/$k3s_version/k3s-airgap-images-arm64.tar.zst\n$ curl -LO https://github.com/k3s-io/k3s/releases/download/$k3s_version/k3s-airgap-images-amd64.tar.zst\n\n# k3s \u4e8c\u8fdb\u5236\u6587\u4ef6\n# arm64\u94fe\u63a5\u4e3a https://github.com/k3s-io/k3s/releases/download/$k3s_version/k3s-arm64\n$ curl -LO https://github.com/k3s-io/k3s/releases/download/$k3s_version/k3s\n\n# \u5b89\u88c5\u90e8\u7f72\u811a\u672c\n$ curl -Lo k3s-install.sh https://get.k3s.io/\n\n## \u4e0a\u8ff0\u8d44\u6e90\u62f7\u8d1d\u5230\u5b89\u88c5\u8282\u70b9\u6587\u4ef6\u7cfb\u7edf\u4e0a\n\n## [\u5b89\u88c5\u8282\u70b9\u6267\u884c]\n$ export K3S_AIRGAP_IMAGE=<\u8d44\u6e90\u5b58\u653e\u76ee\u5f55>/k3s-airgap-images-amd64.tar.zst \n$ export K3S_BINARY=<\u8d44\u6e90\u5b58\u653e\u76ee\u5f55>/k3s \n$ export K3S_INSTALL_SCRIPT=<\u8d44\u6e90\u5b58\u653e\u76ee\u5f55>/k3s-install.sh\n
        3. \u5173\u95ed\u9632\u706b\u5899\u548c swap\uff08\u82e5\u9632\u706b\u5899\u65e0\u6cd5\u5173\u95ed\uff0c\u53ef\u653e\u884c\u4e0a\u8ff0\u5165\u7ad9\u7aef\u53e3\uff09

          # Ubuntu \u5173\u95ed\u9632\u706b\u5899\u65b9\u6cd5\n$ sudo ufw disable\n# RHEL / CentOS / Fedora / SUSE \u5173\u95ed\u9632\u706b\u5899\u65b9\u6cd5\n$ systemctl disable firewalld --now\n$ sudo swapoff -a\n$ sudo sed -i '/swap/s/^/#/' /etc/fstab\n
        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html#_4","title":"\u90e8\u7f72\u96c6\u7fa4","text":"

        \u4e0b\u6587\u6d4b\u8bd5\u73af\u5883\u4fe1\u606f\u4e3a Ubuntu 22.04 LTS, amd64\uff0c\u79bb\u7ebf\u5b89\u88c5

        1. \u5728\u5b89\u88c5\u8282\u70b9\u6839\u636e\u90e8\u7f72\u89c4\u5212\u8bbe\u7f6e\u8282\u70b9\u4fe1\u606f\uff0c\u5e76\u5bfc\u51fa\u73af\u5883\u53d8\u91cf\uff0c\u591a\u4e2a\u8282\u70b9\u4ee5\u534a\u89d2\u9017\u53f7 , \u5206\u9694

          1 server / 0 agent1 server / 2 agent3 server / 0 agent
          export K3S_SERVERS=172.30.41.5 $ export SSH_USER=root\n# \u82e5\u4f7f\u7528 public key \u65b9\u5f0f\u767b\u5f55\uff0c\u786e\u4fdd\u5df2\u5c06\u516c\u94a5\u6dfb\u52a0\u5230\u5404\u8282\u70b9\u7684 ~/.ssh/authorized_keys\n\nexport SSH_PRIVATEKEY_PATH=<\u79c1\u94a5\u8def\u5f84>\nexport SSH_PASSWORD=<SSH\u5bc6\u7801>\n
          export K3S_SERVERS=172.30.41.5\nexport K3S_AGENTS=172.30.41.6,172.30.41.7\nexport SSH_USER=root\n\n# \u82e5\u4f7f\u7528 public key \u65b9\u5f0f\u767b\u5f55\uff0c\u786e\u4fdd\u5df2\u5c06\u516c\u94a5\u6dfb\u52a0\u5230\u5404\u8282\u70b9\u7684 ~/.ssh/authorized_keys\nexport SSH_PRIVATEKEY_PATH=<\u79c1\u94a5\u8def\u5f84>\nexport SSH_PASSWORD=<SSH\u5bc6\u7801>\n
          export K3S_SERVERS=172.30.41.5,172.30.41.6,172.30.41.7\nexport SSH_USER=root\n\n# \u82e5\u4f7f\u7528 public key \u65b9\u5f0f\u767b\u5f55\uff0c\u786e\u4fdd\u5df2\u5c06\u516c\u94a5\u6dfb\u52a0\u5230\u5404\u8282\u70b9\u7684 ~/.ssh/authorized_keys\nexport SSH_PRIVATEKEY_PATH=<\u79c1\u94a5\u8def\u5f84>\nexport SSH_PASSWORD=<SSH\u5bc6\u7801>\n
        2. \u6267\u884c\u90e8\u7f72\u64cd\u4f5c

          \u4ee5 3 server / 0 agent \u6a21\u5f0f\u4e3a\u4f8b\uff0c\u6bcf\u53f0\u673a\u5668\u5fc5\u987b\u6709\u4e00\u4e2a\u552f\u4e00\u7684\u4e3b\u673a\u540d

          # \u82e5\u6709\u66f4\u591a K3s \u5b89\u88c5\u811a\u672c\u73af\u5883\u53d8\u91cf\u8bbe\u7f6e\u9700\u6c42\uff0c\u8bf7\u8bbe\u7f6e K3S_INSTALL_SCRIPT_ENV\uff0c\u5176\u503c\u53c2\u8003 https://docs.k3s.io/reference/env-variables\n# \u82e5\u9700\u5bf9 server \u6216 agent \u8282\u70b9\u4f5c\u51fa\u989d\u5916\u914d\u7f6e\uff0c\u8bf7\u8bbe\u7f6e EXTRA_SERVER_ARGS \u6216 EXTRA_AGENT_ARGS\uff0c\u5176\u503c\u53c2\u8003 https://docs.k3s.io/cli/server https://docs.k3s.io/cli/agent\n$ bash k3slcm\n* Copying ./v1.30.2/k3s-airgap-images-amd64.tar.zst to 172.30.41.5\n* Copying ./v1.30.2/k3s to 172.30.41.5\n* Copying ./v1.30.2/k3s-install.sh to 172.30.41.5\n* Copying ./v1.30.2/k3s-airgap-images-amd64.tar.zst to 172.30.41.6\n* Copying ./v1.30.2/k3s to 172.30.41.6\n* Copying ./v1.30.2/k3s-install.sh to 172.30.41.6\n* Copying ./v1.30.2/k3s-airgap-images-amd64.tar.zst to 172.30.41.7\n* Copying ./v1.30.2/k3s to 172.30.41.7\n* Copying ./v1.30.2/k3s-install.sh to 172.30.41.7\n* Installing on first server node [172.30.41.5]\n[INFO]  Skipping k3s download and verify\n[INFO]  Skipping installation of SELinux RPM\n[INFO]  Creating /usr/local/bin/kubectl symlink to k3s\n[INFO]  Creating /usr/local/bin/crictl symlink to k3s\n[INFO]  Creating /usr/local/bin/ctr symlink to k3s\n[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh\n[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh\n[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env\n[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service\n[INFO]  systemd: Enabling k3s unit\nCreated symlink /etc/systemd/system/multi-user.target.wants/k3s.service \u2192 /etc/systemd/system/k3s.service.\n[INFO]  systemd: Starting k3s\n* Installing on other server node [172.30.41.6]\n......\n
        3. \u68c0\u67e5\u96c6\u7fa4\u72b6\u6001

          $ kubectl get no -owide\nNAME      STATUS   ROLES                       AGE     VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME\nserver1   Ready    control-plane,etcd,master   3m51s   v1.30.2+k3s1   172.30.41.5   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\nserver2   Ready    control-plane,etcd,master   3m18s   v1.30.2+k3s1   172.30.41.6   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\nserver3   Ready    control-plane,etcd,master   3m7s    v1.30.2+k3s1   172.30.41.7   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\n\n$ kubectl get pod --all-namespaces -owide\nNAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE     IP          NODE      NOMINATED NODE   READINESS GATES\nkube-system   coredns-576bfc4dc7-z4x2s                  1/1     Running     0          8m31s   10.42.0.3   server1   <none>           <none>\nkube-system   helm-install-traefik-98kh5                0/1     Completed   1          8m31s   10.42.0.4   server1   <none>           <none>\nkube-system   helm-install-traefik-crd-9xtfd            0/1     Completed   0          8m31s   10.42.0.5   server1   <none>           <none>\nkube-system   local-path-provisioner-86f46b7bf7-qt995   1/1     Running     0          8m31s   10.42.0.6   server1   <none>           <none>\nkube-system   metrics-server-557ff575fb-kptsh           1/1     Running     0          8m31s   10.42.0.2   server1   <none>           <none>\nkube-system   svclb-traefik-f95cc81c-mgcjh              2/2     Running     0          6m28s   10.42.1.3   server2   <none>           <none>\nkube-system   svclb-traefik-f95cc81c-xtb8f              2/2     Running     0          6m28s   10.42.2.2   server3   <none>           <none>\nkube-system   svclb-traefik-f95cc81c-zcsxl              2/2     Running     0          6m28s   10.42.0.7   server1   <none>           <none>\nkube-system   traefik-5fb479b77-6pbh5                   1/1     Running     0          6m28s   10.42.1.2   server2   <none>           <none>\n
        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html#_5","title":"\u5347\u7ea7\u96c6\u7fa4","text":"
        1. \u5982\u5347\u7ea7\u5230 v1.30.3+k3s1 \u7248\u672c\uff0c\u6309\u7167 \u524d\u7f6e\u51c6\u5907 \u6b65\u9aa4 2 \u91cd\u65b0\u4e0b\u8f7d\u79bb\u7ebf\u8d44\u6e90\u5e76\u62f7\u8d1d\u5230\u5b89\u88c5\u8282\u70b9\uff0c\u540c\u65f6\u5728\u5b89\u88c5\u8282\u70b9\u5bfc\u51fa\u79bb\u7ebf\u8d44\u6e90\u8def\u5f84\u73af\u5883\u53d8\u91cf\u3002\uff08\u82e5\u4e3a\u8054\u7f51\u5347\u7ea7\uff0c\u5219\u8df3\u8fc7\u6b64\u64cd\u4f5c\uff09
        2. \u6267\u884c\u5347\u7ea7\u64cd\u4f5c

          $ export K3S_VERSION=v1.30.3+k3s1\n$ bash k3slcm\n* Copying ./v1.30.3/k3s-airgap-images-amd64.tar.zst to 172.30.41.5\n* Copying ./v1.30.3/k3s to 172.30.41.5\n* Copying ./v1.30.3/k3s-install.sh to 172.30.41.5\n* Copying ./v1.30.3/k3s-airgap-images-amd64.tar.zst to 172.30.41.6\n* Copying ./v1.30.3/k3s to 172.30.41.6\n* Copying ./v1.30.3/k3s-install.sh to 172.30.41.6\n* Copying ./v1.30.3/k3s-airgap-images-amd64.tar.zst to 172.30.41.7\n* Copying ./v1.30.3/k3s to 172.30.41.7\n* Copying ./v1.30.3/k3s-install.sh to 172.30.41.7\n* Installing on first server node [172.30.41.5]\n[INFO]  Skipping k3s download and verify\n[INFO]  Skipping installation of SELinux RPM\n[INFO]  Skipping /usr/local/bin/kubectl symlink to k3s, already exists\n[INFO]  Skipping /usr/local/bin/crictl symlink to k3s, already exists\n[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, already exists\n[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh\n[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh\n[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env\n[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service\n[INFO]  systemd: Enabling k3s unit\nCreated symlink /etc/systemd/system/multi-user.target.wants/k3s.service \u2192 /etc/systemd/system/k3s.service.\n[INFO]  No change detected so skipping service start\n* Installing on other server node [172.30.41.6]\n......\n
        3. \u68c0\u67e5\u96c6\u7fa4\u72b6\u6001

          $ kubectl get node -owide\nNAME      STATUS   ROLES                       AGE   VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME\nserver1   Ready    control-plane,etcd,master   18m   v1.30.3+k3s1   172.30.41.5   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\nserver2   Ready    control-plane,etcd,master   17m   v1.30.3+k3s1   172.30.41.6   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\nserver3   Ready    control-plane,etcd,master   17m   v1.30.3+k3s1   172.30.41.7   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\n\n$ kubectl get po --all-namespaces -owide\nNAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE     IP          NODE      NOMINATED NODE   READINESS GATES\nkube-system   coredns-576bfc4dc7-z4x2s                  1/1     Running     0          18m     10.42.0.3   server1   <none>           <none>\nkube-system   helm-install-traefik-98kh5                0/1     Completed   1          18m     <none>      server1   <none>           <none>\nkube-system   helm-install-traefik-crd-9xtfd            0/1     Completed   0          18m     <none>      server1   <none>           <none>\nkube-system   local-path-provisioner-6795b5f9d8-t4rvm   1/1     Running     0          2m49s   10.42.2.3   server3   <none>           <none>\nkube-system   metrics-server-557ff575fb-kptsh           1/1     Running     0          18m     10.42.0.2   server1   <none>           <none>\nkube-system   svclb-traefik-f95cc81c-mgcjh              2/2     Running     0          16m     10.42.1.3   server2   <none>           <none>\nkube-system   svclb-traefik-f95cc81c-xtb8f              2/2     Running     0          16m     10.42.2.2   server3   <none>           <none>\nkube-system   svclb-traefik-f95cc81c-zcsxl              2/2     Running     0          16m     10.42.0.7   server1   <none>           <none>\nkube-system   traefik-5fb479b77-6pbh5                   1/1     Running     0          16m     10.42.1.2   server2   <none>           <none>\n
        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html#_6","title":"\u6269\u5bb9\u96c6\u7fa4","text":"
        1. \u5982\u6dfb\u52a0\u65b0\u7684 agent \u8282\u70b9\uff1a

          export K3S_AGENTS=172.30.41.8\n

          \u6dfb\u52a0\u65b0\u7684 server \u8282\u70b9\u5982\u4e0b\uff1a

          < export K3S_SERVERS=172.30.41.5,172.30.41.6,172.30.41.7\n---\n> export K3S_SERVERS=172.30.41.5,172.30.41.6,172.30.41.7,172.30.41.8,172.30.41.9\n
        2. \u6267\u884c\u6269\u5bb9\u64cd\u4f5c\uff08\u4ee5\u6dfb\u52a0 agent \u8282\u70b9\u4e3a\u4f8b\uff09

          $ bash k3slcm\n* Copying ./v1.30.3/k3s-airgap-images-amd64.tar.zst to 172.30.41.5\n* Copying ./v1.30.3/k3s to 172.30.41.5\n* Copying ./v1.30.3/k3s-install.sh to 172.30.41.5\n* Copying ./v1.30.3/k3s-airgap-images-amd64.tar.zst to 172.30.41.6\n* Copying ./v1.30.3/k3s to 172.30.41.6\n* Copying ./v1.30.3/k3s-install.sh to 172.30.41.6\n* Copying ./v1.30.3/k3s-airgap-images-amd64.tar.zst to 172.30.41.7\n* Copying ./v1.30.3/k3s to 172.30.41.7\n* Copying ./v1.30.3/k3s-install.sh to 172.30.41.7\n* Copying ./v1.30.3/k3s-airgap-images-amd64.tar.zst to 172.30.41.8\n* Copying ./v1.30.3/k3s to 172.30.41.8\n* Copying ./v1.30.3/k3s-install.sh to 172.30.41.8\n* Installing on first server node [172.30.41.5]\n[INFO]  Skipping k3s download and verify\n[INFO]  Skipping installation of SELinux RPM\n[INFO]  Skipping /usr/local/bin/kubectl symlink to k3s, already exists\n[INFO]  Skipping /usr/local/bin/crictl symlink to k3s, already exists\n[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, already exists\n[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh\n[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh\n[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env\n[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service\n[INFO]  systemd: Enabling k3s unit\nCreated symlink /etc/systemd/system/multi-user.target.wants/k3s.service \u2192 /etc/systemd/system/k3s.service.\n[INFO]  No change detected so skipping service start\n......\n* Installing on agent node [172.30.41.8]\n[INFO]  Skipping k3s download and verify\n[INFO]  Skipping installation of SELinux RPM\n[INFO]  Creating /usr/local/bin/kubectl symlink to k3s\n[INFO]  Creating /usr/local/bin/crictl symlink to k3s\n[INFO]  Creating /usr/local/bin/ctr symlink to k3s\n[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh\n[INFO]  Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh\n[INFO]  env: Creating environment file /etc/systemd/system/k3s-agent.service.env\n[INFO]  systemd: Creating service file /etc/systemd/system/k3s-agent.service\n[INFO]  systemd: Enabling k3s-agent unit\nCreated symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service \u2192 /etc/systemd/system/k3s-agent.service.\n[INFO]  systemd: Starting k3s-agent\n
        3. \u68c0\u67e5\u96c6\u7fa4\u72b6\u6001

          $ kubectl get node -owide\nNAME      STATUS   ROLES                       AGE   VERSION        INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME\nagent1    Ready    <none>                      57s   v1.30.3+k3s1   172.30.41.8   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\nserver1   Ready    control-plane,etcd,master   12m   v1.30.3+k3s1   172.30.41.5   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\nserver2   Ready    control-plane,etcd,master   11m   v1.30.3+k3s1   172.30.41.6   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\nserver3   Ready    control-plane,etcd,master   11m   v1.30.3+k3s1   172.30.41.7   <none>        Ubuntu 22.04.3 LTS   5.15.0-78-generic   containerd://1.7.17-k3s1\n
        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html#_7","title":"\u7f29\u5bb9\u96c6\u7fa4","text":"
        1. \u4ec5\u5728\u5f85\u5220\u9664\u8282\u70b9\u6267\u884c k3s-uninstall.sh \u6216 k3s-agent-uninstall.sh
        2. \u5728\u4efb\u610f server \u8282\u70b9\u4e0a\u6267\u884c\uff1a

          kubectl delete node <\u8282\u70b9\u540d\u79f0>\n
        "},{"location":"admin/kpanda/best-practice/k3s-lcm.html#_8","title":"\u5378\u8f7d\u96c6\u7fa4","text":"
        1. \u5728\u6240\u6709 server \u8282\u70b9\u624b\u52a8\u6267\u884c k3s-uninstall.sh
        2. \u5728\u6240\u6709 agent \u8282\u70b9\u624b\u52a8\u6267\u884c k3s-agent-uninstall.sh
        "},{"location":"admin/kpanda/best-practice/kubean-low-version.html","title":"\u79bb\u7ebf\u573a\u666f Kubean \u5411\u4e0b\u517c\u5bb9\u7248\u672c\u7684\u90e8\u7f72\u4e0e\u5347\u7ea7\u64cd\u4f5c","text":"

        \u4e3a\u4e86\u6ee1\u8db3\u5ba2\u6237\u5bf9\u4f4e\u7248\u672c\u7684 K8s \u96c6\u7fa4\u7684\u642d\u5efa\uff0cKubean \u63d0\u4f9b\u4e86\u5411\u4e0b\u517c\u5bb9\u5e76\u521b\u5efa\u4f4e\u7248\u672c\u7684 K8s \u96c6\u7fa4\u80fd\u529b\uff0c\u7b80\u79f0\u5411\u4e0b\u517c\u5bb9\u7248\u672c\u7684\u80fd\u529b\u3002

        \u76ee\u524d\u652f\u6301\u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7248\u672c\u8303\u56f4\u5728 v1.26-v1.28\uff0c\u53ef\u4ee5\u53c2\u9605 AI \u7b97\u529b\u4e2d\u5fc3\u96c6\u7fa4\u7248\u672c\u652f\u6301\u4f53\u7cfb\u3002

        \u672c\u6587\u5c06\u6f14\u793a\u5982\u4f55\u90e8\u7f72\u4f4e\u7248\u672c\u7684 K8s \u96c6\u7fa4\u3002

        Note

        \u672c\u6587\u6f14\u793a\u7684\u8282\u70b9\u73af\u5883\u4e3a\uff1a

        • X86 \u67b6\u6784
        • CentOS 7 Linux \u53d1\u884c\u7248
        "},{"location":"admin/kpanda/best-practice/kubean-low-version.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u51c6\u5907\u4e00\u4e2a Kubean \u6240\u5728\u7684\u7ba1\u7406\u96c6\u7fa4\uff0c\u5e76\u4e14\u5f53\u524d\u73af\u5883\u5df2\u7ecf\u90e8\u7f72\u652f\u6301 podman \u3001skopeo\u3001minio client \u547d\u4ee4\u3002 \u5982\u679c\u4e0d\u652f\u6301\uff0c\u53ef\u901a\u8fc7\u811a\u672c\u8fdb\u884c\u5b89\u88c5\u4f9d\u8d56\u7ec4\u4ef6\uff0c\u5b89\u88c5\u524d\u7f6e\u4f9d\u8d56\u3002

        • \u524d\u5f80 kubean \u67e5\u770b\u53d1\u5e03\u7684\u5236\u54c1\uff0c \u5e76\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u9009\u62e9\u5177\u4f53\u7684\u5236\u54c1\u7248\u672c\u3002\u76ee\u524d\u652f\u6301\u7684\u5236\u54c1\u7248\u672c\u53ca\u5bf9\u5e94\u7684\u96c6\u7fa4\u7248\u672c\u8303\u56f4\u5982\u4e0b\uff1a

          \u5236\u54c1\u5305\u7248\u672c \u652f\u6301\u96c6\u7fa4\u8303\u56f4 AI \u7b97\u529b\u4e2d\u5fc3\u652f\u6301\u60c5\u51b5 release-2.21 v1.23.0 ~ v1.25.6 \u5b89\u88c5\u5668 v0.14.0+ \u5df2\u652f\u6301 release-2.22 v1.24.0 ~ v1.26.13 \u5b89\u88c5\u5668 v0.15.0+ \u5df2\u652f\u6301 release-2.23 v1.25.0 ~ v1.27.10 \u5b89\u88c5\u5668 v0.16.0+ \u5df2\u652f\u6301 release-2.24 v1.26.0 ~ v1.29.1 \u5b89\u88c5\u5668 v0.17.0+ \u5df2\u652f\u6301 release-2.25 v1.27.0 ~ v1.29.5 \u5b89\u88c5\u5668 v0.20.0+ \u5df2\u652f\u6301

        Tip

        \u5728\u9009\u62e9\u5236\u54c1\u7248\u672c\u65f6\uff0c\u4e0d\u4ec5\u9700\u8981\u53c2\u8003\u96c6\u7fa4\u7248\u672c\u8303\u56f4\uff0c\u8fd8\u9700\u5224\u65ad\u8be5\u5236\u54c1 manifest \u8d44\u6e90\u4e2d\u76f8\u5e94\u7ec4\u4ef6(\u5982 calico\u3001containerd)\u7248\u672c\u8303\u56f4\u662f\u5426\u8986\u76d6\u5f53\u524d\u96c6\u7fa4\u8be5\u7ec4\u4ef6\u7248\u672c\uff01

        \u672c\u6587\u6f14\u793a\u79bb\u7ebf\u90e8\u7f72 K8s \u96c6\u7fa4\u5230 1.23.0 \u7248\u672c\u53ca\u79bb\u7ebf\u5347\u7ea7 K8s \u96c6\u7fa4\u4ece 1.23.0 \u7248\u672c\u5230 1.24.0 \u7248\u672c\uff0c\u6240\u4ee5\u9009\u62e9 release-2.21 \u7684\u5236\u54c1\u3002

        "},{"location":"admin/kpanda/best-practice/kubean-low-version.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/best-practice/kubean-low-version.html#kubespray-release","title":"\u51c6\u5907 Kubespray Release \u4f4e\u7248\u672c\u7684\u76f8\u5173\u5236\u54c1","text":"

        \u5c06 spray-job \u955c\u50cf\u5bfc\u5165\u5230\u79bb\u7ebf\u73af\u5883\u7684 Registry\uff08\u955c\u50cf\u4ed3\u5e93\uff09\u4e2d\u3002

        # \u5047\u8bbe\u706b\u79cd\u96c6\u7fa4\u4e2d\u7684 registry \u5730\u5740\u4e3a 172.30.41.200\nREGISTRY_ADDR=\"172.30.41.200\"\n\n# \u955c\u50cf spray-job \u8fd9\u91cc\u53ef\u4ee5\u91c7\u7528\u52a0\u901f\u5668\u5730\u5740\uff0c\u955c\u50cf\u5730\u5740\u6839\u636e\u9009\u62e9\u5236\u54c1\u7248\u672c\u6765\u51b3\u5b9a\nSPRAY_IMG_ADDR=\"ghcr.m.daocloud.io/kubean-io/spray-job:2.21-d6f688f\"\n\n# skopeo \u53c2\u6570\nSKOPEO_PARAMS=\" --insecure-policy -a --dest-tls-verify=false --retry-times=3 \"\n\n# \u5728\u7ebf\u73af\u5883\uff1a\u5bfc\u51fa release-2.21 \u7248\u672c\u7684 spray-job \u955c\u50cf\uff0c\u5e76\u5c06\u5176\u8f6c\u79fb\u5230\u79bb\u7ebf\u73af\u5883\nskopeo copy docker://${SPRAY_IMG_ADDR} docker-archive:spray-job-2.21.tar\n\n# \u79bb\u7ebf\u73af\u5883\uff1a\u5bfc\u5165 release-2.21 \u7248\u672c\u7684 spray-job \u955c\u50cf\u5230\u706b\u79cd registry\nskopeo copy ${SKOPEO_PARAMS} docker-archive:spray-job-2.21.tar docker://${REGISTRY_ADDR}/${SPRAY_IMG_ADDR/.m.daocloud/}\n
        "},{"location":"admin/kpanda/best-practice/kubean-low-version.html#k8s","title":"\u5236\u4f5c\u4f4e\u7248\u672c K8s \u79bb\u7ebf\u8d44\u6e90","text":"
        1. \u51c6\u5907 manifest.yml \u6587\u4ef6\u3002

          cat > \"manifest.yml\" <<EOF\nimage_arch:\n  - \"amd64\" ## \"arm64\"\nkube_version: ## \u6839\u636e\u5b9e\u9645\u573a\u666f\u586b\u5199\u96c6\u7fa4\u7248\u672c\n  - \"v1.23.0\"\n  - \"v1.24.0\"\nEOF\n
        2. \u5236\u4f5c\u79bb\u7ebf\u589e\u91cf\u5305\u3002

          # \u521b\u5efa data \u76ee\u5f55\nmkdir data\n# \u5236\u4f5c\u79bb\u7ebf\u5305\uff0c\nAIRGAP_IMG_ADDR=\"ghcr.m.daocloud.io/kubean-io/airgap-patch:2.21-d6f688f\" # (1)!\npodman run --rm -v $(pwd)/manifest.yml:/manifest.yml -v $(pwd)/data:/data -e ZONE=CN -e MODE=FULL ${AIRGAP_IMG_ADDR}\n
          1. \u955c\u50cf spray-job \u8fd9\u91cc\u53ef\u4ee5\u91c7\u7528\u52a0\u901f\u5668\u5730\u5740\uff0c\u955c\u50cf\u5730\u5740\u6839\u636e\u9009\u62e9\u5236\u54c1\u7248\u672c\u6765\u51b3\u5b9a
        3. \u5bfc\u5165\u5bf9\u5e94 k8s \u7248\u672c\u7684\u79bb\u7ebf\u955c\u50cf\u4e0e\u4e8c\u8fdb\u5236\u5305

          # \u5c06\u4e0a\u4e00\u6b65 data \u76ee\u5f55\u4e2d\u7684\u4e8c\u8fdb\u5236\u5bfc\u5165\u4e8c\u8fdb\u5236\u5305\u81f3\u706b\u79cd\u8282\u70b9\u7684 MinIO \u4e2d\ncd ./data/amd64/files/\nMINIO_ADDR=\"http://127.0.0.1:9000\" # (1)!\nMINIO_USER=rootuser MINIO_PASS=rootpass123 ./import_files.sh ${MINIO_ADDR}\n\n# \u5c06\u4e0a\u4e00\u6b65 data \u76ee\u5f55\u4e2d\u7684\u955c\u50cf\u5bfc\u5165\u4e8c\u8fdb\u5236\u5305\u81f3\u706b\u79cd\u8282\u70b9\u7684\u955c\u50cf\u4ed3\u5e93\u4e2d\ncd ./data/amd64/images/\nREGISTRY_ADDR=\"127.0.0.1\"  ./import_images.sh # (2)!\n
          1. IP \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u4ed3\u5e93\u5730\u5740
          2. IP \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u4ed3\u5e93\u5730\u5740
        4. \u5c06 manifest\u3001localartifactset.cr.yaml \u81ea\u5b9a\u4e49\u8d44\u6e90\u90e8\u7f72\u5230 Kubean \u6240\u5728\u7684\u7ba1\u7406\u96c6\u7fa4\u6216\u8005\u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u5f53\u4e2d\uff0c\u672c\u4f8b\u4f7f\u7528\u7684\u662f\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u3002

          # \u90e8\u7f72 data \u6587\u4ef6\u76ee\u5f55\u4e0b\u7684 localArtifactSet \u8d44\u6e90\ncd ./data\nkubectl apply -f localartifactset.cr.yaml\n\n# \u4e0b\u8f7d release-2.21 \u7248\u672c\u7684 manifest \u8d44\u6e90\nwget https://raw.githubusercontent.com/kubean-io/kubean-manifest/main/manifests/manifest-2.21-d6f688f.yml\n\n# \u90e8\u7f72 release-2.21 \u5bf9\u5e94\u7684 manifest \u8d44\u6e90\nkubectl apply -f manifest-2.21-d6f688f.yml\n
        "},{"location":"admin/kpanda/best-practice/kubean-low-version.html#k8s_1","title":"\u90e8\u7f72\u548c\u5347\u7ea7 K8s \u96c6\u7fa4\u517c\u5bb9\u7248\u672c","text":""},{"location":"admin/kpanda/best-practice/kubean-low-version.html#_3","title":"\u90e8\u7f72","text":"
        1. \u524d\u5f80 \u5bb9\u5668\u7ba1\u7406 \uff0c\u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u4e2d\uff0c\u70b9\u51fb \u521b\u5efa\u96c6\u7fa4 \u6309\u94ae\u3002

        2. \u88ab\u7eb3\u7ba1\u53c2\u6570\u9009\u62e9 manifest\u3001localartifactset.cr.yaml \u81ea\u5b9a\u4e49\u8d44\u6e90\u90e8\u7f72\u7684\u96c6\u7fa4\uff0c\u672c\u4f8b\u4f7f\u7528\u7684\u662f\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u3002

        3. \u5176\u4f59\u53c2\u6570\u53c2\u8003\u521b\u5efa\u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/kubean-low-version.html#_4","title":"\u5347\u7ea7","text":"
        1. \u9009\u62e9\u65b0\u521b\u5efa\u7684\u96c6\u7fa4\uff0c\u8fdb\u53bb\u8be6\u60c5\u754c\u9762\u3002

        2. \u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u5347\u7ea7 \uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u70b9\u51fb \u7248\u672c\u5347\u7ea7 \u3002

        3. \u9009\u62e9\u53ef\u7528\u7684\u96c6\u7fa4\u8fdb\u884c\u5347\u7ea7\u3002

        "},{"location":"admin/kpanda/best-practice/limit-disk-usage-docker.html","title":"\u9650\u5236 Docker \u5355\u5bb9\u5668\u53ef\u5360\u7528\u7684\u78c1\u76d8\u7a7a\u95f4","text":"

        Docker \u5728 17.07.0-ce \u7248\u672c\u4e2d\u5f15\u5165 overlay2.zize\uff0c\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 overlay2.zize \u6765\u9650\u5236 docker \u5355\u5bb9\u5668\u53ef\u5360\u7528\u7684\u78c1\u76d8\u7a7a\u95f4\u3002

        "},{"location":"admin/kpanda/best-practice/limit-disk-usage-docker.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

        \u5728\u914d\u7f6e docker overlay2.size \u4e4b\u524d\uff0c\u9700\u8981\u8c03\u6574\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6587\u4ef6\u7cfb\u7edf\u7c7b\u578b\u4e3a xfs \u5e76\u4f7f\u7528 pquota \u65b9\u5f0f\u8fdb\u884c\u8bbe\u5907\u6302\u8f7d\u3002

        \u683c\u5f0f\u5316\u8bbe\u5907\u4e3a XFS \u6587\u4ef6\u7cfb\u7edf\uff0c\u53ef\u4ee5\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

        mkfs.xfs -f /dev/xxx\n

        Note

        pquota \u9650\u5236\u7684\u662f\u9879\u76ee\uff08project\uff09\u78c1\u76d8\u914d\u989d\u3002

        "},{"location":"admin/kpanda/best-practice/limit-disk-usage-docker.html#_2","title":"\u8bbe\u7f6e\u5355\u5bb9\u5668\u78c1\u76d8\u53ef\u5360\u7528\u7a7a\u95f4","text":"

        \u6ee1\u8db3\u4ee5\u4e0a\u6761\u4ef6\u540e\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e docker overlay2.size \u6765\u9650\u5236\u5355\u5bb9\u5668\u78c1\u76d8\u5360\u7528\u7a7a\u95f4\u5927\u5c0f\u3002\u547d\u4ee4\u884c\u793a\u4f8b\u5982\u4e0b\uff1a

        sudo dockerd -s overlay2 --storage-opt overlay2.size=1G\n
        "},{"location":"admin/kpanda/best-practice/limit-disk-usage-docker.html#_3","title":"\u573a\u666f\u6f14\u7ec3","text":"

        \u63a5\u4e0b\u6765\u4ee5\u4e00\u4e2a\u5b9e\u9645\u7684\u4f8b\u5b50\u6765\u6f14\u7ec3\u4e00\u4e0b\u9650\u5236 docker \u5355\u5bb9\u5668\u53ef\u5360\u7528\u7684\u78c1\u76d8\u7a7a\u95f4\u6574\u4f53\u5b9e\u73b0\u6d41\u7a0b\u3002

        "},{"location":"admin/kpanda/best-practice/limit-disk-usage-docker.html#_4","title":"\u76ee\u6807","text":"

        \u90e8\u7f72\u4e00\u4e2a Kubernetes \u96c6\u7fa4\uff0c\u5e76\u9650\u5236 docker \u5355\u5bb9\u5668\u53ef\u5360\u7528\u7684\u78c1\u76d8\u7a7a\u95f4\u5927\u5c0f\u4e3a1G\uff0c\u8d85\u51fa1G\u5c06\u65e0\u6cd5\u4f7f\u7528\u3002

        "},{"location":"admin/kpanda/best-practice/limit-disk-usage-docker.html#_5","title":"\u64cd\u4f5c\u6d41\u7a0b","text":"
        1. \u767b\u5f55\u76ee\u6807\u8282\u70b9\uff0c\u67e5\u770b fstab \u6587\u4ef6\uff0c\u83b7\u53d6\u5f53\u524d\u8bbe\u5907\u7684\u6302\u8f7d\u60c5\u51b5\u3002

          $ cat /etc/fstab\n\n# /etc/fstab\n# Created by anaconda on Thu Mar 19 11:32:59 2020\n#\n# Accessible filesystems, by reference, are maintained under '/dev/disk'\n# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info\n#\n/dev/mapper/centos-root /                       xfs     defaults        0 0\nUUID=3ed01f0e-67a1-4083-943a-343b7fed1708 /boot                   xfs     defaults        0 0\n/dev/mapper/centos-swap swap                    swap    defaults        0 0\n

          \u4ee5\u56fe\u793a\u8282\u70b9\u8bbe\u5907\u4e3a\u4f8b\uff0c\u53ef\u4ee5\u770b\u5230 XFS \u683c\u5f0f\u8bbe\u5907 /dev/mapper/centos-root \u4ee5\u9ed8\u8ba4\u65b9\u5f0f defauls \u6302\u8f7d\u5230 / \u6839\u76ee\u5f55.

        2. \u914d\u7f6e xfs \u6587\u4ef6\u7cfb\u7edf\u4f7f\u7528 pquota \u65b9\u5f0f\u6302\u8f7d\u3002

          1. \u4fee\u6539 fstab \u6587\u4ef6\uff0c\u5c06\u6302\u8f7d\u65b9\u5f0f\u4ece defaults \u66f4\u65b0\u4e3a rw,pquota\uff1b

            # \u4fee\u6539 fstab \u914d\u7f6e\n$ vi /etc/fstab\n- /dev/mapper/centos-root /                       xfs     defaults         0 0\n+ /dev/mapper/centos-root /                       xfs     rw,pquota        0 0\n\n# \u9a8c\u8bc1\u914d\u7f6e\u662f\u5426\u6709\u8bef\n$ mount -a\n
          2. \u67e5\u770b pquota \u662f\u5426\u751f\u6548

            xfs_quota -x -c print\n

          Note

          \u5982\u679c pquota \u672a\u751f\u6548\uff0c\u8bf7\u68c0\u67e5\u64cd\u4f5c\u7cfb\u7edf\u662f\u5426\u5f00\u542f pquota \u9009\u9879\uff0c\u5982\u679c\u672a\u5f00\u542f\uff0c\u9700\u8981\u5728\u7cfb\u7edf\u5f15\u5bfc\u914d\u7f6e /etc/grub2.cfg \u4e2d\u6dfb\u52a0 rootflags=pquota \u53c2\u6570\uff0c\u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u9700\u8981 reboot \u91cd\u542f\u64cd\u4f5c\u7cfb\u7edf\u3002

        3. \u521b\u5efa\u96c6\u7fa4 -> \u9ad8\u7ea7\u914d\u7f6e -> \u81ea\u5b9a\u4e49\u53c2\u6570 \u4e2d\u6dfb\u52a0 docker_storage_options \u53c2\u6570\uff0c\u8bbe\u7f6e\u5355\u5bb9\u5668\u78c1\u76d8\u53ef\u5360\u7528\u7a7a\u95f4\u3002

          Note

          \u4e5f\u53ef\u4ee5\u57fa\u4e8e kubean manifest \u64cd\u4f5c\uff0c\u5728 vars conf \u91cc\u6dfb\u52a0 docker_storage_options \u53c2\u6570\u3002

          apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: sample-vars-conf\n  namespace: kubean-system\ndata:\n  group_vars.yml: |\n    unsafe_show_logs: true\n    container_manager: docker\n+   docker_storage_options: -s overlay2 --storage-opt overlay2.size=1G  # \u65b0\u589e docker_storage_options \u53c2\u6570\n    kube_network_plugin: calico\n    kube_network_plugin_multus: false\n    kube_proxy_mode: iptables\n    etcd_deployment_type: kubeadm\n    override_system_hostname: true\n    ...\n
        4. \u67e5\u770b dockerd \u670d\u52a1\u8fd0\u884c\u914d\u7f6e\uff0c\u68c0\u67e5\u78c1\u76d8\u9650\u5236\u662f\u5426\u8bbe\u7f6e\u6210\u529f\u3002

        \u4ee5\u4e0a\uff0c\u5b8c\u6210\u9650\u5236 docker \u5355\u5bb9\u5668\u53ef\u5360\u7528\u7684\u78c1\u76d8\u7a7a\u95f4\u6574\u4f53\u5b9e\u73b0\u6d41\u7a0b\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html","title":"\u4e3a\u5de5\u4f5c\u96c6\u7fa4\u6dfb\u52a0\u5f02\u6784\u8282\u70b9","text":"

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4e3a AMD \u67b6\u6784\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a CentOS 7.9 \u7684\u5de5\u4f5c\u96c6\u7fa4\u6dfb\u52a0 ARM \u67b6\u6784\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a Kylin v10 sp2 \u7684\u5de5\u4f5c\u8282\u70b9

        Note

        \u672c\u6587\u4ec5\u9488\u5bf9\u79bb\u7ebf\u6a21\u5f0f\u4e0b\uff0c\u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u6240\u521b\u5efa\u7684\u5de5\u4f5c\u96c6\u7fa4\u8fdb\u884c\u5f02\u6784\u8282\u70b9\u7684\u6dfb\u52a0\uff0c\u4e0d\u5305\u62ec\u63a5\u5165\u7684\u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u90e8\u7f72\u597d\u4e00\u4e2a AI \u7b97\u529b\u4e2d\u5fc3\u5168\u6a21\u5f0f\uff0c\u5e76\u4e14\u706b\u79cd\u8282\u70b9\u8fd8\u5b58\u6d3b\uff0c\u90e8\u7f72\u53c2\u8003\u6587\u6863\u79bb\u7ebf\u5b89\u88c5 AI \u7b97\u529b\u4e2d\u5fc3\u5546\u4e1a\u7248
        • \u5df2\u7ecf\u901a\u8fc7 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u521b\u5efa\u597d\u4e00\u4e2a AMD \u67b6\u6784\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a CentOS 7.9 \u7684\u5de5\u4f5c\u96c6\u7fa4\uff0c\u521b\u5efa\u53c2\u8003\u6587\u6863\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4
        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/best-practice/multi-arch.html#_4","title":"\u4e0b\u8f7d\u5e76\u5bfc\u5165\u79bb\u7ebf\u5305","text":"

        \u4ee5 ARM \u67b6\u6784\u3001\u64cd\u4f5c\u7cfb\u7edf Kylin v10 sp2 \u4e3a\u4f8b\u3002

        \u8bf7\u786e\u4fdd\u5df2\u7ecf\u767b\u5f55\u5230\u706b\u79cd\u8282\u70b9\uff01\u5e76\u4e14\u4e4b\u524d\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u65f6\u4f7f\u7528\u7684 clusterConfig.yaml \u6587\u4ef6\u8fd8\u5728\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_5","title":"\u79bb\u7ebf\u955c\u50cf\u5305","text":"

        Note

        \u53ef\u4ee5\u5728\u4e0b\u8f7d\u4e2d\u5fc3\u4e0b\u8f7d\u6700\u65b0\u7248\u672c\u3002\u8bf7\u786e\u4fdd\u5728\u5bb9\u5668\u7ba1\u7406 v0.31 \u53ca\u4ee5\u4e0a\u7248\u672c\u4f7f\u7528\u8be5\u80fd\u529b\uff0c\u5bf9\u5e94\u5b89\u88c5\u5668 v0.21.0 \u53ca\u4ee5\u4e0a\u7248\u672c

        CPU \u67b6\u6784 \u7248\u672c \u4e0b\u8f7d\u5730\u5740 AMD64 v0.21.0 https://qiniu-download-public.daocloud.io/DaoCloud_Enterprise/dce5/offline-v0.21.0-amd64.tar ARM64 v0.21.0 https://qiniu-download-public.daocloud.io/DaoCloud_Enterprise/dce5/offline-v0.21.0-arm64.tar

        \u4e0b\u8f7d\u5b8c\u6bd5\u540e\u89e3\u538b\u79bb\u7ebf\u5305\u3002\u6b64\u5904\u6211\u4eec\u4e0b\u8f7d arm64 \u67b6\u6784\u7684\u79bb\u7ebf\u5305\uff1a

        tar -xvf offline-v0.21.0-arm64.tar\n
        "},{"location":"admin/kpanda/best-practice/multi-arch.html#iso-kylin-v10-sp2","title":"ISO \u79bb\u7ebf\u5305\uff08Kylin v10 sp2\uff09","text":"CPU \u67b6\u6784 \u64cd\u4f5c\u7cfb\u7edf\u7248\u672c \u4e0b\u8f7d\u5730\u5740 ARM64 Kylin Linux Advanced Server release V10 (Sword) SP2 \u7533\u8bf7\u5730\u5740\uff1ahttps://www.kylinos.cn/support/trial.html

        Note

        \u9e92\u9e9f\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u63d0\u4f9b\u4e2a\u4eba\u4fe1\u606f\u624d\u80fd\u4e0b\u8f7d\u4f7f\u7528\uff0c\u4e0b\u8f7d\u65f6\u8bf7\u9009\u62e9 V10 (Sword) SP2\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#ospackage-kylin-v10-sp2","title":"osPackage \u79bb\u7ebf\u5305 \uff08Kylin v10 sp2\uff09","text":"

        \u5176\u4e2d Kubean \u63d0\u4f9b\u4e86\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u7684osPackage \u79bb\u7ebf\u5305\uff0c\u53ef\u4ee5\u524d\u5f80 https://github.com/kubean-io/kubean/releases \u67e5\u770b\u3002

        \u64cd\u4f5c\u7cfb\u7edf\u7248\u672c \u4e0b\u8f7d\u5730\u5740 Kylin Linux Advanced Server release V10 (Sword) SP2 https://github.com/kubean-io/kubean/releases/download/v0.18.5/os-pkgs-kylin-v10sp2-v0.18.5.tar.gz

        Note

        osPackage \u79bb\u7ebf\u5305\u7684\u5177\u4f53\u5bf9\u5e94\u7248\u672c\u8bf7\u67e5\u770b\u79bb\u7ebf\u955c\u50cf\u5305\u4e2d offline/sample/clusterConfig.yaml \u4e2d\u5bf9\u5e94\u7684 kubean \u7248\u672c

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_6","title":"\u5bfc\u5165\u79bb\u7ebf\u5305\u81f3\u706b\u79cd\u8282\u70b9","text":"

        \u6267\u884c import-artifact \u547d\u4ee4\uff1a

        ./offline/dce5-installer import-artifact -c clusterConfig.yaml \\\n    --offline-path=/root/offline \\\n    --iso-path=/root/Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso \\\n    --os-pkgs-path=/root/os-pkgs-kylin-v10sp2-v0.18.5.tar.gz\n

        Note

        \u53c2\u6570\u8bf4\u660e\uff1a

        • -c clusterConfig.yaml \u6307\u5b9a\u4e4b\u524d\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3.0 \u65f6\u4f7f\u7528\u7684 clusterConfig.yaml \u6587\u4ef6
        • --offline-path \u6307\u5b9a\u4e0b\u8f7d\u7684\u79bb\u7ebf\u955c\u50cf\u5305\u6587\u4ef6\u5730\u5740
        • --iso-path \u6307\u5b9a\u4e0b\u8f7d\u7684 ISO \u64cd\u4f5c\u7cfb\u7edf\u955c\u50cf\u6587\u4ef6\u5730\u5740
        • --os-pkgs-path \u6307\u5b9a\u4e0b\u8f7d\u7684 osPackage \u79bb\u7ebf\u5305\u6587\u4ef6\u5730\u5740

        \u5bfc\u5165\u547d\u4ee4\u6267\u884c\u6210\u529f\u540e\uff0c\u4f1a\u5c06\u79bb\u7ebf\u5305\u4e0a\u4f20\u5230\u706b\u79cd\u8282\u70b9\u7684 Minio \u4e2d\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_7","title":"\u6dfb\u52a0\u5f02\u6784\u5de5\u4f5c\u8282\u70b9","text":"

        \u8bf7\u786e\u4fdd\u5df2\u7ecf\u767b\u5f55\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u7ba1\u7406\u96c6\u7fa4\u7684\u7ba1\u7406\u8282\u70b9\u4e0a\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_8","title":"\u4fee\u6539\u4e3b\u673a\u6e05\u5355\u6587\u4ef6","text":"

        \u4e3b\u673a\u6e05\u5355\u6587\u4ef6\u793a\u4f8b\uff1a

        \u65b0\u589e\u8282\u70b9\u524d\u65b0\u589e\u8282\u70b9\u540e
        apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: ${cluster-name}-hosts-conf\n  namespace: kubean-system\ndata:\n  hosts.yml: |\n    all:\n      children:\n        etcd:\n          hosts:\n            centos-master:\n        k8s_cluster:\n          children:\n            kube_control_plane:\n            kube_node:\n        kube_control_plane:\n          hosts:\n            centos-master:\n        kube_node:\n          hosts:\n            centos-master:\n    hosts:\n      centos-master:\n        ip: 10.5.10.183\n        access_ip: 10.5.10.183\n        ansible_host: 10.5.10.183\n        ansible_connection: ssh\n        ansible_user: root\n        ansible_ssh_pass: ******\n        ansible_password: ******\n        ansible_become_password: ******\n
        apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: ${cluster-name}-hosts-conf\n  namespace: kubean-system\ndata:\n  hosts.yml: |\n    all:\n      hosts:\n        centos-master:\n          ip: 10.5.10.183\n          access_ip: 10.5.10.183\n          ansible_host: 10.5.10.183\n          ansible_connection: ssh\n          ansible_user: root\n          ansible_ssh_pass: ******\n          ansible_password: ******\n          ansible_become_password: ******\n          # \u6dfb\u52a0\u5f02\u6784\u8282\u70b9\u4fe1\u606f\n        kylin-worker:\n          ip: 10.5.10.181\n          access_ip: 10.5.10.181\n          ansible_host: 10.5.10.181\n          ansible_connection: ssh\n          ansible_user: root\n          ansible_ssh_pass: ******\n          ansible_password: ******\n          ansible_become_password: ******\n        children:\n          kube_control_plane:\n            hosts:\n              - centos-master\n          kube_node:\n            hosts:\n              - centos-master\n              - kylin-worker  # \u6dfb\u52a0\u65b0\u589e\u7684\u5f02\u6784\u8282\u70b9\u540d\u79f0\n          etcd:\n            hosts:\n              - centos-master\n          k8s_cluster:\n            children:\n              - kube_control_plane\n              - kube_node\n

        \u6309\u7167\u4e0a\u8ff0\u7684\u914d\u7f6e\u6ce8\u91ca\uff0c\u6dfb\u52a0\u65b0\u589e\u7684\u5de5\u4f5c\u8282\u70b9\u4fe1\u606f\u3002

        kubectl edit cm ${cluster-name}-hosts-conf -n kubean-system\n

        cluster-name \u4e3a\u5de5\u4f5c\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u521b\u5efa\u96c6\u7fa4\u65f6\u4f1a\u9ed8\u8ba4\u751f\u6210\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#clusteroperationyml","title":"\u901a\u8fc7 ClusterOperation.yml \u65b0\u589e\u6269\u5bb9\u4efb\u52a1","text":"

        \u793a\u4f8b\uff1a

        ClusterOperation.yml
        apiVersion: kubean.io/v1alpha1\nkind: ClusterOperation\nmetadata:\n  name: add-worker-node\nspec:\n  cluster: ${cluster-name} # \u6307\u5b9a cluster name\n  image: 10.5.14.30/ghcr.m.daocloud.io/kubean-io/spray-job:v0.18.5\n  actionType: playbook\n  action: scale.yml\n  extraArgs: --limit=kylin-worker\n  preHook:\n    - actionType: playbook\n      action: ping.yml\n    - actionType: playbook\n      action: disable-firewalld.yml\n    - actionType: playbook\n      action: enable-repo.yml\n      extraArgs: |\n        -e \"{repo_list: [\"http://10.5.14.30:9000/kubean/kylin-iso/\\$releasever/sp2/os/\\$basearch\",\"http://10.5.14.30:9000/kubean/kylin/\\$releasever/sp2/os/\\$basearch\"]}\" --limit=kylin-worker\n  postHook:\n    - actionType: playbook\n      action: cluster-info.yml\n

        Note

        • spec.image \u955c\u50cf\u5730\u5740\u8981\u4e0e\u4e4b\u524d\u6267\u884c\u90e8\u7f72\u65f6\u7684 job \u5176\u5185\u955c\u50cf\u4fdd\u6301\u4e00\u81f4
        • spec.action \u8bbe\u7f6e\u4e3a scale.yml
        • spec.extraArgs \u8bbe\u7f6e\u4e3a --limit=g-worker
        • spec.preHook \u4e2d\u7684 enable-repo.yml \u5267\u672c\u53c2\u6570\uff0c\u8981\u586b\u5199\u76f8\u5173OS\u7684\u6b63\u786e\u7684 repo_list

        \u6309\u7167\u4e0a\u8ff0\u7684\u914d\u7f6e\uff0c\u521b\u5efa\u5e76\u90e8\u7f72 join-node-ops.yaml\uff1a

        vi join-node-ops.yaml\nkubectl apply -f join-node-ops.yaml -n kubean-system\n
        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_9","title":"\u68c0\u67e5\u4efb\u52a1\u6267\u884c\u72b6\u6001","text":"
        kubectl -n kubean-system get pod | grep add-worker-node\n

        \u4e86\u89e3\u7f29\u5bb9\u4efb\u52a1\u6267\u884c\u8fdb\u5ea6\uff0c\u53ef\u67e5\u770b\u8be5 Pod \u65e5\u5fd7\u3002

        "},{"location":"admin/kpanda/best-practice/multi-arch.html#_10","title":"\u524d\u5f80\u754c\u9762\u9a8c\u8bc1","text":"
        1. \u524d\u5f80 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4 -> \u8282\u70b9\u7ba1\u7406

        2. \u70b9\u51fb\u65b0\u589e\u7684\u8282\u70b9\uff0c\u67e5\u770b\u8be6\u60c5

        "},{"location":"admin/kpanda/best-practice/replace-first-master-node.html","title":"\u66ff\u6362\u5de5\u4f5c\u96c6\u7fa4\u7684\u9996\u4e2a\u63a7\u5236\u8282\u70b9","text":"

        \u672c\u6587\u5c06\u4ee5\u4e00\u4e2a\u9ad8\u53ef\u7528\u4e09\u63a7\u5236\u8282\u70b9\u7684\u5de5\u4f5c\u96c6\u7fa4\u4e3a\u4f8b\u3002 \u5f53\u5de5\u4f5c\u96c6\u7fa4\u7684\u9996\u4e2a\u63a7\u5236\u8282\u70b9\u6545\u969c\u6216\u5f02\u5e38\u65f6\uff0c\u5982\u4f55\u66ff\u6362\u6216\u91cd\u65b0\u63a5\u5165\u9996\u4e2a\u63a7\u5236\u8282\u70b9\u3002

        \u672c\u6587\u7684\u9ad8\u53ef\u7528\u96c6\u7fa4\u6709 3 \u4e2a Master \u8282\u70b9\uff1a

        • node1 (172.30.41.161)
        • node2 (172.30.41.162)
        • node3 (172.30.41.163)

        \u5047\u8bbe node1 \u5b95\u673a\uff0c\u63a5\u4e0b\u6765\u4ecb\u7ecd\u5982\u4f55\u5c06\u5b95\u673a\u540e\u6062\u590d\u7684 node1 \u91cd\u65b0\u63a5\u5165\u5de5\u4f5c\u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/replace-first-master-node.html#_2","title":"\u51c6\u5907\u5de5\u4f5c","text":"

        \u5728\u6267\u884c\u66ff\u6362\u64cd\u4f5c\u4e4b\u524d\uff0c\u5148\u83b7\u53d6\u96c6\u7fa4\u8d44\u6e90\u57fa\u672c\u4fe1\u606f\uff0c\u4fee\u6539\u76f8\u5173\u914d\u7f6e\u65f6\u4f1a\u7528\u5230\u3002

        Note

        \u4ee5\u4e0b\u83b7\u53d6\u96c6\u7fa4\u8d44\u6e90\u4fe1\u606f\u7684\u547d\u4ee4\u5747\u5728\u7ba1\u7406\u96c6\u7fa4\u4e2d\u6267\u884c\u3002

        1. \u83b7\u53d6\u96c6\u7fa4\u540d\u79f0

          \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u627e\u5230\u96c6\u7fa4\u5bf9\u5e94\u7684 clusters.kubean.io \u8d44\u6e90\uff1a

          # \u6bd4\u5982 clusters.kubean.io \u7684\u8d44\u6e90\u540d\u79f0\u4e3a cluster-mini-1\n# \u5219\u83b7\u53d6\u96c6\u7fa4\u7684\u540d\u79f0\nCLUSTER_NAME=$(kubectl get clusters.kubean.io cluster-mini-1 -o=jsonpath=\"{.metadata.name}{'\\n'}\")\n
        2. \u83b7\u53d6\u96c6\u7fa4\u7684\u4e3b\u673a\u6e05\u5355 configmap

          kubectl get clusters.kubean.io cluster-mini-1 -o=jsonpath=\"{.spec.hostsConfRef}{'\\n'}\"\n{\"name\":\"mini-1-hosts-conf\",\"namespace\":\"kubean-system\"}\n
        3. \u83b7\u53d6\u96c6\u7fa4\u7684\u914d\u7f6e\u53c2\u6570 configmap

          kubectl get clusters.kubean.io cluster-mini-1 -o=jsonpath=\"{.spec.varsConfRef}{'\\n'}\"\n{\"name\":\"mini-1-vars-conf\",\"namespace\":\"kubean-system\"}\n
        "},{"location":"admin/kpanda/best-practice/replace-first-master-node.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
        1. \u8c03\u6574\u63a7\u5236\u5e73\u9762\u8282\u70b9\u987a\u5e8f

          \u91cd\u7f6e node1 \u8282\u70b9\u4f7f\u5176\u6062\u590d\u5230\u5b89\u88c5\u96c6\u7fa4\u4e4b\u524d\u7684\u72b6\u6001\uff08\u6216\u4f7f\u7528\u65b0\u7684\u8282\u70b9\uff09\uff0c\u4fdd\u6301 node1 \u8282\u70b9\u7684\u7f51\u7edc\u8fde\u901a\u6027\u3002

          \u8c03\u6574\u4e3b\u673a\u6e05\u5355\u4e2d node1 \u8282\u70b9\u5728 kube_control_plane \u3001kube_node\u3001etcd \u4e2d\u7684\u987a\u5e8f \uff08node1/node2/node3 -> node2/node3/node1\uff09\uff1a

          function change_control_plane_order() {\n  cat << EOF | kubectl apply -f -\n---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: mini-1-hosts-conf\n  namespace: kubean-system\ndata:\n  hosts.yml: |\n    all:\n      hosts:\n        node1:\n          ip: \"172.30.41.161\"\n          access_ip: \"172.30.41.161\"\n          ansible_host: \"172.30.41.161\"\n          ansible_connection: ssh\n          ansible_user: root\n          ansible_password: dangerous\n        node2:\n          ip: \"172.30.41.162\"\n          access_ip: \"172.30.41.162\"\n          ansible_host: \"172.30.41.162\"\n          ansible_connection: ssh\n          ansible_user: root\n          ansible_password: dangerous\n        node3:\n          ip: \"172.30.41.163\"\n          access_ip: \"172.30.41.163\"\n          ansible_host: \"172.30.41.163\"\n          ansible_connection: ssh\n          ansible_user: root\n          ansible_password: dangerous\n      children:\n        kube_control_plane:\n          hosts:\n            node2:\n            node3:\n            node1:\n        kube_node:\n          hosts:\n            node2:\n            node3:\n            node1:\n        etcd:\n          hosts:\n            node2:\n            node3:\n            node1:\n        k8s_cluster:\n          children:\n            kube_control_plane:\n            kube_node:\n        calico_rr:\n          hosts: {}\nEOF\n}\n\nchange_control_plane_order\n
        2. \u79fb\u9664\u5f02\u5e38\u72b6\u6001\u7684\u9996\u4e2a master \u8282\u70b9

          \u8c03\u6574\u4e3b\u673a\u6e05\u5355\u7684\u8282\u70b9\u987a\u5e8f\u540e\uff0c\u79fb\u9664 K8s \u63a7\u5236\u5e73\u9762\u5f02\u5e38\u72b6\u6001\u7684 node1\u3002

          Note

          \u5982\u679c node1 \u79bb\u7ebf\u6216\u6545\u969c\uff0c\u5219 extraArgs \u987b\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\u9879\uff0cnode1 \u5728\u7ebf\u65f6\u4e0d\u9700\u8981\u6dfb\u52a0\u3002

          reset_nodes=false # \u8df3\u8fc7\u91cd\u7f6e\u8282\u70b9\u64cd\u4f5c\nallow_ungraceful_removal=true # \u5141\u8bb8\u975e\u4f18\u96c5\u7684\u79fb\u9664\u64cd\u4f5c\n
          # \u955c\u50cf spray-job \u8fd9\u91cc\u53ef\u4ee5\u91c7\u7528\u52a0\u901f\u5668\u5730\u5740\n\nSPRAY_IMG_ADDR=\"ghcr.m.daocloud.io/kubean-io/spray-job\"\nSPRAY_RLS_2_22_TAG=\"2.22-336b323\"\nKUBE_VERSION=\"v1.24.14\"\nCLUSTER_NAME=\"cluster-mini-1\"\nREMOVE_NODE_NAME=\"node1\"\n\ncat << EOF | kubectl apply -f -\n---\napiVersion: kubean.io/v1alpha1\nkind: ClusterOperation\nmetadata:\n  name: cluster-mini-1-remove-node-ops\nspec:\n  cluster: ${CLUSTER_NAME}\n  image: ${SPRAY_IMG_ADDR}:${SPRAY_RLS_2_22_TAG}\n  actionType: playbook\n  action: remove-node.yml\n  extraArgs: -e node=${REMOVE_NODE_NAME} -e reset_nodes=false -e allow_ungraceful_removal=true -e kube_version=${KUBE_VERSION}\n  postHook:\n    - actionType: playbook\n      action: cluster-info.yml\nEOF\n
        3. \u624b\u52a8\u4fee\u6539\u96c6\u7fa4\u914d\u7f6e\uff0c\u7f16\u8f91\u66f4\u65b0 cluster-info

          # \u7f16\u8f91 cluster-info\nkubectl -n kube-public edit cm cluster-info\n\n# 1. \u82e5 ca.crt \u8bc1\u4e66\u66f4\u65b0\uff0c\u5219\u9700\u8981\u66f4\u65b0 certificate-authority-data \u5b57\u6bb5\u7684\u5185\u5bb9\n# \u67e5\u770b ca \u8bc1\u4e66\u7684 base64 \u7f16\u7801\uff1a\ncat /etc/kubernetes/ssl/ca.crt | base64 | tr -d '\\n'\n\n# 2. \u9700\u6539 server \u5b57\u6bb5\u7684 IP \u5730\u5740\u4e3a\u65b0 first master IP, \u672c\u6587\u6863\u573a\u666f\u5c06\u4f7f\u7528 node2 \u7684 IP \u5730\u5740 172.30.41.162\n
        4. \u624b\u52a8\u4fee\u6539\u96c6\u7fa4\u914d\u7f6e\uff0c\u7f16\u8f91\u66f4\u65b0 kubeadm-config

          # \u7f16\u8f91 kubeadm-config\nkubectl -n kube-system edit cm kubeadm-config\n\n# \u4fee\u6539 controlPlaneEndpoint \u4e3a\u65b0 first master IP, \u672c\u6587\u6863\u573a\u666f\u5c06\u4f7f\u7528 node2 \u7684 IP \u5730\u5740 172.30.41.162\n
        5. \u91cd\u65b0\u6269\u5bb9 master \u8282\u70b9\u5e76\u66f4\u65b0\u96c6\u7fa4

          Note

          • \u4f7f\u7528 --limit \u9650\u5236\u66f4\u65b0\u64cd\u4f5c\u4ec5\u4f5c\u7528\u4e8e etcd \u548c kube_control_plane \u8282\u70b9\u7ec4\u3002
          • \u5982\u679c\u662f\u79bb\u7ebf\u73af\u5883\uff0cspec.preHook \u9700\u8981\u6dfb\u52a0 enable-repo.yml\uff0c\u5e76\u4e14 extraArgs \u53c2\u6570\u586b\u5199\u76f8\u5173 OS \u7684\u6b63\u786e repo_list\u3002
          • \u6269\u5bb9\u5b8c\u6210\u540e\uff0cnode2 \u53d8\u66f4\u4e3a\u9996\u4e2a master
          cat << EOF | kubectl apply -f -\n---\napiVersion: kubean.io/v1alpha1\nkind: ClusterOperation\nmetadata:\n  name: cluster-mini-1-update-cluster-ops\nspec:\n  cluster: ${CLUSTER_NAME}\n  image: ${SPRAY_IMG_ADDR}:${SPRAY_RLS_2_22_TAG}\n  actionType: playbook\n  action: cluster.yml\n  extraArgs: --limit=etcd,kube_control_plane -e kube_version=${KUBE_VERSION}\n  preHook:\n    - actionType: playbook\n      action: enable-repo.yml  # \u79bb\u7ebf\u73af\u5883\u4e0b\u9700\u8981\u6dfb\u52a0\u6b64 yaml\uff0c\u5e76\u4e14\u8bbe\u7f6e\u6b63\u786e\u7684 repo-list(\u5b89\u88c5\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u5305)\uff0c\u4ee5\u4e0b\u53c2\u6570\u503c\u4ec5\u4f9b\u53c2\u8003\n      extraArgs: |\n        -e \"{repo_list: ['http://172.30.41.0:9000/kubean/centos/\\$releasever/os/\\$basearch','http://172.30.41.0:9000/kubean/centos-iso/\\$releasever/os/\\$basearch']}\"\n  postHook:\n    - actionType: playbook\n      action: cluster-info.yml\nEOF\n

        \u81f3\u6b64\uff0c\u5b8c\u6210\u4e86\u9996\u4e2a Master \u8282\u70b9\u7684\u66ff\u6362\u3002

        "},{"location":"admin/kpanda/best-practice/update-offline-cluster.html","title":"\u5de5\u4f5c\u96c6\u7fa4\u79bb\u7ebf\u90e8\u7f72/\u5347\u7ea7\u6307\u5357","text":"

        Note

        \u672c\u6587\u4ec5\u9488\u5bf9\u79bb\u7ebf\u6a21\u5f0f\u4e0b\uff0c\u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u6240\u521b\u5efa\u7684\u5de5\u4f5c\u96c6\u7fa4\u7684 kubernetes \u7684\u7248\u672c\u8fdb\u884c\u90e8\u7f72\u6216\u5347\u7ea7\uff0c \u4e0d\u5305\u62ec\u5176\u5b83 kubeneters \u7ec4\u4ef6\u7684\u90e8\u7f72\u6216\u5347\u7ea7\u3002

        \u672c\u6587\u9002\u7528\u4ee5\u4e0b\u79bb\u7ebf\u573a\u666f\uff1a

        • \u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u64cd\u4f5c\u6307\u5357\uff0c\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u6240\u521b\u5efa\u7684\u975e\u754c\u9762\u4e2d\u63a8\u8350\u7684 Kubernetes \u7248\u672c\u3002
        • \u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u5236\u4f5c\u589e\u91cf\u79bb\u7ebf\u5305\u7684\u65b9\u5f0f\u5bf9\u4f7f\u7528 AI \u7b97\u529b\u4e2d\u5fc3\u5e73\u53f0\u6240\u521b\u5efa\u7684\u5de5\u4f5c\u96c6\u7fa4\u7684 kubernetes \u7684\u7248\u672c\u8fdb\u884c\u5347\u7ea7\u3002

        \u6574\u4f53\u7684\u601d\u8def\u4e3a\uff1a

        1. \u5728\u8054\u7f51\u8282\u70b9\u6784\u5efa\u79bb\u7ebf\u5305
        2. \u5c06\u79bb\u7ebf\u5305\u5bfc\u5165\u706b\u79cd\u8282\u70b9
        3. \u66f4\u65b0\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 Kubernetes \u7248\u672c\u6e05\u5355
        4. \u4f7f\u7528\u5e73\u53f0 UI \u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u6216\u5347\u7ea7\u5de5\u4f5c\u96c6\u7fa4\u7684 kubernetes \u7248\u672c

        Note

        \u76ee\u524d\u652f\u6301\u6784\u5efa\u7684\u79bb\u7ebf kubernetes \u7248\u672c\uff0c\u8bf7\u53c2\u8003 kubean \u652f\u6301\u7684 kubernetes \u7248\u672c\u5217\u8868\u3002

        "},{"location":"admin/kpanda/best-practice/update-offline-cluster.html#_2","title":"\u5728\u8054\u7f51\u8282\u70b9\u6784\u5efa\u79bb\u7ebf\u5305","text":"

        \u7531\u4e8e\u79bb\u7ebf\u73af\u5883\u65e0\u6cd5\u8054\u7f51\uff0c\u7528\u6237\u9700\u8981\u4e8b\u5148\u51c6\u5907\u4e00\u53f0\u80fd\u591f \u8054\u7f51\u7684\u8282\u70b9 \u6765\u8fdb\u884c\u589e\u91cf\u79bb\u7ebf\u5305\u7684\u6784\u5efa\uff0c\u5e76\u4e14\u5728\u8fd9\u4e2a\u8282\u70b9\u4e0a\u542f\u52a8 Docker \u6216\u8005 podman \u670d\u52a1\u3002 \u53c2\u9605\u5982\u4f55\u5b89\u88c5 Docker\uff1f

        1. \u68c0\u67e5\u8054\u7f51\u8282\u70b9\u7684 Docker \u670d\u52a1\u8fd0\u884c\u72b6\u6001

          ps aux|grep docker\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          root     12341  0.5  0.2 654372 26736 ?        Ssl  23:45   0:00 /usr/bin/docked\nroot     12351  0.2  0.1 625080 13740 ?        Ssl  23:45   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml\nroot     13024  0.0  0.0 112824   980 pts/0    S+   23:45   0:00 grep --color=auto docker\n
        2. \u5728\u8054\u7f51\u8282\u70b9\u7684 /root \u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a manifest.yaml \u7684\u6587\u4ef6\uff0c\u547d\u4ee4\u5982\u4e0b\uff1a

          vi manifest.yaml\n

          manifest.yaml \u5185\u5bb9\u5982\u4e0b\uff1a

          manifest.yaml
          image_arch:\n- \"amd64\"\nkube_version: # \u586b\u5199\u5f85\u5347\u7ea7\u7684\u96c6\u7fa4\u7248\u672c\n- \"v1.28.0\"\n
          • image_arch \u7528\u4e8e\u6307\u5b9a CPU \u7684\u67b6\u6784\u7c7b\u578b\uff0c\u53ef\u586b\u5165\u7684\u53c2\u6570\u4e3a amd64 \u548c arm64 \u3002
          • kube_version \u7528\u4e8e\u6307\u5b9a\u9700\u8981\u6784\u5efa\u7684 kubernetes \u79bb\u7ebf\u5305\u7248\u672c\uff0c\u53ef\u53c2\u8003\u4e0a\u6587\u7684\u652f\u6301\u6784\u5efa\u7684\u79bb\u7ebf kubernetes \u7248\u672c\u3002
        3. \u5728 /root \u76ee\u5f55\u4e0b\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a /data \u7684\u6587\u4ef6\u5939\u6765\u5b58\u50a8\u589e\u91cf\u79bb\u7ebf\u5305\u3002

          mkdir data\n

          \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u4f7f\u7528 kubean airgap-patch \u955c\u50cf\u751f\u6210\u79bb\u7ebf\u5305\u3002 airgap-patch \u955c\u50cf tag \u4e0e Kubean \u7248\u672c\u4e00\u81f4\uff0c\u9700\u786e\u4fdd Kubean \u7248\u672c\u8986\u76d6\u9700\u8981\u5347\u7ea7\u7684 Kubernetes \u7248\u672c\u3002

          # \u5047\u8bbe kubean \u7248\u672c\u4e3a v0.13.9\ndocker run --rm -v $(pwd)/manifest.yml:/manifest.yml -v $(pwd)/data:/data ghcr.m.daocloud.io/kubean-io/airgap-patch:v0.13.9\n

          \u7b49\u5f85 Docker \u670d\u52a1\u8fd0\u884c\u5b8c\u6210\u540e\uff0c\u68c0\u67e5 /data \u6587\u4ef6\u5939\u4e0b\u7684\u6587\u4ef6\uff0c\u6587\u4ef6\u76ee\u5f55\u5982\u4e0b\uff1a

          data\n\u251c\u2500\u2500 amd64\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 files\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 import_files.sh\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 offline-files.tar.gz\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 images\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 import_images.sh\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 offline-images.tar.gz\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 os-pkgs\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 import_ospkgs.sh\n\u2514\u2500\u2500 localartifactset.cr.yaml\n
        "},{"location":"admin/kpanda/best-practice/update-offline-cluster.html#_3","title":"\u5c06\u79bb\u7ebf\u5305\u5bfc\u5165\u706b\u79cd\u8282\u70b9","text":"
        1. \u5c06\u8054\u7f51\u8282\u70b9\u7684 /data \u6587\u4ef6\u62f7\u8d1d\u81f3\u706b\u79cd\u8282\u70b9\u7684 /root \u76ee\u5f55\u4e0b\uff0c\u5728 \u8054\u7f51\u8282\u70b9 \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

          scp -r data root@x.x.x.x:/root\n

          x.x.x.x \u4e3a\u706b\u79cd\u8282\u70b9 IP \u5730\u5740

        2. \u5728\u706b\u79cd\u8282\u70b9\u4e0a\u5c06 /data \u6587\u4ef6\u5185\u7684\u955c\u50cf\u6587\u4ef6\u62f7\u8d1d\u81f3\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 docker resgitry \u4ed3\u5e93\u3002\u767b\u5f55\u706b\u79cd\u8282\u70b9\u540e\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

          1. \u8fdb\u5165\u955c\u50cf\u6587\u4ef6\u6240\u5728\u7684\u76ee\u5f55

            cd data/amd64/images\n
          2. \u6267\u884c import_images.sh \u811a\u672c\u5c06\u955c\u50cf\u5bfc\u5165\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Docker Resgitry \u4ed3\u5e93\u3002

            REGISTRY_ADDR=\"127.0.0.1\"  ./import_images.sh\n

          Note

          \u4e0a\u8ff0\u547d\u4ee4\u4ec5\u4ec5\u9002\u7528\u4e8e\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Docker Resgitry \u4ed3\u5e93\uff0c\u5982\u679c\u4f7f\u7528\u5916\u90e8\u4ed3\u5e93\u8bf7\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\uff1a

          REGISTRY_SCHEME=https REGISTRY_ADDR=${registry_address} REGISTRY_USER=${username} REGISTRY_PASS=${password} ./import_images.sh\n
          • REGISTRY_ADDR \u662f\u955c\u50cf\u4ed3\u5e93\u7684\u5730\u5740\uff0c\u6bd4\u59821.2.3.4:5000
          • \u5f53\u955c\u50cf\u4ed3\u5e93\u5b58\u5728\u7528\u6237\u540d\u5bc6\u7801\u9a8c\u8bc1\u65f6\uff0c\u9700\u8981\u8bbe\u7f6e REGISTRY_USER \u548c REGISTRY_PASS
        3. \u5728\u706b\u79cd\u8282\u70b9\u4e0a\u5c06 /data \u6587\u4ef6\u5185\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6\u62f7\u8d1d\u81f3\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u670d\u52a1\u4e0a\u3002

          1. \u8fdb\u5165\u4e8c\u8fdb\u5236\u6587\u4ef6\u6240\u5728\u7684\u76ee\u5f55

            cd data/amd64/files/\n
          2. \u6267\u884c import_files.sh \u811a\u672c\u5c06\u4e8c\u8fdb\u5236\u6587\u4ef6\u5bfc\u5165\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u670d\u52a1\u4e0a\u3002

            MINIO_USER=rootuser MINIO_PASS=rootpass123 ./import_files.sh http://127.0.0.1:9000\n

        Note

        \u4e0a\u8ff0\u547d\u4ee4\u4ec5\u4ec5\u9002\u7528\u4e8e\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u670d\u52a1\uff0c\u5982\u679c\u4f7f\u7528\u5916\u90e8 Minio \u8bf7\u5c06 http://127.0.0.1:9000 \u66ff\u6362\u4e3a\u5916\u90e8 Minio \u7684\u8bbf\u95ee\u5730\u5740\u3002 \u201crootuser\u201d \u548c \u201crootpass123\u201d\u662f\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u670d\u52a1\u7684\u9ed8\u8ba4\u8d26\u6237\u548c\u5bc6\u7801\u3002

        "},{"location":"admin/kpanda/best-practice/update-offline-cluster.html#kubernetes","title":"\u66f4\u65b0\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 kubernetes \u7248\u672c\u6e05\u5355","text":"

        \u706b\u79cd\u8282\u70b9\u4e0a\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5c06 localartifactset \u8d44\u6e90\u90e8\u7f72\u5230\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\uff1a

        kubectl apply -f data/kubeanofflineversion.cr.patch.yaml\n
        "},{"location":"admin/kpanda/best-practice/update-offline-cluster.html#_4","title":"\u4e0b\u4e00\u6b65","text":"

        \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3\u7684 UI \u7ba1\u7406\u754c\u9762\uff0c\u60a8\u53ef\u4ee5\u7ee7\u7eed\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a

        1. \u53c2\u7167\u521b\u5efa\u96c6\u7fa4\u7684\u6587\u6863\u8fdb\u884c\u5de5\u4f5c\u96c6\u7fa4\u521b\u5efa\uff0c\u6b64\u65f6\u53ef\u4ee5\u9009\u62e9 Kubernetes \u589e\u91cf\u7248\u672c\u3002

        2. \u53c2\u7167\u5347\u7ea7\u96c6\u7fa4\u7684\u6587\u6863\u5bf9\u81ea\u5efa\u7684\u5de5\u4f5c\u96c6\u7fa4\u8fdb\u884c\u5347\u7ea7\u3002

        "},{"location":"admin/kpanda/best-practice/use-otherlinux-create-custer.html","title":"\u5728\u975e\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u521b\u5efa\u96c6\u7fa4","text":"

        \u672c\u6587\u4ecb\u7ecd\u79bb\u7ebf\u6a21\u5f0f\u4e0b\u5982\u4f55\u5728 \u672a\u58f0\u660e\u652f\u6301\u7684 OS \u4e0a\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u3002AI \u7b97\u529b\u4e2d\u5fc3\u58f0\u660e\u652f\u6301\u7684 OS \u8303\u56f4\u8bf7\u53c2\u8003 AI \u7b97\u529b\u4e2d\u5fc3\u652f\u6301\u7684\u64cd\u4f5c\u7cfb\u7edf

        \u79bb\u7ebf\u6a21\u5f0f\u4e0b\u5728\u672a\u58f0\u660e\u652f\u6301\u7684 OS \u4e0a\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u4e3b\u8981\u7684\u6d41\u7a0b\u5982\u4e0b\u56fe\uff1a

        \u63a5\u4e0b\u6765\uff0c\u672c\u6587\u5c06\u4ee5 openAnolis \u64cd\u4f5c\u7cfb\u7edf\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u5728\u975e\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u521b\u5efa\u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/use-otherlinux-create-custer.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u90e8\u7f72\u597d\u4e00\u4e2a AI \u7b97\u529b\u4e2d\u5fc3\u5168\u6a21\u5f0f\uff0c\u90e8\u7f72\u53c2\u8003\u6587\u6863\u79bb\u7ebf\u5b89\u88c5 AI \u7b97\u529b\u4e2d\u5fc3\u5546\u4e1a\u7248
        • \u81f3\u5c11\u62e5\u6709\u4e00\u53f0\u53ef\u4ee5\u8054\u7f51\u7684\u540c\u67b6\u6784\u540c\u7248\u672c\u7684\u8282\u70b9\u3002
        "},{"location":"admin/kpanda/best-practice/use-otherlinux-create-custer.html#_3","title":"\u5728\u7ebf\u8282\u70b9\u6784\u5efa\u79bb\u7ebf\u5305","text":"

        \u627e\u5230\u4e00\u4e2a\u548c\u5f85\u5efa\u96c6\u7fa4\u8282\u70b9\u67b6\u6784\u548c OS \u5747\u4e00\u81f4\u7684\u5728\u7ebf\u73af\u5883\uff0c\u672c\u6587\u4ee5 AnolisOS 8.8 GA \u4e3a\u4f8b\u3002\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u751f\u6210\u79bb\u7ebf os-pkgs \u5305\u3002

        # \u4e0b\u8f7d\u76f8\u5173\u811a\u672c\u5e76\u6784\u5efa os packages \u5305\ncurl -Lo ./pkgs.yml https://raw.githubusercontent.com/kubean-io/kubean/main/build/os-packages/others/pkgs.yml\ncurl -Lo ./other_os_pkgs.sh https://raw.githubusercontent.com/kubean-io/kubean/main/build/os-packages/others/other_os_pkgs.sh && chmod +x  other_os_pkgs.sh\n./other_os_pkgs.sh build # \u6784\u5efa\u79bb\u7ebf\u5305\n

        \u6267\u884c\u5b8c\u4e0a\u8ff0\u547d\u4ee4\u540e\uff0c\u9884\u671f\u5c06\u5728\u5f53\u524d\u8def\u5f84\u4e0b\u751f\u6210\u4e00\u4e2a\u540d\u4e3a os-pkgs-anolis-8.8.tar.gz \u7684\u538b\u7f29\u5305\u3002\u5f53\u524d\u8def\u5f84\u4e0b\u6587\u4ef6\u76ee\u5f55\u5927\u6982\u5982\u4e0b\uff1a

            .\n    \u251c\u2500\u2500 other_os_pkgs.sh\n    \u251c\u2500\u2500 pkgs.yml\n    \u2514\u2500\u2500 os-pkgs-anolis-8.8.tar.gz\n
        "},{"location":"admin/kpanda/best-practice/use-otherlinux-create-custer.html#_4","title":"\u79bb\u7ebf\u8282\u70b9\u5b89\u88c5\u79bb\u7ebf\u5305","text":"

        \u5c06\u5728\u7ebf\u8282\u70b9\u4e2d\u751f\u6210\u7684 other_os_pkgs.sh \u3001 pkgs.yml \u3001 os-pkgs-anolis-8.8.tar.gz \u4e09\u4e2a\u6587\u4ef6\u62f7\u8d1d\u81f3\u79bb\u7ebf\u73af\u5883\u4e2d\u7684\u5f85\u5efa\u96c6\u7fa4\u7684**\u6240\u6709**\u8282\u70b9\u4e0a\u3002

        \u767b\u5f55\u79bb\u7ebf\u73af\u5883\u4e2d\uff0c\u4efb\u4e00\u5f85\u5efa\u96c6\u7fa4\u7684\u5176\u4e2d\u4e00\u4e2a\u8282\u70b9\u4e0a\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u4e3a\u8282\u70b9\u5b89\u88c5 os-pkg \u5305\u3002

        # \u914d\u7f6e\u73af\u5883\u53d8\u91cf\nexport PKGS_YML_PATH=/root/workspace/os-pkgs/pkgs.yml # \u5f53\u524d\u79bb\u7ebf\u8282\u70b9 pkgs.yml \u6587\u4ef6\u7684\u8def\u5f84\nexport PKGS_TAR_PATH=/root/workspace/os-pkgs/os-pkgs-anolis-8.8.tar.gz # \u5f53\u524d\u79bb\u7ebf\u8282\u70b9 os-pkgs-anolis-8.8.tar.gz \u7684\u8def\u5f84\nexport SSH_USER=root # \u5f53\u524d\u79bb\u7ebf\u8282\u70b9\u7684\u7528\u6237\u540d\nexport SSH_PASS=dangerous # \u5f53\u524d\u79bb\u7ebf\u8282\u70b9\u7684\u5bc6\u7801\nexport HOST_IPS='172.30.41.168' # \u5f53\u524d\u79bb\u7ebf\u8282\u70b9\u7684 IP\n./other_os_pkgs.sh install #\u5b89\u88c5\u79bb\u7ebf\u5305\n

        \u6267\u884c\u5b8c\u6210\u4e0a\u8ff0\u547d\u4ee4\u540e\uff0c\u7b49\u5f85\u754c\u9762\u63d0\u793a\uff1a All packages for node (X.X.X.X) have been installed \u5373\u8868\u793a\u5b89\u88c5\u5b8c\u6210\u3002

        "},{"location":"admin/kpanda/best-practice/use-otherlinux-create-custer.html#_5","title":"\u4e0b\u4e00\u6b65","text":"

        \u53c2\u8003\u6587\u6863\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u5728 UI \u754c\u9762\u4e0a\u521b\u5efa openAnolis \u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/best-practice/co-located/index.html","title":"\u5728\u79bb\u7ebf\u6df7\u90e8","text":"

        \u4f01\u4e1a\u4e2d\u4e00\u822c\u5b58\u5728\u4e24\u79cd\u7c7b\u578b\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff1a\u5728\u7ebf\u670d\u52a1\uff08latency-sensitive service\uff09\u548c\u79bb\u7ebf\u4efb\u52a1\uff08batch job\uff09\u3002 \u5728\u7ebf\u670d\u52a1\u5982\u641c\u7d22/\u652f\u4ed8/\u63a8\u8350\u7b49\uff0c\u5177\u6709\u5904\u7406\u4f18\u5148\u7ea7\u9ad8\u3001\u65f6\u5ef6\u654f\u611f\u6027\u9ad8\u3001\u9519\u8bef\u5bb9\u5fcd\u5ea6\u4f4e\u4ee5\u53ca\u767d\u5929\u8d1f\u8f7d\u9ad8\u665a\u4e0a\u8d1f\u8f7d\u4f4e\u7b49\u7279\u70b9\u3002 \u800c\u79bb\u7ebf\u4efb\u52a1\u5982 AI \u8bad\u7ec3/\u5927\u6570\u636e\u5904\u7406\u7b49\uff0c\u5177\u6709\u5904\u7406\u4f18\u5148\u7ea7\u4f4e\u3001\u65f6\u5ef6\u654f\u611f\u6027\u4f4e\u3001\u9519\u8bef\u5bb9\u5fcd\u5ea6\u9ad8\u4ee5\u53ca\u8fd0\u884c\u65f6\u8d1f\u8f7d\u4e00\u76f4\u8f83\u9ad8\u7b49\u7279\u70b9\u3002 \u7531\u4e8e\u5728\u7ebf\u670d\u52a1\u4e0e\u79bb\u7ebf\u4efb\u52a1\u8fd9\u4e24\u7c7b\u5de5\u4f5c\u8d1f\u8f7d\u5929\u7136\u5b58\u5728\u4e92\u8865\u6027\uff0c\u5c06\u5728/\u79bb\u7ebf\u4e1a\u52a1\u6df7\u5408\u90e8\u7f72\u662f\u63d0\u9ad8\u670d\u52a1\u5668\u8d44\u6e90\u5229\u7528\u7387\u7684\u6709\u6548\u9014\u5f84\u3002

        • \u53ef\u4ee5\u5c06\u79bb\u7ebf\u4e1a\u52a1\u6df7\u90e8\u5230\u5728\u7ebf\u4e1a\u52a1\u7684\u670d\u52a1\u5668\u4e0a\uff0c\u8ba9\u79bb\u7ebf\u4e1a\u52a1\u80fd\u591f\u5145\u5206\u5229\u7528\u5728\u7ebf\u4e1a\u52a1\u670d\u52a1\u5668\u7684\u7a7a\u95f2\u8d44\u6e90\uff0c\u63d0\u9ad8\u5728\u7ebf\u4e1a\u52a1\u670d\u52a1\u5668\u8d44\u6e90\u5229\u7528\u7387\uff0c\u5b9e\u73b0\u964d\u672c\u589e\u6548\u3002

        • \u5f53\u4e1a\u52a1\u4e2d\u4e34\u65f6\u9700\u8981\u5927\u91cf\u7684\u8d44\u6e90\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ef\u4ee5\u5c06\u5728\u7ebf\u4e1a\u52a1\u5f39\u6027\u6df7\u90e8\u5230\u79bb\u7ebf\u4e1a\u52a1\u7684\u670d\u52a1\u5668\u4e0a\uff0c\u4f18\u5148\u4fdd\u8bc1\u5728\u7ebf\u4e1a\u52a1\u7684\u8d44\u6e90\u9700\u6c42\uff0c\u4e34\u65f6\u9700\u6c42\u7ed3\u675f\u540e\u518d\u628a\u8d44\u6e90\u5f52\u8fd8\u7ed9\u79bb\u7ebf\u4e1a\u52a1\u3002

        \u5f53\u524d\u4f7f\u7528\u5f00\u6e90\u9879\u76ee Koordinator \u4f5c\u4e3a\u5728\u79bb\u7ebf\u6df7\u90e8\u7684\u89e3\u51b3\u65b9\u6848\u3002

        Koordinator \u662f\u4e00\u4e2a\u57fa\u4e8e QoS \u7684 Kubernetes \u6df7\u5408\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u7cfb\u7edf\u3002 \u5b83\u65e8\u5728\u63d0\u9ad8\u5bf9\u5ef6\u8fdf\u654f\u611f\u7684\u5de5\u4f5c\u8d1f\u8f7d\u548c\u6279\u5904\u7406\u4f5c\u4e1a\u7684\u8fd0\u884c\u65f6\u6548\u7387\u548c\u53ef\u9760\u6027\uff0c\u7b80\u5316\u4e0e\u8d44\u6e90\u76f8\u5173\u7684\u914d\u7f6e\u8c03\u6574\u7684\u590d\u6742\u6027\uff0c\u5e76\u589e\u52a0 Pod \u90e8\u7f72\u5bc6\u5ea6\u4ee5\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u7387\u3002

        "},{"location":"admin/kpanda/best-practice/co-located/index.html#koordinator-qos","title":"Koordinator QoS","text":"

        Koordinator \u8c03\u5ea6\u7cfb\u7edf\u652f\u6301\u7684 QoS \u6709\u4e94\u79cd\u7c7b\u578b:

        QoS \u7279\u70b9 \u8bf4\u660e SYSTEM \u7cfb\u7edf\u8fdb\u7a0b\uff0c\u8d44\u6e90\u53d7\u9650 \u5bf9\u4e8e DaemonSets \u7b49\u7cfb\u7edf\u670d\u52a1\uff0c\u867d\u7136\u9700\u8981\u4fdd\u8bc1\u7cfb\u7edf\u670d\u52a1\u7684\u5ef6\u8fdf\uff0c\u4f46\u4e5f\u9700\u8981\u9650\u5236\u8282\u70b9\u4e0a\u8fd9\u4e9b\u7cfb\u7edf\u670d\u52a1\u5bb9\u5668\u7684\u8d44\u6e90\u4f7f\u7528\uff0c\u4ee5\u786e\u4fdd\u5176\u4e0d\u5360\u7528\u8fc7\u591a\u7684\u8d44\u6e90 LSE(Latency Sensitive Exclusive) \u4fdd\u7559\u8d44\u6e90\u5e76\u7ec4\u7ec7\u540c QoS \u7684 Pod \u5171\u4eab\u8d44\u6e90 \u5f88\u5c11\u4f7f\u7528\uff0c\u5e38\u89c1\u4e8e\u4e2d\u95f4\u4ef6\u7c7b\u5e94\u7528\uff0c\u4e00\u822c\u5728\u72ec\u7acb\u7684\u8d44\u6e90\u6c60\u4e2d\u4f7f\u7528 LSR(Latency Sensitive Reserved) \u9884\u7559\u8d44\u6e90\u4ee5\u83b7\u5f97\u66f4\u597d\u7684\u786e\u5b9a\u6027 \u7c7b\u4f3c\u4e8e\u793e\u533a\u7684 Guaranteed\uff0cCPU \u6838\u88ab\u7ed1\u5b9a LS(Latency Sensitive) \u5171\u4eab\u8d44\u6e90\uff0c\u5bf9\u7a81\u53d1\u6d41\u91cf\u6709\u66f4\u597d\u7684\u5f39\u6027 \u5fae\u670d\u52a1\u5de5\u4f5c\u8d1f\u8f7d\u7684\u5178\u578bQoS\u7ea7\u522b\uff0c\u5b9e\u73b0\u66f4\u597d\u7684\u8d44\u6e90\u5f39\u6027\u548c\u66f4\u7075\u6d3b\u7684\u8d44\u6e90\u8c03\u6574\u80fd\u529b BE(Best Effort) \u5171\u4eab\u4e0d\u5305\u62ec LSE \u7684\u8d44\u6e90\uff0c\u8d44\u6e90\u8fd0\u884c\u8d28\u91cf\u6709\u9650\uff0c\u751a\u81f3\u5728\u6781\u7aef\u60c5\u51b5\u4e0b\u88ab\u6740\u6b7b \u6279\u91cf\u4f5c\u4e1a\u7684\u5178\u578b QoS \u6c34\u5e73\uff0c\u5728\u4e00\u5b9a\u65f6\u671f\u5185\u7a33\u5b9a\u7684\u8ba1\u7b97\u541e\u5410\u91cf\uff0c\u4f4e\u6210\u672c\u8d44\u6e90"},{"location":"admin/kpanda/best-practice/co-located/index.html#koordinator-qos-cpu","title":"Koordinator QoS CPU \u7f16\u6392\u539f\u5219","text":"
        • LSE/LSR Pod \u7684 Request \u548c Limit \u5fc5\u987b\u76f8\u7b49\uff0cCPU \u503c\u5fc5\u987b\u662f 1000 \u7684\u6574\u6570\u500d\u3002
        • LSE Pod \u5206\u914d\u7684 CPU \u662f\u5b8c\u5168\u72ec\u5360\u7684\uff0c\u4e0d\u5f97\u5171\u4eab\u3002\u5982\u679c\u8282\u70b9\u662f\u8d85\u7ebf\u7a0b\u67b6\u6784\uff0c\u53ea\u4fdd\u8bc1\u903b\u8f91\u6838\u5fc3\u7ef4\u5ea6\u662f\u9694\u79bb\u7684\uff0c\u4f46\u662f\u53ef\u4ee5\u901a\u8fc7 CPUBindPolicyFullPCPUs \u7b56\u7565\u83b7\u5f97\u66f4\u597d\u7684\u9694\u79bb\u3002
        • LSR Pod \u5206\u914d\u7684 CPU \u53ea\u80fd\u4e0e BE Pod \u5171\u4eab\u3002
        • LS Pod \u7ed1\u5b9a\u4e86\u4e0e LSE/LSR Pod \u72ec\u5360\u4e4b\u5916\u7684\u5171\u4eab CPU \u6c60\u3002
        • BE Pod \u7ed1\u5b9a\u4f7f\u7528\u8282\u70b9\u4e2d\u9664 LSE Pod \u72ec\u5360\u4e4b\u5916\u7684\u6240\u6709 CPU \u3002
        • \u5982\u679c kubelet \u7684 CPU \u7ba1\u7406\u5668\u7b56\u7565\u4e3a static \u7b56\u7565\uff0c\u5219\u5df2\u7ecf\u8fd0\u884c\u7684 K8s Guaranteed Pods \u7b49\u4ef7\u4e8e Koordinator LSR\u3002
        • \u5982\u679c kubelet \u7684 CPU \u7ba1\u7406\u5668\u7b56\u7565\u4e3a none \u7b56\u7565\uff0c\u5219\u5df2\u7ecf\u8fd0\u884c\u7684 K8s Guaranteed Pods \u7b49\u4ef7\u4e8e Koordinator LS\u3002
        • \u65b0\u521b\u5efa\u4f46\u672a\u6307\u5b9a Koordinator QoS \u7684 K8s Guaranteed Pod \u7b49\u4ef7\u4e8e Koordinator LS\u3002
        "},{"location":"admin/kpanda/best-practice/co-located/index.html#_2","title":"\u5feb\u901f\u4e0a\u624b","text":""},{"location":"admin/kpanda/best-practice/co-located/index.html#_3","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u90e8\u7f72 AI \u7b97\u529b\u4e2d\u5fc3\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
        • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
        • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5 koordinator \u5e76\u6b63\u5e38\u8fd0\u884c\uff0c\u5b89\u88c5\u6b65\u9aa4\u53ef\u53c2\u8003 koordinator \u79bb\u7ebf\u5b89\u88c5\u3002
        "},{"location":"admin/kpanda/best-practice/co-located/index.html#_4","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

        \u4ee5\u4e0b\u793a\u4f8b\u4e2d\u521b\u5efa4\u4e2a\u526f\u672c\u6570\u4e3a1\u7684 deployment, \u8bbe\u7f6e QoS \u7c7b\u522b\u4e3a LSE, LSR, LS, BE, \u5f85 pod \u521b\u5efa\u5b8c\u6210\u540e\uff0c\u89c2\u5bdf\u5404 pod \u7684 CPU \u5206\u914d\u60c5\u51b5\u3002

        1. \u521b\u5efa\u540d\u79f0\u4e3a nginx-lse \u7684 deployment\uff0cQoS \u7c7b\u522b\u4e3a LSE, yaml \u6587\u4ef6\u5982\u4e0b\u3002

          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-lse\n  labels:\n    app: nginx-lse\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: nginx-lse\n  template:\n    metadata:\n      name: nginx-lse\n      labels:\n        app: nginx-lse\n        koordinator.sh/qosClass: LSE # \u8bbe\u7f6e QoS \u7c7b\u522b\u4e3a LSE\n        # \u8c03\u5ea6\u5668\u5c06\u5728\u7269\u7406\u5185\u6838\u4e4b\u95f4\u5747\u5300\u7684\u5206\u914d\u903b\u8f91 CPU\n      annotations:\n          scheduling.koordinator.sh/resource-spec: '{\"preferredCPUBindPolicy\": \"SpreadByPCPUs\"}'\n    spec:\n      schedulerName: koord-scheduler # \u4f7f\u7528 koord-scheduler \u8c03\u5ea6\u5668\n      containers:\n      - name: nginx\n        image: release.daocloud.io/kpanda/nginx:1.25.3-alpine\n        resources:\n          limits:\n            cpu: '2'\n          requests:\n            cpu: '2'\n      priorityClassName: koord-prod\n
        2. \u521b\u5efa\u540d\u79f0\u4e3a nginx-lsr \u7684 deployment\uff0cQoS \u7c7b\u522b\u4e3a LSR, yaml \u6587\u4ef6\u5982\u4e0b\u3002

          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-lsr\n  labels:\n    app: nginx-lsr\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: nginx-lsr\n  template:\n    metadata:\n      name: nginx-lsr\n      labels:\n        app: nginx-lsr\n        koordinator.sh/qosClass: LSR # \u8bbe\u7f6e QoS \u7c7b\u522b\u4e3a LSR\n        # \u8c03\u5ea6\u5668\u5c06\u5728\u7269\u7406\u5185\u6838\u4e4b\u95f4\u5747\u5300\u7684\u5206\u914d\u903b\u8f91 CPU\n      annotations:\n          scheduling.koordinator.sh/resource-spec: '{\"preferredCPUBindPolicy\": \"SpreadByPCPUs\"}'\n    spec:\n      schedulerName: koord-scheduler # \u4f7f\u7528 koord-scheduler \u8c03\u5ea6\u5668\n      containers:\n      - name: nginx\n        image: release.daocloud.io/kpanda/nginx:1.25.3-alpine\n        resources:\n          limits:\n            cpu: '2'\n          requests:\n            cpu: '2'\n      priorityClassName: koord-prod\n
        3. \u521b\u5efa\u540d\u79f0\u4e3a nginx-ls \u7684 deployment\uff0cQoS \u7c7b\u522b\u4e3a LS, yaml \u6587\u4ef6\u5982\u4e0b\u3002

          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-ls\n  labels:\n    app: nginx-ls\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: nginx-ls\n  template:\n    metadata:\n      name: nginx-ls\n      labels:\n        app: nginx-ls\n        koordinator.sh/qosClass: LS # \u8bbe\u7f6e QoS \u7c7b\u522b\u4e3a LS\n        # \u8c03\u5ea6\u5668\u5c06\u5728\u7269\u7406\u5185\u6838\u4e4b\u95f4\u5747\u5300\u7684\u5206\u914d\u903b\u8f91 CPU\n      annotations:\n          scheduling.koordinator.sh/resource-spec: '{\"preferredCPUBindPolicy\": \"SpreadByPCPUs\"}'\n    spec:\n      schedulerName: koord-scheduler \n      containers:\n      - name: nginx\n        image: release.daocloud.io/kpanda/nginx:1.25.3-alpine\n        resources:\n          limits:\n            cpu: '2'\n          requests:\n            cpu: '2'\n      priorityClassName: koord-prod\n
        4. \u521b\u5efa\u540d\u79f0\u4e3a nginx-be \u7684 deployment\uff0cQoS \u7c7b\u522b\u4e3a BE, yaml \u6587\u4ef6\u5982\u4e0b\u3002

          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-be\n  labels:\n    app: nginx-be\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: nginx-be\n  template:\n    metadata:\n      name: nginx-be\n      labels:\n        app: nginx-be\n        koordinator.sh/qosClass: BE # \u8bbe\u7f6e QoS \u7c7b\u522b\u4e3a BE\n        # \u8c03\u5ea6\u5668\u5c06\u5728\u7269\u7406\u5185\u6838\u4e4b\u95f4\u5747\u5300\u7684\u5206\u914d\u903b\u8f91 CPU\n      annotations:\n          scheduling.koordinator.sh/resource-spec: '{\"preferredCPUBindPolicy\": \"SpreadByPCPUs\"}'\n    spec:\n      schedulerName: koord-scheduler # \u4f7f\u7528 koord-scheduler \u8c03\u5ea6\u5668\n      containers:\n      - name: nginx\n        image: release.daocloud.io/kpanda/nginx:1.25.3-alpine\n        resources:\n          limits:\n            kubernetes.io/batch-cpu: 2k\n          requests:\n            kubernetes.io/batch-cpu: 2k\n      priorityClassName: koord-batch\n

          \u67e5\u770b pod \u72b6\u6001\uff0c\u5f53 pod \u5904\u4e8e running \u540e\uff0c\u67e5\u770b\u5404 pod \u7684 CPU \u5206\u914d\u60c5\u51b5\u3002

          [root@controller-node-1 ~]# kubectl get pod\nNAME                         READY   STATUS    RESTARTS   AGE\nnginx-be-577c946b89-js2qn    1/1     Running   0          4h41m\nnginx-ls-54746c8cf8-rh4b7    1/1     Running   0          4h51m\nnginx-lse-56c9cd77f5-cdqbd   1/1     Running   0          4h41m\nnginx-lsr-c7fdb97d8-b58h8    1/1     Running   0          4h51m\n

          \u672c\u793a\u4f8b\u4e2d\u4f7f\u7528 get_cpuset.sh \u811a\u672c\u67e5\u770b Pod \u7684 cpuset \u4fe1\u606f\uff0c\u811a\u672c\u5185\u5bb9\u5982\u4e0b\u3002

          #!/bin/bash\n\n# \u83b7\u53d6Pod\u7684\u540d\u79f0\u548c\u547d\u540d\u7a7a\u95f4\u4f5c\u4e3a\u8f93\u5165\u53c2\u6570\nPOD_NAME=$1\nNAMESPACE=${2-default}\n\n# \u786e\u4fdd\u63d0\u4f9b\u4e86Pod\u540d\u79f0\u548c\u547d\u540d\u7a7a\u95f4\nif [ -z \"$POD_NAME\" ] || [ -z \"$NAMESPACE\" ]; then\n    echo \"Usage: $0 <pod_name> <namespace>\"\n    exit 1\nfi\n\n# \u4f7f\u7528kubectl\u83b7\u53d6Pod\u7684UID\u548cQoS\u7c7b\u522b\nPOD_INFO=$(kubectl get pod \"$POD_NAME\" -n \"$NAMESPACE\" -o jsonpath=\"{.metadata.uid} {.status.qosClass} {.status.containerStatuses[0].containerID}\")\nread -r POD_UID POD_QOS CONTAINER_ID <<< \"$POD_INFO\"\n\n# \u68c0\u67e5UID\u548cQoS\u7c7b\u522b\u662f\u5426\u6210\u529f\u83b7\u53d6\nif [ -z \"$POD_UID\" ] || [ -z \"$POD_QOS\" ]; then\n    echo \"Failed to get UID or QoS Class for Pod $POD_NAME in namespace $NAMESPACE.\"\n    exit 1\nfi\n\nPOD_UID=\"${POD_UID//-/_}\"\nCONTAINER_ID=\"${CONTAINER_ID//containerd:\\/\\//cri-containerd-}\".scope\n\n# \u6839\u636eQoS\u7c7b\u522b\u6784\u5efacgroup\u8def\u5f84\ncase \"$POD_QOS\" in\n    Guaranteed)\n        QOS_PATH=\"kubepods-pod.slice/$POD_UID.slice\"\n        ;;\n    Burstable)\n        QOS_PATH=\"kubepods-burstable.slice/kubepods-burstable-pod$POD_UID.slice\"\n        ;;\n    BestEffort)\n        QOS_PATH=\"kubepods-besteffort.slice/kubepods-besteffort-pod$POD_UID.slice\"\n        ;;\n    *)\n        echo \"Unknown QoS Class: $POD_QOS\"\n        exit 1\n        ;;\nesac\n\nCPUGROUP_PATH=\"/sys/fs/cgroup/kubepods.slice/$QOS_PATH\"\n\n# \u68c0\u67e5\u8def\u5f84\u662f\u5426\u5b58\u5728\nif [ ! -d \"$CPUGROUP_PATH\" ]; then\n    echo \"CPUs cgroup path for Pod $POD_NAME does not exist: $CPUGROUP_PATH\"\n    exit 1\nfi\n\n# \u8bfb\u53d6\u5e76\u6253\u5370cpuset\u503c\nCPUSET=$(cat \"$CPUGROUP_PATH/$CONTAINER_ID/cpuset.cpus\")\necho \"CPU set for Pod $POD_NAME ($POD_QOS QoS): $CPUSET\"\n

        \u67e5\u770b\u5404 Pod \u7684 cpuset \u5206\u914d\u60c5\u51b5\u3002

        1. QoS \u7c7b\u578b\u4e3a LSE \u7684 Pod, \u72ec\u5360 0-1 \u6838\uff0c\u4e0d\u4e0e\u5176\u4ed6\u7c7b\u578b\u7684 Pod \u5171\u4eab CPU\u3002

          [root@controller-node-1 ~]# ./get_cpuset.sh nginx-lse-56c9cd77f5-cdqbd\nCPU set for Pod nginx-lse-56c9cd77f5-cdqbd (Burstable QoS): 0-1\n
        2. QoS \u7c7b\u578b\u4e3a LSR \u7684 Pod, \u7ed1\u5b9a CPU 2-3 \u6838\uff0c\u53ef\u4e0e BE \u7c7b\u578b\u7684 Pod \u5171\u4eab\u3002

          [root@controller-node-1 ~]# ./get_cpuset.sh nginx-lsr-c7fdb97d8-b58h8\nCPU set for Pod nginx-lsr-c7fdb97d8-b58h8 (Burstable QoS): 2-3\n
        3. QoS \u7c7b\u578b\u4e3a LS \u7684 Pod, \u4f7f\u7528 CPU 4-15 \u6838\uff0c\u7ed1\u5b9a\u4e86\u4e0e LSE/LSR Pod \u72ec\u5360\u4e4b\u5916\u7684\u5171\u4eab CPU \u6c60\u3002

          [root@controller-node-1 ~]# ./get_cpuset.sh nginx-ls-54746c8cf8-rh4b7\nCPU set for Pod nginx-ls-54746c8cf8-rh4b7 (Burstable QoS): 4-15\n
        4. QoS \u7c7b\u578b\u4e3a BE \u7684 pod, \u53ef\u4f7f\u7528 LSE Pod \u72ec\u5360\u4e4b\u5916\u7684 CPU\u3002

          [root@controller-node-1 ~]# ./get_cpuset.sh nginx-be-577c946b89-js2qn\nCPU set for Pod nginx-be-577c946b89-js2qn (BestEffort QoS): 2,4-12\n
        "},{"location":"admin/kpanda/best-practice/co-located/install.html","title":"Koordinator \u79bb\u7ebf\u5b89\u88c5","text":"

        Koordinator \u662f\u4e00\u4e2a\u57fa\u4e8e QoS \u7684 Kubernetes \u6df7\u5408\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u7cfb\u7edf\u3002\u5b83\u65e8\u5728\u63d0\u9ad8\u5bf9\u5ef6\u8fdf\u654f\u611f\u7684\u5de5\u4f5c\u8d1f\u8f7d\u548c\u6279\u5904\u7406\u4f5c\u4e1a\u7684\u8fd0\u884c\u65f6\u6548\u7387\u548c\u53ef\u9760\u6027\uff0c \u7b80\u5316\u4e0e\u8d44\u6e90\u76f8\u5173\u7684\u914d\u7f6e\u8c03\u6574\u7684\u590d\u6742\u6027\uff0c\u5e76\u589e\u52a0 Pod \u90e8\u7f72\u5bc6\u5ea6\u4ee5\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u7387\u3002

        AI \u7b97\u529b\u4e2d\u5fc3\u9884\u7f6e\u4e86 Koordinator v1.5.0 \u79bb\u7ebf\u5305\u3002

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u79bb\u7ebf\u90e8\u7f72 Koordinator\u3002

        "},{"location":"admin/kpanda/best-practice/co-located/install.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        1. \u7528\u6237\u5df2\u7ecf\u5728\u5e73\u53f0\u4e0a\u5b89\u88c5\u4e86 v0.20.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u7684 addon \u79bb\u7ebf\u5305\u3002
        2. \u5f85\u5b89\u88c5\u96c6\u7fa4\u7684 Kubernetes version >= 1.18.
        3. \u4e3a\u4e86\u6700\u597d\u7684\u4f53\u9a8c\uff0c\u63a8\u8350\u4f7f\u7528 linux kernel 4.19 \u6216\u8005\u66f4\u9ad8\u7248\u672c\u3002
        "},{"location":"admin/kpanda/best-practice/co-located/install.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

        \u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 Koordinator \u63d2\u4ef6\u3002

        1. \u767b\u5f55\u5e73\u53f0\uff0c\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5f85\u5b89\u88c5 Koordinator \u7684\u96c6\u7fa4 -> \u8fdb\u5165\u96c6\u7fa4\u8be6\u60c5\u3002

        2. \u5728 Helm \u6a21\u677f \u9875\u9762\uff0c\u9009\u62e9 \u5168\u90e8\u4ed3\u5e93 \uff0c\u641c\u7d22 koordinator \u3002

        3. \u9009\u62e9 koordinator \uff0c\u70b9\u51fb \u5b89\u88c5 \u3002

        4. \u8fdb\u5165 koordinator \u5b89\u88c5\u9875\u9762\uff0c\u70b9\u51fb \u786e\u5b9a\uff0c\u4f7f\u7528\u9ed8\u8ba4\u914d\u7f6e\u5b89\u88c5 koordinator\u3002

        5. \u67e5\u770b koordinator-system \u547d\u540d\u7a7a\u95f4\u4e0b\u7684 Pod \u662f\u5426\u6b63\u5e38\u8fd0\u884c

        "},{"location":"admin/kpanda/clusterops/cluster-oversold.html","title":"\u96c6\u7fa4\u52a8\u6001\u8d44\u6e90\u8d85\u5356","text":"

        \u76ee\u524d\uff0c\u8bb8\u591a\u4e1a\u52a1\u5b58\u5728\u5cf0\u503c\u548c\u4f4e\u8c37\u7684\u73b0\u8c61\u3002\u4e3a\u4e86\u786e\u4fdd\u670d\u52a1\u7684\u6027\u80fd\u548c\u7a33\u5b9a\u6027\uff0c\u5728\u90e8\u7f72\u670d\u52a1\u65f6\uff0c\u901a\u5e38\u4f1a\u6839\u636e\u5cf0\u503c\u9700\u6c42\u6765\u7533\u8bf7\u8d44\u6e90\u3002 \u7136\u800c\uff0c\u5cf0\u503c\u671f\u53ef\u80fd\u975e\u5e38\u77ed\u6682\uff0c\u5bfc\u81f4\u5728\u975e\u5cf0\u503c\u671f\u65f6\u8d44\u6e90\u88ab\u6d6a\u8d39\u3002 \u96c6\u7fa4\u8d44\u6e90\u8d85\u5356 \u5c31\u662f\u5c06\u8fd9\u4e9b\u7533\u8bf7\u4e86\u800c\u672a\u4f7f\u7528\u7684\u8d44\u6e90\uff08\u5373\u7533\u8bf7\u91cf\u4e0e\u4f7f\u7528\u91cf\u7684\u5dee\u503c\uff09\u5229\u7528\u8d77\u6765\uff0c\u4ece\u800c\u63d0\u5347\u96c6\u7fa4\u8d44\u6e90\u5229\u7528\u7387\uff0c\u51cf\u5c11\u8d44\u6e90\u6d6a\u8d39\u3002

        \u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528\u96c6\u7fa4\u52a8\u6001\u8d44\u6e90\u8d85\u5356\u529f\u80fd\u3002

        "},{"location":"admin/kpanda/clusterops/cluster-oversold.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
        • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 Cluster Admin \uff0c \u8be6\u60c5\u53ef\u53c2\u8003\u96c6\u7fa4\u6388\u6743\u3002
        "},{"location":"admin/kpanda/clusterops/cluster-oversold.html#_3","title":"\u5f00\u542f\u96c6\u7fa4\u8d85\u5356","text":"
        1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762

        2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u8bbe\u7f6e \uff0c\u7136\u540e\u9009\u62e9 \u9ad8\u7ea7\u914d\u7f6e \u9875\u7b7e

        3. \u6253\u5f00\u96c6\u7fa4\u8d85\u5356\uff0c\u8bbe\u7f6e\u8d85\u5356\u6bd4

          • \u82e5\u672a\u5b89\u88c5 cro-operator \u63d2\u4ef6\uff0c\u70b9\u51fb \u7acb\u5373\u5b89\u88c5 \u6309\u94ae\uff0c\u5b89\u88c5\u6d41\u7a0b\u53c2\u8003\u7ba1\u7406 Helm \u5e94\u7528
          • \u82e5\u5df2\u5b89\u88c5 cro-operator \u63d2\u4ef6\uff0c\u6253\u5f00\u96c6\u7fa4\u8d85\u5356\u5f00\u5173\uff0c\u5219\u53ef\u4ee5\u5f00\u59cb\u4f7f\u7528\u96c6\u7fa4\u8d85\u5356\u529f\u80fd\u3002

          Note

          \u9700\u8981\u5728\u96c6\u7fa4\u4e0b\u5bf9\u5e94\u7684 namespace \u6253\u4e0a\u5982\u4e0b\u6807\u7b7e\uff0c\u96c6\u7fa4\u8d85\u5356\u7b56\u7565\u624d\u80fd\u751f\u6548\u3002

          clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: \"true\"\n

        "},{"location":"admin/kpanda/clusterops/cluster-oversold.html#_4","title":"\u4f7f\u7528\u96c6\u7fa4\u8d85\u5356","text":"

        \u8bbe\u7f6e\u597d\u96c6\u7fa4\u52a8\u6001\u8d44\u6e90\u8d85\u5356\u6bd4\u540e\uff0c\u4f1a\u5728\u5de5\u4f5c\u8d1f\u8f7d\u8fd0\u884c\u65f6\u751f\u6548\u3002\u4e0b\u6587\u4ee5 niginx \u4e3a\u4f8b\uff0c\u9a8c\u8bc1\u4f7f\u7528\u8d44\u6e90\u8d85\u5356\u80fd\u529b\u3002

        1. \u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d nginx \u5e76\u8bbe\u7f6e\u5bf9\u5e94\u7684\u8d44\u6e90\u9650\u5236\u503c\uff0c\u521b\u5efa\u6d41\u7a0b\u53c2\u8003\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09

        2. \u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u8d44\u6e90\u7533\u8bf7\u503c\u4e0e\u9650\u5236\u503c\u7684\u6bd4\u503c\u662f\u5426\u7b26\u5408\u8d85\u552e\u6bd4

        "},{"location":"admin/kpanda/clusterops/cluster-settings.html","title":"\u96c6\u7fa4\u8bbe\u7f6e","text":"

        \u96c6\u7fa4\u8bbe\u7f6e\u7528\u4e8e\u4e3a\u60a8\u7684\u96c6\u7fa4\u81ea\u5b9a\u4e49\u9ad8\u7ea7\u7279\u6027\u8bbe\u7f6e\uff0c\u5305\u62ec\u662f\u5426\u542f\u7528 GPU\u3001Helm \u4ed3\u5e93\u5237\u65b0\u5468\u671f\u3001Helm \u64cd\u4f5c\u8bb0\u5f55\u4fdd\u7559\u7b49\u3002

        • \u542f\u7528 GPU\uff1a\u9700\u8981\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU \u5361\u53ca\u5bf9\u5e94\u9a71\u52a8\u63d2\u4ef6\u3002

          \u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6700\u8fd1\u64cd\u4f5c -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \u3002

        • Helm \u64cd\u4f5c\u57fa\u7840\u955c\u50cf\u3001\u4ed3\u5e93\u5237\u65b0\u5468\u671f\u3001\u64cd\u4f5c\u8bb0\u5f55\u4fdd\u7559\u6761\u6570\u3001\u662f\u5426\u5f00\u542f\u96c6\u7fa4\u5220\u9664\u4fdd\u62a4\uff08\u5f00\u542f\u540e\u96c6\u7fa4\u5c06\u4e0d\u80fd\u76f4\u63a5\u5378\u8f7d\uff09

        "},{"location":"admin/kpanda/clusterops/latest-operations.html","title":"\u6700\u8fd1\u64cd\u4f5c","text":"

        \u5728\u8be5\u9875\u9762\u53ef\u4ee5\u67e5\u770b\u6700\u8fd1\u7684\u96c6\u7fa4\u64cd\u4f5c\u8bb0\u5f55\u548c Helm \u64cd\u4f5c\u8bb0\u5f55\uff0c\u4ee5\u53ca\u5404\u9879\u64cd\u4f5c\u7684 YAML \u6587\u4ef6\u548c\u65e5\u5fd7\uff0c\u4e5f\u53ef\u4ee5\u5220\u9664\u67d0\u4e00\u6761\u8bb0\u5f55\u3002

        \u8bbe\u7f6e Helm \u64cd\u4f5c\u7684\u4fdd\u7559\u6761\u6570\uff1a

        \u7cfb\u7edf\u9ed8\u8ba4\u4fdd\u7559\u6700\u8fd1 100 \u6761 Helm \u64cd\u4f5c\u8bb0\u5f55\u3002\u82e5\u4fdd\u7559\u6761\u6570\u592a\u591a\uff0c\u53ef\u80fd\u4f1a\u9020\u6210\u6570\u636e\u5197\u4f59\uff0c\u4fdd\u7559\u6761\u6570\u592a\u5c11\u53ef\u80fd\u4f1a\u9020\u6210\u60a8\u6240\u9700\u8981\u7684\u5173\u952e\u64cd\u4f5c\u8bb0\u5f55\u7684\u7f3a\u5931\u3002\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8bbe\u7f6e\u5408\u7406\u7684\u4fdd\u7559\u6570\u91cf\u3002\u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff1a

        1. \u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6700\u8fd1\u64cd\u4f5c -> Helm \u64cd\u4f5c -> \u8bbe\u7f6e\u4fdd\u7559\u6761\u6570 \u3002

        2. \u8bbe\u7f6e\u9700\u8981\u4fdd\u7559\u591a\u5c11\u6761 Helm \u64cd\u4f5c\u8bb0\u5f55\uff0c\u5e76\u70b9\u51fb \u786e\u5b9a \u3002

        "},{"location":"admin/kpanda/clusters/access-cluster.html","title":"\u8bbf\u95ee\u96c6\u7fa4","text":"

        \u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\uff0c\u4e0d\u4ec5\u53ef\u4ee5\u901a\u8fc7 UI \u754c\u9762\u76f4\u63a5\u8bbf\u95ee\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5176\u4ed6\u4e24\u79cd\u65b9\u5f0f\u8fdb\u884c\u8bbf\u95ee\u63a7\u5236\uff1a

        • \u901a\u8fc7 CloudShell \u5728\u7ebf\u8bbf\u95ee
        • \u4e0b\u8f7d\u96c6\u7fa4\u8bc1\u4e66\u540e\u901a\u8fc7 kubectl \u8fdb\u884c\u8bbf\u95ee

        Note

        \u8bbf\u95ee\u96c6\u7fa4\u65f6\uff0c\u7528\u6237\u5e94\u5177\u6709 Cluster Admin \u6743\u9650\u6216\u66f4\u9ad8\u6743\u9650\u3002

        "},{"location":"admin/kpanda/clusters/access-cluster.html#cloudshell","title":"\u901a\u8fc7 CloudShell \u8bbf\u95ee","text":"
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9009\u62e9\u9700\u8981\u901a\u8fc7 CloudShell \u8bbf\u95ee\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u56fe\u6807\u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb \u63a7\u5236\u53f0 \u3002

        2. \u5728 CloudShell \u63a7\u5236\u53f0\u6267\u884c kubectl get node \u547d\u4ee4\uff0c\u9a8c\u8bc1 CloudShell \u4e0e\u96c6\u7fa4\u7684\u8fde\u901a\u6027\u3002\u5982\u56fe\uff0c\u63a7\u5236\u53f0\u5c06\u8fd4\u56de\u96c6\u7fa4\u4e0b\u7684\u8282\u70b9\u4fe1\u606f\u3002

        \u73b0\u5728\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 CloudShell \u6765\u8bbf\u95ee\u5e76\u7ba1\u7406\u8be5\u96c6\u7fa4\u4e86\u3002

        "},{"location":"admin/kpanda/clusters/access-cluster.html#kubectl","title":"\u901a\u8fc7 kubectl \u8bbf\u95ee","text":"

        \u901a\u8fc7\u672c\u5730\u8282\u70b9\u8bbf\u95ee\u5e76\u7ba1\u7406\u4e91\u7aef\u96c6\u7fa4\u65f6\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\uff1a

        • \u672c\u5730\u8282\u70b9\u548c\u4e91\u7aef\u96c6\u7fa4\u7684\u7f51\u7edc\u4e92\u8054\u4e92\u901a\u3002
        • \u5df2\u7ecf\u5c06\u96c6\u7fa4\u8bc1\u4e66\u4e0b\u8f7d\u5230\u4e86\u672c\u5730\u8282\u70b9\u3002
        • \u672c\u5730\u8282\u70b9\u5df2\u7ecf\u5b89\u88c5\u4e86 kubectl \u5de5\u5177\u3002\u5173\u4e8e\u8be6\u7ec6\u7684\u5b89\u88c5\u65b9\u5f0f\uff0c\u8bf7\u53c2\u9605\u5b89\u88c5 kubectl\u3002

        \u6ee1\u8db3\u4e0a\u8ff0\u6761\u4ef6\u540e\uff0c\u6309\u7167\u4e0b\u65b9\u6b65\u9aa4\u4ece\u672c\u5730\u8bbf\u95ee\u4e91\u7aef\u96c6\u7fa4\uff1a

        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9009\u62e9\u9700\u8981\u4e0b\u8f7d\u8bc1\u4e66\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \uff0c\u5e76\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u70b9\u51fb \u8bc1\u4e66\u83b7\u53d6 \u3002

        2. \u9009\u62e9\u8bc1\u4e66\u6709\u6548\u671f\u5e76\u70b9\u51fb \u4e0b\u8f7d\u8bc1\u4e66 \u3002

        3. \u6253\u5f00\u4e0b\u8f7d\u597d\u7684\u96c6\u7fa4\u8bc1\u4e66\uff0c\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u81f3\u672c\u5730\u8282\u70b9\u7684 config \u6587\u4ef6\u3002

          kubectl \u5de5\u5177\u9ed8\u8ba4\u4f1a\u4ece\u672c\u5730\u8282\u70b9\u7684 $HOME/.kube \u76ee\u5f55\u4e0b\u67e5\u627e\u540d\u4e3a config \u7684\u6587\u4ef6\u3002\u8be5\u6587\u4ef6\u5b58\u50a8\u4e86\u76f8\u5173\u96c6\u7fa4\u7684\u8bbf\u95ee\u51ed\u8bc1\uff0ckubectl \u53ef\u4ee5\u51ed\u8be5\u914d\u7f6e\u6587\u4ef6\u8fde\u63a5\u81f3\u96c6\u7fa4\u3002

        4. \u5728\u672c\u5730\u8282\u70b9\u4e0a\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u9a8c\u8bc1\u96c6\u7fa4\u7684\u8fde\u901a\u6027\uff1a

          kubectl get pod -n default\n

          \u9884\u671f\u7684\u8f93\u51fa\u7c7b\u4f3c\u4e8e:

          NAME                            READY   STATUS      RESTARTS    AGE\ndao-2048-2048-58c7f7fc5-mq7h4   1/1     Running     0           30h\n

        \u73b0\u5728\u60a8\u53ef\u4ee5\u5728\u672c\u5730\u901a\u8fc7 kubectl \u8bbf\u95ee\u5e76\u7ba1\u7406\u8be5\u96c6\u7fa4\u4e86\u3002

        "},{"location":"admin/kpanda/clusters/cluster-role.html","title":"\u96c6\u7fa4\u89d2\u8272","text":"

        \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u57fa\u4e8e\u96c6\u7fa4\u7684\u4e0d\u540c\u529f\u80fd\u5b9a\u4f4d\u5bf9\u96c6\u7fa4\u8fdb\u884c\u4e86\u89d2\u8272\u5206\u7c7b\uff0c\u5e2e\u52a9\u7528\u6237\u66f4\u597d\u5730\u7ba1\u7406 IT \u57fa\u7840\u8bbe\u65bd\u3002

        "},{"location":"admin/kpanda/clusters/cluster-role.html#_2","title":"\u5168\u5c40\u670d\u52a1\u96c6\u7fa4","text":"

        \u6b64\u96c6\u7fa4\u7528\u4e8e\u8fd0\u884c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7ec4\u4ef6\uff0c\u4f8b\u5982\u5bb9\u5668\u7ba1\u7406\u3001\u5168\u5c40\u7ba1\u7406\u3001\u53ef\u89c2\u6d4b\u6027\u3001\u955c\u50cf\u4ed3\u5e93\u7b49\u3002 \u4e00\u822c\u4e0d\u627f\u8f7d\u4e1a\u52a1\u8d1f\u8f7d\u3002

        \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c 1.22+ \u64cd\u4f5c\u7cfb\u7edf RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86\uff1bUbuntu 18.04 x86, Ubuntu 20.04 x86\uff1bCentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc Calico\u3001Cillium\u3001Multus \u548c\u5176\u5b83 CNI \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565"},{"location":"admin/kpanda/clusters/cluster-role.html#_3","title":"\u7ba1\u7406\u96c6\u7fa4","text":"

        \u6b64\u96c6\u7fa4\u7528\u4e8e\u7ba1\u7406\u5de5\u4f5c\u96c6\u7fa4\uff0c\u4e00\u822c\u4e0d\u627f\u8f7d\u4e1a\u52a1\u8d1f\u8f7d\u3002

        • \u7ecf\u5178\u6a21\u5f0f\u5c06\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u548c\u7ba1\u7406\u96c6\u7fa4\u90e8\u7f72\u5728\u4e0d\u540c\u7684\u96c6\u7fa4\uff0c\u9002\u7528\u4e8e\u4f01\u4e1a\u591a\u6570\u636e\u4e2d\u5fc3\u3001\u591a\u67b6\u6784\u7684\u573a\u666f\u3002
        • \u7b80\u7ea6\u6a21\u5f0f\u5c06\u7ba1\u7406\u96c6\u7fa4\u548c\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u90e8\u7f72\u5728\u540c\u4e00\u4e2a\u96c6\u7fa4\u5185\u3002
        \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c 1.22+ \u64cd\u4f5c\u7cfb\u7edf RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86\uff1bUbuntu 18.04 x86, Ubuntu 20.04 x86\uff1bCentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc Calico\u3001Cillium\u3001Multus \u548c\u5176\u5b83 CNI \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565"},{"location":"admin/kpanda/clusters/cluster-role.html#_4","title":"\u5de5\u4f5c\u96c6\u7fa4","text":"

        \u8fd9\u662f\u4f7f\u7528\u5bb9\u5668\u7ba1\u7406\u521b\u5efa\u7684\u96c6\u7fa4\uff0c\u4e3b\u8981\u7528\u4e8e\u627f\u8f7d\u4e1a\u52a1\u8d1f\u8f7d\u3002\u8be5\u96c6\u7fa4\u7531\u7ba1\u7406\u96c6\u7fa4\u8fdb\u884c\u7ba1\u7406\u3002

        \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c \u652f\u6301 K8s 1.22 \u53ca\u4ee5\u4e0a\u7248\u672c \u64cd\u4f5c\u7cfb\u7edf RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86\uff1bUbuntu 18.04 x86, Ubuntu 20.04 x86\uff1bCentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc Calico\u3001Cillium\u3001Multus \u548c\u5176\u5b83 CNI \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565"},{"location":"admin/kpanda/clusters/cluster-role.html#_5","title":"\u63a5\u5165\u96c6\u7fa4","text":"

        \u6b64\u96c6\u7fa4\u7528\u4e8e\u63a5\u5165\u5df2\u6709\u7684\u6807\u51c6 K8s \u96c6\u7fa4\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\u672c\u5730\u6570\u636e\u4e2d\u5fc3\u81ea\u5efa\u96c6\u7fa4\u3001\u516c\u6709\u4e91\u5382\u5546\u63d0\u4f9b\u7684\u96c6\u7fa4\u3001\u79c1\u6709\u4e91\u5382\u5546\u63d0\u4f9b\u7684\u96c6\u7fa4\u3001\u8fb9\u7f18\u96c6\u7fa4\u3001\u4fe1\u521b\u96c6\u7fa4\u3001\u5f02\u6784\u96c6\u7fa4\u3002\u4e3b\u8981\u7528\u4e8e\u627f\u62c5\u4e1a\u52a1\u8d1f\u8f7d\u3002

        \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c 1.18+ \u652f\u6301\u53cb\u5546 Vmware Tanzu\u3001Amazon EKS\u3001Redhat Openshift\u3001SUSE Rancher\u3001\u963f\u91cc ACK\u3001\u534e\u4e3a CCE\u3001\u817e\u8baf TKE\u3001\u6807\u51c6 K8s \u96c6\u7fa4\u3001\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u4e0d\u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc \u4f9d\u8d56\u4e8e\u63a5\u5165\u96c6\u7fa4\u53d1\u884c\u7248\u7f51\u7edc\u6a21\u5f0f \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565

        Note

        \u4e00\u4e2a\u96c6\u7fa4\u53ef\u4ee5\u6709\u591a\u4e2a\u96c6\u7fa4\u89d2\u8272\uff0c\u4f8b\u5982\u4e00\u4e2a\u96c6\u7fa4\u65e2\u53ef\u4ee5\u662f\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\uff0c\u4e5f\u53ef\u4ee5\u662f\u7ba1\u7406\u96c6\u7fa4\u6216\u5de5\u4f5c\u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/clusters/cluster-scheduler-plugin.html","title":"\u5982\u4f55\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u7b2c\u4e8c\u8c03\u5ea6\u5668 scheduler-plugins","text":"

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u7b2c\u4e8c\u4e2a\u8c03\u5ea6\u5668 scheduler-plugins\u3002

        "},{"location":"admin/kpanda/clusters/cluster-scheduler-plugin.html#scheduler-plugins_1","title":"\u4e3a\u4ec0\u4e48\u9700\u8981 scheduler-plugins\uff1f","text":"

        \u901a\u8fc7\u5e73\u53f0\u521b\u5efa\u7684\u96c6\u7fa4\u4e2d\u4f1a\u5b89\u88c5 K8s \u539f\u751f\u7684\u8c03\u5ea6\u5668\uff0c\u4f46\u662f\u539f\u751f\u7684\u8c03\u5ea6\u5668\u5b58\u5728\u5f88\u591a\u7684\u5c40\u9650\u6027\uff1a

        • \u539f\u751f\u7684\u8c03\u5ea6\u5668\u65e0\u6cd5\u6ee1\u8db3\u8c03\u5ea6\u9700\u6c42\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528 CoScheduling\u3001 CapacityScheduling \u7b49 scheduler-plugins \u63d2\u4ef6\u3002
        • \u5728\u7279\u6b8a\u7684\u573a\u666f\uff0c\u9700\u8981\u65b0\u7684\u8c03\u5ea6\u5668\u6765\u5b8c\u6210\u8c03\u5ea6\u4efb\u52a1\u800c\u4e0d\u5f71\u54cd\u539f\u751f\u8c03\u5ea6\u5668\u7684\u6d41\u7a0b\u3002
        • \u533a\u5206\u4e0d\u540c\u529f\u80fd\u7684\u8c03\u5ea6\u5668\uff0c\u901a\u8fc7\u5207\u6362\u8c03\u5ea6\u5668\u540d\u79f0\u6765\u5b9e\u73b0\u4e0d\u540c\u7684\u8c03\u5ea6\u573a\u666f\u3002

        \u672c\u6587\u4ee5\u4f7f\u7528 vgpu \u8c03\u5ea6\u5668\u7684\u540c\u65f6\uff0c\u60f3\u7ed3\u5408 scheduler-plugins \u7684 coscheduling \u63d2\u4ef6\u80fd\u529b\u7684\u573a\u666f\u4e3a\u793a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5\u5e76\u4f7f\u7528 scheduler-plugins\u3002

        "},{"location":"admin/kpanda/clusters/cluster-scheduler-plugin.html#scheduler-plugins_2","title":"\u5b89\u88c5 scheduler-plugins","text":""},{"location":"admin/kpanda/clusters/cluster-scheduler-plugin.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
        • kubean \u662f\u5728 v0.13.0 \u7248\u672c\u63a8\u51fa\u7684\u65b0\u529f\u80fd\uff0c\u9009\u62e9\u7ba1\u7406\u96c6\u7fa4\u65f6\u8bf7\u786e\u4fdd\u7248\u672c\u4e0d\u4f4e\u4e8e\u6b64\u7248\u672c\u3002
        • \u5b89\u88c5 scheduler-plugins \u7248\u672c\u4e3a v0.27.8\uff0c\u8bf7\u786e\u4fdd\u96c6\u7fa4\u7248\u672c\u662f\u5426\u4e0e\u5b83\u517c\u5bb9\u3002 \u53c2\u8003\u6587\u6863 Compatibility Matrix\u3002
        "},{"location":"admin/kpanda/clusters/cluster-scheduler-plugin.html#_2","title":"\u5b89\u88c5\u6d41\u7a0b","text":"
        1. \u5728 \u521b\u5efa\u96c6\u7fa4 -> \u9ad8\u7ea7\u914d\u7f6e -> \u81ea\u5b9a\u4e49\u53c2\u6570 \u4e2d\u6dfb\u52a0 scheduler-plugins \u53c2\u6570

          scheduler_plugins_enabled:true\nscheduler_plugins_plugin_config:\n  - name: Coscheduling\n    args:\n      permitWaitingTimeSeconds: 10 # default is 60\n

          \u53c2\u6570\u8bf4\u660e\uff1a

          • scheduler_plugins_enabled \u8bbe\u7f6e\u4e3a true \u65f6\uff0c\u5f00\u542f scheduler-plugins \u63d2\u4ef6\u80fd\u529b\u3002
          • \u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e scheduler_plugins_enabled_plugins \u6216 scheduler_plugins_disabled_plugins \u9009\u9879\u6765\u542f\u7528\u6216\u7981\u7528\u67d0\u4e9b\u63d2\u4ef6\u3002 \u53c2\u9605 K8s \u5b98\u65b9\u63d2\u4ef6\u540d\u79f0\u3002
          • \u5982\u679c\u9700\u8981\u8bbe\u7f6e\u81ea\u5b9a\u4e49\u63d2\u4ef6\u7684\u53c2\u6570\u8bf7\u914d\u7f6e scheduler_plugins_plugin_config\uff0c\u4f8b\u5982\uff1a\u8bbe\u7f6e coscheduling \u7684 permitWaitingTimeoutSeconds \u53c2\u6570\u3002 \u53c2\u9605 K8s \u5b98\u65b9\u63d2\u4ef6\u914d\u7f6e\u9879
        2. \u96c6\u7fa4\u521b\u5efa\u6210\u529f\u540e\u7cfb\u7edf\u4f1a\u81ea\u52a8\u5b89\u88c5 scheduler-plugins \u548c controller \u7ec4\u4ef6\u8d1f\u8f7d\uff0c\u53ef\u4ee5\u5728\u5bf9\u5e94\u96c6\u7fa4\u7684\u65e0\u72b6\u6001\u8d1f\u8f7d\u4e2d\u67e5\u770b\u8d1f\u8f7d\u72b6\u6001\u3002

        "},{"location":"admin/kpanda/clusters/cluster-scheduler-plugin.html#scheduler-plugins_3","title":"\u4f7f\u7528 scheduler-plugins","text":"

        \u4ee5\u4e0b\u4ee5\u4f7f\u7528 vgpu \u8c03\u5ea6\u5668\u7684\u540c\u65f6\uff0c\u60f3\u7ed3\u5408 scheduler-plugins \u7684 coscheduling \u63d2\u4ef6\u80fd\u529b\u573a\u666f\u4e3a\u793a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 scheduler-plugins\u3002

        1. \u5728 Helm \u6a21\u677f\u4e2d\u5b89\u88c5 vgpu\uff0c\u8bbe\u7f6e values.yaml \u53c2\u6570\u3002

          • schedulerName: scheduler-plugins-scheduler\uff0c\u8fd9\u662f kubean \u9ed8\u8ba4\u5b89\u88c5\u7684 scheduler-plugins \u7684 scheduler \u540d\u79f0\uff0c\u76ee\u524d\u4e0d\u80fd\u4fee\u6539\u3002
          • scheduler.kubeScheduler.enabled: false\uff0c\u4e0d\u5b89\u88c5 kube-scheduler\uff0c\u5c06 vgpu-scheduler \u4f5c\u4e3a\u5355\u72ec\u7684 extender\u3002
        2. \u5728 scheduler-plugins \u4e0a\u6269\u5c55 vgpu-scheduler\u3002

          [root@master01 charts]# kubectl get cm -n scheduler-plugins scheduler-config -ojsonpath=\"{.data.scheduler-config\\.yaml}\"\n
          apiVersion: kubescheduler.config.k8s.io/v1\nkind: KubeSchedulerConfiguration\nleaderElection:\n  leaderElect: false\nprofiles:\n  # Compose all plugins in one profile\n  - schedulerName: scheduler-plugins-scheduler\n    plugins:\n      multiPoint:\n        enabled:\n          - name: Coscheduling\n          - name: CapacityScheduling\n          - name: NodeResourceTopologyMatch\n          - name: NodeResourcesAllocatable\n        disabled:\n          - name: PrioritySort\npluginConfig:\n  - args:\n      permitWaitingTimeSeconds: 10\n    name: Coscheduling\n

          \u4fee\u6539 scheduler-plugins \u7684 scheduler-config \u7684 configmap \u53c2\u6570\uff0c\u5982\u4e0b\uff1a

          [root@master01 charts]# kubectl get cm -n scheduler-plugins scheduler-config -ojsonpath=\"{.data.scheduler-config\\.yaml}\"\n
          apiVersion: kubescheduler.config.k8s.io/v1\nkind: KubeSchedulerConfiguration\nleaderElection:\n  leaderElect: false\nprofiles:\n  # Compose all plugins in one profile\n  - schedulerName: scheduler-plugins-scheduler\n    plugins:\n      multiPoint:\n        enabled:\n          - name: Coscheduling\n          - name: CapacityScheduling\n          - name: NodeResourceTopologyMatch\n          - name: NodeResourcesAllocatable\n        disabled:\n          - name: PrioritySort\npluginConfig:\n  - args:\n      permitWaitingTimeSeconds: 10\n    name: Coscheduling\nextenders:\n  - urlPrefix: \"${urlPrefix}\"\n    filterVerb: filter\n    bindVerb: bind\n    nodeCacheCapable: true\n    ignorable: true\n    httpTimeout: 30s\n    weight: 1\n    enableHTTPS: true\n    tlsConfig:\n      insecure: true\n    managedResources:\n      - name: nvidia.com/vgpu\n        ignoredByScheduler: true\n      - name: nvidia.com/gpumem\n        ignoredByScheduler: true\n      - name: nvidia.com/gpucores\n        ignoredByScheduler: true\n      - name: nvidia.com/gpumem-percentage\n        ignoredByScheduler: true\n      - name: nvidia.com/priority\n        ignoredByScheduler: true\n      - name: cambricon.com/mlunum\n        ignoredByScheduler: true\n
        3. \u5b89\u88c5\u5b8c vgpu-scheduler \u540e\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u521b\u5efa svc\uff0curlPrefix \u6307\u5b9a svc \u7684 URL\u3002

          Note

          • svc \u6307 pod \u670d\u52a1\u8d1f\u8f7d\uff0c\u60a8\u53ef\u4ee5\u5230\u5b89\u88c5\u4e86 nvidia-vgpu \u63d2\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\u4e0b\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u62ff\u5230 443 \u7aef\u53e3\u5bf9\u5e94\u7684\u5916\u90e8\u8bbf\u95ee\u4fe1\u606f\u3002

            kubectl get svc -n ${namespace} \n
          • urlprifix \u683c\u5f0f\u4e3a https://${ip \u5730\u5740}:${\u7aef\u53e3}

        4. \u5c06 scheduler-plugins \u7684 scheduler Pod \u91cd\u542f\uff0c\u52a0\u8f7d\u65b0\u7684\u914d\u7f6e\u6587\u4ef6\u3002

          Note

          \u5728\u521b\u5efa vgpu \u5e94\u7528\u65f6\u4e0d\u9700\u8981\u6307\u5b9a\u8c03\u5ea6\u5668\u540d\u79f0\uff0cvgpu-scheduler \u7684 Webhook \u4f1a\u81ea\u52a8\u5c06 Scheduler \u7684\u540d\u79f0\u4fee\u6539\u4e3a scheduler-plugins-scheduler\uff0c\u4e0d\u7528\u624b\u52a8\u6307\u5b9a\u3002

        "},{"location":"admin/kpanda/clusters/cluster-status.html","title":"\u96c6\u7fa4\u72b6\u6001","text":"

        \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u7eb3\u7ba1\u4e24\u79cd\u7c7b\u578b\u7684\u96c6\u7fa4\uff1a\u63a5\u5165\u96c6\u7fa4\u548c\u81ea\u5efa\u96c6\u7fa4\u3002 \u5173\u4e8e\u96c6\u7fa4\u7eb3\u7ba1\u7c7b\u578b\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1\u96c6\u7fa4\u89d2\u8272\u3002

        \u8fd9\u4e24\u79cd\u96c6\u7fa4\u7684\u72b6\u6001\u5982\u4e0b\u6240\u8ff0\u3002

        "},{"location":"admin/kpanda/clusters/cluster-status.html#_2","title":"\u63a5\u5165\u96c6\u7fa4","text":"\u72b6\u6001 \u63cf\u8ff0 \u63a5\u5165\u4e2d\uff08Joining\uff09 \u96c6\u7fa4\u6b63\u5728\u63a5\u5165 \u89e3\u9664\u63a5\u5165\u4e2d\uff08Removing\uff09 \u96c6\u7fa4\u6b63\u5728\u89e3\u9664\u63a5\u5165 \u8fd0\u884c\u4e2d\uff08Running\uff09 \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c \u672a\u77e5\uff08Unknown\uff09 \u96c6\u7fa4\u5df2\u5931\u8054\uff0c\u7cfb\u7edf\u5c55\u793a\u6570\u636e\u4e3a\u5931\u8054\u524d\u7f13\u5b58\u6570\u636e\uff0c\u4e0d\u4ee3\u8868\u771f\u5b9e\u6570\u636e\uff0c\u540c\u65f6\u5931\u8054\u72b6\u6001\u4e0b\u6267\u884c\u7684\u4efb\u4f55\u64cd\u4f5c\u90fd\u5c06\u4e0d\u751f\u6548\uff0c\u8bf7\u68c0\u67e5\u96c6\u7fa4\u7f51\u7edc\u8fde\u901a\u6027\u6216\u4e3b\u673a\u72b6\u6001\u3002"},{"location":"admin/kpanda/clusters/cluster-status.html#_3","title":"\u81ea\u5efa\u96c6\u7fa4","text":"\u72b6\u6001 \u63cf\u8ff0 \u521b\u5efa\u4e2d\uff08Creating\uff09 \u96c6\u7fa4\u6b63\u5728\u521b\u5efa \u66f4\u65b0\u4e2d\uff08Updating\uff09 \u66f4\u65b0\u96c6\u7fa4 Kubernetes \u7248\u672c \u5220\u9664\u4e2d\uff08Deleting\uff09 \u96c6\u7fa4\u6b63\u5728\u5220\u9664 \u8fd0\u884c\u4e2d\uff08Running\uff09 \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c \u672a\u77e5\uff08Unknown\uff09 \u96c6\u7fa4\u5df2\u5931\u8054\uff0c\u7cfb\u7edf\u5c55\u793a\u6570\u636e\u4e3a\u5931\u8054\u524d\u7f13\u5b58\u6570\u636e\uff0c\u4e0d\u4ee3\u8868\u771f\u5b9e\u6570\u636e\uff0c\u540c\u65f6\u5931\u8054\u72b6\u6001\u4e0b\u6267\u884c\u7684\u4efb\u4f55\u64cd\u4f5c\u90fd\u5c06\u4e0d\u751f\u6548\uff0c\u8bf7\u68c0\u67e5\u96c6\u7fa4\u7f51\u7edc\u8fde\u901a\u6027\u6216\u4e3b\u673a\u72b6\u6001\u3002 \u521b\u5efa\u5931\u8d25\uff08Failed\uff09 \u96c6\u7fa4\u521b\u5efa\u5931\u8d25\uff0c\u8bf7\u67e5\u770b\u65e5\u5fd7\u4ee5\u83b7\u53d6\u8be6\u7ec6\u5931\u8d25\u539f\u56e0"},{"location":"admin/kpanda/clusters/cluster-version.html","title":"\u96c6\u7fa4\u7248\u672c\u652f\u6301\u8303\u56f4","text":"

        \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\uff0c\u63a5\u5165\u578b\u96c6\u7fa4\u548c\u81ea\u5efa\u96c6\u7fa4\u91c7\u53d6\u4e0d\u540c\u7684\u7248\u672c\u652f\u6301\u673a\u5236\u3002

        \u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u81ea\u5efa\u96c6\u7fa4\u7684\u7248\u672c\u652f\u6301\u673a\u5236\u3002

        Kubernetes \u793e\u533a\u652f\u6301 3 \u4e2a\u7248\u672c\u8303\u56f4\uff0c\u5982 1.26\u30011.27\u30011.28\u3002\u5f53\u793e\u533a\u65b0\u7248\u672c\u53d1\u5e03\u4e4b\u540e\uff0c\u652f\u6301\u7684\u7248\u672c\u8303\u56f4\u5c06\u4f1a\u8fdb\u884c\u9012\u589e\u3002 \u5982\u793e\u533a\u6700\u65b0\u7684 1.29 \u7248\u672c\u5df2\u7ecf\u53d1\u5e03\uff0c\u6b64\u65f6\u793e\u533a\u652f\u6301\u7684\u7248\u672c\u8303\u56f4\u662f 1.27\u30011.28\u30011.29\u3002

        \u4f8b\u5982\uff0c\u793e\u533a\u652f\u6301\u7684\u7248\u672c\u8303\u56f4\u662f 1.25\u30011.26\u30011.27\uff0c\u5219\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u754c\u9762\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u7248\u672c\u8303\u56f4\u662f 1.24\u30011.25\u30011.26\uff0c\u5e76\u4e14\u4f1a\u4e3a\u7528\u6237\u63a8\u8350\u4e00\u4e2a\u7a33\u5b9a\u7684\u7248\u672c\uff0c\u5982 1.24.7\u3002

        \u9664\u6b64\u4e4b\u5916\uff0c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u754c\u9762\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u7248\u672c\u8303\u56f4\u4e0e\u793e\u533a\u4fdd\u6301\u9ad8\u5ea6\u540c\u6b65\uff0c\u5f53\u793e\u533a\u7248\u672c\u8fdb\u884c\u9012\u589e\u540e\uff0c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u754c\u9762\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u7248\u672c\u8303\u56f4\u4e5f\u4f1a\u540c\u6b65\u9012\u589e\u4e00\u4e2a\u7248\u672c\u3002

        "},{"location":"admin/kpanda/clusters/cluster-version.html#kubernetes","title":"Kubernetes \u7248\u672c\u652f\u6301\u8303\u56f4","text":"Kubernetes \u793e\u533a\u7248\u672c\u8303\u56f4 \u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7248\u672c\u8303\u56f4 \u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u63a8\u8350\u7248\u672c \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5b89\u88c5\u5668 \u53d1\u5e03\u65f6\u95f4
        • 1.26
        • 1.27
        • 1.28
        • 1.25
        • 1.26
        • 1.27
        1.27.5 v0.13.0 2023.11.30"},{"location":"admin/kpanda/clusters/create-cluster.html","title":"\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4","text":"

        \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\uff0c\u96c6\u7fa4\u89d2\u8272\u5206\u56db\u7c7b\uff1a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u3001\u7ba1\u7406\u96c6\u7fa4\u3001\u5de5\u4f5c\u96c6\u7fa4\u3001\u63a5\u5165\u96c6\u7fa4\u3002 \u5176\u4e2d\uff0c\u63a5\u5165\u96c6\u7fa4\u53ea\u80fd\u4ece\u7b2c\u4e09\u65b9\u5382\u5546\u63a5\u5165\uff0c\u53c2\u89c1\u63a5\u5165\u96c6\u7fa4\u3002

        \u672c\u9875\u4ecb\u7ecd\u5982\u4f55\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u65b0\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u5de5\u4f5c\u8282\u70b9 OS \u7c7b\u578b\u548c CPU \u67b6\u6784\u9700\u8981\u4e0e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4fdd\u6301\u4e00\u81f4\u3002 \u5982\u9700\u4f7f\u7528\u533a\u522b\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4 OS \u6216\u67b6\u6784\u7684\u8282\u70b9\u521b\u5efa\u96c6\u7fa4\uff0c\u53c2\u9605\u5728 centos \u7ba1\u7406\u5e73\u53f0\u4e0a\u521b\u5efa ubuntu \u5de5\u4f5c\u96c6\u7fa4\u8fdb\u884c\u521b\u5efa\u3002

        \u63a8\u8350\u4f7f\u7528 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u7684\u64cd\u4f5c\u7cfb\u7edf\u6765\u521b\u5efa\u96c6\u7fa4\u3002 \u5982\u60a8\u672c\u5730\u8282\u70b9\u4e0d\u5728\u4e0a\u8ff0\u652f\u6301\u8303\u56f4\uff0c\u53ef\u53c2\u8003\u5728\u975e\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u521b\u5efa\u96c6\u7fa4\u8fdb\u884c\u521b\u5efa\u3002

        "},{"location":"admin/kpanda/clusters/create-cluster.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

        \u521b\u5efa\u96c6\u7fa4\u4e4b\u524d\u9700\u8981\u6ee1\u8db3\u4e00\u5b9a\u7684\u524d\u63d0\u6761\u4ef6\uff1a

        • \u6839\u636e\u4e1a\u52a1\u9700\u6c42\u51c6\u5907\u4e00\u5b9a\u6570\u91cf\u7684\u8282\u70b9\uff0c\u4e14\u8282\u70b9 OS \u7c7b\u578b\u548c CPU \u67b6\u6784\u4e00\u81f4\u3002
        • \u63a8\u8350 Kubernetes \u7248\u672c 1.29.5\uff0c\u5177\u4f53\u7248\u672c\u8303\u56f4\uff0c\u53c2\u9605 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u96c6\u7fa4\u7248\u672c\u652f\u6301\u4f53\u7cfb\uff0c \u76ee\u524d\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7248\u672c\u8303\u56f4\u5728 v1.28.0-v1.30.2\u3002\u5982\u9700\u521b\u5efa\u4f4e\u7248\u672c\u7684\u96c6\u7fa4\uff0c\u8bf7\u53c2\u8003\u96c6\u7fa4\u7248\u672c\u652f\u6301\u8303\u56f4\u3001\u90e8\u7f72\u4e0e\u5347\u7ea7 Kubean \u5411\u4e0b\u517c\u5bb9\u7248\u672c\u3002
        • \u76ee\u6807\u4e3b\u673a\u9700\u8981\u5141\u8bb8 IPv4 \u8f6c\u53d1\u3002\u5982\u679c Pod \u548c Service \u4f7f\u7528\u7684\u662f IPv6\uff0c\u5219\u76ee\u6807\u670d\u52a1\u5668\u9700\u8981\u5141\u8bb8 IPv6 \u8f6c\u53d1\u3002
        • \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u6682\u4e0d\u63d0\u4f9b\u5bf9\u9632\u706b\u5899\u7684\u7ba1\u7406\u529f\u80fd\uff0c\u60a8\u9700\u8981\u9884\u5148\u81ea\u884c\u5b9a\u4e49\u76ee\u6807\u4e3b\u673a\u9632\u706b\u5899\u89c4\u5219\u3002\u4e3a\u4e86\u907f\u514d\u521b\u5efa\u96c6\u7fa4\u7684\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u95ee\u9898\uff0c\u5efa\u8bae\u7981\u7528\u76ee\u6807\u4e3b\u673a\u7684\u9632\u706b\u5899\u3002
        • \u53c2\u9605\u8282\u70b9\u53ef\u7528\u6027\u68c0\u67e5\u3002
        "},{"location":"admin/kpanda/clusters/create-cluster.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u4e2d\uff0c\u70b9\u51fb \u521b\u5efa\u96c6\u7fa4 \u6309\u94ae\u3002

        2. \u53c2\u8003\u4e0b\u5217\u8981\u6c42\u586b\u5199\u96c6\u7fa4\u57fa\u672c\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

          • \u96c6\u7fa4\u540d\u79f0\uff1a\u540d\u79f0\u53ea\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u8fde\u5b57\u7b26\uff08\"-\"\uff09\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u8005\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002
          • \u88ab\u7eb3\u7ba1\uff1a\u9009\u62e9\u7531\u54ea\u4e2a\u96c6\u7fa4\u6765\u7ba1\u7406\u6b64\u96c6\u7fa4\uff0c\u4f8b\u5982\u5728\u96c6\u7fa4\u751f\u547d\u5468\u671f\u4e2d\u521b\u5efa\u3001\u5347\u7ea7\u3001\u8282\u70b9\u6269\u7f29\u5bb9\u3001\u5220\u9664\u96c6\u7fa4\u7b49\u3002
          • \u8fd0\u884c\u65f6\uff1a\u9009\u62e9\u96c6\u7fa4\u7684\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u76ee\u524d\u652f\u6301 containerd \u548c docker\uff0c\u5982\u4f55\u9009\u62e9\u5bb9\u5668\u8fd0\u884c\u65f6\u3002
          • Kubernetes \u7248\u672c\uff1a\u652f\u6301 3 \u4e2a\u7248\u672c\u8de8\u5ea6\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u88ab\u7eb3\u7ba1\u96c6\u7fa4\u6240\u652f\u6301\u7684\u7248\u672c\u3002

        3. \u586b\u5199\u8282\u70b9\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

          • \u9ad8\u53ef\u7528\uff1a\u5f00\u542f\u540e\u9700\u8981\u63d0\u4f9b\u81f3\u5c11 3 \u4e2a\u63a7\u5236\u5668\u8282\u70b9\u3002\u5173\u95ed\u540e\uff0c\u53ea\u63d0\u4f9b 1 \u4e2a\u63a7\u5236\u5668\u8282\u70b9\u5373\u53ef\u3002

            \u751f\u4ea7\u73af\u5883\u4e2d\u5efa\u8bae\u4f7f\u7528\u9ad8\u53ef\u7528\u6a21\u5f0f\u3002

          • \u8ba4\u8bc1\u65b9\u5f0f\uff1a\u9009\u62e9\u901a\u8fc7\u7528\u6237\u540d/\u5bc6\u7801\u8fd8\u662f\u516c\u79c1\u94a5\u8bbf\u95ee\u8282\u70b9\u3002

            \u5982\u679c\u4f7f\u7528\u516c\u79c1\u94a5\u65b9\u5f0f\u8bbf\u95ee\u8282\u70b9\uff0c\u9700\u8981\u9884\u5148\u914d\u7f6e\u8282\u70b9\u7684 SSH \u5bc6\u94a5\u3002\u53c2\u9605\u4f7f\u7528 SSH \u5bc6\u94a5\u8ba4\u8bc1\u8282\u70b9\u3002

          • \u4f7f\u7528\u7edf\u4e00\u7684\u5bc6\u7801\uff1a\u5f00\u542f\u540e\u96c6\u7fa4\u4e2d\u6240\u6709\u8282\u70b9\u7684\u8bbf\u95ee\u5bc6\u7801\u90fd\u76f8\u540c\uff0c\u9700\u8981\u5728\u4e0b\u65b9\u8f93\u5165\u8bbf\u95ee\u6240\u6709\u8282\u70b9\u7684\u7edf\u4e00\u5bc6\u7801\u3002\u5982\u679c\u5173\u95ed\uff0c\u5219\u53ef\u4ee5\u4e3a\u6bcf\u4e2a\u8282\u70b9\u8bbe\u7f6e\u5355\u72ec\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002

          • \u8282\u70b9\u4fe1\u606f\uff1a\u586b\u5199\u8282\u70b9\u540d\u79f0\u548c IP \u5730\u5740\u3002

          • \u81ea\u5b9a\u4e49\u53c2\u6570\uff1a\u8bbe\u7f6e\u53d8\u91cf\u63a7\u5236 Ansible \u4e0e\u8fdc\u7a0b\u4e3b\u673a\u4ea4\u4e92\u3002\u53ef\u8bbe\u7f6e\u53d8\u91cf\u53c2\u8003\u8fde\u63a5\u5230\u4e3b\u673a\uff1a\u884c\u4e3a\u6e05\u5355\u53c2\u6570
          • NTP \u65f6\u95f4\u540c\u6b65\uff1a\u5f00\u542f\u540e\u4f1a\u81ea\u52a8\u540c\u6b65\u5404\u4e2a\u8282\u70b9\u4e0a\u7684\u65f6\u95f4\uff0c\u9700\u8981\u63d0\u4f9b NTP \u670d\u52a1\u5668\u5730\u5740\u3002

        4. \u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb\u8282\u70b9\u68c0\u67e5\u3002\u5982\u679c\u68c0\u67e5\u901a\u8fc7\u5219\u7ee7\u7eed\u4e0b\u4e00\u6b65\u64cd\u4f5c\u3002\u5982\u679c\u68c0\u67e5\u672a\u901a\u8fc7\uff0c\u5219\u66f4\u65b0 \u8282\u70b9\u4fe1\u606f \u5e76\u518d\u6b21\u6267\u884c\u68c0\u67e5\u3002

        5. \u586b\u5199\u7f51\u7edc\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

          • \u7f51\u7edc\u63d2\u4ef6\uff1a\u8d1f\u8d23\u4e3a\u96c6\u7fa4\u5185\u7684 Pod \u63d0\u4f9b\u7f51\u7edc\u670d\u52a1\uff0c\u521b\u5efa\u96c6\u7fa4\u540e\u4e0d\u53ef\u66f4\u6539\u7f51\u7edc\u63d2\u4ef6\u3002\u652f\u6301 cilium \u548c calico\u3002\u9009\u62e9 none \u8868\u793a\u6682\u4e0d\u5b89\u88c5\u7f51\u7edc\u63d2\u4ef6\u3002

          • \u5bb9\u5668\u7f51\u6bb5\uff1a\u96c6\u7fa4\u4e0b\u5bb9\u5668\u4f7f\u7528\u7684\u7f51\u6bb5\uff0c\u51b3\u5b9a\u96c6\u7fa4\u4e0b\u5bb9\u5668\u7684\u6570\u91cf\u4e0a\u9650\u3002\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002

          • \u670d\u52a1\u7f51\u6bb5\uff1a\u540c\u4e00\u96c6\u7fa4\u4e0b\u5bb9\u5668\u4e92\u76f8\u8bbf\u95ee\u65f6\u4f7f\u7528\u7684 Service \u8d44\u6e90\u7684\u7f51\u6bb5\uff0c\u51b3\u5b9a Service \u8d44\u6e90\u7684\u4e0a\u9650\u3002\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002

        6. \u586b\u5199\u63d2\u4ef6\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

        7. \u586b\u5199\u9ad8\u7ea7\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u786e\u5b9a \u3002

          • kubelet_max_pods \uff1a\u8bbe\u7f6e\u6bcf\u4e2a\u8282\u70b9\u7684\u6700\u5927 Pod \u6570\u91cf\uff0c\u9ed8\u8ba4\u4e3a 110 \u4e2a\u3002
          • hostname_overide \uff1a\u91cd\u7f6e\u4e3b\u673a\u540d\uff0c\u5efa\u8bae\u4f7f\u7528\u9ed8\u8ba4\u503c\uff0c\u91c7\u7528\u7cfb\u7edf\u9ed8\u8ba4\u751f\u6210\u7684\u540d\u79f0\u4f5c\u4e3a\u4e3b\u673a\u540d\u79f0\u3002
          • kubernetes_audit \uff1aKubernetes \u7684\u5ba1\u8ba1\u65e5\u5fd7\uff0c\u9ed8\u8ba4\u5f00\u542f\u3002
          • auto_renew_certificate \uff1a\u5728\u6bcf\u6708\u7b2c\u4e00\u4e2a\u661f\u671f\u4e00\u81ea\u52a8\u66f4\u65b0 Kubernetes \u63a7\u5236\u5e73\u9762\u8bc1\u4e66\uff0c\u9ed8\u8ba4\u5f00\u542f\u3002
          • disable_firewalld&ufw \uff1a\u7981\u7528\u9632\u706b\u5899\uff0c\u907f\u514d\u8282\u70b9\u5728\u5b89\u88c5\u8fc7\u7a0b\u4e2d\u65e0\u6cd5\u88ab\u8bbf\u95ee\u3002
          • Insecure_registries \uff1a\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u914d\u7f6e\u3002\u4f7f\u7528\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u521b\u5efa\u96c6\u7fa4\u65f6\uff0c\u4e3a\u4e86\u907f\u514d\u8bc1\u4e66\u95ee\u9898\u5bfc\u81f4\u5bb9\u5668\u5f15\u64ce\u62d2\u7edd\u8bbf\u95ee\uff0c\u9700\u8981\u5728\u8fd9\u91cc\u586b\u5199\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u5730\u5740\uff0c\u4ee5\u7ed5\u8fc7\u5bb9\u5668\u5f15\u64ce\u7684\u8bc1\u4e66\u8ba4\u8bc1\u800c\u83b7\u53d6\u955c\u50cf\u3002
          • yum_repos \uff1a\u586b\u5199 Yum \u6e90\u4ed3\u5e93\u5730\u5740\u3002\u79bb\u7ebf\u73af\u5883\u4e0b\uff0c\u9ed8\u8ba4\u7ed9\u51fa\u7684\u5730\u5740\u9009\u9879\u4ec5\u4f9b\u53c2\u8003\uff0c\u8bf7\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u586b\u5199\u3002

        Success

        • \u586b\u5199\u6b63\u786e\u4fe1\u606f\u5e76\u5b8c\u6210\u4e0a\u8ff0\u6b65\u9aa4\u540e\uff0c\u9875\u9762\u4f1a\u63d0\u793a\u96c6\u7fa4\u6b63\u5728\u521b\u5efa\u4e2d\u3002
        • \u521b\u5efa\u96c6\u7fa4\u8017\u65f6\u8f83\u957f\uff0c\u9700\u8981\u8010\u5fc3\u7b49\u5f85\u3002\u5176\u95f4\uff0c\u53ef\u4ee5\u70b9\u51fb \u8fd4\u56de\u96c6\u7fa4\u5217\u8868 \u6309\u94ae\u8ba9\u5b89\u88c5\u8fc7\u7a0b\u540e\u53f0\u8fd0\u884c\u3002
        • \u5982\u9700\u67e5\u770b\u5f53\u524d\u72b6\u6001\uff0c\u53ef\u70b9\u51fb \u5b9e\u65f6\u65e5\u5fd7 \u3002

        Note

        • \u5f53\u96c6\u7fa4\u51fa\u73b0\u672a\u77e5\u72b6\u6001\u65f6\uff0c\u8868\u793a\u5f53\u524d\u96c6\u7fa4\u5df2\u5931\u8054\u3002
        • \u7cfb\u7edf\u5c55\u793a\u6570\u636e\u4e3a\u5931\u8054\u524d\u7f13\u5b58\u6570\u636e\uff0c\u4e0d\u4ee3\u8868\u771f\u5b9e\u6570\u636e\u3002
        • \u540c\u65f6\u5931\u8054\u72b6\u6001\u4e0b\u6267\u884c\u7684\u4efb\u4f55\u64cd\u4f5c\u90fd\u5c06\u4e0d\u751f\u6548\uff0c\u8bf7\u68c0\u67e5\u96c6\u7fa4\u7f51\u7edc\u8fde\u901a\u6027\u6216\u4e3b\u673a\u72b6\u6001\u3002

        "},{"location":"admin/kpanda/clusters/delete-cluster.html","title":"\u5378\u8f7d/\u89e3\u9664\u63a5\u5165\u96c6\u7fa4","text":"

        \u901a\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0 \u521b\u5efa\u7684\u96c6\u7fa4 \u652f\u6301 \u5378\u8f7d\u96c6\u7fa4 \u6216 \u89e3\u9664\u63a5\u5165 \u64cd\u4f5c\uff0c\u4ece\u5176\u4ed6\u73af\u5883\u76f4\u63a5 \u63a5\u5165\u7684\u96c6\u7fa4 \u4ec5\u652f\u6301 \u89e3\u9664\u63a5\u5165 \u64cd\u4f5c\u3002

        Info

        \u5982\u679c\u60f3\u5f7b\u5e95\u5220\u9664\u4e00\u4e2a\u63a5\u5165\u7684\u96c6\u7fa4\uff0c\u9700\u8981\u524d\u5f80\u521b\u5efa\u8be5\u96c6\u7fa4\u7684\u539f\u59cb\u5e73\u53f0\u64cd\u4f5c\u3002\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0d\u652f\u6301\u5220\u9664\u63a5\u5165\u7684\u96c6\u7fa4\u3002

        \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\uff0c \u5378\u8f7d\u96c6\u7fa4 \u548c \u89e3\u9664\u63a5\u5165 \u7684\u533a\u522b\u5728\u4e8e\uff1a

        • \u5378\u8f7d\u96c6\u7fa4 \u64cd\u4f5c\u4f1a\u9500\u6bc1\u8be5\u96c6\u7fa4\uff0c\u5e76\u91cd\u7f6e\u96c6\u7fa4\u4e0b\u6240\u6709\u8282\u70b9\u7684\u6570\u636e\u3002\u6240\u6709\u6570\u636e\u90fd\u5c06\u88ab\u9500\u6bc1\uff0c\u5efa\u8bae\u505a\u597d\u5907\u4efd\u3002\u540e\u671f\u9700\u8981\u65f6\u5fc5\u987b\u91cd\u65b0\u521b\u5efa\u4e00\u4e2a\u96c6\u7fa4\u3002
        • \u89e3\u9664\u63a5\u5165 \u64cd\u4f5c\u4f1a\u5c06\u5f53\u524d\u96c6\u7fa4\u4ece\u5e73\u53f0\u4e2d\u79fb\u9664\uff0c\u4e0d\u4f1a\u6467\u6bc1\u96c6\u7fa4\uff0c\u4e5f\u4e0d\u4f1a\u9500\u6bc1\u6570\u636e\u3002
        "},{"location":"admin/kpanda/clusters/delete-cluster.html#_2","title":"\u5378\u8f7d\u96c6\u7fa4","text":"

        Note

        • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u5907 Admin \u6216 Kpanda Owner \u6743\u9650\u624d\u80fd\u6267\u884c\u5378\u8f7d\u96c6\u7fa4\u7684\u64cd\u4f5c\u3002
        • \u5378\u8f7d\u96c6\u7fa4\u4e4b\u524d\uff0c\u5e94\u8be5\u5148\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u5728 \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u8bbe\u7f6e -> \u9ad8\u7ea7\u914d\u7f6e \u4e2d\u5173\u95ed \u96c6\u7fa4\u5220\u9664\u4fdd\u62a4 \uff0c \u5426\u5219\u4e0d\u663e\u793a \u5378\u8f7d\u96c6\u7fa4 \u7684\u9009\u9879\u3002
        • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u4e0d\u652f\u6301\u5378\u8f7d\u6216\u79fb\u9664\u64cd\u4f5c\u3002
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u627e\u5230\u9700\u8981\u5378\u8f7d\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb \u5378\u8f7d\u96c6\u7fa4 \u3002

        2. \u8f93\u5165\u96c6\u7fa4\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u7136\u540e\u70b9\u51fb \u5220\u9664 \u3002

          \u5982\u679c\u63d0\u793a\u96c6\u7fa4\u4e2d\u8fd8\u6709\u4e00\u4e9b\u6b8b\u7559\u7684\u8d44\u6e90\uff0c\u5219\u9700\u8981\u6309\u63d0\u793a\u5220\u9664\u76f8\u5173\u8d44\u6e90\u540e\u624d\u80fd\u6267\u884c\u5378\u8f7d\u64cd\u4f5c\u3002

        3. \u8fd4\u56de \u96c6\u7fa4\u5217\u8868 \u9875\u53ef\u4ee5\u770b\u5230\u8be5\u96c6\u7fa4\u7684\u72b6\u6001\u5df2\u7ecf\u53d8\u6210 \u5220\u9664\u4e2d \u3002\u5378\u8f7d\u96c6\u7fa4\u53ef\u80fd\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\uff0c\u8bf7\u60a8\u8010\u5fc3\u7b49\u5019\u3002

        "},{"location":"admin/kpanda/clusters/delete-cluster.html#_3","title":"\u89e3\u9664\u63a5\u5165\u96c6\u7fa4","text":"

        Note

        • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u5907 Admin \u6216 Kpanda Owner \u6743\u9650\u624d\u80fd\u6267\u884c\u89e3\u9664\u63a5\u5165\u7684\u64cd\u4f5c\u3002
        • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u4e0d\u652f\u6301\u89e3\u9664\u63a5\u5165\u3002
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u627e\u5230\u9700\u8981\u5378\u8f7d\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb \u89e3\u9664\u63a5\u5165 \u3002

        2. \u8f93\u5165\u96c6\u7fa4\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u7136\u540e\u70b9\u51fb \u89e3\u9664\u63a5\u5165 \u3002

          \u5982\u679c\u63d0\u793a\u96c6\u7fa4\u4e2d\u8fd8\u6709\u4e00\u4e9b\u6b8b\u7559\u7684\u8d44\u6e90\uff0c\u5219\u9700\u8981\u6309\u63d0\u793a\u5220\u9664\u76f8\u5173\u8d44\u6e90\u540e\u624d\u80fd\u89e3\u9664\u63a5\u5165\u3002

        "},{"location":"admin/kpanda/clusters/delete-cluster.html#_4","title":"\u6e05\u7406\u89e3\u9664\u63a5\u5165\u96c6\u7fa4\u914d\u7f6e\u6570\u636e","text":"

        \u96c6\u7fa4\u88ab\u79fb\u9664\u540e\uff0c\u96c6\u7fa4\u4e2d\u539f\u6709\u7684\u7ba1\u7406\u5e73\u53f0\u6570\u636e\u4e0d\u4f1a\u88ab\u81ea\u52a8\u6e05\u9664\uff0c\u5982\u9700\u5c06\u96c6\u7fa4\u63a5\u5165\u81f3\u65b0\u7ba1\u7406\u5e73\u53f0\u5219\u9700\u8981\u624b\u52a8\u6267\u884c\u5982\u4e0b\u64cd\u4f5c\uff1a

        \u5220\u9664 kpanda-system\u3001insight-system \u547d\u540d\u7a7a\u95f4

        kubectl delete ns kpanda-system insight-system\n
        "},{"location":"admin/kpanda/clusters/integrate-cluster.html","title":"\u63a5\u5165\u96c6\u7fa4","text":"

        \u901a\u8fc7\u63a5\u5165\u96c6\u7fa4\u64cd\u4f5c\uff0c\u80fd\u591f\u5bf9\u4f17\u591a\u4e91\u670d\u52a1\u5e73\u53f0\u96c6\u7fa4\u548c\u672c\u5730\u79c1\u6709\u7269\u7406\u96c6\u7fa4\u8fdb\u884c\u7edf\u4e00\u7eb3\u7ba1\uff0c\u5f62\u6210\u7edf\u4e00\u6cbb\u7406\u5e73\u53f0\uff0c\u6709\u6548\u907f\u514d\u4e86\u88ab\u5382\u5546\u9501\u5b9a\u98ce\u9669\uff0c\u52a9\u529b\u4f01\u4e1a\u4e1a\u52a1\u5b89\u5168\u4e0a\u4e91\u3002

        \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u63a5\u5165\u591a\u79cd\u4e3b\u6d41\u7684\u5bb9\u5668\u96c6\u7fa4\uff0c\u4f8b\u5982 Redhat Openshift, SUSE Rancher, VMware Tanzu, Amazon EKS, Aliyun ACK, Huawei CCE, Tencent TKE, \u6807\u51c6 Kubernetes \u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/clusters/integrate-cluster.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u51c6\u5907\u4e00\u4e2a\u5f85\u63a5\u5165\u7684\u96c6\u7fa4\uff0c\u786e\u4fdd\u5bb9\u5668\u7ba1\u7406\u96c6\u7fa4\u548c\u5f85\u63a5\u5165\u96c6\u7fa4\u4e4b\u95f4\u7f51\u7edc\u901a\u7545\uff0c\u5e76\u4e14\u96c6\u7fa4\u7684 Kubernetes \u7248\u672c 1.22+\u3002
        • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 Kpanda Owner \u6216\u66f4\u9ad8\u6743\u9650\u3002
        "},{"location":"admin/kpanda/clusters/integrate-cluster.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
        1. \u8fdb\u5165 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u63a5\u5165\u96c6\u7fa4 \u6309\u94ae\u3002

        2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

          • \u96c6\u7fa4\u540d\u79f0\uff1a\u540d\u79f0\u5e94\u5177\u6709\u552f\u4e00\u6027\uff0c\u8bbe\u7f6e\u540e\u4e0d\u53ef\u66f4\u6539\u3002\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26(\"-\")\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002
          • \u96c6\u7fa4\u522b\u540d\uff1a\u53ef\u8f93\u5165\u4efb\u610f\u5b57\u7b26\uff0c\u4e0d\u8d85\u8fc7 60 \u4e2a\u5b57\u7b26\u3002
          • \u53d1\u884c\u7248\uff1a\u96c6\u7fa4\u7684\u53d1\u884c\u5382\u5546\uff0c\u5305\u62ec\u5e02\u573a\u4e3b\u6d41\u4e91\u5382\u5546\u548c\u672c\u5730\u79c1\u6709\u7269\u7406\u96c6\u7fa4\u3002
        3. \u586b\u5199\u76ee\u6807\u96c6\u7fa4\u7684 KubeConfig\uff0c\u70b9\u51fb \u9a8c\u8bc1 Config \uff0c\u9a8c\u8bc1\u901a\u8fc7\u540e\u624d\u80fd\u6210\u529f\u63a5\u5165\u96c6\u7fa4\u3002

          \u5982\u679c\u4e0d\u77e5\u9053\u5982\u4f55\u83b7\u53d6\u96c6\u7fa4\u7684 KubeConfig \u6587\u4ef6\uff0c\u53ef\u4ee5\u5728\u8f93\u5165\u6846\u53f3\u4e0a\u89d2\u70b9\u51fb \u5982\u4f55\u83b7\u53d6 kubeConfig \u67e5\u770b\u5bf9\u5e94\u6b65\u9aa4\u3002

        4. \u786e\u8ba4\u6240\u6709\u53c2\u6570\u586b\u5199\u6b63\u786e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u3002

        Note

        • \u65b0\u63a5\u5165\u7684\u96c6\u7fa4\u72b6\u6001\u4e3a \u63a5\u5165\u4e2d \uff0c\u63a5\u5165\u6210\u529f\u540e\u53d8\u4e3a \u8fd0\u884c\u4e2d \u3002
        • \u5982\u679c\u96c6\u7fa4\u72b6\u6001\u4e00\u76f4\u5904\u4e8e \u63a5\u5165\u4e2d \uff0c\u8bf7\u786e\u8ba4\u63a5\u5165\u811a\u672c\u662f\u5426\u5728\u5bf9\u5e94\u96c6\u7fa4\u4e0a\u6267\u884c\u6210\u529f\u3002\u6709\u5173\u96c6\u7fa4\u72b6\u6001\u7684\u66f4\u591a\u8be6\u60c5\uff0c\u8bf7\u53c2\u8003\u96c6\u7fa4\u72b6\u6001\u3002
        "},{"location":"admin/kpanda/clusters/integrate-rancher-cluster.html","title":"\u63a5\u5165 rancher \u96c6\u7fa4","text":"

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u63a5\u5165 rancher \u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/clusters/integrate-rancher-cluster.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u51c6\u5907\u4e00\u4e2a\u5177\u6709\u7ba1\u7406\u5458\u6743\u9650\u7684\u5f85\u63a5\u5165 ranhcer \u96c6\u7fa4\uff0c\u786e\u4fdd\u5bb9\u5668\u7ba1\u7406\u96c6\u7fa4\u548c\u5f85\u63a5\u5165\u96c6\u7fa4\u4e4b\u95f4\u7f51\u7edc\u901a\u7545\u3002
        • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 Kpanda Owner \u6216\u66f4\u9ad8\u6743\u9650\u3002
        "},{"location":"admin/kpanda/clusters/integrate-rancher-cluster.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/clusters/integrate-rancher-cluster.html#rancher-serviceaccount","title":"\u6b65\u9aa4\u4e00\uff1a\u5728 rancher \u96c6\u7fa4\u521b\u5efa\u5177\u6709\u7ba1\u7406\u5458\u6743\u9650\u7684 ServiceAccount \u7528\u6237","text":"
        1. \u4f7f\u7528\u5177\u6709\u7ba1\u7406\u5458\u6743\u9650\u7684\u89d2\u8272\u8fdb\u5165 rancher \u96c6\u7fa4\uff0c\u5e76\u4f7f\u7528\u7ec8\u7aef\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a sa.yaml \u7684\u6587\u4ef6\u3002

          vi sa.yaml\n

          \u7136\u540e\u6309\u4e0b i \u952e\u8fdb\u5165\u63d2\u5165\u6a21\u5f0f\uff0c\u8f93\u5165\u4ee5\u4e0b\u5185\u5bb9\uff1a

          sa.yaml
          apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: rancher-rke\nrules:\n  - apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n  - nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: rancher-rke\nroleRef:\n    apiGroup: rbac.authorization.k8s.io\n    kind: ClusterRole\n    name: rancher-rke\n  subjects:\n  - kind: ServiceAccount\n    name: rancher-rke\n    namespace: kube-system\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: rancher-rke\n  namespace: kube-system\n

          \u6309\u4e0b esc \u952e\u9000\u51fa\u63d2\u5165\u6a21\u5f0f\uff0c\u7136\u540e\u8f93\u5165 __ :wq__ \u4fdd\u5b58\u5e76\u9000\u51fa\u3002

        2. \u5728\u5f53\u524d\u8def\u5f84\u4e0b\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u65b0\u5efa\u540d\u4e3a rancher-rke \u7684 ServiceAccount\uff08\u4ee5\u4e0b\u7b80\u79f0\u4e3a SA \uff09\uff1a

          kubectl apply -f sa.yaml\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          clusterrole.rbac.authorization.k8s.io/rancher-rke created\nclusterrolebinding.rbac.authorization.k8s.io/rancher-rke created\nserviceaccount/rancher-rke created\n
        3. \u521b\u5efa\u540d\u4e3a rancher-rke-secret \u7684\u5bc6\u94a5\uff0c\u5e76\u5c06\u5bc6\u94a5\u548c rancher-rke SA \u7ed1\u5b9a\u3002

          kubectl apply -f - <<EOF\napiVersion: v1\nkind: Secret\nmetadata:\n  name: rancher-rke-secret\n  namespace: kube-system\n  annotations:\n    kubernetes.io/service-account.name: rancher-rke\n  type: kubernetes.io/service-account-token\nEOF\n

          \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

          secret/rancher-rke-secret created\n

          Note

          \u5982\u679c\u60a8\u7684\u96c6\u7fa4\u7248\u672c\u4f4e\u4e8e 1.24\uff0c\u8bf7\u5ffd\u7565\u6b64\u6b65\u9aa4\uff0c\u76f4\u63a5\u524d\u5f80\u4e0b\u4e00\u6b65\u3002

        4. \u67e5\u627e rancher-rke SA \u7684\u5bc6\u94a5\uff1a

          kubectl -n kube-system get secret | grep rancher-rke | awk '{print $1}'\n

          \u9884\u671f\u8f93\u51fa\uff1a

          rancher-rke-secret\n

          \u67e5\u770b\u5bc6\u94a5 rancher-rke-secret \u7684\u8be6\u60c5\uff1a

          kubectl -n kube-system describe secret rancher-rke-secret\n

          \u9884\u671f\u8f93\u51fa\uff1a

          Name:         rancher-rke-secret\nNamespace:    kube-system\nLabels:       <none>\nAnnotations:  kubernetes.io/service-account.name: rancher-rke\n            kubernetes.io/service-account.uid: d83df5d9-bd7d-488d-a046-b740618a0174\n\nType:  kubernetes.io/service-account-token\n\nData\n====\nca.crt:     570 bytes\nnamespace:  11 bytes\ntoken:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjUtNE9nUWZLRzVpbEJORkZaNmtCQXhqVzRsZHU4MHhHcDBfb0VCaUo0V1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyYW5jaGVyLXJrZS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmFuY2hlci1ya2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkODNkZjVkOS1iZDdkLTQ4OGQtYTA0Ni1iNzQwNjE4YTAxNzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cmFuY2hlci1ya2UifQ.VNsMtPEFOdDDeGt_8VHblcMRvjOwPXMM-79o9UooHx6q-VkHOcIOp3FOT2hnEdNnIsyODZVKCpEdCgyozX-3y5x2cZSZpocnkMcBbQm-qfTyUcUhAY7N5gcYUtHUhvRAsNWJcsDCn6d96gT_qo-ddo_cT8Ri39Lc123FDYOnYG-YGFKSgRQVy7Vyv34HIajZCCjZzy7i--eE_7o4DXeTjNqAFMFstUxxHBOXI3Rdn1zKQKqh5Jhg4ES7X-edSviSUfJUX-QV_LlAw5DuAyGPH7bDH4QaQ5k-p6cIctmpWZE-9wRDlKA4LYRblKE7MJcI6OmM4ldlMM0Jc8N-gCtl4w\n
        "},{"location":"admin/kpanda/clusters/integrate-rancher-cluster.html#rancher-rke-sa-kubeconfig","title":"\u6b65\u9aa4\u4e8c\uff1a\u5728\u672c\u5730\u4f7f\u7528 rancher-rke SA \u7684\u8ba4\u8bc1\u4fe1\u606f\u66f4\u65b0 kubeconfig \u6587\u4ef6","text":"

        \u5728\u4efb\u610f\u4e00\u53f0\u5b89\u88c5\u4e86 kubelet \u7684\u672c\u5730\u8282\u70b9\u6267\u884c\u5982\u4e0b\u64cd\u4f5c\uff1a

        1. \u914d\u7f6e kubelet token\uff1a

          kubectl config set-credentials rancher-rke --token=`rancher-rke-secret` \u91cc\u9762\u7684 token \u4fe1\u606f\n

          \u4f8b\u5982\uff1a

          kubectl config set-credentials eks-admin --token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjUtNE9nUWZLRzVpbEJORkZaNmtCQXhqVzRsZHU4MHhHcDBfb0VCaUo0V1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyYW5jaGVyLXJrZS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmFuY2hlci1ya2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkODNkZjVkOS1iZDdkLTQ4OGQtYTA0Ni1iNzQwNjE4YTAxNzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cmFuY2hlci1ya2UifQ.VNsMtPEFOdDDeGt_8VHblcMRvjOwPXMM-79o9UooHx6q-VkHOcIOp3FOT2hnEdNnIsyODZVKCpEdCgyozX-3y5x2cZSZpocnkMcBbQm-qfTyUcUhAY7N5gcYUtHUhvRAsNWJcsDCn6d96gT_qo-ddo_cT8Ri39Lc123FDYOnYG-YGFKSgRQVy7Vyv34HIajZCCjZzy7i--eE_7o4DXeTjNqAFMFstUxxHBOXI3Rdn1zKQKqh5Jhg4ES7X-edSviSUfJUX-QV_LlAw5DuAyGPH7bDH4QaQ5k-p6cIctmpWZE-9wRDlKA4LYRblKE7MJcI6OmM4ldlMM0Jc8N-gCtl4w\n
        2. \u914d\u7f6e kubelet APIServer \u4fe1\u606f\uff1a

          kubectl config set-cluster {\u96c6\u7fa4\u540d} --insecure-skip-tls-verify=true --server={APIServer}\n
          • {\u96c6\u7fa4\u540d} \uff1a\u6307 rancher \u96c6\u7fa4\u7684\u540d\u79f0\u3002
          • {APIServer} \uff1a\u6307\u96c6\u7fa4\u7684\u8bbf\u95ee\u5730\u5740\uff0c\u4e00\u822c\u4e3a\u96c6\u7fa4\u63a7\u5236\u8282\u70b9 IP + 6443 \u7aef\u53e3\uff0c\u5982 https://10.X.X.X:6443

          \u4f8b\u5982\uff1a

          kubectl config set-cluster rancher-rke --insecure-skip-tls-verify=true --server=https://10.X.X.X:6443\n
        3. \u914d\u7f6e kubelet \u4e0a\u4e0b\u6587\u4fe1\u606f\uff1a

          kubectl config set-context {\u4e0a\u4e0b\u6587\u540d\u79f0} --cluster={\u96c6\u7fa4\u540d} --user={SA \u7528\u6237\u540d}\n

          \u4f8b\u5982\uff1a

          kubectl config set-context rancher-rke-context --cluster=rancher-rke --user=rancher-rke\n
        4. \u5728 kubelet \u4e2d\u6307\u5b9a\u6211\u4eec\u521a\u521a\u65b0\u5efa\u7684\u4e0a\u4e0b\u6587 rancher-rke-context \uff1a

          kubectl config use-context rancher-rke-context\n
        5. \u83b7\u53d6\u4e0a\u4e0b\u6587 rancher-rke-context \u4e2d\u7684 kubeconfig \u4fe1\u606f\u3002

          kubectl config view --minify --flatten --raw\n

          \u9884\u671f\u8f93\u51fa\uff1a

          apiVersion: v1\n  clusters:\n  - cluster:\n    insecure-skip-tls-verify: true\n    server: https://77C321BCF072682C70C8665ED4BFA10D.gr7.ap-southeast-1.eks.amazonaws.com\n  name: joincluster\n  contexts:\n  - context:\n    cluster: joincluster\n    user: eks-admin\n  name: ekscontext\n  current-context: ekscontext\n  kind: Config\n  preferences: {}\n  users:\n  - name: eks-admin\n  user:\n    token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImcxTjJwNkktWm5IbmRJU1RFRExvdWY1TGFWVUtGQ3VIejFtNlFQcUNFalEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2V\n
        "},{"location":"admin/kpanda/clusters/integrate-rancher-cluster.html#ai","title":"\u6b65\u9aa4\u4e09\uff1a\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u754c\u9762\u63a5\u5165\u96c6\u7fa4","text":"

        \u4f7f\u7528\u521a\u521a\u83b7\u53d6\u7684 kubeconfig \u6587\u4ef6\uff0c\u53c2\u8003\u63a5\u5165\u96c6\u7fa4\u6587\u6863\uff0c\u5c06 rancher \u96c6\u7fa4\u63a5\u5165\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u3002

        "},{"location":"admin/kpanda/clusters/k8s-cert.html","title":"Kubernetes \u96c6\u7fa4\u8bc1\u4e66\u66f4\u65b0","text":"

        \u4e3a\u4fdd\u8bc1 Kubernetes \u5404\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1\u5b89\u5168\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8c03\u7528\u4f1a\u8fdb\u884c TLS \u8eab\u4efd\u9a8c\u8bc1\uff0c\u6267\u884c\u9a8c\u8bc1\u64cd\u4f5c\u9700\u8981\u914d\u7f6e\u96c6\u7fa4 PKI \u8bc1\u4e66\u3002

        \u96c6\u7fa4\u8bc1\u4e66\u6709\u6548\u671f\u4e3a1\u5e74\uff0c\u4e3a\u907f\u514d\u8bc1\u4e66\u8fc7\u671f\u5bfc\u81f4\u4e1a\u52a1\u65e0\u6cd5\u4f7f\u7528\uff0c\u8bf7\u53ca\u65f6\u66f4\u65b0\u8bc1\u4e66\u3002

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u624b\u52a8\u8fdb\u884c\u8bc1\u4e66\u66f4\u65b0\u3002

        "},{"location":"admin/kpanda/clusters/k8s-cert.html#_1","title":"\u68c0\u67e5\u8bc1\u4e66\u662f\u5426\u8fc7\u671f","text":"

        \u60a8\u53ef\u4ee5\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\u662f\u5426\u8fc7\u671f\uff1a

        kubeadm certs check-expiration\n

        \u8f93\u51fa\u7c7b\u4f3c\u4e8e\u4ee5\u4e0b\u5185\u5bb9\uff1a

        CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED\nadmin.conf                 Dec 14, 2024 07:26 UTC   204d                                    no      \napiserver                  Dec 14, 2024 07:26 UTC   204d            ca                      no      \napiserver-etcd-client      Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \napiserver-kubelet-client   Dec 14, 2024 07:26 UTC   204d            ca                      no      \ncontroller-manager.conf    Dec 14, 2024 07:26 UTC   204d                                    no      \netcd-healthcheck-client    Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \netcd-peer                  Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \netcd-server                Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \nfront-proxy-client         Dec 14, 2024 07:26 UTC   204d            front-proxy-ca          no      \nscheduler.conf             Dec 14, 2024 07:26 UTC   204d                                    no      \n\nCERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED\nca                      Dec 12, 2033 07:26 UTC   9y              no      \netcd-ca                 Dec 12, 2033 07:26 UTC   9y              no      \nfront-proxy-ca          Dec 12, 2033 07:26 UTC   9y              no      \n
        "},{"location":"admin/kpanda/clusters/k8s-cert.html#_2","title":"\u624b\u52a8\u66f4\u65b0\u8bc1\u4e66","text":"

        \u60a8\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u624b\u52a8\u66f4\u65b0\u8bc1\u4e66\uff0c\u53ea\u9700\u5e26\u4e0a\u5408\u9002\u7684\u547d\u4ee4\u884c\u9009\u9879\u3002\u66f4\u65b0\u8bc1\u4e66\u524d\u8bf7\u5148\u5907\u4efd\u5f53\u524d\u8bc1\u4e66\u3002

        \u66f4\u65b0\u6307\u5b9a\u8bc1\u4e66\uff1a

        kubeadm certs renew\n

        \u66f4\u65b0\u5168\u90e8\u8bc1\u4e66\uff1a

        kubeadm certs renew all\n

        \u66f4\u65b0\u540e\u7684\u8bc1\u4e66\u53ef\u4ee5\u5728 /etc/kubernetes/pki \u76ee\u5f55\u4e0b\u67e5\u770b\uff0c\u6709\u6548\u671f\u5ef6\u7eed 1 \u5e74\u3002 \u4ee5\u4e0b\u5bf9\u5e94\u7684\u51e0\u4e2a\u914d\u7f6e\u6587\u4ef6\u4e5f\u4f1a\u540c\u6b65\u66f4\u65b0\uff1a

        • /etc/kubernetes/admin.conf
        • /etc/kubernetes/controller-manager.conf
        • /etc/kubernetes/scheduler.conf

        Note

        • \u5982\u679c\u60a8\u90e8\u7f72\u7684\u662f\u4e00\u4e2a\u9ad8\u53ef\u7528\u96c6\u7fa4\uff0c\u8fd9\u4e2a\u547d\u4ee4\u9700\u8981\u5728\u6240\u6709\u63a7\u5236\u8282\u70b9\u4e0a\u6267\u884c\u3002
        • \u6b64\u547d\u4ee4\u7528 CA\uff08\u6216\u8005 front-proxy-CA \uff09\u8bc1\u4e66\u548c\u5b58\u50a8\u5728 /etc/kubernetes/pki \u4e2d\u7684\u5bc6\u94a5\u6267\u884c\u66f4\u65b0\u3002
        "},{"location":"admin/kpanda/clusters/k8s-cert.html#_3","title":"\u91cd\u542f\u670d\u52a1","text":"

        \u6267\u884c\u66f4\u65b0\u64cd\u4f5c\u4e4b\u540e\uff0c\u4f60\u9700\u8981\u91cd\u542f\u63a7\u5236\u9762 Pod\u3002\u56e0\u4e3a\u52a8\u6001\u8bc1\u4e66\u91cd\u8f7d\u76ee\u524d\u8fd8\u4e0d\u88ab\u6240\u6709\u7ec4\u4ef6\u548c\u8bc1\u4e66\u652f\u6301\uff0c\u6240\u6709\u8fd9\u9879\u64cd\u4f5c\u662f\u5fc5\u987b\u7684\u3002

        \u9759\u6001 Pod \u662f\u88ab\u672c\u5730 kubelet \u800c\u4e0d\u662f API \u670d\u52a1\u5668\u7ba1\u7406\uff0c\u6240\u4ee5 kubectl \u4e0d\u80fd\u7528\u6765\u5220\u9664\u6216\u91cd\u542f\u4ed6\u4eec\u3002

        \u8981\u91cd\u542f\u9759\u6001 Pod\uff0c\u4f60\u53ef\u4ee5\u4e34\u65f6\u5c06\u6e05\u5355\u6587\u4ef6\u4ece /etc/kubernetes/manifests/ \u79fb\u9664\u5e76\u7b49\u5f85 20 \u79d2\u3002 \u53c2\u8003 KubeletConfiguration \u7ed3\u6784\u4e2d\u7684 fileCheckFrequency \u503c\u3002

        \u5982\u679c Pod \u4e0d\u5728\u6e05\u5355\u76ee\u5f55\u91cc\uff0ckubelet \u5c06\u4f1a\u7ec8\u6b62\u5b83\u3002 \u5728\u53e6\u4e00\u4e2a fileCheckFrequency \u5468\u671f\u4e4b\u540e\u4f60\u53ef\u4ee5\u5c06\u6587\u4ef6\u79fb\u56de\u53bb\uff0ckubelet \u53ef\u4ee5\u5b8c\u6210 Pod \u7684\u91cd\u5efa\uff0c\u800c\u7ec4\u4ef6\u7684\u8bc1\u4e66\u66f4\u65b0\u64cd\u4f5c\u4e5f\u5f97\u4ee5\u5b8c\u6210\u3002

        mv ./manifests/* ./temp/\nmv ./temp/* ./manifests/\n

        Note

        \u5982\u679c\u5bb9\u5668\u670d\u52a1\u4f7f\u7528\u7684\u662f Docker\uff0c\u4e3a\u4e86\u8ba9\u8bc1\u4e66\u751f\u6548\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5bf9\u6d89\u53ca\u5230\u8bc1\u4e66\u4f7f\u7528\u7684\u51e0\u4e2a\u670d\u52a1\u8fdb\u884c\u91cd\u542f\uff1a

        docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' | xargs docker restart\n
        "},{"location":"admin/kpanda/clusters/k8s-cert.html#kubeconfig","title":"\u66f4\u65b0 KubeConfig","text":"

        \u6784\u5efa\u96c6\u7fa4\u65f6\u901a\u5e38\u4f1a\u5c06 admin.conf \u8bc1\u4e66\u590d\u5236\u5230 $HOME/.kube/config \u4e2d\uff0c\u4e3a\u4e86\u5728\u66f4\u65b0 admin.conf \u540e\u66f4\u65b0 $HOME/.kube/config \u7684\u5185\u5bb9\uff0c \u5fc5\u987b\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

        sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nsudo chown $(id -u):$(id -g) $HOME/.kube/config\n
        "},{"location":"admin/kpanda/clusters/k8s-cert.html#kubelet","title":"\u4e3a kubelet \u914d\u7f6e\u8bc1\u4e66\u8f6e\u6362","text":"

        \u5b8c\u6210\u4ee5\u4e0a\u64cd\u4f5c\u540e\uff0c\u57fa\u672c\u5b8c\u6210\u4e86\u96c6\u7fa4\u6240\u6709\u8bc1\u4e66\u7684\u66f4\u65b0\uff0c\u4f46\u4e0d\u5305\u62ec kubelet\u3002

        \u56e0\u4e3a kubernetes \u5305\u542b\u7279\u6027 kubelet \u8bc1\u4e66\u8f6e\u6362\uff0c \u5728\u5f53\u524d\u8bc1\u4e66\u5373\u5c06\u8fc7\u671f\u65f6\uff0c \u5c06\u81ea\u52a8\u751f\u6210\u65b0\u7684\u79d8\u94a5\uff0c\u5e76\u4ece Kubernetes API \u7533\u8bf7\u65b0\u7684\u8bc1\u4e66\u3002 \u4e00\u65e6\u65b0\u7684\u8bc1\u4e66\u53ef\u7528\uff0c\u5b83\u5c06\u88ab\u7528\u4e8e\u4e0e Kubernetes API \u95f4\u7684\u8fde\u63a5\u8ba4\u8bc1\u3002

        Note

        \u6b64\u7279\u6027\u9002\u7528\u4e8e Kubernetes 1.8.0 \u6216\u66f4\u9ad8\u7684\u7248\u672c\u3002

        \u542f\u7528\u5ba2\u6237\u7aef\u8bc1\u4e66\u8f6e\u6362\uff0c\u914d\u7f6e\u53c2\u6570\u5982\u4e0b\uff1a

        • kubelet \u8fdb\u7a0b\u63a5\u6536 --rotate-certificates \u53c2\u6570\uff0c\u8be5\u53c2\u6570\u51b3\u5b9a kubelet \u5728\u5f53\u524d\u4f7f\u7528\u7684 \u8bc1\u4e66\u5373\u5c06\u5230\u671f\u65f6\uff0c\u662f\u5426\u4f1a\u81ea\u52a8\u7533\u8bf7\u65b0\u7684\u8bc1\u4e66\u3002

        • kube-controller-manager \u8fdb\u7a0b\u63a5\u6536 --cluster-signing-duration \u53c2\u6570 \uff08\u5728 1.19 \u7248\u672c\u4e4b\u524d\u4e3a --experimental-cluster-signing-duration\uff09\uff0c\u7528\u6765\u63a7\u5236\u7b7e\u53d1\u8bc1\u4e66\u7684\u6709\u6548\u671f\u9650\u3002

        \u66f4\u591a\u8be6\u60c5\u53c2\u8003\u4e3a kubelet \u914d\u7f6e\u8bc1\u4e66\u8f6e\u6362\u3002

        "},{"location":"admin/kpanda/clusters/k8s-cert.html#_4","title":"\u81ea\u52a8\u66f4\u65b0\u8bc1\u4e66","text":"

        \u4e3a\u4e86\u66f4\u9ad8\u6548\u4fbf\u6377\u5904\u7406\u5df2\u8fc7\u671f\u6216\u8005\u5373\u5c06\u8fc7\u671f\u7684 kubernetes \u96c6\u7fa4\u8bc1\u4e66\uff0c\u53ef\u53c2\u8003 k8s \u7248\u672c\u96c6\u7fa4\u8bc1\u4e66\u66f4\u65b0\u3002

        "},{"location":"admin/kpanda/clusters/runtime.html","title":"\u5982\u4f55\u9009\u62e9\u5bb9\u5668\u8fd0\u884c\u65f6","text":"

        \u5bb9\u5668\u8fd0\u884c\u65f6\u662f kubernetes \u4e2d\u5bf9\u5bb9\u5668\u548c\u5bb9\u5668\u955c\u50cf\u751f\u547d\u5468\u671f\u8fdb\u884c\u7ba1\u7406\u7684\u91cd\u8981\u7ec4\u4ef6\u3002 kubernetes \u5728 1.19 \u7248\u672c\u4e2d\u5c06 containerd \u8bbe\u4e3a\u9ed8\u8ba4\u7684\u5bb9\u5668\u8fd0\u884c\u65f6\uff0c\u5e76\u5728 1.24 \u7248\u672c\u4e2d\u79fb\u9664\u4e86 Dockershim \u7ec4\u4ef6\u7684\u652f\u6301\u3002

        \u56e0\u6b64\u76f8\u8f83\u4e8e Docker \u8fd0\u884c\u65f6\uff0c\u6211\u4eec\u66f4\u52a0 \u63a8\u8350\u60a8\u4f7f\u7528\u8f7b\u91cf\u7684 containerd \u4f5c\u4e3a\u60a8\u7684\u5bb9\u5668\u8fd0\u884c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u5df2\u7ecf\u6210\u4e3a\u5f53\u524d\u4e3b\u6d41\u7684\u8fd0\u884c\u65f6\u9009\u62e9\u3002

        \u9664\u6b64\u4e4b\u5916\uff0c\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u53d1\u884c\u5382\u5546\u5bf9 Docker \u8fd0\u884c\u65f6\u7684\u517c\u5bb9\u4e5f\u4e0d\u591f\u53cb\u597d\uff0c\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u8fd0\u884c\u65f6\u7684\u652f\u6301\u5982\u4e0b\u8868\uff1a

        "},{"location":"admin/kpanda/clusters/runtime.html#_2","title":"\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u548c\u63a8\u8350\u7684\u8fd0\u884c\u65f6\u7248\u672c\u5bf9\u5e94\u5173\u7cfb","text":"\u64cd\u4f5c\u7cfb\u7edf \u63a8\u8350\u7684 containerd \u7248\u672c \u63a8\u8350\u7684 Docker \u7248\u672c CentOS 1.7.5 20.10 RedHatOS 1.7.5 20.10 KylinOS 1.7.5 19.03\uff08\u4ec5 ARM \u67b6\u6784\u652f\u6301 \uff0c\u5728 x86 \u67b6\u6784\u4e0b\u4e0d\u652f\u6301\u4f7f\u7528 Docker \u4f5c\u4e3a\u8fd0\u884c\u65f6\uff09

        \u66f4\u591a\u652f\u6301\u7684\u8fd0\u884c\u65f6\u7248\u672c\u4fe1\u606f\uff0c\u8bf7\u53c2\u8003 RedHatOS \u652f\u6301\u7684\u8fd0\u884c\u65f6\u7248\u672c \u548c KylinOS \u652f\u6301\u7684\u8fd0\u884c\u65f6\u7248\u672c

        Note

        \u5728\u79bb\u7ebf\u5b89\u88c5\u6a21\u5f0f\u4e0b\uff0c\u9700\u8981\u63d0\u524d\u51c6\u5907\u76f8\u5173\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u65f6\u79bb\u7ebf\u5305\u3002

        "},{"location":"admin/kpanda/clusters/upgrade-cluster.html","title":"\u96c6\u7fa4\u5347\u7ea7","text":"

        Kubernetes \u793e\u533a\u6bcf\u4e2a\u5b63\u5ea6\u90fd\u4f1a\u53d1\u5e03\u4e00\u6b21\u5c0f\u7248\u672c\uff0c\u6bcf\u4e2a\u7248\u672c\u7684\u7ef4\u62a4\u5468\u671f\u5927\u6982\u53ea\u6709 9 \u4e2a\u6708\u3002 \u7248\u672c\u505c\u6b62\u7ef4\u62a4\u540e\u5c31\u4e0d\u4f1a\u518d\u66f4\u65b0\u4e00\u4e9b\u91cd\u5927\u6f0f\u6d1e\u6216\u5b89\u5168\u6f0f\u6d1e\u3002\u624b\u52a8\u5347\u7ea7\u96c6\u7fa4\u64cd\u4f5c\u8f83\u4e3a\u7e41\u7410\uff0c\u7ed9\u7ba1\u7406\u4eba\u5458\u5e26\u6765\u4e86\u6781\u5927\u7684\u5de5\u4f5c\u8d1f\u62c5\u3002

        \u672c\u8282\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u901a\u8fc7 Web UI \u754c\u9762\u4e00\u952e\u5f0f\u5728\u7ebf\u5347\u7ea7\u5de5\u4f5c\u96c6\u7fa4 Kubernetes \u7248\u672c\uff0c \u5982\u9700\u79bb\u7ebf\u5347\u7ea7\u5de5\u4f5c\u96c6\u7fa4\u7684 kubernetes \u7248\u672c\uff0c\u8bf7\u53c2\u9605\u5de5\u4f5c\u96c6\u7fa4\u79bb\u7ebf\u5347\u7ea7\u6307\u5357\u8fdb\u884c\u5347\u7ea7\u3002

        Danger

        \u7248\u672c\u5347\u7ea7\u540e\u5c06\u65e0\u6cd5\u56de\u9000\u5230\u4e4b\u524d\u7684\u7248\u672c\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

        Note

        • Kubernetes \u7248\u672c\u4ee5 x.y.z \u8868\u793a\uff0c\u5176\u4e2d x \u662f\u4e3b\u8981\u7248\u672c\uff0c y \u662f\u6b21\u8981\u7248\u672c\uff0c z \u662f\u8865\u4e01\u7248\u672c\u3002
        • \u4e0d\u5141\u8bb8\u8de8\u6b21\u8981\u7248\u672c\u5bf9\u96c6\u7fa4\u8fdb\u884c\u5347\u7ea7\uff0c\u4f8b\u5982\u4e0d\u80fd\u4ece 1.23 \u76f4\u63a5\u5347\u7ea7\u5230 1.25\u3002
        • \u63a5\u5165\u96c6\u7fa4 \u4e0d\u652f\u6301\u7248\u672c\u5347\u7ea7\u3002\u5982\u679c\u5de6\u4fa7\u5bfc\u822a\u680f\u6ca1\u6709 \u96c6\u7fa4\u5347\u7ea7 \uff0c\u8bf7\u68c0\u67e5\u8be5\u96c6\u7fa4\u662f\u5426\u4e3a \u63a5\u5165\u96c6\u7fa4 \u3002
        • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u53ea\u80fd\u901a\u8fc7\u7ec8\u7aef\u8fdb\u884c\u5347\u7ea7\u3002
        • \u5347\u7ea7\u5de5\u4f5c\u96c6\u7fa4\u65f6\uff0c\u8be5\u5de5\u4f5c\u96c6\u7fa4\u7684\u7ba1\u7406\u96c6\u7fa4\u5e94\u8be5\u5df2\u7ecf\u63a5\u5165\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\uff0c\u5e76\u4e14\u5904\u4e8e\u6b63\u5e38\u8fd0\u884c\u4e2d\u3002
        • \u5982\u679c\u9700\u8981\u4fee\u6539\u96c6\u7fa4\u53c2\u6570\uff0c\u53ef\u4ee5\u901a\u8fc7\u5347\u7ea7\u76f8\u540c\u7248\u672c\u7684\u65b9\u5f0f\u5b9e\u73b0\uff0c\u5177\u4f53\u64cd\u4f5c\u53c2\u8003\u4e0b\u6587\u3002
        1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

        2. \u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u5347\u7ea7 \uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u70b9\u51fb \u7248\u672c\u5347\u7ea7 \u3002

        3. \u9009\u62e9\u53ef\u5347\u7ea7\u7684\u7248\u672c\uff0c\u8f93\u5165\u96c6\u7fa4\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\u3002

          Note

          \u5982\u679c\u60a8\u662f\u60f3\u901a\u8fc7\u5347\u7ea7\u65b9\u5f0f\u6765\u4fee\u6539\u96c6\u7fa4\u53c2\u6570\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff1a

          1. \u627e\u5230\u96c6\u7fa4\u5bf9\u5e94\u7684 ConfigMap\uff0c\u60a8\u53ef\u4ee5\u767b\u5f55\u63a7\u5236\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u627e\u5230 varsConfRef \u4e2d\u7684 ConfigMap \u540d\u79f0\u3002

            kubectl get cluster.kubean.io <clustername> -o yaml\n
          2. \u6839\u636e\u9700\u8981\uff0c\u4fee\u6539 ConfigMap \u4e2d\u7684\u53c2\u6570\u4fe1\u606f\u3002

          3. \u5728\u6b64\u5904\u9009\u62e9\u76f8\u540c\u7248\u672c\u8fdb\u884c\u5347\u7ea7\u64cd\u4f5c\uff0c\u5347\u7ea7\u5b8c\u6210\u5373\u53ef\u6210\u529f\u66f4\u65b0\u5bf9\u5e94\u7684\u96c6\u7fa4\u53c2\u6570\u3002

        4. \u70b9\u51fb \u786e\u5b9a \u540e\uff0c\u53ef\u4ee5\u770b\u5230\u96c6\u7fa4\u7684\u5347\u7ea7\u8fdb\u5ea6\u3002

        5. \u96c6\u7fa4\u5347\u7ea7\u9884\u8ba1\u9700\u8981 30 \u5206\u949f\uff0c\u53ef\u4ee5\u70b9\u51fb \u5b9e\u65f6\u65e5\u5fd7 \u6309\u94ae\u67e5\u770b\u96c6\u7fa4\u5347\u7ea7\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/configmap-hot-loading.html","title":"configmap/secret \u70ed\u52a0\u8f7d","text":"

        configmap/secret \u70ed\u52a0\u8f7d\u662f\u6307\u5c06 configmap/secret \u4f5c\u4e3a\u6570\u636e\u5377\u6302\u8f7d\u5728\u5bb9\u5668\u4e2d\u6302\u8f7d\u65f6\uff0c\u5f53\u914d\u7f6e\u53d1\u751f\u6539\u53d8\u65f6\uff0c\u5bb9\u5668\u5c06\u81ea\u52a8\u8bfb\u53d6 configmap/secret \u66f4\u65b0\u540e\u7684\u914d\u7f6e\uff0c\u800c\u65e0\u9700\u91cd\u542f Pod\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/configmap-hot-loading.html#_1","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
        1. \u53c2\u8003\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d - \u5bb9\u5668\u914d\u7f6e\uff0c\u914d\u7f6e\u5bb9\u5668\u6570\u636e\u5b58\u50a8\uff0c\u9009\u62e9 Configmap \u3001 Configmap Key \u3001 Secret \u3001 Secret Key \u4f5c\u4e3a\u6570\u636e\u5377\u6302\u8f7d\u81f3\u5bb9\u5668\u3002

          Note

          \u4f7f\u7528\u5b50\u8def\u5f84\uff08SubPath\uff09\u65b9\u5f0f\u6302\u8f7d\u7684\u914d\u7f6e\u6587\u4ef6\u4e0d\u652f\u6301\u70ed\u52a0\u8f7d\u3002

        2. \u8fdb\u5165\u3010\u914d\u7f6e\u4e0e\u5bc6\u94a5\u3011\u9875\u9762\uff0c\u8fdb\u5165\u914d\u7f6e\u9879\u8be6\u60c5\u9875\u9762\uff0c\u5728\u3010\u5173\u8054\u8d44\u6e90\u3011\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 container \u8d44\u6e90\uff0c\u70b9\u51fb \u7acb\u5373\u52a0\u8f7d \u6309\u94ae\uff0c\u8fdb\u5165\u914d\u7f6e\u70ed\u52a0\u8f7d\u9875\u9762\u3002

          Note

          \u5982\u679c\u60a8\u7684\u5e94\u7528\u652f\u6301\u81ea\u52a8\u8bfb\u53d6 configmap/secret \u66f4\u65b0\u540e\u7684\u914d\u7f6e\uff0c\u5219\u65e0\u9700\u624b\u52a8\u6267\u884c\u70ed\u52a0\u8f7d\u64cd\u4f5c\u3002

        3. \u5728\u70ed\u52a0\u8f7d\u914d\u7f6e\u5f39\u7a97\u4e2d\uff0c\u8f93\u5165\u8fdb\u5165\u5bb9\u5668\u5185\u7684 \u6267\u884c\u547d\u4ee4 \u5e76\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u4ee5\u91cd\u8f7d\u914d\u7f6e\u3002\u4f8b\u5982\uff0c\u5728 nginx \u5bb9\u5668\u4e2d\uff0c\u4ee5 root \u7528\u6237\u6743\u9650\uff0c\u6267\u884c nginx -s reload \u547d\u4ee4\u6765\u91cd\u8f7d\u914d\u7f6e\u3002

        4. \u5728\u754c\u9762\u5f39\u51fa\u7684 web \u7ec8\u7aef\u4e2d\u67e5\u770b\u5e94\u7528\u91cd\u8f7d\u60c5\u51b5\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/create-configmap.html","title":"\u521b\u5efa\u914d\u7f6e\u9879","text":"

        \u914d\u7f6e\u9879\uff08ConfigMap\uff09\u4ee5\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u5b58\u50a8\u975e\u673a\u5bc6\u6027\u6570\u636e\uff0c\u5b9e\u73b0\u914d\u7f6e\u6570\u636e\u548c\u5e94\u7528\u4ee3\u7801\u76f8\u4e92\u89e3\u8026\u7684\u6548\u679c\u3002\u914d\u7f6e\u9879\u53ef\u7528\u4f5c\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3001\u547d\u4ee4\u884c\u53c2\u6570\u6216\u8005\u5b58\u50a8\u5377\u4e2d\u7684\u914d\u7f6e\u6587\u4ef6\u3002

        Note

        • \u5728\u914d\u7f6e\u9879\u4e2d\u4fdd\u5b58\u7684\u6570\u636e\u4e0d\u53ef\u8d85\u8fc7 1 MiB\u3002\u5982\u679c\u9700\u8981\u5b58\u50a8\u4f53\u79ef\u66f4\u5927\u7684\u6570\u636e\uff0c\u5efa\u8bae\u6302\u8f7d\u5b58\u50a8\u5377\u6216\u8005\u4f7f\u7528\u72ec\u7acb\u7684\u6570\u636e\u5e93\u6216\u8005\u6587\u4ef6\u670d\u52a1\u3002

        • \u914d\u7f6e\u9879\u4e0d\u63d0\u4f9b\u4fdd\u5bc6\u6216\u8005\u52a0\u5bc6\u529f\u80fd\u3002\u5982\u679c\u8981\u5b58\u50a8\u52a0\u5bc6\u6570\u636e\uff0c\u5efa\u8bae\u4f7f\u7528\u5bc6\u94a5\uff0c\u6216\u8005\u5176\u4ed6\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u4fdd\u8bc1\u6570\u636e\u7684\u79c1\u5bc6\u6027\u3002

        \u652f\u6301\u4e24\u79cd\u521b\u5efa\u65b9\u5f0f\uff1a

        • \u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa
        • YAML \u521b\u5efa
        "},{"location":"admin/kpanda/configmaps-secrets/create-configmap.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

        • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/create-configmap.html#_3","title":"\u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa","text":"
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

        2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u914d\u7f6e\u9879 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u914d\u7f6e\u9879 \u6309\u94ae\u3002

        3. \u5728 \u521b\u5efa\u914d\u7f6e\u9879 \u9875\u9762\u4e2d\u586b\u5199\u914d\u7f6e\u4fe1\u606f\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

          Note

          \u70b9\u51fb \u4e0a\u4f20\u6587\u4ef6 \u53ef\u4ee5\u4ece\u672c\u5730\u5bfc\u5165\u5df2\u6709\u7684\u6587\u4ef6\uff0c\u5feb\u901f\u521b\u5efa\u914d\u7f6e\u9879\u3002

        4. \u521b\u5efa\u5b8c\u6210\u540e\u5728\u914d\u7f6e\u9879\u53f3\u4fa7\u70b9\u51fb\u66f4\u591a\u53ef\u4ee5\uff0c\u53ef\u4ee5\u7f16\u8f91 YAML\u3001\u66f4\u65b0\u3001\u5bfc\u51fa\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/create-configmap.html#yaml","title":"YAML \u521b\u5efa","text":"
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

        2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u914d\u7f6e\u9879 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

        3. \u586b\u5199\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u3002

          Note

          • \u70b9\u51fb \u5bfc\u5165 \u53ef\u4ee5\u4ece\u672c\u5730\u5bfc\u5165\u5df2\u6709\u7684\u6587\u4ef6\uff0c\u5feb\u901f\u521b\u5efa\u914d\u7f6e\u9879\u3002
          • \u586b\u5199\u6570\u636e\u4e4b\u540e\u70b9\u51fb \u4e0b\u8f7d \u53ef\u4ee5\u5c06\u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u5728\u672c\u5730\u3002

        4. \u521b\u5efa\u5b8c\u6210\u540e\u5728\u914d\u7f6e\u9879\u53f3\u4fa7\u70b9\u51fb\u66f4\u591a\u53ef\u4ee5\uff0c\u53ef\u4ee5\u7f16\u8f91 YAML\u3001\u66f4\u65b0\u3001\u5bfc\u51fa\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/create-configmap.html#yaml_1","title":"\u914d\u7f6e\u9879 YAML \u793a\u4f8b","text":"
        ```yaml\nkind: ConfigMap\napiVersion: v1\nmetadata:\n  name: kube-root-ca.crt\n  namespace: default\n  annotations:\ndata:\n  version: '1.0'\n```\n

        \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528\u914d\u7f6e\u9879

        "},{"location":"admin/kpanda/configmaps-secrets/create-secret.html","title":"\u521b\u5efa\u5bc6\u94a5","text":"

        \u5bc6\u94a5\u662f\u4e00\u79cd\u7528\u4e8e\u5b58\u50a8\u548c\u7ba1\u7406\u5bc6\u7801\u3001OAuth \u4ee4\u724c\u3001SSH\u3001TLS \u51ed\u636e\u7b49\u654f\u611f\u4fe1\u606f\u7684\u8d44\u6e90\u5bf9\u8c61\u3002\u4f7f\u7528\u5bc6\u94a5\u610f\u5473\u7740\u60a8\u4e0d\u9700\u8981\u5728\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5305\u542b\u654f\u611f\u7684\u673a\u5bc6\u6570\u636e\u3002

        \u5bc6\u94a5\u4f7f\u7528\u573a\u666f\uff1a

        • \u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u4f7f\u7528\uff0c\u63d0\u4f9b\u5bb9\u5668\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u7684\u4e00\u4e9b\u5fc5\u8981\u4fe1\u606f\u3002
        • \u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a Pod \u7684\u6570\u636e\u5377\u3002
        • \u5728 kubelet \u62c9\u53d6\u5bb9\u5668\u955c\u50cf\u65f6\u4f5c\u4e3a\u955c\u50cf\u4ed3\u5e93\u7684\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1\u3002

        \u652f\u6301\u4e24\u79cd\u521b\u5efa\u65b9\u5f0f\uff1a

        • \u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa
        • YAML \u521b\u5efa
        "},{"location":"admin/kpanda/configmaps-secrets/create-secret.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

        • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/create-secret.html#_3","title":"\u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa","text":"
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

        2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u5bc6\u94a5 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u5bc6\u94a5 \u6309\u94ae\u3002

        3. \u5728 \u521b\u5efa\u5bc6\u94a5 \u9875\u9762\u4e2d\u586b\u5199\u914d\u7f6e\u4fe1\u606f\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

          \u586b\u5199\u914d\u7f6e\u65f6\u9700\u8981\u6ce8\u610f\uff1a

          • \u5bc6\u94a5\u7684\u540d\u79f0\u5728\u540c\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\u5fc5\u987b\u5177\u6709\u552f\u4e00\u6027
          • \u5bc6\u94a5\u7c7b\u578b\uff1a
            • \u9ed8\u8ba4\uff08Opaque\uff09\uff1aKubernetes \u9ed8\u8ba4\u7684\u5bc6\u94a5\u7c7b\u578b\uff0c\u652f\u6301\u7528\u6237\u5b9a\u4e49\u7684\u4efb\u610f\u6570\u636e\u3002
            • TLS (kubernetes.io/tls)\uff1a\u7528\u4e8e TLS \u5ba2\u6237\u7aef\u6216\u8005\u670d\u52a1\u5668\u7aef\u6570\u636e\u8bbf\u95ee\u7684\u51ed\u8bc1\u3002
            • \u955c\u50cf\u4ed3\u5e93\u4fe1\u606f (kubernetes.io/dockerconfigjson)\uff1a\u7528\u4e8e\u955c\u50cf\u4ed3\u5e93\u8bbf\u95ee\u7684\u51ed\u8bc1\u3002
            • \u7528\u6237\u540d\u548c\u5bc6\u7801\uff08kubernetes.io/basic-auth\uff09\uff1a\u7528\u4e8e\u57fa\u672c\u8eab\u4efd\u8ba4\u8bc1\u7684\u51ed\u8bc1\u3002
            • \u81ea\u5b9a\u4e49\uff1a\u7528\u6237\u6839\u636e\u4e1a\u52a1\u9700\u8981\u81ea\u5b9a\u4e49\u7684\u7c7b\u578b\u3002
          • \u5bc6\u94a5\u6570\u636e\uff1a\u5bc6\u94a5\u6240\u5b58\u50a8\u7684\u6570\u636e\uff0c\u4e0d\u540c\u6570\u636e\u9700\u8981\u586b\u5199\u7684\u53c2\u6570\u6709\u6240\u4e0d\u540c
            • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a\u9ed8\u8ba4\uff08Opaque\uff09/\u81ea\u5b9a\u4e49\uff1a\u53ef\u4ee5\u586b\u5165\u591a\u4e2a\u952e\u503c\u5bf9\u6570\u636e\u3002
            • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a TLS (kubernetes.io/tls)\uff1a\u9700\u8981\u586b\u5165\u8bc1\u4e66\u51ed\u8bc1\u548c\u79c1\u94a5\u6570\u636e\u3002\u8bc1\u4e66\u662f\u81ea\u7b7e\u540d\u6216 CA \u7b7e\u540d\u8fc7\u7684\u51ed\u636e\uff0c\u7528\u6765\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u3002\u8bc1\u4e66\u8bf7\u6c42\u662f\u5bf9\u7b7e\u540d\u7684\u8bf7\u6c42\uff0c\u9700\u8981\u4f7f\u7528\u79c1\u94a5\u8fdb\u884c\u7b7e\u540d\u3002
            • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a\u955c\u50cf\u4ed3\u5e93\u4fe1\u606f (kubernetes.io/dockerconfigjson)\uff1a\u9700\u8981\u586b\u5165\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u7684\u8d26\u53f7\u548c\u5bc6\u7801\u3002
            • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a\u7528\u6237\u540d\u548c\u5bc6\u7801\uff08kubernetes.io/basic-auth\uff09\uff1a\u9700\u8981\u6307\u5b9a\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002
        "},{"location":"admin/kpanda/configmaps-secrets/create-secret.html#yaml","title":"YAML \u521b\u5efa","text":"
        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

        2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u5bc6\u94a5 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

        3. \u5728 YAML \u521b\u5efa \u9875\u9762\u4e2d\u586b\u5199 YAML \u914d\u7f6e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

          \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/create-secret.html#yaml_1","title":"\u5bc6\u94a5 YAML \u793a\u4f8b","text":"
        ```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: secretdemo\ntype: Opaque\ndata:\n  username: ******\n  password: ******\n```\n

        \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528\u5bc6\u94a5

        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html","title":"\u4f7f\u7528\u914d\u7f6e\u9879","text":"

        \u914d\u7f6e\u9879\uff08ConfigMap\uff09\u662f Kubernetes \u7684\u4e00\u79cd API \u5bf9\u8c61\uff0c\u7528\u6765\u5c06\u975e\u673a\u5bc6\u6027\u7684\u6570\u636e\u4fdd\u5b58\u5230\u952e\u503c\u5bf9\u4e2d\uff0c\u53ef\u4ee5\u5b58\u50a8\u5176\u4ed6\u5bf9\u8c61\u6240\u9700\u8981\u4f7f\u7528\u7684\u914d\u7f6e\u3002 \u4f7f\u7528\u65f6\uff0c \u5bb9\u5668\u53ef\u4ee5\u5c06\u5176\u7528\u4f5c\u73af\u5883\u53d8\u91cf\u3001\u547d\u4ee4\u884c\u53c2\u6570\u6216\u8005\u5b58\u50a8\u5377\u4e2d\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u901a\u8fc7\u4f7f\u7528\u914d\u7f6e\u9879\uff0c\u80fd\u591f\u5c06\u914d\u7f6e\u6570\u636e\u548c\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u5206\u5f00\uff0c\u4e3a\u5e94\u7528\u914d\u7f6e\u7684\u4fee\u6539\u63d0\u4f9b\u66f4\u52a0\u7075\u6d3b\u7684\u9014\u5f84\u3002

        Note

        \u914d\u7f6e\u9879\u5e76\u4e0d\u63d0\u4f9b\u4fdd\u5bc6\u6216\u8005\u52a0\u5bc6\u529f\u80fd\u3002\u5982\u679c\u8981\u5b58\u50a8\u7684\u6570\u636e\u662f\u673a\u5bc6\u7684\uff0c\u8bf7\u4f7f\u7528\u5bc6\u94a5\uff0c\u6216\u8005\u4f7f\u7528\u5176\u4ed6\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u4fdd\u8bc1\u6570\u636e\u7684\u79c1\u5bc6\u6027\uff0c\u800c\u4e0d\u662f\u7528\u914d\u7f6e\u9879\u3002 \u6b64\u5916\u5728\u5bb9\u5668\u91cc\u4f7f\u7528\u914d\u7f6e\u9879\u65f6\uff0c\u5bb9\u5668\u548c\u914d\u7f6e\u9879\u5fc5\u987b\u5904\u4e8e\u540c\u4e00\u96c6\u7fa4\u7684\u547d\u540d\u7a7a\u95f4\u4e2d\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_2","title":"\u4f7f\u7528\u573a\u666f","text":"

        \u60a8\u53ef\u4ee5\u5728 Pod \u4e2d\u4f7f\u7528\u914d\u7f6e\u9879\uff0c\u6709\u591a\u79cd\u4f7f\u7528\u573a\u666f\uff0c\u4e3b\u8981\u5305\u62ec\uff1a

        • \u4f7f\u7528\u914d\u7f6e\u9879\u8bbe\u7f6e\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf

        • \u4f7f\u7528\u914d\u7f6e\u9879\u8bbe\u7f6e\u5bb9\u5668\u7684\u547d\u4ee4\u884c\u53c2\u6570

        • \u4f7f\u7528\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377

        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_3","title":"\u8bbe\u7f6e\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf","text":"

        \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3002

        Note

        \u914d\u7f6e\u9879\u5bfc\u5165\u662f\u5c06\u914d\u7f6e\u9879\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff1b\u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165\u662f\u5c06\u914d\u7f6e\u9879\u4e2d\u67d0\u4e00\u53c2\u6570\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_4","title":"\u56fe\u5f62\u5316\u754c\u9762\u64cd\u4f5c","text":"

        \u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u53ef\u4ee5\u5728 \u73af\u5883\u53d8\u91cf \u754c\u9762\u901a\u8fc7\u9009\u62e9 \u914d\u7f6e\u9879\u5bfc\u5165 \u6216 \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165 \u4e3a\u5bb9\u5668\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u3002

        1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u4e2d\uff0c\u5728 \u5bb9\u5668\u914d\u7f6e \u8fd9\u4e00\u6b65\u4e2d\uff0c\u9009\u62e9 \u73af\u5883\u53d8\u91cf \u914d\u7f6e\uff0c\u70b9\u51fb \u6dfb\u52a0\u73af\u5883\u53d8\u91cf \u6309\u94ae\u3002

        2. \u5728\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u5904\u9009\u62e9 \u914d\u7f6e\u9879\u5bfc\u5165 \u6216 \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165 \u3002

          • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u914d\u7f6e\u9879\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u524d\u7f00 \u540d\u79f0\u3001 \u914d\u7f6e\u9879 \u7684\u540d\u79f0\u3002

          • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u914d\u7f6e\u9879 \u540d\u79f0\u3001 \u952e \u7684\u540d\u79f0\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_5","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

        \u60a8\u53ef\u4ee5\u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\u5c06\u914d\u7f6e\u9879\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\uff0c\u4f7f\u7528 valueFrom \u53c2\u6570\u5f15\u7528 ConfigMap \u4e2d\u7684 Key/Value\u3002

        apiVersion: v1\nkind: Pod\nmetadata:\n  name: configmap-pod-1\nspec:\n  containers:\n    - name: test-container\n      image: busybox\n      command: [ \"/bin/sh\", \"-c\", \"env\" ]\n      env:\n        - name: SPECIAL_LEVEL_KEY\n          valueFrom:                  # (1)!\n            configMapKeyRef:\n              name: kpanda-configmap  # (2)!\n              key: SPECIAL_LEVEL      # (3)!\n  restartPolicy: Never\n
        1. \u4f7f\u7528 valueFrom \u6765\u6307\u5b9a env \u5f15\u7528\u914d\u7f6e\u9879\u7684 value \u503c
        2. \u5f15\u7528\u7684\u914d\u7f6e\u6587\u4ef6\u540d\u79f0
        3. \u5f15\u7528\u7684\u914d\u7f6e\u9879 key
        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_6","title":"\u8bbe\u7f6e\u5bb9\u5668\u7684\u547d\u4ee4\u884c\u53c2\u6570","text":"

        \u60a8\u53ef\u4ee5\u4f7f\u7528\u914d\u7f6e\u9879\u8bbe\u7f6e\u5bb9\u5668\u4e2d\u7684\u547d\u4ee4\u6216\u8005\u53c2\u6570\u503c\uff0c\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u66ff\u6362\u8bed\u6cd5 $(VAR_NAME) \u6765\u8fdb\u884c\u3002\u5982\u4e0b\u6240\u793a\u3002

        apiVersion: v1\nkind: Pod\nmetadata:\n  name: configmap-pod-3\nspec:\n  containers:\n    - name: test-container\n      image: busybox\n      command: [ \"/bin/sh\", \"-c\", \"echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)\" ]\n      env:\n        - name: SPECIAL_LEVEL_KEY\n          valueFrom:\n            configMapKeyRef:\n              name: kpanda-configmap\n              key: SPECIAL_LEVEL\n        - name: SPECIAL_TYPE_KEY\n          valueFrom:\n            configMapKeyRef:\n              name: kpanda-configmap\n              key: SPECIAL_TYPE\n  restartPolicy: Never\n

        \u8fd9\u4e2a Pod \u8fd0\u884c\u540e\uff0c\u8f93\u51fa\u5982\u4e0b\u5185\u5bb9\u3002

        Hello Kpanda\n
        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_7","title":"\u7528\u4f5c\u5bb9\u5668\u6570\u636e\u5377","text":"

        \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_8","title":"\u56fe\u5f62\u5316\u64cd\u4f5c","text":"

        \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 \u6570\u636e\u5b58\u50a8 \u754c\u9762\u9009\u62e9\u5b58\u50a8\u7c7b\u578b\u4e3a \u914d\u7f6e\u9879 \uff0c\u5c06\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377\u3002

        1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u4e2d\uff0c\u5728 \u5bb9\u5668\u914d\u7f6e \u8fd9\u4e00\u6b65\u4e2d\uff0c\u9009\u62e9 \u6570\u636e\u5b58\u50a8 \u914d\u7f6e\uff0c\u5728 \u8282\u70b9\u8def\u5f84\u6620\u5c04 \u5217\u8868\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u3002

        2. \u5728\u5b58\u50a8\u7c7b\u578b\u5904\u9009\u62e9 \u914d\u7f6e\u9879 \uff0c\u5e76\u4f9d\u6b21\u8f93\u5165 \u5bb9\u5668\u8def\u5f84 \u3001 \u5b50\u8def\u5f84 \u7b49\u4fe1\u606f\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-configmap.html#_9","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

        \u8981\u5728\u4e00\u4e2a Pod \u7684\u5b58\u50a8\u5377\u4e2d\u4f7f\u7528 ConfigMap\u3002

        \u4e0b\u9762\u662f\u4e00\u4e2a\u5c06 ConfigMap \u4ee5\u5377\u7684\u5f62\u5f0f\u8fdb\u884c\u6302\u8f7d\u7684 Pod \u793a\u4f8b\uff1a

        apiVersion: v1\nkind: Pod\nmetadata:\n  name: mypod\nspec:\n  containers:\n  - name: mypod\n    image: redis\n    volumeMounts:\n    - name: foo\n      mountPath: \"/etc/foo\"\n      readOnly: true\n  volumes:\n  - name: foo\n    configMap:\n      name: myconfigmap\n

        \u5982\u679c Pod \u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\uff0c\u5219\u6bcf\u4e2a\u5bb9\u5668\u90fd\u9700\u8981\u81ea\u5df1\u7684 volumeMounts \u5757\uff0c\u4f46\u9488\u5bf9\u6bcf\u4e2a ConfigMap\uff0c\u60a8\u53ea\u9700\u8981\u8bbe\u7f6e\u4e00\u4e2a spec.volumes \u5757\u3002

        Note

        \u5c06\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u6302\u8f7d\u7684\u6570\u636e\u5377\u65f6\uff0c\u914d\u7f6e\u9879\u53ea\u80fd\u4f5c\u4e3a\u53ea\u8bfb\u6587\u4ef6\u8fdb\u884c\u8bfb\u53d6\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html","title":"\u4f7f\u7528\u5bc6\u94a5","text":"

        \u5bc6\u94a5\u662f\u4e00\u79cd\u7528\u4e8e\u5b58\u50a8\u548c\u7ba1\u7406\u5bc6\u7801\u3001OAuth \u4ee4\u724c\u3001SSH\u3001TLS \u51ed\u636e\u7b49\u654f\u611f\u4fe1\u606f\u7684\u8d44\u6e90\u5bf9\u8c61\u3002\u4f7f\u7528\u5bc6\u94a5\u610f\u5473\u7740\u60a8\u4e0d\u9700\u8981\u5728\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5305\u542b\u654f\u611f\u7684\u673a\u5bc6\u6570\u636e\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#_2","title":"\u4f7f\u7528\u573a\u666f","text":"

        \u60a8\u53ef\u4ee5\u5728 Pod \u4e2d\u4f7f\u7528\u5bc6\u94a5\uff0c\u6709\u591a\u79cd\u4f7f\u7528\u573a\u666f\uff0c\u4e3b\u8981\u5305\u62ec\uff1a

        • \u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u4f7f\u7528\uff0c\u63d0\u4f9b\u5bb9\u5668\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u7684\u4e00\u4e9b\u5fc5\u8981\u4fe1\u606f\u3002
        • \u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a Pod \u7684\u6570\u636e\u5377\u3002
        • \u5728 kubelet \u62c9\u53d6\u5bb9\u5668\u955c\u50cf\u65f6\u7528\u4f5c\u955c\u50cf\u4ed3\u5e93\u7684\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1\u4f7f\u7528\u3002
        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#_3","title":"\u4f7f\u7528\u5bc6\u94a5\u8bbe\u7f6e\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf","text":"

        \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3002

        Note

        \u5bc6\u94a5\u5bfc\u5165\u662f\u5c06\u5bc6\u94a5\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff1b\u5bc6\u94a5\u952e\u503c\u5bfc\u5165\u662f\u5c06\u5bc6\u94a5\u4e2d\u67d0\u4e00\u53c2\u6570\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#_4","title":"\u56fe\u5f62\u754c\u9762\u64cd\u4f5c","text":"

        \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u5728 \u73af\u5883\u53d8\u91cf \u754c\u9762\u901a\u8fc7\u9009\u62e9 \u5bc6\u94a5\u5bfc\u5165 \u6216 \u5bc6\u94a5\u952e\u503c\u5bfc\u5165 \u4e3a\u5bb9\u5668\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u3002

        1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u3002

        2. \u5728 \u5bb9\u5668\u914d\u7f6e \u9009\u62e9 \u73af\u5883\u53d8\u91cf \u914d\u7f6e\uff0c\u70b9\u51fb \u6dfb\u52a0\u73af\u5883\u53d8\u91cf \u6309\u94ae\u3002

        3. \u5728\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u5904\u9009\u62e9 \u5bc6\u94a5\u5bfc\u5165 \u6216 \u5bc6\u94a5\u952e\u503c\u5bfc\u5165 \u3002

          • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u5bc6\u94a5\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u524d\u7f00 \u3001 \u5bc6\u94a5 \u7684\u540d\u79f0\u3002

          • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u5bc6\u94a5\u952e\u503c\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u5bc6\u94a5 \u3001 \u952e \u7684\u540d\u79f0\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#_5","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

        \u5982\u4e0b\u4f8b\u6240\u793a\uff0c\u60a8\u53ef\u4ee5\u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\u5c06\u5bc6\u94a5\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\uff0c\u4f7f\u7528 valueFrom \u53c2\u6570\u5f15\u7528 Secret \u4e2d\u7684 Key/Value\u3002

        apiVersion: v1\nkind: Pod\nmetadata:\n  name: secret-env-pod\nspec:\n  containers:\n  - name: mycontainer\n    image: redis\n    env:\n      - name: SECRET_USERNAME\n        valueFrom:\n          secretKeyRef:\n            name: mysecret\n            key: username\n            optional: false # (1)!\n      - name: SECRET_PASSWORD\n        valueFrom:\n          secretKeyRef:\n            name: mysecret\n            key: password\n            optional: false # (2)!\n
        1. \u6b64\u503c\u4e3a\u9ed8\u8ba4\u503c\uff1b\u610f\u5473\u7740 \"mysecret\"\uff0c\u5fc5\u987b\u5b58\u5728\u4e14\u5305\u542b\u540d\u4e3a \"username\" \u7684\u4e3b\u952e
        2. \u6b64\u503c\u4e3a\u9ed8\u8ba4\u503c\uff1b\u610f\u5473\u7740 \"mysecret\"\uff0c\u5fc5\u987b\u5b58\u5728\u4e14\u5305\u542b\u540d\u4e3a \"password\" \u7684\u4e3b\u952e
        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#pod","title":"\u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a Pod \u7684\u6570\u636e\u5377","text":""},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#_6","title":"\u56fe\u5f62\u754c\u9762\u64cd\u4f5c","text":"

        \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 \u6570\u636e\u5b58\u50a8 \u754c\u9762\u9009\u62e9\u5b58\u50a8\u7c7b\u578b\u4e3a \u5bc6\u94a5 \uff0c\u5c06\u5bc6\u94a5\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377\u3002

        1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u3002

        2. \u5728 \u5bb9\u5668\u914d\u7f6e \u9009\u62e9 \u6570\u636e\u5b58\u50a8 \u914d\u7f6e\uff0c\u5728 \u8282\u70b9\u8def\u5f84\u6620\u5c04 \u5217\u8868\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u3002

        3. \u5728\u5b58\u50a8\u7c7b\u578b\u5904\u9009\u62e9 \u5bc6\u94a5 \uff0c\u5e76\u4f9d\u6b21\u8f93\u5165 \u5bb9\u5668\u8def\u5f84 \u3001 \u5b50\u8def\u5f84 \u7b49\u4fe1\u606f\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#_7","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

        \u4e0b\u9762\u662f\u4e00\u4e2a\u901a\u8fc7\u6570\u636e\u5377\u6765\u6302\u8f7d\u540d\u4e3a mysecret \u7684 Secret \u7684 Pod \u793a\u4f8b\uff1a

        apiVersion: v1\nkind: Pod\nmetadata:\n  name: mypod\nspec:\n  containers:\n  - name: mypod\n    image: redis\n    volumeMounts:\n    - name: foo\n      mountPath: \"/etc/foo\"\n      readOnly: true\n  volumes:\n  - name: foo\n    secret:\n      secretName: mysecret\n      optional: false # (1)!\n
        1. \u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u610f\u5473\u7740 \"mysecret\" \u5fc5\u987b\u5df2\u7ecf\u5b58\u5728

        \u5982\u679c Pod \u4e2d\u5305\u542b\u591a\u4e2a\u5bb9\u5668\uff0c\u5219\u6bcf\u4e2a\u5bb9\u5668\u9700\u8981\u81ea\u5df1\u7684 volumeMounts \u5757\uff0c\u4e0d\u8fc7\u9488\u5bf9\u6bcf\u4e2a Secret \u800c\u8a00\uff0c\u53ea\u9700\u8981\u4e00\u4efd .spec.volumes \u8bbe\u7f6e\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#kubelet","title":"\u5728 kubelet \u62c9\u53d6\u5bb9\u5668\u955c\u50cf\u65f6\u7528\u4f5c\u955c\u50cf\u4ed3\u5e93\u7684\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1","text":"

        \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a\u955c\u50cf\u4ed3\u5e93\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1\u3002

        "},{"location":"admin/kpanda/configmaps-secrets/use-secret.html#_8","title":"\u56fe\u5f62\u5316\u64cd\u4f5c","text":"

        \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 \u6570\u636e\u5b58\u50a8 \u754c\u9762\u9009\u62e9\u5b58\u50a8\u7c7b\u578b\u4e3a \u5bc6\u94a5 \uff0c\u5c06\u5bc6\u94a5\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377\u3002

        1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u3002

        2. \u5728\u7b2c\u4e8c\u6b65 \u5bb9\u5668\u914d\u7f6e \u65f6\u9009\u62e9 \u57fa\u672c\u4fe1\u606f \u914d\u7f6e\uff0c\u70b9\u51fb \u9009\u62e9\u955c\u50cf \u6309\u94ae\u3002

        3. \u5728\u5f39\u6846\u7684 \u955c\u50cf\u4ed3\u5e93 \u4e0b\u62c9\u9009\u62e9\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u540d\u79f0\u3002\u5173\u4e8e\u79c1\u6709\u955c\u50cf\u5bc6\u94a5\u521b\u5efa\u8bf7\u67e5\u770b\u521b\u5efa\u5bc6\u94a5\u4e86\u89e3\u8be6\u60c5\u3002

        4. \u8f93\u5165\u79c1\u6709\u4ed3\u5e93\u5185\u7684\u955c\u50cf\u540d\u79f0\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u955c\u50cf\u9009\u62e9\u3002

        Note

        \u521b\u5efa\u5bc6\u94a5\u65f6\uff0c\u9700\u8981\u786e\u4fdd\u8f93\u5165\u6b63\u786e\u7684\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u3001\u7528\u6237\u540d\u79f0\u3001\u5bc6\u7801\u5e76\u9009\u62e9\u6b63\u786e\u7684\u955c\u50cf\u540d\u79f0\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u83b7\u53d6\u955c\u50cf\u4ed3\u5e93\u4e2d\u7684\u955c\u50cf\u3002

        "},{"location":"admin/kpanda/custom-resources/create.html","title":"\u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90 (CRD)","text":"

        \u5728 Kubernetes \u4e2d\u4e00\u5207\u5bf9\u8c61\u90fd\u88ab\u62bd\u8c61\u4e3a\u8d44\u6e90\uff0c\u5982 Pod\u3001Deployment\u3001Service\u3001Volume \u7b49\u662f Kubernetes \u63d0\u4f9b\u7684\u9ed8\u8ba4\u8d44\u6e90\uff0c \u8fd9\u4e3a\u6211\u4eec\u7684\u65e5\u5e38\u8fd0\u7ef4\u548c\u7ba1\u7406\u5de5\u4f5c\u63d0\u4f9b\u4e86\u91cd\u8981\u652f\u6491\uff0c\u4f46\u662f\u5728\u4e00\u4e9b\u7279\u6b8a\u7684\u573a\u666f\u4e2d\uff0c\u73b0\u6709\u7684\u9884\u7f6e\u8d44\u6e90\u5e76\u4e0d\u80fd\u6ee1\u8db3\u4e1a\u52a1\u7684\u9700\u8981\uff0c \u56e0\u6b64\u6211\u4eec\u5e0c\u671b\u53bb\u6269\u5c55 Kubernetes API \u7684\u80fd\u529b\uff0c\u81ea\u5b9a\u4e49\u8d44\u6e90\uff08CustomResourceDefinition, CRD\uff09\u6b63\u662f\u57fa\u4e8e\u8fd9\u6837\u7684\u9700\u6c42\u5e94\u8fd0\u800c\u751f\u3002

        \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u5bf9\u81ea\u5b9a\u4e49\u8d44\u6e90\u7684\u754c\u9762\u5316\u7ba1\u7406\uff0c\u4e3b\u8981\u529f\u80fd\u5982\u4e0b\uff1a

        • \u83b7\u53d6\u96c6\u7fa4\u4e0b\u81ea\u5b9a\u4e49\u8d44\u6e90\u5217\u8868\u548c\u8be6\u7ec6\u4fe1\u606f
        • \u57fa\u4e8e YAML \u521b\u5efa\u81ea\u5b9a\u8d44\u6e90
        • \u57fa\u4e8e YAML \u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90\u793a\u4f8b CR\uff08Custom Resource\uff09
        • \u5220\u9664\u81ea\u5b9a\u4e49\u8d44\u6e90
        "},{"location":"admin/kpanda/custom-resources/create.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

        • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a Cluster Admin \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u6388\u6743

        "},{"location":"admin/kpanda/custom-resources/create.html#yaml","title":"\u901a\u8fc7 YAML \u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90","text":"
        1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

        2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

        3. \u5728 YAML \u521b\u5efa \u9875\u9762\u4e2d\uff0c\u586b\u5199 YAML \u8bed\u53e5\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

        4. \u8fd4\u56de\u81ea\u5b9a\u4e49\u8d44\u6e90\u5217\u8868\u9875\uff0c\u5373\u53ef\u67e5\u770b\u521a\u521a\u521b\u5efa\u7684\u540d\u4e3a crontabs.stable.example.com \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\u3002

        \u81ea\u5b9a\u4e49\u8d44\u6e90\u793a\u4f8b\uff1a

        CRD example
        apiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  name: crontabs.stable.example.com\nspec:\n  group: stable.example.com\n  versions:\n    - name: v1\n      served: true\n      storage: true\n      schema:\n        openAPIV3Schema:\n          type: object\n          properties:\n            spec:\n              type: object\n              properties:\n                cronSpec:\n                  type: string\n                image:\n                  type: string\n                replicas:\n                  type: integer\n  scope: Namespaced\n  names:\n    plural: crontabs\n    singular: crontab\n    kind: CronTab\n    shortNames:\n    - ct\n
        "},{"location":"admin/kpanda/custom-resources/create.html#yaml_1","title":"\u901a\u8fc7 YAML \u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90\u793a\u4f8b","text":"
        1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

        2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u8fdb\u5165\u81ea\u5b9a\u4e49\u8d44\u6e90\u5217\u8868\u9875\u9762\u3002

        3. \u70b9\u51fb\u540d\u4e3a crontabs.stable.example.com \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\uff0c\u8fdb\u5165\u8be6\u60c5\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

        4. \u5728 YAML \u521b\u5efa \u9875\u9762\u4e2d\uff0c\u586b\u5199 YAML \u8bed\u53e5\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

        5. \u8fd4\u56de crontabs.stable.example.com \u7684\u8be6\u60c5\u9875\u9762\uff0c\u5373\u53ef\u67e5\u770b\u521a\u521a\u521b\u5efa\u7684\u540d\u4e3a my-new-cron-object \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\u3002

        CR \u793a\u4f8b\uff1a

        CR example
        apiVersion: \"stable.example.com/v1\"\nkind: CronTab\nmetadata:\n  name: my-new-cron-object\nspec:\n  cronSpec: \"* * * * */5\"\n  image: my-awesome-cron-image\n
        "},{"location":"admin/kpanda/gpu/index.html","title":"GPU \u7ba1\u7406\u6982\u8ff0","text":"

        \u672c\u6587\u4ecb\u7ecd \u7b97\u4e30 AI \u7b97\u529b\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u5bf9 GPU\u4e3a\u4ee3\u8868\u7684\u5f02\u6784\u8d44\u6e90\u7edf\u4e00\u8fd0\u7ef4\u7ba1\u7406\u80fd\u529b\u3002

        "},{"location":"admin/kpanda/gpu/index.html#_1","title":"\u80cc\u666f","text":"

        \u968f\u7740 AI \u5e94\u7528\u3001\u5927\u6a21\u578b\u3001\u4eba\u5de5\u667a\u80fd\u3001\u81ea\u52a8\u9a7e\u9a76\u7b49\u65b0\u5174\u6280\u672f\u7684\u5feb\u901f\u53d1\u5c55\uff0c\u4f01\u4e1a\u9762\u4e34\u7740\u8d8a\u6765\u8d8a\u591a\u7684\u8ba1\u7b97\u5bc6\u96c6\u578b\u4efb\u52a1\u548c\u6570\u636e\u5904\u7406\u9700\u6c42\u3002 \u4ee5 CPU \u4e3a\u4ee3\u8868\u7684\u4f20\u7edf\u8ba1\u7b97\u67b6\u6784\u5df2\u65e0\u6cd5\u6ee1\u8db3\u4f01\u4e1a\u65e5\u76ca\u589e\u957f\u7684\u8ba1\u7b97\u9700\u6c42\u3002\u6b64\u65f6\uff0c\u4ee5 GPU \u4e3a\u4ee3\u8868\u7684\u5f02\u6784\u8ba1\u7b97\u56e0\u5728\u5904\u7406\u5927\u89c4\u6a21\u6570\u636e\u3001\u8fdb\u884c\u590d\u6742\u8ba1\u7b97\u548c\u5b9e\u65f6\u56fe\u5f62\u6e32\u67d3\u65b9\u9762\u5177\u6709\u72ec\u7279\u7684\u4f18\u52bf\u88ab\u5e7f\u6cdb\u5e94\u7528\u3002

        \u4e0e\u6b64\u540c\u65f6\uff0c\u7531\u4e8e\u7f3a\u4e4f\u5f02\u6784\u8d44\u6e90\u8c03\u5ea6\u7ba1\u7406\u7b49\u65b9\u9762\u7684\u7ecf\u9a8c\u548c\u4e13\u4e1a\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5bfc\u81f4\u4e86 GPU \u8bbe\u5907\u7684\u8d44\u6e90\u5229\u7528\u7387\u6781\u4f4e\uff0c\u7ed9\u4f01\u4e1a\u5e26\u6765\u4e86\u9ad8\u6602\u7684 AI \u751f\u4ea7\u6210\u672c\u3002 \u5982\u4f55\u964d\u672c\u589e\u6548\uff0c\u63d0\u9ad8 GPU \u7b49\u5f02\u6784\u8d44\u6e90\u7684\u5229\u7528\u6548\u7387\uff0c\u6210\u4e3a\u4e86\u5f53\u524d\u4f17\u591a\u4f01\u4e1a\u4e9f\u9700\u8de8\u8d8a\u7684\u4e00\u9053\u96be\u9898\u3002

        "},{"location":"admin/kpanda/gpu/index.html#gpu_1","title":"GPU \u80fd\u529b\u4ecb\u7ecd","text":"

        \u7b97\u4e30 AI \u7b97\u529b\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u652f\u6301\u5bf9 GPU\u3001NPU \u7b49\u5f02\u6784\u8d44\u6e90\u8fdb\u884c\u7edf\u4e00\u8c03\u5ea6\u548c\u8fd0\u7ef4\u7ba1\u7406\uff0c\u5145\u5206\u91ca\u653e GPU \u8d44\u6e90\u7b97\u529b\uff0c\u52a0\u901f\u4f01\u4e1a AI \u7b49\u65b0\u5174\u5e94\u7528\u53d1\u5c55\u3002GPU \u7ba1\u7406\u80fd\u529b\u5982\u4e0b\uff1a

        • \u652f\u6301\u7edf\u4e00\u7eb3\u7ba1 NVIDIA\u3001\u534e\u4e3a\u6607\u817e\u3001\u5929\u6570\u7b49\u56fd\u5185\u5916\u5382\u5546\u7684\u5f02\u6784\u8ba1\u7b97\u8d44\u6e90\u3002
        • \u652f\u6301\u540c\u4e00\u96c6\u7fa4\u591a\u5361\u5f02\u6784\u8c03\u5ea6\uff0c\u5e76\u652f\u6301\u96c6\u7fa4 GPU \u5361\u81ea\u52a8\u8bc6\u522b\u3002
        • \u652f\u6301 NVIDIA GPU\u3001vGPU\u3001MIG \u7b49 GPU \u539f\u751f\u7ba1\u7406\u65b9\u6848\uff0c\u5e76\u63d0\u4f9b\u4e91\u539f\u751f\u80fd\u529b\u3002
        • \u652f\u6301\u5355\u5757\u7269\u7406\u5361\u5207\u5206\u7ed9\u4e0d\u540c\u7684\u79df\u6237\u4f7f\u7528\uff0c\u5e76\u652f\u6301\u5bf9\u79df\u6237\u548c\u5bb9\u5668\u4f7f\u7528 GPU \u8d44\u6e90\u6309\u7167\u7b97\u529b\u3001\u663e\u5b58\u8fdb\u884c GPU \u8d44\u6e90\u914d\u989d\u3002
        • \u652f\u6301\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5e94\u7528\u7b49\u591a\u7ef4\u5ea6 GPU \u8d44\u6e90\u76d1\u63a7\uff0c\u5e2e\u52a9\u8fd0\u7ef4\u4eba\u5458\u7ba1\u7406 GPU \u8d44\u6e90\u3002
        • \u517c\u5bb9 TensorFlow\u3001pytorch \u7b49\u591a\u79cd\u8bad\u7ec3\u6846\u67b6\u3002
        "},{"location":"admin/kpanda/gpu/index.html#gpu-operator","title":"GPU Operator \u4ecb\u7ecd","text":"

        \u540c\u666e\u901a\u8ba1\u7b97\u673a\u786c\u4ef6\u4e00\u6837\uff0cNVIDIA GPU \u5361\u4f5c\u4e3a\u7269\u7406\u786c\u4ef6\uff0c\u5fc5\u987b\u5b89\u88c5 NVIDIA GPU \u9a71\u52a8\u540e\u624d\u80fd\u4f7f\u7528\u3002 \u4e3a\u4e86\u964d\u4f4e\u7528\u6237\u5728 kuberneets \u4e0a\u4f7f\u7528 GPU \u7684\u6210\u672c\uff0cNVIDIA \u5b98\u65b9\u63d0\u4f9b\u4e86 NVIDIA GPU Operator \u7ec4\u4ef6\u6765\u7ba1\u7406\u4f7f\u7528 NVIDIA GPU \u6240\u4f9d\u8d56\u7684\u5404\u79cd\u7ec4\u4ef6\u3002 \u8fd9\u4e9b\u7ec4\u4ef6\u5305\u62ec NVIDIA \u9a71\u52a8\u7a0b\u5e8f\uff08\u7528\u4e8e\u542f\u7528 CUDA\uff09\u3001NVIDIA \u5bb9\u5668\u8fd0\u884c\u65f6\u3001GPU \u8282\u70b9\u6807\u8bb0\u3001\u57fa\u4e8e DCGM \u7684\u76d1\u63a7\u7b49\u3002 \u7406\u8bba\u4e0a\u6765\u8bf4\u7528\u6237\u53ea\u9700\u8981\u5c06 GPU \u5361\u63d2\u5728\u5df2\u7ecf\u88ab kubernetes \u6240\u7eb3\u7ba1\u7684\u8ba1\u7b97\u8bbe\u5907\u4e0a\uff0c\u7136\u540e\u901a\u8fc7 GPU Operator \u5c31\u80fd\u4f7f\u7528 NVIDIA GPU \u7684\u6240\u6709\u80fd\u529b\u4e86\u3002 \u4e86\u89e3\u66f4\u591a NVIDIA GPU Operator \u76f8\u5173\u4fe1\u606f\uff0c\u8bf7\u53c2\u8003 NVIDIA \u5b98\u65b9\u6587\u6863\u3002 \u5982\u4f55\u90e8\u7f72\u8bf7\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5

        NVIDIA GPU Operator \u67b6\u6784\u56fe\uff1a

        "},{"location":"admin/kpanda/gpu/FAQ.html","title":"GPU \u76f8\u5173 FAQ","text":""},{"location":"admin/kpanda/gpu/FAQ.html#pod-nvidia-smi-gpu","title":"Pod \u5185 nvidia-smi \u770b\u4e0d\u5230 GPU \u8fdb\u7a0b","text":"

        Q: \u5728\u4f7f\u7528 GPU \u7684 Pod \u5185\u6267\u884c nvidia-smi \u547d\u4ee4\u770b\u4e0d\u5230\u4f7f\u7528 GPU \u7684\u8fdb\u7a0b\u4fe1\u606f\uff0c\u5305\u62ec\u6574\u5361\u6a21\u5f0f\u3001vGPU \u6a21\u5f0f\u7b49\u3002

        A: \u56e0\u4e3a\u6709 PID namespace \u9694\u79bb\uff0c\u5bfc\u81f4\u5728 Pod \u5185\u67e5\u770b\u4e0d\u5230 GPU \u8fdb\u7a0b\uff0c\u5982\u679c\u8981\u67e5\u770b GPU \u8fdb\u7a0b\u6709\u5982\u4e0b\u51e0\u79cd\u65b9\u6cd5\uff1a

        • \u5728\u4f7f\u7528 GPU \u7684\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e hostPID: true\uff0c\u4f7f\u5176\u53ef\u4ee5\u67e5\u770b\u5230\u5bbf\u4e3b\u673a\u4e0a\u7684 PID
        • \u5728 gpu-operator \u7684 driver Pod \u4e2d\u6267\u884c nvidia-smi \u547d\u4ee4\u67e5\u770b\u8fdb\u7a0b
        • \u5728\u5bbf\u4e3b\u673a\u4e0a\u6267\u884c chroot /run/nvidia/driver nvidia-smi \u547d\u4ee4\u67e5\u770b\u8fdb\u7a0b
        "},{"location":"admin/kpanda/gpu/Iluvatar_usage.html","title":"App \u4f7f\u7528\u5929\u6570\u667a\u82af\uff08Iluvatar\uff09GPU","text":"

        \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528\u5929\u6570\u667a\u82af\u865a\u62df GPU\u3002

        "},{"location":"admin/kpanda/gpu/Iluvatar_usage.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
        • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
        • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5\u5929\u6570\u667a\u82af GPU \u9a71\u52a8\uff0c\u9a71\u52a8\u5b89\u88c5\u8bf7\u53c2\u8003\u5929\u6570\u667a\u82af\u5b98\u65b9\u6587\u6863\u3002
        • \u5f53\u524d\u96c6\u7fa4\u5185 GPU \u5361\u672a\u8fdb\u884c\u4efb\u4f55\u865a\u62df\u5316\u64cd\u4f5c\u4e14\u672a\u88ab\u5176\u5b83 App \u5360\u7528\u3002
        "},{"location":"admin/kpanda/gpu/Iluvatar_usage.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/gpu/Iluvatar_usage.html#_3","title":"\u4f7f\u7528\u754c\u9762\u914d\u7f6e","text":"
        1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Iluvatar \u3002

        2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Iluvatar\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e App \u4f7f\u7528\u7684 GPU \u8d44\u6e90\uff1a

          • \u7269\u7406\u5361\u6570\u91cf\uff08iluvatar.ai/vcuda-core\uff09\uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002
          • \u663e\u5b58\u4f7f\u7528\u6570\u91cf\uff08iluvatar.ai/vcuda-memory\uff09\uff1a\u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u663e\u5b58\uff0c\u503c\u5355\u4f4d\u4e3a MB\uff0c\u6700\u5c0f\u503c\u4e3a 1\uff0c\u6700\u5927\u503c\u4e3a\u6574\u5361\u7684\u663e\u5b58\u503c\u3002

          \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

        "},{"location":"admin/kpanda/gpu/Iluvatar_usage.html#yaml","title":"\u4f7f\u7528 YAML \u914d\u7f6e","text":"

        \u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u7533\u8bf7 GPU \u8d44\u6e90\uff0c\u5728\u8d44\u6e90\u7533\u8bf7\u548c\u9650\u5236\u914d\u7f6e\u4e2d\u589e\u52a0iluvatar.ai/vcuda-core: 1\u3001iluvatar.ai/vcuda-memory: 200 \u53c2\u6570\uff0c\u914d\u7f6e App \u4f7f\u7528\u7269\u7406\u5361\u7684\u8d44\u6e90\u3002

        apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: full-iluvatar-gpu-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: full-iluvatar-gpu-demo\n  template:\n    metadata:\n      labels:\n        app: full-iluvatar-gpu-demo\n    spec:\n      containers:\n      - image: nginx:perl\n        name: container-0\n        resources:\n          limits:\n            cpu: 250m\n            iluvatar.ai/vcuda-core: '1'\n            iluvatar.ai/vcuda-memory: '200'\n            memory: 512Mi\n          requests:\n            cpu: 250m\n            memory: 512Mi\n      imagePullSecrets:\n      - name: default-secret\n
        "},{"location":"admin/kpanda/gpu/dynamic-regulation.html","title":"GPU \u8d44\u6e90\u52a8\u6001\u8c03\u8282","text":"

        \u63d0\u4f9b GPU \u8d44\u6e90\u52a8\u6001\u8c03\u6574\u529f\u80fd\uff0c\u5141\u8bb8\u60a8\u5728\u65e0\u9700\u91cd\u65b0\u52a0\u8f7d\u3001\u91cd\u7f6e\u6216\u91cd\u542f\u6574\u4e2a\u8fd0\u884c\u73af\u5883\u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u5df2\u7ecf\u5206\u914d\u7684 vGPU \u8d44\u6e90\u8fdb\u884c\u5b9e\u65f6\u3001\u52a8\u6001\u7684\u8c03\u6574\u3002 \u8fd9\u4e00\u529f\u80fd\u65e8\u5728\u6700\u5927\u7a0b\u5ea6\u5730\u51cf\u5c11\u5bf9\u4e1a\u52a1\u8fd0\u884c\u7684\u5f71\u54cd\uff0c\u786e\u4fdd\u60a8\u7684\u4e1a\u52a1\u80fd\u591f\u6301\u7eed\u7a33\u5b9a\u5730\u8fd0\u884c\uff0c\u540c\u65f6\u6839\u636e\u5b9e\u9645\u9700\u6c42\u7075\u6d3b\u8c03\u6574 GPU \u8d44\u6e90\u3002

        "},{"location":"admin/kpanda/gpu/dynamic-regulation.html#_1","title":"\u4f7f\u7528\u573a\u666f","text":"
        • \u5f39\u6027\u8d44\u6e90\u5206\u914d \uff1a\u5f53\u4e1a\u52a1\u9700\u6c42\u6216\u5de5\u4f5c\u8d1f\u8f7d\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u53ef\u4ee5\u5feb\u901f\u8c03\u6574 GPU \u8d44\u6e90\u4ee5\u6ee1\u8db3\u65b0\u7684\u6027\u80fd\u8981\u6c42\u3002
        • \u5373\u65f6\u54cd\u5e94 \uff1a\u5728\u9762\u5bf9\u7a81\u53d1\u7684\u9ad8\u8d1f\u8f7d\u6216\u4e1a\u52a1\u9700\u6c42\u65f6\uff0c\u53ef\u4ee5\u8fc5\u901f\u589e\u52a0 GPU \u8d44\u6e90\u800c\u65e0\u9700\u4e2d\u65ad\u4e1a\u52a1\u8fd0\u884c\uff0c\u4ee5\u786e\u4fdd\u670d\u52a1\u7684\u7a33\u5b9a\u6027\u548c\u6027\u80fd\u3002
        "},{"location":"admin/kpanda/gpu/dynamic-regulation.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

        \u4ee5\u4e0b\u662f\u4e00\u4e2a\u5177\u4f53\u7684\u64cd\u4f5c\u793a\u4f8b\uff0c\u5c55\u793a\u5982\u4f55\u5728\u4e0d\u91cd\u542f vGPU Pod \u7684\u60c5\u51b5\u4e0b\u52a8\u6001\u8c03\u6574 vGPU \u7684\u7b97\u529b\u548c\u663e\u5b58\u8d44\u6e90\uff1a

        "},{"location":"admin/kpanda/gpu/dynamic-regulation.html#vgpu-pod","title":"\u521b\u5efa\u4e00\u4e2a vGPU Pod","text":"

        \u9996\u5148\uff0c\u6211\u4eec\u4f7f\u7528\u4ee5\u4e0b YAML \u521b\u5efa\u4e00\u4e2a vGPU Pod\uff0c\u5176\u7b97\u529b\u521d\u59cb\u4e0d\u9650\u5236\uff0c\u663e\u5b58\u9650\u5236\u4e3a 200Mb\u3002

        kind: Deployment\napiVersion: apps/v1\nmetadata:\n  name: gpu-burn-test\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: gpu-burn-test\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: gpu-burn-test\n    spec:\n      containers:\n        - name: container-1\n          image: docker.io/chrstnhntschl/gpu_burn:latest\n          command:\n            - sleep\n            - '100000'\n          resources:\n            limits:\n              cpu: 1m\n              memory: 1Gi\n              nvidia.com/gpucores: '0'\n              nvidia.com/gpumem: '200'\n              nvidia.com/vgpu: '1'\n

        \u8c03\u6574\u524d\u67e5\u770b Pod \u4e2d\u7684\u8d44\u6e90 GPU \u5206\u914d\u8d44\u6e90\uff1a

        "},{"location":"admin/kpanda/gpu/dynamic-regulation.html#_3","title":"\u52a8\u6001\u8c03\u6574\u7b97\u529b","text":"

        \u5982\u679c\u9700\u8981\u4fee\u6539\u7b97\u529b\u4e3a 10%\uff0c\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

        1. \u8fdb\u5165\u5bb9\u5668\uff1a

          kubectl exec -it <pod-name> -- /bin/bash\n
        2. \u6267\u884c\uff1a

          export CUDA_DEVICE_SM_LIMIT=10\n
        3. \u5728\u5f53\u524d\u7ec8\u7aef\u76f4\u63a5\u8fd0\u884c\uff1a

          ./gpu_burn 60\n

          \u7a0b\u5e8f\u5373\u53ef\u751f\u6548\u3002\u6ce8\u610f\uff0c\u4e0d\u80fd\u9000\u51fa\u5f53\u524d Bash \u7ec8\u7aef\u3002

        "},{"location":"admin/kpanda/gpu/dynamic-regulation.html#_4","title":"\u52a8\u6001\u8c03\u6574\u663e\u5b58","text":"

        \u5982\u679c\u9700\u8981\u4fee\u6539\u663e\u5b58\u4e3a 300 MB\uff0c\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

        1. \u8fdb\u5165\u5bb9\u5668\uff1a

          kubectl exec -it <pod-name> -- /bin/bash\n
        2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u8bbe\u7f6e\u663e\u5b58\u9650\u5236\uff1a

          export CUDA_DEVICE_MEMORY_LIMIT_0=300m\nexport CUDA_DEVICE_MEMORY_SHARED_CACHE=/usr/local/vgpu/d.cache\n

          Note

          \u6bcf\u6b21\u4fee\u6539\u663e\u5b58\u5927\u5c0f\u65f6\uff0cd.cache \u8fd9\u4e2a\u6587\u4ef6\u540d\u5b57\u90fd\u9700\u8981\u4fee\u6539\uff0c\u6bd4\u5982\u6539\u4e3a a.cache\u30011.cache \u7b49\uff0c\u4ee5\u907f\u514d\u7f13\u5b58\u51b2\u7a81\u3002

        3. \u5728\u5f53\u524d\u7ec8\u7aef\u76f4\u63a5\u8fd0\u884c\uff1a

          ./gpu_burn 60\n

          \u7a0b\u5e8f\u5373\u53ef\u751f\u6548\u3002\u540c\u6837\u5730\uff0c\u4e0d\u80fd\u9000\u51fa\u5f53\u524d Bash \u7ec8\u7aef\u3002

        \u8c03\u6574\u540e\u67e5\u770b Pod \u4e2d\u7684\u8d44\u6e90 GPU \u5206\u914d\u8d44\u6e90\uff1a

        \u901a\u8fc7\u4e0a\u8ff0\u6b65\u9aa4\uff0c\u60a8\u53ef\u4ee5\u5728\u4e0d\u91cd\u542f vGPU Pod \u7684\u60c5\u51b5\u4e0b\u52a8\u6001\u5730\u8c03\u6574\u5176\u7b97\u529b\u548c\u663e\u5b58\u8d44\u6e90\uff0c\u4ece\u800c\u66f4\u7075\u6d3b\u5730\u6ee1\u8db3\u4e1a\u52a1\u9700\u6c42\u5e76\u4f18\u5316\u8d44\u6e90\u5229\u7528\u3002

        "},{"location":"admin/kpanda/gpu/gpu_matrix.html","title":"GPU \u652f\u6301\u77e9\u9635","text":"

        \u672c\u9875\u8bf4\u660e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u7684 GPU \u53ca\u64cd\u4f5c\u7cfb\u7edf\u6240\u5bf9\u5e94\u7684\u77e9\u9635\u3002

        "},{"location":"admin/kpanda/gpu/gpu_matrix.html#nvidia-gpu","title":"NVIDIA GPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301 GPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 NVIDIA GPU\uff08\u6574\u5361/vGPU\uff09 NVIDIA Fermi (2.1) \u67b6\u6784 CentOS 7 Kernel 3.10.0-123 ~ 3.10.0-1160\u5185\u6838\u53c2\u8003\u6587\u6863\u5efa\u8bae\u4f7f\u7528\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u5e94 Kernel \u7248\u672c \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a 3.10.0-1160 GPU Operator \u79bb\u7ebf\u5b89\u88c5 NVIDIA GeForce 400 \u7cfb\u5217 CentOS 8 Kernel 4.18.0-80 ~ 4.18.0-348 NVIDIA Quadro 4000 \u7cfb\u5217 Ubuntu 20.04 Kernel 5.4 NVIDIA Tesla 20 \u7cfb\u5217 Ubuntu 22.04 Kernel 5.19 NVIDIA Ampere \u67b6\u6784\u7cfb\u5217(A100;A800;H100) RHEL 7 Kernel 3.10.0-123 ~ 3.10.0-1160 RHEL 8 Kernel 4.18.0-80 ~ 4.18.0-348 NVIDIA MIG NVIDIA Ampere \u67b6\u6784\u7cfb\u5217\uff08A100\u3001A800\u3001H100\uff09 CentOS 7 Kernel 3.10.0-123 ~ 3.10.0-1160 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a3.10.0-1160 GPU Operator \u79bb\u7ebf\u5b89\u88c5 CentOS 8 Kernel 4.18.0-80 ~ 4.18.0-348 Ubuntu 20.04 Kernel 5.4 Ubuntu 22.04 Kernel 5.19 RHEL 7 Kernel 3.10.0-123 ~ 3.10.0-1160 RHEL 8 Kernel 4.18.0-80 ~ 4.18.0-348"},{"location":"admin/kpanda/gpu/gpu_matrix.html#ascendnpu","title":"\u6607\u817e\uff08Ascend\uff09NPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301 NPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 \u6607\u817e\uff08Ascend 310\uff09 Ascend 310 Ubuntu 20.04 \u8be6\u60c5\u53c2\u8003\uff1a\u5185\u6838\u7248\u672c\u8981\u6c42 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a3.10.0-1160 300 \u548c 310P \u9a71\u52a8\u6587\u6863 Ascend 310P\uff1b CentOS 7.6 CentOS 8.2 KylinV10SP1 \u64cd\u4f5c\u7cfb\u7edf openEuler \u64cd\u4f5c\u7cfb\u7edf \u6607\u817e\uff08Ascend 910\uff09 Ascend 910B Ubuntu 20.04 \u8be6\u60c5\u53c2\u8003\u5185\u6838\u7248\u672c\u8981\u6c42 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a3.10.0-1160 910 \u9a71\u52a8\u6587\u6863 CentOS 7.6 CentOS 8.2 KylinV10SP1 \u64cd\u4f5c\u7cfb\u7edf openEuler \u64cd\u4f5c\u7cfb\u7edf"},{"location":"admin/kpanda/gpu/gpu_matrix.html#iluvatargpu","title":"\u5929\u6570\u667a\u82af\uff08Iluvatar\uff09GPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301\u7684 GPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 \u5929\u6570\u667a\u82af(Iluvatar vGPU) BI100 CentOS 7 Kernel 3.10.0-957.el7.x86_64 ~ 3.10.0-1160.42.2.el7.x86_64 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a 3.10.0-1160 \u8865\u5145\u4e2d MR100\uff1b CentOS 8 Kernel 4.18.0-80.el8.x86_64 ~ 4.18.0-305.19.1.el8_4.x86_64 Ubuntu 20.04 Kernel 4.15.0-20-generic ~ 4.15.0-160-generic Kernel 5.4.0-26-generic ~ 5.4.0-89-generic Kernel 5.8.0-23-generic ~ 5.8.0-63-generic Ubuntu 21.04 Kernel 4.15.0-20-generic ~ 4.15.0-160-generic Kernel 5.4.0-26-generic ~ 5.4.0-89-generic Kernel 5.8.0-23-generic ~ 5.8.0-63-generic openEuler 22.03 LTS Kernel \u7248\u672c\u5927\u4e8e\u7b49\u4e8e 5.1 \u4e14\u5c0f\u4e8e\u7b49\u4e8e 5.10"},{"location":"admin/kpanda/gpu/gpu_matrix.html#metaxgpu","title":"\u6c90\u66e6\uff08Metax\uff09GPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301\u7684 GPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 \u6c90\u66e6Metax\uff08\u6574\u5361/vGPU\uff09 \u66e6\u4e91 C500 \u6c90\u66e6 GPU \u5b89\u88c5\u4f7f\u7528"},{"location":"admin/kpanda/gpu/gpu_scheduler_config.html","title":"GPU \u8c03\u5ea6\u914d\u7f6e\uff08Binpack \u548c Spread \uff09","text":"

        \u672c\u6587\u4ecb\u7ecd\u4f7f\u7528 NVIDIA vGPU \u65f6\uff0c\u5982\u4f55\u901a\u8fc7 Binpack \u548c Spread \u7684 GPU \u8c03\u5ea6\u914d\u7f6e\u51cf\u5c11 GPU \u8d44\u6e90\u788e\u7247\u3001\u9632\u6b62\u5355\u70b9\u6545\u969c\u7b49\uff0c\u5b9e\u73b0 vGPU \u7684\u9ad8\u7ea7\u8c03\u5ea6\u3002 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u4e86\u96c6\u7fa4\u548c\u5de5\u4f5c\u8d1f\u8f7d\u4e24\u79cd\u7ef4\u5ea6\u7684 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\uff0c\u5206\u522b\u6ee1\u8db3\u4e0d\u540c\u573a\u666f\u4e0b\u7684\u4f7f\u7528\u9700\u6c42\u3002

        "},{"location":"admin/kpanda/gpu/gpu_scheduler_config.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
        • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5df2\u6b63\u786e\u5b89\u88c5 GPU \u8bbe\u5907\u3002
        • \u96c6\u7fa4\u4e2d\u5df2\u6b63\u786e\u5b89\u88c5 gpu-operator \u7ec4\u4ef6 \u548c Nvidia-vgpu \u7ec4\u4ef6\u3002
        • \u96c6\u7fa4\u8282\u70b9\u5217\u8868\u4e2d\uff0cGPU \u6a21\u5f0f\u4e0b\u5b58\u5728 NVIDIA-vGPU \u7c7b\u578b\u3002
        "},{"location":"admin/kpanda/gpu/gpu_scheduler_config.html#_2","title":"\u4f7f\u7528\u573a\u666f","text":"
        • \u57fa\u4e8e GPU \u5361\u7ef4\u5ea6\u8c03\u5ea6\u7b56\u7565

          • Binpack\uff1a\u4f18\u5148\u9009\u62e9\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\uff0c\u9002\u7528\u4e8e\u63d0\u9ad8 GPU \u5229\u7528\u7387\uff0c\u51cf\u5c11\u8d44\u6e90\u788e\u7247\u3002
          • Spread\uff1a\u591a\u4e2a Pod \u4f1a\u5206\u6563\u5728\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u9ad8\u53ef\u7528\u573a\u666f\uff0c\u907f\u514d\u5355\u5361\u6545\u969c\u3002
        • \u57fa\u4e8e\u8282\u70b9\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565

          • Binpack\uff1a \u591a\u4e2a Pod \u4f1a\u4f18\u5148\u9009\u62e9\u540c\u4e00\u4e2a\u8282\u70b9\uff0c\u9002\u7528\u4e8e\u63d0\u9ad8 GPU \u5229\u7528\u7387\uff0c\u51cf\u5c11\u8d44\u6e90\u788e\u7247\u3002
          • Spread\uff1a\u591a\u4e2a Pod \u4f1a\u5206\u6563\u5728\u4e0d\u540c\u8282\u70b9\u4e0a\uff0c\u9002\u7528\u4e8e\u9ad8\u53ef\u7528\u573a\u666f\uff0c\u907f\u514d\u5355\u8282\u70b9\u6545\u969c\u3002
        "},{"location":"admin/kpanda/gpu/gpu_scheduler_config.html#binpack-spread","title":"\u96c6\u7fa4\u7ef4\u5ea6\u4f7f\u7528 Binpack \u548c Spread \u8c03\u5ea6\u914d\u7f6e","text":"

        Note

        \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u4f1a\u9075\u5faa\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack \u548c Spread \u8c03\u5ea6\u914d\u7f6e\u3002 \u82e5\u5de5\u4f5c\u8d1f\u8f7d\u5355\u72ec\u8bbe\u7f6e\u4e86\u4e0e\u96c6\u7fa4\u4e0d\u4e00\u81f4\u7684 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\uff0c\u5219\u8be5\u5de5\u4f5c\u8d1f\u8f7d\u4f18\u5148\u9075\u5faa\u5176\u672c\u8eab\u7684\u8c03\u5ea6\u7b56\u7565\u3002

        1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9009\u62e9\u9700\u8981\u8c03\u6574 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u56fe\u6807\u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb GPU \u8c03\u5ea6\u914d\u7f6e \u3002

        2. \u6839\u636e\u4e1a\u52a1\u573a\u666f\u8c03\u6574 GPU \u8c03\u5ea6\u914d\u7f6e\uff0c\u5e76\u70b9\u51fb \u786e\u5b9a \u540e\u4fdd\u5b58\u3002

        "},{"location":"admin/kpanda/gpu/gpu_scheduler_config.html#binpack-spread_1","title":"\u5de5\u4f5c\u8d1f\u8f7d\u7ef4\u5ea6\u4f7f\u7528 Binpack \u548c Spread \u8c03\u5ea6\u914d\u7f6e","text":"

        Note

        \u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ef4\u5ea6\u7684 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684\u914d\u7f6e\u51b2\u7a81\u65f6\uff0c\u4f18\u5148\u9075\u5faa\u5de5\u4f5c\u8d1f\u8f7d\u7ef4\u5ea6\u7684\u914d\u7f6e\u3002

        \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u65e0\u72b6\u6001\u8d1f\u8f7d\uff0c\u5e76\u5728\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u914d\u7f6e Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565 \u3002

        1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

        2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

        3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\uff0c\u5e76\u5728 \u5bb9\u5668\u914d\u7f6e \u4e2d\u542f\u7528 GPU \u914d\u7f6e\uff0c\u9009\u62e9 GPU \u7c7b\u578b\u4e3a NVIDIA vGPU\uff0c \u70b9\u51fb \u9ad8\u7ea7\u8bbe\u7f6e \uff0c\u542f\u7528 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\uff0c\u6839\u636e\u4e1a\u52a1\u573a\u666f\u8c03\u6574 GPU \u8c03\u5ea6\u914d\u7f6e\u3002\u914d\u7f6e\u5b8c\u6210\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \uff0c \u8fdb\u5165 \u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

        "},{"location":"admin/kpanda/gpu/vgpu_quota.html","title":"GPU \u914d\u989d\u7ba1\u7406","text":"

        \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528 vGPU \u80fd\u529b\u3002

        "},{"location":"admin/kpanda/gpu/vgpu_quota.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

        \u5f53\u524d\u96c6\u7fa4\u5df2\u901a\u8fc7 Operator \u6216\u624b\u52a8\u65b9\u5f0f\u90e8\u7f72\u5bf9\u5e94\u7c7b\u578b GPU \u9a71\u52a8\uff08NVIDIA GPU\u3001NVIDIA MIG\u3001\u5929\u6570\u3001\u6607\u817e\uff09

        "},{"location":"admin/kpanda/gpu/vgpu_quota.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
        1. \u8fdb\u5165 Namespaces \u4e2d\uff0c\u70b9\u51fb \u914d\u989d\u7ba1\u7406 \u53ef\u4ee5\u914d\u7f6e\u5f53\u524d Namespace \u53ef\u4ee5\u4f7f\u7528\u7684 GPU \u8d44\u6e90\u3002

        2. \u5f53\u524d\u547d\u540d\u7a7a\u95f4\u914d\u989d\u7ba1\u7406\u8986\u76d6\u7684\u5361\u7c7b\u578b\u4e3a\uff1aNVIDIA vGPU\u3001NVIDIA MIG\u3001\u5929\u6570\u3001\u6607\u817e\u3002

          NVIDIA vGPU \u914d\u989d\u7ba1\u7406 \uff1a\u914d\u7f6e\u5177\u4f53\u53ef\u4ee5\u4f7f\u7528\u7684\u914d\u989d\uff0c\u4f1a\u521b\u5efa ResourcesQuota CR\uff1a

          • \u7269\u7406\u5361\u6570\u91cf\uff08nvidia.com/vgpu\uff09\uff1a\u8868\u793a\u5f53\u524d POD \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u5e76\u4e14\u8981 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002
          • GPU \u7b97\u529b\uff08nvidia.com/gpucores\uff09\uff1a\u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u7b97\u529b\uff0c\u503c\u8303\u56f4\u4e3a 0-100\uff1b\u5982\u679c\u914d\u7f6e\u4e3a 0\uff0c\u5219\u8ba4\u4e3a\u4e0d\u5f3a\u5236\u9694\u79bb\uff1b\u914d\u7f6e\u4e3a 100\uff0c\u5219\u8ba4\u4e3a\u72ec\u5360\u6574\u5f20\u5361\u3002
          • GPU \u663e\u5b58\uff08nvidia.com/gpumem\uff09\uff1a\u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u663e\u5b58\uff0c\u503c\u5355\u4f4d\u4e3a MB\uff0c\u6700\u5c0f\u503c\u4e3a 1\uff0c\u6700\u5927\u503c\u4e3a\u6574\u5361\u7684\u663e\u5b58\u503c\u3002

        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html","title":"\u6607\u817e NPU \u7ec4\u4ef6\u5b89\u88c5","text":"

        \u672c\u7ae0\u8282\u63d0\u4f9b\u6607\u817e NPU \u9a71\u52a8\u3001Device Plugin\u3001NPU-Exporter \u7b49\u7ec4\u4ef6\u7684\u5b89\u88c5\u6307\u5bfc\u3002

        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        1. \u5b89\u88c5\u524d\u8bf7\u786e\u8ba4\u652f\u6301\u7684 NPU \u578b\u53f7\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\u6607\u817e NPU \u77e9\u9635
        2. \u8bf7\u786e\u8ba4 \u5bf9\u5e94 NPU \u578b\u53f7\u6240\u8981\u6c42\u7684\u5185\u6838\u7248\u672c\u662f\u5426\u5339\u914d\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\u6607\u817e NPU \u77e9\u9635
        3. \u51c6\u5907 Kubernetes \u57fa\u7840\u73af\u5883
        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#_2","title":"\u5b89\u88c5\u6b65\u9aa4","text":"

        \u4f7f\u7528 NPU \u8d44\u6e90\u4e4b\u524d\uff0c\u9700\u8981\u5b8c\u6210\u56fa\u4ef6\u5b89\u88c5\u3001NPU \u9a71\u52a8\u5b89\u88c5\u3001 Docker Runtime \u5b89\u88c5\u3001\u7528\u6237\u521b\u5efa\u3001\u65e5\u5fd7\u76ee\u5f55\u521b\u5efa\u4ee5\u53ca NPU Device Plugin \u5b89\u88c5\uff0c\u8be6\u60c5\u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u3002

        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#_3","title":"\u5b89\u88c5\u56fa\u4ef6","text":"
        1. \u5b89\u88c5\u524d\u8bf7\u786e\u8ba4\u5185\u6838\u7248\u672c\u5728\u201c\u4e8c\u8fdb\u5236\u5b89\u88c5\u201d\u5b89\u88c5\u65b9\u5f0f\u5bf9\u5e94\u7684\u7248\u672c\u8303\u56f4\u5185\uff0c\u5219\u53ef\u4ee5\u76f4\u63a5\u5b89\u88c5NPU\u9a71\u52a8\u56fa\u4ef6\u3002
        2. \u56fa\u4ef6\u4e0e\u9a71\u52a8\u4e0b\u8f7d\u8bf7\u53c2\u8003\u56fa\u4ef6\u4e0b\u8f7d\u5730\u5740
        3. \u56fa\u4ef6\u5b89\u88c5\u8bf7\u53c2\u8003\u5b89\u88c5 NPU \u9a71\u52a8\u56fa\u4ef6
        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#npu_1","title":"\u5b89\u88c5 NPU \u9a71\u52a8","text":"
        1. \u5982\u9a71\u52a8\u672a\u5b89\u88c5\uff0c\u8bf7\u53c2\u8003\u6607\u817e\u5b98\u65b9\u6587\u6863\u8fdb\u884c\u5b89\u88c5\u3002\u4f8b\u5982 Ascend910\uff0c\u53c2\u8003 910 \u9a71\u52a8\u5b89\u88c5\u6587\u6863\u3002
        2. \u8fd0\u884c npu-smi info \u547d\u4ee4\uff0c\u5e76\u4e14\u80fd\u591f\u6b63\u5e38\u8fd4\u56de NPU \u4fe1\u606f\uff0c\u8868\u793a NPU \u9a71\u52a8\u4e0e\u56fa\u4ef6\u5df2\u5c31\u7eea\u3002
        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#docker-runtime","title":"\u5b89\u88c5 Docker Runtime","text":"
        1. \u4e0b\u8f7d Ascend Docker Runtime

          \u793e\u533a\u7248\u4e0b\u8f7d\u5730\u5740\uff1ahttps://www.hiascend.com/zh/software/mindx-dl/community

          wget -c https://mindx.obs.cn-south-1.myhuaweicloud.com/OpenSource/MindX/MindX%205.0.RC2/MindX%20DL%205.0.RC2/Ascend-docker-runtime_5.0.RC2_linux-x86_64.run\n

          \u5b89\u88c5\u5230\u6307\u5b9a\u8def\u5f84\u4e0b\uff0c\u4f9d\u6b21\u6267\u884c\u4ee5\u4e0b\u4e24\u6761\u547d\u4ee4\uff0c\u53c2\u6570\u4e3a\u6307\u5b9a\u7684\u5b89\u88c5\u8def\u5f84:

          chmod u+x Ascend-docker-runtime_5.0.RC2_linux-x86_64.run \n./Ascend-docker-runtime_{version}_linux-{arch}.run --install --install-path=<path>\n
        2. \u4fee\u6539 containerd \u914d\u7f6e\u6587\u4ef6

          containerd \u65e0\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\u65f6\uff0c\u4f9d\u6b21\u6267\u884c\u4ee5\u4e0b3\u6761\u547d\u4ee4\uff0c\u521b\u5efa\u914d\u7f6e\u6587\u4ef6\uff1a

          mkdir /etc/containerd \ncontainerd config default > /etc/containerd/config.toml \nvim /etc/containerd/config.toml\n

          containerd \u6709\u914d\u7f6e\u6587\u4ef6\u65f6\uff1a

          vim /etc/containerd/config.toml\n

          \u6839\u636e\u5b9e\u9645\u60c5\u51b5\u4fee\u6539 runtime \u7684\u5b89\u88c5\u8def\u5f84\uff0c\u4e3b\u8981\u4fee\u6539 runtime \u5b57\u6bb5\uff1a

          ... \n[plugins.\"io.containerd.monitor.v1.cgroups\"]\n   no_prometheus = false  \n[plugins.\"io.containerd.runtime.v1.linux\"]\n   shim = \"containerd-shim\"\n   runtime = \"/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime\"\n   runtime_root = \"\"\n   no_shim = false\n   shim_debug = false\n [plugins.\"io.containerd.runtime.v2.task\"]\n   platforms = [\"linux/amd64\"]\n...\n

          \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u91cd\u542f containerd\uff1a

          systemctl restart containerd\n
        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#_4","title":"\u7528\u6237\u521b\u5efa","text":"

        \u5728\u5bf9\u5e94\u7ec4\u4ef6\u5b89\u88c5\u7684\u8282\u70b9\u4e0a\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa\u7528\u6237\u3002

        # Ubuntu \u64cd\u4f5c\u7cfb\u7edf\nuseradd -d /home/hwMindX -u 9000 -m -s /usr/sbin/nologin hwMindX\nusermod -a -G HwHiAiUser hwMindX\n# Centos \u64cd\u4f5c\u7cfb\u7edf\nuseradd -d /home/hwMindX -u 9000 -m -s /sbin/nologin hwMindX\nusermod -a -G HwHiAiUser hwMindX\n
        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#_5","title":"\u65e5\u5fd7\u76ee\u5f55\u521b\u5efa","text":"

        \u5728\u5bf9\u5e94\u8282\u70b9\u521b\u5efa\u7ec4\u4ef6\u65e5\u5fd7\u7236\u76ee\u5f55\u548c\u5404\u7ec4\u4ef6\u7684\u65e5\u5fd7\u76ee\u5f55\uff0c\u5e76\u8bbe\u7f6e\u76ee\u5f55\u5bf9\u5e94\u5c5e\u4e3b\u548c\u6743\u9650\u3002\u6267\u884c\u4e0b\u8ff0\u547d\u4ee4\uff0c\u521b\u5efa\u7ec4\u4ef6\u65e5\u5fd7\u7236\u76ee\u5f55\u3002

        mkdir -m 755 /var/log/mindx-dl\nchown root:root /var/log/mindx-dl\n

        \u6267\u884c\u4e0b\u8ff0\u547d\u4ee4\uff0c\u521b\u5efa Device Plugin \u7ec4\u4ef6\u65e5\u5fd7\u76ee\u5f55\u3002

        mkdir -m 750 /var/log/mindx-dl/devicePlugin\nchown root:root /var/log/mindx-dl/devicePlugin\n

        Note

        \u8bf7\u5206\u522b\u4e3a\u6240\u9700\u7ec4\u4ef6\u521b\u5efa\u5bf9\u5e94\u7684\u65e5\u5fd7\u76ee\u5f55\uff0c\u5f53\u524d\u6848\u4f8b\u4e2d\u53ea\u9700\u8981 Device Plugin \u7ec4\u4ef6\u3002 \u5982\u679c\u6709\u5176\u4ed6\u7ec4\u4ef6\u9700\u6c42\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863

        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#label","title":"\u521b\u5efa\u8282\u70b9 Label","text":"

        \u53c2\u8003\u4e0b\u8ff0\u547d\u4ee4\u5728\u5bf9\u5e94\u8282\u70b9\u4e0a\u521b\u5efa Label\uff1a

        # \u5728\u5b89\u88c5\u4e86\u9a71\u52a8\u7684\u8ba1\u7b97\u8282\u70b9\u521b\u5efa\u6b64\u6807\u7b7e\nkubectl label node {nodename} huawei.com.ascend/Driver=installed\nkubectl label node {nodename} node-role.kubernetes.io/worker=worker\nkubectl label node {nodename} workerselector=dls-worker-node\nkubectl label node {nodename} host-arch=huawei-arm //\u6216\u8005host-arch=huawei-x86 \uff0c\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u9009\u62e9\nkubectl label node {nodename} accelerator=huawei-Ascend910 //\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u9009\u62e9\n# \u5728\u63a7\u5236\u8282\u70b9\u521b\u5efa\u6b64\u6807\u7b7e\nkubectl label node {nodename} masterselector=dls-master-node\n
        "},{"location":"admin/kpanda/gpu/ascend/ascend_driver_install.html#device-plugin-npuexporter","title":"\u5b89\u88c5 Device Plugin \u548c NpuExporter","text":"

        \u529f\u80fd\u6a21\u5757\u8def\u5f84\uff1a \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u7ba1\u7406 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f -> \u641c\u7d22 ascend-mindxdl \u3002

        • DevicePlugin \uff1a\u901a\u8fc7\u63d0\u4f9b\u901a\u7528\u8bbe\u5907\u63d2\u4ef6\u673a\u5236\u548c\u6807\u51c6\u7684\u8bbe\u5907API\u63a5\u53e3\uff0c\u4f9bKubernetes\u4f7f\u7528\u8bbe\u5907\u3002\u5efa\u8bae\u4f7f\u7528\u9ed8\u8ba4\u7684\u955c\u50cf\u53ca\u7248\u672c\u3002
        • NpuExporter \uff1a\u57fa\u4e8ePrometheus/Telegraf\u751f\u6001\uff0c\u8be5\u7ec4\u4ef6\u63d0\u4f9b\u63a5\u53e3\uff0c\u5e2e\u52a9\u7528\u6237\u80fd\u591f\u5173\u6ce8\u5230\u6607\u817e\u7cfb\u5217AI\u5904\u7406\u5668\u4ee5\u53ca\u5bb9\u5668\u7ea7\u5206\u914d\u72b6\u6001\u3002\u5efa\u8bae\u4f7f\u7528\u9ed8\u8ba4\u7684\u955c\u50cf\u53ca\u7248\u672c\u3002
        • ServiceMonitor \uff1a\u9ed8\u8ba4\u4e0d\u5f00\u542f\uff0c\u5f00\u542f\u540e\u53ef\u524d\u5f80\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u67e5\u770b NPU \u76f8\u5173\u76d1\u63a7\u3002\u5982\u9700\u5f00\u542f\uff0c\u8bf7\u786e\u4fdd insight-agent \u5df2\u5b89\u88c5\u5e76\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\uff0c\u5426\u5219\u5c06\u5bfc\u81f4 ascend-mindxdl \u5b89\u88c5\u5931\u8d25\u3002
        • isVirtualMachine \uff1a\u9ed8\u8ba4\u4e0d\u5f00\u542f\uff0c\u5982\u679c NPU \u8282\u70b9\u4e3a\u4e91\u4e3b\u673a\u573a\u666f\uff0c\u8bf7\u5f00\u542f\u00a0isVirtualMachine \u53c2\u6570\u3002

        \u5b89\u88c5\u6210\u529f\u540e\uff0c\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u4e0b\u4f1a\u51fa\u73b0\u4e24\u4e2a\u7ec4\u4ef6\uff0c\u5982\u4e0b\u56fe\uff1a

        \u540c\u65f6\u8282\u70b9\u4fe1\u606f\u4e0a\u4e5f\u4f1a\u51fa\u73b0\u5bf9\u5e94 NPU \u7684\u4fe1\u606f\uff1a

        \u4e00\u5207\u5c31\u7eea\u540e\uff0c\u6211\u4eec\u901a\u8fc7\u9875\u9762\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u5c31\u80fd\u591f\u9009\u62e9\u5230\u5bf9\u5e94\u7684 NPU \u8bbe\u5907\uff0c\u5982\u4e0b\u56fe\uff1a

        Note

        \u6709\u5173\u8be6\u7ec6\u4f7f\u7528\u6b65\u9aa4\uff0c\u8bf7\u53c2\u7167\u5e94\u7528\u4f7f\u7528\u6607\u817e\uff08Ascend\uff09NPU\u3002

        "},{"location":"admin/kpanda/gpu/ascend/ascend_usage.html","title":"\u5e94\u7528\u4f7f\u7528\u6607\u817e\uff08Ascend\uff09NPU","text":"

        \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528\u6607\u817e GPU\u3002

        "},{"location":"admin/kpanda/gpu/ascend/ascend_usage.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5\u6607\u817e \uff08Ascend\uff09\u9a71\u52a8\u3002
        • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5 Ascend-Docker-Runtime \u7ec4\u4ef6\u3002
        • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5 NPU MindX DL \u5957\u4ef6\u3002
        • \u5f53\u524d\u96c6\u7fa4\u5185 NPU \u5361\u672a\u8fdb\u884c\u4efb\u4f55\u865a\u62df\u5316\u64cd\u4f5c\u6216\u88ab\u5176\u5b83\u5e94\u7528\u5360\u7528\u3002

        \u8bf7\u53c2\u8003\u6607\u817e NPU \u7ec4\u4ef6\u5b89\u88c5\u6587\u6863\u5b89\u88c5\u57fa\u7840\u73af\u5883\u3002

        "},{"location":"admin/kpanda/gpu/ascend/ascend_usage.html#_2","title":"\u5feb\u901f\u4f7f\u7528","text":"

        \u672c\u6587\u4f7f\u7528\u6607\u817e\u793a\u4f8b\u5e93\u4e2d\u7684 AscentCL \u56fe\u7247\u5206\u7c7b\u5e94\u7528\u793a\u4f8b\u3002

        1. \u4e0b\u8f7d\u6607\u817e\u4ee3\u7801\u5e93

          \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u4e0b\u8f7d\u6607\u817e Demo \u793a\u4f8b\u4ee3\u7801\u5e93\uff0c\u5e76\u4e14\u8bf7\u8bb0\u4f4f\u4ee3\u7801\u5b58\u653e\u7684\u4f4d\u7f6e\uff0c\u540e\u7eed\u9700\u8981\u4f7f\u7528\u3002

          git clone https://gitee.com/ascend/samples.git\n
        2. \u51c6\u5907\u57fa\u7840\u955c\u50cf

          \u6b64\u4f8b\u4f7f\u7528 Ascent-pytorch \u57fa\u7840\u955c\u50cf\uff0c\u53ef\u8bbf\u95ee\u6607\u817e\u955c\u50cf\u4ed3\u5e93\u83b7\u53d6\u3002

        3. \u51c6\u5907 YAML

          ascend-demo.yaml
          apiVersion: batch/v1\nkind: Job\nmetadata:\n  name: resnetinfer1-1-1usoc\nspec:\n  template:\n    spec:\n      containers:\n        - image: ascendhub.huawei.com/public-ascendhub/ascend-pytorch:23.0.RC2-ubuntu18.04 # Inference image name\n          imagePullPolicy: IfNotPresent\n          name: resnet50infer\n          securityContext:\n            runAsUser: 0\n          command:\n            - \"/bin/bash\"\n            - \"-c\"\n            - |\n              source /usr/local/Ascend/ascend-toolkit/set_env.sh &&\n              TEMP_DIR=/root/samples_copy_$(date '+%Y%m%d_%H%M%S_%N') &&\n              cp -r /root/samples \"$TEMP_DIR\" &&\n              cd \"$TEMP_DIR\"/inference/modelInference/sampleResnetQuickStart/python/model &&\n              wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx &&\n              atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape=\"actual_input_1:1,3,224,224\"  --soc_version=Ascend910 &&\n              cd ../data &&\n              wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg &&\n              cd ../scripts &&\n              bash sample_run.sh\n          resources:\n            requests:\n              huawei.com/Ascend910: 1 # Number of the Ascend 910 Processors\n            limits:\n              huawei.com/Ascend910: 1 # The value should be the same as that of requests\n          volumeMounts:\n            - name: hiai-driver\n              mountPath: /usr/local/Ascend/driver\n              readOnly: true\n            - name: slog\n              mountPath: /var/log/npu/conf/slog/slog.conf\n            - name: localtime # The container time must be the same as the host time\n              mountPath: /etc/localtime\n            - name: dmp\n              mountPath: /var/dmp_daemon\n            - name: slogd\n              mountPath: /var/slogd\n            - name: hbasic\n              mountPath: /etc/hdcBasic.cfg\n            - name: sys-version\n              mountPath: /etc/sys_version.conf\n            - name: aicpu\n              mountPath: /usr/lib64/aicpu_kernels\n            - name: tfso\n              mountPath: /usr/lib64/libtensorflow.so\n            - name: sample-path\n              mountPath: /root/samples\n      volumes:\n        - name: hiai-driver\n          hostPath:\n            path: /usr/local/Ascend/driver\n        - name: slog\n          hostPath:\n            path: /var/log/npu/conf/slog/slog.conf\n        - name: localtime\n          hostPath:\n            path: /etc/localtime\n        - name: dmp\n          hostPath:\n            path: /var/dmp_daemon\n        - name: slogd\n          hostPath:\n            path: /var/slogd\n        - name: hbasic\n          hostPath:\n            path: /etc/hdcBasic.cfg\n        - name: sys-version\n          hostPath:\n            path: /etc/sys_version.conf\n        - name: aicpu\n          hostPath:\n            path: /usr/lib64/aicpu_kernels\n        - name: tfso\n          hostPath:\n            path: /usr/lib64/libtensorflow.so\n        - name: sample-path\n          hostPath:\n            path: /root/samples\n      restartPolicy: OnFailure\n

          \u4ee5\u4e0a YAML \u4e2d\u6709\u4e00\u4e9b\u5b57\u6bb5\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u4fee\u6539\uff1a

          1. atc ... --soc_version=Ascend910 \u4f7f\u7528\u7684\u662f Ascend910 \uff0c\u8bf7\u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u4e3b \u60a8\u53ef\u4ee5\u4f7f\u7528 npu-smi info \u547d\u4ee4\u67e5\u770b\u663e\u5361\u578b\u53f7\u7136\u540e\u52a0\u4e0a Ascend \u524d\u7f00\u5373\u53ef
          2. samples-path \u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u51c6
          3. resources \u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u51c6
        4. \u90e8\u7f72 Job \u5e76\u67e5\u770b\u7ed3\u679c

          \u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u521b\u5efa Job\uff1a

          kubectl apply -f ascend-demo.yaml\n

          \u67e5\u770b Pod \u8fd0\u884c\u72b6\u6001\uff1a

          Pod \u6210\u529f\u8fd0\u884c\u540e\uff0c\u67e5\u770b\u65e5\u5fd7\u7ed3\u679c\u3002\u5728\u5c4f\u5e55\u4e0a\u7684\u5173\u952e\u63d0\u793a\u4fe1\u606f\u793a\u4f8b\u5982\u4e0b\u56fe\uff0c\u63d0\u793a\u4fe1\u606f\u4e2d\u7684 Label \u8868\u793a\u7c7b\u522b\u6807\u8bc6\uff0c Conf \u8868\u793a\u8be5\u5206\u7c7b\u7684\u6700\u5927\u7f6e\u4fe1\u5ea6\uff0cClass \u8868\u793a\u6240\u5c5e\u7c7b\u522b\u3002\u8fd9\u4e9b\u503c\u53ef\u80fd\u4f1a\u6839\u636e\u7248\u672c\u3001\u73af\u5883\u6709\u6240\u4e0d\u540c\uff0c\u8bf7\u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u51c6\uff1a

          \u7ed3\u679c\u56fe\u7247\u5c55\u793a\uff1a

        "},{"location":"admin/kpanda/gpu/ascend/ascend_usage.html#_3","title":"\u754c\u9762\u4f7f\u7528","text":"
        1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Ascend \u3002

        2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Ascend\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7684\u7269\u7406\u5361\u6570\u91cf\uff1a

          \u7269\u7406\u5361\u6570\u91cf\uff08huawei.com/Ascend910\uff09 \uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14**\u5c0f\u4e8e\u7b49\u4e8e**\u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002

          \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

        "},{"location":"admin/kpanda/gpu/ascend/vnpu.html","title":"\u542f\u7528\u6607\u817e\u865a\u62df\u5316","text":"

        \u6607\u817e\u865a\u62df\u5316\u5206\u4e3a\u52a8\u6001\u865a\u62df\u5316\u548c\u9759\u6001\u865a\u62df\u5316\uff0c\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5f00\u542f\u5e76\u4f7f\u7528\u6607\u817e\u9759\u6001\u865a\u62df\u5316\u80fd\u529b\u3002

        "},{"location":"admin/kpanda/gpu/ascend/vnpu.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
        • Kubernetes \u96c6\u7fa4\u73af\u5883\u642d\u5efa\u3002
        • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5\u6607\u817e \uff08Ascend\uff09\u9a71\u52a8\u3002
        • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5 Ascend-Docker-Runtime \u7ec4\u4ef6\u3002
        • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5 NPU MindX DL \u5957\u4ef6\u3002
        • \u652f\u6301\u7684 NPU \u5361\u578b\u53f7\uff1a

          • Ascend 310P\uff0c\u5df2\u9a8c\u8bc1
          • Ascend 910b\uff0820 \u6838\uff09\uff0c\u5df2\u9a8c\u8bc1
          • Ascend 910\uff0832 \u6838\uff09\uff0c\u5b98\u65b9\u4ecb\u7ecd\u652f\u6301\uff0c\u672a\u5b9e\u9645\u9a8c\u8bc1
          • Ascend 910\uff0830 \u6838\uff09\uff0c\u5b98\u65b9\u4ecb\u7ecd\u652f\u6301\uff0c\u672a\u5b9e\u9645\u9a8c\u8bc1

          \u66f4\u591a\u7ec6\u8282\u53c2\u9605\u5b98\u65b9\u865a\u62df\u5316\u786c\u4ef6\u8bf4\u660e\u3002

        \u8bf7\u53c2\u8003\u6607\u817e NPU \u7ec4\u4ef6\u5b89\u88c5\u6587\u6863\u5b89\u88c5\u57fa\u7840\u73af\u5883\u3002

        "},{"location":"admin/kpanda/gpu/ascend/vnpu.html#_3","title":"\u5f00\u542f\u865a\u62df\u5316\u80fd\u529b","text":"

        \u5f00\u542f\u865a\u62df\u5316\u80fd\u529b\u9700\u8981\u624b\u52a8\u4fee\u6539\u00a0ascend-device-plugin-daemonset \u7ec4\u4ef6\u7684\u542f\u52a8\u53c2\u6570\uff0c\u53c2\u8003\u4e0b\u8ff0\u547d\u4ee4\uff1a

        - device-plugin -useAscendDocker=true -volcanoType=false -presetVirtualDevice=true\n- logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0\n
        "},{"location":"admin/kpanda/gpu/ascend/vnpu.html#vnpu","title":"\u5207\u5206 VNPU \u5b9e\u4f8b","text":"

        \u9759\u6001\u865a\u62df\u5316\u9700\u8981\u624b\u52a8\u5bf9 VNPU \u5b9e\u4f8b\u7684\u5207\u5206\uff0c\u8bf7\u53c2\u8003\u4e0b\u8ff0\u547d\u4ee4\uff1a

        npu-smi set -t create-vnpu -i 13 -c 0 -f vir02\n
        • i \u6307\u7684\u662f card id
        • c \u6307\u7684\u662f chip id
        • vir02 \u6307\u7684\u662f\u5207\u5206\u89c4\u683c\u6a21\u677f

        \u5173\u4e8e card id \u548c chip id\uff0c\u53ef\u4ee5\u901a\u8fc7 npu-smi info \u67e5\u8be2\uff0c\u5207\u5206\u89c4\u683c\u53ef\u901a\u8fc7 ascend \u5b98\u65b9\u6a21\u677f\u8fdb\u884c\u67e5\u8be2\u3002

        \u5207\u5206\u5b9e\u4f8b\u8fc7\u540e\u53ef\u901a\u8fc7\u4e0b\u8ff0\u547d\u4ee4\u67e5\u8be2\u5207\u5206\u7ed3\u679c\uff1a

        npu-smi info -t info-vnpu -i 13 -c 0\n

        \u67e5\u8be2\u7ed3\u679c\u5982\u4e0b\uff1a

        "},{"location":"admin/kpanda/gpu/ascend/vnpu.html#ascend-device-plugin-daemonset","title":"\u91cd\u542f\u00a0ascend-device-plugin-daemonset","text":"

        \u5207\u5206\u5b9e\u4f8b\u540e\u624b\u52a8\u91cd\u542f device-plugin pod\uff0c\u7136\u540e\u4f7f\u7528 kubectl describe \u547d\u4ee4\u67e5\u770b\u5df2\u6ce8\u518c node \u7684\u8d44\u6e90\uff1a

        kubectl describe node {{nodename}}\n

        "},{"location":"admin/kpanda/gpu/ascend/vnpu.html#_4","title":"\u5982\u4f55\u4f7f\u7528\u8bbe\u5907","text":"

        \u5728\u521b\u5efa\u5e94\u7528\u65f6\uff0c\u6307\u5b9a\u8d44\u6e90 key\uff0c\u53c2\u8003\u4e0b\u8ff0 YAML\uff1a

        ......\nresources:\n  requests:\n    huawei.com/Ascend310P-2c: 1\n  limits:\n    huawei.com/Ascend310P-2c: 1\n......\n
        "},{"location":"admin/kpanda/gpu/metax/usemetax.html","title":"\u6c90\u66e6 GPU \u7ec4\u4ef6\u5b89\u88c5\u4e0e\u4f7f\u7528","text":"

        \u672c\u7ae0\u8282\u63d0\u4f9b\u6c90\u66e6 gpu-extensions\u3001gpu-operator \u7b49\u7ec4\u4ef6\u7684\u5b89\u88c5\u6307\u5bfc\u548c\u6c90\u66e6 GPU \u6574\u5361\u548c vGPU \u4e24\u79cd\u6a21\u5f0f\u7684\u4f7f\u7528\u65b9\u6cd5\u3002

        "},{"location":"admin/kpanda/gpu/metax/usemetax.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
        1. \u5df2\u5728\u6c90\u66e6\u8f6f\u4ef6\u4e2d\u5fc3\u4e0b\u8f7d\u5e76\u5b89\u88c5\u6240\u9700\u7684 tar \u5305\uff0c \u672c\u6587\u4ee5 metax-gpu-k8s-package.0.7.10.tar.gz \u4e3a\u4f8b\u3002
        2. \u51c6\u5907 Kubernetes \u57fa\u7840\u73af\u5883
        "},{"location":"admin/kpanda/gpu/metax/usemetax.html#_2","title":"\u7ec4\u4ef6\u4ecb\u7ecd","text":"

        Metax \u63d0\u4f9b\u4e86\u4e24\u4e2a helm-chart \u5305\uff0c\u4e00\u4e2a\u662f metax-extensions\uff0c\u4e00\u4e2a\u662f gpu-operator\uff0c\u6839\u636e\u4f7f\u7528\u573a\u666f\u53ef\u9009\u62e9\u5b89\u88c5\u4e0d\u540c\u7684\u7ec4\u4ef6\u3002

        1. Metax-extensions\uff1a\u5305\u542b gpu-device \u548c gpu-label \u4e24\u4e2a\u7ec4\u4ef6\u3002\u5728\u4f7f\u7528 Metax-extensions \u65b9\u6848\u65f6\uff0c\u7528\u6237\u7684\u5e94\u7528\u5bb9\u5668\u955c\u50cf\u9700\u8981\u57fa\u4e8e MXMACA\u00ae \u57fa\u7840\u955c\u50cf\u6784\u5efa\u3002\u4e14 Metax-extensions \u4ec5\u9002\u7528\u4e8e GPU \u6574\u5361\u4f7f\u7528\u573a\u666f\u3002
        2. gpu-operator\uff1a\u5305\u542b gpu-device\u3001gpu-label\u3001driver-manager\u3001container-runtime\u3001operator-controller \u8fd9\u4e9b\u7ec4\u4ef6\u3002 \u4f7f\u7528 gpu-operator \u65b9\u6848\u65f6\uff0c\u7528\u6237\u53ef\u9009\u62e9\u5236\u4f5c\u4e0d\u5305\u542b MXMACA\u00ae SDK \u7684\u5e94\u7528\u5bb9\u5668\u955c\u50cf\u3002gpu-operator \u9002\u7528\u4e8e GPU \u6574\u5361\u548c vGPU \u573a\u666f\u3002
        "},{"location":"admin/kpanda/gpu/metax/usemetax.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
        1. \u4ece /home/metax/metax-docs/k8s/metax-gpu-k8s-package.0.7.10.tar.gz \u6587\u4ef6\u4e2d\u89e3\u538b\u51fa

          • deploy-gpu-extensions.yaml # \u90e8\u7f72yaml
          • metax-gpu-extensions-0.7.10.tgz\u3001metax-operator-0.7.10.tgz # helm chart\u6587\u4ef6
          • metax-k8s-images.0.7.10.run # \u79bb\u7ebf\u955c\u50cf
        2. \u67e5\u770b\u7cfb\u7edf\u662f\u5426\u5b89\u88c5\u9a71\u52a8

          $ lsmod | grep metax \nmetax 1605632 0 \nttm 86016 3 drm_vram_helper,metax,drm_ttm_helper \ndrm 618496 7 drm_kms_helper,drm_vram_helper,ast,metax,drm_ttm_helper,ttm\n
          • \u5982\u6ca1\u6709\u5185\u5bb9\u663e\u793a\uff0c\u5c31\u8868\u793a\u6ca1\u6709\u5b89\u88c5\u8fc7\u8f6f\u4ef6\u5305\u3002\u5982\u6709\u5185\u5bb9\u663e\u793a\uff0c\u5219\u8868\u793a\u5b89\u88c5\u8fc7\u8f6f\u4ef6\u5305\u3002
          • \u4f7f\u7528 metax-opeartor \u65f6\uff0c\u4e0d\u63a8\u8350\u5728\u5de5\u4f5c\u8282\u70b9\u9884\u5b89\u88c5 MXMACA \u5185\u6838\u6001\u9a71\u52a8\uff0c\u82e5\u5df2\u5b89\u88c5\u4e5f\u65e0\u9700\u5378\u8f7d\u3002
        3. \u5b89\u88c5\u9a71\u52a8

        "},{"location":"admin/kpanda/gpu/metax/usemetax.html#gpu-extensions","title":"gpu-extensions","text":"
        1. \u63a8\u9001\u955c\u50cf

          tar -xf metax-gpu-k8s-package.0.7.10.tar.gz\n./metax-k8s-images.0.7.10.run push {registry}/metax\n
        2. \u63a8\u9001 Helm Chart

          helm plugin install https://github.com/chartmuseum/helm-push\nhelm repo add  --username rootuser --password rootpass123  metax http://172.16.16.5:8081\nhelm cm-push metax-operator-0.7.10.tgz metax\nhelm cm-push metax-gpu-extensions-0.7.10.tgz metax\n
        3. \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0a\u5b89\u88c5 metax-gpu-extensions

          \u90e8\u7f72\u6210\u529f\u4e4b\u540e\uff0c\u53ef\u4ee5\u5728\u8282\u70b9\u4e0a\u67e5\u770b\u5230\u8d44\u6e90\u3002

        4. \u4fee\u6539\u6210\u529f\u4e4b\u540e\u5c31\u53ef\u4ee5\u5728\u8282\u70b9\u4e0a\u770b\u5230\u5e26\u6709 Metax GPU \u7684\u6807\u7b7e

        "},{"location":"admin/kpanda/gpu/metax/usemetax.html#gpu-operator","title":"gpu-operator","text":"

        \u5b89\u88c5 gpu-opeartor \u65f6\u7684\u5df2\u77e5\u95ee\u9898\uff1a

        1. metax-operator\u3001gpu-label\u3001gpu-device \u3001container-runtime \u8fd9\u51e0\u4e2a\u7ec4\u4ef6\u955c\u50cf\u8981\u5e26\u6709 amd64 \u540e\u7f00\u3002

        2. metax-maca \u7ec4\u4ef6\u7684\u955c\u50cf\u4e0d\u5728 metax-k8s-images.0.7.13.run \u5305\u91cc\u9762\uff0c\u9700\u8981\u5355\u72ec\u4e0b\u8f7d maca-mxc500-2.23.0.23-ubuntu20.04-x86_64.tar.xz \u8fd9\u7c7b\u955c\u50cf\uff0cload \u4e4b\u540e\u91cd\u65b0\u4fee\u6539 metax-maca \u7ec4\u4ef6\u7684\u955c\u50cf\u3002

        3. metax-driver \u7ec4\u4ef6\u7684\u955c\u50cf\u9700\u8981\u4ece https://pub-docstore.metax-tech.com:7001 \u8fd9\u4e2a\u7f51\u7ad9\u4e0b\u8f7d k8s-driver-image.2.23.0.25.run \u6587\u4ef6\uff0c\u7136\u540e\u6267\u884c k8s-driver-image.2.23.0.25.run push {registry}/metax \u547d\u4ee4\u628a\u955c\u50cf\u63a8\u9001\u5230\u955c\u50cf\u4ed3\u5e93\u3002\u63a8\u9001\u4e4b\u540e\u4fee\u6539 metax-driver \u7ec4\u4ef6\u7684\u955c\u50cf\u5730\u5740\u3002

        "},{"location":"admin/kpanda/gpu/metax/usemetax.html#gpu_1","title":"\u4f7f\u7528 GPU","text":"

        \u5b89\u88c5\u540e\u53ef\u5728\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u4f7f\u7528\u6c90\u66e6 GPU\u3002\u6ce8\u610f\u542f\u7528 GPU \u540e\uff0c\u9700\u9009\u62e9GPU\u7c7b\u578b\u4e3a Metax GPU

        \u8fdb\u5165\u5bb9\u5668\uff0c\u6267\u884c mx-smi \u53ef\u67e5\u770b GPU \u7684\u4f7f\u7528\u60c5\u51b5.

        "},{"location":"admin/kpanda/gpu/mlu/use-mlu.html","title":"\u4f7f\u7528\u5bd2\u6b66\u7eaa GPU","text":"

        \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u5bd2\u6b66\u7eaa GPU\u3002

        "},{"location":"admin/kpanda/gpu/mlu/use-mlu.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
        • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
        • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
        • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5\u5bd2\u6b66\u7eaa\u56fa\u4ef6\u3001\u9a71\u52a8\u4ee5\u53caDevicePlugin\u7ec4\u4ef6\uff0c\u5b89\u88c5\u8be6\u60c5\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff1a
          • \u9a71\u52a8\u56fa\u4ef6\u5b89\u88c5
          • DevicePlugin \u5b89\u88c5

        \u5728\u5b89\u88c5 DevicePlugin \u65f6\u8bf7\u5173\u95ed --enable-device-type \u53c2\u6570\uff0c\u5426\u5219\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5c06\u65e0\u6cd5\u6b63\u786e\u8bc6\u522b\u5bd2\u6b66\u7eaa GPU\u3002

        "},{"location":"admin/kpanda/gpu/mlu/use-mlu.html#gpu_1","title":"\u5bd2\u6b66\u7eaa GPU \u6a21\u5f0f\u4ecb\u7ecd","text":"

        \u5bd2\u6b66\u7eaa GPU \u6709\u4ee5\u4e0b\u51e0\u79cd\u6a21\u5f0f\uff1a

        • \u6574\u5361\u6a21\u5f0f\uff1a\u5c06\u5bd2\u6b66\u7eaaGPU\u4ee5\u6574\u5361\u7684\u65b9\u5f0f\u6ce8\u518c\u5230\u96c6\u7fa4\u5f53\u4e2d\u8fdb\u884c\u4f7f\u7528\u3002
        • Share \u6a21\u5f0f\uff1a\u53ef\u4ee5\u5c06\u4e00\u5f20\u5bd2\u6b66\u7eaaGPU\u5171\u4eab\u7ed9\u591a\u4e2a Pod \u8fdb\u884c\u4f7f\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7 virtualization-num \u53c2\u6570\u8fdb\u884c\u8bbe\u7f6e\u53ef\u5171\u4eab\u5bb9\u5668\u7684\u6570\u91cf\u3002
        • Dynamic smlu \u6a21\u5f0f\uff1a\u8fdb\u4e00\u6b65\u5bf9\u8d44\u6e90\u8fdb\u884c\u4e86\u7ec6\u5316\uff0c\u53ef\u4ee5\u63a7\u5236\u5206\u914d\u7ed9\u5bb9\u5668\u7684\u663e\u5b58\u3001\u7b97\u529b\u7684\u5927\u5c0f\u3002
        • Mim \u6a21\u5f0f\uff1a\u53ef\u4ee5\u5c06\u5bd2\u6b66\u7eaa GPU \u6309\u7167\u56fa\u5b9a\u7684\u89c4\u683c\u5207\u5206\u6210\u591a\u5f20 GPU \u8fdb\u884c\u4f7f\u7528\u3002
        "},{"location":"admin/kpanda/gpu/mlu/use-mlu.html#ai","title":"\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528\u5bd2\u6b66\u7eaa","text":"

        \u8fd9\u91cc\u4ee5 Dynamic smlu \u6a21\u5f0f\u4e3a\u4f8b\uff1a

        1. \u5728\u6b63\u786e\u5b89\u88c5 DevicePlugin \u7b49\u7ec4\u4ef6\u540e\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8fd0\u7ef4-> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002

        2. \u70b9\u51fb\u8282\u70b9\u7ba1\u7406\u9875\u9762\uff0c\u67e5\u770b\u8282\u70b9\u662f\u5426\u5df2\u7ecf\u6b63\u786e\u8bc6\u522b\u5230\u5bf9\u5e94\u7684GPU\u7c7b\u578b\u3002

        3. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08MLU VGPU\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e App \u4f7f\u7528\u7684 GPU \u8d44\u6e90\uff1a

          • GPU \u7b97\u529b\uff08cambricon.com/mlu.smlu.vcore\uff09\uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u4f7f\u7528\u6838\u5fc3\u7684\u767e\u5206\u6bd4\u6570\u91cf\u3002
          • GPU \u663e\u5b58\uff08cambricon.com/mlu.smlu.vmemory\uff09\uff1a\u8868\u793a\u5f53\u524dPod\u9700\u8981\u4f7f\u7528\u663e\u5b58\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u662fMB\u3002

        "},{"location":"admin/kpanda/gpu/mlu/use-mlu.html#yaml","title":"\u4f7f\u7528 YAML \u914d\u7f6e","text":"

        \u53c2\u8003 YAML \u6587\u4ef6\u5982\u4e0b\uff1a

        apiVersion: v1  \nkind: Pod  \nmetadata:  \n  name: pod1  \nspec:  \n  restartPolicy: OnFailure  \n  containers:  \n    - image: ubuntu:16.04  \n      name: pod1-ctr  \n      command: [\"sleep\"]  \n      args: [\"100000\"]  \n      resources:  \n        limits:  \n          cambricon.com/mlu: \"1\" # use this when device type is not enabled, else delete this line.  \n          #cambricon.com/mlu: \"1\" #uncomment to use when device type is enabled  \n          #cambricon.com/mlu.share: \"1\" #uncomment to use device with env-share mode  \n          #cambricon.com/mlu.mim-2m.8gb: \"1\" #uncomment to use device with mim mode  \n          #cambricon.com/mlu.smlu.vcore: \"100\" #uncomment to use device with mim mode  \n          #cambricon.com/mlu.smlu.vmemory: \"1024\" #uncomment to use device with mim mode\n
        "},{"location":"admin/kpanda/gpu/nvidia/index.html","title":"NVIDIA GPU \u5361\u4f7f\u7528\u6a21\u5f0f","text":"

        NVIDIA \u4f5c\u4e3a\u4e1a\u5185\u77e5\u540d\u7684\u56fe\u5f62\u8ba1\u7b97\u4f9b\u5e94\u5546\uff0c\u4e3a\u7b97\u529b\u7684\u63d0\u5347\u63d0\u4f9b\u4e86\u8bf8\u591a\u8f6f\u786c\u4ef6\u89e3\u51b3\u65b9\u6848\uff0c\u5176\u4e2d NVIDIA \u5728 GPU \u7684\u4f7f\u7528\u65b9\u5f0f\u4e0a\u63d0\u4f9b\u4e86\u5982\u4e0b\u4e09\u79cd\u89e3\u51b3\u65b9\u6848\uff1a

        "},{"location":"admin/kpanda/gpu/nvidia/index.html#full-gpu","title":"\u6574\u5361\uff08Full GPU\uff09","text":"

        \u6574\u5361\u662f\u6307\u5c06\u6574\u4e2a NVIDIA GPU \u5206\u914d\u7ed9\u5355\u4e2a\u7528\u6237\u6216\u5e94\u7528\u7a0b\u5e8f\u3002\u5728\u8fd9\u79cd\u914d\u7f6e\u4e0b\uff0c\u5e94\u7528\u53ef\u4ee5\u5b8c\u5168\u5360\u7528 GPU \u7684\u6240\u6709\u8d44\u6e90\uff0c \u5e76\u83b7\u5f97\u6700\u5927\u7684\u8ba1\u7b97\u6027\u80fd\u3002\u6574\u5361\u9002\u7528\u4e8e\u9700\u8981\u5927\u91cf\u8ba1\u7b97\u8d44\u6e90\u548c\u5185\u5b58\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5982\u6df1\u5ea6\u5b66\u4e60\u8bad\u7ec3\u3001\u79d1\u5b66\u8ba1\u7b97\u7b49\u3002

        "},{"location":"admin/kpanda/gpu/nvidia/index.html#vgpuvirtual-gpu","title":"vGPU\uff08Virtual GPU\uff09","text":"

        vGPU \u662f\u4e00\u79cd\u865a\u62df\u5316\u6280\u672f\uff0c\u5141\u8bb8\u5c06\u4e00\u4e2a\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a\u865a\u62df GPU\uff0c\u6bcf\u4e2a\u865a\u62df GPU \u5206\u914d\u7ed9\u4e0d\u540c\u7684\u4e91\u4e3b\u673a\u6216\u7528\u6237\u3002 vGPU \u4f7f\u591a\u4e2a\u7528\u6237\u53ef\u4ee5\u5171\u4eab\u540c\u4e00\u53f0\u7269\u7406 GPU\uff0c\u5e76\u5728\u5404\u81ea\u7684\u865a\u62df\u73af\u5883\u4e2d\u72ec\u7acb\u4f7f\u7528 GPU \u8d44\u6e90\u3002 \u6bcf\u4e2a\u865a\u62df GPU \u53ef\u4ee5\u83b7\u5f97\u4e00\u5b9a\u7684\u8ba1\u7b97\u80fd\u529b\u548c\u663e\u5b58\u5bb9\u91cf\u3002vGPU \u9002\u7528\u4e8e\u865a\u62df\u5316\u73af\u5883\u548c\u4e91\u8ba1\u7b97\u573a\u666f\uff0c\u53ef\u4ee5\u63d0\u4f9b\u66f4\u9ad8\u7684\u8d44\u6e90\u5229\u7528\u7387\u548c\u7075\u6d3b\u6027\u3002

        "},{"location":"admin/kpanda/gpu/nvidia/index.html#migmulti-instance-gpu","title":"MIG\uff08Multi-Instance GPU\uff09","text":"

        MIG \u662f NVIDIA Ampere \u67b6\u6784\u5f15\u5165\u7684\u4e00\u9879\u529f\u80fd\uff0c\u5b83\u5141\u8bb8\u5c06\u4e00\u4e2a\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a\u7269\u7406 GPU \u5b9e\u4f8b\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u53ef\u4ee5\u72ec\u7acb\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u7528\u6237\u6216\u5de5\u4f5c\u8d1f\u8f7d\u3002 \u6bcf\u4e2a MIG \u5b9e\u4f8b\u5177\u6709\u81ea\u5df1\u7684\u8ba1\u7b97\u8d44\u6e90\u3001\u663e\u5b58\u548c PCIe \u5e26\u5bbd\uff0c\u5c31\u50cf\u4e00\u4e2a\u72ec\u7acb\u7684\u865a\u62df GPU\u3002 MIG \u63d0\u4f9b\u4e86\u66f4\u7ec6\u7c92\u5ea6\u7684 GPU \u8d44\u6e90\u5206\u914d\u548c\u7ba1\u7406\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u52a8\u6001\u8c03\u6574\u5b9e\u4f8b\u7684\u6570\u91cf\u548c\u5927\u5c0f\u3002 MIG \u9002\u7528\u4e8e\u591a\u79df\u6237\u73af\u5883\u3001\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\u548c\u6279\u5904\u7406\u4f5c\u4e1a\u7b49\u573a\u666f\u3002

        \u65e0\u8bba\u662f\u5728\u865a\u62df\u5316\u73af\u5883\u4e2d\u4f7f\u7528 vGPU\uff0c\u8fd8\u662f\u5728\u7269\u7406 GPU \u4e0a\u4f7f\u7528 MIG\uff0cNVIDIA \u4e3a\u7528\u6237\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u9009\u62e9\u548c\u4f18\u5316 GPU \u8d44\u6e90\u7684\u65b9\u5f0f\u3002 \u7b97\u4e30 AI \u7b97\u529b\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u5168\u9762\u517c\u5bb9\u4e86\u4e0a\u8ff0 NVIDIA \u7684\u80fd\u529b\u7279\u6027\uff0c\u7528\u6237\u53ea\u9700\u901a\u8fc7\u7b80\u5355\u7684\u754c\u9762\u64cd\u4f5c\uff0c\u5c31\u80fd\u591f\u83b7\u5f97\u5168\u90e8 NVIDIA GPU \u7684\u8ba1\u7b97\u80fd\u529b\uff0c\u4ece\u800c\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u7387\u5e76\u964d\u4f4e\u6210\u672c\u3002

        • Single \u6a21\u5f0f\uff0c\u8282\u70b9\u4ec5\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u5355\u4e00\u7c7b\u578b\u7684 MIG \u8bbe\u5907\uff0c\u8282\u70b9\u4e0a\u7684\u6240\u6709 GPU \u5fc5\u987b\uff1a
          • \u5c5e\u4e8e\u540c\u4e00\u4e2a\u578b\u53f7\uff08\u4f8b\u5982 A100-SXM-40GB\uff09\uff0c\u53ea\u6709\u540c\u4e00\u578b\u53f7 GPU \u7684 MIG Profile \u624d\u662f\u4e00\u6837\u7684
          • \u542f\u7528 MIG \u914d\u7f6e\uff0c\u9700\u8981\u91cd\u542f\u673a\u5668\u624d\u80fd\u751f\u6548
          • \u4e3a\u5728\u6240\u6709\u4ea7\u54c1\u4e2d\u516c\u5f00\u201c\u5b8c\u5168\u76f8\u540c\u201d\u7684 MIG \u8bbe\u5907\u7c7b\u578b\uff0c\u521b\u5efa\u76f8\u540c\u7684GI \u548c CI
        • Mixed \u6a21\u5f0f\uff0c\u8282\u70b9\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u6df7\u5408 MIG \u8bbe\u5907\u7c7b\u578b\u3002\u8bf7\u6c42\u7279\u5b9a\u7684 MIG \u8bbe\u5907\u7c7b\u578b\u9700\u8981\u8bbe\u5907\u7c7b\u578b\u63d0\u4f9b\u7684\u8ba1\u7b97\u5207\u7247\u6570\u91cf\u548c\u5185\u5b58\u603b\u91cf\u3002
          • \u8282\u70b9\u4e0a\u7684\u6240\u6709 GPU \u5fc5\u987b\uff1a\u5c5e\u4e8e\u540c\u4e00\u4ea7\u54c1\u7ebf\uff08\u4f8b\u5982 A100-SXM-40GB\uff09
          • \u6bcf\u4e2a GPU \u53ef\u542f\u7528\u6216\u4e0d\u542f\u7528 MIG\uff0c\u5e76\u4e14\u53ef\u4ee5\u81ea\u7531\u914d\u7f6e\u4efb\u4f55\u53ef\u7528 MIG \u8bbe\u5907\u7c7b\u578b\u7684\u6df7\u5408\u642d\u914d\u3002
          • \u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 k8s-device-plugin \u5c06\uff1a
            • \u4f7f\u7528\u4f20\u7edf\u7684 nvidia.com/gpu \u8d44\u6e90\u7c7b\u578b\u516c\u5f00\u4efb\u4f55\u4e0d\u5904\u4e8e MIG \u6a21\u5f0f\u7684 GPU
            • \u4f7f\u7528\u9075\u5faa\u67b6\u6784 nvidia.com/mig-g.gb \u7684\u8d44\u6e90\u7c7b\u578b\u516c\u5f00\u5404\u4e2a MIG \u8bbe\u5907

              \u5f00\u542f\u914d\u7f6e\u8be6\u60c5\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/index.html#_1","title":"\u5982\u4f55\u4f7f\u7528","text":"

              \u60a8\u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u94fe\u63a5\uff0c\u5feb\u901f\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5173\u4e8e NVIDIA GPU \u5361\u7684\u7ba1\u7406\u80fd\u529b\u3002

              • NVIDIA GPU \u6574\u5361\u4f7f\u7528
              • NVIDIA vGPU \u4f7f\u7528
              • NVIDIA MIG \u4f7f\u7528
              "},{"location":"admin/kpanda/gpu/nvidia/full_gpu_userguide.html","title":"\u5e94\u7528\u4f7f\u7528 GPU \u6574\u5361","text":"

              \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5c06\u6574\u4e2a NVIDIA GPU \u5361\u5206\u914d\u7ed9\u5355\u4e2a\u5e94\u7528\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/full_gpu_userguide.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
              • \u5f53\u524d\u96c6\u7fa4\u5df2\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u5e76\u5df2\u542f\u7528 NVIDIA DevicePlugin \uff0c\u53ef\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5\u3002
              • \u5f53\u524d\u96c6\u7fa4\u5185 GPU \u5361\u672a\u8fdb\u884c\u4efb\u4f55\u865a\u62df\u5316\u64cd\u4f5c\u6216\u88ab\u5176\u5b83\u5e94\u7528\u5360\u7528\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/full_gpu_userguide.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/gpu/nvidia/full_gpu_userguide.html#ui","title":"\u4f7f\u7528 UI \u754c\u9762\u914d\u7f6e","text":"
              1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Nvidia GPU \u3002

              2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Nvidia GPU\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7684\u7269\u7406\u5361\u6570\u91cf\uff1a

                \u7269\u7406\u5361\u6570\u91cf\uff08nvidia.com/gpu\uff09 \uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002

                \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/full_gpu_userguide.html#yaml","title":"\u4f7f\u7528 YAML \u914d\u7f6e","text":"

              \u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u7533\u8bf7 GPU \u8d44\u6e90\uff0c\u5728\u8d44\u6e90\u7533\u8bf7\u548c\u9650\u5236\u914d\u7f6e\u4e2d\u589e\u52a0 nvidia.com/gpu: 1 \u53c2\u6570\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7269\u7406\u5361\u7684\u6570\u91cf\u3002

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: full-gpu-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: full-gpu-demo\n  template:\n    metadata:\n      labels:\n        app: full-gpu-demo\n    spec:\n      containers:\n      - image: chrstnhntschl/gpu_burn\n        name: container-0\n        resources:\n          requests:\n            cpu: 250m\n            memory: 512Mi\n            nvidia.com/gpu: 1   # \u7533\u8bf7 GPU \u7684\u6570\u91cf\n          limits:\n            cpu: 250m\n            memory: 512Mi\n            nvidia.com/gpu: 1   # GPU \u6570\u91cf\u7684\u4f7f\u7528\u4e0a\u9650\n      imagePullSecrets:\n      - name: default-secret\n

              Note

              \u4f7f\u7528 nvidia.com/gpu \u53c2\u6570\u6307\u5b9a GPU \u6570\u91cf\u65f6\uff0crequests \u548c limits \u503c\u9700\u8981\u4fdd\u6301\u4e00\u81f4\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html","title":"GPU Operator \u79bb\u7ebf\u5b89\u88c5","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9884\u7f6e\u4e86 Ubuntu22.04\u3001Ubuntu20.04\u3001CentOS 7.9 \u8fd9\u4e09\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u7684 Driver \u955c\u50cf\uff0c\u9a71\u52a8\u7248\u672c\u662f 535.104.12\uff1b \u5e76\u4e14\u5185\u7f6e\u4e86\u5404\u64cd\u4f5c\u7cfb\u7edf\u6240\u9700\u7684 Toolkit \u955c\u50cf\uff0c\u7528\u6237\u4e0d\u518d\u9700\u8981\u624b\u52a8\u79bb\u7ebf Toolkit \u955c\u50cf\u3002

              \u672c\u6587\u4f7f\u7528 AMD \u67b6\u6784\u7684 CentOS 7.9\uff083.10.0-1160\uff09\u8fdb\u884c\u6f14\u793a\u3002\u5982\u9700\u4f7f\u7528 Red Hat 8.4 \u90e8\u7f72\uff0c \u8bf7\u53c2\u8003\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf\u548c\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5f85\u90e8\u7f72 gpu-operator \u7684\u96c6\u7fa4\u8282\u70b9\u5185\u6838\u7248\u672c\u5fc5\u987b\u5b8c\u5168\u4e00\u81f4\u3002\u8282\u70b9\u6240\u5728\u7684\u53d1\u884c\u7248\u548c GPU \u5361\u578b\u53f7\u5728 GPU \u652f\u6301\u77e9\u9635\u7684\u8303\u56f4\u5185\u3002
              • \u5b89\u88c5 gpu-operator \u65f6\u9009\u62e9 v23.9.0+2 \u53ca\u4ee5\u4e0a\u7248\u672c
              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 gpu-operator \u63d2\u4ef6\u3002

              1. \u767b\u5f55\u5e73\u53f0\uff0c\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5f85\u5b89\u88c5 gpu-operator \u7684\u96c6\u7fa4 -> \u8fdb\u5165\u96c6\u7fa4\u8be6\u60c5\u3002

              2. \u5728 Helm \u6a21\u677f \u9875\u9762\uff0c\u9009\u62e9 \u5168\u90e8\u4ed3\u5e93 \uff0c\u641c\u7d22 gpu-operator \u3002

              3. \u9009\u62e9 gpu-operator \uff0c\u70b9\u51fb \u5b89\u88c5 \u3002

              4. \u53c2\u8003\u4e0b\u6587\u53c2\u6570\u914d\u7f6e\uff0c\u914d\u7f6e gpu-operator \u5b89\u88c5\u53c2\u6570\uff0c\u5b8c\u6210 gpu-operator \u7684\u5b89\u88c5\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_3","title":"\u53c2\u6570\u914d\u7f6e","text":"
              • systemOS \uff1a\u9009\u62e9\u673a\u5668\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5f53\u524d\u5185\u7f6e\u4e86 Ubuntu 22.04\u3001Ubuntu20.04\u3001Centos7.9 \u3001other \u56db\u4e2a\u9009\u9879\uff0c\u8bf7\u6b63\u786e\u7684\u9009\u62e9\u64cd\u4f5c\u7cfb\u7edf\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_4","title":"\u57fa\u672c\u53c2\u6570\u914d\u7f6e","text":"
              • \u540d\u79f0 \uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\u3002
              • \u547d\u540d\u7a7a\u95f4 \uff1a\u9009\u62e9\u5c06\u63d2\u4ef6\u5b89\u88c5\u7684\u547d\u540d\u7a7a\u95f4\u3002
              • \u7248\u672c \uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 v23.9.0+2 \u7248\u672c\u4e3a\u4f8b\u3002
              • \u5931\u8d25\u5220\u9664 \uff1a\u5b89\u88c5\u5931\u8d25\uff0c\u5219\u5220\u9664\u5df2\u7ecf\u5b89\u88c5\u7684\u5173\u8054\u8d44\u6e90\u3002\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u3002
              • \u5c31\u7eea\u7b49\u5f85 \uff1a\u542f\u7528\u540e\uff0c\u6240\u6709\u5173\u8054\u8d44\u6e90\u90fd\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
              • \u8be6\u60c5\u65e5\u5fd7 \uff1a\u5f00\u542f\u540e\uff0c\u5c06\u8bb0\u5f55\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_5","title":"\u9ad8\u7ea7\u53c2\u6570\u914d\u7f6e","text":""},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#operator","title":"Operator \u53c2\u6570\u914d\u7f6e","text":"
              • InitContainer.image \uff1a\u914d\u7f6e CUDA \u955c\u50cf\uff0c\u63a8\u8350\u9ed8\u8ba4\u955c\u50cf\uff1a nvidia/cuda
              • InitContainer.repository \uff1aCUDA \u955c\u50cf\u6240\u5728\u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u9ed8\u8ba4\u4e3a nvcr.m.daocloud.io \u4ed3\u5e93
              • InitContainer.version : CUDA \u955c\u50cf\u7684\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u9ed8\u8ba4\u53c2\u6570
              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#driver","title":"Driver \u53c2\u6570\u914d\u7f6e","text":"
              • Driver.enable \uff1a\u914d\u7f6e\u662f\u5426\u5728\u8282\u70b9\u4e0a\u90e8\u7f72 NVIDIA \u9a71\u52a8\uff0c\u9ed8\u8ba4\u5f00\u542f\uff0c\u5982\u679c\u60a8\u5728\u4f7f\u7528 GPU Operator \u90e8\u7f72\u524d\uff0c\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u90e8\u7f72\u4e86 NVIDIA \u9a71\u52a8\u7a0b\u5e8f\uff0c\u8bf7\u5173\u95ed\u3002\uff08\u82e5\u624b\u52a8\u90e8\u7f72\u9a71\u52a8\u7a0b\u5e8f\u9700\u8981\u5173\u6ce8 CUDA Toolkit \u4e0e Toolkit Driver Version \u7684\u9002\u914d\u5173\u7cfb\uff0c\u901a\u8fc7 GPU operator \u5b89\u88c5\u5219\u65e0\u9700\u5173\u6ce8\uff09\u3002
              • Driver.usePrecompiled \uff1a\u542f\u7528\u9884\u7f16\u8bd1\u7684GPU\u9a71\u52a8
              • Driver.image \uff1a\u914d\u7f6e GPU \u9a71\u52a8\u955c\u50cf\uff0c\u63a8\u8350\u9ed8\u8ba4\u955c\u50cf\uff1a nvidia/driver \u3002
              • Driver.repository \uff1aGPU \u9a71\u52a8\u955c\u50cf\u6240\u5728\u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u9ed8\u8ba4\u4e3a nvidia \u7684 nvcr.io \u4ed3\u5e93\u3002
              • Driver.usePrecompiled \uff1a\u5f00\u542f\u9884\u7f16\u8bd1\u6a21\u5f0f\u5b89\u88c5\u9a71\u52a8\u3002
              • Driver.version \uff1aGPU \u9a71\u52a8\u955c\u50cf\u7684\u7248\u672c\uff0c\u79bb\u7ebf\u90e8\u7f72\u8bf7\u4f7f\u7528\u9ed8\u8ba4\u53c2\u6570\uff0c\u4ec5\u5728\u7ebf\u5b89\u88c5\u65f6\u9700\u914d\u7f6e\u3002\u4e0d\u540c\u7c7b\u578b\u64cd\u4f5c\u7cfb\u7edf\u7684 Driver \u955c\u50cf\u7684\u7248\u672c\u5b58\u5728\u5982\u4e0b\u5dee\u5f02\uff0c \u8be6\u60c5\u53ef\u53c2\u8003\uff1aNvidia GPU Driver \u7248\u672c\u3002 \u5982\u4e0b\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u7684 Driver Version \u793a\u4f8b\uff1a

                Note

                \u4f7f\u7528\u5185\u7f6e\u7684\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u65e0\u9700\u4fee\u6539\u955c\u50cf\u7248\u672c\uff0c\u5176\u4ed6\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u8bf7\u53c2\u8003\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20\u955c\u50cf\u3002 \u6ce8\u610f\u7248\u672c\u53f7\u540e\u65e0\u9700\u586b\u5199 Ubuntu\u3001CentOS\u3001Red Hat \u7b49\u64cd\u4f5c\u7cfb\u7edf\u540d\u79f0\uff0c\u82e5\u5b98\u65b9\u955c\u50cf\u542b\u6709\u64cd\u4f5c\u7cfb\u7edf\u540e\u7f00\uff0c\u8bf7\u624b\u52a8\u79fb\u9664\u3002

                • Red Hat \u7cfb\u7edf\uff0c\u4f8b\u5982 525.105.17
                • Ubuntu \u7cfb\u7edf\uff0c\u4f8b\u5982 535-5.15.0-1043-nvidia
                • CentOS \u7cfb\u7edf\uff0c\u4f8b\u5982 525.147.05
              • Driver.RepoConfig.ConfigMapName \uff1a\u7528\u6765\u8bb0\u5f55 GPU Operator \u7684\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\uff0c \u5f53\u4f7f\u7528\u9884\u7f6e\u7684\u79bb\u7ebf\u5305\u65f6\uff0c\u5404\u7c7b\u578b\u7684\u64cd\u4f5c\u7cfb\u7edf\u8bf7\u53c2\u8003\u5982\u4e0b\u7684\u6587\u6863\u3002

                • \u6784\u5efa CentOS 7.9 \u79bb\u7ebf yum \u6e90
                • \u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90
              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#toolkit","title":"Toolkit \u914d\u7f6e\u53c2\u6570","text":"

              Toolkit.enable \uff1a\u9ed8\u8ba4\u5f00\u542f\uff0c\u8be5\u7ec4\u4ef6\u8ba9 conatainerd/docker \u652f\u6301\u8fd0\u884c\u9700\u8981 GPU \u7684\u5bb9\u5668\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#mig","title":"MIG \u914d\u7f6e\u53c2\u6570","text":"

              \u8be6\u7ec6\u914d\u7f6e\u65b9\u5f0f\u8bf7\u53c2\u8003\u5f00\u542f MIG \u529f\u80fd

              MigManager.Config.name \uff1aMIG \u7684\u5207\u5206\u914d\u7f6e\u6587\u4ef6\u540d\uff0c\u7528\u4e8e\u5b9a\u4e49 MIG \u7684\uff08GI, CI\uff09\u5207\u5206\u7b56\u7565\u3002 \u9ed8\u8ba4\u4e3a default-mig-parted-config \u3002\u81ea\u5b9a\u4e49\u53c2\u6570\u53c2\u8003\u5f00\u542f MIG \u529f\u80fd\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_6","title":"\u4e0b\u4e00\u6b65\u64cd\u4f5c","text":"

              \u5b8c\u6210\u4e0a\u8ff0\u76f8\u5173\u53c2\u6570\u914d\u7f6e\u548c\u521b\u5efa\u540e\uff1a

              • \u5982\u679c\u4f7f\u7528 \u6574\u5361\u6a21\u5f0f\uff0c\u5e94\u7528\u521b\u5efa\u65f6\u53ef\u4f7f\u7528 GPU \u8d44\u6e90

              • \u5982\u679c\u4f7f\u7528 vGPU \u6a21\u5f0f \uff0c\u5b8c\u6210\u4e0a\u8ff0\u76f8\u5173\u53c2\u6570\u914d\u7f6e\u548c\u521b\u5efa\u540e\uff0c\u4e0b\u4e00\u6b65\u8bf7\u5b8c\u6210 vGPU Addon \u5b89\u88c5

              • \u5982\u679c\u4f7f\u7528 MIG \u6a21\u5f0f\uff0c\u5e76\u4e14\u9700\u8981\u7ed9\u4e2a\u522b GPU \u8282\u70b9\u6309\u7167\u67d0\u79cd\u5207\u5206\u89c4\u683c\u8fdb\u884c\u4f7f\u7528\uff0c \u5426\u5219\u6309\u7167 MigManager.Config \u4e2d\u7684 default \u503c\u8fdb\u884c\u5207\u5206\u3002

                • single \u6a21\u5f0f\u8bf7\u7ed9\u5bf9\u5e94\u8282\u70b9\u6253\u4e0a\u5982\u4e0b Label\uff1a

                  kubectl label nodes {node} nvidia.com/mig.config=\"all-1g.10gb\" --overwrite\n
                • mixed \u6a21\u5f0f\u8bf7\u7ed9\u5bf9\u5e94\u8282\u70b9\u6253\u4e0a\u5982\u4e0b Label\uff1a

                  kubectl label nodes {node} nvidia.com/mig.config=\"custom-config\" --overwrite\n

              \u200b \u5207\u5206\u540e\uff0c\u5e94\u7528\u53ef\u4f7f\u7528 MIG GPU \u8d44\u6e90\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/push_image_to_repo.html","title":"\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf","text":"

              \u672c\u6587\u4ee5 Red Hat 8.4 \u7684 nvcr.io/nvidia/driver:525.105.17-rhel8.4 \u79bb\u7ebf\u9a71\u52a8\u955c\u50cf\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20\u79bb\u7ebf\u955c\u50cf\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/push_image_to_repo.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              1. \u706b\u79cd\u8282\u70b9\u53ca\u5176\u7ec4\u4ef6\u72b6\u6001\u8fd0\u884c\u6b63\u5e38\u3002
              2. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u706b\u79cd\u8282\u70b9\u7684\u8282\u70b9\uff0c\u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/push_image_to_repo.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/gpu/nvidia/push_image_to_repo.html#_3","title":"\u5728\u8054\u7f51\u8282\u70b9\u83b7\u53d6\u79bb\u7ebf\u955c\u50cf","text":"

              \u4ee5\u4e0b\u64cd\u4f5c\u5728\u8054\u7f51\u8282\u70b9\u4e0a\u8fdb\u884c\u3002

              1. \u5728\u8054\u7f51\u673a\u5668\u4e0a\u62c9\u53d6 nvcr.io/nvidia/driver:525.105.17-rhel8.4 \u79bb\u7ebf\u9a71\u52a8\u955c\u50cf\uff1a

                docker pull nvcr.io/nvidia/driver:525.105.17-rhel8.4\n
              2. \u955c\u50cf\u62c9\u53d6\u5b8c\u6210\u540e\uff0c\u6253\u5305\u955c\u50cf\u4e3a nvidia-driver.tar \u538b\u7f29\u5305\uff1a

                docker save nvcr.io/nvidia/driver:525.105.17-rhel8.4 > nvidia-driver.tar\n
              3. \u62f7\u8d1d nvidia-driver.tar \u955c\u50cf\u538b\u7f29\u5305\u5230\u706b\u79cd\u8282\u70b9\uff1a

                scp  nvidia-driver.tar user@ip:/root\n

                \u4f8b\u5982\uff1a

                scp  nvidia-driver.tar root@10.6.175.10:/root\n
              "},{"location":"admin/kpanda/gpu/nvidia/push_image_to_repo.html#_4","title":"\u63a8\u9001\u955c\u50cf\u5230\u706b\u79cd\u8282\u70b9\u4ed3\u5e93","text":"

              \u4ee5\u4e0b\u64cd\u4f5c\u5728\u706b\u79cd\u8282\u70b9\u4e0a\u8fdb\u884c\u3002

              1. \u767b\u5f55\u706b\u79cd\u8282\u70b9\uff0c\u5c06\u8054\u7f51\u8282\u70b9\u62f7\u8d1d\u7684\u955c\u50cf\u538b\u7f29\u5305 nvidia-driver.tar \u5bfc\u5165\u672c\u5730\uff1a

                docker load -i nvidia-driver.tar\n
              2. \u67e5\u770b\u521a\u521a\u5bfc\u5165\u7684\u955c\u50cf\uff1a

                docker images -a |grep nvidia\n

                \u9884\u671f\u8f93\u51fa\uff1a

                nvcr.io/nvidia/driver                 e3ed7dee73e9   1 days ago   1.02GB\n
              3. \u91cd\u65b0\u6807\u8bb0\u955c\u50cf\uff0c\u4f7f\u5176\u4e0e\u8fdc\u7a0b Registry \u4ed3\u5e93\u4e2d\u7684\u76ee\u6807\u4ed3\u5e93\u5bf9\u5e94\uff1a

                docker tag <image-name> <registry-url>/<repository-name>:<tag>\n
                • <image-name> \u662f\u4e0a\u4e00\u6b65 nvidia \u955c\u50cf\u7684\u540d\u79f0\uff0c
                • <registry-url> \u662f\u706b\u79cd\u8282\u70b9\u4e0a Registry \u670d\u52a1\u7684\u5730\u5740\uff0c
                • <repository-name> \u662f\u60a8\u8981\u63a8\u9001\u5230\u7684\u4ed3\u5e93\u540d\u79f0\uff0c
                • <tag> \u662f\u60a8\u4e3a\u955c\u50cf\u6307\u5b9a\u7684\u6807\u7b7e\u3002

                \u4f8b\u5982\uff1a

                registry\uff1adocker tag nvcr.io/nvidia/driver 10.6.10.5/nvcr.io/nvidia/driver:525.105.17-rhel8.4\n
              4. \u5c06\u955c\u50cf\u63a8\u9001\u5230\u706b\u79cd\u8282\u70b9\u955c\u50cf\u4ed3\u5e93\uff1a

                docker push {ip}/nvcr.io/nvidia/driver:525.105.17-rhel8.4\n
              "},{"location":"admin/kpanda/gpu/nvidia/push_image_to_repo.html#_5","title":"\u63a5\u4e0b\u6765","text":"

              \u53c2\u8003\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u548c GPU Operator \u79bb\u7ebf\u5b89\u88c5\u6765\u4e3a\u96c6\u7fa4\u90e8\u7f72 GPU Operator\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html","title":"RHEL 9.2 \u79bb\u7ebf\u5b89\u88c5 gpu-operator \u9a71\u52a8","text":"

              \u524d\u63d0\u6761\u4ef6\uff1a\u5df2\u5b89\u88c5 gpu-operator v23.9.0+2 \u53ca\u66f4\u9ad8\u7248\u672c

              RHEL 9.2 \u9a71\u52a8\u955c\u50cf\u4e0d\u80fd\u76f4\u63a5\u5b89\u88c5\uff0c\u5b98\u65b9\u7684\u9a71\u52a8\u811a\u672c\u5b58\u5728\u4e00\u70b9\u95ee\u9898\uff0c\u5728\u5b98\u65b9\u4fee\u590d\u4e4b\u524d\uff0c\u63d0\u4f9b\u5982\u4e0b\u7684\u6b65\u9aa4\u6765\u5b9e\u73b0\u79bb\u7ebf\u5b89\u88c5\u9a71\u52a8\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html#nouveau","title":"\u7981\u7528nouveau\u9a71\u52a8","text":"

              \u5728 RHEL 9.2 \u4e2d\u5b58\u5728 nouveau \u975e\u5b98\u65b9\u7684 Nvidia \u9a71\u52a8\uff0c\u56e0\u6b64\u9700\u8981\u5148\u7981\u7528\u3002

              # \u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6587\u4ef6\nsudo vi /etc/modprobe.d/blacklist-nouveau.conf\n# \u6dfb\u52a0\u4ee5\u4e0b\u4e24\u884c\u5185\u5bb9:\nblacklist nouveau\noptions nouveau modeset=0\n# \u7981\u7528Nouveau\nsudo dracut --force\n# \u91cd\u542fvm\nsudo reboot\n# \u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u6210\u529f\u7981\u7528\nlsmod | grep nouveau\n
              "},{"location":"admin/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html#_1","title":"\u81ea\u5b9a\u4e49\u9a71\u52a8\u955c\u50cf","text":"

              \u5148\u5728\u672c\u5730\u521b\u5efa nvidia-driver \u6587\u4ef6\uff1a

              \u70b9\u51fb\u67e5\u770b\u5b8c\u6574\u7684 nvidia-driver \u6587\u4ef6\u5185\u5bb9
              #! /bin/bash -x\n# Copyright (c) 2018-2020, NVIDIA CORPORATION. All rights reserved.\n\nset -eu\n\nRUN_DIR=/run/nvidia\nPID_FILE=${RUN_DIR}/${0##*/}.pid\nDRIVER_VERSION=${DRIVER_VERSION:?\"Missing DRIVER_VERSION env\"}\nKERNEL_UPDATE_HOOK=/run/kernel/postinst.d/update-nvidia-driver\nNUM_VGPU_DEVICES=0\nNVIDIA_MODULE_PARAMS=()\nNVIDIA_UVM_MODULE_PARAMS=()\nNVIDIA_MODESET_MODULE_PARAMS=()\nNVIDIA_PEERMEM_MODULE_PARAMS=()\nTARGETARCH=${TARGETARCH:?\"Missing TARGETARCH env\"}\nUSE_HOST_MOFED=\"${USE_HOST_MOFED:-false}\"\nDNF_RELEASEVER=${DNF_RELEASEVER:-\"\"}\nRHEL_VERSION=${RHEL_VERSION:-\"\"}\nRHEL_MAJOR_VERSION=9\n\nOPEN_KERNEL_MODULES_ENABLED=${OPEN_KERNEL_MODULES_ENABLED:-false}\n[[ \"${OPEN_KERNEL_MODULES_ENABLED}\" == \"true\" ]] && KERNEL_TYPE=kernel-open || KERNEL_TYPE=kernel\n\nDRIVER_ARCH=${TARGETARCH/amd64/x86_64} && DRIVER_ARCH=${DRIVER_ARCH/arm64/aarch64}\necho \"DRIVER_ARCH is $DRIVER_ARCH\"\n\nSCRIPT_DIR=$( cd -- \"$( dirname -- \"${BASH_SOURCE[0]}\" )\" &> /dev/null && pwd )\nsource $SCRIPT_DIR/common.sh\n\n_update_package_cache() {\n    if [ \"${PACKAGE_TAG:-}\" != \"builtin\" ]; then\n        echo \"Updating the package cache...\"\n        if ! yum -q makecache; then\n            echo \"FATAL: failed to reach RHEL package repositories. \"\\\n                 \"Ensure that the cluster can access the proper networks.\"\n            exit 1\n        fi\n    fi\n}\n\n_cleanup_package_cache() {\n    if [ \"${PACKAGE_TAG:-}\" != \"builtin\" ]; then\n        echo \"Cleaning up the package cache...\"\n        rm -rf /var/cache/yum/*\n    fi\n}\n\n_get_rhel_version_from_kernel() {\n    local rhel_version_underscore rhel_version_arr\n    rhel_version_underscore=$(echo \"${KERNEL_VERSION}\" | sed 's/.*el\\([0-9]\\+_[0-9]\\+\\).*/\\1/g')\n    # For e.g. :- from the kernel version 4.18.0-513.9.1.el8_9, we expect to extract the string \"8_9\"\n    if [[ ! ${rhel_version_underscore} =~ ^[0-9]+_[0-9]+$ ]]; then\n        echo \"Unable to resolve RHEL version from kernel version\" >&2\n        return 1\n    fi\n    IFS='_' read -r -a rhel_version_arr <<< \"$rhel_version_underscore\"\n    if [[ ${#rhel_version_arr[@]} -ne 2 ]]; then\n        echo \"Unable to resolve RHEL version from kernel version\" >&2\n        return 1\n    fi\n    RHEL_VERSION=\"${rhel_version_arr[0]}.${rhel_version_arr[1]}\"\n    echo \"RHEL VERSION successfully resolved from kernel: ${RHEL_VERSION}\"\n    return 0\n}\n\n_resolve_rhel_version() {\n    _get_rhel_version_from_kernel || RHEL_VERSION=\"${RHEL_MAJOR_VERSION}\"\n    # set dnf release version as rhel version by default\n    if [[ -z \"${DNF_RELEASEVER}\" ]]; then\n        DNF_RELEASEVER=\"${RHEL_VERSION}\"\n    fi\n    return 0\n}\n\n# Resolve the kernel version to the form major.minor.patch-revision.\n_resolve_kernel_version() {\n    echo \"Resolving Linux kernel version...\"\n    local version=$(yum -q list available --showduplicates kernel-headers |\n      awk -v arch=$(uname -m) 'NR>1 {print $2\".\"arch}' | tac | grep -E -m1 \"^${KERNEL_VERSION/latest/.*}\")\n\n    if [ -z \"${version}\" ]; then\n        echo \"Could not resolve Linux kernel version\" >&2\n        return 1\n    fi\n    KERNEL_VERSION=\"${version}\"\n    echo \"Proceeding with Linux kernel version ${KERNEL_VERSION}\"\n    return 0\n}\n\n# Install the kernel modules header/builtin/order files and generate the kernel version string.\n_install_prerequisites() (\n    local tmp_dir=$(mktemp -d)\n\n    trap \"rm -rf ${tmp_dir}\" EXIT\n    cd ${tmp_dir}\n\n    echo \"Installing elfutils...\"\n    if ! dnf install -q -y elfutils-libelf.$DRIVER_ARCH; then\n        echo \"FATAL: failed to install elfutils packages. RHEL entitlement may be improperly deployed.\"\n        exit 1\n    fi\n    if ! dnf install -q -y elfutils-libelf-devel.$DRIVER_ARCH; then\n        echo \"FATAL: failed to install elfutils packages. RHEL entitlement may be improperly deployed.\"\n        exit 1\n    fi    \n\n    rm -rf /lib/modules/${KERNEL_VERSION}\n    mkdir -p /lib/modules/${KERNEL_VERSION}/proc\n\n    echo \"Enabling RHOCP and EUS RPM repos...\"\n    if [ -n \"${OPENSHIFT_VERSION:-}\" ]; then\n        dnf config-manager --set-enabled rhocp-${OPENSHIFT_VERSION}-for-rhel-9-$DRIVER_ARCH-rpms || true\n        if ! dnf makecache --releasever=${DNF_RELEASEVER}; then\n            dnf config-manager --set-disabled rhocp-${OPENSHIFT_VERSION}-for-rhel-9-$DRIVER_ARCH-rpms || true\n        fi\n    fi\n\n    dnf config-manager --set-enabled rhel-9-for-$DRIVER_ARCH-baseos-eus-rpms  || true\n    if ! dnf makecache --releasever=${DNF_RELEASEVER}; then\n            dnf config-manager --set-disabled rhel-9-for-$DRIVER_ARCH-baseos-eus-rpms || true\n    fi\n\n    # try with EUS disabled, if it does not work, then try just major version\n    if ! dnf makecache --releasever=${DNF_RELEASEVER}; then\n      # If pointing to DNF_RELEASEVER does not work, we point to the RHEL_MAJOR_VERSION as a last resort\n      if ! dnf makecache --releasever=${RHEL_MAJOR_VERSION}; then\n        echo \"FATAL: failed to update the dnf metadata cache after multiple attempts with releasevers ${DNF_RELEASEVER}, ${RHEL_MAJOR_VERSION}\"\n        exit 1\n      else\n        DNF_RELEASEVER=${RHEL_MAJOR_VERSION}\n      fi\n    fi\n\n    echo \"Installing Linux kernel headers...\"\n    dnf -q -y --releasever=${DNF_RELEASEVER} install kernel-headers-${KERNEL_VERSION} kernel-devel-${KERNEL_VERSION} --allowerasing > /dev/null\n    ln -s /usr/src/kernels/${KERNEL_VERSION} /lib/modules/${KERNEL_VERSION}/build\n\n    echo \"Installing Linux kernel module files...\"\n    dnf -q -y --releasever=${DNF_RELEASEVER} install kernel-core-${KERNEL_VERSION} > /dev/null\n\n    # Prevent depmod from giving a WARNING about missing files\n    touch /lib/modules/${KERNEL_VERSION}/modules.order\n    touch /lib/modules/${KERNEL_VERSION}/modules.builtin\n\n    depmod ${KERNEL_VERSION}\n\n    echo \"Generating Linux kernel version string...\"\n    if [ \"$TARGETARCH\" = \"arm64\" ]; then\n        gunzip -c /lib/modules/${KERNEL_VERSION}/vmlinuz | strings | grep -E '^Linux version' | sed 's/^\\(.*\\)\\s\\+(.*)$/\\1/' > version\n    else\n        extract-vmlinux /lib/modules/${KERNEL_VERSION}/vmlinuz | strings | grep -E '^Linux version' | sed 's/^\\(.*\\)\\s\\+(.*)$/\\1/' > version\n    fi\n    if [ -z \"$(<version)\" ]; then\n        echo \"Could not locate Linux kernel version string\" >&2\n        return 1\n    fi\n    mv version /lib/modules/${KERNEL_VERSION}/proc\n\n    # Parse gcc version\n    # gcc_version is expected to match x.y.z\n    # current_gcc is expected to match 'gcc-x.y.z-rel.el8.x86_64\n    local gcc_version=$(cat /lib/modules/${KERNEL_VERSION}/proc/version | grep -Eo \"gcc \\(GCC\\) ([0-9\\.]+)\" | grep -Eo \"([0-9\\.]+)\")\n    local current_gcc=$(rpm -qa gcc)\n    echo \"kernel requires gcc version: 'gcc-${gcc_version}', current gcc version is '${current_gcc}'\"\n\n    if ! [[ \"${current_gcc}\" =~ \"gcc-${gcc_version}\"-.* ]]; then\n        dnf install -q -y --releasever=${DNF_RELEASEVER} \"gcc-${gcc_version}\"\n    fi\n)\n\n# Cleanup the prerequisites installed above.\n_remove_prerequisites() {\n    true\n    if [ \"${PACKAGE_TAG:-}\" != \"builtin\" ]; then\n        dnf -q -y remove kernel-headers-${KERNEL_VERSION} kernel-devel-${KERNEL_VERSION} > /dev/null\n        # TODO remove module files not matching an existing driver package.\n    fi\n}\n\n# Check if the kernel version requires a new precompiled driver packages.\n_kernel_requires_package() {\n    local proc_mount_arg=\"\"\n\n    echo \"Checking NVIDIA driver packages...\"\n\n    [[ ! -d /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE} ]] && return 0\n    cd /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE}\n\n    proc_mount_arg=\"--proc-mount-point /lib/modules/${KERNEL_VERSION}/proc\"\n    for pkg_name in $(ls -d -1 precompiled/** 2> /dev/null); do\n        is_match=$(../mkprecompiled --match ${pkg_name} ${proc_mount_arg})\n        if [ \"${is_match}\" == \"kernel interface matches.\" ]; then\n            echo \"Found NVIDIA driver package ${pkg_name##*/}\"\n            return 1\n        fi\n    done\n    return 0\n}\n\n# Compile the kernel modules, optionally sign them, and generate a precompiled package for use by the nvidia-installer.\n_create_driver_package() (\n    local pkg_name=\"nvidia-modules-${KERNEL_VERSION%%-*}${PACKAGE_TAG:+-${PACKAGE_TAG}}\"\n    local nvidia_sign_args=\"\"\n    local nvidia_modeset_sign_args=\"\"\n    local nvidia_uvm_sign_args=\"\"\n\n    trap \"make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build clean > /dev/null\" EXIT\n\n    echo \"Compiling NVIDIA driver kernel modules...\"\n    cd /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE}\n\n    if _gpu_direct_rdma_enabled; then\n        ln -s /run/mellanox/drivers/usr/src/ofa_kernel /usr/src/\n        # if arch directory exists(MOFED >=5.5) then create a symlink as expected by GPU driver installer\n        # This is required as currently GPU driver installer doesn't expect headers in x86_64 folder, but only in either default or kernel-version folder.\n        # ls -ltr /usr/src/ofa_kernel/\n        # lrwxrwxrwx 1 root root   36 Dec  8 20:10 default -> /etc/alternatives/ofa_kernel_headers\n        # drwxr-xr-x 4 root root 4096 Dec  8 20:14 x86_64\n        # lrwxrwxrwx 1 root root   44 Dec  9 19:05 5.4.0-90-generic -> /usr/src/ofa_kernel/x86_64/5.4.0-90-generic/\n        if [[ -d \"/run/mellanox/drivers/usr/src/ofa_kernel/$(uname -m)/$(uname -r)\" ]]; then\n            if [[ ! -e \"/usr/src/ofa_kernel/$(uname -r)\" ]]; then\n                ln -s \"/run/mellanox/drivers/usr/src/ofa_kernel/$(uname -m)/$(uname -r)\" /usr/src/ofa_kernel/\n            fi\n        fi\n    fi\n\n    make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build nv-linux.o nv-modeset-linux.o > /dev/null\n\n    echo \"Relinking NVIDIA driver kernel modules...\"\n    rm -f nvidia.ko nvidia-modeset.ko\n    ld -d -r -o nvidia.ko ./nv-linux.o ./nvidia/nv-kernel.o_binary\n    ld -d -r -o nvidia-modeset.ko ./nv-modeset-linux.o ./nvidia-modeset/nv-modeset-kernel.o_binary\n\n    if [ -n \"${PRIVATE_KEY}\" ]; then\n        echo \"Signing NVIDIA driver kernel modules...\"\n        donkey get ${PRIVATE_KEY} sh -c \"PATH=${PATH}:/usr/src/linux-headers-${KERNEL_VERSION}/scripts && \\\n          sign-file sha512 \\$DONKEY_FILE pubkey.x509 nvidia.ko nvidia.ko.sign &&                          \\\n          sign-file sha512 \\$DONKEY_FILE pubkey.x509 nvidia-modeset.ko nvidia-modeset.ko.sign &&          \\\n          sign-file sha512 \\$DONKEY_FILE pubkey.x509 nvidia-uvm.ko\"\n        nvidia_sign_args=\"--linked-module nvidia.ko --signed-module nvidia.ko.sign\"\n        nvidia_modeset_sign_args=\"--linked-module nvidia-modeset.ko --signed-module nvidia-modeset.ko.sign\"\n        nvidia_uvm_sign_args=\"--signed\"\n    fi\n\n    echo \"Building NVIDIA driver package ${pkg_name}...\"\n    ../mkprecompiled --pack ${pkg_name} --description ${KERNEL_VERSION}                              \\\n                                        --proc-mount-point /lib/modules/${KERNEL_VERSION}/proc       \\\n                                        --driver-version ${DRIVER_VERSION}                           \\\n                                        --kernel-interface nv-linux.o                                \\\n                                        --linked-module-name nvidia.ko                               \\\n                                        --core-object-name nvidia/nv-kernel.o_binary                 \\\n                                        ${nvidia_sign_args}                                          \\\n                                        --target-directory .                                         \\\n                                        --kernel-interface nv-modeset-linux.o                        \\\n                                        --linked-module-name nvidia-modeset.ko                       \\\n                                        --core-object-name nvidia-modeset/nv-modeset-kernel.o_binary \\\n                                        ${nvidia_modeset_sign_args}                                  \\\n                                        --target-directory .                                         \\\n                                        --kernel-module nvidia-uvm.ko                                \\\n                                        ${nvidia_uvm_sign_args}                                      \\\n                                        --target-directory .\n    mkdir -p precompiled\n    mv ${pkg_name} precompiled\n)\n\n_assert_nvswitch_system() {\n    [ -d /proc/driver/nvidia-nvswitch ] || return 1\n    entries=$(ls -1 /proc/driver/nvidia-nvswitch/devices/*)\n    if [ -z \"${entries}\" ]; then\n        return 1\n    fi\n    return 0\n}\n\n# For each kernel module configuration file mounted into the container,\n# parse the file contents and extract the custom module parameters that\n# are to be passed as input to 'modprobe'.\n#\n# Assumptions:\n# - Configuration files are named <module-name>.conf (i.e. nvidia.conf, nvidia-uvm.conf).\n# - Configuration files are mounted inside the container at /drivers.\n# - Each line in the file contains at least one parameter, where parameters on the same line\n#   are space delimited. It is up to the user to properly format the file to ensure\n#   the correct set of parameters are passed to 'modprobe'.\n_get_module_params() {\n    local base_path=\"/drivers\"\n    # nvidia\n    if [ -f \"${base_path}/nvidia.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia.conf\"\n       echo \"Module parameters provided for nvidia: ${NVIDIA_MODULE_PARAMS[@]}\"\n    fi\n    # nvidia-uvm\n    if [ -f \"${base_path}/nvidia-uvm.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_UVM_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia-uvm.conf\"\n       echo \"Module parameters provided for nvidia-uvm: ${NVIDIA_UVM_MODULE_PARAMS[@]}\"\n    fi\n    # nvidia-modeset\n    if [ -f \"${base_path}/nvidia-modeset.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_MODESET_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia-modeset.conf\"\n       echo \"Module parameters provided for nvidia-modeset: ${NVIDIA_MODESET_MODULE_PARAMS[@]}\"\n    fi\n    # nvidia-peermem\n    if [ -f \"${base_path}/nvidia-peermem.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_PEERMEM_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia-peermem.conf\"\n       echo \"Module parameters provided for nvidia-peermem: ${NVIDIA_PEERMEM_MODULE_PARAMS[@]}\"\n    fi\n}\n\n# Load the kernel modules and start persistenced.\n_load_driver() {\n    echo \"Parsing kernel module parameters...\"\n    _get_module_params\n\n    local nv_fw_search_path=\"$RUN_DIR/driver/lib/firmware\"\n    local set_fw_path=\"true\"\n    local fw_path_config_file=\"/sys/module/firmware_class/parameters/path\"\n    for param in \"${NVIDIA_MODULE_PARAMS[@]}\"; do\n        if [[ \"$param\" == \"NVreg_EnableGpuFirmware=0\" ]]; then\n          set_fw_path=\"false\"\n        fi\n    done\n\n    if [[ \"$set_fw_path\" == \"true\" ]]; then\n        echo \"Configuring the following firmware search path in '$fw_path_config_file': $nv_fw_search_path\"\n        if [[ ! -z $(grep '[^[:space:]]' $fw_path_config_file) ]]; then\n            echo \"WARNING: A search path is already configured in $fw_path_config_file\"\n            echo \"         Retaining the current configuration\"\n        else\n            echo -n \"$nv_fw_search_path\" > $fw_path_config_file || echo \"WARNING: Failed to configure the firmware search path\"\n        fi\n    fi\n\n    echo \"Loading ipmi and i2c_core kernel modules...\"\n    modprobe -a i2c_core ipmi_msghandler ipmi_devintf\n\n    echo \"Loading NVIDIA driver kernel modules...\"\n    set -o xtrace +o nounset\n    modprobe nvidia \"${NVIDIA_MODULE_PARAMS[@]}\"\n    modprobe nvidia-uvm \"${NVIDIA_UVM_MODULE_PARAMS[@]}\"\n    modprobe nvidia-modeset \"${NVIDIA_MODESET_MODULE_PARAMS[@]}\"\n    set +o xtrace -o nounset\n\n    if _gpu_direct_rdma_enabled; then\n        echo \"Loading NVIDIA Peer Memory kernel module...\"\n        set -o xtrace +o nounset\n        modprobe -a nvidia-peermem \"${NVIDIA_PEERMEM_MODULE_PARAMS[@]}\"\n        set +o xtrace -o nounset\n    fi\n\n    echo \"Starting NVIDIA persistence daemon...\"\n    nvidia-persistenced --persistence-mode\n\n    if [ \"${DRIVER_TYPE}\" = \"vgpu\" ]; then\n        echo \"Copying gridd.conf...\"\n        cp /drivers/gridd.conf /etc/nvidia/gridd.conf\n        if [ \"${VGPU_LICENSE_SERVER_TYPE}\" = \"NLS\" ]; then\n            echo \"Copying ClientConfigToken...\"\n            mkdir -p  /etc/nvidia/ClientConfigToken/\n            cp /drivers/ClientConfigToken/* /etc/nvidia/ClientConfigToken/\n        fi\n\n        echo \"Starting nvidia-gridd..\"\n        LD_LIBRARY_PATH=/usr/lib64/nvidia/gridd nvidia-gridd\n\n        # Start virtual topology daemon\n        _start_vgpu_topology_daemon\n    fi\n\n    if _assert_nvswitch_system; then\n        echo \"Starting NVIDIA fabric manager daemon...\"\n        nv-fabricmanager -c /usr/share/nvidia/nvswitch/fabricmanager.cfg\n    fi\n}\n\n# Stop persistenced and unload the kernel modules if they are currently loaded.\n_unload_driver() {\n    local rmmod_args=()\n    local nvidia_deps=0\n    local nvidia_refs=0\n    local nvidia_uvm_refs=0\n    local nvidia_modeset_refs=0\n    local nvidia_peermem_refs=0\n\n    echo \"Stopping NVIDIA persistence daemon...\"\n    if [ -f /var/run/nvidia-persistenced/nvidia-persistenced.pid ]; then\n        local pid=$(< /var/run/nvidia-persistenced/nvidia-persistenced.pid)\n\n        kill -SIGTERM \"${pid}\"\n        for i in $(seq 1 50); do\n            kill -0 \"${pid}\" 2> /dev/null || break\n            sleep 0.1\n        done\n        if [ $i -eq 50 ]; then\n            echo \"Could not stop NVIDIA persistence daemon\" >&2\n            return 1\n        fi\n    fi\n\n    if [ -f /var/run/nvidia-gridd/nvidia-gridd.pid ]; then\n        echo \"Stopping NVIDIA grid daemon...\"\n        local pid=$(< /var/run/nvidia-gridd/nvidia-gridd.pid)\n\n        kill -SIGTERM \"${pid}\"\n        for i in $(seq 1 10); do\n            kill -0 \"${pid}\" 2> /dev/null || break\n            sleep 0.1\n        done\n        if [ $i -eq 10 ]; then\n            echo \"Could not stop NVIDIA Grid daemon\" >&2\n            return 1\n        fi\n    fi\n\n    if [ -f /var/run/nvidia-fabricmanager/nv-fabricmanager.pid ]; then\n        echo \"Stopping NVIDIA fabric manager daemon...\"\n        local pid=$(< /var/run/nvidia-fabricmanager/nv-fabricmanager.pid)\n\n        kill -SIGTERM \"${pid}\"\n        for i in $(seq 1 50); do\n            kill -0 \"${pid}\" 2> /dev/null || break\n            sleep 0.1\n        done\n        if [ $i -eq 50 ]; then\n            echo \"Could not stop NVIDIA fabric manager daemon\" >&2\n            return 1\n        fi\n    fi\n\n    echo \"Unloading NVIDIA driver kernel modules...\"\n    if [ -f /sys/module/nvidia_modeset/refcnt ]; then\n        nvidia_modeset_refs=$(< /sys/module/nvidia_modeset/refcnt)\n        rmmod_args+=(\"nvidia-modeset\")\n        ((++nvidia_deps))\n    fi\n    if [ -f /sys/module/nvidia_uvm/refcnt ]; then\n        nvidia_uvm_refs=$(< /sys/module/nvidia_uvm/refcnt)\n        rmmod_args+=(\"nvidia-uvm\")\n        ((++nvidia_deps))\n    fi\n    if [ -f /sys/module/nvidia/refcnt ]; then\n        nvidia_refs=$(< /sys/module/nvidia/refcnt)\n        rmmod_args+=(\"nvidia\")\n    fi\n    if [ -f /sys/module/nvidia_peermem/refcnt ]; then\n        nvidia_peermem_refs=$(< /sys/module/nvidia_peermem/refcnt)\n        rmmod_args+=(\"nvidia-peermem\")\n        ((++nvidia_deps))\n    fi\n    if [ ${nvidia_refs} -gt ${nvidia_deps} ] || [ ${nvidia_uvm_refs} -gt 0 ] || [ ${nvidia_modeset_refs} -gt 0 ] || [ ${nvidia_peermem_refs} -gt 0 ]; then\n        echo \"Could not unload NVIDIA driver kernel modules, driver is in use\" >&2\n        return 1\n    fi\n\n    if [ ${#rmmod_args[@]} -gt 0 ]; then\n        rmmod ${rmmod_args[@]}\n    fi\n    return 0\n}\n\n# Link and install the kernel modules from a precompiled package using the nvidia-installer.\n_install_driver() {\n    local install_args=()\n\n    echo \"Installing NVIDIA driver kernel modules...\"\n    cd /usr/src/nvidia-${DRIVER_VERSION}\n    rm -rf /lib/modules/${KERNEL_VERSION}/video\n\n    if [ \"${ACCEPT_LICENSE}\" = \"yes\" ]; then\n        install_args+=(\"--accept-license\")\n    fi\n    IGNORE_CC_MISMATCH=1 nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check -m=${KERNEL_TYPE} ${install_args[@]+\"${install_args[@]}\"}\n    # May need to add no-cc-check for Rhel, otherwise it complains about cc missing in path\n    # /proc/version and lib/modules/KERNEL_VERSION/proc are different, by default installer looks at /proc/ so, added the proc-mount-point\n    # TODO: remove the -a flag. its not needed. in the new driver version, license-acceptance is implicit\n    #nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check --no-cc-version-check --proc-mount-point /lib/modules/${KERNEL_VERSION}/proc ${install_args[@]+\"${install_args[@]}\"}\n}\n\n# Mount the driver rootfs into the run directory with the exception of sysfs.\n_mount_rootfs() {\n    echo \"Mounting NVIDIA driver rootfs...\"\n    mount --make-runbindable /sys\n    mount --make-private /sys\n    mkdir -p ${RUN_DIR}/driver\n    mount --rbind / ${RUN_DIR}/driver\n\n    echo \"Check SELinux status\"\n    if [ -e /sys/fs/selinux ]; then\n        echo \"SELinux is enabled\"\n        echo \"Change device files security context for selinux compatibility\"\n        chcon -R -t container_file_t ${RUN_DIR}/driver/dev\n    else\n        echo \"SELinux is disabled, skipping...\"\n    fi\n}\n\n# Unmount the driver rootfs from the run directory.\n_unmount_rootfs() {\n    echo \"Unmounting NVIDIA driver rootfs...\"\n    if findmnt -r -o TARGET | grep \"${RUN_DIR}/driver\" > /dev/null; then\n        umount -l -R ${RUN_DIR}/driver\n    fi\n}\n\n# Write a kernel postinst.d script to automatically precompile packages on kernel update (similar to DKMS).\n_write_kernel_update_hook() {\n    if [ ! -d ${KERNEL_UPDATE_HOOK%/*} ]; then\n        return\n    fi\n\n    echo \"Writing kernel update hook...\"\n    cat > ${KERNEL_UPDATE_HOOK} <<'EOF'\n#!/bin/bash\n\nset -eu\ntrap 'echo \"ERROR: Failed to update the NVIDIA driver\" >&2; exit 0' ERR\n\nNVIDIA_DRIVER_PID=$(< /run/nvidia/nvidia-driver.pid)\n\nexport \"$(grep -z DRIVER_VERSION /proc/${NVIDIA_DRIVER_PID}/environ)\"\nnsenter -t \"${NVIDIA_DRIVER_PID}\" -m -- nvidia-driver update --kernel \"$1\"\nEOF\n    chmod +x ${KERNEL_UPDATE_HOOK}\n}\n\n_shutdown() {\n    if _unload_driver; then\n        _unmount_rootfs\n        rm -f ${PID_FILE} ${KERNEL_UPDATE_HOOK}\n        return 0\n    fi\n    return 1\n}\n\n_find_vgpu_driver_version() {\n    local count=\"\"\n    local version=\"\"\n    local drivers_path=\"/drivers\"\n\n    if [ \"${DISABLE_VGPU_VERSION_CHECK}\" = \"true\" ]; then\n        echo \"vgpu version compatibility check is disabled\"\n        return 0\n    fi\n    # check if vgpu devices are present\n    count=$(vgpu-util count)\n    if [ $? -ne 0 ]; then\n         echo \"cannot find vgpu devices on host, pleae check /var/log/vgpu-util.log for more details...\"\n         return 0\n    fi\n    NUM_VGPU_DEVICES=$(echo \"$count\" | awk -F= '{print $2}')\n    if [ $NUM_VGPU_DEVICES -eq 0 ]; then\n        # no vgpu devices found, treat as passthrough\n        return 0\n    fi\n    echo \"found $NUM_VGPU_DEVICES vgpu devices on host\"\n\n    # find compatible guest driver using driver catalog\n    if [ -d \"/mnt/shared-nvidia-driver-toolkit/drivers\" ]; then\n        drivers_path=\"/mnt/shared-nvidia-driver-toolkit/drivers\"\n    fi\n    version=$(vgpu-util match -i \"${drivers_path}\" -c \"${drivers_path}/vgpuDriverCatalog.yaml\")\n    if [ $? -ne 0 ]; then\n        echo \"cannot find match for compatible vgpu driver from available list, please check /var/log/vgpu-util.log for more details...\"\n        return 1\n    fi\n    DRIVER_VERSION=$(echo \"$version\" | awk -F= '{print $2}')\n    echo \"vgpu driver version selected: ${DRIVER_VERSION}\"\n    return 0\n}\n\n_start_vgpu_topology_daemon() {\n    type nvidia-topologyd > /dev/null 2>&1 || return 0\n    echo \"Starting nvidia-topologyd..\"\n    nvidia-topologyd\n}\n\n_prepare() {\n    if [ \"${DRIVER_TYPE}\" = \"vgpu\" ]; then\n        _find_vgpu_driver_version || exit 1\n    fi\n\n    # Install the userspace components and copy the kernel module sources.\n    sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \\\n        cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \\\n        sh /tmp/install.sh nvinstall && \\\n        mkdir -p /usr/src/nvidia-$DRIVER_VERSION && \\\n        mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-$DRIVER_VERSION && \\\n        sed '9,${/^\\(kernel\\|LICENSE\\)/!d}' .manifest > /usr/src/nvidia-$DRIVER_VERSION/.manifest\n\n    echo -e \"\\n========== NVIDIA Software Installer ==========\\n\"\n    echo -e \"Starting installation of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\\n\"\n}\n\n_prepare_exclusive() {\n    _prepare\n\n    exec 3> ${PID_FILE}\n    if ! flock -n 3; then\n        echo \"An instance of the NVIDIA driver is already running, aborting\"\n        exit 1\n    fi\n    echo $$ >&3\n\n    trap \"echo 'Caught signal'; exit 1\" HUP INT QUIT PIPE TERM\n    trap \"_shutdown\" EXIT\n\n    _unload_driver || exit 1\n    _unmount_rootfs\n}\n\n_build() {\n    # Install dependencies\n    if _kernel_requires_package; then\n        _update_package_cache\n        _install_prerequisites\n        _create_driver_package\n        #_remove_prerequisites\n        _cleanup_package_cache\n    fi\n\n    # Build the driver\n    _install_driver\n}\n\n_load() {\n    _load_driver\n    _mount_rootfs\n    _write_kernel_update_hook\n\n    echo \"Done, now waiting for signal\"\n    sleep infinity &\n    trap \"echo 'Caught signal'; _shutdown && { kill $!; exit 0; }\" HUP INT QUIT PIPE TERM\n    trap - EXIT\n    while true; do wait $! || continue; done\n    exit 0\n}\n\ninit() {\n    _prepare_exclusive\n\n    _build\n\n    _load\n}\n\nbuild() {\n    _prepare\n\n    _build\n}\n\nload() {\n    _prepare_exclusive\n\n    _load\n}\n\nupdate() {\n    exec 3>&2\n    if exec 2> /dev/null 4< ${PID_FILE}; then\n        if ! flock -n 4 && read pid <&4 && kill -0 \"${pid}\"; then\n            exec > >(tee -a \"/proc/${pid}/fd/1\")\n            exec 2> >(tee -a \"/proc/${pid}/fd/2\" >&3)\n        else\n            exec 2>&3\n        fi\n        exec 4>&-\n    fi\n    exec 3>&-\n\n    # vgpu driver version is chosen dynamically during runtime, so pre-compile modules for\n    # only non-vgpu driver types\n    if [ \"${DRIVER_TYPE}\" != \"vgpu\" ]; then\n        # Install the userspace components and copy the kernel module sources.\n        if [ ! -e /usr/src/nvidia-${DRIVER_VERSION}/mkprecompiled ]; then\n            sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \\\n                cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \\\n                sh /tmp/install.sh nvinstall && \\\n                mkdir -p /usr/src/nvidia-$DRIVER_VERSION && \\\n                mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-$DRIVER_VERSION && \\\n                sed '9,${/^\\(kernel\\|LICENSE\\)/!d}' .manifest > /usr/src/nvidia-$DRIVER_VERSION/.manifest\n        fi\n    fi\n\n    echo -e \"\\n========== NVIDIA Software Updater ==========\\n\"\n    echo -e \"Starting update of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\\n\"\n\n    trap \"echo 'Caught signal'; exit 1\" HUP INT QUIT PIPE TERM\n\n    _update_package_cache\n    _resolve_kernel_version || exit 1\n    _install_prerequisites\n    if _kernel_requires_package; then\n        _create_driver_package\n    fi\n    _remove_prerequisites\n    _cleanup_package_cache\n\n    echo \"Done\"\n    exit 0\n}\n\n# Wait for MOFED drivers to be loaded and load nvidia-peermem whenever it gets unloaded during MOFED driver updates\nreload_nvidia_peermem() {\n    if [ \"$USE_HOST_MOFED\" = \"true\" ]; then\n        until  lsmod | grep mlx5_core > /dev/null 2>&1 && [ -f /run/nvidia/validations/.driver-ctr-ready ];\n        do\n            echo \"waiting for mellanox ofed and nvidia drivers to be installed\"\n            sleep 10\n        done\n    else\n        # use driver readiness flag created by MOFED container\n        until  [ -f /run/mellanox/drivers/.driver-ready ] && [ -f /run/nvidia/validations/.driver-ctr-ready ];\n        do\n            echo \"waiting for mellanox ofed and nvidia drivers to be installed\"\n            sleep 10\n        done\n    fi\n    # get any parameters provided for nvidia-peermem\n    _get_module_params && set +o nounset\n    if chroot /run/nvidia/driver modprobe nvidia-peermem \"${NVIDIA_PEERMEM_MODULE_PARAMS[@]}\"; then\n        if [ -f /sys/module/nvidia_peermem/refcnt ]; then\n            echo \"successfully loaded nvidia-peermem module, now waiting for signal\"\n            sleep inf\n            trap \"echo 'Caught signal'; exit 1\" HUP INT QUIT PIPE TERM\n        fi\n    fi\n    echo \"failed to load nvidia-peermem module\"\n    exit 1\n}\n\n# probe by gpu-operator for liveness/startup checks for nvidia-peermem module to be loaded when MOFED drivers are ready\nprobe_nvidia_peermem() {\n    if lsmod | grep mlx5_core > /dev/null 2>&1; then\n        if [ ! -f /sys/module/nvidia_peermem/refcnt ]; then\n            echo \"nvidia-peermem module is not loaded\"\n            return 1\n        fi\n    else\n        echo \"MOFED drivers are not ready, skipping probe to avoid container restarts...\"\n    fi\n    return 0\n}\n\nusage() {\n    cat >&2 <<EOF\nUsage: $0 COMMAND [ARG...]\n\nCommands:\n  init   [-a | --accept-license] [-m | --max-threads MAX_THREADS]\n  build  [-a | --accept-license] [-m | --max-threads MAX_THREADS]\n  load\n  update [-k | --kernel VERSION] [-s | --sign KEYID] [-t | --tag TAG] [-m | --max-threads MAX_THREADS]\nEOF\n    exit 1\n}\n\nif [ $# -eq 0 ]; then\n    usage\nfi\ncommand=$1; shift\ncase \"${command}\" in\n    init) options=$(getopt -l accept-license,max-threads: -o am: -- \"$@\") ;;\n    build) options=$(getopt -l accept-license,tag:,max-threads: -o a:t:m: -- \"$@\") ;;\n    load) options=\"\" ;;\n    update) options=$(getopt -l kernel:,sign:,tag:,max-threads: -o k:s:t:m: -- \"$@\") ;;\n    reload_nvidia_peermem) options=\"\" ;;\n    probe_nvidia_peermem) options=\"\" ;;\n    *) usage ;;\nesac\nif [ $? -ne 0 ]; then\n    usage\nfi\neval set -- \"${options}\"\n\nACCEPT_LICENSE=\"\"\nMAX_THREADS=\"\"\nKERNEL_VERSION=$(uname -r)\nPRIVATE_KEY=\"\"\nPACKAGE_TAG=\"\"\n\nfor opt in ${options}; do\n    case \"$opt\" in\n    -a | --accept-license) ACCEPT_LICENSE=\"yes\"; shift 1 ;;\n    -k | --kernel) KERNEL_VERSION=$2; shift 2 ;;\n    -m | --max-threads) MAX_THREADS=$2; shift 2 ;;\n    -s | --sign) PRIVATE_KEY=$2; shift 2 ;;\n    -t | --tag) PACKAGE_TAG=$2; shift 2 ;;\n    --) shift; break ;;\n    esac\ndone\nif [ $# -ne 0 ]; then\n    usage\nfi\n\n_resolve_rhel_version || exit 1\n\n$command\n

              \u4f7f\u7528\u5b98\u65b9\u7684\u955c\u50cf\u6765\u4e8c\u6b21\u6784\u5efa\u81ea\u5b9a\u4e49\u955c\u50cf\uff0c\u5982\u4e0b\u662f\u4e00\u4e2a Dockerfile \u6587\u4ef6\u7684\u5185\u5bb9\uff1a

              FROM nvcr.io/nvidia/driver:535.183.06-rhel9.2\nCOPY nvidia-driver /usr/local/bin\nRUN chmod +x /usr/local/bin/nvidia-driver\nCMD [\"/bin/bash\", \"-c\"]\n

              \u6784\u5efa\u547d\u4ee4\u5e76\u63a8\u9001\u5230\u706b\u79cd\u96c6\u7fa4\uff1a

              docker build -t {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535.183.06-01-rhel9.2 -f Dockerfile .\ndocker push {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535.183.06-01-rhel9.2\n
              "},{"location":"admin/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html#_2","title":"\u5b89\u88c5\u9a71\u52a8","text":"
              1. \u5b89\u88c5 gpu-operator addon
              2. \u8bbe\u7f6e driver.version=535.183.06-01
              "},{"location":"admin/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html","title":"Ubuntu22.04 \u79bb\u7ebf\u5b89\u88c5 gpu-operator \u9a71\u52a8","text":"

              \u524d\u63d0\u6761\u4ef6\uff1a\u5df2\u5b89\u88c5 gpu-operator v23.9.0+2 \u53ca\u66f4\u9ad8\u7248\u672c

              "},{"location":"admin/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html#_1","title":"\u51c6\u5907\u79bb\u7ebf\u955c\u50cf","text":"
              1. \u67e5\u770b\u5185\u6838\u7248\u672c

                $ uname -r\n5.15.0-78-generic\n
              2. \u67e5\u770b\u5185\u6838\u5bf9\u5e94\u7684 GPU Driver \u955c\u50cf\u7248\u672c\uff0c https://catalog.ngc.nvidia.com/orgs/nvidia/containers/driver/tags\u3002 \u4f7f\u7528\u5185\u6838\u67e5\u8be2\u955c\u50cf\u7248\u672c\uff0c\u901a\u8fc7 ctr export \u4fdd\u5b58\u955c\u50cf\u3002

                ctr i pull nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04\nctr i export --all-platforms driver.tar.gz nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 \n
              3. \u628a\u955c\u50cf\u5bfc\u5165\u5230\u706b\u79cd\u96c6\u7fa4\u7684\u955c\u50cf\u4ed3\u5e93\u4e2d

                ctr i import driver.tar.gz\nctr i tag nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04\nctr i push {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 --skip-verify=true\n
              "},{"location":"admin/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html#_2","title":"\u5b89\u88c5\u9a71\u52a8","text":"
              1. \u5b89\u88c5 gpu-operator addon
              2. \u82e5\u4f7f\u7528\u9884\u7f16\u8bd1\u6a21\u5f0f\uff0c\u5219\u8bbe\u7f6e driver.usePrecompiled=true,\u5e76\u8bbe\u7f6e driver.version=535\uff0c\u8fd9\u91cc\u8981\u6ce8\u610f\uff0c\u5199\u7684\u662f 535\uff0c\u4e0d\u662f 535.104.12\u3002\uff08\u975e\u9884\u7f16\u8bd1\u6a21\u5f0f\u8df3\u8fc7\u6b64\u6b65\uff0c\u76f4\u63a5\u5b89\u88c5\u5373\u53ef\uff09
              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html","title":"\u6784\u5efa CentOS 7.9 \u79bb\u7ebf yum \u6e90","text":""},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#_1","title":"\u4f7f\u7528\u573a\u666f\u4ecb\u7ecd","text":"

              \u5f53\u5de5\u4f5c\u8282\u70b9\u7684\u5185\u6838\u7248\u672c\u4e0e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u5185\u6838\u7248\u672c\u6216 OS \u7c7b\u578b\u4e0d\u4e00\u81f4\u65f6\uff0c\u9700\u8981\u7528\u6237\u624b\u52a8\u6784\u5efa\u79bb\u7ebf yum \u6e90\u3002

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u6784\u5efa\u79bb\u7ebf yum \u6e90\uff0c \u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\uff0c\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              1. \u7528\u6237\u5df2\u7ecf\u5728\u5e73\u53f0\u4e0a\u5b89\u88c5\u4e86 v0.12.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u7684 addon \u79bb\u7ebf\u5305\u3002
              2. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u548c\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u7f51\u7edc\u80fd\u591f\u8054\u901a\u7684\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u5982 nginx \u6216 minio\u3002
              3. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u3001\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\uff0c \u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u672c\u6587\u4ee5\u5185\u6838\u7248\u672c\u4e3a 3.10.0-1160.95.1.el7.x86_64 \u7684 CentOS 7.9 \u8282\u70b9\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u6784\u5efa GPU operator \u79bb\u7ebf\u5305\u7684 yum \u6e90\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#os","title":"\u68c0\u67e5\u96c6\u7fa4\u8282\u70b9\u7684 OS \u548c\u5185\u6838\u7248\u672c","text":"

              \u5206\u522b\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u548c\u5f85\u90e8\u7f72 GPU Operator \u7684\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u82e5\u4e24\u4e2a\u8282\u70b9\u7684 OS \u548c\u5185\u6838\u7248\u672c\u4e00\u81f4\u5219\u65e0\u9700\u6784\u5efa yum \u6e90\uff0c \u53ef\u53c2\u8003\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u6587\u6863\u76f4\u63a5\u5b89\u88c5\uff1b\u82e5\u4e24\u4e2a\u8282\u70b9\u7684 OS \u6216\u5185\u6838\u7248\u672c\u4e0d\u4e00\u81f4\uff0c\u8bf7\u6267\u884c\u4e0b\u4e00\u6b65\u3002

              1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u67e5\u770b\u96c6\u7fa4\u4e0b\u5f85\u90e8\u7f72 GPU Operator \u8282\u70b9\u7684\u53d1\u884c\u7248\u540d\u79f0\u548c\u7248\u672c\u53f7\u3002

                cat /etc/redhat-release\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                CentOS Linux release 7.9 (Core)\n

                \u8f93\u51fa\u7ed3\u679c\u4e3a\u5f53\u524d\u8282\u70b9\u5185\u6838\u7248\u672c CentOS 7.9 \u3002

              2. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u67e5\u770b\u96c6\u7fa4\u4e0b\u5f85\u90e8\u7f72 GPU Operator \u8282\u70b9\u7684\u5185\u6838\u7248\u672c\u3002

                uname -a\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                Linux localhost.localdomain 3.10.0-1160.95.1.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux\n

                \u8f93\u51fa\u7ed3\u679c\u4e3a\u5f53\u524d\u8282\u70b9\u5185\u6838\u7248\u672c 3.10.0-1160.el7.x86_64\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#yum","title":"\u5236\u4f5c\u79bb\u7ebf yum \u6e90","text":"

              \u5728\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002

              1. \u5728\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\u4e0a\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a yum.sh \u7684\u811a\u672c\u6587\u4ef6\u3002

                vi yum.sh\n

                \u7136\u540e\u6309\u4e0b i \u952e\u8fdb\u5165\u63d2\u5165\u6a21\u5f0f\uff0c\u8f93\u5165\u4ee5\u4e0b\u5185\u5bb9\uff1a

                export TARGET_KERNEL_VERSION=$1\n\ncat >> run.sh << \\EOF\n#! /bin/bash\necho \"start install kernel repo\"\necho ${KERNEL_VERSION}\nmkdir centos-base\n\nif [ \"$OS\" -eq 7 ]; then\n    yum install --downloadonly --downloaddir=./centos-base perl\n    yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64\n    yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el7.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el7.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el7.x86_64\n    yum install  -y --downloadonly --downloaddir=./centos-base groff-base\nelif [ \"$OS\" -eq 8 ]; then\n    yum install --downloadonly --downloaddir=./centos-base perl\n    yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64\n    yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el8.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el8.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el8.x86_64\n    yum install  -y --downloadonly --downloaddir=./centos-base groff-base\nelse\n    echo \"Error os version\"\nfi\n\ncreaterepo centos-base/\nls -lh centos-base/\ntar -zcf centos-base.tar.gz centos-base/\necho \"end install kernel repo\"\nEOF\n\ncat >> Dockerfile << EOF\nFROM centos:7\nENV KERNEL_VERSION=\"\"\nENV OS=7\nRUN yum install -y createrepo\nCOPY run.sh .\nENTRYPOINT [\"/bin/bash\",\"run.sh\"]\nEOF\n\ndocker build -t test:v1 -f Dockerfile .\ndocker run -e KERNEL_VERSION=$TARGET_KERNEL_VERSION --name centos7.9 test:v1\ndocker cp centos7.9:/centos-base.tar.gz .\ntar -xzf centos-base.tar.gz\n

                \u6309\u4e0b esc \u952e\u9000\u51fa\u63d2\u5165\u6a21\u5f0f\uff0c\u7136\u540e\u8f93\u5165 __ :wq__ \u4fdd\u5b58\u5e76\u9000\u51fa\u3002

              2. \u8fd0\u884c yum.sh \u6587\u4ef6\uff1a

                bash -x yum.sh TARGET_KERNEL_VERSION\n

                TARGET_KERNEL_VERSION \u53c2\u6570\u7528\u4e8e\u6307\u5b9a\u96c6\u7fa4\u8282\u70b9\u7684\u5185\u6838\u7248\u672c\uff0c\u6ce8\u610f\uff1a\u53d1\u884c\u7248\u6807\u8bc6\u7b26\uff08\u5982 __ .el7.x86_64 __ \uff09\u65e0\u9700\u8f93\u5165\u3002 \u4f8b\u5982\uff1a

                bash -x yum.sh 3.10.0-1160.95.1\n

              \u81f3\u6b64\uff0c\u60a8\u5df2\u7ecf\u751f\u6210\u4e86\u5185\u6838\u4e3a 3.10.0-1160.95.1.el7.x86_64 \u7684\u79bb\u7ebf\u7684 yum \u6e90\uff1a centos-base \u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#yum_1","title":"\u4e0a\u4f20\u79bb\u7ebf yum \u6e90\u5230\u6587\u4ef6\u670d\u52a1\u5668","text":"

              \u5728\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002\u4e3b\u8981\u7528\u4e8e\u5c06\u4e0a\u4e00\u6b65\u4e2d\u751f\u6210\u7684 yum \u6e90\u4e0a\u4f20\u5230\u53ef\u4ee5\u88ab\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u8fdb\u884c\u8bbf\u95ee\u7684\u6587\u4ef6\u670d\u52a1\u5668\u4e2d\u3002 \u6587\u4ef6\u670d\u52a1\u5668\u53ef\u4ee5\u4e3a Nginx \u3001 Minio \u6216\u5176\u5b83\u652f\u6301 Http \u534f\u8bae\u7684\u6587\u4ef6\u670d\u52a1\u5668\u3002

              \u672c\u64cd\u4f5c\u793a\u4f8b\u91c7\u7528\u7684\u662f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u4f5c\u4e3a\u6587\u4ef6\u670d\u52a1\u5668\uff0cMinio \u76f8\u5173\u4fe1\u606f\u5982\u4e0b\uff1a

              • \u8bbf\u95ee\u5730\u5740\uff1a http://10.5.14.200:9000\uff08\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\uff09
              • \u767b\u5f55\u7528\u6237\u540d\uff1arootuser
              • \u767b\u5f55\u5bc6\u7801\uff1arootpass123

              • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u5c06\u8282\u70b9\u672c\u5730 mc \u547d\u4ee4\u884c\u5de5\u5177\u548c minio \u670d\u52a1\u5668\u5efa\u7acb\u94fe\u63a5\u3002

                mc config host add minio http://10.5.14.200:9000 rootuser rootpass123\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                Added `minio` successfully.\n

                mc \u547d\u4ee4\u884c\u5de5\u5177\u662f Minio \u6587\u4ef6\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u5ba2\u6237\u7aef\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\uff1a MinIO Client\u3002

              • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a centos-base \u7684\u5b58\u50a8\u6876\uff08bucket\uff09\u3002

                mc mb -p minio/centos-base\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                Bucket created successfully __minio/centos-base__ .\n
              • \u5c06\u5b58\u50a8\u6876 centos-base \u7684\u8bbf\u95ee\u7b56\u7565\u8bbe\u7f6e\u4e3a\u5141\u8bb8\u516c\u5f00\u4e0b\u8f7d\u3002\u4ee5\u4fbf\u5728\u540e\u671f\u5b89\u88c5 GPU-operator \u65f6\u80fd\u591f\u88ab\u8bbf\u95ee\u3002

                mc anonymous set download minio/centos-base\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                Access permission for `minio/centos-base` is set to `download` \n
              • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u5c06\u6b65\u9aa4\u4e8c\u751f\u6210\u7684\u79bb\u7ebf yum \u6e90\u6587\u4ef6 centos-base \u590d\u5236\u5230 minio \u670d\u52a1\u5668\u7684 minio/centos-base \u5b58\u50a8\u6876\u4e2d\u3002

                mc cp centos-base minio/centos-base --recursive\n
              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#yum_2","title":"\u5728\u96c6\u7fa4\u521b\u5efa\u914d\u7f6e\u9879\u7528\u6765\u4fdd\u5b58 yum \u6e90\u4fe1\u606f","text":"

              \u5728\u5f85\u90e8\u7f72 GPU Operator \u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002

              1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u521b\u5efa\u540d\u4e3a CentOS-Base.repo \u7684\u6587\u4ef6\uff0c\u7528\u6765\u6307\u5b9a yum \u6e90\u5b58\u50a8\u7684\u914d\u7f6e\u4fe1\u606f\u3002

                # \u6587\u4ef6\u540d\u79f0\u5fc5\u987b\u4e3a CentOS-Base.repo\uff0c\u5426\u5219\u5b89\u88c5 gpu-operator \u65f6\u65e0\u6cd5\u88ab\u8bc6\u522b\ncat > CentOS-Base.repo << EOF\n[extension-0]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base #\u6b65\u9aa4\u4e09\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base #\u6b65\u9aa4\u4e09\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 1\nEOF\n
              2. \u57fa\u4e8e\u521b\u5efa\u7684 CentOS-Base.repo \u6587\u4ef6\uff0c\u5728 gpu-operator \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u521b\u5efa\u540d\u4e3a local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\uff1a

                kubectl create configmap local-repo-config  -n gpu-operator --from-file=CentOS-Base.repo=/etc/yum.repos.d/extension.repo\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                configmap/local-repo-config created\n

                local-repo-config \u914d\u7f6e\u6587\u4ef6\u7528\u4e8e\u5728\u5b89\u88c5 gpu-operator \u65f6\uff0c\u63d0\u4f9b RepoConfig.ConfigMapName \u53c2\u6570\u7684\u503c\uff0c\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u7528\u6237\u53ef\u81ea\u5b9a\u4e49\u3002

              3. \u67e5\u770b local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\uff1a

                kubectl get configmap local-repo-config  -n gpu-operator -oyaml\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                apiVersion: v1\ndata:\nCentOS-Base.repo: \"[extension-0]\\nbaseurl = http://10.6.232.5:32618/centos-base#\u6b65\u9aa4\u4e8c\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84\\ngpgcheck = 0\\nname = kubean extension 0\\n  \\n[extension-1]\\nbaseurl\n    = http://10.6.232.5:32618/centos-base #\u6b65\u9aa4\u4e8c\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84\\ngpgcheck = 0\\nname\n    = kubean extension 1\\n\"\nkind: ConfigMap\nmetadata:\ncreationTimestamp: \"2023-10-18T01:59:02Z\"\nname: local-repo-config\nnamespace: gpu-operator\nresourceVersion: \"59445080\"\nuid: c5f0ebab-046f-442c-b932-f9003e014387\n

              \u81f3\u6b64\uff0c\u60a8\u5df2\u6210\u529f\u4e3a\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u521b\u5efa\u4e86\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u3002 \u901a\u8fc7\u5728\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u65f6\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html","title":"\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9884\u7f6e\u4e86 CentOS 7.9\uff0c\u5185\u6838\u4e3a 3.10.0-1160 \u7684 GPU operator \u79bb\u7ebf\u5305\u3002\u5176\u5b83 OS \u7c7b\u578b\u7684\u8282\u70b9\u6216\u5185\u6838\u9700\u8981\u7528\u6237\u624b\u52a8\u6784\u5efa\u79bb\u7ebf yum \u6e90\u3002

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u57fa\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4efb\u610f\u8282\u70b9\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u5305\uff0c\u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\uff0c\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              1. \u7528\u6237\u5df2\u7ecf\u5728\u5e73\u53f0\u4e0a\u5b89\u88c5\u4e86 v0.12.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u7684 addon \u79bb\u7ebf\u5305\u3002
              2. \u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u8282\u70b9 OS \u5fc5\u987b\u4e3a Red Hat 8.4\uff0c\u4e14\u5185\u6838\u7248\u672c\u5b8c\u5168\u4e00\u81f4\u3002
              3. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u548c\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u7f51\u7edc\u80fd\u591f\u8054\u901a\u7684\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u5982 nginx \u6216 minio\u3002
              4. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u3001\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\uff0c\u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5\u3002
              5. \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u8282\u70b9\u5fc5\u987b\u4e3a Red Hat 8.4 4.18.0-305.el8.x86_64\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u672c\u6587\u4ee5 Red Hat 8.4 4.18.0-305.el8.x86_64 \u8282\u70b9\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u57fa\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4efb\u610f\u8282\u70b9\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u5305\uff0c \u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\uff0c\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum","title":"\u4e0b\u8f7d\u706b\u79cd\u8282\u70b9\u4e2d\u7684 yum \u6e90","text":"

              \u4ee5\u4e0b\u64cd\u4f5c\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 master \u8282\u70b9\u4e0a\u6267\u884c\u3002

              1. \u4f7f\u7528 ssh \u6216\u5176\u5b83\u65b9\u5f0f\u8fdb\u5165\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5185\u4efb\u4e00\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

                cat /etc/yum.repos.d/extension.repo #\u67e5\u770b extension.repo \u4e2d\u7684\u5185\u5bb9\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                [extension-0]\nbaseurl = http://10.5.14.200:9000/kubean/redhat/$releasever/os/$basearch\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/kubean/redhat-iso/$releasever/os/$basearch/AppStream\ngpgcheck = 0\nname = kubean extension 1\n\n[extension-2]\nbaseurl = http://10.5.14.200:9000/kubean/redhat-iso/$releasever/os/$basearch/BaseOS\ngpgcheck = 0\nname = kubean extension 2\n
              2. \u5728 root \u8def\u5f84\u4e0b\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a redhat-base-repo \u7684\u6587\u4ef6\u5939

                mkdir redhat-base-repo\n
              3. \u4e0b\u8f7d yum \u6e90\u4e2d\u7684 rpm \u5305\u5230\u672c\u5730\uff1a

                yum install yum-utils\n
              4. \u4e0b\u8f7d extension-1 \u4e2d\u7684 rpm \u5305\uff1a

                reposync  -p redhat-base-repo  -n --repoid=extension-1\n
              5. \u4e0b\u8f7d extension-2 \u4e2d\u7684 rpm \u5305\uff1a

                reposync  -p redhat-base-repo  -n --repoid=extension-2\n
              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#elfutils-libelf-devel-0187-4el8x86_64rpm","title":"\u4e0b\u8f7d elfutils-libelf-devel-0.187-4.el8.x86_64.rpm \u5305","text":"

              \u4ee5\u4e0b\u64cd\u4f5c\u5728\u8054\u7f51\u8282\u70b9\u6267\u884c\u64cd\u4f5c\uff0c\u5728\u64cd\u4f5c\u524d\uff0c\u60a8\u9700\u8981\u4fdd\u8bc1\u8054\u7f51\u8282\u70b9\u548c\u5168\u5c40\u670d\u52a1\u96c6\u7fa4 master \u8282\u70b9\u95f4\u7684\u7f51\u7edc\u8054\u901a\u6027\u3002

              1. \u5728\u8054\u7f51\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u4e0b\u8f7d elfutils-libelf-devel-0.187-4.el8.x86_64.rpm \u5305\uff1a

                wget https://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/elfutils-libelf-devel-0.187-4.el8.x86_64.rpm\n
              2. \u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u5c06 elfutils-libelf-devel-0.187-4.el8.x86_64.rpm \u5305\u4f20\u8f93\u81f3\u6b65\u9aa4\u4e00\u4e2d\u7684\u8282\u70b9\u4e0a\uff1a

                scp  elfutils-libelf-devel-0.187-4.el8.x86_64.rpm user@ip:~/redhat-base-repo/extension-2/Packages/\n

                \u4f8b\u5982\uff1a

                scp  elfutils-libelf-devel-0.187-4.el8.x86_64.rpm root@10.6.175.10:~/redhat-base-repo/extension-2/Packages/\n
              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum-repo","title":"\u751f\u6210\u672c\u5730 yum repo","text":"

              \u4ee5\u4e0b\u64cd\u4f5c\u5728\u6b65\u9aa4\u4e00\u4e2d\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 master \u8282\u70b9\u4e0a\u6267\u884c\u3002

              1. \u8fdb\u5165 yum repo \u76ee\u5f55\uff1a

                cd ~/redhat-base-repo/extension-1/Packages\ncd ~/redhat-base-repo/extension-2/Packages\n
              2. \u751f\u6210\u76ee\u5f55 repo \u7d22\u5f15\uff1a

                yum install createrepo -y  # \u82e5\u5df2\u5b89\u88c5 createrepo \u53ef\u7701\u7565\u6b64\u6b65\u9aa4\ncreaterepo_c ./\n

              \u81f3\u6b64\uff0c\u60a8\u5df2\u7ecf\u751f\u6210\u4e86\u5185\u6838\u4e3a 4.18.0-305.el8.x86_64 \u7684\u79bb\u7ebf\u7684 yum \u6e90\uff1a redhat-base-repo \u3002

              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum-repo_1","title":"\u5c06\u672c\u5730\u751f\u6210\u7684 yum repo \u4e0a\u4f20\u81f3\u6587\u4ef6\u670d\u52a1\u5668","text":"

              \u672c\u64cd\u4f5c\u793a\u4f8b\u91c7\u7528\u7684\u662f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u4f5c\u4e3a\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u7528\u6237\u53ef\u57fa\u4e8e\u81ea\u8eab\u60c5\u51b5\u9009\u62e9\u6587\u4ef6\u670d\u52a1\u5668\u3002Minio \u76f8\u5173\u4fe1\u606f\u5982\u4e0b\uff1a

              • \u8bbf\u95ee\u5730\u5740\uff1a http://10.5.14.200:9000\uff08\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\uff09
              • \u767b\u5f55\u7528\u6237\u540d\uff1arootuser
              • \u767b\u5f55\u5bc6\u7801\uff1arootpass123

              • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u5c06\u8282\u70b9\u672c\u5730 mc \u547d\u4ee4\u884c\u5de5\u5177\u548c minio \u670d\u52a1\u5668\u5efa\u7acb\u94fe\u63a5\u3002

                mc config host add minio \u6587\u4ef6\u670d\u52a1\u5668\u8bbf\u95ee\u5730\u5740 \u7528\u6237\u540d \u5bc6\u7801\n

                \u4f8b\u5982\uff1a

                mc config host add minio http://10.5.14.200:9000 rootuser rootpass123\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                Added `minio` successfully.\n

                mc \u547d\u4ee4\u884c\u5de5\u5177\u662f Minio \u6587\u4ef6\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u5ba2\u6237\u7aef\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\uff1a MinIO Client\u3002

              • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a redhat-base \u7684\u5b58\u50a8\u6876(bucket)\u3002

                mc mb -p minio/redhat-base\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                Bucket created successfully `minio/redhat-base`.\n
              • \u5c06\u5b58\u50a8\u6876 redhat-base \u7684\u8bbf\u95ee\u7b56\u7565\u8bbe\u7f6e\u4e3a\u5141\u8bb8\u516c\u5f00\u4e0b\u8f7d\u3002\u4ee5\u4fbf\u5728\u540e\u671f\u5b89\u88c5 GPU-operator \u65f6\u80fd\u591f\u88ab\u8bbf\u95ee\u3002

                mc anonymous set download minio/redhat-base\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                Access permission for `minio/redhat-base` is set to `download` \n
              • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u5c06\u6b65\u9aa4\u4e8c\u751f\u6210\u7684\u79bb\u7ebf yum \u6e90\u6587\u4ef6 redhat-base-repo \u590d\u5236\u5230 minio \u670d\u52a1\u5668\u7684 minio/redhat-base \u5b58\u50a8\u6876\u4e2d\u3002

                mc cp redhat-base-repo minio/redhat-base --recursive\n
              "},{"location":"admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum_1","title":"\u5728\u96c6\u7fa4\u521b\u5efa\u914d\u7f6e\u9879\u7528\u6765\u4fdd\u5b58 yum \u6e90\u4fe1\u606f","text":"

              \u672c\u6b65\u9aa4\u5728\u5f85\u90e8\u7f72 GPU Operator \u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002

              1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u521b\u5efa\u540d\u4e3a redhat.repo \u7684\u6587\u4ef6\uff0c\u7528\u6765\u6307\u5b9a yum \u6e90\u5b58\u50a8\u7684\u914d\u7f6e\u4fe1\u606f\u3002

                # \u6587\u4ef6\u540d\u79f0\u5fc5\u987b\u4e3a redhat.repo\uff0c\u5426\u5219\u5b89\u88c5 gpu-operator \u65f6\u65e0\u6cd5\u88ab\u8bc6\u522b\ncat > redhat.repo << EOF\n[extension-0]\nbaseurl = http://10.5.14.200:9000/redhat-base/redhat-base-repo/Packages #\u6b65\u9aa4\u4e00\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/redhat-base/redhat-base-repo/Packages #\u6b65\u9aa4\u4e00\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 1\nEOF\n
              2. \u57fa\u4e8e\u521b\u5efa\u7684 redhat.repo \u6587\u4ef6\uff0c\u5728 gpu-operator \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u521b\u5efa\u540d\u4e3a local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\uff1a

                kubectl create configmap local-repo-config  -n gpu-operator --from-file=./redhat.repo \n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                configmap/local-repo-config created\n

                local-repo-config \u914d\u7f6e\u6587\u4ef6\u7528\u4e8e\u5728\u5b89\u88c5 gpu-operator \u65f6\uff0c\u63d0\u4f9b RepoConfig.ConfigMapName \u53c2\u6570\u7684\u503c\uff0c\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u7528\u6237\u53ef\u81ea\u5b9a\u4e49\u3002

              3. \u67e5\u770b local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\uff1a

                kubectl get configmap local-repo-config  -n gpu-operator -oyaml\n

              \u81f3\u6b64\uff0c\u60a8\u5df2\u6210\u529f\u4e3a\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u521b\u5efa\u4e86\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u3002 \u901a\u8fc7\u5728\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u65f6\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html","title":"\u6784\u5efa Red Hat 7.9 \u79bb\u7ebf yum \u6e90","text":""},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html#_1","title":"\u4f7f\u7528\u573a\u666f\u4ecb\u7ecd","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9884\u7f6e\u4e86 CentOS 7.9\uff0c\u5185\u6838\u4e3a 3.10.0-1160 \u7684 GPU Operator \u79bb\u7ebf\u5305\u3002\u5176\u5b83 OS \u7c7b\u578b\u7684\u8282\u70b9\u6216\u5185\u6838\u9700\u8981\u7528\u6237\u624b\u52a8\u6784\u5efa\u79bb\u7ebf yum \u6e90\u3002

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u57fa\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4efb\u610f\u8282\u70b9\u6784\u5efa Red Hat 7.9 \u79bb\u7ebf yum \u6e90\u5305\uff0c\u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\u4f7f\u7528 RepoConfig.ConfigMapName \u53c2\u6570\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              1. \u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u8282\u70b9 OS \u5fc5\u987b\u4e3a Red Hat 7.9\uff0c\u4e14\u5185\u6838\u7248\u672c\u5b8c\u5168\u4e00\u81f4
              2. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u4e0e\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u7f51\u7edc\u8054\u901a\u7684\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u5982 nginx \u6216 minio
              3. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u3001\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\uff0c \u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5
              4. \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u8282\u70b9\u5fc5\u987b\u4e3a Red Hat 7.9
              "},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html#1-yum","title":"1. \u6784\u5efa\u76f8\u5173\u5185\u6838\u7248\u672c\u7684\u79bb\u7ebf Yum \u6e90","text":"
              1. \u4e0b\u8f7d rhel7.9 ISO

              2. \u4e0b\u8f7d\u4e0e Kubean \u7248\u672c\u5bf9\u5e94\u7684\u7684 rhel7.9 ospackage

                \u5728 \u5bb9\u5668\u7ba1\u7406 \u7684\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u627e\u5230 Helm \u5e94\u7528 \uff0c\u641c\u7d22 kubean\uff0c\u53ef\u67e5\u770b kubean \u7684\u7248\u672c\u53f7\u3002

                \u5728 kubean\u7684\u4ee3\u7801\u4ed3\u5e93 \u4e2d\u4e0b\u8f7d\u8be5\u7248\u672c\u7684 rhel7.9 ospackage\u3002

              3. \u901a\u8fc7\u5b89\u88c5\u5668\u5bfc\u5165\u79bb\u7ebf\u8d44\u6e90

                \u53c2\u8003\u5bfc\u5165\u79bb\u7ebf\u8d44\u6e90\u6587\u6863\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html#2-red-hat-79-os","title":"2. \u4e0b\u8f7d Red Hat 7.9 OS \u7684\u79bb\u7ebf\u9a71\u52a8\u955c\u50cf","text":"

              \u70b9\u51fb\u67e5\u770b\u4e0b\u8f7d\u5730\u5740\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html#3-red-hat-gpu-opreator","title":"3. \u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf","text":"

              \u53c2\u8003\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf\u3002

              Note

              \u6b64\u53c2\u8003\u4ee5 rhel8.4 \u4e3a\u4f8b\uff0c\u8bf7\u6ce8\u610f\u4fee\u6539\u6210 rhel7.9\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html#4-yum","title":"4. \u5728\u96c6\u7fa4\u521b\u5efa\u914d\u7f6e\u9879\u7528\u6765\u4fdd\u5b58 Yum \u6e90\u4fe1\u606f","text":"

              \u5728\u5f85\u90e8\u7f72 GPU Operator \u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0a\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002

              1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u521b\u5efa\u540d\u4e3a CentOS-Base.repo \u7684\u6587\u4ef6\uff0c\u7528\u6765\u6307\u5b9a yum \u6e90\u5b58\u50a8\u7684\u914d\u7f6e\u4fe1\u606f\u3002

                # \u6587\u4ef6\u540d\u79f0\u5fc5\u987b\u4e3a CentOS-Base.repo\uff0c\u5426\u5219\u5b89\u88c5 gpu-operator \u65f6\u65e0\u6cd5\u88ab\u8bc6\u522b\ncat > CentOS-Base.repo <<  EOF\n[extension-0]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base # \u706b\u79cd\u8282\u70b9\u7684\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\uff0c\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base # \u706b\u79cd\u8282\u70b9\u7684\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\uff0c\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\ngpgcheck = 0\nname = kubean extension 1\nEOF\n
              2. \u57fa\u4e8e\u521b\u5efa\u7684 CentOS-Base.repo \u6587\u4ef6\uff0c\u5728 gpu-operator \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u521b\u5efa\u540d\u4e3a local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\uff1a

                kubectl create configmap local-repo-config -n gpu-operator --from-file=CentOS-Base.repo=/etc/yum.repos.d/extension.repo\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                configmap/local-repo-config created\n

                local-repo-config \u914d\u7f6e\u6587\u4ef6\u7528\u4e8e\u5728\u5b89\u88c5 gpu-operator \u65f6\uff0c\u63d0\u4f9b RepoConfig.ConfigMapName \u53c2\u6570\u7684\u503c\uff0c\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u7528\u6237\u53ef\u81ea\u5b9a\u4e49\u3002

              3. \u67e5\u770b local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\uff1a

                kubectl get configmap local-repo-config -n gpu-operator -oyaml\n

                \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                local-repo-config.yaml
                apiVersion: v1\ndata:\n  CentOS-Base.repo: \"[extension-0]\\nbaseurl = http://10.6.232.5:32618/centos-base # \u6b65\u9aa4 2 \u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84 \\ngpgcheck = 0\\nname = kubean extension 0\\n  \\n[extension-1]\\nbaseurl\n  = http://10.6.232.5:32618/centos-base # \u6b65\u9aa4 2 \u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84 \\ngpgcheck = 0\\nname\n  = kubean extension 1\\n\"\nkind: ConfigMap\nmetadata:\n  creationTimestamp: \"2023-10-18T01:59:02Z\"\n  name: local-repo-config\n  namespace: gpu-operator\n  resourceVersion: \"59445080\"\n  uid: c5f0ebab-046f-442c-b932-f9003e014387\n

              \u81f3\u6b64\uff0c\u60a8\u5df2\u6210\u529f\u4e3a\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u521b\u5efa\u4e86\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u3002 \u5176\u4e2d\u5728\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u65f6\u4f7f\u7528\u4e86 RepoConfig.ConfigMapName \u53c2\u6570\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html","title":"GPU \u544a\u8b66\u89c4\u5219","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8bbe\u7f6e GPU \u76f8\u5173\u7684\u544a\u8b66\u89c4\u5219\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5df2\u6b63\u786e\u5b89\u88c5 GPU \u8bbe\u5907
              • \u96c6\u7fa4\u4e2d\u5df2\u6b63\u786e\u5b89\u88c5 gpu-operator \u7ec4\u4ef6
              • \u5982\u679c\u7528\u5230\u4e86 vGPU \u8fd8\u9700\u8981\u5728\u96c6\u7fa4\u4e2d\u5b89\u88c5 Nvidia-vgpu \u7ec4\u4ef6\uff0c\u5e76\u4e14\u5f00\u542f servicemonitor
              • \u96c6\u7fa4\u6b63\u786e\u5b89\u88c5\u4e86 insight-agent \u7ec4\u4ef6
              "},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#gpu_1","title":"\u544a\u8b66\u5e38\u7528 GPU \u6307\u6807","text":"

              \u672c\u8282\u4ecb\u7ecd GPU \u544a\u8b66\u5e38\u7528\u7684\u6307\u6807\uff0c\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

              • GPU \u5361\u7eac\u5ea6\u7684\u6307\u6807\uff0c\u4e3b\u8981\u53cd\u5e94\u5355\u4e2a GPU \u8bbe\u5907\u7684\u8fd0\u884c\u72b6\u6001\u3002
              • \u5e94\u7528\u7eac\u5ea6\u7684\u6307\u6807\uff0c\u4e3b\u8981\u53cd\u5e94 Pod \u5728 GPU \u4e0a\u7684\u8fd0\u884c\u72b6\u6001\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#gpu_2","title":"GPU \u5361\u6307\u6807","text":"\u6307\u6807\u540d\u79f0 \u6307\u6807\u5355\u4f4d \u8bf4\u660e DCGM_FI_DEV_GPU_UTIL % GPU \u5229\u7528\u7387 DCGM_FI_DEV_MEM_COPY_UTIL % \u663e\u5b58\u5229\u7528\u7387 DCGM_FI_DEV_ENC_UTIL % \u7f16\u7801\u5668\u5229\u7528\u7387 DCGM_FI_DEV_DEC_UTIL % \u89e3\u7801\u5668\u5229\u7528\u7387 DCGM_FI_DEV_FB_FREE MB \u8868\u793a\u663e\u5b58\u5269\u4f59\u91cf DCGM_FI_DEV_FB_USED MB \u8868\u793a\u663e\u5b58\u4f7f\u7528\u91cf DCGM_FI_DEV_GPU_TEMP \u6444\u6c0f\u5ea6 \u8868\u793a\u5f53\u524d GPU \u7684\u6e29\u5ea6\u5ea6\u6570 DCGM_FI_DEV_POWER_USAGE W \u8bbe\u5907\u7535\u6e90\u4f7f\u7528\u60c5\u51b5 DCGM_FI_DEV_XID_ERRORS - \u8868\u793a\u4e00\u6bb5\u65f6\u95f4\u5185\uff0c\u6700\u540e\u53d1\u751f\u7684 XID \u9519\u8bef\u53f7\u3002XID \u63d0\u4f9b GPU \u786c\u4ef6\u3001NVIDIA \u8f6f\u4ef6\u6216\u5e94\u7528\u4e2d\u7684\u9519\u8bef\u7c7b\u578b\u3001\u9519\u8bef\u4f4d\u7f6e\u3001\u9519\u8bef\u4ee3\u7801\u7b49\u4fe1\u606f\uff0c\u66f4\u591a XID \u4fe1\u606f"},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#_2","title":"\u5e94\u7528\u7ef4\u5ea6\u7684\u6307\u6807","text":"\u6307\u6807\u540d\u79f0 \u6307\u6807\u5355\u4f4d \u8bf4\u660e kpanda_gpu_pod_utilization % \u8868\u793a Pod \u5bf9 GPU \u7684\u4f7f\u7528\u7387 kpanda_gpu_mem_pod_usage MB \u8868\u793a Pod \u5bf9 GPU \u663e\u5b58\u7684\u4f7f\u7528\u91cf kpanda_gpu_mem_pod_utilization % \u8868\u793a Pod \u5bf9 GPU \u663e\u5b58\u7684\u4f7f\u7528\u7387"},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#_3","title":"\u8bbe\u7f6e\u544a\u8b66\u89c4\u5219","text":"

              \u8fd9\u91cc\u4f1a\u4ecb\u7ecd\u5982\u4f55\u8bbe\u7f6e GPU \u544a\u8b66\u89c4\u5219\uff0c\u4f7f\u7528 GPU \u5361\u5229\u7528\u7387\u6307\u6807\u4f5c\u4e3a\u6848\u4f8b\uff0c\u8bf7\u7528\u6237\u6839\u636e\u5b9e\u9645\u7684\u4e1a\u52a1\u573a\u666f\u9009\u62e9\u6307\u6807\u4ee5\u53ca\u7f16\u5199 promql\u3002

              \u76ee\u6807\uff1a\u5f53GPU\u5361\u5229\u7528\u7387\u5728\u4e94\u79d2\u949f\u5185\u4e00\u76f4\u4fdd\u6301 80% \u7684\u5229\u7528\u7387\u65f6\u53d1\u51fa\u544a\u8b66

              1. \u5728\u53ef\u89c2\u6d4b\u9875\u9762\uff0c\u70b9\u51fb \u544a\u8b66 -> \u544a\u8b66\u7b56\u7565 -> \u521b\u5efa\u544a\u8b66\u7b56\u7565

              2. \u586b\u5199\u57fa\u672c\u4fe1\u606f

              3. \u6dfb\u52a0\u89c4\u5219

              4. \u9009\u62e9\u901a\u77e5\u65b9\u5f0f

              5. \u8bbe\u7f6e\u5b8c\u6210\u540e\uff0c\u5f53\u4e00\u4e2a GPU \u5728 5s \u5185\u4e00\u76f4\u4fdd\u6301 80% \u7684\u5229\u7528\u7387\uff0c\u4f1a\u6536\u5230\u5982\u4e0b\u7684\u544a\u8b66\u4fe1\u606f\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html","title":"GPU \u76d1\u63a7\u6307\u6807","text":"

              \u672c\u9875\u5217\u51fa\u4e00\u4e9b\u5e38\u7528\u7684 GPU \u76d1\u63a7\u6307\u6807\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html#_1","title":"\u96c6\u7fa4\u7ef4\u5ea6","text":"\u6307\u6807\u540d\u79f0 \u63cf\u8ff0 GPU \u5361\u6570 \u96c6\u7fa4\u4e0b\u6240\u6709\u7684 GPU \u5361\u6570\u91cf GPU \u5e73\u5747\u4f7f\u7528\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u5e73\u5747\u7b97\u529b\u4f7f\u7528\u7387 GPU \u5e73\u5747\u663e\u5b58\u4f7f\u7528\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u5e73\u5747\u663e\u5b58\u4f7f\u7528\u7387 GPU \u5361\u529f\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u529f\u7387 GPU \u5361\u6e29\u5ea6 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u6e29\u5ea6 GPU \u7b97\u529b\u4f7f\u7528\u7387\u7ec6\u8282 24 \u5c0f\u65f6\u5185\uff0c\u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u4f7f\u7528\u7387\u7ec6\u8282\uff08\u5305\u542b max\u3001avg\u3001current\uff09 GPU \u663e\u5b58\u4f7f\u7528\u91cf\u7ec6\u8282 24 \u5c0f\u65f6\u5185\uff0c\u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u91cf\u7ec6\u8282\uff08\u5305\u542b min\u3001max\u3001avg\u3001current\uff09 GPU \u663e\u5b58\u5e26\u5bbd\u4f7f\u7528\u7387 \u8868\u793a\u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387\u3002\u4ee5 Nvidia GPU V100 \u4e3a\u4f8b\uff0c\u5176\u6700\u5927\u5185\u5b58\u5e26\u5bbd\u4e3a 900 GB/sec\uff0c\u5982\u679c\u5f53\u524d\u7684\u5185\u5b58\u5e26\u5bbd\u4e3a 450 GB/sec\uff0c\u5219\u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387\u4e3a 50%"},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html#_2","title":"\u8282\u70b9\u7ef4\u5ea6","text":"\u6307\u6807\u540d\u79f0 \u63cf\u8ff0 GPU \u6a21\u5f0f \u8282\u70b9\u4e0a GPU \u5361\u7684\u4f7f\u7528\u6a21\u5f0f\uff0c\u5305\u542b\u6574\u5361\u6a21\u5f0f\u3001MIG \u6a21\u5f0f\u3001vGPU \u6a21\u5f0f GPU \u7269\u7406\u5361\u6570 \u8282\u70b9\u4e0a\u6240\u6709\u7684 GPU \u5361\u6570\u91cf GPU \u865a\u62df\u5361\u6570 \u8282\u70b9\u4e0a\u5df2\u7ecf\u88ab\u521b\u5efa\u51fa\u6765\u7684 vGPU \u8bbe\u5907\u6570\u91cf GPU MIG \u5b9e\u4f8b\u6570 \u8282\u70b9\u4e0a\u5df2\u7ecf\u88ab\u521b\u5efa\u51fa\u6765\u7684 MIG \u5b9e\u4f8b\u6570 GPU \u663e\u5b58\u5206\u914d\u7387 \u8282\u70b9\u4e0a\u6240\u6709 GPU \u5361\u7684\u663e\u5b58\u5206\u914d\u7387 GPU \u7b97\u529b\u5e73\u5747\u4f7f\u7528\u7387 \u8282\u70b9\u4e0a\u6240\u6709 GPU \u5361\u7684\u7b97\u529b\u5e73\u5747\u4f7f\u7528\u7387 GPU \u663e\u5b58\u5e73\u5747\u4f7f\u7528\u7387 \u8282\u70b9\u4e0a\u6240\u6709 GPU \u5361\u7684\u5e73\u5747\u663e\u5b58\u4f7f\u7528\u7387 GPU \u9a71\u52a8\u7248\u672c \u8282\u70b9\u4e0a GPU \u5361\u9a71\u52a8\u7684\u7248\u672c\u4fe1\u606f GPU \u7b97\u529b\u4f7f\u7528\u7387\u7ec6\u8282 24 \u5c0f\u65f6\u5185\uff0c\u8282\u70b9\u4e0a\u6bcf\u5f20 GPU \u5361\u7684\u7b97\u529b\u4f7f\u7528\u7387\u7ec6\u8282\uff08\u5305\u542b max\u3001avg\u3001current\uff09 GPU \u663e\u5b58\u4f7f\u7528\u91cf 24 \u5c0f\u65f6\u5185\uff0c\u8282\u70b9\u4e0a\u6bcf\u5f20 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u91cf\u7ec6\u8282\uff08\u5305\u542b min\u3001max\u3001avg\u3001current\uff09

              \u6839\u636e XID \u72b6\u6001\u6392\u67e5 GPU \u76f8\u5173\u95ee\u9898

              XID \u6d88\u606f\u662f NVIDIA \u9a71\u52a8\u7a0b\u5e8f\u5411\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u6838\u65e5\u5fd7\u6216\u4e8b\u4ef6\u65e5\u5fd7\u6253\u5370\u7684\u9519\u8bef\u62a5\u544a\u3002XID \u6d88\u606f\u7528\u4e8e\u6807\u8bc6 GPU \u9519\u8bef\u4e8b\u4ef6\uff0c \u63d0\u4f9b GPU \u786c\u4ef6\u3001NVIDIA \u8f6f\u4ef6\u6216\u5e94\u7528\u4e2d\u7684\u9519\u8bef\u7c7b\u578b\u3001\u9519\u8bef\u4f4d\u7f6e\u3001\u9519\u8bef\u4ee3\u7801\u7b49\u4fe1\u606f\u3002 \u5982\u68c0\u67e5\u9879 GPU \u8282\u70b9\u4e0a\u7684 XID \u5f02\u5e38\u4e3a\u7a7a\uff0c\u8868\u660e\u65e0 XID \u6d88\u606f\uff1b\u5982\u6709\uff0c\u60a8\u53ef\u6309\u7167\u4e0b\u8868\u81ea\u52a9\u6392\u67e5\u5e76\u89e3\u51b3\u95ee\u9898\uff0c \u6216\u67e5\u770b\u66f4\u591a XID \u6d88\u606f\u3002

              XID \u6d88\u606f \u8bf4\u660e 13 Graphics Engine Exception. \u901a\u5e38\u662f\u6570\u7ec4\u8d8a\u754c\u3001\u6307\u4ee4\u9519\u8bef\uff0c\u5c0f\u6982\u7387\u662f\u786c\u4ef6\u95ee\u9898\u3002 31 GPU memory page fault. \u901a\u5e38\u662f\u5e94\u7528\u7a0b\u5e8f\u7684\u975e\u6cd5\u5730\u5740\u8bbf\u95ee\uff0c\u6781\u5c0f\u6982\u7387\u662f\u9a71\u52a8\u6216\u8005\u786c\u4ef6\u95ee\u9898\u3002 32 Invalid or corrupted push buffer stream. \u4e8b\u4ef6\u7531 PCIE \u603b\u7ebf\u4e0a\u7ba1\u7406 NVIDIA \u9a71\u52a8\u548c GPU \u4e4b\u95f4\u901a\u4fe1\u7684 DMA \u63a7\u5236\u5668\u4e0a\u62a5\uff0c\u901a\u5e38\u662f PCI \u8d28\u91cf\u95ee\u9898\u5bfc\u81f4\uff0c\u800c\u975e\u60a8\u7684\u7a0b\u5e8f\u4ea7\u751f\u3002 38 Driver firmware error. \u901a\u5e38\u662f\u9a71\u52a8\u56fa\u4ef6\u9519\u8bef\u800c\u975e\u786c\u4ef6\u95ee\u9898\u3002 43 GPU stopped processing. \u901a\u5e38\u662f\u60a8\u5e94\u7528\u81ea\u8eab\u9519\u8bef\uff0c\u800c\u975e\u786c\u4ef6\u95ee\u9898\u3002 45 Preemptive cleanup, due to previous errors -- Most likely to see when running multiple cuda applications and hitting a DBE. \u901a\u5e38\u662f\u60a8\u624b\u52a8\u9000\u51fa\u6216\u8005\u5176\u4ed6\u6545\u969c\uff08\u786c\u4ef6\u3001\u8d44\u6e90\u9650\u5236\u7b49\uff09\u5bfc\u81f4\u7684 GPU \u5e94\u7528\u9000\u51fa\uff0cXID 45 \u53ea\u63d0\u4f9b\u4e00\u4e2a\u7ed3\u679c\uff0c\u5177\u4f53\u539f\u56e0\u901a\u5e38\u9700\u8981\u8fdb\u4e00\u6b65\u5206\u6790\u65e5\u5fd7\u3002 48 Double Bit ECC Error (DBE). \u5f53 GPU \u53d1\u751f\u4e0d\u53ef\u7ea0\u6b63\u7684\u9519\u8bef\u65f6\uff0c\u4f1a\u4e0a\u62a5\u6b64\u4e8b\u4ef6\uff0c\u8be5\u9519\u8bef\u4e5f\u4f1a\u540c\u65f6\u53cd\u9988\u7ed9\u60a8\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u901a\u5e38\u9700\u8981\u91cd\u7f6e GPU \u6216\u91cd\u542f\u8282\u70b9\u6765\u6e05\u9664\u8fd9\u4e2a\u9519\u8bef\u3002 61 Internal micro-controller breakpoint/warning. GPU \u5185\u90e8\u5f15\u64ce\u505c\u6b62\u5de5\u4f5c\uff0c\u60a8\u7684\u4e1a\u52a1\u5df2\u7ecf\u53d7\u5230\u5f71\u54cd\u3002 62 Internal micro-controller halt. \u4e0e XID 61 \u7684\u89e6\u53d1\u573a\u666f\u7c7b\u4f3c\u3002 63 ECC page retirement or row remapping recording event. \u5f53\u5e94\u7528\u7a0b\u5e8f\u906d\u9047\u5230 GPU \u663e\u5b58\u786c\u4ef6\u9519\u8bef\u65f6\uff0cNVIDIA \u81ea\u7ea0\u9519\u673a\u5236\u4f1a\u5c06\u9519\u8bef\u7684\u5185\u5b58\u533a\u57df retire \u6216\u8005 remap\uff0cretirement \u548c remapped \u4fe1\u606f\u9700\u8bb0\u5f55\u5230 infoROM \u4e2d\u624d\u80fd\u6c38\u4e45\u751f\u6548\u3002Volt \u67b6\u6784\uff1a\u6210\u529f\u8bb0\u5f55 ECC page retirement \u4e8b\u4ef6\u5230 infoROM\u3002Ampere \u67b6\u6784\uff1a\u6210\u529f\u8bb0\u5f55 row remapping \u4e8b\u4ef6\u5230 infoROM\u3002 64 ECC page retirement or row remapper recording failure. \u4e0e XID 63 \u7684\u89e6\u53d1\u573a\u666f\u7c7b\u4f3c\u3002\u4f46 XID 63 \u4ee3\u8868 retirement \u548c remapped \u4fe1\u606f\u6210\u529f\u8bb0\u5f55\u5230\u4e86 infoROM\uff0cXID 64 \u4ee3\u8868\u8be5\u8bb0\u5f55\u64cd\u4f5c\u5931\u8d25\u3002 68 NVDEC0 Exception. \u901a\u5e38\u662f\u786c\u4ef6\u6216\u9a71\u52a8\u95ee\u9898\u3002 74 NVLINK Error. NVLink \u786c\u4ef6\u9519\u8bef\u4ea7\u751f\u7684 XID\uff0c\u8868\u660e GPU \u5df2\u7ecf\u51fa\u73b0\u4e25\u91cd\u786c\u4ef6\u6545\u969c\uff0c\u9700\u8981\u4e0b\u7ebf\u7ef4\u4fee\u3002 79 GPU has fallen off the bus. GPU \u786c\u4ef6\u68c0\u6d4b\u5230\u6389\u5361\uff0c\u603b\u7ebf\u4e0a\u65e0\u6cd5\u68c0\u6d4b\u8be5 GPU\uff0c\u8868\u660e\u8be5 GPU \u5df2\u7ecf\u51fa\u73b0\u4e25\u91cd\u786c\u4ef6\u6545\u969c\uff0c\u9700\u8981\u4e0b\u7ebf\u7ef4\u4fee\u3002 92 High single-bit ECC error rate. \u786c\u4ef6\u6216\u9a71\u52a8\u6545\u969c\u3002 94 Contained ECC error. \u5f53\u5e94\u7528\u7a0b\u5e8f\u906d\u9047\u5230 GPU \u4e0d\u53ef\u7ea0\u6b63\u7684\u663e\u5b58 ECC \u9519\u8bef\u65f6\uff0cNVIDIA \u9519\u8bef\u6291\u5236\u673a\u5236\u4f1a\u5c1d\u8bd5\u5c06\u9519\u8bef\u6291\u5236\u5728\u53d1\u751f\u786c\u4ef6\u6545\u969c\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u907f\u514d\u8be5\u9519\u8bef\u5f71\u54cd GPU \u8282\u70b9\u4e0a\u8fd0\u884c\u7684\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u3002\u5f53\u6291\u5236\u673a\u5236\u6210\u529f\u6291\u5236\u9519\u8bef\u65f6\uff0c\u4f1a\u4ea7\u751f\u8be5\u4e8b\u4ef6\uff0c\u4ec5\u51fa\u73b0\u4e0d\u53ef\u7ea0\u6b63 ECC \u9519\u8bef\u7684\u5e94\u7528\u7a0b\u5e8f\u53d7\u5230\u5f71\u54cd\u3002 95 Uncontained ECC error. \u4e0e XID 94 \u7684\u89e6\u53d1\u573a\u666f\u7c7b\u4f3c\u3002\u4f46 XID 94 \u4ee3\u8868\u6291\u5236\u6210\u529f\uff0c\u800c XID 95 \u4ee3\u8868\u6291\u5236\u5931\u8d25\uff0c\u8868\u660e\u8fd0\u884c\u5728\u8be5 GPU \u4e0a\u7684\u6240\u6709\u5e94\u7528\u7a0b\u5e8f\u90fd\u5df2\u53d7\u5230\u5f71\u54cd\u3002"},{"location":"admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html#pod","title":"Pod \u7ef4\u5ea6","text":"\u5206\u7c7b \u6307\u6807\u540d\u79f0 \u63cf\u8ff0 \u5e94\u7528\u6982\u89c8 GPU \u5361 - \u7b97\u529b & \u663e\u5b58 Pod GPU \u7b97\u529b\u4f7f\u7528\u7387 \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u7b97\u529b\u4f7f\u7528\u7387 Pod GPU \u663e\u5b58\u4f7f\u7528\u7387 \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u7387 Pod \u663e\u5b58\u4f7f\u7528\u91cf \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u91cf \u663e\u5b58\u5206\u914d\u91cf \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u5206\u914d\u91cf Pod GPU \u663e\u5b58\u590d\u5236\u4f7f\u7528\u7387 \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u663e\u5b58\u590d\u5236\u6bd4\u7387 GPU \u5361 - \u5f15\u64ce\u6982\u89c8 GPU \u56fe\u5f62\u5f15\u64ce\u6d3b\u52a8\u767e\u5206\u6bd4 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cGraphics \u6216 Compute \u5f15\u64ce\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b GPU \u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387 \u8868\u793a\u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387\uff08Memory BW Utilization\uff09\u5c06\u6570\u636e\u53d1\u9001\u5230\u8bbe\u5907\u5185\u5b58\u6216\u4ece\u8bbe\u5907\u5185\u5b58\u63a5\u6536\u6570\u636e\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u8f83\u9ad8\u7684\u503c\u8868\u793a\u8bbe\u5907\u5185\u5b58\u7684\u5229\u7528\u7387\u8f83\u9ad8\u3002\u8be5\u503c\u4e3a 1\uff08100%\uff09\u8868\u793a\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u6bcf\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6761 DRAM \u6307\u4ee4\uff08\u5b9e\u9645\u4e0a\uff0c\u5cf0\u503c\u7ea6\u4e3a 0.8 (80%) \u662f\u53ef\u5b9e\u73b0\u7684\u6700\u5927\u503c\uff09\u3002\u5047\u8bbe\u8be5\u503c\u4e3a 0.2\uff0820%\uff09\uff0c\u8868\u793a 20% \u7684\u5468\u671f\u5728\u65f6\u95f4\u95f4\u9694\u5185\u8bfb\u53d6\u6216\u5199\u5165\u8bbe\u5907\u5185\u5b58\u3002 Tensor \u6838\u5fc3\u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cTensor Core \u7ba1\u9053\uff08Pipe\uff09\u5904\u4e8e Active \u65f6\u95f4\u5360\u603b\u65f6\u95f4\u7684\u6bd4\u4f8b FP16 \u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cFP16 \u7ba1\u9053\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b FP32 \u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cFP32 \u7ba1\u9053\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b FP64 \u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cFP64 \u7ba1\u9053\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b GPU \u89e3\u7801\u4f7f\u7528\u7387 GPU \u5361\u89e3\u7801\u5f15\u64ce\u6bd4\u7387 GPU \u7f16\u7801\u4f7f\u7528\u7387 GPU \u5361\u7f16\u7801\u5f15\u64ce\u6bd4\u7387 GPU \u5361 - \u6e29\u5ea6 & \u529f\u8017 GPU \u5361\u6e29\u5ea6 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u6e29\u5ea6 GPU \u5361\u529f\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u529f\u7387 GPU \u5361 - \u603b\u8017\u80fd GPU \u5361\u603b\u5171\u6d88\u8017\u7684\u80fd\u91cf GPU \u5361 - Clock GPU \u5361\u5185\u5b58\u9891\u7387 \u5185\u5b58\u9891\u7387 GPU \u5361\u5e94\u7528SM \u65f6\u949f\u9891\u7387 \u5e94\u7528\u7684 SM \u65f6\u949f\u9891\u7387 GPU \u5361\u5e94\u7528\u5185\u5b58\u9891\u7387 \u5e94\u7528\u5185\u5b58\u9891\u7387 GPU \u5361\u89c6\u9891\u5f15\u64ce\u9891\u7387 \u89c6\u9891\u5f15\u64ce\u9891\u7387 GPU \u5361\u964d\u9891\u539f\u56e0 \u964d\u9891\u539f\u56e0 GPU \u5361 - \u5176\u4ed6\u7ec6\u8282 \u56fe\u5f62\u5f15\u64ce\u6d3b\u52a8 \u56fe\u5f62\u6216\u8ba1\u7b97\u5f15\u64ce\u7684\u4efb\u4f55\u90e8\u5206\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u65f6\u95f4\u6bd4\u4f8b\u3002\u5982\u679c\u56fe\u5f62/\u8ba1\u7b97\u4e0a\u4e0b\u6587\u5df2\u7ed1\u5b9a\u4e14\u56fe\u5f62/\u8ba1\u7b97\u7ba1\u9053\u7e41\u5fd9\uff0c\u5219\u56fe\u5f62\u5f15\u64ce\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002 SM\u6d3b\u52a8 \u591a\u5904\u7406\u5668\u4e0a\u81f3\u5c11\u4e00\u4e2a Warp \u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u65f6\u95f4\u6bd4\u4f8b\uff0c\u6240\u6709\u591a\u5904\u7406\u5668\u7684\u5e73\u5747\u503c\u3002\u8bf7\u6ce8\u610f\uff0c\u201c\u6d3b\u52a8\u201d\u5e76\u4e0d\u4e00\u5b9a\u610f\u5473\u7740 Warp \u6b63\u5728\u79ef\u6781\u8ba1\u7b97\u3002\u4f8b\u5982\uff0c\u7b49\u5f85\u5185\u5b58\u8bf7\u6c42\u7684 Warp \u88ab\u89c6\u4e3a\u6d3b\u52a8\u72b6\u6001\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u30020.8 \u6216\u66f4\u5927\u7684\u503c\u662f\u6709\u6548\u4f7f\u7528 GPU \u7684\u5fc5\u8981\u6761\u4ef6\uff0c\u4f46\u8fd8\u4e0d\u591f\u3002\u5c0f\u4e8e 0.5 \u7684\u503c\u53ef\u80fd\u8868\u793a GPU \u4f7f\u7528\u6548\u7387\u4f4e\u4e0b\u3002\u7ed9\u51fa\u4e00\u4e2a\u7b80\u5316\u7684 GPU \u67b6\u6784\u89c6\u56fe\uff0c\u5982\u679c GPU \u6709 N \u4e2a SM\uff0c\u5219\u4f7f\u7528 N \u4e2a\u5757\u5e76\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u8fd0\u884c\u7684\u5185\u6838\u5c06\u5bf9\u5e94\u4e8e\u6d3b\u52a8 1\uff08100%\uff09\u3002\u4f7f\u7528 N/5 \u4e2a\u5757\u5e76\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u8fd0\u884c\u7684\u5185\u6838\u5c06\u5bf9\u5e94\u4e8e\u6d3b\u52a8 0.2\uff0820%\uff09\u3002\u4f7f\u7528 N \u4e2a\u5757\u5e76\u8fd0\u884c\u4e94\u5206\u4e4b\u4e00\u65f6\u95f4\u95f4\u9694\u7684\u5185\u6838\uff0c\u5982\u679c SM \u5904\u4e8e\u7a7a\u95f2\u72b6\u6001\uff0c\u5219\u6d3b\u52a8\u4e5f\u5c06\u4e3a 0.2\uff0820%\uff09\u3002\u8be5\u503c\u4e0e\u6bcf\u4e2a\u5757\u7684\u7ebf\u7a0b\u6570\u65e0\u5173\uff08\u53c2\u89c1DCGM_FI_PROF_SM_OCCUPANCY\uff09\u3002 SM \u5165\u4f4f\u7387 \u591a\u5904\u7406\u5668\u4e0a\u9a7b\u7559 Warp \u7684\u6bd4\u4f8b\uff0c\u76f8\u5bf9\u4e8e\u591a\u5904\u7406\u5668\u4e0a\u652f\u6301\u7684\u6700\u5927\u5e76\u53d1 Warp \u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u5360\u7528\u7387\u8d8a\u9ad8\u5e76\u4e0d\u4e00\u5b9a\u8868\u793a GPU \u4f7f\u7528\u7387\u8d8a\u9ad8\u3002\u5bf9\u4e8e GPU \u5185\u5b58\u5e26\u5bbd\u53d7\u9650\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff08\u53c2\u89c1DCGM_FI_PROF_DRAM_ACTIVE\uff09\uff0c\u5360\u7528\u7387\u8d8a\u9ad8\u8868\u660e GPU \u4f7f\u7528\u7387\u8d8a\u9ad8\u3002\u4f46\u662f\uff0c\u5982\u679c\u5de5\u4f5c\u8d1f\u8f7d\u662f\u8ba1\u7b97\u53d7\u9650\u7684\uff08\u5373\u4e0d\u53d7 GPU \u5185\u5b58\u5e26\u5bbd\u6216\u5ef6\u8fdf\u9650\u5236\uff09\uff0c\u5219\u5360\u7528\u7387\u8d8a\u9ad8\u5e76\u4e0d\u4e00\u5b9a\u4e0e GPU \u4f7f\u7528\u7387\u8d8a\u9ad8\u76f8\u5173\u3002\u8ba1\u7b97\u5360\u7528\u7387\u5e76\u4e0d\u7b80\u5355\uff0c\u5b83\u53d6\u51b3\u4e8e GPU \u5c5e\u6027\u3001\u6bcf\u4e2a\u5757\u7684\u7ebf\u7a0b\u6570\u3001\u6bcf\u4e2a\u7ebf\u7a0b\u7684\u5bc4\u5b58\u5668\u4ee5\u53ca\u6bcf\u4e2a\u5757\u7684\u5171\u4eab\u5185\u5b58\u7b49\u56e0\u7d20\u3002\u4f7f\u7528CUDA \u5360\u7528\u7387\u8ba1\u7b97\u5668 \u63a2\u7d22\u5404\u79cd\u5360\u7528\u7387\u573a\u666f\u3002 \u5f20\u91cf\u6d3b\u52a8 \u5f20\u91cf (HMMA / IMMA) \u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0c\u5f20\u91cf\u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8 1 (100%) \u76f8\u5f53\u4e8e\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u9694\u4e00\u4e2a\u5468\u671f\u53d1\u51fa\u4e00\u4e2a\u5f20\u91cf\u6307\u4ee4\u3002\u6d3b\u52a8 0.2 (20%) \u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u7684\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u7684\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u7684\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4ecb\u4e8e\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605DCGM_FI_PROF_SM_ACTIVE\u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 FP64 \u5f15\u64ce\u6d3b\u52a8 FP64\uff08\u53cc\u7cbe\u5ea6\uff09\u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0cFP64 \u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u91cf 1\uff08100%\uff09\u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185 Volta \u4e0a\u6bcf\u56db\u4e2a\u5468\u671f\u7684\u6bcf\u4e2a SM\u4e0a\u6267\u884c\u4e00\u6761 FP64 \u6307\u4ee4 \u3002\u6d3b\u52a8\u91cf 0.2\uff0820%\uff09\u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4ecb\u4e8e\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605 DCGM_FI_PROF_SM_ACTIVE \u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 FP32 \u5f15\u64ce\u6d3b\u52a8 FMA\uff08FP32\uff08\u5355\u7cbe\u5ea6\uff09\u548c\u6574\u6570\uff09\u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0cFP32 \u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u91cf 1\uff08100%\uff09\u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u9694\u4e00\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6b21 FP32 \u6307\u4ee4\u3002\u6d3b\u52a8\u91cf 0.2\uff0820%\uff09\u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605DCGM_FI_PROF_SM_ACTIVE\u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 FP16 \u5f15\u64ce\u6d3b\u52a8 FP16\uff08\u534a\u7cbe\u5ea6\uff09\u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0cFP16 \u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u91cf 1\uff08100%\uff09\u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u9694\u4e00\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6b21 FP16 \u6307\u4ee4\u3002\u6d3b\u52a8\u91cf 0.2\uff0820%\uff09\u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4ecb\u4e8e\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605DCGM_FI_PROF_SM_ACTIVE\u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 \u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387 \u5411\u8bbe\u5907\u5185\u5b58\u53d1\u9001\u6570\u636e\u6216\u4ece\u8bbe\u5907\u5185\u5b58\u63a5\u6536\u6570\u636e\u7684\u5468\u671f\u6bd4\u4f8b\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0c\u8bbe\u5907\u5185\u5b58\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u7387\u4e3a 1 (100%) \u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6761 DRAM \u6307\u4ee4\uff08\u5b9e\u9645\u4e0a\uff0c\u5cf0\u503c\u7ea6\u4e3a 0.8 (80%) \u662f\u53ef\u5b9e\u73b0\u7684\u6700\u5927\u503c\uff09\u3002\u6d3b\u52a8\u7387\u4e3a 0.2 (20%) \u8868\u793a\u5728\u65f6\u95f4\u95f4\u9694\u5185\u6709 20% \u7684\u5468\u671f\u6b63\u5728\u8bfb\u53d6\u6216\u5199\u5165\u8bbe\u5907\u5185\u5b58\u3002 NVLink \u5e26\u5bbd \u901a\u8fc7 NVLink \u4f20\u8f93/\u63a5\u6536\u7684\u6570\u636e\u901f\u7387\uff08\u4e0d\u5305\u62ec\u534f\u8bae\u6807\u5934\uff09\uff0c\u4ee5\u6bcf\u79d2\u5b57\u8282\u6570\u4e3a\u5355\u4f4d\u3002\u8be5\u503c\u8868\u793a\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u901f\u7387\u662f\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\u3002\u4f8b\u5982\uff0c\u5982\u679c 1 \u79d2\u5185\u4f20\u8f93\u4e86 1 GB \u7684\u6570\u636e\uff0c\u5219\u65e0\u8bba\u6570\u636e\u662f\u4ee5\u6052\u5b9a\u901f\u7387\u8fd8\u662f\u7a81\u53d1\u901f\u7387\u4f20\u8f93\uff0c\u901f\u7387\u90fd\u662f 1 GB/s\u3002\u7406\u8bba\u4e0a\uff0c\u6bcf\u4e2a\u94fe\u8def\u6bcf\u4e2a\u65b9\u5411\u7684\u6700\u5927 NVLink Gen2 \u5e26\u5bbd\u4e3a 25 GB/s\u3002 PCIe \u5e26\u5bbd \u901a\u8fc7 PCIe \u603b\u7ebf\u4f20\u8f93/\u63a5\u6536\u7684\u6570\u636e\u901f\u7387\uff0c\u5305\u62ec\u534f\u8bae\u6807\u5934\u548c\u6570\u636e\u6709\u6548\u8d1f\u8f7d\uff0c\u4ee5\u5b57\u8282/\u79d2\u4e3a\u5355\u4f4d\u3002\u8be5\u503c\u8868\u793a\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u8be5\u901f\u7387\u662f\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\u3002\u4f8b\u5982\uff0c\u5982\u679c 1 \u79d2\u5185\u4f20\u8f93\u4e86 1 GB \u7684\u6570\u636e\uff0c\u5219\u65e0\u8bba\u6570\u636e\u662f\u4ee5\u6052\u5b9a\u901f\u7387\u8fd8\u662f\u7a81\u53d1\u901f\u7387\u4f20\u8f93\uff0c\u901f\u7387\u90fd\u662f 1 GB/s\u3002\u7406\u8bba\u4e0a\u6700\u5927 PCIe Gen3 \u5e26\u5bbd\u4e3a\u6bcf\u901a\u9053 985 MB/s\u3002 PCIe \u4f20\u8f93\u901f\u7387 \u8282\u70b9 GPU \u5361\u901a\u8fc7 PCIe \u603b\u7ebf\u4f20\u8f93\u7684\u6570\u636e\u901f\u7387 PCIe \u63a5\u6536\u901f\u7387 \u8282\u70b9 GPU \u5361\u901a\u8fc7 PCIe \u603b\u7ebf\u63a5\u6536\u7684\u6570\u636e\u901f\u7387"},{"location":"admin/kpanda/gpu/nvidia/mig/index.html","title":"NVIDIA \u591a\u5b9e\u4f8b GPU(MIG) \u6982\u8ff0","text":""},{"location":"admin/kpanda/gpu/nvidia/mig/index.html#mig","title":"MIG \u573a\u666f","text":"
              • \u591a\u79df\u6237\u4e91\u73af\u5883

                MIG \u5141\u8bb8\u4e91\u670d\u52a1\u63d0\u4f9b\u5546\u5c06\u4e00\u5757\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a\u72ec\u7acb\u7684 GPU \u5b9e\u4f8b\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u53ef\u4ee5\u72ec\u7acb\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u79df\u6237\u3002\u8fd9\u6837\u53ef\u4ee5\u5b9e\u73b0\u8d44\u6e90\u7684\u9694\u79bb\u548c\u72ec\u7acb\u6027\uff0c\u6ee1\u8db3\u591a\u4e2a\u79df\u6237\u5bf9 GPU \u8ba1\u7b97\u80fd\u529b\u7684\u9700\u6c42\u3002

              • \u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f

                MIG \u53ef\u4ee5\u5728\u5bb9\u5668\u5316\u73af\u5883\u4e2d\u5b9e\u73b0\u66f4\u7ec6\u7c92\u5ea6\u7684 GPU \u8d44\u6e90\u7ba1\u7406\u3002\u901a\u8fc7\u5c06\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a MIG \u5b9e\u4f8b\uff0c\u53ef\u4ee5\u4e3a\u6bcf\u4e2a\u5bb9\u5668\u5206\u914d\u72ec\u7acb\u7684 GPU \u8ba1\u7b97\u8d44\u6e90\uff0c\u63d0\u4f9b\u66f4\u597d\u7684\u6027\u80fd\u9694\u79bb\u548c\u8d44\u6e90\u5229\u7528\u3002

              • \u6279\u5904\u7406\u4f5c\u4e1a

                \u5bf9\u4e8e\u9700\u8981\u5927\u89c4\u6a21\u5e76\u884c\u8ba1\u7b97\u7684\u6279\u5904\u7406\u4f5c\u4e1a\uff0cMIG \u53ef\u4ee5\u63d0\u4f9b\u66f4\u9ad8\u7684\u8ba1\u7b97\u6027\u80fd\u548c\u66f4\u5927\u7684\u663e\u5b58\u5bb9\u91cf\u3002\u6bcf\u4e2a MIG \u5b9e\u4f8b\u53ef\u4ee5\u5229\u7528\u7269\u7406 GPU \u7684\u4e00\u90e8\u5206\u8ba1\u7b97\u8d44\u6e90\uff0c\u4ece\u800c\u52a0\u901f\u5927\u89c4\u6a21\u8ba1\u7b97\u4efb\u52a1\u7684\u5904\u7406\u3002

              • AI/\u673a\u5668\u5b66\u4e60\u8bad\u7ec3

                MIG \u53ef\u4ee5\u5728\u8bad\u7ec3\u5927\u89c4\u6a21\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u65f6\u63d0\u4f9b\u66f4\u5927\u7684\u8ba1\u7b97\u80fd\u529b\u548c\u663e\u5b58\u5bb9\u91cf\u3002\u5c06\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a MIG \u5b9e\u4f8b\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u53ef\u4ee5\u72ec\u7acb\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\uff0c\u63d0\u9ad8\u8bad\u7ec3\u6548\u7387\u548c\u541e\u5410\u91cf\u3002

              \u603b\u4f53\u800c\u8a00\uff0cNVIDIA MIG \u9002\u7528\u4e8e\u9700\u8981\u66f4\u7ec6\u7c92\u5ea6\u7684GPU\u8d44\u6e90\u5206\u914d\u548c\u7ba1\u7406\u7684\u573a\u666f\uff0c\u53ef\u4ee5\u5b9e\u73b0\u8d44\u6e90\u7684\u9694\u79bb\u3001\u63d0\u9ad8\u6027\u80fd\u5229\u7528\u7387\uff0c\u5e76\u4e14\u6ee1\u8db3\u591a\u4e2a\u7528\u6237\u6216\u5e94\u7528\u7a0b\u5e8f\u5bf9 GPU \u8ba1\u7b97\u80fd\u529b\u7684\u9700\u6c42\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/mig/index.html#mig_1","title":"MIG \u6982\u8ff0","text":"

              NVIDIA \u591a\u5b9e\u4f8b GPU\uff08Multi-Instance GPU\uff0c\u7b80\u79f0 MIG\uff09\u662f NVIDIA \u5728 H100\uff0cA100\uff0cA30 \u7cfb\u5217 GPU \u5361\u4e0a\u63a8\u51fa\u7684\u4e00\u9879\u65b0\u7279\u6027\uff0c \u65e8\u5728\u5c06\u4e00\u5757\u7269\u7406 GPU \u5206\u5272\u4e3a\u591a\u4e2a GPU \u5b9e\u4f8b\uff0c\u4ee5\u63d0\u4f9b\u66f4\u7ec6\u7c92\u5ea6\u7684\u8d44\u6e90\u5171\u4eab\u548c\u9694\u79bb\u3002MIG \u6700\u591a\u53ef\u5c06\u4e00\u5757 GPU \u5212\u5206\u6210\u4e03\u4e2a GPU \u5b9e\u4f8b\uff0c \u4f7f\u5f97\u4e00\u4e2a \u7269\u7406 GPU \u5361\u53ef\u4e3a\u591a\u4e2a\u7528\u6237\u63d0\u4f9b\u5355\u72ec\u7684 GPU \u8d44\u6e90\uff0c\u4ee5\u5b9e\u73b0\u6700\u4f73 GPU \u5229\u7528\u7387\u3002

              \u8fd9\u4e2a\u529f\u80fd\u4f7f\u5f97\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u6216\u7528\u6237\u53ef\u4ee5\u540c\u65f6\u5171\u4eabGPU\u8d44\u6e90\uff0c\u63d0\u9ad8\u4e86\u8ba1\u7b97\u8d44\u6e90\u7684\u5229\u7528\u7387\uff0c\u5e76\u589e\u52a0\u4e86\u7cfb\u7edf\u7684\u53ef\u6269\u5c55\u6027\u3002

              \u901a\u8fc7 MIG\uff0c\u6bcf\u4e2a GPU \u5b9e\u4f8b\u7684\u5904\u7406\u5668\u5728\u6574\u4e2a\u5185\u5b58\u7cfb\u7edf\u4e2d\u5177\u6709\u72ec\u7acb\u4e14\u9694\u79bb\u7684\u8def\u5f84\u2014\u2014\u82af\u7247\u4e0a\u7684\u4ea4\u53c9\u5f00\u5173\u7aef\u53e3\u3001L2 \u9ad8\u901f\u7f13\u5b58\u7ec4\u3001\u5185\u5b58\u63a7\u5236\u5668\u548c DRAM \u5730\u5740\u603b\u7ebf\u90fd\u552f\u4e00\u5206\u914d\u7ed9\u5355\u4e2a\u5b9e\u4f8b\u3002

              \u8fd9\u786e\u4fdd\u4e86\u5355\u4e2a\u7528\u6237\u7684\u5de5\u4f5c\u8d1f\u8f7d\u80fd\u591f\u4ee5\u53ef\u9884\u6d4b\u7684\u541e\u5410\u91cf\u548c\u5ef6\u8fdf\u8fd0\u884c\uff0c\u5e76\u5177\u6709\u76f8\u540c\u7684\u4e8c\u7ea7\u7f13\u5b58\u5206\u914d\u548c DRAM \u5e26\u5bbd\u3002 MIG \u53ef\u4ee5\u5212\u5206\u53ef\u7528\u7684 GPU \u8ba1\u7b97\u8d44\u6e90\uff08\u5305\u62ec\u6d41\u591a\u5904\u7406\u5668\u6216 SM \u548c GPU \u5f15\u64ce\uff0c\u5982\u590d\u5236\u5f15\u64ce\u6216\u89e3\u7801\u5668\uff09\u8fdb\u884c\u5206\u533a\uff0c \u4ee5\u4fbf\u4e3a\u4e0d\u540c\u7684\u5ba2\u6237\u7aef\uff08\u5982\u4e91\u4e3b\u673a\u3001\u5bb9\u5668\u6216\u8fdb\u7a0b\uff09\u63d0\u4f9b\u5b9a\u4e49\u7684\u670d\u52a1\u8d28\u91cf\uff08QoS\uff09\u548c\u6545\u969c\u9694\u79bb\uff09\u3002 MIG \u4f7f\u591a\u4e2a GPU \u5b9e\u4f8b\u80fd\u591f\u5728\u5355\u4e2a\u7269\u7406 GPU \u4e0a\u5e76\u884c\u8fd0\u884c\u3002

              MIG \u5141\u8bb8\u591a\u4e2a vGPU\uff08\u4ee5\u53ca\u4e91\u4e3b\u673a\uff09\u5728\u5355\u4e2a GPU \u5b9e\u4f8b\u4e0a\u5e76\u884c\u8fd0\u884c\uff0c\u540c\u65f6\u4fdd\u7559 vGPU \u63d0\u4f9b\u7684\u9694\u79bb\u4fdd\u8bc1\u3002 \u6709\u5173\u4f7f\u7528 vGPU \u548c MIG \u8fdb\u884c GPU \u5206\u533a\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 NVIDIA Multi-Instance GPU and NVIDIA Virtual Compute Server\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/mig/index.html#mig_2","title":"MIG \u67b6\u6784","text":"

              \u5982\u4e0b\u662f\u4e00\u4e2a MIG \u7684\u6982\u8ff0\u56fe\uff0c\u53ef\u4ee5\u770b\u51fa MIG \u5c06\u4e00\u5f20\u7269\u7406 GPU \u5361\u865a\u62df\u5316\u6210\u4e86 7 \u4e2a GPU \u5b9e\u4f8b\uff0c\u8fd9\u4e9b GPU \u5b9e\u4f8b\u80fd\u591f\u53ef\u4ee5\u88ab\u591a\u4e2a User \u4f7f\u7528\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/mig/index.html#_1","title":"\u91cd\u8981\u6982\u5ff5","text":"
              • SM \uff1a\u6d41\u5f0f\u591a\u5904\u7406\u5668\uff08Streaming Multiprocessor\uff09\uff0cGPU \u7684\u6838\u5fc3\u8ba1\u7b97\u5355\u5143\uff0c\u8d1f\u8d23\u6267\u884c\u56fe\u5f62\u6e32\u67d3\u548c\u901a\u7528\u8ba1\u7b97\u4efb\u52a1\u3002 \u6bcf\u4e2a SM \u5305\u542b\u4e00\u7ec4 CUDA \u6838\u5fc3\uff0c\u4ee5\u53ca\u5171\u4eab\u5185\u5b58\u3001\u5bc4\u5b58\u5668\u6587\u4ef6\u548c\u5176\u4ed6\u8d44\u6e90\uff0c\u53ef\u4ee5\u540c\u65f6\u6267\u884c\u591a\u4e2a\u7ebf\u7a0b\u3002 \u6bcf\u4e2a MIG \u5b9e\u4f8b\u90fd\u62e5\u6709\u4e00\u5b9a\u6570\u91cf\u7684 SM \u548c\u5176\u4ed6\u76f8\u5173\u8d44\u6e90\uff0c\u4ee5\u53ca\u88ab\u5212\u5206\u51fa\u6765\u7684\u663e\u5b58\u3002
              • GPU Memory Slice \uff1aGPU \u5185\u5b58\u5207\u7247\uff0cGPU \u5185\u5b58\u5207\u7247\u662f GPU \u5185\u5b58\u7684\u6700\u5c0f\u90e8\u5206\uff0c\u5305\u62ec\u76f8\u5e94\u7684\u5185\u5b58\u63a7\u5236\u5668\u548c\u7f13\u5b58\u3002 GPU \u5185\u5b58\u5207\u7247\u5927\u7ea6\u662f GPU \u5185\u5b58\u8d44\u6e90\u603b\u91cf\u7684\u516b\u5206\u4e4b\u4e00\uff0c\u5305\u62ec\u5bb9\u91cf\u548c\u5e26\u5bbd\u3002
              • GPU SM Slice \uff1aGPU SM \u5207\u7247\u662f GPU \u4e0a SM \u7684\u6700\u5c0f\u8ba1\u7b97\u5355\u4f4d\u3002\u5728 MIG \u6a21\u5f0f\u4e0b\u914d\u7f6e\u65f6\uff0c GPU SM \u5207\u7247\u5927\u7ea6\u662f GPU \u4e2d\u53ef\u7528 SMS \u603b\u6570\u7684\u4e03\u5206\u4e4b\u4e00\u3002
              • GPU Slice \uff1aGPU \u5207\u7247\u662f GPU \u4e2d\u7531\u5355\u4e2a GPU \u5185\u5b58\u5207\u7247\u548c\u5355\u4e2a GPU SM \u5207\u7247\u7ec4\u5408\u5728\u4e00\u8d77\u7684\u6700\u5c0f\u90e8\u5206\u3002
              • GPU Instance \uff1aGPU \u5b9e\u4f8b \uff08GI\uff09 \u662f GPU \u5207\u7247\u548c GPU \u5f15\u64ce\uff08DMA\u3001NVDEC \u7b49\uff09\u7684\u7ec4\u5408\u3002 GPU \u5b9e\u4f8b\u4e2d\u7684\u4efb\u4f55\u5185\u5bb9\u59cb\u7ec8\u5171\u4eab\u6240\u6709 GPU \u5185\u5b58\u5207\u7247\u548c\u5176\u4ed6 GPU \u5f15\u64ce\uff0c\u4f46\u5b83\u7684 SM \u5207\u7247\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7ec6\u5206\u4e3a\u8ba1\u7b97\u5b9e\u4f8b\uff08CI\uff09\u3002 GPU \u5b9e\u4f8b\u63d0\u4f9b\u5185\u5b58 QoS\u3002\u6bcf\u4e2a GPU \u5207\u7247\u90fd\u5305\u542b\u4e13\u7528\u7684 GPU \u5185\u5b58\u8d44\u6e90\uff0c\u8fd9\u4e9b\u8d44\u6e90\u4f1a\u9650\u5236\u53ef\u7528\u5bb9\u91cf\u548c\u5e26\u5bbd\uff0c\u5e76\u63d0\u4f9b\u5185\u5b58 QoS\u3002 \u6bcf\u4e2a GPU \u5185\u5b58\u5207\u7247\u83b7\u5f97\u603b GPU \u5185\u5b58\u8d44\u6e90\u7684\u516b\u5206\u4e4b\u4e00\uff0c\u6bcf\u4e2a GPU SM \u5207\u7247\u83b7\u5f97 SM \u603b\u6570\u7684\u4e03\u5206\u4e4b\u4e00\u3002
              • Compute Instance \uff1aGPU \u5b9e\u4f8b\u7684\u8ba1\u7b97\u5207\u7247\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7ec6\u5206\u4e3a\u591a\u4e2a\u8ba1\u7b97\u5b9e\u4f8b \uff08CI\uff09\uff0c\u5176\u4e2d CI \u5171\u4eab\u7236 GI \u7684\u5f15\u64ce\u548c\u5185\u5b58\uff0c\u4f46\u6bcf\u4e2a CI \u90fd\u6709\u4e13\u7528\u7684 SM \u8d44\u6e90\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/mig/index.html#gpu-gi","title":"GPU \u5b9e\u4f8b\uff08GI\uff09","text":"

              \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728 GPU \u4e0a\u521b\u5efa\u5404\u79cd\u5206\u533a\u3002\u5c06\u4f7f\u7528 A100-40GB \u4f5c\u4e3a\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u5bf9\u5355\u4e2a GPU \u7269\u7406\u5361\u4e0a\u8fdb\u884c\u5206\u533a\u3002

              GPU \u7684\u5206\u533a\u662f\u4f7f\u7528\u5185\u5b58\u5207\u7247\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u8ba4\u4e3a A100-40GB GPU \u5177\u6709 8x5GB \u5185\u5b58\u5207\u7247\u548c 7 \u4e2a GPU SM \u5207\u7247\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5c55\u793a\u4e86 A100 \u4e0a\u53ef\u7528\u7684\u5185\u5b58\u5207\u7247\u3002

              \u5982\u4e0a\u6240\u8ff0\uff0c\u521b\u5efa GPU \u5b9e\u4f8b \uff08GI\uff09 \u9700\u8981\u5c06\u4e00\u5b9a\u6570\u91cf\u7684\u5185\u5b58\u5207\u7247\u4e0e\u4e00\u5b9a\u6570\u91cf\u7684\u8ba1\u7b97\u5207\u7247\u76f8\u7ed3\u5408\u3002 \u5728\u4e0b\u56fe\u4e2d\uff0c\u4e00\u4e2a 5GB \u5185\u5b58\u5207\u7247\u4e0e 1 \u4e2a\u8ba1\u7b97\u5207\u7247\u76f8\u7ed3\u5408\uff0c\u4ee5\u521b\u5efa 1g.5gb GI \u914d\u7f6e\u6587\u4ef6\uff1a

              \u540c\u6837\uff0c4x5GB \u5185\u5b58\u5207\u7247\u53ef\u4ee5\u4e0e 4x1 \u8ba1\u7b97\u5207\u7247\u7ed3\u5408\u4f7f\u7528\u4ee5\u521b\u5efa 4g.20gb \u7684 GI \u914d\u7f6e\u6587\u4ef6\uff1a

              "},{"location":"admin/kpanda/gpu/nvidia/mig/index.html#ci","title":"\u8ba1\u7b97\u5b9e\u4f8b\uff08CI\uff09","text":"

              GPU \u5b9e\u4f8b\u7684\u8ba1\u7b97\u5207\u7247(GI)\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7ec6\u5206\u4e3a\u591a\u4e2a\u8ba1\u7b97\u5b9e\u4f8b\uff08CI\uff09\uff0c\u5176\u4e2d CI \u5171\u4eab\u7236 GI \u7684\u5f15\u64ce\u548c\u5185\u5b58\uff0c \u4f46\u6bcf\u4e2a CI \u90fd\u6709\u4e13\u7528\u7684 SM \u8d44\u6e90\u3002\u4f7f\u7528\u4e0a\u9762\u7684\u76f8\u540c 4g.20gb \u793a\u4f8b\uff0c\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a CI \u4ee5\u4ec5\u4f7f\u7528\u7b2c\u4e00\u4e2a\u8ba1\u7b97\u5207\u7247\u7684 1c.4g.20gb \u8ba1\u7b97\u914d\u7f6e\uff0c\u5982\u4e0b\u56fe\u84dd\u8272\u90e8\u5206\u6240\u793a\uff1a

              \u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u901a\u8fc7\u9009\u62e9\u4efb\u4f55\u8ba1\u7b97\u5207\u7247\u6765\u521b\u5efa 4 \u4e2a\u4e0d\u540c\u7684 CI\u3002\u8fd8\u53ef\u4ee5\u5c06\u4e24\u4e2a\u8ba1\u7b97\u5207\u7247\u7ec4\u5408\u5728\u4e00\u8d77\u4ee5\u521b\u5efa 2c.4g.20gb \u7684\u8ba1\u7b97\u914d\u7f6e\uff09\uff1a

              \u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u53ef\u4ee5\u7ec4\u5408 3 \u4e2a\u8ba1\u7b97\u5207\u7247\u4ee5\u521b\u5efa\u8ba1\u7b97\u914d\u7f6e\u6587\u4ef6\uff0c\u6216\u8005\u53ef\u4ee5\u7ec4\u5408\u6240\u6709 4 \u4e2a\u8ba1\u7b97\u5207\u7247\u4ee5\u521b\u5efa 3c.4g.20gb \u3001 4c.4g.20gb \u8ba1\u7b97\u914d\u7f6e\u6587\u4ef6\u3002 \u5408\u5e76\u6240\u6709 4 \u4e2a\u8ba1\u7b97\u5207\u7247\u65f6\uff0c\u914d\u7f6e\u6587\u4ef6\u7b80\u79f0\u4e3a 4g.20gb \u3002

              "},{"location":"admin/kpanda/gpu/nvidia/mig/create_mig.html","title":"\u5f00\u542f MIG \u529f\u80fd","text":"

              \u672c\u7ae0\u8282\u4ecb\u7ecd\u5982\u4f55\u5f00\u542f NVIDIA MIG \u529f\u80fd\u65b9\u5f0f\uff0cNVIDIA \u5f53\u524d\u63d0\u4f9b\u4e24\u79cd\u5728 Kubernetes \u8282\u70b9\u4e0a\u516c\u5f00 MIG \u8bbe\u5907\u7684\u7b56\u7565\uff1a

              • Single \u6a21\u5f0f\uff0c\u8282\u70b9\u4ec5\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u5355\u4e00\u7c7b\u578b\u7684 MIG \u8bbe\u5907\u3002
              • Mixed \u6a21\u5f0f\uff0c\u8282\u70b9\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u6df7\u5408 MIG \u8bbe\u5907\u7c7b\u578b\u3002

              \u8be6\u60c5\u53c2\u8003 NVIDIA GPU \u5361\u4f7f\u7528\u6a21\u5f0f\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/mig/create_mig.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5f85\u5b89\u88c5 GPU \u9a71\u52a8\u8282\u70b9\u7cfb\u7edf\u8981\u6c42\u8bf7\u53c2\u8003\uff1aGPU \u652f\u6301\u77e9\u9635
              • \u786e\u8ba4\u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361\uff08NVIDIA H100\u3001 A100 \u548c A30 Tensor Core GPU\uff09\uff0c \u8be6\u60c5\u53c2\u8003 GPU \u652f\u6301\u77e9\u9635\u3002
              • \u8282\u70b9\u4e0a\u7684\u6240\u6709 GPU \u5fc5\u987b\uff1a\u5c5e\u4e8e\u540c\u4e00\u4ea7\u54c1\u7ebf\uff08\u4f8b\u5982 A100-SXM-40GB\uff09
              "},{"location":"admin/kpanda/gpu/nvidia/mig/create_mig.html#gpu-operator-addon","title":"\u5b89\u88c5 gpu-operator Addon","text":""},{"location":"admin/kpanda/gpu/nvidia/mig/create_mig.html#_2","title":"\u53c2\u6570\u914d\u7f6e","text":"

              \u5b89\u88c5 Operator \u65f6\u9700\u8981\u5bf9\u5e94\u8bbe\u7f6e MigManager Config \u53c2\u6570\uff0c \u9ed8\u8ba4\u4e3a default-mig-parted-config \uff0c\u540c\u65f6\u4e5f\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5207\u5206\u7b56\u7565\u914d\u7f6e\u6587\u4ef6\uff1a

              "},{"location":"admin/kpanda/gpu/nvidia/mig/create_mig.html#_3","title":"\u81ea\u5b9a\u4e49\u5207\u5206\u7b56\u7565","text":"
                ## \u81ea\u5b9a\u4e49\u5207\u5206 GI \u5b9e\u4f8b\u914d\u7f6e\n  all-disabled:\n    - devices: all\n      mig-enabled: false\n  all-enabled:\n    - devices: all\n      mig-enabled: true\n      mig-devices: {}\n  all-1g.10gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.5gb: 7\n  all-1g.10gb.me:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.10gb+me: 1\n  all-1g.20gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.20gb: 4\n  all-2g.20gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        2g.20gb: 3\n  all-3g.40gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        3g.40gb: 2\n  all-4g.40gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        4g.40gb: 1\n  all-7g.80gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        7g.80gb: 1\n  all-balanced:\n    - device-filter: [\"0x233110DE\", \"0x232210DE\", \"0x20B210DE\", \"0x20B510DE\", \"0x20F310DE\", \"0x20F510DE\"]\n      devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.10gb: 2\n        2g.20gb: 1\n        3g.40gb: 1\n  # \u8bbe\u7f6e\u540e\u4f1a\u6309\u7167\u8bbe\u7f6e\u89c4\u683c\u5207\u5206 CI \u5b9e\u4f8b\n  custom-config:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        3g.40gb: 2\n

              \u5728\u4e0a\u8ff0\u7684 YAML \u4e2d\u8bbe\u7f6e custom-config \uff0c\u8bbe\u7f6e\u540e\u4f1a\u6309\u7167\u89c4\u683c\u5207\u5206 CI \u5b9e\u4f8b\u3002

              custom-config:\n  - devices: all\n    mig-enabled: true\n    mig-devices:\n      1c.3g.40gb: 6\n

              \u8bbe\u7f6e\u5b8c\u6210\u540e\uff0c\u5728\u786e\u8ba4\u90e8\u7f72\u5e94\u7528\u65f6\u5373\u53ef\u4f7f\u7528 GPU MIG \u8d44\u6e90\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/mig/create_mig.html#gpu","title":"\u5207\u6362\u8282\u70b9 GPU \u6a21\u5f0f","text":"

              Note

              \u5207\u6362 GPU \u6a21\u5f0f\u6216\u8005\u4fee\u6539\u5207\u5206\u89c4\u683c\u540e\u9700\u8981\u91cd\u542f nvidia-mig-manager\u3002

              \u5f53\u6211\u4eec\u6210\u529f\u5b89\u88c5 gpu-operator \u4e4b\u540e\uff0c\u8282\u70b9\u9ed8\u8ba4\u662f\u6574\u5361\u6a21\u5f0f\uff0c\u5728\u8282\u70b9\u7ba1\u7406\u9875\u9762\u4f1a\u6709\u6807\u8bc6\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

              \u70b9\u51fb\u8282\u70b9\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u9009\u62e9 GPU \u6a21\u5f0f\u5207\u6362 \uff0c\u7136\u540e\u9009\u62e9\u5bf9\u5e94\u7684 MIG \u6a21\u5f0f\u4ee5\u53ca\u5207\u5206\u7684\u7b56\u7565\uff0c\u8fd9\u91cc\u4ee5 MIXED \u6a21\u5f0f\u4e3a\u4f8b\uff1a

              \u8fd9\u91cc\u4e00\u5171\u6709\u4e24\u4e2a\u914d\u7f6e\uff1a

              1. MIg \u7b56\u7565\uff1aMixed \u4ee5\u53ca Single \u3002
              2. \u5207\u5206\u7b56\u7565\uff1a\u8fd9\u91cc\u7684\u7b56\u7565\u9700\u8981\u4e0e default-mig-parted-config \uff08\u6216\u8005\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u5207\u5206\u7b56\u7565\uff09\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684 key \u4fdd\u6301\u4e00\u81f4\u3002

              \u70b9\u51fb \u786e\u5b9a \u6309\u94ae\u540e\uff0c\u7b49\u5f85\u7ea6\u4e00\u5206\u949f\u5de6\u53f3\u5237\u65b0\u9875\u9762\uff0cMIG \u6a21\u5f0f\u5207\u6362\u6210\uff1a

              "},{"location":"admin/kpanda/gpu/nvidia/mig/mig_command.html","title":"MIG \u76f8\u5173\u547d\u4ee4","text":"

              GI \u76f8\u5173\u547d\u540d\uff1a

              \u5b50\u547d\u4ee4 \u8bf4\u660e nvidia-smi mig -lgi \u67e5\u770b\u521b\u5efa GI \u5b9e\u4f8b\u5217\u8868 nvidia-smi mig -dgi -gi \u5220\u9664\u6307\u5b9a\u7684 GI \u5b9e\u4f8b nvidia-smi mig -lgip \u67e5\u770b GI \u7684 profile nvidia-smi mig -cgi \u901a\u8fc7\u6307\u5b9a profile \u7684 ID \u521b\u5efa GI

              CI \u76f8\u5173\u547d\u4ee4\uff1a

              \u5b50\u547d\u4ee4 \u8bf4\u660e nvidia-smi mig -lcip { -gi {gi Instance ID}} \u67e5\u770b CI \u7684 profile \uff0c\u6307\u5b9a -gi \u53ef\u4ee5\u67e5\u770b\u7279\u5b9a GI \u5b9e\u4f8b\u53ef\u4ee5\u521b\u5efa\u7684 CI nvidia-smi mig -lci \u67e5\u770b\u521b\u5efa\u7684 CI \u5b9e\u4f8b\u5217\u8868 nvidia-smi mig -cci {profile id} -gi {gi instance id} \u6307\u5b9a\u7684 GI \u521b\u5efa CI \u5b9e\u4f8b nvidia-smi mig -dci -ci \u5220\u9664\u6307\u5b9a CI \u5b9e\u4f8b

              GI+CI \u76f8\u5173\u547d\u4ee4\uff1a

              \u5b50\u547d\u4ee4 \u8bf4\u660e nvidia-smi mig -i 0 -cgi {gi profile id} -C {ci profile id} \u76f4\u63a5\u521b\u5efa GI + CI \u5b9e\u4f8b"},{"location":"admin/kpanda/gpu/nvidia/mig/mig_usage.html","title":"\u4f7f\u7528 MIG GPU \u8d44\u6e90","text":"

              \u672c\u8282\u4ecb\u7ecd\u5e94\u7528\u5982\u4f55\u4f7f\u7528 MIG GPU \u8d44\u6e90\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/mig/mig_usage.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
              • \u5df2\u5b89\u88c5 GPU Operator\u3002
              • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361
              "},{"location":"admin/kpanda/gpu/nvidia/mig/mig_usage.html#ui-mig-gpu","title":"UI \u754c\u9762\u4f7f\u7528 MIG GPU","text":"
              1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u8bc6\u522b GPU \u5361\u7c7b\u578b

                \u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 -> \u8282\u70b9\u7ba1\u7406 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u6b63\u786e\u8bc6\u522b\u4e3a MIG \u6a21\u5f0f\u3002

              2. \u901a\u8fc7\u955c\u50cf\u90e8\u7f72\u5e94\u7528\uff0c\u53ef\u9009\u62e9\u5e76\u4f7f\u7528 NVIDIA MIG \u8d44\u6e90\u3002

                • MIG Single \u6a21\u5f0f\u793a\u4f8b\uff08\u4e0e\u6574\u5361\u4f7f\u7528\u65b9\u5f0f\u76f8\u540c\uff09\uff1a

                  Note

                  MIG single \u7b56\u7565\u5141\u8bb8\u7528\u6237\u4ee5\u4e0e GPU \u6574\u5361\u76f8\u540c\u7684\u65b9\u5f0f\uff08nvidia.com/gpu\uff09\u8bf7\u6c42\u548c\u4f7f\u7528GPU\u8d44\u6e90\uff0c\u4e0d\u540c\u7684\u662f\u8fd9\u4e9b\u8d44\u6e90\u53ef\u4ee5\u662f GPU \u7684\u4e00\u90e8\u5206\uff08MIG\u8bbe\u5907\uff09\uff0c\u800c\u4e0d\u662f\u6574\u4e2aGPU\u3002\u4e86\u89e3\u66f4\u591a GPU MIG \u6a21\u5f0f\u8bbe\u8ba1

                • MIG Mixed \u6a21\u5f0f\u793a\u4f8b\uff1a

              "},{"location":"admin/kpanda/gpu/nvidia/mig/mig_usage.html#yaml-mig","title":"YAML \u914d\u7f6e\u4f7f\u7528 MIG","text":"

              MIG Single \u6a21\u5f0f\uff1a

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: mig-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: mig-demo\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: mig-demo\n    spec:\n      containers:\n        - name: mig-demo1\n          image: chrstnhntschl/gpu_burn\n          resources:\n            limits:\n              nvidia.com/gpu: 2 # (1)!\n          imagePullPolicy: Always\n      restartPolicy: Always\n
              1. \u7533\u8bf7 MIG GPU \u7684\u6570\u91cf

              MIG Mixed \u6a21\u5f0f\uff1a

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: mig-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: mig-demo\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: mig-demo\n    spec:\n      containers:\n        - name: mig-demo1\n          image: chrstnhntschl/gpu_burn\n          resources:\n            limits:\n              nvidia.com/mig-4g.20gb: 1 # (1)!\n          imagePullPolicy: Always\n      restartPolicy: Always\n
              1. \u901a\u8fc7 nvidia.com/mig-g.gb \u7684\u8d44\u6e90\u7c7b\u578b\u516c\u5f00\u5404\u4e2a MIG \u8bbe\u5907

              \u8fdb\u5165\u5bb9\u5668\u540e\u53ef\u4ee5\u67e5\u770b\u53ea\u4f7f\u7528\u4e86\u4e00\u4e2a MIG \u8bbe\u5907\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/hami.html","title":"\u6784\u5efa vGPU \u663e\u5b58\u8d85\u914d\u955c\u50cf","text":"

              Hami \u9879\u76ee\u4e2d vGPU \u663e\u5b58\u8d85\u914d\u7684\u529f\u80fd\u5df2\u7ecf\u4e0d\u5b58\u5728\uff0c\u76ee\u524d\u4f7f\u7528\u6709\u663e\u5b58\u8d85\u914d\u7684 libvgpu.so \u6587\u4ef6\u91cd\u65b0\u6784\u5efa\u3002

              Dockerfile
              FROM docker.m.daocloud.io/projecthami/hami:v2.3.11\nCOPY libvgpu.so /k8s-vgpu/lib/nvidia/\n

              \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6784\u5efa\u955c\u50cf\uff1a

              docker build -t release.daocloud.io/projecthami/hami:v2.3.11 -f Dockerfile .\n

              \u7136\u540e\u628a\u955c\u50cf push \u5230 release.daocloud.io \u4e2d\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_addon.html","title":"\u5b89\u88c5 NVIDIA vGPU Addon","text":"

              \u5982\u9700\u5c06\u4e00\u5f20 NVIDIA \u865a\u62df\u5316\u6210\u591a\u4e2a\u865a\u62df GPU\uff0c\u5e76\u5c06\u5176\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u4e91\u4e3b\u673a\u6216\u7528\u6237\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 NVIDIA \u7684 vGPU \u80fd\u529b\u3002 \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u5b89\u88c5 vGPU \u63d2\u4ef6\uff0c\u8fd9\u662f\u4f7f\u7528 NVIDIA vGPU \u80fd\u529b\u7684\u524d\u63d0\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_addon.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u53c2\u8003 GPU \u652f\u6301\u77e9\u9635 \u786e\u8ba4\u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361\u3002
              • \u5f53\u524d\u96c6\u7fa4\u5df2\u901a\u8fc7 Operator \u90e8\u7f72 NVIDIA \u9a71\u52a8\uff0c\u5177\u4f53\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5\u3002
              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_addon.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u529f\u80fd\u6a21\u5757\u8def\u5f84\uff1a \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u7ba1\u7406 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f -> \u641c\u7d22 nvidia-vgpu \u3002

              2. \u5728\u5b89\u88c5 vGPU \u7684\u8fc7\u7a0b\u4e2d\u63d0\u4f9b\u4e86\u51e0\u4e2a\u57fa\u672c\u4fee\u6539\u7684\u53c2\u6570\uff0c\u5982\u679c\u9700\u8981\u4fee\u6539\u9ad8\u7ea7\u53c2\u6570\u70b9\u51fb YAML \u5217\u8fdb\u884c\u4fee\u6539\uff1a

                • deviceCoreScaling \uff1aNVIDIA \u88c5\u7f6e\u7b97\u529b\u4f7f\u7528\u6bd4\u4f8b\uff0c\u9884\u8bbe\u503c\u662f 1\u3002\u53ef\u4ee5\u5927\u4e8e 1\uff08\u542f\u7528\u865a\u62df\u7b97\u529b\uff0c\u5b9e\u9a8c\u529f\u80fd\uff09\u3002\u5982\u679c\u6211\u4eec\u914d\u7f6e devicePlugin.deviceCoreScaling \u53c2\u6570\u4e3a S\uff0c\u5728\u90e8\u7f72\u4e86\u6211\u4eec\u88c5\u7f6e\u63d2\u4ef6\u7684 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u8fd9\u5f20 GPU \u5206\u51fa\u7684 vGPU \u5c06\u603b\u5171\u5305\u542b S * 100% \u7b97\u529b\u3002

                • deviceMemoryScaling \uff1aNVIDIA \u88c5\u7f6e\u663e\u5b58\u4f7f\u7528\u6bd4\u4f8b\uff0c\u9884\u8bbe\u503c\u662f 1\u3002\u53ef\u4ee5\u5927\u4e8e 1\uff08\u542f\u7528\u865a\u62df\u663e\u5b58\uff0c\u5b9e\u9a8c\u529f\u80fd\uff09\u3002 \u5bf9\u4e8e\u6709 M \u663e\u5b58\u5927\u5c0f\u7684 NVIDIA GPU\uff0c\u5982\u679c\u6211\u4eec\u914d\u7f6e devicePlugin.deviceMemoryScaling \u53c2\u6570\u4e3a S\uff0c \u5728\u90e8\u7f72\u4e86\u6211\u4eec\u88c5\u7f6e\u63d2\u4ef6\u7684 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u8fd9\u5f20 GPU \u5206\u51fa\u7684 vGPU \u5c06\u603b\u5171\u5305\u542b S * M \u663e\u5b58\u3002

                • deviceSplitCount \uff1a\u6574\u6570\u7c7b\u578b\uff0c\u9884\u8bbe\u503c\u662f 10\u3002GPU \u7684\u5206\u5272\u6570\uff0c\u6bcf\u4e00\u5f20 GPU \u90fd\u4e0d\u80fd\u5206\u914d\u8d85\u8fc7\u5176\u914d\u7f6e\u6570\u76ee\u7684\u4efb\u52a1\u3002 \u82e5\u5176\u914d\u7f6e\u4e3a N \u7684\u8bdd\uff0c\u6bcf\u4e2a GPU \u4e0a\u6700\u591a\u53ef\u4ee5\u540c\u65f6\u5b58\u5728 N \u4e2a\u4efb\u52a1\u3002

                • Resources \uff1a\u5c31\u662f\u5bf9\u5e94 vgpu-device-plugin \u548c vgpu-schedule pod \u7684\u8d44\u6e90\u4f7f\u7528\u91cf\u3002

                • ServiceMonitor \uff1a\u9ed8\u8ba4\u4e0d\u5f00\u542f\uff0c\u5f00\u542f\u540e\u53ef\u524d\u5f80\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u67e5\u770b vGPU \u76f8\u5173\u76d1\u63a7\u3002\u5982\u9700\u5f00\u542f\uff0c\u8bf7\u786e\u4fdd insight-agent \u5df2\u5b89\u88c5\u5e76\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\uff0c\u5426\u5219\u5c06\u5bfc\u81f4 NVIDIA vGPU Addon \u5b89\u88c5\u5931\u8d25\u3002

              3. \u5b89\u88c5\u6210\u529f\u4e4b\u540e\u4f1a\u5728\u6307\u5b9a Namespace \u4e0b\u51fa\u73b0\u5982\u4e0b\u4e24\u4e2a\u7c7b\u578b\u7684 Pod\uff0c\u5373\u8868\u793a NVIDIA vGPU \u63d2\u4ef6\u5df2\u5b89\u88c5\u6210\u529f\uff1a

              \u5b89\u88c5\u6210\u529f\u540e\uff0c\u90e8\u7f72\u5e94\u7528\u53ef\u4f7f\u7528 vGPU \u8d44\u6e90\u3002

              Note

              NVIDIA vGPU Addon \u4e0d\u652f\u6301\u4ece\u8001\u7248\u672c v2.0.0 \u76f4\u63a5\u5347\u7ea7\u4e3a\u6700\u65b0\u7248 v2.0.0+1\uff1b \u5982\u9700\u5347\u7ea7\uff0c\u8bf7\u5378\u8f7d\u8001\u7248\u672c\u540e\u91cd\u65b0\u5b89\u88c5\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_user.html","title":"\u5e94\u7528\u4f7f\u7528 Nvidia vGPU","text":"

              \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528 vGPU \u80fd\u529b\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_user.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361
              • \u5df2\u6210\u529f\u5b89\u88c5 vGPU Addon\uff0c\u8be6\u60c5\u53c2\u8003 GPU Addon \u5b89\u88c5
              • \u5df2\u5b89\u88c5 GPU Operator\uff0c\u5e76\u5df2 \u5173\u95ed Nvidia.DevicePlugin \u80fd\u529b\uff0c\u53ef\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5
              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_user.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_user.html#vgpu","title":"\u754c\u9762\u4f7f\u7528 vGPU","text":"
              1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Nvidia vGPU \u3002

              2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Nvidia vGPU\uff09\u4e4b\u540e\uff0c\u4f1a\u81ea\u52a8\u51fa\u73b0\u5982\u4e0b\u51e0\u4e2a\u53c2\u6570\u9700\u8981\u586b\u5199\uff1a

                • \u7269\u7406\u5361\u6570\u91cf\uff08nvidia.com/vgpu\uff09\uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002
                • GPU \u7b97\u529b\uff08nvidia.com/gpucores\uff09: \u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u7b97\u529b\uff0c\u503c\u8303\u56f4\u4e3a 0-100\uff1b \u5982\u679c\u914d\u7f6e\u4e3a 0\uff0c \u5219\u8ba4\u4e3a\u4e0d\u5f3a\u5236\u9694\u79bb\uff1b\u914d\u7f6e\u4e3a100\uff0c\u5219\u8ba4\u4e3a\u72ec\u5360\u6574\u5f20\u5361\u3002
                • GPU \u663e\u5b58\uff08nvidia.com/gpumem\uff09: \u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u663e\u5b58\uff0c\u503c\u5355\u4f4d\u4e3a MB\uff0c\u6700\u5c0f\u503c\u4e3a 1\uff0c\u6700\u5927\u503c\u4e3a\u6574\u5361\u7684\u663e\u5b58\u503c\u3002

                \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

              "},{"location":"admin/kpanda/gpu/nvidia/vgpu/vgpu_user.html#yaml-vgpu","title":"YAML \u914d\u7f6e\u4f7f\u7528 vGPU","text":"

              \u53c2\u8003\u5982\u4e0b\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\uff0c\u5728\u8d44\u6e90\u7533\u8bf7\u548c\u9650\u5236\u914d\u7f6e\u4e2d\u589e\u52a0 nvidia.com/vgpu: '1' \u53c2\u6570\u6765\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7269\u7406\u5361\u7684\u6570\u91cf\u3002

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: full-vgpu-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: full-vgpu-demo\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: full-vgpu-demo\n    spec:\n      containers:\n        - name: full-vgpu-demo1\n          image: chrstnhntschl/gpu_burn\n          resources:\n            limits:\n              nvidia.com/gpucores: '20'   # \u7533\u8bf7\u6bcf\u5f20\u5361\u5360\u7528 20% \u7684 GPU \u7b97\u529b\n              nvidia.com/gpumem: '200'   # \u7533\u8bf7\u6bcf\u5f20\u5361\u5360\u7528 200MB \u7684\u663e\u5b58\n              nvidia.com/vgpu: '1'   # \u7533\u8bf7GPU\u7684\u6570\u91cf\n          imagePullPolicy: Always\n      restartPolicy: Always\n
              "},{"location":"admin/kpanda/gpu/volcano/drf.html","title":"DRF\uff08Dominant Resource Fairness\uff09 \u8c03\u5ea6\u7b56\u7565","text":"

              DRF \u8c03\u5ea6\u7b56\u7565\u8ba4\u4e3a\u5360\u7528\u8d44\u6e90\u8f83\u5c11\u7684\u4efb\u52a1\u5177\u6709\u66f4\u9ad8\u7684\u4f18\u5148\u7ea7\u3002\u8fd9\u6837\u80fd\u591f\u6ee1\u8db3\u66f4\u591a\u7684\u4f5c\u4e1a\uff0c\u4e0d\u4f1a\u56e0\u4e3a\u4e00\u4e2a\u80d6\u4e1a\u52a1\uff0c \u997f\u6b7b\u5927\u6279\u5c0f\u4e1a\u52a1\u3002DRF \u8c03\u5ea6\u7b97\u6cd5\u80fd\u591f\u786e\u4fdd\u5728\u591a\u79cd\u7c7b\u578b\u8d44\u6e90\u5171\u5b58\u7684\u73af\u5883\u4e0b\uff0c\u5c3d\u53ef\u80fd\u6ee1\u8db3\u5206\u914d\u7684\u516c\u5e73\u539f\u5219\u3002

              "},{"location":"admin/kpanda/gpu/volcano/drf.html#_1","title":"\u4f7f\u7528\u65b9\u5f0f","text":"

              DRF \u8c03\u5ea6\u7b56\u7565\u9ed8\u8ba4\u5df2\u542f\u7528\uff0c\u65e0\u9700\u4efb\u4f55\u914d\u7f6e\u3002

              kubectl -n volcano-system view configmaps volcano-scheduler-configmap\n
              "},{"location":"admin/kpanda/gpu/volcano/drf.html#_2","title":"\u4f7f\u7528\u6848\u4f8b","text":"

              \u5728 AI \u8bad\u7ec3\uff0c\u6216\u5927\u6570\u636e\u8ba1\u7b97\u4e2d\uff0c\u901a\u8fc7\u6709\u9650\u8fd0\u884c\u4f7f\u7528\u8d44\u6e90\u5c11\u7684\u4efb\u52a1\uff0c\u8fd9\u6837\u53ef\u4ee5\u8ba9\u96c6\u7fa4\u8d44\u6e90\u4f7f\u7528\u7387\u66f4\u9ad8\uff0c\u800c\u4e14\u8fd8\u80fd\u907f\u514d\u5c0f\u4efb\u52a1\u88ab\u997f\u6b7b\u3002 \u5982\u4e0b\u521b\u5efa\u4e24\u4e2a Job\uff0c\u4e00\u4e2a\u662f\u5c0f\u8d44\u6e90\u9700\u6c42\uff0c\u4e00\u4e2a\u662f\u5927\u8d44\u6e90\u9700\u6c42\uff0c\u53ef\u4ee5\u770b\u51fa\u6765\u5c0f\u8d44\u6e90\u9700\u6c42\u7684 Job \u4f18\u5148\u8fd0\u884c\u8d77\u6765\u3002

              cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: small-resource  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: small-resource  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"1\"  \n          restartPolicy: OnFailure  \n---  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: large-resource  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: large-resource  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"2\"  \n          restartPolicy: OnFailure  \nEOF\n
              "},{"location":"admin/kpanda/gpu/volcano/numa.html","title":"NUMA \u4eb2\u548c\u6027\u8c03\u5ea6","text":"

              NUMA \u8282\u70b9\u662f Non-Uniform Memory Access\uff08\u975e\u7edf\u4e00\u5185\u5b58\u8bbf\u95ee\uff09\u67b6\u6784\u4e2d\u7684\u4e00\u4e2a\u57fa\u672c\u7ec4\u6210\u5355\u5143\uff0c\u4e00\u4e2a Node \u8282\u70b9\u662f\u591a\u4e2a NUMA \u8282\u70b9\u7684\u96c6\u5408\uff0c \u5728\u591a\u4e2a NUMA \u8282\u70b9\u4e4b\u95f4\u8fdb\u884c\u5185\u5b58\u8bbf\u95ee\u65f6\u4f1a\u4ea7\u751f\u5ef6\u8fdf\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u901a\u8fc7\u4f18\u5316\u4efb\u52a1\u8c03\u5ea6\u548c\u5185\u5b58\u5206\u914d\u7b56\u7565\uff0c\u6765\u63d0\u9ad8\u5185\u5b58\u8bbf\u95ee\u6548\u7387\u548c\u6574\u4f53\u6027\u80fd\u3002

              "},{"location":"admin/kpanda/gpu/volcano/numa.html#_1","title":"\u4f7f\u7528\u573a\u666f","text":"

              Numa \u4eb2\u548c\u6027\u8c03\u5ea6\u7684\u5e38\u89c1\u573a\u666f\u662f\u90a3\u4e9b\u5bf9 CPU \u53c2\u6570\u654f\u611f/\u8c03\u5ea6\u5ef6\u8fdf\u654f\u611f\u7684\u8ba1\u7b97\u5bc6\u96c6\u578b\u4f5c\u4e1a\u3002\u5982\u79d1\u5b66\u8ba1\u7b97\u3001\u89c6\u9891\u89e3\u7801\u3001\u52a8\u6f2b\u52a8\u753b\u6e32\u67d3\u3001\u5927\u6570\u636e\u79bb\u7ebf\u5904\u7406\u7b49\u5177\u4f53\u573a\u666f\u3002

              "},{"location":"admin/kpanda/gpu/volcano/numa.html#_2","title":"\u8c03\u5ea6\u7b56\u7565","text":"

              Pod \u8c03\u5ea6\u65f6\u53ef\u4ee5\u91c7\u7528\u7684 NUMA \u653e\u7f6e\u7b56\u7565\uff0c\u5177\u4f53\u7b56\u7565\u5bf9\u5e94\u7684\u8c03\u5ea6\u884c\u4e3a\u8bf7\u53c2\u89c1 Pod \u8c03\u5ea6\u884c\u4e3a\u8bf4\u660e\u3002

              • single-numa-node\uff1aPod \u8c03\u5ea6\u65f6\u4f1a\u9009\u62e9\u62d3\u6251\u7ba1\u7406\u7b56\u7565\u5df2\u7ecf\u8bbe\u7f6e\u4e3a single-numa-node \u7684\u8282\u70b9\u6c60\u4e2d\u7684\u8282\u70b9\uff0c\u4e14 CPU \u9700\u8981\u653e\u7f6e\u5728\u76f8\u540c NUMA \u4e0b\uff0c\u5982\u679c\u8282\u70b9\u6c60\u4e2d\u6ca1\u6709\u6ee1\u8db3\u6761\u4ef6\u7684\u8282\u70b9\uff0cPod \u5c06\u65e0\u6cd5\u88ab\u8c03\u5ea6\u3002
              • restricted\uff1aPod \u8c03\u5ea6\u65f6\u4f1a\u9009\u62e9\u62d3\u6251\u7ba1\u7406\u7b56\u7565\u5df2\u7ecf\u8bbe\u7f6e\u4e3a restricted \u8282\u70b9\u6c60\u7684\u8282\u70b9\uff0c\u4e14 CPU \u9700\u8981\u653e\u7f6e\u5728\u76f8\u540c\u7684 NUMA \u96c6\u5408\u4e0b\uff0c\u5982\u679c\u8282\u70b9\u6c60\u4e2d\u6ca1\u6709\u6ee1\u8db3\u6761\u4ef6\u7684\u8282\u70b9\uff0cPod \u5c06\u65e0\u6cd5\u88ab\u8c03\u5ea6\u3002
              • best-effort\uff1aPod \u8c03\u5ea6\u65f6\u4f1a\u9009\u62e9\u62d3\u6251\u7ba1\u7406\u7b56\u7565\u5df2\u7ecf\u8bbe\u7f6e\u4e3a best-effort \u8282\u70b9\u6c60\u7684\u8282\u70b9\uff0c\u4e14\u5c3d\u91cf\u5c06 CPU \u653e\u7f6e\u5728\u76f8\u540c NUMA \u4e0b\uff0c\u5982\u679c\u6ca1\u6709\u8282\u70b9\u6ee1\u8db3\u8fd9\u4e00\u6761\u4ef6\uff0c\u5219\u9009\u62e9\u6700\u4f18\u8282\u70b9\u8fdb\u884c\u653e\u7f6e\u3002
              "},{"location":"admin/kpanda/gpu/volcano/numa.html#_3","title":"\u8c03\u5ea6\u539f\u7406","text":"

              \u5f53Pod\u8bbe\u7f6e\u4e86\u62d3\u6251\u7b56\u7565\u65f6\uff0cVolcano \u4f1a\u6839\u636e Pod \u8bbe\u7f6e\u7684\u62d3\u6251\u7b56\u7565\u9884\u6d4b\u5339\u914d\u7684\u8282\u70b9\u5217\u8868\u3002 \u8c03\u5ea6\u8fc7\u7a0b\u5982\u4e0b\uff1a

              1. \u6839\u636e Pod \u8bbe\u7f6e\u7684 Volcano \u62d3\u6251\u7b56\u7565\uff0c\u7b5b\u9009\u5177\u6709\u76f8\u540c\u7b56\u7565\u7684\u8282\u70b9\u3002

              2. \u5728\u8bbe\u7f6e\u4e86\u76f8\u540c\u7b56\u7565\u7684\u8282\u70b9\u4e2d\uff0c\u7b5b\u9009 CPU \u62d3\u6251\u6ee1\u8db3\u8be5\u7b56\u7565\u8981\u6c42\u7684\u8282\u70b9\u8fdb\u884c\u8c03\u5ea6\u3002

              Pod \u53ef\u914d\u7f6e\u7684\u62d3\u6251\u7b56\u7565 1. \u6839\u636e Pod \u8bbe\u7f6e\u7684\u62d3\u6251\u7b56\u7565\uff0c\u7b5b\u9009\u53ef\u8c03\u5ea6\u7684\u8282\u70b9 2. \u8fdb\u4e00\u6b65\u7b5b\u9009 CPU \u62d3\u6251\u6ee1\u8db3\u7b56\u7565\u7684\u8282\u70b9\u8fdb\u884c\u8c03\u5ea6 none \u9488\u5bf9\u914d\u7f6e\u4e86\u4ee5\u4e0b\u51e0\u79cd\u62d3\u6251\u7b56\u7565\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u65f6\u5747\u65e0\u7b5b\u9009\u884c\u4e3a\u3002none\uff1a\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u53ef\u8c03\u5ea6 - best-effort \u7b5b\u9009\u62d3\u6251\u7b56\u7565\u540c\u6837\u4e3a\u201cbest-effort\u201d\u7684\u8282\u70b9\uff1anone\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u4e0d\u53ef\u8c03\u5ea6 \u5c3d\u53ef\u80fd\u6ee1\u8db3\u7b56\u7565\u8981\u6c42\u8fdb\u884c\u8c03\u5ea6\uff1a\u4f18\u5148\u8c03\u5ea6\u81f3\u5355 NUMA \u8282\u70b9\uff0c\u5982\u679c\u5355 NUMA \u8282\u70b9\u65e0\u6cd5\u6ee1\u8db3 CPU \u7533\u8bf7\u503c\uff0c\u5141\u8bb8\u8c03\u5ea6\u81f3\u591a\u4e2a NUMA \u8282\u70b9\u3002 restricted \u7b5b\u9009\u62d3\u6251\u7b56\u7565\u540c\u6837\u4e3a\u201crestricted\u201d\u7684\u8282\u70b9\uff1anone\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u4e0d\u53ef\u8c03\u5ea6 \u4e25\u683c\u9650\u5236\u7684\u8c03\u5ea6\u7b56\u7565\uff1a\u5355 NUMA \u8282\u70b9\u7684CPU\u5bb9\u91cf\u4e0a\u9650\u5927\u4e8e\u7b49\u4e8e CPU \u7684\u7533\u8bf7\u503c\u65f6\uff0c\u4ec5\u5141\u8bb8\u8c03\u5ea6\u81f3\u5355 NUMA \u8282\u70b9\u3002\u6b64\u65f6\u5982\u679c\u5355 NUMA \u8282\u70b9\u5269\u4f59\u7684 CPU \u53ef\u4f7f\u7528\u91cf\u4e0d\u8db3\uff0c\u5219 Pod \u65e0\u6cd5\u8c03\u5ea6\u3002\u5355 NUMA \u8282\u70b9\u7684 CPU \u5bb9\u91cf\u4e0a\u9650\u5c0f\u4e8e CPU \u7684\u7533\u8bf7\u503c\u65f6\uff0c\u53ef\u5141\u8bb8\u8c03\u5ea6\u81f3\u591a\u4e2a NUMA \u8282\u70b9\u3002 single-numa-node \u7b5b\u9009\u62d3\u6251\u7b56\u7565\u540c\u6837\u4e3a\u201csingle-numa-node\u201d\u7684\u8282\u70b9\uff1anone\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u53ef\u8c03\u5ea6 \u4ec5\u5141\u8bb8\u8c03\u5ea6\u81f3\u5355 NUMA \u8282\u70b9\u3002"},{"location":"admin/kpanda/gpu/volcano/numa.html#numa_1","title":"\u914d\u7f6e NUMA \u4eb2\u548c\u8c03\u5ea6\u7b56\u7565","text":"
              1. \u5728 Job \u4e2d\u914d\u7f6e policies

                task: \n  - replicas: 1 \n    name: \"test-1\" \n    topologyPolicy: single-numa-node \n  - replicas: 1 \n    name: \"test-2\" \n    topologyPolicy: best-effort \n
              2. \u4fee\u6539 kubelet \u7684\u8c03\u5ea6\u7b56\u7565\uff0c\u8bbe\u7f6e --topology-manager-policy \u53c2\u6570\uff0c\u652f\u6301\u7684\u7b56\u7565\u6709\u56db\u79cd\uff1a

                • none\uff08\u9ed8\u8ba4\uff09
                • best-effort
                • restricted
                • single-numa-node
              "},{"location":"admin/kpanda/gpu/volcano/numa.html#_4","title":"\u4f7f\u7528\u6848\u4f8b","text":"
              1. \u793a\u4f8b\u4e00\uff1a\u5728\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u914d\u7f6e NUMA \u4eb2\u548c\u6027\u3002

                kind: Deployment  \napiVersion: apps/v1  \nmetadata:  \n  name: numa-tset  \nspec:  \n  replicas: 1  \n  selector:  \n    matchLabels:  \n      app: numa-tset  \n  template:  \n    metadata:  \n      labels:  \n        app: numa-tset  \n      annotations:  \n        volcano.sh/numa-topology-policy: single-numa-node    # set the topology policy  \n    spec:  \n      containers:  \n        - name: container-1  \n          image: nginx:alpine  \n          resources:  \n            requests:  \n              cpu: 2           # \u5fc5\u987b\u4e3a\u6574\u6570\uff0c\u4e14\u9700\u8981\u4e0elimits\u4e2d\u4e00\u81f4  \n              memory: 2048Mi  \n            limits:  \n              cpu: 2           # \u5fc5\u987b\u4e3a\u6574\u6570\uff0c\u4e14\u9700\u8981\u4e0erequests\u4e2d\u4e00\u81f4  \n              memory: 2048Mi  \n      imagePullSecrets:  \n      - name: default-secret\n
              2. \u793a\u4f8b\u4e8c\uff1a\u521b\u5efa\u4e00\u4e2a Volcano Job\uff0c\u5e76\u4f7f\u7528 NUMA \u4eb2\u548c\u6027\u3002

                apiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: vj-test  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 1  \n  tasks:  \n    - replicas: 1  \n      name: \"test\"  \n      topologyPolicy: best-effort   # set the topology policy for task  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                limits:  \n                  cpu: 20  \n                  memory: \"100Mi\"  \n          restartPolicy: OnFailure\n
              "},{"location":"admin/kpanda/gpu/volcano/numa.html#numa_2","title":"NUMA \u8c03\u5ea6\u5206\u6790","text":"

              \u5047\u8bbe NUMA \u8282\u70b9\u60c5\u51b5\u5982\u4e0b\uff1a

              \u5de5\u4f5c\u8282\u70b9 \u8282\u70b9\u7b56\u7565\u62d3\u6251\u7ba1\u7406\u5668\u7b56\u7565 NUMA \u8282\u70b9 0 \u4e0a\u7684\u53ef\u5206\u914d CPU NUMA \u8282\u70b9 1 \u4e0a\u7684\u53ef\u5206\u914d CPU node-1 single-numa-node 16U 16U node-2 best-effort 16U 16U node-3 best-effort 20U 20U
              • \u793a\u4f8b\u4e00\u4e2d\uff0cPod \u7684 CPU \u7533\u8bf7\u503c\u4e3a 2U\uff0c\u8bbe\u7f6e\u62d3\u6251\u7b56\u7565\u4e3a\u201csingle-numa-node\u201d\uff0c\u56e0\u6b64\u4f1a\u88ab\u8c03\u5ea6\u5230\u76f8\u540c\u7b56\u7565\u7684 node-1\u3002
              • \u793a\u4f8b\u4e8c\u4e2d\uff0cPod \u7684 CPU \u7533\u8bf7\u503c\u4e3a20U\uff0c\u8bbe\u7f6e\u62d3\u6251\u7b56\u7565\u4e3a\u201cbest-effort\u201d\uff0c\u5b83\u5c06\u88ab\u8c03\u5ea6\u5230 node-3\uff0c \u56e0\u4e3a node-3 \u53ef\u4ee5\u5728\u5355\u4e2a NUMA \u8282\u70b9\u4e0a\u5206\u914d Pod \u7684 CPU \u8bf7\u6c42\uff0c\u800c node-2 \u9700\u8981\u5728\u4e24\u4e2a NUMA \u8282\u70b9\u4e0a\u6267\u884c\u6b64\u64cd\u4f5c\u3002
              "},{"location":"admin/kpanda/gpu/volcano/numa.html#cpu","title":"\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u6982\u51b5","text":"

              \u60a8\u53ef\u4ee5\u901a\u8fc7 lscpu \u547d\u4ee4\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u6982\u51b5\uff1a

              lscpu \n... \nCPU(s): 32 \nNUMA node(s): 2 \nNUMA node0 CPU(s): 0-15 \nNUMA node1 CPU(s): 16-31\n
              "},{"location":"admin/kpanda/gpu/volcano/numa.html#cpu_1","title":"\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u5206\u914d","text":"

              \u7136\u540e\u67e5\u770b NUMA \u8282\u70b9\u4f7f\u7528\u60c5\u51b5\uff1a

              # \u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u5206\u914d\ncat /var/lib/kubelet/cpu_manager_state\n{\"policyName\":\"static\",\"defaultCpuSet\":\"0,10-15,25-31\",\"entries\":{\"777870b5-c64f-42f5-9296-688b9dc212ba\":{\"container-1\":\"16-24\"},\"fb15e10a-b6a5-4aaa-8fcd-76c1aa64e6fd\":{\"container-1\":\"1-9\"}},\"checksum\":318470969}\n

              \u4ee5\u4e0a\u793a\u4f8b\u4e2d\u8868\u793a\uff0c\u8282\u70b9\u4e0a\u8fd0\u884c\u4e86\u4e24\u4e2a\u5bb9\u5668\uff0c\u4e00\u4e2a\u5360\u7528\u4e86 NUMA node0 \u76841-9 \u6838\uff0c\u53e6\u4e00\u4e2a\u5360\u7528\u4e86 NUMA node1 \u7684 16-24 \u6838\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano-gang-scheduler.html","title":"\u4f7f\u7528 Volcano \u7684 Gang Scheduler","text":"

              Gang \u8c03\u5ea6\u7b56\u7565\u662f volcano-scheduler \u7684\u6838\u5fc3\u8c03\u5ea6\u7b97\u6cd5\u4e4b\u4e00\uff0c\u5b83\u6ee1\u8db3\u4e86\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u7684 \u201cAll or nothing\u201d \u7684\u8c03\u5ea6\u9700\u6c42\uff0c \u907f\u514d Pod \u7684\u4efb\u610f\u8c03\u5ea6\u5bfc\u81f4\u96c6\u7fa4\u8d44\u6e90\u7684\u6d6a\u8d39\u3002\u5177\u4f53\u7b97\u6cd5\u662f\uff0c\u89c2\u5bdf Job \u4e0b\u7684 Pod \u5df2\u8c03\u5ea6\u6570\u91cf\u662f\u5426\u6ee1\u8db3\u4e86\u6700\u5c0f\u8fd0\u884c\u6570\u91cf\uff0c \u5f53 Job \u7684\u6700\u5c0f\u8fd0\u884c\u6570\u91cf\u5f97\u5230\u6ee1\u8db3\u65f6\uff0c\u4e3a Job \u4e0b\u7684\u6240\u6709 Pod \u6267\u884c\u8c03\u5ea6\u52a8\u4f5c\uff0c\u5426\u5219\uff0c\u4e0d\u6267\u884c\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano-gang-scheduler.html#_1","title":"\u4f7f\u7528\u573a\u666f","text":"

              \u57fa\u4e8e\u5bb9\u5668\u7ec4\u6982\u5ff5\u7684 Gang \u8c03\u5ea6\u7b97\u6cd5\u5341\u5206\u9002\u5408\u9700\u8981\u591a\u8fdb\u7a0b\u534f\u4f5c\u7684\u573a\u666f\u3002AI \u573a\u666f\u5f80\u5f80\u5305\u542b\u590d\u6742\u7684\u6d41\u7a0b\uff0c Data Ingestion\u3001Data Analysts\u3001Data Splitting\u3001Trainer\u3001Serving\u3001Logging \u7b49\uff0c \u9700\u8981\u4e00\u7ec4\u5bb9\u5668\u8fdb\u884c\u534f\u540c\u5de5\u4f5c\uff0c\u5c31\u5f88\u9002\u5408\u57fa\u4e8e\u5bb9\u5668\u7ec4\u7684 Gang \u8c03\u5ea6\u7b56\u7565\u3002 MPI \u8ba1\u7b97\u6846\u67b6\u4e0b\u7684\u591a\u7ebf\u7a0b\u5e76\u884c\u8ba1\u7b97\u901a\u4fe1\u573a\u666f\uff0c\u7531\u4e8e\u9700\u8981\u4e3b\u4ece\u8fdb\u7a0b\u534f\u540c\u5de5\u4f5c\uff0c\u4e5f\u975e\u5e38\u9002\u5408\u4f7f\u7528 Gang \u8c03\u5ea6\u7b56\u7565\u3002 \u5bb9\u5668\u7ec4\u4e0b\u7684\u5bb9\u5668\u9ad8\u5ea6\u76f8\u5173\u4e5f\u53ef\u80fd\u5b58\u5728\u8d44\u6e90\u4e89\u62a2\uff0c\u6574\u4f53\u8c03\u5ea6\u5206\u914d\uff0c\u80fd\u591f\u6709\u6548\u89e3\u51b3\u6b7b\u9501\u3002

              \u5728\u96c6\u7fa4\u8d44\u6e90\u4e0d\u8db3\u7684\u573a\u666f\u4e0b\uff0cGang \u7684\u8c03\u5ea6\u7b56\u7565\u5bf9\u4e8e\u96c6\u7fa4\u8d44\u6e90\u7684\u5229\u7528\u7387\u7684\u63d0\u5347\u662f\u975e\u5e38\u660e\u663e\u7684\u3002 \u6bd4\u5982\u96c6\u7fa4\u73b0\u5728\u53ea\u80fd\u5bb9\u7eb3 2 \u4e2a Pod\uff0c\u73b0\u5728\u8981\u6c42\u6700\u5c0f\u8c03\u5ea6\u7684 Pod \u6570\u4e3a 3\u3002 \u90a3\u73b0\u5728\u8fd9\u4e2a Job \u7684\u6240\u6709\u7684 Pod \u90fd\u4f1a pending\uff0c\u76f4\u5230\u96c6\u7fa4\u80fd\u591f\u5bb9\u7eb3 3 \u4e2a Pod\uff0cPod \u624d\u4f1a\u88ab\u8c03\u5ea6\u3002 \u6709\u6548\u9632\u6b62\u8c03\u5ea6\u90e8\u5206 Pod\uff0c\u4e0d\u6ee1\u8db3\u8981\u6c42\u53c8\u5360\u7528\u4e86\u8d44\u6e90\uff0c\u4f7f\u5176\u4ed6 Job \u65e0\u6cd5\u8fd0\u884c\u7684\u60c5\u51b5\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano-gang-scheduler.html#_2","title":"\u6982\u5ff5\u8bf4\u660e","text":"

              Gang Scheduler \u662f Volcano \u7684\u6838\u5fc3\u7684\u8c03\u5ea6\u63d2\u4ef6\uff0c\u5b89\u88c5 Volcano \u540e\u9ed8\u8ba4\u5c31\u5f00\u542f\u4e86\u3002 \u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\u53ea\u9700\u8981\u6307\u5b9a\u8c03\u5ea6\u5668\u7684\u540d\u79f0\u4e3a Volcano \u5373\u53ef\u3002

              Volcano \u662f\u4ee5 PodGroup \u4e3a\u5355\u4f4d\u8fdb\u884c\u8c03\u5ea6\u7684\uff0c\u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u5e76\u4e0d\u9700\u8981\u624b\u52a8\u521b\u5efa PodGroup \u8d44\u6e90\uff0c Volcano \u4f1a\u6839\u636e\u5de5\u4f5c\u8d1f\u8f7d\u7684\u4fe1\u606f\u81ea\u52a8\u521b\u5efa\u3002\u4e0b\u9762\u662f\u4e00\u4e2a PodGroup \u7684\u793a\u4f8b\uff1a

              apiVersion: scheduling.volcano.sh/v1beta1\nkind: PodGroup\nmetadata:\n  name: test\n  namespace: default\nspec:\n  minMember: 1  # (1)!\n  minResources:  # (2)!\n    cpu: \"3\"\n    memory: \"2048Mi\"\n  priorityClassName: high-prority # (3)!\n  queue: default # (4)!\n
              1. \u8868\u793a\u8be5 PodGroup \u4e0b \u6700\u5c11 \u9700\u8981\u8fd0\u884c\u7684 Pod \u6216\u4efb\u52a1\u6570\u91cf\u3002 \u5982\u679c\u96c6\u7fa4\u8d44\u6e90\u4e0d\u6ee1\u8db3 miniMember \u6570\u91cf\u4efb\u52a1\u7684\u8fd0\u884c\u9700\u6c42\uff0c\u8c03\u5ea6\u5668\u5c06\u4e0d\u4f1a\u8c03\u5ea6\u4efb\u4f55\u4e00\u4e2a\u8be5 PodGroup \u5185\u7684\u4efb\u52a1\u3002
              2. \u8868\u793a\u8fd0\u884c\u8be5 PodGroup \u6240\u9700\u8981\u7684\u6700\u5c11\u8d44\u6e90\u3002\u5f53\u96c6\u7fa4\u53ef\u5206\u914d\u8d44\u6e90\u4e0d\u6ee1\u8db3 minResources \u65f6\uff0c\u8c03\u5ea6\u5668\u5c06\u4e0d\u4f1a\u8c03\u5ea6\u4efb\u4f55\u4e00\u4e2a\u8be5 PodGroup \u5185\u7684\u4efb\u52a1\u3002
              3. \u8868\u793a\u8be5 PodGroup \u7684\u4f18\u5148\u7ea7\uff0c\u7528\u4e8e\u8c03\u5ea6\u5668\u4e3a\u8be5 queue \u4e2d\u6240\u6709 PodGroup \u8fdb\u884c\u8c03\u5ea6\u65f6\u8fdb\u884c\u6392\u5e8f\u3002 system-node-critical \u548c system-cluster-critical \u662f 2 \u4e2a\u9884\u7559\u7684\u503c\uff0c\u8868\u793a\u6700\u9ad8\u4f18\u5148\u7ea7\u3002\u4e0d\u7279\u522b\u6307\u5b9a\u65f6\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u4f18\u5148\u7ea7\u6216 zero \u4f18\u5148\u7ea7\u3002
              4. \u8868\u793a\u8be5 PodGroup \u6240\u5c5e\u7684 queue\u3002queue \u5fc5\u987b\u63d0\u524d\u5df2\u521b\u5efa\u4e14\u72b6\u6001\u4e3a open\u3002
              "},{"location":"admin/kpanda/gpu/volcano/volcano-gang-scheduler.html#_3","title":"\u4f7f\u7528\u6848\u4f8b","text":"

              \u5728 MPI \u8ba1\u7b97\u6846\u67b6\u4e0b\u7684\u591a\u7ebf\u7a0b\u5e76\u884c\u8ba1\u7b97\u901a\u4fe1\u573a\u666f\u4e2d\uff0c\u6211\u4eec\u8981\u786e\u4fdd\u6240\u6709\u7684 Pod \u90fd\u80fd\u8c03\u5ea6\u6210\u529f\u624d\u80fd\u4fdd\u8bc1\u4efb\u52a1\u6b63\u5e38\u5b8c\u6210\u3002 \u8bbe\u7f6e minAvailable \u4e3a 4\uff0c\u8868\u793a\u8981\u6c42 1 \u4e2a mpimaster \u548c 3 \u4e2a mpiworker \u80fd\u8fd0\u884c\u3002

              apiVersion: batch.volcano.sh/v1alpha1\nkind: Job\nmetadata:\n  name: lm-mpi-job\n  labels:\n    \"volcano.sh/job-type\": \"MPI\"\nspec:\n  minAvailable: 4\n  schedulerName: volcano\n  plugins:\n    ssh: []\n    svc: []\n  policies:\n    - event: PodEvicted\n      action: RestartJob\n  tasks:\n    - replicas: 1\n      name: mpimaster\n      policies:\n        - event: TaskCompleted\n          action: CompleteJob\n      template:\n        spec:\n          containers:\n            - command:\n                - /bin/sh\n                - -c\n                - |\n                  MPI_HOST=`cat /etc/volcano/mpiworker.host | tr \"\\n\" \",\"`;\n                  mkdir -p /var/run/sshd; /usr/sbin/sshd;\n                  mpiexec --allow-run-as-root --host ${MPI_HOST} -np 3 mpi_hello_world;\n              image: docker.m.daocloud.io/volcanosh/example-mpi:0.0.1\n              name: mpimaster\n              ports:\n                - containerPort: 22\n                  name: mpijob-port\n              workingDir: /home\n              resources:\n                requests:\n                  cpu: \"500m\"\n                limits:\n                  cpu: \"500m\"\n          restartPolicy: OnFailure\n          imagePullSecrets:\n            - name: default-secret\n    - replicas: 3\n      name: mpiworker\n      template:\n        spec:\n          containers:\n            - command:\n                - /bin/sh\n                - -c\n                - |\n                  mkdir -p /var/run/sshd; /usr/sbin/sshd -D;\n              image: docker.m.daocloud.io/volcanosh/example-mpi:0.0.1\n              name: mpiworker\n              ports:\n                - containerPort: 22\n                  name: mpijob-port\n              workingDir: /home\n              resources:\n                requests:\n                  cpu: \"1000m\"\n                limits:\n                  cpu: \"1000m\"\n          restartPolicy: OnFailure\n          imagePullSecrets:\n            - name: default-secret\n

              \u751f\u6210 PodGroup \u7684\u8d44\u6e90\uff1a

              apiVersion: scheduling.volcano.sh/v1beta1\nkind: PodGroup\nmetadata:\n  annotations:\n  creationTimestamp: \"2024-05-28T09:18:50Z\"\n  generation: 5\n  labels:\n    volcano.sh/job-type: MPI\n  name: lm-mpi-job-9c571015-37c7-4a1a-9604-eaa2248613f2\n  namespace: default\n  ownerReferences:\n  - apiVersion: batch.volcano.sh/v1alpha1\n    blockOwnerDeletion: true\n    controller: true\n    kind: Job\n    name: lm-mpi-job\n    uid: 9c571015-37c7-4a1a-9604-eaa2248613f2\n  resourceVersion: \"25173454\"\n  uid: 7b04632e-7cff-4884-8e9a-035b7649d33b\nspec:\n  minMember: 4\n  minResources:\n    count/pods: \"4\"\n    cpu: 3500m\n    limits.cpu: 3500m\n    pods: \"4\"\n    requests.cpu: 3500m\n  minTaskMember:\n    mpimaster: 1\n    mpiworker: 3\n  queue: default\nstatus:\n  conditions:\n  - lastTransitionTime: \"2024-05-28T09:19:01Z\"\n    message: '3/4 tasks in gang unschedulable: pod group is not ready, 1 Succeeded,\n      3 Releasing, 4 minAvailable'\n    reason: NotEnoughResources\n    status: \"True\"\n    transitionID: f875efa5-0358-4363-9300-06cebc0e7466\n    type: Unschedulable\n  - lastTransitionTime: \"2024-05-28T09:18:53Z\"\n    reason: tasks in gang are ready to be scheduled\n    status: \"True\"\n    transitionID: 5a7708c8-7d42-4c33-9d97-0581f7c06dab\n    type: Scheduled\n  phase: Pending\n  succeeded: 1\n

              \u4ece PodGroup \u53ef\u4ee5\u770b\u51fa\uff0c\u901a\u8fc7 ownerReferences \u5173\u8054\u5230\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5e76\u8bbe\u7f6e\u6700\u5c0f\u8fd0\u884c\u7684 Pod \u6570\u4e3a 4\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_binpack.html","title":"\u4f7f\u7528 Volcano Binpack \u8c03\u5ea6\u7b56\u7565","text":"

              Binpack \u8c03\u5ea6\u7b97\u6cd5\u7684\u76ee\u6807\u662f\u5c3d\u91cf\u628a\u5df2\u88ab\u5360\u7528\u7684\u8282\u70b9\u586b\u6ee1\uff08\u5c3d\u91cf\u4e0d\u5f80\u7a7a\u767d\u8282\u70b9\u5206\u914d\uff09\u3002\u5177\u4f53\u5b9e\u73b0\u4e0a\uff0cBinpack \u8c03\u5ea6\u7b97\u6cd5\u4f1a\u7ed9\u6295\u9012\u7684\u8282\u70b9\u6253\u5206\uff0c \u5206\u6570\u8d8a\u9ad8\u8868\u793a\u8282\u70b9\u7684\u8d44\u6e90\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u901a\u8fc7\u5c3d\u53ef\u80fd\u586b\u6ee1\u8282\u70b9\uff0c\u5c06\u5e94\u7528\u8d1f\u8f7d\u9760\u62e2\u5728\u90e8\u5206\u8282\u70b9\uff0c\u8fd9\u79cd\u8c03\u5ea6\u7b97\u6cd5\u80fd\u591f\u5c3d\u53ef\u80fd\u51cf\u5c0f\u8282\u70b9\u5185\u7684\u788e\u7247\uff0c \u5728\u7a7a\u95f2\u7684\u673a\u5668\u4e0a\u4e3a\u7533\u8bf7\u4e86\u66f4\u5927\u8d44\u6e90\u8bf7\u6c42\u7684 Pod \u9884\u7559\u8db3\u591f\u7684\u8d44\u6e90\u7a7a\u95f4\uff0c\u4f7f\u96c6\u7fa4\u4e0b\u7a7a\u95f2\u8d44\u6e90\u5f97\u5230\u6700\u5927\u5316\u7684\u5229\u7528\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_binpack.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"

              \u9884\u5148\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0a\u5b89\u88c5 Volcano \u7ec4\u4ef6\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_binpack.html#binpack","title":"Binpack \u7b97\u6cd5\u539f\u7406","text":"

              Binpack \u5728\u5bf9\u4e00\u4e2a\u8282\u70b9\u6253\u5206\u65f6\uff0c\u4f1a\u6839\u636e Binpack \u63d2\u4ef6\u81ea\u8eab\u6743\u91cd\u548c\u5404\u8d44\u6e90\u8bbe\u7f6e\u7684\u6743\u91cd\u503c\u7efc\u5408\u6253\u5206\u3002 \u9996\u5148\uff0c\u5bf9 Pod \u8bf7\u6c42\u8d44\u6e90\u4e2d\u7684\u6bcf\u7c7b\u8d44\u6e90\u4f9d\u6b21\u6253\u5206\uff0c\u4ee5 CPU \u4e3a\u4f8b\uff0cCPU \u8d44\u6e90\u5728\u5f85\u8c03\u5ea6\u8282\u70b9\u7684\u5f97\u5206\u4fe1\u606f\u5982\u4e0b\uff1a

              CPU.weight * (request + used) / allocatable\n

              \u5373 CPU \u6743\u91cd\u503c\u8d8a\u9ad8\uff0c\u5f97\u5206\u8d8a\u9ad8\uff0c\u8282\u70b9\u8d44\u6e90\u4f7f\u7528\u91cf\u8d8a\u6ee1\uff0c\u5f97\u5206\u8d8a\u9ad8\u3002Memory\u3001GPU \u7b49\u8d44\u6e90\u539f\u7406\u7c7b\u4f3c\u3002\u5176\u4e2d\uff1a

              • CPU.weight \u4e3a\u7528\u6237\u8bbe\u7f6e\u7684 CPU \u6743\u91cd
              • request \u4e3a\u5f53\u524d Pod \u8bf7\u6c42\u7684 CPU \u8d44\u6e90\u91cf
              • used \u4e3a\u5f53\u524d\u8282\u70b9\u5df2\u7ecf\u5206\u914d\u4f7f\u7528\u7684 CPU \u91cf
              • allocatable \u4e3a\u5f53\u524d\u8282\u70b9 CPU \u53ef\u7528\u603b\u91cf

              \u901a\u8fc7 Binpack \u7b56\u7565\u7684\u8282\u70b9\u603b\u5f97\u5206\u5982\u4e0b\uff1a

              binpack.weight - (CPU.score + Memory.score + GPU.score) / (CPU.weight + Memory.weight + GPU.weight) - 100\n

              \u5373 Binpack \u63d2\u4ef6\u7684\u6743\u91cd\u503c\u8d8a\u5927\uff0c\u5f97\u5206\u8d8a\u9ad8\uff0c\u67d0\u7c7b\u8d44\u6e90\u7684\u6743\u91cd\u8d8a\u5927\uff0c\u8be5\u8d44\u6e90\u5728\u6253\u5206\u65f6\u7684\u5360\u6bd4\u8d8a\u5927\u3002\u5176\u4e2d\uff1a

              • binpack.weight \u4e3a\u7528\u6237\u8bbe\u7f6e\u7684\u88c5\u7bb1\u8c03\u5ea6\u7b56\u7565\u6743\u91cd
              • CPU.score \u4e3a CPU \u8d44\u6e90\u5f97\u5206\uff0cCPU.weight \u4e3a CPU \u6743\u91cd
              • Memory.score \u4e3a Memory \u8d44\u6e90\u5f97\u5206\uff0cMemory.weight \u4e3a Memory \u6743\u91cd
              • GPU.score \u4e3a GPU \u8d44\u6e90\u5f97\u5206\uff0cGPU.weight \u4e3a GPU \u6743\u91cd

              \u5982\u56fe\u6240\u793a\uff0c\u96c6\u7fa4\u4e2d\u5b58\u5728\u4e24\u4e2a\u8282\u70b9\uff0c\u5206\u522b\u4e3a Node1 \u548c Node 2\uff0c\u5728\u8c03\u5ea6 Pod \u65f6\uff0cBinpack \u7b56\u7565\u5bf9\u4e24\u4e2a\u8282\u70b9\u5206\u522b\u6253\u5206\u3002 \u5047\u8bbe\u96c6\u7fa4\u4e2d CPU.weight \u914d\u7f6e\u4e3a 1\uff0cMemory.weight \u914d\u7f6e\u4e3a 1\uff0cGPU.weight \u914d\u7f6e\u4e3a 2\uff0cbinpack.weight \u914d\u7f6e\u4e3a 5\u3002

              1. Binpack \u5bf9 Node 1 \u7684\u8d44\u6e90\u6253\u5206\uff0c\u5404\u8d44\u6e90\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

                • CPU Score\uff1a

                  CPU.weight - (request + used) / allocatable = 1 - (2 + 4) / 8 = 0.75

                • Memory Score\uff1a

                  Memory.weight - (request + used) / allocatable = 1 - (4 + 8) / 16 = 0.75

                • GPU Score\uff1a

                  GPU.weight - (request + used) / allocatable = 2 - (4 + 4) / 8 = 2

              2. \u8282\u70b9\u603b\u5f97\u5206\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

                binpack.weight - (CPU.score + Memory.score + GPU.score) / (CPU.weight + Memory.weight + GPU.weight) - 100\n

                \u5047\u8bbe binpack.weight \u914d\u7f6e\u4e3a 5\uff0cNode 1 \u5728 Binpack \u7b56\u7565\u4e0b\u7684\u5f97\u5206\u4e3a\uff1a

                5 - (0.75 + 0.75 + 2) / (1 + 1 + 2) - 100 = 437.5\n
              3. Binpack \u5bf9 Node 2 \u7684\u8d44\u6e90\u6253\u5206\uff1a

                • CPU Score\uff1a

                  CPU.weight - (request + used) / allocatable = 1 - (2 + 6) / 8 = 1

                • Memory Score\uff1a

                  Memory.weight - (request + used) / allocatable = 1 - (4 + 8) / 16 = 0.75

                • GPU Score\uff1a

                  GPU.weight - (request + used) / allocatable = 2 - (4 + 4) / 8 = 2

              4. Node 2 \u5728 Binpack \u7b56\u7565\u4e0b\u7684\u5f97\u5206\u4e3a\uff1a

                5 - (1 + 0.75 + 2) / (1 + 1 + 2) - 100 = 468.75\n

              \u7efc\u4e0a\uff0cNode 2 \u5f97\u5206\u5927\u4e8e Node 1\uff0c\u6309\u7167 Binpack \u7b56\u7565\uff0cPod \u5c06\u4f1a\u4f18\u5148\u8c03\u5ea6\u81f3 Node 2\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_binpack.html#_2","title":"\u4f7f\u7528\u6848\u4f8b","text":"

              Binpack \u8c03\u5ea6\u63d2\u4ef6\u5728\u5b89\u88c5 Volcano \u7684\u65f6\u5019\u9ed8\u8ba4\u5c31\u4f1a\u5f00\u542f\uff1b\u5982\u679c\u7528\u6237\u6ca1\u6709\u914d\u7f6e\u6743\u91cd\uff0c\u5219\u4f7f\u7528\u5982\u4e0b\u9ed8\u8ba4\u7684\u914d\u7f6e\u6743\u91cd\u3002

              - plugins:\n    - name: binpack\n      arguments:\n        binpack.weight: 1\n        binpack.cpu: 1\n        binpack.memory: 1\n

              \u9ed8\u8ba4\u6743\u91cd\u4e0d\u80fd\u4f53\u73b0\u5806\u53e0\u7279\u6027\uff0c\u56e0\u6b64\u9700\u8981\u4fee\u6539\u4e3a binpack.weight: 10\u3002

              kubectl -n volcano-system edit configmaps volcano-scheduler-configmap\n
              - plugins:\n    - name: binpack\n      arguments:\n        binpack.weight: 10\n        binpack.cpu: 1\n        binpack.memory: 1\n        binpack.resources: nvidia.com/gpu, example.com/foo\n        binpack.resources.nvidia.com/gpu: 2\n        binpack.resources.example.com/foo: 3\n

              \u6539\u597d\u4e4b\u540e\u91cd\u542f volcano-scheduler Pod \u4f7f\u5176\u751f\u6548\u3002

              \u521b\u5efa\u5982\u4e0b\u7684 Deployment\u3002

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: binpack-test\n  labels:\n    app: binpack-test\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: test\n  template:\n    metadata:\n      labels:\n        app: test\n    spec:\n      schedulerName: volcano\n      containers:\n        - name: test\n          image: busybox\n          imagePullPolicy: IfNotPresent\n          command: [\"sh\", \"-c\", 'echo \"Hello, Kubernetes!\" && sleep 3600']\n          resources:\n            requests:\n              cpu: 500m\n            limits:\n              cpu: 500m\n

              \u5728\u4e24\u4e2a Node \u7684\u96c6\u7fa4\u4e0a\u53ef\u4ee5\u770b\u5230 Pod \u88ab\u8c03\u5ea6\u5230\u4e00\u4e2a Node \u4e0a\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_priority.html","title":"\u4f18\u5148\u7ea7\u62a2\u5360\uff08Preemption scheduling\uff09\u7b56\u7565","text":"

              Volcano \u901a\u8fc7 Priority \u63d2\u4ef6\u5b9e\u73b0\u4e86\u4f18\u5148\u7ea7\u62a2\u5360\u7b56\u7565\uff0c\u5373 Preemption scheduling \u7b56\u7565\u3002\u5728\u96c6\u7fa4\u8d44\u6e90\u6709\u9650\u4e14\u591a\u4e2a Job \u7b49\u5f85\u8c03\u5ea6\u65f6\uff0c \u5982\u679c\u4f7f\u7528 Kubernetes \u9ed8\u8ba4\u8c03\u5ea6\u5668\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u5177\u6709\u66f4\u591a Pod \u6570\u91cf\u7684 Job \u5206\u5f97\u66f4\u591a\u8d44\u6e90\u3002\u800c Volcano-scheduler \u63d0\u4f9b\u4e86\u7b97\u6cd5\uff0c\u652f\u6301\u4e0d\u540c\u7684 Job \u4ee5 fair-share \u7684\u5f62\u5f0f\u5171\u4eab\u96c6\u7fa4\u8d44\u6e90\u3002

              Priority \u63d2\u4ef6\u5141\u8bb8\u7528\u6237\u81ea\u5b9a\u4e49 Job \u548c Task \u7684\u4f18\u5148\u7ea7\uff0c\u5e76\u6839\u636e\u9700\u6c42\u5728\u4e0d\u540c\u5c42\u6b21\u4e0a\u5b9a\u5236\u8c03\u5ea6\u7b56\u7565\u3002 \u4f8b\u5982\uff0c\u5bf9\u4e8e\u91d1\u878d\u573a\u666f\u3001\u7269\u8054\u7f51\u76d1\u63a7\u573a\u666f\u7b49\u9700\u8981\u8f83\u9ad8\u5b9e\u65f6\u6027\u7684\u5e94\u7528\uff0cPriority \u63d2\u4ef6\u80fd\u591f\u786e\u4fdd\u5176\u4f18\u5148\u5f97\u5230\u8c03\u5ea6\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_priority.html#_1","title":"\u4f7f\u7528\u65b9\u5f0f","text":"

              \u4f18\u5148\u7ea7\u7684\u51b3\u5b9a\u57fa\u4e8e\u914d\u7f6e\u7684 PriorityClass \u4e2d\u7684 Value \u503c\uff0c\u503c\u8d8a\u5927\u4f18\u5148\u7ea7\u8d8a\u9ad8\u3002\u9ed8\u8ba4\u5df2\u542f\u7528\uff0c\u65e0\u9700\u4fee\u6539\u3002\u53ef\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u6216\u4fee\u6539\u3002

              kubectl -n volcano-system edit configmaps volcano-scheduler-configmap\n
              "},{"location":"admin/kpanda/gpu/volcano/volcano_priority.html#_2","title":"\u4f7f\u7528\u6848\u4f8b","text":"

              \u5047\u8bbe\u96c6\u7fa4\u4e2d\u5b58\u5728\u4e24\u4e2a\u7a7a\u95f2\u8282\u70b9\uff0c\u5e76\u6709\u4e09\u4e2a\u4f18\u5148\u7ea7\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff1ahigh-priority\u3001med-priority \u548c low-priority\u3002 \u5f53 high-priority \u5de5\u4f5c\u8d1f\u8f7d\u8fd0\u884c\u5e76\u5360\u6ee1\u96c6\u7fa4\u8d44\u6e90\u540e\uff0c\u518d\u63d0\u4ea4 med-priority \u548c low-priority \u5de5\u4f5c\u8d1f\u8f7d\u3002 \u7531\u4e8e\u96c6\u7fa4\u8d44\u6e90\u5168\u90e8\u88ab\u66f4\u9ad8\u4f18\u5148\u7ea7\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5360\u7528\uff0cmed-priority \u548c low-priority \u5de5\u4f5c\u8d1f\u8f7d\u5c06\u5904\u4e8e pending \u72b6\u6001\u3002 \u5f53 high-priority \u5de5\u4f5c\u8d1f\u8f7d\u7ed3\u675f\u540e\uff0c\u6839\u636e\u4f18\u5148\u7ea7\u8c03\u5ea6\u539f\u5219\uff0cmed-priority \u5de5\u4f5c\u8d1f\u8f7d\u5c06\u4f18\u5148\u88ab\u8c03\u5ea6\u3002

              1. \u901a\u8fc7 priority.yaml \u521b\u5efa 3 \u4e2a\u4f18\u5148\u7ea7\u5b9a\u4e49\uff0c\u5206\u522b\u4e3a\uff1ahigh-priority\uff0cmed-priority\uff0clow-priority\u3002

                \u67e5\u770b priority.yaml

                cat <<EOF | kubectl apply -f - \napiVersion: scheduling.k8s.io/v1 \nkind: PriorityClass \nitems: \n  - metadata: \n      name: high-priority \n    value: 100 \n    globalDefault: false \n    description: \"This priority class should be used for volcano job only.\" \n  - metadata: \n      name: med-priority \n    value: 50 \n    globalDefault: false \n    description: \"This priority class should be used for volcano job only.\" \n  - metadata: \n      name: low-priority \n    value: 10 \n    globalDefault: false \n    description: \"This priority class should be used for volcano job only.\" \nEOF\n
                2. \u67e5\u770b\u4f18\u5148\u7ea7\u5b9a\u4e49\u4fe1\u606f\u3002

                kubectl get PriorityClass\n
                NAME                      VALUE        GLOBAL-DEFAULT   AGE  \nhigh-priority             100          false            97s  \nlow-priority              10           false            97s  \nmed-priority              50           false            97s  \nsystem-cluster-critical   2000000000   false            6d6h  \nsystem-node-critical      2000001000   false            6d6h\n

              2. \u521b\u5efa\u9ad8\u4f18\u5148\u7ea7\u5de5\u4f5c\u8d1f\u8f7d high-priority-job\uff0c\u5360\u7528\u96c6\u7fa4\u7684\u5168\u90e8\u8d44\u6e90\u3002

                \u67e5\u770b high-priority-job
                cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: priority-high  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: high-priority  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"4\"  \n          restartPolicy: OnFailure  \nEOF\n

                \u901a\u8fc7 kubectl get pod \u67e5\u770b Pod\u8fd0\u884c \u4fe1\u606f\uff1a

                kubectl get pods\n
                NAME                   READY   STATUS    RESTARTS   AGE  \npriority-high-test-0   1/1     Running   0          3s  \npriority-high-test-1   1/1     Running   0          3s  \npriority-high-test-2   1/1     Running   0          3s  \npriority-high-test-3   1/1     Running   0          3s\n

                \u6b64\u65f6\uff0c\u96c6\u7fa4\u8282\u70b9\u8d44\u6e90\u5df2\u5168\u90e8\u88ab\u5360\u7528\u3002

              3. \u521b\u5efa\u4e2d\u4f18\u5148\u7ea7\u5de5\u4f5c\u8d1f\u8f7d med-priority-job \u548c\u4f4e\u4f18\u5148\u7ea7\u5de5\u4f5c\u8d1f\u8f7d low-priority-job\u3002

                med-priority-job
                cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: priority-medium  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: med-priority  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"4\"  \n          restartPolicy: OnFailure  \nEOF\n
                low-priority-job
                cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: priority-low  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: low-priority  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"4\"  \n          restartPolicy: OnFailure  \nEOF\n

                \u901a\u8fc7 kubectl get pod \u67e5\u770b Pod \u8fd0\u884c\u4fe1\u606f\uff0c\u96c6\u7fa4\u8d44\u6e90\u4e0d\u8db3\uff0cPod \u5904\u4e8e Pending \u72b6\u6001\uff1a

                kubectl get pods\n
                NAME                     READY   STATUS    RESTARTS   AGE  \npriority-high-test-0     1/1     Running   0          3m29s  \npriority-high-test-1     1/1     Running   0          3m29s  \npriority-high-test-2     1/1     Running   0          3m29s  \npriority-high-test-3     1/1     Running   0          3m29s  \npriority-low-test-0      0/1     Pending   0          2m26s  \npriority-low-test-1      0/1     Pending   0          2m26s  \npriority-low-test-2      0/1     Pending   0          2m26s  \npriority-low-test-3      0/1     Pending   0          2m26s  \npriority-medium-test-0   0/1     Pending   0          2m36s  \npriority-medium-test-1   0/1     Pending   0          2m36s  \npriority-medium-test-2   0/1     Pending   0          2m36s  \npriority-medium-test-3   0/1     Pending   0          2m36s\n

              4. \u5220\u9664 high_priority_job \u5de5\u4f5c\u8d1f\u8f7d\uff0c\u91ca\u653e\u96c6\u7fa4\u8d44\u6e90\uff0cmed_priority_job \u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002 \u6267\u884c kubectl delete -f high_priority_job.yaml \u91ca\u653e\u96c6\u7fa4\u8d44\u6e90\uff0c\u67e5\u770b Pod \u7684\u8c03\u5ea6\u4fe1\u606f\uff1a

                kubectl get pods\n
                NAME                     READY   STATUS    RESTARTS   AGE  \npriority-low-test-0      0/1     Pending   0          5m18s  \npriority-low-test-1      0/1     Pending   0          5m18s  \npriority-low-test-2      0/1     Pending   0          5m18s  \npriority-low-test-3      0/1     Pending   0          5m18s  \npriority-medium-test-0   1/1     Running   0          5m28s  \npriority-medium-test-1   1/1     Running   0          5m28s  \npriority-medium-test-2   1/1     Running   0          5m28s  \npriority-medium-test-3   1/1     Running   0          5m28s\n

              "},{"location":"admin/kpanda/gpu/volcano/volcano_user_guide.html","title":"\u5b89\u88c5 Volcano","text":"

              \u968f\u7740 Kubernetes\uff08K8s\uff09\u6210\u4e3a\u4e91\u539f\u751f\u5e94\u7528\u7f16\u6392\u4e0e\u7ba1\u7406\u7684\u9996\u9009\u5e73\u53f0\uff0c\u4f17\u591a\u5e94\u7528\u6b63\u79ef\u6781\u5411 K8s \u8fc1\u79fb\u3002 \u5728\u4eba\u5de5\u667a\u80fd\u4e0e\u673a\u5668\u5b66\u4e60\u9886\u57df\uff0c\u7531\u4e8e\u8fd9\u4e9b\u4efb\u52a1\u901a\u5e38\u6d89\u53ca\u5927\u91cf\u8ba1\u7b97\uff0c\u5f00\u53d1\u8005\u503e\u5411\u4e8e\u5728 Kubernetes \u4e0a\u6784\u5efa AI \u5e73\u53f0\uff0c \u4ee5\u5145\u5206\u5229\u7528\u5176\u5728\u8d44\u6e90\u7ba1\u7406\u3001\u5e94\u7528\u7f16\u6392\u53ca\u8fd0\u7ef4\u76d1\u63a7\u65b9\u9762\u7684\u4f18\u52bf\u3002

              \u7136\u800c\uff0cKubernetes \u7684\u9ed8\u8ba4\u8c03\u5ea6\u5668\u4e3b\u8981\u9488\u5bf9\u957f\u671f\u8fd0\u884c\u7684\u670d\u52a1\u8bbe\u8ba1\uff0c\u5bf9\u4e8e AI\u3001\u5927\u6570\u636e\u7b49\u9700\u8981\u6279\u91cf\u548c\u5f39\u6027\u8c03\u5ea6\u7684\u4efb\u52a1\u5b58\u5728\u8bf8\u591a\u4e0d\u8db3\u3002 \u4f8b\u5982\uff0c\u5728\u8d44\u6e90\u7ade\u4e89\u6fc0\u70c8\u7684\u60c5\u51b5\u4e0b\uff0c\u9ed8\u8ba4\u8c03\u5ea6\u5668\u53ef\u80fd\u5bfc\u81f4\u8d44\u6e90\u5206\u914d\u4e0d\u5747\uff0c\u8fdb\u800c\u5f71\u54cd\u4efb\u52a1\u7684\u6b63\u5e38\u6267\u884c\u3002

              \u4ee5 TensorFlow \u4f5c\u4e1a\u4e3a\u4f8b\uff0c\u5176\u5305\u542b PS\uff08\u53c2\u6570\u670d\u52a1\u5668\uff09\u548c Worker \u4e24\u79cd\u89d2\u8272\uff0c\u4e24\u8005\u9700\u534f\u540c\u5de5\u4f5c\u624d\u80fd\u5b8c\u6210\u4efb\u52a1\u3002 \u82e5\u4ec5\u90e8\u7f72\u5355\u4e00\u89d2\u8272\uff0c\u4f5c\u4e1a\u5c06\u65e0\u6cd5\u8fd0\u884c\u3002\u800c\u9ed8\u8ba4\u8c03\u5ea6\u5668\u5bf9 Pod \u7684\u8c03\u5ea6\u662f\u9010\u4e2a\u8fdb\u884c\u7684\uff0c\u65e0\u6cd5\u611f\u77e5 TFJob \u4e2d PS \u548c Worker \u7684\u4f9d\u8d56\u5173\u7cfb\u3002 \u5728\u9ad8\u8d1f\u8f7d\u60c5\u51b5\u4e0b\uff0c\u8fd9\u53ef\u80fd\u5bfc\u81f4\u591a\u4e2a\u4f5c\u4e1a\u5404\u81ea\u5206\u914d\u5230\u90e8\u5206\u8d44\u6e90\uff0c\u4f46\u5747\u65e0\u6cd5\u5b8c\u6210\uff0c\u4ece\u800c\u9020\u6210\u8d44\u6e90\u6d6a\u8d39\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_user_guide.html#volcano_1","title":"Volcano \u7684\u8c03\u5ea6\u7b56\u7565\u4f18\u52bf","text":"

              Volcano \u63d0\u4f9b\u4e86\u591a\u79cd\u8c03\u5ea6\u7b56\u7565\uff0c\u4ee5\u5e94\u5bf9\u4e0a\u8ff0\u6311\u6218\u3002\u5176\u4e2d\uff0cGang-scheduling \u7b56\u7565\u80fd\u786e\u4fdd\u5206\u5e03\u5f0f\u673a\u5668\u5b66\u4e60\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u591a\u4e2a\u4efb\u52a1\uff08Pod\uff09\u540c\u65f6\u542f\u52a8\uff0c \u907f\u514d\u6b7b\u9501\uff1bPreemption scheduling \u7b56\u7565\u5219\u5141\u8bb8\u9ad8\u4f18\u5148\u7ea7\u4f5c\u4e1a\u5728\u8d44\u6e90\u4e0d\u8db3\u65f6\u62a2\u5360\u4f4e\u4f18\u5148\u7ea7\u4f5c\u4e1a\u7684\u8d44\u6e90\uff0c\u786e\u4fdd\u5173\u952e\u4efb\u52a1\u4f18\u5148\u5b8c\u6210\u3002

              \u6b64\u5916\uff0cVolcano \u4e0e Spark\u3001TensorFlow\u3001PyTorch \u7b49\u4e3b\u6d41\u8ba1\u7b97\u6846\u67b6\u65e0\u7f1d\u5bf9\u63a5\uff0c\u5e76\u652f\u6301 CPU \u548c GPU \u7b49\u5f02\u6784\u8bbe\u5907\u7684\u6df7\u5408\u8c03\u5ea6\uff0c\u4e3a AI \u8ba1\u7b97\u4efb\u52a1\u63d0\u4f9b\u4e86\u5168\u9762\u7684\u4f18\u5316\u652f\u6301\u3002

              \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5\u548c\u4f7f\u7528 Volcano\uff0c\u4ee5\u4fbf\u60a8\u80fd\u591f\u5145\u5206\u5229\u7528\u5176\u8c03\u5ea6\u7b56\u7565\u4f18\u52bf\uff0c\u4f18\u5316 AI \u8ba1\u7b97\u4efb\u52a1\u3002

              "},{"location":"admin/kpanda/gpu/volcano/volcano_user_guide.html#volcano_2","title":"\u5b89\u88c5 Volcano","text":"
              1. \u5728 \u96c6\u7fa4\u8be6\u60c5 -> Helm \u5e94\u7528 -> Helm \u6a21\u677f \u4e2d\u627e\u5230 Volcano \u5e76\u5b89\u88c5\u3002

              2. \u68c0\u67e5\u5e76\u786e\u8ba4 Volcano \u662f\u5426\u5b89\u88c5\u5b8c\u6210\uff0c\u5373 volcano-admission\u3001volcano-controllers\u3001volcano-scheduler \u7ec4\u4ef6\u662f\u5426\u6b63\u5e38\u8fd0\u884c\u3002

              \u901a\u5e38 Volcano \u4f1a\u548c AI Lab \u5e73\u53f0\u914d\u5408\u4f7f\u7528\uff0c\u4ee5\u5b9e\u73b0\u6570\u636e\u96c6\u3001Notebook\u3001\u4efb\u52a1\u8bad\u7ec3\u7684\u6574\u4e2a\u5f00\u53d1\u3001\u8bad\u7ec3\u6d41\u7a0b\u7684\u6709\u6548\u95ed\u73af\u3002

              "},{"location":"admin/kpanda/helm/index.html","title":"Helm \u6a21\u677f","text":"

              Helm \u662f Kubernetes \u7684\u5305\u7ba1\u7406\u5de5\u5177\uff0c\u65b9\u4fbf\u7528\u6237\u5feb\u901f\u53d1\u73b0\u3001\u5171\u4eab\u548c\u4f7f\u7528 Kubernetes \u6784\u5efa\u7684\u5e94\u7528\u3002\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63d0\u4f9b\u4e86\u4e0a\u767e\u4e2a Helm \u6a21\u677f\uff0c\u6db5\u76d6\u5b58\u50a8\u3001\u7f51\u7edc\u3001\u76d1\u63a7\u3001\u6570\u636e\u5e93\u7b49\u4e3b\u8981\u573a\u666f\u3002\u501f\u52a9\u8fd9\u4e9b\u6a21\u677f\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 UI \u754c\u9762\u5feb\u901f\u90e8\u7f72\u3001\u4fbf\u6377\u7ba1\u7406 Helm \u5e94\u7528\u3002\u6b64\u5916\uff0c\u652f\u6301\u901a\u8fc7\u6dfb\u52a0 Helm \u4ed3\u5e93 \u6dfb\u52a0\u66f4\u591a\u7684\u4e2a\u6027\u5316\u6a21\u677f\uff0c\u6ee1\u8db3\u591a\u6837\u9700\u6c42\u3002

              \u5173\u952e\u6982\u5ff5\uff1a

              \u4f7f\u7528 Helm \u65f6\u9700\u8981\u4e86\u89e3\u4ee5\u4e0b\u51e0\u4e2a\u5173\u952e\u6982\u5ff5\uff1a

              • Chart\uff1a\u4e00\u4e2a Helm \u5b89\u88c5\u5305\uff0c\u5176\u4e2d\u5305\u542b\u4e86\u8fd0\u884c\u4e00\u4e2a\u5e94\u7528\u6240\u9700\u8981\u7684\u955c\u50cf\u3001\u4f9d\u8d56\u548c\u8d44\u6e90\u5b9a\u4e49\u7b49\uff0c\u8fd8\u53ef\u80fd\u5305\u542b Kubernetes \u96c6\u7fa4\u4e2d\u7684\u670d\u52a1\u5b9a\u4e49\uff0c\u7c7b\u4f3c Homebrew \u4e2d\u7684 formula\u3001APT \u7684 dpkg \u6216\u8005 Yum \u7684 rpm \u6587\u4ef6\u3002Chart \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u79f0\u4e3a Helm \u6a21\u677f \u3002

              • Release\uff1a\u5728 Kubernetes \u96c6\u7fa4\u4e0a\u8fd0\u884c\u7684\u4e00\u4e2a Chart \u5b9e\u4f8b\u3002\u4e00\u4e2a Chart \u53ef\u4ee5\u5728\u540c\u4e00\u4e2a\u96c6\u7fa4\u5185\u591a\u6b21\u5b89\u88c5\uff0c\u6bcf\u6b21\u5b89\u88c5\u90fd\u4f1a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 Release\u3002Release \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u79f0\u4e3a Helm \u5e94\u7528 \u3002

              • Repository\uff1a\u7528\u4e8e\u53d1\u5e03\u548c\u5b58\u50a8 Chart \u7684\u5b58\u50a8\u5e93\u3002Repository \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u79f0\u4e3a Helm \u4ed3\u5e93\u3002

              \u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u524d\u5f80 Helm \u5b98\u7f51\u67e5\u770b\u3002

              \u76f8\u5173\u64cd\u4f5c\uff1a

              • \u4e0a\u4f20 Helm \u6a21\u677f\uff0c\u4ecb\u7ecd\u4e0a\u4f20 Helm \u6a21\u677f\u64cd\u4f5c\u3002
              • \u7ba1\u7406 Helm \u5e94\u7528\uff0c\u5305\u62ec\u5b89\u88c5\u3001\u66f4\u65b0\u3001\u5378\u8f7d Helm \u5e94\u7528\uff0c\u67e5\u770b Helm \u64cd\u4f5c\u8bb0\u5f55\u7b49\u3002
              • \u7ba1\u7406 Helm \u4ed3\u5e93\uff0c\u5305\u62ec\u5b89\u88c5\u3001\u66f4\u65b0\u3001\u5220\u9664 Helm \u4ed3\u5e93\u7b49\u3002
              "},{"location":"admin/kpanda/helm/Import-addon.html","title":"\u5c06\u81ea\u5b9a\u4e49 Helm \u5e94\u7528\u5bfc\u5165\u7cfb\u7edf\u5185\u7f6e Addon","text":"

              \u672c\u6587\u4ece\u79bb\u7ebf\u548c\u5728\u7ebf\u4e24\u79cd\u73af\u5883\u8bf4\u660e\u5982\u4f55\u5c06 Helm \u5e94\u7528\u5bfc\u5165\u5230\u7cfb\u7edf\u5185\u7f6e\u7684 Addon \u4e2d\u3002

              "},{"location":"admin/kpanda/helm/Import-addon.html#_1","title":"\u79bb\u7ebf\u73af\u5883","text":"

              \u79bb\u7ebf\u73af\u5883\u6307\u7684\u662f\u65e0\u6cd5\u8fde\u901a\u4e92\u8054\u7f51\u6216\u5c01\u95ed\u7684\u79c1\u6709\u7f51\u7edc\u73af\u5883\u3002

              "},{"location":"admin/kpanda/helm/Import-addon.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5b58\u5728\u53ef\u4ee5\u8fd0\u884c\u7684\u00a0charts-syncer\u3002 \u82e5\u6ca1\u6709\uff0c\u53ef\u70b9\u51fb\u4e0b\u8f7d\u3002
              • Helm Chart \u5df2\u7ecf\u5b8c\u6210\u9002\u914d charts-syncer\u3002 \u5373\u5728 Helm Chart \u5185\u6dfb\u52a0\u4e86 .relok8s-images.yaml \u6587\u4ef6\u3002\u8be5\u6587\u4ef6\u9700\u8981\u5305\u542b Chart \u4e2d\u6240\u6709\u4f7f\u7528\u5230\u955c\u50cf\uff0c \u4e5f\u53ef\u4ee5\u5305\u542b Chart \u4e2d\u672a\u76f4\u63a5\u4f7f\u7528\u7684\u955c\u50cf\uff0c\u7c7b\u4f3c Operator \u4e2d\u4f7f\u7528\u7684\u955c\u50cf\u3002

              Note

              • \u5982\u4f55\u7f16\u5199 Chart \u53ef\u53c2\u8003\u00a0image-hints-file\u3002 \u8981\u6c42\u955c\u50cf\u7684\u00a0registry \u548c repository \u5fc5\u987b\u5206\u5f00\uff0c\u56e0\u4e3a load \u955c\u50cf\u65f6\u9700\u66ff\u6362\u6216\u4fee\u6539 registry/repository\u3002
              • \u5b89\u88c5\u5668\u6240\u5728\u7684\u706b\u79cd\u96c6\u7fa4\u5df2\u5b89\u88c5 charts-syncer\u3002 \u82e5\u5c06\u81ea\u5b9a\u4e49 Helm \u5e94\u7528\u5bfc\u5165\u5b89\u88c5\u5668\u6240\u5728\u706b\u79cd\u96c6\u7fa4\uff0c\u53ef\u8df3\u8fc7\u4e0b\u8f7d\u76f4\u63a5\u9002\u914d\uff1b \u82e5\u672a\u5b89\u88c5\u00a0charts-syncer\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c \u53ef\u7acb\u5373\u4e0b\u8f7d\u3002
              "},{"location":"admin/kpanda/helm/Import-addon.html#helm-chart","title":"\u540c\u6b65 Helm Chart","text":"
              1. \u8fdb\u5165\u5bb9\u5668\u7ba1\u7406 -> Helm \u5e94\u7528 -> Helm \u4ed3\u5e93\uff0c\u641c\u7d22 addon\uff0c\u83b7\u53d6\u5185\u7f6e\u4ed3\u5e93\u5730\u5740\u548c\u7528\u6237\u540d/\u5bc6\u7801\uff08\u7cfb\u7edf\u5185\u7f6e\u4ed3\u5e93\u9ed8\u8ba4\u7528\u6237\u540d/\u5bc6\u7801\u4e3a rootuser/rootpass123\uff09\u3002
              1. \u540c\u6b65 Helm Chart \u5230\u5bb9\u5668\u7ba1\u7406\u5185\u7f6e\u4ed3\u5e93 Addon

                • \u7f16\u5199\u5982\u4e0b\u914d\u7f6e\u6587\u4ef6\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u914d\u7f6e\u4fee\u6539\uff0c\u5e76\u4fdd\u5b58\u4e3a sync-dao-2048.yaml\u3002

                  source:  # helm charts \u6e90\u4fe1\u606f\n  repo:\n    kind: HARBOR # \u4e5f\u53ef\u4ee5\u662f\u4efb\u4f55\u5176\u4ed6\u652f\u6301\u7684 Helm Chart \u4ed3\u5e93\u7c7b\u522b\uff0c\u6bd4\u5982 CHARTMUSEUM\n    url: https://release-ci.daocloud.io/chartrepo/community #  \u9700\u66f4\u6539\u4e3a chart repo url\n    #auth: # \u7528\u6237\u540d/\u5bc6\u7801,\u82e5\u6ca1\u6709\u8bbe\u7f6e\u5bc6\u7801\u53ef\u4ee5\u4e0d\u586b\u5199\n      #username: \"admin\"\n      #password: \"Harbor12345\"\ncharts:  # \u9700\u8981\u540c\u6b65\n  - name: dao-2048 # helm charts \u4fe1\u606f\uff0c\u82e5\u4e0d\u586b\u5199\u5219\u540c\u6b65\u6e90 helm repo \u5185\u6240\u6709 charts\n    versions:\n      - 1.4.1\ntarget:  # helm charts \u76ee\u6807\u4fe1\u606f\n  containerRegistry: 10.5.14.40 # \u955c\u50cf\u4ed3\u5e93 url\n  repo:\n    kind: CHARTMUSEUM # \u4e5f\u53ef\u4ee5\u662f\u4efb\u4f55\u5176\u4ed6\u652f\u6301\u7684 Helm Chart \u4ed3\u5e93\u7c7b\u522b\uff0c\u6bd4\u5982 HARBOR\n    url: http://10.5.14.40:8081 #  \u9700\u66f4\u6539\u4e3a\u6b63\u786e chart repo url\uff0c\u53ef\u4ee5\u901a\u8fc7 helm repo add $HELM-REPO \u9a8c\u8bc1\u5730\u5740\u662f\u5426\u6b63\u786e\n    auth: # \u7528\u6237\u540d/\u5bc6\u7801\uff0c\u82e5\u6ca1\u6709\u8bbe\u7f6e\u5bc6\u7801\u53ef\u4ee5\u4e0d\u586b\u5199\n      username: \"rootuser\"\n      password: \"rootpass123\"\n  containers:\n    # kind: HARBOR # \u82e5\u955c\u50cf\u4ed3\u5e93\u4e3a HARBOR \u4e14\u5e0c\u671b charts-syncer \u81ea\u52a8\u521b\u5efa\u955c\u50cf Repository \u5219\u586b\u5199\u8be5\u5b57\u6bb5  \n    # auth: # \u7528\u6237\u540d/\u5bc6\u7801\uff0c\u82e5\u6ca1\u6709\u8bbe\u7f6e\u5bc6\u7801\u53ef\u4ee5\u4e0d\u586b\u5199 \n      # username: \"admin\"\n      # password: \"Harbor12345\"\n\n# leverage .relok8s-images.yaml file inside the Charts to move the container images too\nrelocateContainerImages: true\n
                • \u6267\u884c charts-syncer \u547d\u4ee4\u540c\u6b65 Chart \u53ca\u5176\u5305\u542b\u7684\u955c\u50cf

                  charts-syncer sync --config sync-dao-2048.yaml --insecure --auto-create-repository\n

                  \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

                  I1222 15:01:47.119777    8743 sync.go:45] Using config file: \"examples/sync-dao-2048.yaml\"\nW1222 15:01:47.234238    8743 syncer.go:263] Ignoring skipDependencies option as dependency sync is not supported if container image relocation is true or syncing from/to intermediate directory\nI1222 15:01:47.234685    8743 sync.go:58] There is 1 chart out of sync!\nI1222 15:01:47.234706    8743 sync.go:66] Syncing \"dao-2048_1.4.1\" chart...\n.relok8s-images.yaml hints file found\nComputing relocation...\n\nRelocating dao-2048@1.4.1...\nPushing 10.5.14.40/daocloud/dao-2048:v1.4.1...\nDone\nDone moving /var/folders/vm/08vw0t3j68z9z_4lcqyhg8nm0000gn/T/charts-syncer869598676/dao-2048-1.4.1.tgz\n
              2. \u5f85\u4e0a\u4e00\u6b65\u6267\u884c\u5b8c\u6210\u540e\uff0c\u8fdb\u5165\u5bb9\u5668\u7ba1\u7406 -> Helm \u5e94\u7528 -> Helm \u4ed3\u5e93\uff0c\u627e\u5230\u5bf9\u5e94 Addon\uff0c \u5728\u64cd\u4f5c\u680f\u70b9\u51fb\u540c\u6b65\u4ed3\u5e93\uff0c\u56de\u5230 Helm \u6a21\u677f\u5c31\u53ef\u4ee5\u770b\u5230\u4e0a\u4f20\u7684 Helm \u5e94\u7528

              3. \u540e\u7eed\u53ef\u6b63\u5e38\u8fdb\u884c\u5b89\u88c5\u3001\u5347\u7ea7\u3001\u5378\u8f7d

              "},{"location":"admin/kpanda/helm/Import-addon.html#_3","title":"\u5728\u7ebf\u73af\u5883","text":"

              \u5728\u7ebf\u73af\u5883\u7684 Helm Repo \u5730\u5740\u4e3a release.daocloud.io\u3002 \u5982\u679c\u7528\u6237\u65e0\u6743\u9650\u6dfb\u52a0 Helm Repo\uff0c\u5219\u65e0\u6cd5\u5c06\u81ea\u5b9a\u4e49 Helm \u5e94\u7528\u5bfc\u5165\u7cfb\u7edf\u5185\u7f6e Addon\u3002 \u60a8\u53ef\u4ee5\u6dfb\u52a0\u81ea\u5df1\u642d\u5efa\u7684 Helm \u4ed3\u5e93\uff0c\u7136\u540e\u6309\u7167\u79bb\u7ebf\u73af\u5883\u4e2d\u540c\u6b65 Helm Chart \u7684\u6b65\u9aa4\u5c06\u60a8\u7684 Helm \u4ed3\u5e93\u96c6\u6210\u5230\u5e73\u53f0\u4f7f\u7528\u3002

              "},{"location":"admin/kpanda/helm/helm-app.html","title":"\u7ba1\u7406 Helm \u5e94\u7528","text":"

              \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u5bf9 Helm \u8fdb\u884c\u754c\u9762\u5316\u7ba1\u7406\uff0c\u5305\u62ec\u4f7f\u7528 Helm \u6a21\u677f\u521b\u5efa Helm \u5b9e\u4f8b\u3001\u81ea\u5b9a\u4e49 Helm \u5b9e\u4f8b\u53c2\u6570\u3001\u5bf9 Helm \u5b9e\u4f8b\u8fdb\u884c\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u7b49\u529f\u80fd\u3002

              \u672c\u8282\u5c06\u4ee5 cert-manager \u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u754c\u9762\u521b\u5efa\u5e76\u7ba1\u7406 Helm \u5e94\u7528\u3002

              "},{"location":"admin/kpanda/helm/helm-app.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              "},{"location":"admin/kpanda/helm/helm-app.html#helm_1","title":"\u5b89\u88c5 Helm \u5e94\u7528","text":"

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5b89\u88c5 Helm \u5e94\u7528\u3002

              1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u8fdb\u5165 Helm \u6a21\u677f\u9875\u9762\u3002

                \u5728 Helm \u6a21\u677f\u9875\u9762\u9009\u62e9\u540d\u4e3a addon \u7684 Helm \u4ed3\u5e93\uff0c\u6b64\u65f6\u754c\u9762\u4e0a\u5c06\u5448\u73b0 addon \u4ed3\u5e93\u4e0b\u6240\u6709\u7684 Helm chart \u6a21\u677f\u3002 \u70b9\u51fb\u540d\u79f0\u4e3a cert-manager \u7684 Chart\u3002

              3. \u5728\u5b89\u88c5\u9875\u9762\uff0c\u80fd\u591f\u770b\u5230 Chart \u7684\u76f8\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u5728\u754c\u9762\u53f3\u4e0a\u89d2\u9009\u62e9\u9700\u8981\u5b89\u88c5\u7684\u7248\u672c\uff0c\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u6b64\u5904\u9009\u62e9 v1.9.1 \u7248\u672c\u8fdb\u884c\u5b89\u88c5\u3002

              4. \u914d\u7f6e \u540d\u79f0 \u3001 \u547d\u540d\u7a7a\u95f4 \u53ca \u7248\u672c\u4fe1\u606f \uff0c\u4e5f\u53ef\u4ee5\u5728\u4e0b\u65b9\u7684 \u53c2\u6570\u914d\u7f6e \u533a\u57df\u901a\u8fc7\u4fee\u6539 YAML \u6765\u81ea\u5b9a\u4e49\u53c2\u6570\u3002\u70b9\u51fb \u786e\u5b9a \u3002

              5. \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de Helm \u5e94\u7528\u5217\u8868\uff0c\u65b0\u521b\u5efa\u7684 Helm \u5e94\u7528\u72b6\u6001\u4e3a \u5b89\u88c5\u4e2d \uff0c\u7b49\u5f85\u4e00\u6bb5\u65f6\u95f4\u540e\u72b6\u6001\u53d8\u4e3a \u8fd0\u884c\u4e2d \u3002

              "},{"location":"admin/kpanda/helm/helm-app.html#helm_2","title":"\u66f4\u65b0 Helm \u5e94\u7528","text":"

              \u5f53\u6211\u4eec\u901a\u8fc7\u754c\u9762\u5b8c\u6210\u4e00\u4e2a Helm \u5e94\u7528\u7684\u5b89\u88c5\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u5bf9 Helm \u5e94\u7528\u6267\u884c\u66f4\u65b0\u64cd\u4f5c\u3002\u6ce8\u610f\uff1a\u53ea\u6709\u901a\u8fc7\u754c\u9762\u5b89\u88c5\u7684 Helm \u5e94\u7528\u624d\u652f\u6301\u4f7f\u7528\u754c\u9762\u8fdb\u884c\u66f4\u65b0\u64cd\u4f5c\u3002

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u66f4\u65b0 Helm \u5e94\u7528\u3002

              1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb Helm \u5e94\u7528 \uff0c\u8fdb\u5165 Helm \u5e94\u7528\u5217\u8868\u9875\u9762\u3002

                \u5728 Helm \u5e94\u7528\u5217\u8868\u9875\u9009\u62e9\u9700\u8981\u66f4\u65b0\u7684 Helm \u5e94\u7528\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff0c\u5728\u4e0b\u62c9\u9009\u62e9\u4e2d\u9009\u62e9 \u66f4\u65b0 \u64cd\u4f5c\u3002

              3. \u70b9\u51fb \u66f4\u65b0 \u6309\u94ae\u540e\uff0c\u7cfb\u7edf\u5c06\u8df3\u8f6c\u81f3\u66f4\u65b0\u754c\u9762\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u9700\u8981\u5bf9 Helm \u5e94\u7528\u8fdb\u884c\u66f4\u65b0\uff0c\u6b64\u5904\u6211\u4eec\u4ee5\u66f4\u65b0 dao-2048 \u8fd9\u4e2a\u5e94\u7528\u7684 http \u7aef\u53e3\u4e3a\u4f8b\u3002

              4. \u4fee\u6539\u5b8c\u76f8\u5e94\u53c2\u6570\u540e\u3002\u60a8\u53ef\u4ee5\u5728\u53c2\u6570\u914d\u7f6e\u4e0b\u70b9\u51fb \u53d8\u5316 \u6309\u94ae\uff0c\u5bf9\u6bd4\u4fee\u6539\u524d\u540e\u7684\u6587\u4ef6\uff0c\u786e\u5b9a\u65e0\u8bef\u540e\uff0c\u70b9\u51fb\u5e95\u90e8 \u786e\u5b9a \u6309\u94ae\uff0c\u5b8c\u6210 Helm \u5e94\u7528\u7684\u66f4\u65b0\u3002

              5. \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de Helm \u5e94\u7528\u5217\u8868\uff0c\u53f3\u4e0a\u89d2\u5f39\u7a97\u63d0\u793a \u66f4\u65b0\u6210\u529f \u3002

              "},{"location":"admin/kpanda/helm/helm-app.html#helm_3","title":"\u67e5\u770b Helm \u64cd\u4f5c\u8bb0\u5f55","text":"

              Helm \u5e94\u7528\u7684\u6bcf\u6b21\u5b89\u88c5\u3001\u66f4\u65b0\u3001\u5220\u9664\u90fd\u6709\u8be6\u7ec6\u7684\u64cd\u4f5c\u8bb0\u5f55\u548c\u65e5\u5fd7\u53ef\u4f9b\u67e5\u770b\u3002

              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb \u96c6\u7fa4\u8fd0\u7ef4 -> \u6700\u8fd1\u64cd\u4f5c \uff0c\u7136\u540e\u5728\u9875\u9762\u4e0a\u65b9\u9009\u62e9 Helm \u64cd\u4f5c \u6807\u7b7e\u9875\u3002\u6bcf\u4e00\u6761\u8bb0\u5f55\u5bf9\u5e94\u4e00\u6b21\u5b89\u88c5/\u66f4\u65b0/\u5220\u9664\u64cd\u4f5c\u3002

              2. \u5982\u9700\u67e5\u770b\u6bcf\u4e00\u6b21\u64cd\u4f5c\u7684\u8be6\u7ec6\u65e5\u5fd7\uff1a\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u65e5\u5fd7 \u3002

              3. \u6b64\u65f6\u9875\u9762\u4e0b\u65b9\u5c06\u4ee5\u63a7\u5236\u53f0\u7684\u5f62\u5f0f\u5c55\u793a\u8be6\u7ec6\u7684\u8fd0\u884c\u65e5\u5fd7\u3002

              "},{"location":"admin/kpanda/helm/helm-app.html#helm_4","title":"\u5220\u9664 Helm \u5e94\u7528","text":"

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5220\u9664 Helm \u5e94\u7528\u3002

              1. \u627e\u5230\u5f85\u5220\u9664\u7684 Helm \u5e94\u7528\u6240\u5728\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb Helm \u5e94\u7528 \uff0c\u8fdb\u5165 Helm \u5e94\u7528\u5217\u8868\u9875\u9762\u3002

                \u5728 Helm \u5e94\u7528\u5217\u8868\u9875\u9009\u62e9\u60a8\u9700\u8981\u5220\u9664\u7684 Helm \u5e94\u7528\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff0c\u5728\u4e0b\u62c9\u9009\u62e9\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

              3. \u5728\u5f39\u7a97\u5185\u8f93\u5165 Helm \u5e94\u7528\u7684\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u7136\u540e\u70b9\u51fb \u5220\u9664 \u6309\u94ae\u3002

              "},{"location":"admin/kpanda/helm/helm-repo.html","title":"\u7ba1\u7406 Helm \u4ed3\u5e93","text":"

              Helm \u4ed3\u5e93\u662f\u7528\u6765\u5b58\u50a8\u548c\u53d1\u5e03 Chart \u7684\u5b58\u50a8\u5e93\u3002Helm \u5e94\u7528\u6a21\u5757\u652f\u6301\u901a\u8fc7 HTTP(s) \u534f\u8bae\u6765\u8bbf\u95ee\u5b58\u50a8\u5e93\u4e2d\u7684 Chart \u5305\u3002\u7cfb\u7edf\u9ed8\u8ba4\u5185\u7f6e\u4e86\u4e0b\u8868\u6240\u793a\u7684 4 \u4e2a Helm \u4ed3\u5e93\u4ee5\u6ee1\u8db3\u4f01\u4e1a\u751f\u4ea7\u8fc7\u7a0b\u4e2d\u7684\u5e38\u89c1\u9700\u6c42\u3002

              \u4ed3\u5e93 \u63cf\u8ff0 \u793a\u4f8b partner \u7531\u751f\u6001\u5408\u4f5c\u4f19\u4f34\u6240\u63d0\u4f9b\u7684\u5404\u7c7b\u4f18\u8d28\u7279\u8272 Chart tidb system \u7cfb\u7edf\u6838\u5fc3\u529f\u80fd\u7ec4\u4ef6\u53ca\u90e8\u5206\u9ad8\u7ea7\u529f\u80fd\u6240\u5fc5\u9700\u4f9d\u8d56\u7684 Chart\uff0c\u5982\u5fc5\u9700\u5b89\u88c5 insight-agent \u624d\u80fd\u591f\u83b7\u53d6\u96c6\u7fa4\u7684\u76d1\u63a7\u4fe1\u606f Insight addon \u4e1a\u52a1\u573a\u666f\u4e2d\u5e38\u89c1\u7684 Chart cert-manager community Kubernetes \u793e\u533a\u8f83\u4e3a\u70ed\u95e8\u7684\u5f00\u6e90\u7ec4\u4ef6 Chart Istio

              \u9664\u4e0a\u8ff0\u9884\u7f6e\u4ed3\u5e93\u5916\uff0c\u60a8\u4e5f\u53ef\u4ee5\u81ea\u884c\u6dfb\u52a0\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u6dfb\u52a0\u3001\u66f4\u65b0\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u3002

              "},{"location":"admin/kpanda/helm/helm-repo.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5982\u679c\u4f7f\u7528\u79c1\u6709\u4ed3\u5e93\uff0c\u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u62e5\u6709\u5bf9\u8be5\u79c1\u6709\u4ed3\u5e93\u7684\u8bfb\u5199\u6743\u9650\u3002

              "},{"location":"admin/kpanda/helm/helm-repo.html#helm_1","title":"\u5f15\u5165\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93","text":"

              \u4e0b\u9762\u4ee5 Kubevela \u516c\u5f00\u7684\u955c\u50cf\u4ed3\u5e93\u4e3a\u4f8b\uff0c\u5f15\u5165 Helm \u4ed3\u5e93\u5e76\u7ba1\u7406\u3002

              1. \u627e\u5230\u9700\u8981\u5f15\u5165\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u8fdb\u5165 Helm \u4ed3\u5e93\u9875\u9762\u3002

              3. \u5728 Helm \u4ed3\u5e93\u9875\u9762\u70b9\u51fb \u521b\u5efa\u4ed3\u5e93 \u6309\u94ae\uff0c\u8fdb\u5165\u521b\u5efa\u4ed3\u5e93\u9875\u9762\uff0c\u6309\u7167\u4e0b\u8868\u914d\u7f6e\u76f8\u5173\u53c2\u6570\u3002

                • \u4ed3\u5e93\u540d\u79f0\uff1a\u8bbe\u7f6e\u4ed3\u5e93\u540d\u79f0\u3002\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26 - \uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u5e76\u7ed3\u5c3e\uff0c\u4f8b\u5982 kubevela
                • \u4ed3\u5e93\u5730\u5740\uff1a\u7528\u6765\u6307\u5411\u76ee\u6807 Helm \u4ed3\u5e93\u7684 http\uff08s\uff09\u5730\u5740\u3002\u4f8b\u5982 https://charts.kubevela.net/core
                • \u8df3\u8fc7 TLS \u9a8c\u8bc1: \u5982\u679c\u6dfb\u52a0\u7684 Helm \u4ed3\u5e93\u4e3a https \u5730\u5740\u4e14\u9700\u8df3\u8fc7 TLS \u9a8c\u8bc1\uff0c\u53ef\u4ee5\u52fe\u9009\u6b64\u9009\u9879\uff0c\u9ed8\u8ba4\u4e3a\u4e0d\u52fe\u9009
                • \u8ba4\u8bc1\u65b9\u5f0f\uff1a\u8fde\u63a5\u4ed3\u5e93\u5730\u5740\u540e\u7528\u6765\u8fdb\u884c\u8eab\u4efd\u6821\u9a8c\u7684\u65b9\u5f0f\u3002\u5bf9\u4e8e\u516c\u5f00\u4ed3\u5e93\uff0c\u53ef\u4ee5\u9009\u62e9 None \uff0c\u79c1\u6709\u7684\u4ed3\u5e93\u9700\u8981\u8f93\u5165\u7528\u6237\u540d/\u5bc6\u7801\u4ee5\u8fdb\u884c\u8eab\u4efd\u6821\u9a8c
                • \u6807\u7b7e\uff1a\u4e3a\u8be5 Helm \u4ed3\u5e93\u6dfb\u52a0\u6807\u7b7e\u3002\u4f8b\u5982 key: repo4\uff1bvalue: Kubevela
                • \u6ce8\u89e3\uff1a\u4e3a\u8be5 Helm \u4ed3\u5e93\u6dfb\u52a0\u6ce8\u89e3\u3002\u4f8b\u5982 key: repo4\uff1bvalue: Kubevela
                • \u63cf\u8ff0\uff1a\u4e3a\u8be5 Helm \u4ed3\u5e93\u6dfb\u52a0\u63cf\u8ff0\u3002\u4f8b\u5982\uff1a\u8fd9\u662f\u4e00\u4e2a Kubevela \u516c\u5f00 Helm \u4ed3\u5e93

              4. \u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210 Helm \u4ed3\u5e93\u7684\u521b\u5efa\u3002\u9875\u9762\u4f1a\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u4ed3\u5e93\u5217\u8868\u3002

              "},{"location":"admin/kpanda/helm/helm-repo.html#helm_2","title":"\u66f4\u65b0 Helm \u4ed3\u5e93","text":"

              \u5f53 Helm \u4ed3\u5e93\u7684\u5730\u5740\u4fe1\u606f\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u53ef\u4ee5\u66f4\u65b0 Helm \u4ed3\u5e93\u7684\u5730\u5740\u3001\u8ba4\u8bc1\u65b9\u5f0f\u3001\u6807\u7b7e\u3001\u6ce8\u89e3\u53ca\u63cf\u8ff0\u4fe1\u606f\u3002

              1. \u627e\u5230\u5f85\u66f4\u65b0\u4ed3\u5e93\u6240\u5728\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u8fdb\u5165 Helm \u4ed3\u5e93\u5217\u8868\u9875\u9762\u3002

              3. \u5728\u4ed3\u5e93\u5217\u8868\u9875\u9762\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684 Helm \u4ed3\u5e93\uff0c\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \u6309\u94ae\uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u70b9\u51fb \u66f4\u65b0 \u3002

              4. \u5728 \u7f16\u8f91 Helm \u4ed3\u5e93 \u9875\u9762\u8fdb\u884c\u66f4\u65b0\uff0c\u5b8c\u6210\u540e\u70b9\u51fb \u786e\u5b9a \u3002

              5. \u8fd4\u56de Helm \u4ed3\u5e93\u5217\u8868\uff0c\u5c4f\u5e55\u63d0\u793a\u66f4\u65b0\u6210\u529f\u3002

              "},{"location":"admin/kpanda/helm/helm-repo.html#helm_3","title":"\u5220\u9664 Helm \u4ed3\u5e93","text":"

              \u9664\u4e86\u5f15\u5165\u3001\u66f4\u65b0\u4ed3\u5e93\u5916\uff0c\u60a8\u4e5f\u53ef\u4ee5\u5c06\u4e0d\u9700\u8981\u7684\u4ed3\u5e93\u5220\u9664\uff0c\u5305\u62ec\u7cfb\u7edf\u9884\u7f6e\u4ed3\u5e93\u548c\u7b2c\u4e09\u65b9\u4ed3\u5e93\u3002

              1. \u627e\u5230\u5f85\u5220\u9664\u4ed3\u5e93\u6240\u5728\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u8fdb\u5165 Helm \u4ed3\u5e93\u5217\u8868\u9875\u9762\u3002

              3. \u5728\u4ed3\u5e93\u5217\u8868\u9875\u9762\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684 Helm \u4ed3\u5e93\uff0c\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \u6309\u94ae\uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u70b9\u51fb \u5220\u9664 \u3002

              4. \u8f93\u5165\u4ed3\u5e93\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u70b9\u51fb \u5220\u9664 \u3002

              5. \u8fd4\u56de Helm \u4ed3\u5e93\u5217\u8868\uff0c\u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\u3002

              "},{"location":"admin/kpanda/helm/multi-archi-helm.html","title":"Helm \u5e94\u7528\u591a\u67b6\u6784\u548c\u5347\u7ea7\u5bfc\u5165\u6b65\u9aa4","text":"

              \u901a\u5e38\u5728\u591a\u67b6\u6784\u96c6\u7fa4\u4e2d\uff0c\u4e5f\u4f1a\u4f7f\u7528\u591a\u67b6\u6784\u7684 Helm \u5305\u6765\u90e8\u7f72\u5e94\u7528\uff0c\u4ee5\u89e3\u51b3\u67b6\u6784\u5dee\u5f02\u5e26\u6765\u7684\u90e8\u7f72\u95ee\u9898\u3002 \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5c06\u5355\u67b6\u6784 Helm \u5e94\u7528\u878d\u5408\u4e3a\u591a\u67b6\u6784\uff0c\u4ee5\u53ca\u591a\u67b6\u6784\u4e0e\u591a\u67b6\u6784 Helm \u5e94\u7528\u7684\u76f8\u4e92\u878d\u5408\u3002

              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_1","title":"\u5bfc\u5165","text":""},{"location":"admin/kpanda/helm/multi-archi-helm.html#_2","title":"\u5355\u67b6\u6784\u5bfc\u5165","text":"

              \u51c6\u5907\u597d\u5f85\u5bfc\u5165\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz \u3002 \u628a\u8def\u5f84\u586b\u5199\u81f3 clusterConfig.yml \u914d\u7f6e\u6587\u4ef6\uff0c\u4f8b\u5982\uff1a

              addonPackage:\n  path: \"/home/addon-offline-full-package-v0.9.0-amd64.tar.gz\"\n

              \u7136\u540e\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

              ~/dce5-installer cluster-create -c /home/dce5/sample/clusterConfig.yaml -m /home/dce5/sample/manifest.yaml -d -j13\n
              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_3","title":"\u591a\u67b6\u6784\u878d\u5408","text":"

              \u51c6\u5907\u597d\u5f85\u878d\u5408\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz\u3002

              \u4ee5 addon-offline-full-package-v0.9.0-arm64.tar.gz \u4e3a\u4f8b\uff0c\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

              ~/dce5-installer import-addon -c /home/dce5/sample/clusterConfig.yaml --addon-path=/home/addon-offline-full-package-v0.9.0-arm64.tar.gz\n
              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_4","title":"\u5347\u7ea7","text":""},{"location":"admin/kpanda/helm/multi-archi-helm.html#_5","title":"\u5355\u67b6\u6784\u5347\u7ea7","text":"

              \u51c6\u5907\u597d\u5f85\u5bfc\u5165\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz\u3002

              \u628a\u8def\u5f84\u586b\u5199\u81f3 clusterConfig.yml \u914d\u7f6e\u6587\u4ef6\uff0c\u4f8b\u5982\uff1a

              addonPackage:\n  path: \"/home/addon-offline-full-package-v0.11.0-amd64.tar.gz\"\n

              \u7136\u540e\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

              ~/dce5-installer cluster-create -c /home/dce5/sample/clusterConfig.yaml -m /home/dce5/sample/manifest.yaml -d -j13\n
              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_6","title":"\u591a\u67b6\u6784\u878d\u5408","text":"

              \u51c6\u5907\u597d\u5f85\u878d\u5408\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz\u3002

              \u4ee5 addon-offline-full-package-v0.11.0-arm64.tar.gz \u4e3a\u4f8b\uff0c\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

              ~/dce5-installer import-addon -c /home/dce5/sample/clusterConfig.yaml --addon-path=/home/addon-offline-full-package-v0.11.0-arm64.tar.gz\n
              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_7","title":"\u6ce8\u610f\u4e8b\u9879","text":""},{"location":"admin/kpanda/helm/multi-archi-helm.html#_8","title":"\u78c1\u76d8\u7a7a\u95f4","text":"

              \u79bb\u7ebf\u5305\u6bd4\u8f83\u5927\uff0c\u4e14\u8fc7\u7a0b\u4e2d\u9700\u8981\u89e3\u538b\u548c load \u955c\u50cf\uff0c\u9700\u8981\u9884\u7559\u5145\u8db3\u7684\u7a7a\u95f4\uff0c\u5426\u5219\u53ef\u80fd\u5728\u8fc7\u7a0b\u4e2d\u62a5 \u201cno space left\u201d \u800c\u4e2d\u65ad\u3002

              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_9","title":"\u5931\u8d25\u540e\u91cd\u8bd5","text":"

              \u5982\u679c\u5728\u591a\u67b6\u6784\u878d\u5408\u6b65\u9aa4\u6267\u884c\u5931\u8d25\uff0c\u91cd\u8bd5\u524d\u9700\u8981\u6e05\u7406\u4e00\u4e0b\u6b8b\u7559\uff1a

              rm -rf addon-offline-target-package\n
              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_10","title":"\u955c\u50cf\u7a7a\u95f4","text":"

              \u5982\u679c\u878d\u5408\u7684\u79bb\u7ebf\u5305\u4e2d\u5305\u542b\u4e86\u4e0e\u5bfc\u5165\u7684\u79bb\u7ebf\u5305\u4e0d\u4e00\u81f4\u7684\u955c\u50cf\u7a7a\u95f4\uff0c\u53ef\u80fd\u4f1a\u5728\u878d\u5408\u8fc7\u7a0b\u4e2d\u56e0\u4e3a\u955c\u50cf\u7a7a\u95f4\u4e0d\u5b58\u5728\u800c\u62a5\u9519\uff1a

              \u89e3\u51b3\u529e\u6cd5\uff1a\u53ea\u9700\u8981\u5728\u878d\u5408\u4e4b\u524d\u521b\u5efa\u597d\u8be5\u955c\u50cf\u7a7a\u95f4\u5373\u53ef\uff0c\u4f8b\u5982\u4e0a\u56fe\u62a5\u9519\u53ef\u901a\u8fc7\u521b\u5efa\u955c\u50cf\u7a7a\u95f4 localhost \u63d0\u524d\u907f\u514d\u3002

              "},{"location":"admin/kpanda/helm/multi-archi-helm.html#_11","title":"\u67b6\u6784\u51b2\u7a81","text":"

              \u5347\u7ea7\u81f3\u4f4e\u4e8e 0.12.0 \u7248\u672c\u7684 addon \u65f6\uff0c\u7531\u4e8e\u76ee\u6807\u79bb\u7ebf\u5305\u91cc\u7684 charts-syncer \u6ca1\u6709\u68c0\u67e5\u955c\u50cf\u5b58\u5728\u5219\u4e0d\u63a8\u9001\u529f\u80fd\uff0c\u56e0\u6b64\u4f1a\u5728\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\u4f1a\u91cd\u65b0\u628a\u591a\u67b6\u6784\u51b2\u6210\u5355\u67b6\u6784\u3002 \u4f8b\u5982\uff1a\u5728 v0.10 \u7248\u672c\u5c06 addon \u5b9e\u73b0\u4e3a\u591a\u67b6\u6784\uff0c\u6b64\u65f6\u82e5\u5347\u7ea7\u4e3a v0.11 \u7248\u672c\uff0c\u5219\u591a\u67b6\u6784 addon \u4f1a\u88ab\u8986\u76d6\u4e3a\u5355\u67b6\u6784\uff1b\u82e5\u5347\u7ea7\u4e3a 0.12.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u5219\u4ecd\u80fd\u591f\u4fdd\u6301\u591a\u67b6\u6784\u3002

              "},{"location":"admin/kpanda/helm/upload-helm.html","title":"\u4e0a\u4f20 Helm \u6a21\u677f","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4e0a\u4f20 Helm \u6a21\u677f\uff0c\u64cd\u4f5c\u6b65\u9aa4\u89c1\u4e0b\u6587\u3002

              1. \u5f15\u5165 Helm \u4ed3\u5e93\uff0c\u64cd\u4f5c\u6b65\u9aa4\u53c2\u8003\u5f15\u5165\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u3002

              2. \u4e0a\u4f20 Helm Chart \u5230 Helm \u4ed3\u5e93\u3002

                \u5ba2\u6237\u7aef\u4e0a\u4f20\u9875\u9762\u4e0a\u4f20

                Note

                \u6b64\u65b9\u5f0f\u9002\u7528\u4e8e Harbor\u3001ChartMuseum\u3001JFrog \u7c7b\u578b\u4ed3\u5e93\u3002

                1. \u767b\u5f55\u4e00\u4e2a\u53ef\u4ee5\u8bbf\u95ee\u5230 Helm \u4ed3\u5e93\u7684\u8282\u70b9\uff0c\u5c06 Helm \u4e8c\u8fdb\u5236\u6587\u4ef6\u4e0a\u4f20\u5230\u8282\u70b9\uff0c\u5e76\u5b89\u88c5 cm-push \u63d2\u4ef6\uff08\u9700\u8981\u8fde\u901a\u5916\u7f51\u5e76\u63d0\u524d\u5b89\u88c5 Git\uff09\u3002

                  \u5b89\u88c5\u63d2\u4ef6\u6d41\u7a0b\u53c2\u8003\u5b89\u88c5 cm-push \u63d2\u4ef6\u3002

                2. \u63a8\u9001 Helm Chart \u5230 Helm \u4ed3\u5e93\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1b

                  helm cm-push ${charts-dir} ${HELM_REPO_URL} --username ${username} --password ${password}\n

                  \u5b57\u6bb5\u8bf4\u660e\uff1a

                  • charts-dir\uff1aHelm Chart \u7684\u76ee\u5f55\uff0c\u6216\u8005\u662f\u6253\u5305\u597d\u7684 Chart\uff08\u5373 .tgz \u6587\u4ef6\uff09\u3002
                  • HELM_REPO_URL\uff1aHelm \u4ed3\u5e93\u7684 URL\u3002
                  • username/password\uff1a\u6709\u63a8\u9001\u6743\u9650\u7684 Helm \u4ed3\u5e93\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002
                  • \u5982\u679c\u91c7\u7528 https \u8bbf\u95ee\u4e14\u9700\u8981\u8df3\u8fc7\u8bc1\u4e66\u9a8c\u8bc1\uff0c\u53ef\u6dfb\u52a0\u53c2\u6570 --insecure

                Note

                \u6b64\u65b9\u5f0f\u4ec5\u9002\u7528\u4e8e Harbor \u7c7b\u578b\u4ed3\u5e93\u3002

                1. \u767b\u5f55\u7f51\u9875 Harbor \u4ed3\u5e93\uff0c\u8bf7\u786e\u4fdd\u767b\u5f55\u7528\u6237\u6709\u63a8\u9001\u6743\u9650\uff1b

                2. \u8fdb\u5165\u5230\u5bf9\u5e94\u9879\u76ee\uff0c\u9009\u62e9 Helm Charts \u9875\u7b7e\uff0c\u70b9\u51fb\u9875\u9762 \u4e0a\u4f20 \u6309\u94ae\uff0c\u5b8c\u6210 Helm Chart \u4e0a\u4f20\u3002

              3. \u540c\u6b65\u8fdc\u7aef\u4ed3\u5e93\u6570\u636e

                \u624b\u52a8\u540c\u6b65\u81ea\u52a8\u540c\u6b65

                \u9ed8\u8ba4\u96c6\u7fa4\u672a\u5f00\u542f Helm \u4ed3\u5e93\u81ea\u52a8\u5237\u65b0 \uff0c\u9700\u8981\u6267\u884c\u624b\u52a8\u540c\u6b65\u64cd\u4f5c\uff0c\u5927\u81f4\u6b65\u9aa4\u4e3a\uff1a

                \u8fdb\u5165 Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u70b9\u51fb\u4ed3\u5e93\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \u6309\u94ae\uff0c\u9009\u62e9 \u540c\u6b65\u4ed3\u5e93 \uff0c\u5b8c\u6210\u4ed3\u5e93\u6570\u636e\u540c\u6b65\u3002

                \u5982\u9700\u5f00\u542f Helm \u4ed3\u5e93\u81ea\u52a8\u540c\u6b65\u529f\u80fd\uff0c\u53ef\u8fdb\u5165 \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u8bbe\u7f6e -> \u9ad8\u7ea7\u914d\u7f6e \uff0c\u5f00\u542f Helm \u4ed3\u5e93\u81ea\u52a8\u5237\u65b0\u5f00\u5173\u3002

              "},{"location":"admin/kpanda/inspect/index.html","title":"\u96c6\u7fa4\u5de1\u68c0","text":"

              \u96c6\u7fa4\u5de1\u68c0\u53ef\u4ee5\u901a\u8fc7\u81ea\u52a8\u6216\u624b\u52a8\u65b9\u5f0f\uff0c\u5b9a\u671f\u6216\u968f\u65f6\u68c0\u67e5\u96c6\u7fa4\u7684\u6574\u4f53\u5065\u5eb7\u72b6\u6001\uff0c\u8ba9\u7ba1\u7406\u5458\u83b7\u5f97\u4fdd\u969c\u96c6\u7fa4\u5b89\u5168\u7684\u4e3b\u52a8\u6743\u3002 \u57fa\u4e8e\u5408\u7406\u7684\u5de1\u68c0\u8ba1\u5212\uff0c\u8fd9\u79cd\u4e3b\u52a8\u81ea\u53d1\u7684\u96c6\u7fa4\u68c0\u67e5\u53ef\u4ee5\u8ba9\u7ba1\u7406\u5458\u968f\u65f6\u638c\u63e1\u96c6\u7fa4\u72b6\u6001\uff0c\u6446\u8131\u4e4b\u524d\u51fa\u73b0\u6545\u969c\u65f6\u53ea\u80fd\u88ab\u52a8\u6392\u67e5\u95ee\u9898\u7684\u56f0\u5883\uff0c\u505a\u5230\u4e8b\u5148\u76d1\u63a7\u3001\u63d0\u524d\u9632\u8303\u3002

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63d0\u4f9b\u7684\u96c6\u7fa4\u5de1\u68c0\u529f\u80fd\uff0c\u652f\u6301\u4ece\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\uff08Pod\uff09\u4e09\u4e2a\u7ef4\u5ea6\u8fdb\u884c\u81ea\u5b9a\u4e49\u5de1\u68c0\u9879\uff0c\u5de1\u68c0\u7ed3\u675f\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u53ef\u89c6\u5316\u7684\u5de1\u68c0\u62a5\u544a\u3002

              • \u96c6\u7fa4\u7ef4\u5ea6\uff1a\u68c0\u67e5\u96c6\u7fa4\u4e2d\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u60c5\u51b5\uff0c\u5305\u62ec\u96c6\u7fa4\u72b6\u6001\u3001\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u4ee5\u53ca\u63a7\u5236\u8282\u70b9\u7279\u6709\u7684\u5de1\u68c0\u9879\u7b49\uff0c\u4f8b\u5982 kube-apiserver \u548c etcd \u7684\u72b6\u6001\u3002
              • \u8282\u70b9\u7ef4\u5ea6\uff1a\u5305\u62ec\u63a7\u5236\u8282\u70b9\u548c\u5de5\u4f5c\u8282\u70b9\u901a\u7528\u7684\u68c0\u67e5\u9879\uff0c\u4f8b\u5982\u8282\u70b9\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3001\u53e5\u67c4\u6570\u3001PID \u72b6\u6001\u3001\u7f51\u7edc\u72b6\u6001\u3002
              • \u5bb9\u5668\u7ec4\u7ef4\u5ea6\uff1a\u68c0\u67e5 Pod \u7684 CPU \u548c\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\u3001\u8fd0\u884c\u72b6\u6001\u3001PV \u548c PVC \u7684\u72b6\u6001\u7b49\u3002

              \u5982\u9700\u4e86\u89e3\u6216\u6267\u884c\u5b89\u5168\u65b9\u9762\u7684\u5de1\u68c0\uff0c\u53ef\u53c2\u8003\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u7684\u5b89\u5168\u626b\u63cf\u7c7b\u578b\u3002

              "},{"location":"admin/kpanda/inspect/config.html","title":"\u521b\u5efa\u5de1\u68c0\u914d\u7f6e","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63d0\u4f9b\u96c6\u7fa4\u5de1\u68c0\u529f\u80fd\uff0c\u652f\u6301\u4ece\u96c6\u7fa4\u7ef4\u5ea6\u3001\u8282\u70b9\u7ef4\u5ea6\u3001\u5bb9\u5668\u7ec4\u7ef4\u5ea6\u8fdb\u884c\u5de1\u68c0\u3002

              • \u96c6\u7fa4\u7ef4\u5ea6\uff1a\u68c0\u67e5\u96c6\u7fa4\u4e2d\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u60c5\u51b5\uff0c\u5305\u62ec\u96c6\u7fa4\u72b6\u6001\u3001\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\uff0c\u4ee5\u53ca\u63a7\u5236\u8282\u70b9\u7279\u6709\u7684\u5de1\u68c0\u9879\u7b49\uff0c\u4f8b\u5982 kube-apiserver \u548c etcd \u7684\u72b6\u6001\u3002
              • \u8282\u70b9\u7ef4\u5ea6\uff1a\u5305\u62ec\u63a7\u5236\u8282\u70b9\u548c\u5de5\u4f5c\u8282\u70b9\u901a\u7528\u7684\u68c0\u67e5\u9879\uff0c\u4f8b\u5982\u8282\u70b9\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3001\u53e5\u67c4\u6570\u3001PID \u72b6\u6001\u3001\u7f51\u7edc\u72b6\u6001\u3002
              • \u5bb9\u5668\u7ec4\u7ef4\u5ea6\uff1a\u68c0\u67e5 Pod \u7684 CPU \u548c\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\u3001\u8fd0\u884c\u72b6\u6001\u3001PV \u548c PVC \u7684\u72b6\u6001\u7b49\u3002

              \u4e0b\u9762\u4ecb\u7ecd\u5982\u4f55\u521b\u5efa\u5de1\u68c0\u914d\u7f6e\u3002

              "},{"location":"admin/kpanda/inspect/config.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4
              • \u6240\u9009\u96c6\u7fa4\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u4e14\u5df2\u7ecf\u5728\u96c6\u7fa4\u4e2d\u5b89\u88c5\u4e86 insight \u7ec4\u4ef6
              "},{"location":"admin/kpanda/inspect/config.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u96c6\u7fa4\u5de1\u68c0 \u3002

              2. \u5728\u9875\u9762\u53f3\u4fa7\u70b9\u51fb \u5de1\u68c0\u914d\u7f6e \u3002

              3. \u53c2\u8003\u4ee5\u4e0b\u8bf4\u660e\u586b\u5199\u5de1\u68c0\u914d\u7f6e\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                • \u96c6\u7fa4\uff1a\u4e0b\u62c9\u9009\u62e9\u8981\u5bf9\u54ea\u4e9b\u96c6\u7fa4\u8fdb\u884c\u5de1\u68c0\u3002\u5982\u679c\u9009\u62e9\u591a\u4e2a\u96c6\u7fa4\uff0c\u5219\u81ea\u52a8\u751f\u6210\u591a\u4e2a\u5de1\u68c0\u914d\u7f6e\uff08\u4ec5\u5de1\u68c0\u7684\u96c6\u7fa4\u4e0d\u4e00\u81f4\uff0c\u5176\u4ed6\u914d\u7f6e\u90fd\u5b8c\u5168\u4e00\u81f4\uff09
                • \u5b9a\u65f6\u5de1\u68c0\uff1a\u542f\u7528\u540e\u53ef\u6839\u636e\u4e8b\u5148\u8bbe\u7f6e\u7684\u5de1\u68c0\u9891\u7387\u5b9a\u671f\u81ea\u52a8\u6267\u884c\u96c6\u7fa4\u5de1\u68c0
                • \u5de1\u68c0\u9891\u7387\uff1a\u8bbe\u7f6e\u81ea\u52a8\u5de1\u68c0\u7684\u5468\u671f\uff0c\u4f8b\u5982\u6bcf\u5468\u4e8c\u4e0a\u5348\u5341\u70b9\u3002\u652f\u6301\u81ea\u5b9a\u4e49 CronExpression\uff0c\u53ef\u53c2\u8003 Cron \u65f6\u95f4\u8868\u8bed\u6cd5
                • \u5de1\u68c0\u8bb0\u5f55\u4fdd\u7559\u6761\u6570\uff1a\u7d2f\u8ba1\u6700\u591a\u4fdd\u7559\u591a\u5c11\u6761\u5de1\u68c0\u8bb0\u5f55\uff0c\u5305\u62ec\u6240\u6709\u96c6\u7fa4\u7684\u5de1\u68c0\u8bb0\u5f55
                • \u53c2\u6570\u914d\u7f6e\uff1a\u53c2\u6570\u914d\u7f6e\u5206\u4e3a\u96c6\u7fa4\u7ef4\u5ea6\u3001\u8282\u70b9\u7ef4\u5ea6\u3001\u5bb9\u5668\u7ec4\u7ef4\u5ea6\u4e09\u90e8\u5206\uff0c\u53ef\u4ee5\u6839\u636e\u573a\u666f\u9700\u6c42\u542f\u7528\u6216\u7981\u7528\u67d0\u4e9b\u5de1\u68c0\u9879\u3002

              \u5de1\u68c0\u914d\u7f6e\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u4f1a\u81ea\u52a8\u663e\u793a\u5728\u5de1\u68c0\u914d\u7f6e\u5217\u8868\u4e2d\u3002\u5728\u914d\u7f6e\u53f3\u4fa7\u70b9\u51fb\u66f4\u591a\u64cd\u4f5c\u6309\u94ae\u53ef\u4ee5\u7acb\u5373\u6267\u884c\u5de1\u68c0\u3001\u4fee\u6539\u5de1\u68c0\u914d\u7f6e\u3001\u5220\u9664\u5de1\u68c0\u914d\u7f6e\u548c\u5de1\u68c0\u8bb0\u5f55\u3002

              • \u70b9\u51fb \u5de1\u68c0 \u53ef\u4ee5\u6839\u636e\u8be5\u914d\u7f6e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u5de1\u68c0\u3002
              • \u70b9\u51fb \u5de1\u68c0\u914d\u7f6e \u53ef\u4ee5\u4fee\u6539\u5de1\u68c0\u914d\u7f6e\u3002
              • \u70b9\u51fb \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u5de1\u68c0\u914d\u7f6e\u548c\u5386\u53f2\u7684\u5de1\u68c0\u8bb0\u5f55

              Note

              • \u5de1\u68c0\u914d\u7f6e\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u5982\u679c\u542f\u7528\u4e86 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u4f1a\u5728\u6307\u5b9a\u65f6\u95f4\u81ea\u52a8\u6267\u884c\u5de1\u68c0\u3002
              • \u5982\u672a\u542f\u7528 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u9700\u8981\u624b\u52a8\u89e6\u53d1\u5de1\u68c0\u3002
              "},{"location":"admin/kpanda/inspect/inspect.html","title":"\u6267\u884c\u96c6\u7fa4\u5de1\u68c0","text":"

              \u5de1\u68c0\u914d\u7f6e\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u5982\u679c\u542f\u7528\u4e86 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u4f1a\u5728\u6307\u5b9a\u65f6\u95f4\u81ea\u52a8\u6267\u884c\u5de1\u68c0\u3002\u5982\u672a\u542f\u7528 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u9700\u8981\u624b\u52a8\u89e6\u53d1\u5de1\u68c0\u3002

              \u6b64\u9875\u4ecb\u7ecd\u5982\u4f55\u624b\u52a8\u6267\u884c\u96c6\u7fa4\u5de1\u68c0\u3002

              "},{"location":"admin/kpanda/inspect/inspect.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4
              • \u5df2\u521b\u5efa\u5de1\u68c0\u914d\u7f6e
              • \u6240\u9009\u96c6\u7fa4\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u4e14\u5df2\u7ecf\u5728\u96c6\u7fa4\u4e2d\u5b89\u88c5\u4e86 insight \u7ec4\u4ef6
              "},{"location":"admin/kpanda/inspect/inspect.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u6267\u884c\u5de1\u68c0\u65f6\uff0c\u652f\u6301\u52fe\u9009\u591a\u4e2a\u96c6\u7fa4\u8fdb\u884c\u6279\u91cf\u5de1\u68c0\uff0c\u6216\u8005\u4ec5\u5bf9\u67d0\u4e00\u4e2a\u96c6\u7fa4\u8fdb\u884c\u5355\u72ec\u5de1\u68c0\u3002

              \u6279\u91cf\u5de1\u68c0\u5355\u72ec\u5de1\u68c0
              1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u4e00\u7ea7\u5bfc\u822a\u680f\u70b9\u51fb \u96c6\u7fa4\u5de1\u68c0 \uff0c\u7136\u540e\u5728\u9875\u9762\u53f3\u4fa7\u70b9\u51fb \u5de1\u68c0 \u3002

              2. \u52fe\u9009\u9700\u8981\u5de1\u68c0\u7684\u96c6\u7fa4\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                • \u82e5\u9009\u62e9\u591a\u4e2a\u96c6\u7fa4\u8fdb\u884c\u540c\u65f6\u5de1\u68c0\uff0c\u7cfb\u7edf\u5c06\u6839\u636e\u4e0d\u540c\u96c6\u7fa4\u7684\u5de1\u68c0\u914d\u7f6e\u8fdb\u884c\u5de1\u68c0\u3002
                • \u5982\u672a\u8bbe\u7f6e\u96c6\u7fa4\u5de1\u68c0\u914d\u7f6e\uff0c\u5c06\u4f7f\u7528\u7cfb\u7edf\u9ed8\u8ba4\u914d\u7f6e\u3002

              1. \u8fdb\u5165\u96c6\u7fa4\u5de1\u68c0\u9875\u9762\u3002
              2. \u5728\u5bf9\u5e94\u5de1\u68c0\u914d\u7f6e\u7684\u53f3\u4fa7\u70b9\u51fb \u2507 \u66f4\u591a\u64cd\u4f5c\u6309\u94ae\uff0c\u7136\u540e\u5728\u5f39\u51fa\u7684\u83dc\u5355\u4e2d\u9009\u62e9 \u5de1\u68c0 \u5373\u53ef\u3002

              "},{"location":"admin/kpanda/inspect/report.html","title":"\u67e5\u770b\u5de1\u68c0\u62a5\u544a","text":"

              \u5de1\u68c0\u6267\u884c\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u5de1\u68c0\u8bb0\u5f55\u548c\u8be6\u7ec6\u7684\u5de1\u68c0\u62a5\u544a\u3002

              "},{"location":"admin/kpanda/inspect/report.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5df2\u7ecf\u521b\u5efa\u4e86\u5de1\u68c0\u914d\u7f6e
              • \u5df2\u7ecf\u6267\u884c\u8fc7\u81f3\u5c11\u4e00\u6b21\u5de1\u68c0
              "},{"location":"admin/kpanda/inspect/report.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165\u96c6\u7fa4\u5de1\u68c0\u9875\u9762\uff0c\u70b9\u51fb\u76ee\u6807\u5de1\u68c0\u96c6\u7fa4\u7684\u540d\u79f0\u3002

              2. \u70b9\u51fb\u60f3\u8981\u67e5\u770b\u7684\u5de1\u68c0\u8bb0\u5f55\u540d\u79f0\u3002

                • \u6bcf\u6267\u884c\u4e00\u6b21\u5de1\u68c0\uff0c\u5c31\u4f1a\u751f\u6210\u4e00\u6761\u5de1\u68c0\u8bb0\u5f55\u3002
                • \u5f53\u5de1\u68c0\u8bb0\u5f55\u8d85\u8fc7\u5de1\u68c0\u914d\u7f6e\u4e2d\u8bbe\u7f6e\u7684\u6700\u5927\u4fdd\u7559\u6761\u6570\u65f6\uff0c\u4ece\u6267\u884c\u65f6\u95f4\u6700\u65e9\u7684\u8bb0\u5f55\u5f00\u59cb\u5220\u9664\u3002

              3. \u67e5\u770b\u5de1\u68c0\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u6839\u636e\u5de1\u68c0\u914d\u7f6e\u53ef\u80fd\u5305\u62ec\u96c6\u7fa4\u8d44\u6e90\u6982\u89c8\u3001\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u60c5\u51b5\u7b49\u3002

                \u5728\u9875\u9762\u53f3\u4e0a\u89d2\u53ef\u4ee5\u4e0b\u8f7d\u5de1\u68c0\u62a5\u544a\u6216\u5220\u9664\u8be5\u9879\u5de1\u68c0\u62a5\u544a\u3002

              "},{"location":"admin/kpanda/namespaces/createns.html","title":"\u547d\u540d\u7a7a\u95f4","text":"

              \u547d\u540d\u7a7a\u95f4\u662f Kubernetes \u4e2d\u7528\u6765\u8fdb\u884c\u8d44\u6e90\u9694\u79bb\u7684\u4e00\u79cd\u62bd\u8c61\u3002\u4e00\u4e2a\u96c6\u7fa4\u4e0b\u53ef\u4ee5\u5305\u542b\u591a\u4e2a\u4e0d\u91cd\u540d\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6bcf\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\u7684\u8d44\u6e90\u76f8\u4e92\u9694\u79bb\u3002\u6709\u5173\u547d\u540d\u7a7a\u95f4\u7684\u8be6\u7ec6\u4ecb\u7ecd\uff0c\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u3002

              \u672c\u6587\u5c06\u4ecb\u7ecd\u547d\u540d\u7a7a\u95f4\u7684\u76f8\u5173\u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/namespaces/createns.html#_2","title":"\u521b\u5efa\u547d\u540d\u7a7a\u95f4","text":"

              \u652f\u6301\u901a\u8fc7\u8868\u5355\u8f7b\u677e\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff0c\u4e5f\u652f\u6301\u901a\u8fc7\u7f16\u5199\u6216\u5bfc\u5165 YAML \u6587\u4ef6\u5feb\u901f\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u3002

              Note

              • \u5728\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u4e4b\u524d\uff0c\u9700\u8981\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\u3002
              • \u96c6\u7fa4\u521d\u59cb\u5316\u540e\u901a\u5e38\u4f1a\u81ea\u52a8\u751f\u6210\u9ed8\u8ba4\u7684\u547d\u540d\u7a7a\u95f4 default \u3002\u4f46\u5bf9\u4e8e\u751f\u4ea7\u96c6\u7fa4\u800c\u8a00\uff0c\u4e3a\u4fbf\u4e8e\u7ba1\u7406\uff0c\u5efa\u8bae\u521b\u5efa\u5176\u4ed6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u800c\u975e\u76f4\u63a5\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002
              "},{"location":"admin/kpanda/namespaces/createns.html#_3","title":"\u8868\u5355\u521b\u5efa","text":"
              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

              3. \u586b\u5199\u547d\u540d\u7a7a\u95f4\u7684\u540d\u79f0\uff0c\u914d\u7f6e\u5de5\u4f5c\u7a7a\u95f4\u548c\u6807\u7b7e\uff08\u53ef\u9009\u8bbe\u7f6e\uff09\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                Info

                • \u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4\u4e4b\u540e\uff0c\u8be5\u547d\u540d\u7a7a\u95f4\u7684\u8d44\u6e90\u5c31\u4f1a\u5171\u4eab\u7ed9\u6240\u7ed1\u5b9a\u7684\u5de5\u4f5c\u7a7a\u95f4\u3002\u6709\u5173\u5de5\u4f5c\u7a7a\u95f4\u7684\u8be6\u7ec6\u8bf4\u660e\uff0c\u53ef\u53c2\u8003\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\u3002

                • \u547d\u540d\u7a7a\u95f4\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u4ecd\u7136\u53ef\u4ee5\u7ed1\u5b9a/\u89e3\u7ed1\u5de5\u4f5c\u7a7a\u95f4\u3002

              4. \u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3002\u5728\u547d\u540d\u7a7a\u95f4\u5217\u8868\u53f3\u4fa7\uff0c\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u4ece\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9\u67e5\u770b YAML\u3001\u4fee\u6539\u6807\u7b7e\u3001\u7ed1\u5b9a/\u89e3\u7ed1\u5de5\u4f5c\u7a7a\u95f4\u3001\u914d\u989d\u7ba1\u7406\u3001\u5220\u9664\u7b49\u66f4\u591a\u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/namespaces/createns.html#yaml","title":"YAML \u521b\u5efa","text":"
              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4fa7\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

              3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u5185\u5bb9\uff0c\u6216\u8005\u4ece\u672c\u5730\u76f4\u63a5\u5bfc\u5165\u5df2\u6709\u7684 YAML \u6587\u4ef6\u3002

                \u8f93\u5165 YAML \u5185\u5bb9\u540e\uff0c\u70b9\u51fb \u4e0b\u8f7d \u53ef\u4ee5\u5c06\u8be5 YAML \u6587\u4ef6\u4fdd\u5b58\u5230\u672c\u5730\u3002

              4. \u6700\u540e\u5728\u5f39\u6846\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

              "},{"location":"admin/kpanda/namespaces/exclusive.html","title":"\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9","text":"

              \u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u6307\u5728 kubernetes \u96c6\u7fa4\u4e2d\uff0c\u901a\u8fc7\u6c61\u70b9\u548c\u6c61\u70b9\u5bb9\u5fcd\u7684\u65b9\u5f0f\u5b9e\u73b0\u7279\u5b9a\u547d\u540d\u7a7a\u95f4\u5bf9\u4e00\u4e2a\u6216\u591a\u4e2a\u8282\u70b9 CPU\u3001\u5185\u5b58\u7b49\u8d44\u6e90\u7684\u72ec\u4eab\u3002\u4e3a\u7279\u5b9a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u72ec\u4eab\u8282\u70b9\u540e\uff0c\u5176\u5b83\u975e\u6b64\u547d\u540d\u7a7a\u95f4\u7684\u5e94\u7528\u548c\u670d\u52a1\u5747\u4e0d\u80fd\u8fd0\u884c\u5728\u88ab\u72ec\u4eab\u7684\u8282\u70b9\u4e0a\u3002\u4f7f\u7528\u72ec\u4eab\u8282\u70b9\u53ef\u4ee5\u8ba9\u91cd\u8981\u5e94\u7528\u72ec\u4eab\u4e00\u90e8\u5206\u8ba1\u7b97\u8d44\u6e90\uff0c\u4ece\u800c\u548c\u5176\u4ed6\u5e94\u7528\u5b9e\u73b0\u7269\u7406\u9694\u79bb\u3002

              Note

              \u5728\u8282\u70b9\u88ab\u8bbe\u7f6e\u4e3a\u72ec\u4eab\u8282\u70b9\u524d\u5df2\u7ecf\u8fd0\u884c\u5728\u6b64\u8282\u70b9\u4e0a\u7684\u5e94\u7528\u548c\u670d\u52a1\u5c06\u4e0d\u4f1a\u53d7\u5f71\u54cd\uff0c\u4f9d\u7136\u4f1a\u6b63\u5e38\u8fd0\u884c\u5728\u8be5\u8282\u70b9\u4e0a\uff0c\u4ec5\u5f53\u8fd9\u4e9b Pod \u88ab\u5220\u9664\u6216\u91cd\u5efa\u65f6\uff0c\u624d\u4f1a\u8c03\u5ea6\u5230\u5176\u5b83\u975e\u72ec\u4eab\u8282\u70b9\u4e0a\u3002

              "},{"location":"admin/kpanda/namespaces/exclusive.html#_2","title":"\u51c6\u5907\u5de5\u4f5c","text":"

              \u68c0\u67e5\u5f53\u524d\u96c6\u7fa4\u7684 kube-apiserver \u662f\u5426\u542f\u7528\u4e86 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668\u3002

              \u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u529f\u80fd\u9700\u8981\u7528\u6237\u542f\u7528 kube-apiserver \u4e0a\u7684 PodNodeSelector \u548c PodTolerationRestriction \u4e24\u4e2a\u7279\u6027\u51c6\u5165\u63a7\u5236\u5668\uff08Admission Controllers\uff09\uff0c\u5173\u4e8e\u51c6\u5165\u63a7\u5236\u5668\u66f4\u591a\u8bf4\u660e\u8bf7\u53c2\u9605 kubernetes Admission Controllers Reference\u3002

              \u60a8\u53ef\u4ee5\u524d\u5f80\u5f53\u524d\u96c6\u7fa4\u4e0b\u4efb\u610f\u4e00\u4e2a Master \u8282\u70b9\u4e0a\u68c0\u67e5 kube-apiserver.yaml \u6587\u4ef6\u5185\u662f\u5426\u542f\u7528\u4e86\u8fd9\u4e24\u4e2a\u7279\u6027\uff0c\u4e5f\u53ef\u4ee5\u5728 Master \u8282\u70b9\u4e0a\u6267\u884c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u5feb\u901f\u68c0\u67e5\uff1a

              ```bash\n[root@g-master1 ~]# cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep  enable-admission-plugins\n\n# \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a\n- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction\n```\n
              "},{"location":"admin/kpanda/namespaces/exclusive.html#_3","title":"\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9","text":"

              \u7531\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u8fd0\u884c\u7740 kpanda\u3001ghippo\u3001insight \u7b49\u5e73\u53f0\u57fa\u7840\u7ec4\u4ef6\uff0c\u5728 Global \u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u5c06\u53ef\u80fd\u5bfc\u81f4\u5f53\u7cfb\u7edf\u7ec4\u4ef6\u91cd\u542f\u540e\uff0c\u7cfb\u7edf\u7ec4\u4ef6\u65e0\u6cd5\u8c03\u5ea6\u5230\u88ab\u72ec\u4eab\u7684\u8282\u70b9\u4e0a\uff0c\u5f71\u54cd\u7cfb\u7edf\u7684\u6574\u4f53\u9ad8\u53ef\u7528\u80fd\u529b\u3002\u56e0\u6b64\uff0c\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e0d\u63a8\u8350\u7528\u6237\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u7279\u6027\u3002

              \u5982\u679c\u60a8\u786e\u5b9e\u9700\u8981\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u5f00\u542f\uff1a

              1. \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 kube-apiserver \u542f\u7528\u4e86 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668

                Note

                \u5982\u679c\u96c6\u7fa4\u5df2\u542f\u7528\u4e86\u4e0a\u8ff0\u7684\u4e24\u4e2a\u51c6\u5165\u63a7\u5236\u5668\uff0c\u8bf7\u8df3\u8fc7\u6b64\u6b65\uff0c\u76f4\u63a5\u524d\u5f80\u914d\u7f6e\u7cfb\u7edf\u7ec4\u4ef6\u5bb9\u5fcd\u3002

                \u524d\u5f80\u5f53\u524d\u96c6\u7fa4\u4e0b\u4efb\u610f\u4e00\u4e2a Master \u8282\u70b9\u4e0a\u4fee\u6539 kube-apiserver.yaml \u914d\u7f6e\u6587\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u5728 Master \u8282\u70b9\u4e0a\u6267\u884c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\uff1a

                [root@g-master1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml\n\n# \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a\napiVersion: v1\nkind: Pod\nmetadata:\n    ......\nspec:\ncontainers:\n- command:\n    - kube-apiserver\n    ......\n    - --default-not-ready-toleration-seconds=300\n    - --default-unreachable-toleration-seconds=300\n    - --enable-admission-plugins=NodeRestriction   #\u542f\u7528\u7684\u51c6\u5165\u63a7\u5236\u5668\u5217\u8868\n    - --enable-aggregator-routing=False\n    - --enable-bootstrap-token-auth=true\n    - --endpoint-reconciler-type=lease\n    - --etcd-cafile=/etc/kubernetes/ssl/etcd/ca.crt\n    ......\n

                \u627e\u5230 --enable-admission-plugins \u53c2\u6570\uff0c\u52a0\u5165\uff08\u4ee5\u82f1\u6587\u9017\u53f7\u5206\u9694\u7684\uff09 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668\u3002\u53c2\u8003\u5982\u4e0b\uff1a

                # \u52a0\u5165 __ ,PodNodeSelector,PodTolerationRestriction__ \n- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction \n
              2. \u4e3a\u5e73\u53f0\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u5bb9\u5fcd\u6ce8\u89e3

                \u5b8c\u6210\u51c6\u5165\u63a7\u5236\u5668\u7684\u5f00\u542f\u540e\uff0c\u60a8\u9700\u8981\u4e3a\u5e73\u53f0\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u5bb9\u5fcd\u6ce8\u89e3\uff0c\u4ee5\u4fdd\u8bc1\u5e73\u53f0\u7ec4\u4ef6\u7684\u9ad8\u53ef\u7528\u3002

                \u76ee\u524d\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u7cfb\u7edf\u7ec4\u4ef6\u547d\u540d\u7a7a\u95f4\u5982\u4e0b\u8868\uff1a

                \u547d\u540d\u7a7a\u95f4 \u6240\u5305\u542b\u7684\u7cfb\u7edf\u7ec4\u4ef6 kpanda-system kpanda hwameiStor-system hwameiStor istio-system istio metallb-system metallb cert-manager-system cert-manager contour-system contour kubean-system kubean ghippo-system ghippo kcoral-system kcoral kcollie-system kcollie insight-system insight\u3001insight-agent: ipavo-system ipavo kairship-system kairship karmada-system karmada amamba-system amamba\u3001jenkins skoala-system skoala mspider-system mspider mcamel-system mcamel-rabbitmq\u3001mcamel-elasticsearch\u3001mcamel-mysql\u3001mcamel-redis\u3001mcamel-kafka\u3001mcamel-minio\u3001mcamel-postgresql spidernet-system spidernet kangaroo-system kangaroo gmagpie-system gmagpie dowl-system dowl

                \u68c0\u67e5\u5f53\u524d\u96c6\u7fa4\u4e2d\u6240\u6709\u547d\u540d\u7a7a\u95f4\u662f\u5426\u5b58\u5728\u4e0a\u8ff0\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5206\u522b\u4e3a\u6bcf\u4e2a\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u6ce8\u89e3\uff1a scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]' \u3002

                kubectl annotate ns <namespace-name> scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \n\"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]'\n
                \u8bf7\u786e\u4fdd\u5c06 <namespace-name> \u66ff\u6362\u4e3a\u8981\u6dfb\u52a0\u6ce8\u89e3\u7684\u5e73\u53f0\u547d\u540d\u7a7a\u95f4\u540d\u79f0\u3002

              3. \u4f7f\u7528\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9

                \u5f53\u60a8\u786e\u8ba4\u96c6\u7fa4 API \u670d\u52a1\u5668\u4e0a\u7684 PodNodeSelector \u548c PodTolerationRestriction \u4e24\u4e2a\u7279\u6027\u51c6\u5165\u63a7\u5236\u5668\u5df2\u7ecf\u5f00\u542f\u540e\uff0c\u8bf7\u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684 UI \u7ba1\u7406\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9\u4e86\u3002

                1. \u5728\u96c6\u7fa4\u5217\u8868\u9875\u9762\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \u3002

                2. \u70b9\u51fb\u547d\u540d\u7a7a\u95f4\u540d\u79f0\uff0c\u7136\u540e\u70b9\u51fb \u72ec\u4eab\u8282\u70b9 \u9875\u7b7e\uff0c\u5728\u4e0b\u65b9\u53f3\u4fa7\u70b9\u51fb \u6dfb\u52a0\u8282\u70b9 \u3002

                3. \u5728\u9875\u9762\u5de6\u4fa7\u9009\u62e9\u8ba9\u8be5\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u54ea\u4e9b\u8282\u70b9\uff0c\u5728\u53f3\u4fa7\u53ef\u4ee5\u6e05\u7a7a\u6216\u5220\u9664\u67d0\u4e2a\u5df2\u9009\u8282\u70b9\uff0c\u6700\u540e\u5728\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                4. \u53ef\u4ee5\u5728\u5217\u8868\u4e2d\u67e5\u770b\u6b64\u547d\u540d\u7a7a\u95f4\u7684\u5df2\u6709\u7684\u72ec\u4eab\u8282\u70b9\uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u53ef\u4ee5\u9009\u62e9 \u53d6\u6d88\u72ec\u4eab \u3002

                  \u53d6\u6d88\u72ec\u4eab\u4e4b\u540e\uff0c\u5176\u4ed6\u547d\u540d\u7a7a\u95f4\u4e0b\u7684 Pod \u4e5f\u53ef\u4ee5\u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u4e0a\u3002

              "},{"location":"admin/kpanda/namespaces/exclusive.html#_4","title":"\u5728 \u975e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9","text":"

              \u5728 \u975e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u5f00\u542f\uff1a

              1. \u4e3a\u5f53\u524d\u96c6\u7fa4\u7684 kube-apiserver \u542f\u7528\u4e86 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668

                Note

                \u5982\u679c\u96c6\u7fa4\u5df2\u542f\u7528\u4e86\u4e0a\u8ff0\u7684\u4e24\u4e2a\u51c6\u5165\u63a7\u5236\u5668\uff0c\u8bf7\u8df3\u8fc7\u6b64\u6b65\uff0c\u76f4\u63a5\u524d\u5f80\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9

                \u524d\u5f80\u5f53\u524d\u96c6\u7fa4\u4e0b\u4efb\u610f\u4e00\u4e2a Master \u8282\u70b9\u4e0a\u4fee\u6539 kube-apiserver.yaml \u914d\u7f6e\u6587\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u5728 Master \u8282\u70b9\u4e0a\u6267\u884c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\uff1a

                [root@g-master1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml\n\n# \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a\napiVersion: v1\nkind: Pod\nmetadata:\n    ......\nspec:\ncontainers:\n- command:\n    - kube-apiserver\n    ......\n    - --default-not-ready-toleration-seconds=300\n    - --default-unreachable-toleration-seconds=300\n    - --enable-admission-plugins=NodeRestriction   #\u542f\u7528\u7684\u51c6\u5165\u63a7\u5236\u5668\u5217\u8868\n    - --enable-aggregator-routing=False\n    - --enable-bootstrap-token-auth=true\n    - --endpoint-reconciler-type=lease\n    - --etcd-cafile=/etc/kubernetes/ssl/etcd/ca.crt\n    ......\n

                \u627e\u5230 --enable-admission-plugins \u53c2\u6570\uff0c\u52a0\u5165\uff08\u4ee5\u82f1\u6587\u9017\u53f7\u5206\u9694\u7684\uff09 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668\u3002\u53c2\u8003\u5982\u4e0b\uff1a

                # \u52a0\u5165 __ ,PodNodeSelector,PodTolerationRestriction__ \n- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction \n
              2. \u4f7f\u7528\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9

                \u5f53\u60a8\u786e\u8ba4\u96c6\u7fa4 API \u670d\u52a1\u5668\u4e0a\u7684 PodNodeSelector \u548c PodTolerationRestriction \u4e24\u4e2a\u7279\u6027\u51c6\u5165\u63a7\u5236\u5668\u5df2\u7ecf\u5f00\u542f\u540e\uff0c\u8bf7\u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684 UI \u7ba1\u7406\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9\u4e86\u3002

                1. \u5728\u96c6\u7fa4\u5217\u8868\u9875\u9762\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \u3002

                2. \u70b9\u51fb\u547d\u540d\u7a7a\u95f4\u540d\u79f0\uff0c\u7136\u540e\u70b9\u51fb \u72ec\u4eab\u8282\u70b9 \u9875\u7b7e\uff0c\u5728\u4e0b\u65b9\u53f3\u4fa7\u70b9\u51fb \u6dfb\u52a0\u8282\u70b9 \u3002

                3. \u5728\u9875\u9762\u5de6\u4fa7\u9009\u62e9\u8ba9\u8be5\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u54ea\u4e9b\u8282\u70b9\uff0c\u5728\u53f3\u4fa7\u53ef\u4ee5\u6e05\u7a7a\u6216\u5220\u9664\u67d0\u4e2a\u5df2\u9009\u8282\u70b9\uff0c\u6700\u540e\u5728\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                4. \u53ef\u4ee5\u5728\u5217\u8868\u4e2d\u67e5\u770b\u6b64\u547d\u540d\u7a7a\u95f4\u7684\u5df2\u6709\u7684\u72ec\u4eab\u8282\u70b9\uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u53ef\u4ee5\u9009\u62e9 \u53d6\u6d88\u72ec\u4eab \u3002

                  \u53d6\u6d88\u72ec\u4eab\u4e4b\u540e\uff0c\u5176\u4ed6\u547d\u540d\u7a7a\u95f4\u4e0b\u7684 Pod \u4e5f\u53ef\u4ee5\u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u4e0a\u3002

              3. \u4e3a\u9700\u8981\u9ad8\u53ef\u7528\u7684\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u5bb9\u5fcd\u6ce8\u89e3\uff08\u53ef\u9009\uff09

                \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u9700\u8981\u9ad8\u53ef\u7528\u7684\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u6ce8\u89e3\uff1ascheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]'\u3002

                kubectl annotate ns <namespace-name> scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \n\"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]'\n

                \u8bf7\u786e\u4fdd\u5c06 <namespace-name> \u66ff\u6362\u4e3a\u8981\u6dfb\u52a0\u6ce8\u89e3\u7684\u5e73\u53f0\u547d\u540d\u7a7a\u95f4\u540d\u79f0\u3002

              "},{"location":"admin/kpanda/namespaces/podsecurity.html","title":"\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565","text":"

              \u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565\u6307\u5728 kubernetes \u96c6\u7fa4\u4e2d\uff0c\u901a\u8fc7\u4e3a\u6307\u5b9a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u4e0d\u540c\u7684\u7b49\u7ea7\u548c\u6a21\u5f0f\uff0c\u5b9e\u73b0\u5728\u5b89\u5168\u7684\u5404\u4e2a\u65b9\u9762\u63a7\u5236 Pod \u7684\u884c\u4e3a\uff0c\u53ea\u6709\u6ee1\u8db3\u4e00\u5b9a\u7684\u6761\u4ef6\u7684 Pod \u624d\u4f1a\u88ab\u7cfb\u7edf\u63a5\u53d7\u3002\u5b83\u8bbe\u7f6e\u4e09\u4e2a\u7b49\u7ea7\u548c\u4e09\u79cd\u6a21\u5f0f\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u9009\u62e9\u66f4\u52a0\u5408\u9002\u7684\u65b9\u6848\u6765\u8bbe\u7f6e\u9650\u5236\u7b56\u7565\u3002

              Note

              \u4e00\u6761\u5b89\u5168\u6a21\u5f0f\u4ec5\u80fd\u914d\u7f6e\u4e00\u6761\u5b89\u5168\u7b56\u7565\u3002\u540c\u65f6\u8bf7\u8c28\u614e\u4e3a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e enforce \u7684\u5b89\u5168\u6a21\u5f0f\uff0c\u8fdd\u53cd\u540e\u5c06\u4f1a\u5bfc\u81f4 Pod \u65e0\u6cd5\u521b\u5efa\u3002

              \u672c\u8282\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565\u3002

              "},{"location":"admin/kpanda/namespaces/podsecurity.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u96c6\u7fa4\u7684\u7248\u672c\u9700\u8981\u5728 v1.22 \u4ee5\u4e0a\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              "},{"location":"admin/kpanda/namespaces/podsecurity.html#_3","title":"\u4e3a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565","text":"
              1. \u9009\u62e9\u9700\u8981\u914d\u7f6e\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u8fdb\u5165\u8be6\u60c5\u9875\u3002\u5728 \u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565 \u9875\u9762\u70b9\u51fb \u914d\u7f6e\u7b56\u7565 \uff0c\u8fdb\u5165\u914d\u7f6e\u9875\u3002

              2. \u5728\u914d\u7f6e\u9875\u70b9\u51fb \u6dfb\u52a0\u7b56\u7565 \uff0c\u5219\u4f1a\u51fa\u73b0\u4e00\u6761\u7b56\u7565\uff0c\u5305\u62ec\u5b89\u5168\u7ea7\u522b\u548c\u5b89\u5168\u6a21\u5f0f\uff0c\u4ee5\u4e0b\u662f\u5bf9\u5b89\u5168\u7ea7\u522b\u548c\u5b89\u5168\u7b56\u7565\u7684\u8be6\u7ec6\u4ecb\u7ecd\u3002

                \u5b89\u5168\u7ea7\u522b \u63cf\u8ff0 Privileged \u4e0d\u53d7\u9650\u5236\u7684\u7b56\u7565\uff0c\u63d0\u4f9b\u6700\u5927\u53ef\u80fd\u8303\u56f4\u7684\u6743\u9650\u8bb8\u53ef\u3002\u6b64\u7b56\u7565\u5141\u8bb8\u5df2\u77e5\u7684\u7279\u6743\u63d0\u5347\u3002 Baseline \u9650\u5236\u6027\u6700\u5f31\u7684\u7b56\u7565\uff0c\u7981\u6b62\u5df2\u77e5\u7684\u7b56\u7565\u63d0\u5347\u3002\u5141\u8bb8\u4f7f\u7528\u9ed8\u8ba4\u7684\uff08\u89c4\u5b9a\u6700\u5c11\uff09Pod \u914d\u7f6e\u3002 Restricted \u9650\u5236\u6027\u975e\u5e38\u5f3a\u7684\u7b56\u7565\uff0c\u9075\u5faa\u5f53\u524d\u7684\u4fdd\u62a4 Pod \u7684\u6700\u4f73\u5b9e\u8df5\u3002 \u5b89\u5168\u6a21\u5f0f \u63cf\u8ff0 Audit \u8fdd\u53cd\u6307\u5b9a\u7b56\u7565\u4f1a\u5728\u5ba1\u8ba1\u65e5\u5fd7\u4e2d\u6dfb\u52a0\u65b0\u7684\u5ba1\u8ba1\u4e8b\u4ef6\uff0cPod \u53ef\u4ee5\u88ab\u521b\u5efa\u3002 Warn \u8fdd\u53cd\u6307\u5b9a\u7b56\u7565\u4f1a\u8fd4\u56de\u7528\u6237\u53ef\u89c1\u7684\u544a\u8b66\u4fe1\u606f\uff0cPod \u53ef\u4ee5\u88ab\u521b\u5efa\u3002 Enforce \u8fdd\u53cd\u6307\u5b9a\u7b56\u7565\u4f1a\u5bfc\u81f4 Pod \u65e0\u6cd5\u521b\u5efa\u3002

              3. \u4e0d\u540c\u7684\u5b89\u5168\u7ea7\u522b\u5bf9\u5e94\u4e0d\u540c\u7684\u68c0\u67e5\u9879\uff0c\u82e5\u60a8\u4e0d\u77e5\u9053\u8be5\u5982\u4f55\u4e3a\u60a8\u7684\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\uff0c\u53ef\u4ee5\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u7b56\u7565\u914d\u7f6e\u9879\u8bf4\u660e \u67e5\u770b\u8be6\u7ec6\u4fe1\u606f\u3002

              4. \u70b9\u51fb\u786e\u5b9a\uff0c\u82e5\u521b\u5efa\u6210\u529f\uff0c\u5219\u9875\u9762\u4e0a\u5c06\u51fa\u73b0\u60a8\u914d\u7f6e\u7684\u5b89\u5168\u7b56\u7565\u3002

              5. \u70b9\u51fb \u2507 \u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u8005\u5220\u9664\u60a8\u914d\u7f6e\u7684\u5b89\u5168\u7b56\u7565\u3002

              "},{"location":"admin/kpanda/network/create-ingress.html","title":"\u521b\u5efa\u8def\u7531\uff08Ingress\uff09","text":"

              \u5728 Kubernetes \u96c6\u7fa4\u4e2d\uff0cIngress \u516c\u5f00\u4ece\u96c6\u7fa4\u5916\u90e8\u5230\u96c6\u7fa4\u5185\u670d\u52a1\u7684 HTTP \u548c HTTPS \u8def\u7531\u3002 \u6d41\u91cf\u8def\u7531\u7531 Ingress \u8d44\u6e90\u4e0a\u5b9a\u4e49\u7684\u89c4\u5219\u63a7\u5236\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u5c06\u6240\u6709\u6d41\u91cf\u90fd\u53d1\u9001\u5230\u540c\u4e00 Service \u7684\u7b80\u5355 Ingress \u793a\u4f8b\uff1a

              Ingress \u662f\u5bf9\u96c6\u7fa4\u4e2d\u670d\u52a1\u7684\u5916\u90e8\u8bbf\u95ee\u8fdb\u884c\u7ba1\u7406\u7684 API \u5bf9\u8c61\uff0c\u5178\u578b\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f HTTP\u3002Ingress \u53ef\u4ee5\u63d0\u4f9b\u8d1f\u8f7d\u5747\u8861\u3001SSL \u7ec8\u7ed3\u548c\u57fa\u4e8e\u540d\u79f0\u7684\u865a\u62df\u6258\u7ba1\u3002

              "},{"location":"admin/kpanda/network/create-ingress.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002
              • \u5df2\u7ecf\u5b8c\u6210 Ingress \u5b9e\u4f8b\u7684\u521b\u5efa\uff0c\u5df2\u90e8\u7f72\u5e94\u7528\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5e76\u4e14\u5df2\u521b\u5efa\u5bf9\u5e94 Service
              • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002
              "},{"location":"admin/kpanda/network/create-ingress.html#_2","title":"\u521b\u5efa\u8def\u7531","text":"
              1. \u4ee5 NS Editor \u7528\u6237\u6210\u529f\u767b\u5f55\u540e\uff0c\u70b9\u51fb\u5de6\u4e0a\u89d2\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u3002\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u8def\u7531 \u8fdb\u5165\u670d\u52a1\u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u8def\u7531 \u6309\u94ae\u3002

                Note

                \u4e5f\u53ef\u4ee5\u901a\u8fc7 YAML \u521b\u5efa \u4e00\u4e2a\u8def\u7531\u3002

              3. \u6253\u5f00 \u521b\u5efa\u8def\u7531 \u9875\u9762\uff0c\u8fdb\u884c\u914d\u7f6e\u3002\u53ef\u9009\u62e9\u4e24\u79cd\u534f\u8bae\u7c7b\u578b\uff0c\u53c2\u8003\u4ee5\u4e0b\u4e24\u4e2a\u53c2\u6570\u8868\u8fdb\u884c\u914d\u7f6e\u3002

              "},{"location":"admin/kpanda/network/create-ingress.html#http","title":"\u521b\u5efa HTTP \u534f\u8bae\u8def\u7531","text":"

              \u8f93\u5165\u5982\u4e0b\u53c2\u6570\uff1a

              • \u8def\u7531\u540d\u79f0 \uff1a\u5fc5\u586b\uff0c\u8f93\u5165\u65b0\u5efa\u8def\u7531\u7684\u540d\u79f0\u3002
              • \u547d\u540d\u7a7a\u95f4 \uff1a\u5fc5\u586b\uff0c\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002
              • \u8bbe\u7f6e\u8def\u7531\u89c4\u5219 \uff1a
                • \u57df\u540d \uff1a\u5fc5\u586b\uff0c\u4f7f\u7528\u57df\u540d\u5bf9\u5916\u63d0\u4f9b\u8bbf\u95ee\u670d\u52a1\u3002\u9ed8\u8ba4\u4e3a\u96c6\u7fa4\u7684\u57df\u540d\u3002
                • \u534f\u8bae \uff1a\u5fc5\u586b\uff0c\u6307\u6388\u6743\u5165\u7ad9\u5230\u8fbe\u96c6\u7fa4\u670d\u52a1\u7684\u534f\u8bae\uff0c\u652f\u6301 HTTP \uff08\u4e0d\u9700\u8981\u8eab\u4efd\u8ba4\u8bc1\uff09\u6216 HTTPS\uff08\u9700\u9700\u8981\u914d\u7f6e\u8eab\u4efd\u8ba4\u8bc1\uff09 \u534f\u8bae\u3002 \u8fd9\u91cc\u9009\u62e9 HTTP \u534f\u8bae\u7684\u8def\u7531\u3002
                • \u8f6c\u53d1\u7b56\u7565 \uff1a\u9009\u586b\uff0c\u6307\u5b9a Ingress \u7684\u8bbf\u95ee\u7b56\u7565
                • \u8def\u5f84 \uff1a\u6307\u5b9a\u670d\u52a1\u8bbf\u95ee\u7684URL\u8def\u5f84\uff0c\u9ed8\u8ba4\u4e3a\u6839\u8def\u5f84
                • \u76ee\u6807\u670d\u52a1 \uff1a\u8fdb\u884c\u8def\u7531\u7684\u670d\u52a1\u540d\u79f0
                • \u76ee\u6807\u670d\u52a1\u7aef\u53e3 \uff1a\u670d\u52a1\u5bf9\u5916\u66b4\u9732\u7684\u7aef\u53e3
              • \u8d1f\u8f7d\u5747\u8861\u5668\u7c7b\u578b \uff1a\u5fc5\u586b\uff0cIngress \u5b9e\u4f8b\u7684\u4f7f\u7528\u8303\u56f4
                • \u5e73\u53f0\u7ea7\u8d1f\u8f7d\u5747\u8861\u5668 \uff1a\u540c\u4e00\u4e2a\u96c6\u7fa4\u5185\uff0c\u5171\u4eab\u540c\u4e00\u4e2a Ingress \u5b9e\u4f8b\uff0c\u5176\u4e2d Pod \u90fd\u53ef\u4ee5\u63a5\u6536\u5230\u7531\u8be5\u8d1f\u8f7d\u5747\u8861\u5206\u53d1\u7684\u8bf7\u6c42
                • \u79df\u6237\u7ea7\u8d1f\u8f7d\u5747\u8861\u5668 \uff1a\u79df\u6237\u8d1f\u8f7d\u5747\u8861\u5668\uff0cIngress \u5b9e\u4f8b\u72ec\u5c5e\u4e8e\u5f53\u524d\u547d\u540d\u7a7a\uff0c\u6216\u8005\u72ec\u5c5e\u4e8e\u67d0\u4e00\u5de5\u4f5c\u7a7a\u95f4\uff0c \u5e76\u4e14\u8bbe\u7f6e\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u5305\u542b\u5f53\u524d\u547d\u540d\u7a7a\u95f4\uff0c\u5176\u4e2d Pod \u90fd\u53ef\u4ee5\u63a5\u6536\u5230\u7531\u8be5\u8d1f\u8f7d\u5747\u8861\u5206\u53d1\u7684\u8bf7\u6c42
              • Ingress Class \uff1a\u9009\u586b\uff0c\u9009\u62e9\u5bf9\u5e94\u7684 Ingress \u5b9e\u4f8b\uff0c\u9009\u62e9\u540e\u5c06\u6d41\u91cf\u5bfc\u5165\u5230\u6307\u5b9a\u7684 Ingress \u5b9e\u4f8b\u3002
                • \u4e3a None \u65f6\u4f7f\u7528\u9ed8\u8ba4\u7684 DefaultClass\uff0c\u8bf7\u5728\u521b\u5efa Ingress \u5b9e\u4f8b\u65f6\u8bbe\u7f6e DefaultClass\uff0c \u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003 Ingress Class
                • \u82e5\u9009\u62e9\u5176\u4ed6\u5b9e\u4f8b\uff08\u5982 ngnix \uff09\uff0c\u5219\u4f1a\u51fa\u73b0\u9ad8\u7ea7\u914d\u7f6e\uff0c\u53ef\u8bbe\u7f6e \u4f1a\u8bdd\u4fdd\u6301 \u3001 \u8def\u5f84\u91cd\u5199 \u3001 \u91cd\u5b9a\u5411 \u548c \u6d41\u91cf\u5206\u53d1 \u3002
              • \u4f1a\u8bdd\u4fdd\u6301 \uff1a\u9009\u586b\uff0c\u4f1a\u8bdd\u4fdd\u6301\u5206\u4e3a \u4e09\u79cd\u7c7b\u578b\uff1a L4 \u6e90\u5730\u5740\u54c8\u5e0c \u3001 Cookie Key \u3001 L7 Header Name \uff0c\u5f00\u542f\u540e\u6839\u636e\u5bf9\u5e94\u89c4\u5219\u8fdb\u884c\u4f1a\u8bdd\u4fdd\u6301\u3002
                • L4 \u6e90\u5730\u5740\u54c8\u5e0c \uff1a\u5f00\u542f\u540e\u9ed8\u8ba4\u5728 Annotation \u4e2d\u52a0\u5165\u5982\u4e0b\u6807\u7b7e\uff1a nginx.ingress.kubernetes.io/upstream-hash-by: \"$binary_remote_addr\"
                • Cookie Key \uff1a\u5f00\u542f\u540e\u6765\u81ea\u7279\u5b9a\u5ba2\u6237\u7aef\u7684\u8fde\u63a5\u5c06\u4f20\u9012\u81f3\u76f8\u540c Pod\uff0c\u5f00\u542f\u540e \u9ed8\u8ba4\u5728 Annotation \u4e2d\u589e\u52a0\u5982\u4e0b\u53c2\u6570\uff1a nginx.ingress.kubernetes.io/affinity: \"cookie\"\u3002nginx.ingress.kubernetes.io/affinity-mode: persistent
                • L7 Header Name \uff1a\u5f00\u542f\u540e\u9ed8\u8ba4\u5728 Annotation \u4e2d\u52a0\u5165\u5982\u4e0b\u6807\u7b7e\uff1a nginx.ingress.kubernetes.io/upstream-hash-by: \"$http_x_forwarded_for\"
              • \u8def\u5f84\u91cd\u5199 \uff1a\u9009\u586b\uff0c rewrite-target \uff0c\u67d0\u4e9b\u573a\u666f\u4e2d\u540e\u7aef\u670d\u52a1\u66b4\u9732\u7684URL\u4e0eIngress\u89c4\u5219\u4e2d\u6307\u5b9a\u7684\u8def\u5f84\u4e0d\u540c\uff0c\u5982\u679c\u4e0d\u8fdb\u884cURL\u91cd\u5199\u914d\u7f6e\uff0c\u8bbf\u95ee\u4f1a\u51fa\u73b0\u9519\u8bef\u3002
              • \u91cd\u5b9a\u5411 \uff1a\u9009\u586b\uff0c permanent-redirect \uff0c\u6c38\u4e45\u91cd\u5b9a\u5411\uff0c\u8f93\u5165\u91cd\u5199\u8def\u5f84\u540e\uff0c\u8bbf\u95ee\u8def\u5f84\u91cd\u5b9a\u5411\u81f3\u8bbe\u7f6e\u7684\u5730\u5740\u3002
              • \u6d41\u91cf\u5206\u53d1 \uff1a\u9009\u586b\uff0c\u5f00\u542f\u540e\u5e76\u8bbe\u7f6e\u540e\uff0c\u6839\u636e\u8bbe\u5b9a\u6761\u4ef6\u8fdb\u884c\u6d41\u91cf\u5206\u53d1\u3002
                • \u57fa\u4e8e\u6743\u91cd \uff1a\u8bbe\u5b9a\u6743\u91cd\u540e\uff0c\u5728\u521b\u5efa\u7684 Ingress \u6dfb\u52a0\u5982\u4e0b Annotation\uff1a nginx.ingress.kubernetes.io/canary-weight: \"10\"
                • \u57fa\u4e8e Cookie \uff1a\u8bbe\u5b9a Cookie \u89c4\u5219\u540e\uff0c\u6d41\u91cf\u6839\u636e\u8bbe\u5b9a\u7684 Cookie \u6761\u4ef6\u8fdb\u884c\u6d41\u91cf\u5206\u53d1
                • \u57fa\u4e8e Header \uff1a \u8bbe\u5b9a Header \u89c4\u5219\u540e\uff0c\u6d41\u91cf\u6839\u636e\u8bbe\u5b9a\u7684 Header \u6761\u4ef6\u8fdb\u884c\u6d41\u91cf\u5206\u53d1
              • \u6807\u7b7e \uff1a\u9009\u586b\uff0c\u4e3a\u8def\u7531\u6dfb\u52a0\u6807\u7b7e
              • \u6ce8\u89e3 \uff1a\u9009\u586b\uff0c\u4e3a\u8def\u7531\u6dfb\u52a0\u6ce8\u89e3
              "},{"location":"admin/kpanda/network/create-ingress.html#https","title":"\u521b\u5efa HTTPS \u534f\u8bae\u8def\u7531","text":"

              \u8f93\u5165\u5982\u4e0b\u53c2\u6570\uff1a

              Note

              \u6ce8\u610f\uff1a\u4e0e HTTP \u534f\u8bae \u8bbe\u7f6e\u8def\u7531\u89c4\u5219 \u4e0d\u540c\uff0c\u589e\u52a0\u5bc6\u94a5\u9009\u62e9\u8bc1\u4e66\uff0c\u5176\u4ed6\u57fa\u672c\u4e00\u81f4\u3002

              • \u534f\u8bae \uff1a\u5fc5\u586b\u6307\u6388\u6743\u5165\u7ad9\u5230\u8fbe\u96c6\u7fa4\u670d\u52a1\u7684\u534f\u8bae\uff0c\u652f\u6301 HTTP \uff08\u4e0d\u9700\u8981\u8eab\u4efd\u8ba4\u8bc1\uff09\u6216 HTTPS\uff08\u9700\u9700\u8981\u914d\u7f6e\u8eab\u4efd\u8ba4\u8bc1\uff09 \u534f\u8bae\u3002\u8fd9\u91cc\u9009\u62e9 HTTPS \u534f\u8bae\u7684\u8def\u7531\u3002
              • \u5bc6\u94a5 \uff1a\u5fc5\u586b\uff0cHttps TLS \u8bc1\u4e66\uff0c\u521b\u5efa\u79d8\u94a5\u3002
              "},{"location":"admin/kpanda/network/create-ingress.html#_3","title":"\u5b8c\u6210\u8def\u7531\u521b\u5efa","text":"

              \u914d\u7f6e\u5b8c\u6240\u6709\u53c2\u6570\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u8def\u7531\u5217\u8868\u3002\u5728\u5217\u8868\u53f3\u4fa7\uff0c\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u4fee\u6539\u6216\u5220\u9664\u6240\u9009\u8def\u7531\u3002

              "},{"location":"admin/kpanda/network/create-services.html","title":"\u521b\u5efa\u670d\u52a1\uff08Service\uff09","text":"

              \u5728 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u6bcf\u4e2a Pod \u90fd\u6709\u4e00\u4e2a\u5185\u90e8\u72ec\u7acb\u7684 IP \u5730\u5740\uff0c\u4f46\u662f\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u7684 Pod \u53ef\u80fd\u4f1a\u88ab\u968f\u65f6\u521b\u5efa\u548c\u5220\u9664\uff0c\u76f4\u63a5\u4f7f\u7528 Pod IP \u5730\u5740\u5e76\u4e0d\u80fd\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002

              \u8fd9\u5c31\u9700\u8981\u521b\u5efa\u670d\u52a1\uff0c\u901a\u8fc7\u670d\u52a1\u60a8\u4f1a\u83b7\u5f97\u4e00\u4e2a\u56fa\u5b9a\u7684 IP \u5730\u5740\uff0c\u4ece\u800c\u5b9e\u73b0\u5de5\u4f5c\u8d1f\u8f7d\u524d\u7aef\u548c\u540e\u7aef\u7684\u89e3\u8026\uff0c\u8ba9\u5916\u90e8\u7528\u6237\u80fd\u591f\u8bbf\u95ee\u670d\u52a1\u3002\u540c\u65f6\uff0c\u670d\u52a1\u8fd8\u63d0\u4f9b\u4e86\u8d1f\u8f7d\u5747\u8861\uff08LoadBalancer\uff09\u529f\u80fd\uff0c\u4f7f\u7528\u6237\u80fd\u4ece\u516c\u7f51\u8bbf\u95ee\u5230\u5de5\u4f5c\u8d1f\u8f7d\u3002

              "},{"location":"admin/kpanda/network/create-services.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

              "},{"location":"admin/kpanda/network/create-services.html#_2","title":"\u521b\u5efa\u670d\u52a1","text":"
              1. \u4ee5 NS Editor \u7528\u6237\u6210\u529f\u767b\u5f55\u540e\uff0c\u70b9\u51fb\u5de6\u4e0a\u89d2\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u3002\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u670d\u52a1 \u8fdb\u5165\u670d\u52a1\u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

                Tip

                \u4e5f\u53ef\u4ee5\u901a\u8fc7 YAML \u521b\u5efa \u4e00\u4e2a\u670d\u52a1\u3002

              3. \u6253\u5f00 \u521b\u5efa\u670d\u52a1 \u9875\u9762\uff0c\u9009\u62e9\u4e00\u79cd\u8bbf\u95ee\u7c7b\u578b\uff0c\u53c2\u8003\u4ee5\u4e0b\u51e0\u4e2a\u53c2\u6570\u8868\u8fdb\u884c\u914d\u7f6e\u3002

              "},{"location":"admin/kpanda/network/create-services.html#clusterip","title":"\u521b\u5efa ClusterIP \u670d\u52a1","text":"

              \u70b9\u9009 \u96c6\u7fa4\u5185\u8bbf\u95ee\uff08ClusterIP\uff09 \uff0c\u8fd9\u662f\u6307\u901a\u8fc7\u96c6\u7fa4\u7684\u5185\u90e8 IP \u66b4\u9732\u670d\u52a1\uff0c\u9009\u62e9\u6b64\u9879\u7684\u670d\u52a1\u53ea\u80fd\u5728\u96c6\u7fa4\u5185\u90e8\u8bbf\u95ee\u3002\u8fd9\u662f\u9ed8\u8ba4\u7684\u670d\u52a1\u7c7b\u578b\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u96c6\u7fa4\u5185\u8bbf\u95ee\uff08ClusterIP\uff09\u3002 ClusterIP \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u6807\u7b7e\u9009\u62e9\u5668 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6dfb\u52a0\u6807\u7b7e\uff0cService \u6839\u636e\u6807\u7b7e\u9009\u62e9 Pod\uff0c\u586b\u5199\u540e\u70b9\u51fb\u201c\u6dfb\u52a0\u201d\u3002\u4e5f\u53ef\u4ee5\u5f15\u7528\u5df2\u6709\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6807\u7b7e\uff0c\u70b9\u51fb \u5f15\u7528\u8d1f\u8f7d\u6807\u7b7e \uff0c\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\u9009\u62e9\u8d1f\u8f7d\uff0c\u7cfb\u7edf\u4f1a\u9ed8\u8ba4\u5c06\u6240\u9009\u7684\u8d1f\u8f7d\u6807\u7b7e\u4f5c\u4e3a\u9009\u62e9\u5668\u3002 app:job01 \u7aef\u53e3\u914d\u7f6e \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u534f\u8bae\u7aef\u53e3\uff0c\u9700\u8981\u5148\u9009\u62e9\u7aef\u53e3\u534f\u8bae\u7c7b\u578b\uff0c\u76ee\u524d\u652f\u6301 TCP\u3001UDP \u4e24\u79cd\u4f20\u8f93\u534f\u8bae\u3002\u7aef\u53e3\u540d\u79f0\uff1a\u8f93\u5165\u81ea\u5b9a\u4e49\u7684\u7aef\u53e3\u7684\u540d\u79f0\u3002\u670d\u52a1\u7aef\u53e3\uff08port\uff09\uff1aPod \u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u7684\u8bbf\u95ee\u7aef\u53e3\u3002\u5bb9\u5668\u7aef\u53e3\uff08targetport\uff09\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u9645\u76d1\u542c\u7684\u5bb9\u5668\u7aef\u53e3\uff0c\u7528\u6765\u5bf9\u96c6\u7fa4\u5185\u66b4\u9732\u670d\u52a1\u3002 \u4f1a\u8bdd\u4fdd\u6301 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u540e\uff0c\u76f8\u540c\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u5c06\u8f6c\u53d1\u81f3\u540c\u4e00 Pod \u5f00\u542f \u4f1a\u8bdd\u4fdd\u6301\u6700\u5927\u65f6\u957f \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u4f1a\u8bdd\u4fdd\u6301\u540e\uff0c\u4fdd\u6301\u7684\u6700\u5927\u65f6\u957f\uff0c\u9ed8\u8ba4\u4e3a 30 \u79d2 30 \u79d2 \u6ce8\u89e3 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u6ce8\u89e3"},{"location":"admin/kpanda/network/create-services.html#nodeport","title":"\u521b\u5efa NodePort \u670d\u52a1","text":"

              \u70b9\u9009 \u8282\u70b9\u8bbf\u95ee\uff08NodePort\uff09 \uff0c\u8fd9\u662f\u6307\u901a\u8fc7\u6bcf\u4e2a\u8282\u70b9\u4e0a\u7684 IP \u548c\u9759\u6001\u7aef\u53e3\uff08 NodePort \uff09\u66b4\u9732\u670d\u52a1\u3002 NodePort \u670d\u52a1\u4f1a\u8def\u7531\u5230\u81ea\u52a8\u521b\u5efa\u7684 ClusterIP \u670d\u52a1\u3002\u901a\u8fc7\u8bf7\u6c42 <\u8282\u70b9 IP>:<\u8282\u70b9\u7aef\u53e3> \uff0c\u60a8\u53ef\u4ee5\u4ece\u96c6\u7fa4\u7684\u5916\u90e8\u8bbf\u95ee\u4e00\u4e2a NodePort \u670d\u52a1\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u8282\u70b9\u8bbf\u95ee\uff08NodePort\uff09\u3002 NodePort \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u6807\u7b7e\u9009\u62e9\u5668 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6dfb\u52a0\u6807\u7b7e\uff0cService \u6839\u636e\u6807\u7b7e\u9009\u62e9 Pod\uff0c\u586b\u5199\u540e\u70b9\u51fb\u201c\u6dfb\u52a0\u201d\u3002\u4e5f\u53ef\u4ee5\u5f15\u7528\u5df2\u6709\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6807\u7b7e\uff0c\u70b9\u51fb \u5f15\u7528\u8d1f\u8f7d\u6807\u7b7e \uff0c\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\u9009\u62e9\u8d1f\u8f7d\uff0c\u7cfb\u7edf\u4f1a\u9ed8\u8ba4\u5c06\u6240\u9009\u7684\u8d1f\u8f7d\u6807\u7b7e\u4f5c\u4e3a\u9009\u62e9\u5668\u3002 \u7aef\u53e3\u914d\u7f6e \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u534f\u8bae\u7aef\u53e3\uff0c\u9700\u8981\u5148\u9009\u62e9\u7aef\u53e3\u534f\u8bae\u7c7b\u578b\uff0c\u76ee\u524d\u652f\u6301 TCP\u3001UDP \u4e24\u79cd\u4f20\u8f93\u534f\u8bae\u3002\u7aef\u53e3\u540d\u79f0\uff1a\u8f93\u5165\u81ea\u5b9a\u4e49\u7684\u7aef\u53e3\u7684\u540d\u79f0\u3002\u670d\u52a1\u7aef\u53e3\uff08port\uff09\uff1aPod \u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u7684\u8bbf\u95ee\u7aef\u53e3\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u670d\u52a1\u7aef\u53e3\u88ab\u8bbe\u7f6e\u4e3a\u4e0e\u5bb9\u5668\u7aef\u53e3\u5b57\u6bb5\u76f8\u540c\u7684\u503c\u3002\u5bb9\u5668\u7aef\u53e3\uff08targetport\uff09\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u9645\u76d1\u542c\u7684\u5bb9\u5668\u7aef\u53e3\u3002\u8282\u70b9\u7aef\u53e3\uff08nodeport\uff09\uff1a\u8282\u70b9\u7684\u7aef\u53e3\uff0c\u63a5\u6536\u6765\u81ea ClusterIP \u4f20\u8f93\u7684\u6d41\u91cf\u3002\u7528\u6765\u505a\u5916\u90e8\u6d41\u91cf\u8bbf\u95ee\u7684\u5165\u53e3\u3002 \u4f1a\u8bdd\u4fdd\u6301 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u540e\uff0c\u76f8\u540c\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u5c06\u8f6c\u53d1\u81f3\u540c\u4e00 Pod\u5f00\u542f\u540e Service \u7684 .spec.sessionAffinity \u4e3a ClientIP \uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\uff1aService \u7684\u4f1a\u8bdd\u4eb2\u548c\u6027 \u5f00\u542f \u4f1a\u8bdd\u4fdd\u6301\u6700\u5927\u65f6\u957f \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u4f1a\u8bdd\u4fdd\u6301\u540e\uff0c\u4fdd\u6301\u7684\u6700\u5927\u65f6\u957f\uff0c\u9ed8\u8ba4\u8d85\u65f6\u65f6\u957f\u4e3a 30 \u79d2.spec.sessionAffinityConfig.clientIP.timeoutSeconds \u9ed8\u8ba4\u8bbe\u7f6e\u4e3a 30 \u79d2 30 \u79d2 \u6ce8\u89e3 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u6ce8\u89e3"},{"location":"admin/kpanda/network/create-services.html#loadbalancer","title":"\u521b\u5efa LoadBalancer \u670d\u52a1","text":"

              \u70b9\u9009 \u8d1f\u8f7d\u5747\u8861\uff08LoadBalancer\uff09 \uff0c\u8fd9\u662f\u6307\u4f7f\u7528\u4e91\u63d0\u4f9b\u5546\u7684\u8d1f\u8f7d\u5747\u8861\u5668\u5411\u5916\u90e8\u66b4\u9732\u670d\u52a1\u3002 \u5916\u90e8\u8d1f\u8f7d\u5747\u8861\u5668\u53ef\u4ee5\u5c06\u6d41\u91cf\u8def\u7531\u5230\u81ea\u52a8\u521b\u5efa\u7684 NodePort \u670d\u52a1\u548c ClusterIP \u670d\u52a1\u4e0a\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u8d1f\u8f7d\u5747\u8861\uff08LoadBalancer\uff09\u3002 LoadBalancer \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u5916\u90e8\u6d41\u91cf\u7b56\u7565 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8bbe\u7f6e\u5916\u90e8\u6d41\u91cf\u7b56\u7565\u3002Cluster\uff1a\u6d41\u91cf\u53ef\u4ee5\u8f6c\u53d1\u5230\u96c6\u7fa4\u4e2d\u6240\u6709\u8282\u70b9\u4e0a\u7684 Pod\u3002Local\uff1a\u6d41\u91cf\u53ea\u53d1\u7ed9\u672c\u8282\u70b9\u4e0a\u7684 Pod\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 \u6807\u7b7e\u9009\u62e9\u5668 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6dfb\u52a0\u6807\u7b7e\uff0cService \u6839\u636e\u6807\u7b7e\u9009\u62e9 Pod\uff0c\u586b\u5199\u540e\u70b9\u51fb\u201c\u6dfb\u52a0\u201d\u3002\u4e5f\u53ef\u4ee5\u5f15\u7528\u5df2\u6709\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6807\u7b7e\uff0c\u70b9\u51fb \u5f15\u7528\u8d1f\u8f7d\u6807\u7b7e \uff0c\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\u9009\u62e9\u8d1f\u8f7d\uff0c\u7cfb\u7edf\u4f1a\u9ed8\u8ba4\u5c06\u6240\u9009\u7684\u8d1f\u8f7d\u6807\u7b7e\u4f5c\u4e3a\u9009\u62e9\u5668\u3002 \u8d1f\u8f7d\u5747\u8861\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4f7f\u7528\u7684\u8d1f\u8f7d\u5747\u8861\u7c7b\u578b\uff0c\u5f53\u524d\u652f\u6301 MetalLB \u548c\u5176\u4ed6\u3002 MetalLB IP \u6c60 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u7684 \u8d1f\u8f7d\u5747\u8861\u7c7b\u578b\u4e3a MetalLB \u65f6\uff0cLoadBalancer Service\u9ed8\u8ba4\u4f1a\u4ece\u8fd9\u4e2a\u6c60\u4e2d\u5206\u914d IP \u5730\u5740, \u5e76\u4e14\u901a\u8fc7 APR \u5ba3\u544a\u8fd9\u4e2a\u6c60\u4e2d\u7684\u6240\u6709 IP \u5730\u5740 \u8d1f\u8f7d\u5747\u8861\u5730\u5740 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u30111.\u5982\u4f7f\u7528\u7684\u662f\u516c\u6709\u4e91 CloudProvider\uff0c\u6b64\u5904\u586b\u5199\u7684\u4e3a\u4e91\u5382\u5546\u63d0\u4f9b\u7684\u8d1f\u8f7d\u5747\u8861\u5730\u5740\uff1b2.\u5982\u679c\u4e0a\u8ff0\u8d1f\u8f7d\u5747\u8861\u7c7b\u578b\u9009\u62e9\u4e3a MetalLB \uff0c\u9ed8\u8ba4\u4ece\u4e0a\u8ff0 IP \u6c60\u4e2d\u83b7\u53d6 IP \uff0c\u5982\u679c\u4e0d\u586b\u5219\u81ea\u52a8\u83b7\u53d6\u3002 \u7aef\u53e3\u914d\u7f6e \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u534f\u8bae\u7aef\u53e3\uff0c\u9700\u8981\u5148\u9009\u62e9\u7aef\u53e3\u534f\u8bae\u7c7b\u578b\uff0c\u76ee\u524d\u652f\u6301 TCP\u3001UDP \u4e24\u79cd\u4f20\u8f93\u534f\u8bae\u3002\u7aef\u53e3\u540d\u79f0\uff1a\u8f93\u5165\u81ea\u5b9a\u4e49\u7684\u7aef\u53e3\u7684\u540d\u79f0\u3002\u670d\u52a1\u7aef\u53e3\uff08port\uff09\uff1aPod \u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u7684\u8bbf\u95ee\u7aef\u53e3\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u670d\u52a1\u7aef\u53e3\u88ab\u8bbe\u7f6e\u4e3a\u4e0e\u5bb9\u5668\u7aef\u53e3\u5b57\u6bb5\u76f8\u540c\u7684\u503c\u3002\u5bb9\u5668\u7aef\u53e3\uff08targetport\uff09\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u9645\u76d1\u542c\u7684\u5bb9\u5668\u7aef\u53e3\u3002\u8282\u70b9\u7aef\u53e3\uff08nodeport\uff09\uff1a\u8282\u70b9\u7684\u7aef\u53e3\uff0c\u63a5\u6536\u6765\u81ea ClusterIP \u4f20\u8f93\u7684\u6d41\u91cf\u3002\u7528\u6765\u505a\u5916\u90e8\u6d41\u91cf\u8bbf\u95ee\u7684\u5165\u53e3\u3002 \u6ce8\u89e3 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u6ce8\u89e3"},{"location":"admin/kpanda/network/create-services.html#externalname","title":"\u521b\u5efa ExternalName \u670d\u52a1","text":"

              \u70b9\u9009 \u5916\u90e8\u670d\u52a1\uff08ExternalName\uff09 \uff0c\u8fd9\u662f\u6307\u901a\u8fc7\u5c06\u670d\u52a1\u6620\u5c04\u5230\u5916\u90e8\u57df\u540d\u6765\u66b4\u9732\u670d\u52a1\u3002\u9009\u62e9\u6b64\u9879\u7684\u670d\u52a1\u4e0d\u4f1a\u521b\u5efa\u5178\u578b\u7684 ClusterIP \u6216 NodePort\uff0c\u800c\u662f\u901a\u8fc7 DNS \u540d\u79f0\u89e3\u6790\u5c06\u8bf7\u6c42\u91cd\u5b9a\u5411\u5230\u5916\u90e8\u7684\u670d\u52a1\u5730\u5740\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u5916\u90e8\u670d\u52a1\uff08ExternalName\uff09\u3002 ExternalName \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u57df\u540d \u3010\u7c7b\u578b\u3011\u5fc5\u586b"},{"location":"admin/kpanda/network/create-services.html#_3","title":"\u5b8c\u6210\u670d\u52a1\u521b\u5efa","text":"

              \u914d\u7f6e\u5b8c\u6240\u6709\u53c2\u6570\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u670d\u52a1\u5217\u8868\u3002\u5728\u5217\u8868\u53f3\u4fa7\uff0c\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u4fee\u6539\u6216\u5220\u9664\u6240\u9009\u670d\u52a1\u3002

              "},{"location":"admin/kpanda/network/network-policy.html","title":"\u7f51\u7edc\u7b56\u7565","text":"

              \u7f51\u7edc\u7b56\u7565\uff08NetworkPolicy\uff09\u53ef\u4ee5\u5728 IP \u5730\u5740\u6216\u7aef\u53e3\u5c42\u9762\uff08OSI \u7b2c 3 \u5c42\u6216\u7b2c 4 \u5c42\uff09\u63a7\u5236\u7f51\u7edc\u6d41\u91cf\u3002\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u76ee\u524d\u652f\u6301\u521b\u5efa\u57fa\u4e8e Pod \u6216\u547d\u540d\u7a7a\u95f4\u7684\u7f51\u7edc\u7b56\u7565\uff0c\u652f\u6301\u901a\u8fc7\u6807\u7b7e\u9009\u62e9\u5668\u6765\u8bbe\u5b9a\u54ea\u4e9b\u6d41\u91cf\u53ef\u4ee5\u8fdb\u5165\u6216\u79bb\u5f00\u5e26\u6709\u7279\u5b9a\u6807\u7b7e\u7684 Pod\u3002

              \u6709\u5173\u7f51\u7edc\u7b56\u7565\u7684\u66f4\u591a\u8be6\u60c5\uff0c\u53ef\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u7f51\u7edc\u7b56\u7565\u3002

              "},{"location":"admin/kpanda/network/network-policy.html#_2","title":"\u521b\u5efa\u7f51\u7edc\u7b56\u7565","text":"

              \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u7f51\u7edc\u7b56\u7565\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

              \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u7f51\u7edc\u7b56\u7565\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

              \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

              "},{"location":"admin/kpanda/network/network-policy.html#yaml","title":"YAML \u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u7f51\u7edc\u7b56\u7565 -> YAML \u521b\u5efa \u3002

              2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

              "},{"location":"admin/kpanda/network/network-policy.html#_3","title":"\u8868\u5355\u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u7f51\u7edc\u7b56\u7565 -> \u521b\u5efa\u7b56\u7565 \u3002

              2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

                \u540d\u79f0\u548c\u547d\u540d\u7a7a\u95f4\u5728\u521b\u5efa\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002

              3. \u586b\u5199\u7b56\u7565\u914d\u7f6e\u3002

                \u7b56\u7565\u914d\u7f6e\u5206\u4e3a\u5165\u6d41\u91cf\u7b56\u7565\u548c\u51fa\u6d41\u91cf\u7b56\u7565\u3002\u5982\u679c\u6e90 Pod \u60f3\u8981\u6210\u529f\u8fde\u63a5\u5230\u76ee\u6807 Pod\uff0c\u6e90 Pod \u7684\u51fa\u6d41\u91cf\u7b56\u7565\u548c\u76ee\u6807 Pod \u7684\u5165\u6d41\u91cf\u7b56\u7565\u90fd\u9700\u8981\u5141\u8bb8\u8fde\u63a5\u3002\u5982\u679c\u4efb\u4f55\u4e00\u65b9\u4e0d\u5141\u8bb8\u8fde\u63a5\uff0c\u90fd\u4f1a\u5bfc\u81f4\u8fde\u63a5\u5931\u8d25\u3002

                • \u5165\u6d41\u91cf\u7b56\u7565\uff1a\u70b9\u51fb \u2795 \u5f00\u59cb\u914d\u7f6e\u7b56\u7565\uff0c\u652f\u6301\u914d\u7f6e\u591a\u6761\u7b56\u7565\u3002\u591a\u6761\u7f51\u7edc\u7b56\u7565\u7684\u6548\u679c\u76f8\u4e92\u53e0\u52a0\uff0c\u53ea\u6709\u540c\u65f6\u6ee1\u8db3\u6240\u6709\u7f51\u7edc\u7b56\u7565\uff0c\u624d\u80fd\u6210\u529f\u5efa\u7acb\u8fde\u63a5\u3002

                • \u51fa\u6d41\u91cf\u7b56\u7565

              "},{"location":"admin/kpanda/network/network-policy.html#_4","title":"\u67e5\u770b\u7f51\u7edc\u7b56\u7565","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u7f51\u7edc\u7b56\u7565 \uff0c\u70b9\u51fb\u7f51\u7edc\u7b56\u7565\u7684\u540d\u79f0\u3002

              2. \u67e5\u770b\u8be5\u7b56\u7565\u7684\u57fa\u672c\u914d\u7f6e\u3001\u5173\u8054\u5b9e\u4f8b\u4fe1\u606f\u3001\u5165\u6d41\u91cf\u7b56\u7565\u3001\u51fa\u6d41\u91cf\u7b56\u7565\u3002

              Info

              \u5728\u5173\u8054\u5b9e\u4f8b\u9875\u7b7e\u4e0b\uff0c\u652f\u6301\u67e5\u770b\u5b9e\u4f8b\u76d1\u63a7\u3001\u65e5\u5fd7\u3001\u5bb9\u5668\u5217\u8868\u3001YAML \u6587\u4ef6\u3001\u4e8b\u4ef6\u7b49\u3002

              "},{"location":"admin/kpanda/network/network-policy.html#_5","title":"\u66f4\u65b0\u7f51\u7edc\u7b56\u7565","text":"

              \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u66f4\u65b0\u7f51\u7edc\u7b56\u7565\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u7f51\u7edc\u7b56\u7565\u3002

              • \u5728\u7f51\u7edc\u7b56\u7565\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u7b56\u7565\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

              • \u70b9\u51fb\u7f51\u7edc\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u7f51\u7edc\u7b56\u7565\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

              "},{"location":"admin/kpanda/network/network-policy.html#_6","title":"\u5220\u9664\u7f51\u7edc\u7b56\u7565","text":"

              \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u5220\u9664\u7f51\u7edc\u7b56\u7565\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u7f51\u7edc\u7b56\u7565\u3002

              • \u5728\u7f51\u7edc\u7b56\u7565\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u7b56\u7565\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u5220\u9664\u3002

              • \u70b9\u51fb\u7f51\u7edc\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u7f51\u7edc\u7b56\u7565\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u5220\u9664\u3002

              "},{"location":"admin/kpanda/nodes/add-node.html","title":"\u96c6\u7fa4\u8282\u70b9\u6269\u5bb9","text":"

              \u968f\u7740\u4e1a\u52a1\u5e94\u7528\u4e0d\u65ad\u589e\u957f\uff0c\u96c6\u7fa4\u8d44\u6e90\u65e5\u8d8b\u7d27\u5f20\uff0c\u8fd9\u65f6\u53ef\u4ee5\u57fa\u4e8e kubean \u5bf9\u96c6\u7fa4\u8282\u70b9\u8fdb\u884c\u6269\u5bb9\u3002\u6269\u5bb9\u540e\uff0c\u5e94\u7528\u53ef\u4ee5\u8fd0\u884c\u5728\u65b0\u589e\u7684\u8282\u70b9\u4e0a\uff0c\u7f13\u89e3\u8d44\u6e90\u538b\u529b\u3002

              \u53ea\u6709\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u521b\u5efa\u7684\u96c6\u7fa4\u624d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\uff0c\u4ece\u5916\u90e8\u63a5\u5165\u7684\u96c6\u7fa4\u4e0d\u652f\u6301\u6b64\u64cd\u4f5c\u3002\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u540c\u79cd\u67b6\u6784\u4e0b\u5de5\u4f5c\u96c6\u7fa4\u7684 \u5de5\u4f5c\u8282\u70b9 \u6269\u5bb9\u3002

              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                \u82e5 \u96c6\u7fa4\u89d2\u8272 \u4e2d\u5e26\u6709 \u63a5\u5165\u96c6\u7fa4 \u7684\u6807\u7b7e\uff0c\u5219\u8bf4\u660e\u8be5\u96c6\u7fa4\u4e0d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u7136\u540e\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u70b9\u51fb \u63a5\u5165\u8282\u70b9 \u3002

              3. \u8f93\u5165\u4e3b\u673a\u540d\u79f0\u548c\u8282\u70b9 IP \u5e76\u70b9\u51fb \u786e\u5b9a \u3002

                \u70b9\u51fb \u2795 \u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9 \u53ef\u4ee5\u7ee7\u7eed\u63a5\u5165\u66f4\u591a\u8282\u70b9\u3002

              Note

              \u63a5\u5165\u8282\u70b9\u5927\u7ea6\u9700\u8981 20 \u5206\u949f\uff0c\u8bf7\u60a8\u8010\u5fc3\u7b49\u5f85\u3002

              "},{"location":"admin/kpanda/nodes/add-node.html#_2","title":"\u53c2\u8003\u6587\u6863","text":"
              • \u5bf9\u5de5\u4f5c\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u6269\u5bb9
              • \u4e3a\u5de5\u4f5c\u96c6\u7fa4\u6dfb\u52a0\u5f02\u6784\u8282\u70b9
              • \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u5de5\u4f5c\u8282\u70b9\u6269\u5bb9
              • \u66ff\u6362\u5de5\u4f5c\u96c6\u7fa4\u7684\u9996\u4e2a\u63a7\u5236\u8282\u70b9
              "},{"location":"admin/kpanda/nodes/delete-node.html","title":"\u96c6\u7fa4\u8282\u70b9\u7f29\u5bb9","text":"

              \u5f53\u4e1a\u52a1\u9ad8\u5cf0\u671f\u7ed3\u675f\u4e4b\u540e\uff0c\u4e3a\u4e86\u8282\u7701\u8d44\u6e90\u6210\u672c\uff0c\u53ef\u4ee5\u7f29\u5c0f\u96c6\u7fa4\u89c4\u6a21\uff0c\u5378\u8f7d\u5197\u4f59\u7684\u8282\u70b9\uff0c\u5373\u8282\u70b9\u7f29\u5bb9\u3002\u8282\u70b9\u5378\u8f7d\u540e\uff0c\u5e94\u7528\u65e0\u6cd5\u7ee7\u7eed\u8fd0\u884c\u5728\u8be5\u8282\u70b9\u4e0a\u3002

              "},{"location":"admin/kpanda/nodes/delete-node.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5177\u6709 Cluster Admin \u89d2\u8272\u6388\u6743 \u3002
              • \u53ea\u6709\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u521b\u5efa\u7684\u96c6\u7fa4\u624d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\uff0c\u4ece\u5916\u90e8\u63a5\u5165\u7684\u96c6\u7fa4\u4e0d\u652f\u6301\u6b64\u64cd\u4f5c\u3002
              • \u5378\u8f7d\u8282\u70b9\u4e4b\u524d\uff0c\u9700\u8981\u6682\u505c\u8c03\u5ea6\u8be5\u8282\u70b9\uff0c\u5e76\u4e14\u5c06\u8be5\u8282\u70b9\u4e0a\u7684\u5e94\u7528\u90fd\u9a71\u9010\u81f3\u5176\u4ed6\u8282\u70b9\u3002
              • \u9a71\u9010\u65b9\u5f0f\uff1a\u767b\u5f55\u63a7\u5236\u5668\u8282\u70b9\uff0c\u901a\u8fc7 kubectl drain \u547d\u4ee4\u9a71\u9010\u8282\u70b9\u4e0a\u6240\u6709 Pod\u3002\u5b89\u5168\u9a71\u9010\u7684\u65b9\u5f0f\u53ef\u4ee5\u5141\u8bb8\u5bb9\u5668\u7ec4\u91cc\u9762\u7684\u5bb9\u5668\u4f18\u96c5\u5730\u4e2d\u6b62\u3002
              "},{"location":"admin/kpanda/nodes/delete-node.html#_3","title":"\u6ce8\u610f\u4e8b\u9879","text":"
              1. \u96c6\u7fa4\u8282\u70b9\u7f29\u5bb9\u65f6\uff0c\u53ea\u80fd\u9010\u4e2a\u8fdb\u884c\u5378\u8f7d\uff0c\u65e0\u6cd5\u6279\u91cf\u5378\u8f7d\u3002

              2. \u5982\u9700\u5378\u8f7d\u96c6\u7fa4\u63a7\u5236\u5668\u8282\u70b9\uff0c\u9700\u8981\u786e\u4fdd\u6700\u7ec8\u63a7\u5236\u5668\u8282\u70b9\u6570\u4e3a \u5947\u6570\u3002

              3. \u96c6\u7fa4\u8282\u70b9\u7f29\u5bb9\u65f6\u4e0d\u53ef\u4e0b\u7ebf \u7b2c\u4e00\u4e2a\u63a7\u5236\u5668 \u8282\u70b9\u3002\u5982\u679c\u5fc5\u987b\u6267\u884c\u6b64\u64cd\u4f5c\uff0c\u8bf7\u8054\u7cfb\u552e\u540e\u5de5\u7a0b\u5e08\u3002

              "},{"location":"admin/kpanda/nodes/delete-node.html#_4","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                \u82e5 \u96c6\u7fa4\u89d2\u8272 \u4e2d\u5e26\u6709 \u63a5\u5165\u96c6\u7fa4 \u7684\u6807\u7b7e\uff0c\u5219\u8bf4\u660e\u8be5\u96c6\u7fa4\u4e0d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u627e\u5230\u9700\u8981\u5378\u8f7d\u7684\u8282\u70b9\uff0c\u70b9\u51fb \u2507 \u9009\u62e9 \u79fb\u9664\u8282\u70b9 \u3002

              3. \u8f93\u5165\u8282\u70b9\u540d\u79f0\uff0c\u5e76\u70b9\u51fb \u5220\u9664 \u8fdb\u884c\u786e\u8ba4\u3002

              "},{"location":"admin/kpanda/nodes/labels-annotations.html","title":"\u6807\u7b7e\u4e0e\u6ce8\u89e3","text":"

              \u6807\u7b7e\uff08Labels\uff09\u662f\u4e3a Pod\u3001\u8282\u70b9\u3001\u96c6\u7fa4\u7b49 Kubernetes \u5bf9\u8c61\u6dfb\u52a0\u7684\u6807\u8bc6\u6027\u952e\u503c\u5bf9\uff0c\u53ef\u7ed3\u5408\u6807\u7b7e\u9009\u62e9\u5668\u67e5\u627e\u5e76\u7b5b\u9009\u6ee1\u8db3\u67d0\u4e9b\u6761\u4ef6\u7684 Kubernetes \u5bf9\u8c61\u3002\u6bcf\u4e2a\u952e\u5bf9\u4e8e\u7ed9\u5b9a\u5bf9\u8c61\u5fc5\u987b\u662f\u552f\u4e00\u7684\u3002

              \u6ce8\u89e3\uff08Annotations\uff09\u548c\u6807\u7b7e\u4e00\u6837\uff0c\u4e5f\u662f\u952e/\u503c\u5bf9\uff0c\u4f46\u4e0d\u5177\u5907\u6807\u8bc6\u6216\u7b5b\u9009\u529f\u80fd\u3002 \u4f7f\u7528\u6ce8\u89e3\u53ef\u4ee5\u4e3a\u8282\u70b9\u6dfb\u52a0\u4efb\u610f\u7684\u5143\u6570\u636e\u3002 \u6ce8\u89e3\u7684\u952e\u901a\u5e38\u4f7f\u7528\u7684\u683c\u5f0f\u4e3a \u524d\u7f00\uff08\u53ef\u9009\uff09/\u540d\u79f0\uff08\u5fc5\u586b\uff09 \uff0c\u4f8b\u5982 nfd.node.kubernetes.io/extended-resources \u3002 \u5982\u679c\u7701\u7565\u524d\u7f00\uff0c\u8868\u793a\u8be5\u6ce8\u89e3\u952e\u662f\u7528\u6237\u79c1\u6709\u7684\u3002

              \u6709\u5173\u6807\u7b7e\u548c\u6ce8\u89e3\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u53ef\u53c2\u8003 Kubernetes \u7684\u5b98\u65b9\u6587\u6863\u6807\u7b7e\u548c\u9009\u62e9\u7b97\u7b26\u6216\u6ce8\u89e3\u3002

              \u6dfb\u52a0/\u5220\u9664\u6807\u7b7e\u4e0e\u6ce8\u89e3\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u56fe\u6807\uff0c\u70b9\u51fb \u4fee\u6539\u6807\u7b7e \u6216 \u4fee\u6539\u6ce8\u89e3 \u3002

              3. \u70b9\u51fb \u2795 \u6dfb\u52a0 \u53ef\u4ee5\u6dfb\u52a0\u6807\u7b7e\u6216\u6ce8\u89e3\uff0c\u70b9\u51fb X \u53ef\u4ee5\u5220\u9664\u6807\u7b7e\u6216\u6ce8\u89e3\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u3002

              "},{"location":"admin/kpanda/nodes/node-authentication.html","title":"\u8282\u70b9\u8ba4\u8bc1","text":""},{"location":"admin/kpanda/nodes/node-authentication.html#ssh","title":"\u4f7f\u7528 SSH \u5bc6\u94a5\u8ba4\u8bc1\u8282\u70b9","text":"

              \u5982\u679c\u60a8\u9009\u62e9\u4f7f\u7528 SSH \u5bc6\u94a5\u4f5c\u4e3a\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u8282\u70b9\u8ba4\u8bc1\u65b9\u5f0f\uff0c\u60a8\u9700\u8981\u6309\u7167\u5982\u4e0b\u8bf4\u660e\u914d\u7f6e\u516c\u79c1\u94a5\u3002

              1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5728 \u5f85\u5efa\u96c6\u7fa4\u7684\u7ba1\u7406\u96c6\u7fa4\u4e2d\u7684\u4efb\u610f\u8282\u70b9 \u4e0a\u751f\u6210\u516c\u79c1\u94a5\u3002

                cd /root/.ssh\nssh-keygen -t rsa\n
              2. \u6267\u884c ls \u547d\u4ee4\u67e5\u770b\u7ba1\u7406\u96c6\u7fa4\u4e0a\u7684\u5bc6\u94a5\u662f\u5426\u521b\u5efa\u6210\u529f\uff0c\u6b63\u786e\u53cd\u9988\u5982\u4e0b\uff1a

                ls\nid_rsa  id_rsa.pub  known_hosts\n

                \u5176\u4e2d\u540d\u4e3a id_rsa \u7684\u6587\u4ef6\u662f\u79c1\u94a5\uff0c\u540d\u4e3a id_rsa.pub \u7684\u6587\u4ef6\u662f\u516c\u94a5\u3002

              3. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5206\u522b\u5c06\u516c\u94a5\u6587\u4ef6 id_rsa.pub \u52a0\u8f7d\u5230\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u6240\u6709\u8282\u70b9\u4e0a\u3002

                ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.0\n

                \u5c06\u4e0a\u9762\u547d\u4ee4\u4e2d\u7684 root@10.0.0.0 \u7528\u6237\u8d26\u53f7\u548c\u8282\u70b9 IP \u66ff\u6362\u4e3a\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u8282\u70b9\u7528\u6237\u540d\u548c IP\u3002** \u9700\u8981\u5728\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u6bcf\u53f0\u8282\u70b9\u90fd\u6267\u884c\u76f8\u540c\u7684\u64cd\u4f5c **\u3002

              4. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u67e5\u770b\u6b65\u9aa4 1 \u6240\u521b\u5efa\u7684\u79c1\u94a5\u6587\u4ef6 id_rsa \u3002

                cat /root/.ssh/id_rsa\n

                \u8f93\u51fa\u5982\u4e0b\u5185\u5bb9\uff1a

                -----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEA3UvyKINzY5BFuemQ+uJ6q+GqgfvnWwNC8HzZhpcMSjJy26MM\nUtBEBJxy8fMi57XcjYxPibXW/wnd+32ICCycqCwByUmuXeCC1cjlCQDqjcAvXae7\nY54IXGF7wm2IsMNwf0kjFEXjuS48FLDA0mGRaN3BG+Up5geXcHckg3K5LD8kXFFx\ndEmSIjdyw55NaUitmEdHzN7cIdfi6Z56jcV8dcFBgWKUx+ebiyPmZBkXToz6GnMF\nrswzzZCl+G6Jb2xTGy7g7ozb4BoZd1IpSD5EhDanRrESVE0C5YuJ5zUAC0CvVd1l\nv67AK8Ko6MXToHp01/bcsvlM6cqgwUFXZKVeOwIDAQABAoIBAQCO36GQlo3BEjxy\nM2HvGJmqrx+unDxafliRe4nVY2AD515Qf4xNSzke4QM1QoyenMOwf446krQkJPK0\nk+9nl6Xszby5gGCbK4BNFk8I6RaGPjZWeRx6zGUJf8avWJiPxx6yjz2esSC9RiR0\nF0nmiiefVMyAfgv2/5++dK2WUFNNRKLgSRRpP5bRaD5wMzzxtSSXrUon6217HO8p\n3RoWsI51MbVzhdVgpHUNABcoa0rpr9svT6XLKZxY8mxpKFYjM0Wv2JIDABg3kBvh\nQbJ7kStCO3naZjKMU9UuSqVJs06cflGYw7Or8/tABR3LErNQKPjkhAQqt0DXw7Iw\n3tKdTAJBAoGBAP687U7JAOqQkcphek2E/A/sbO/d37ix7Z3vNOy065STrA+ZWMZn\npZ6Ui1B/oJpoZssnfvIoz9sn559X0j67TljFALFd2ZGS0Fqh9KVCqDvfk+Vst1dq\n+3r/yZdTOyswoccxkJiC/GDwZGK0amJWqvob39JCZhDAKIGLbGMmjdAHAoGBAN5k\nm1WGnni1nZ+3dryIwgB6z1hWcnLTamzSET6KhSuo946ET0IRG9xtlheCx6dqICbr\nVk1Y4NtRZjK/p/YGx59rDWf7E3I8ZMgR7mjieOcUZ4lUlA4l7ZIlW/2WZHW+nUXO\nTi20fqJ8qSp4BUvOvuth1pz2GLUHe2/Fxjf7HIstAoGBAPHpPr9r+TfIlPsJeRj2\n6lzA3G8qWFRQfGRYjv0fjv0pA+RIb1rzgP/I90g5+63G6Z+R4WdcxI/OJJNY1iuG\nuw9n/pFxm7U4JC990BPE6nj5iLz+clpNGYckNDBF9VG9vFSrSDLdaYkxoVNvG/xJ\na9Na90H4lm7f3VewrPy310KvAoGAZr+mwNoEh5Kpc6xo8Gxi7aPP/mlaUVD6X7Ki\ngvmu02AqmC7rC4QqEiqTaONkaSXwGusqIWxJ3yp5hELmUBYLzszAEeV/s4zRp1oZ\ng133LBRSTbHFAdBmNdqK6Nu+KGRb92980UMOKvZbliKDl+W6cbfvVu+gtKrzTc3b\naevb4TUCgYEAnJAxyVYDP1nJf7bjBSHXQu1E/DMwbtrqw7dylRJ8cAzI7IxfSCez\n7BYWq41PqVd9/zrb3Pbh2phiVzKe783igAIMqummcjo/kZyCwFsYBzK77max1jF5\naPQsLbRS2aDz8kIH6jHPZ/R+15EROmdtLmA7vIJZGerWWQR0dUU+XXA=\n

                \u5c06\u79c1\u94a5\u5185\u5bb9\u590d\u5236\u540e\u586b\u81f3\u754c\u9762\u5bc6\u94a5\u8f93\u5165\u6846\u3002

              "},{"location":"admin/kpanda/nodes/node-check.html","title":"\u521b\u5efa\u96c6\u7fa4\u8282\u70b9\u53ef\u7528\u6027\u68c0\u67e5","text":"

              \u5728\u521b\u5efa\u96c6\u7fa4\u6216\u4e3a\u5df2\u6709\u96c6\u7fa4\u6dfb\u52a0\u8282\u70b9\u65f6\uff0c\u8bf7\u53c2\u9605\u4e0b\u8868\uff0c\u68c0\u67e5\u8282\u70b9\u914d\u7f6e\uff0c\u4ee5\u907f\u514d\u56e0\u8282\u70b9\u914d\u7f6e\u9519\u8bef\u5bfc\u81f4\u96c6\u7fa4\u521b\u5efa\u6216\u6269\u5bb9\u5931\u8d25\u3002

              \u68c0\u67e5\u9879 \u63cf\u8ff0 \u64cd\u4f5c\u7cfb\u7edf \u53c2\u8003\u652f\u6301\u7684\u67b6\u6784\u53ca\u64cd\u4f5c\u7cfb\u7edf SELinux \u5173\u95ed \u9632\u706b\u5899 \u5173\u95ed \u67b6\u6784\u4e00\u81f4\u6027 \u8282\u70b9\u95f4 CPU \u67b6\u6784\u4e00\u81f4\uff08\u5982\u5747\u4e3a ARM \u6216 x86\uff09 \u4e3b\u673a\u65f6\u95f4 \u6240\u6709\u4e3b\u673a\u95f4\u540c\u6b65\u8bef\u5dee\u5c0f\u4e8e 10 \u79d2\u3002 \u7f51\u7edc\u8054\u901a\u6027 \u8282\u70b9\u53ca\u5176 SSH \u7aef\u53e3\u80fd\u591f\u6b63\u5e38\u88ab\u5e73\u53f0\u8bbf\u95ee\u3002 CPU \u53ef\u7528 CPU \u8d44\u6e90\u5927\u4e8e 4 Core \u5185\u5b58 \u53ef\u7528\u5185\u5b58\u8d44\u6e90\u5927\u4e8e 8 GB"},{"location":"admin/kpanda/nodes/node-check.html#_2","title":"\u652f\u6301\u7684\u67b6\u6784\u53ca\u64cd\u4f5c\u7cfb\u7edf","text":"\u67b6\u6784 \u64cd\u4f5c\u7cfb\u7edf \u5907\u6ce8 ARM Kylin Linux Advanced Server release V10 (Sword) SP2 \u63a8\u8350 ARM UOS Linux ARM openEuler x86 CentOS 7.x \u63a8\u8350 x86 Redhat 7.x \u63a8\u8350 x86 Redhat 8.x \u63a8\u8350 x86 Flatcar Container Linux by Kinvolk x86 Debian Bullseye, Buster, Jessie, Stretch x86 Ubuntu 16.04, 18.04, 20.04, 22.04 x86 Fedora 35, 36 x86 Fedora CoreOS x86 openSUSE Leap 15.x/Tumbleweed x86 Oracle Linux 7, 8, 9 x86 Alma Linux 8, 9 x86 Rocky Linux 8, 9 x86 Amazon Linux 2 x86 Kylin Linux Advanced Server release V10 (Sword) - SP2 \u6d77\u5149 x86 UOS Linux x86 openEuler"},{"location":"admin/kpanda/nodes/node-details.html","title":"\u8282\u70b9\u8be6\u60c5","text":"

              \u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u96c6\u7fa4\u4e2d\u5404\u4e2a\u8282\u70b9\u7684\u4fe1\u606f\uff0c\u5305\u62ec\u8282\u70b9\u72b6\u6001\u3001\u6807\u7b7e\u3001\u8d44\u6e90\u7528\u91cf\u3001Pod\u3001\u76d1\u63a7\u4fe1\u606f\u7b49\u3002

              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u53ef\u4ee5\u67e5\u770b\u8282\u70b9\u72b6\u6001\u3001\u89d2\u8272\u3001\u6807\u7b7e\u3001CPU/\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\u3001IP \u5730\u5740\u3001\u521b\u5efa\u65f6\u95f4\u3002

              3. \u70b9\u51fb\u8282\u70b9\u540d\u79f0\uff0c\u53ef\u4ee5\u8fdb\u5165\u8282\u70b9\u8be6\u60c5\u9875\u9762\u67e5\u770b\u66f4\u591a\u4fe1\u606f\uff0c\u5305\u62ec\u6982\u89c8\u4fe1\u606f\u3001\u5bb9\u5668\u7ec4\u4fe1\u606f\u3001\u6807\u7b7e\u6ce8\u89e3\u4fe1\u606f\u3001\u4e8b\u4ef6\u5217\u8868\u3001\u72b6\u6001\u7b49\u3002

                \u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u67e5\u770b\u8282\u70b9\u7684 YAML \u6587\u4ef6\u3001\u76d1\u63a7\u4fe1\u606f\u3001\u6807\u7b7e\u548c\u6ce8\u89e3\u7b49\u3002

              "},{"location":"admin/kpanda/nodes/schedule.html","title":"\u8282\u70b9\u8c03\u5ea6","text":"

              \u652f\u6301\u5c06\u8282\u70b9\u6682\u505c\u8c03\u5ea6\u6216\u6062\u590d\u8c03\u5ea6\u3002\u6682\u505c\u8c03\u5ea6\u6307\uff0c\u505c\u6b62\u5c06 Pod \u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002\u6062\u590d\u8c03\u5ea6\u6307\uff0c\u53ef\u4ee5\u5c06 Pod \u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002

              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u56fe\u6807\uff0c\u70b9\u51fb \u6682\u505c\u8c03\u5ea6 \u6309\u94ae\u5373\u53ef\u6682\u505c\u8c03\u5ea6\u8be5\u8282\u70b9\u3002

              3. \u5728\u8282\u70b9\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u56fe\u6807\uff0c\u70b9\u51fb \u6062\u590d\u8c03\u5ea6 \u6309\u94ae\u5373\u53ef\u6062\u590d\u8c03\u5ea6\u8be5\u8282\u70b9\u3002

              \u8282\u70b9\u8c03\u5ea6\u72b6\u6001\u53ef\u80fd\u56e0\u7f51\u7edc\u60c5\u51b5\u6709\u6240\u5ef6\u8fdf\uff0c\u70b9\u51fb\u641c\u7d22\u6846\u53f3\u4fa7\u7684\u5237\u65b0\u56fe\u6807\u53ef\u4ee5\u5237\u65b0\u8282\u70b9\u8c03\u5ea6\u72b6\u6001\u3002

              "},{"location":"admin/kpanda/nodes/taints.html","title":"\u8282\u70b9\u6c61\u70b9\u7ba1\u7406","text":"

              \u6c61\u70b9 (Taint) \u80fd\u591f\u4f7f\u8282\u70b9\u6392\u65a5\u67d0\u4e00\u7c7b Pod\uff0c\u907f\u514d Pod \u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u4e0a\u3002 \u6bcf\u4e2a\u8282\u70b9\u4e0a\u53ef\u4ee5\u5e94\u7528\u4e00\u4e2a\u6216\u591a\u4e2a\u6c61\u70b9\uff0c\u4e0d\u80fd\u5bb9\u5fcd\u8fd9\u4e9b\u6c61\u70b9\u7684 Pod \u5219\u4e0d\u4f1a\u88ab\u8c03\u5ea6\u8be5\u8282\u70b9\u4e0a\u3002

              "},{"location":"admin/kpanda/nodes/taints.html#_2","title":"\u6ce8\u610f\u4e8b\u9879","text":"
              1. \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u5907 NS Editor \u89d2\u8272\u6388\u6743\u6216\u5176\u4ed6\u66f4\u9ad8\u6743\u9650\u3002
              2. \u4e3a\u8282\u70b9\u6dfb\u52a0\u6c61\u70b9\u4e4b\u540e\uff0c\u53ea\u6709\u80fd\u5bb9\u5fcd\u8be5\u6c61\u70b9\u7684 Pod \u624d\u80fd\u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002
              "},{"location":"admin/kpanda/nodes/taints.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u627e\u5230\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u6982\u89c8 \u9875\u9762\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u627e\u5230\u9700\u8981\u4fee\u6539\u6c61\u70b9\u7684\u8282\u70b9\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u56fe\u6807\u5e76\u70b9\u51fb \u4fee\u6539\u6c61\u70b9 \u6309\u94ae\u3002

              3. \u5728\u5f39\u6846\u5185\u8f93\u5165\u6c61\u70b9\u7684\u952e\u503c\u4fe1\u606f\uff0c\u9009\u62e9\u6c61\u70b9\u6548\u679c\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                \u70b9\u51fb \u2795 \u6dfb\u52a0 \u53ef\u4ee5\u4e3a\u8282\u70b9\u6dfb\u52a0\u591a\u4e2a\u6c61\u70b9\uff0c\u70b9\u51fb\u6c61\u70b9\u6548\u679c\u53f3\u4fa7\u7684 X \u53ef\u4ee5\u5220\u9664\u6c61\u70b9\u3002

                \u76ee\u524d\u652f\u6301\u4e09\u79cd\u6c61\u70b9\u6548\u679c\uff1a

                • NoSchedule\uff1a\u65b0\u7684 Pod \u4e0d\u4f1a\u88ab\u8c03\u5ea6\u5230\u5e26\u6709\u6b64\u6c61\u70b9\u7684\u8282\u70b9\u4e0a\uff0c\u9664\u975e\u65b0\u7684 Pod \u5177\u6709\u76f8\u5339\u914d\u7684\u5bb9\u5fcd\u5ea6\u3002\u5f53\u524d\u6b63\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u4e0d\u4f1a \u88ab\u9a71\u9010\u3002
                • NoExecute\uff1a\u8fd9\u4f1a\u5f71\u54cd\u5df2\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod\uff1a
                  • \u5982\u679c Pod \u4e0d\u80fd\u5bb9\u5fcd\u6b64\u6c61\u70b9\uff0c\u4f1a\u9a6c\u4e0a\u88ab\u9a71\u9010\u3002
                  • \u5982\u679c Pod \u80fd\u591f\u5bb9\u5fcd\u6b64\u6c61\u70b9\uff0c\u4f46\u662f\u5728\u5bb9\u5fcd\u5ea6\u5b9a\u4e49\u4e2d\u6ca1\u6709\u6307\u5b9a tolerationSeconds\uff0c\u5219 Pod \u8fd8\u4f1a\u4e00\u76f4\u5728\u8fd9\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u3002
                  • \u5982\u679c Pod \u80fd\u591f\u5bb9\u5fcd\u6b64\u6c61\u70b9\u800c\u4e14\u6307\u5b9a\u4e86 tolerationSeconds\uff0c\u5219 Pod \u8fd8\u80fd\u5728\u8fd9\u4e2a\u8282\u70b9\u4e0a\u7ee7\u7eed\u8fd0\u884c\u6307\u5b9a\u7684\u65f6\u957f\u3002\u8fd9\u6bb5\u65f6\u95f4\u8fc7\u53bb\u540e\uff0c\u518d\u4ece\u8282\u70b9\u4e0a\u9a71\u9664\u8fd9\u4e9b Pod\u3002
                • PreferNoSchedule\uff1a\u8fd9\u662f\u201c\u8f6f\u6027\u201d\u7684 NoSchedule\u3002\u63a7\u5236\u5e73\u9762\u5c06**\u5c1d\u8bd5**\u907f\u514d\u5c06\u4e0d\u5bb9\u5fcd\u6b64\u6c61\u70b9\u7684 Pod \u8c03\u5ea6\u5230\u8282\u70b9\u4e0a\uff0c\u4f46\u4e0d\u80fd\u4fdd\u8bc1\u5b8c\u5168\u907f\u514d\u3002\u6240\u4ee5\u8981\u5c3d\u91cf\u907f\u514d\u4f7f\u7528\u6b64\u6c61\u70b9\u3002

              \u6709\u5173\u6c61\u70b9\u7684\u66f4\u591a\u8be6\u60c5\uff0c\u8bf7\u53c2\u9605 Kubernetes \u5b98\u65b9\u6587\u6863\uff1a\u6c61\u70b9\u548c\u5bb9\u5fcd\u5ea6\u3002

              "},{"location":"admin/kpanda/olm/import-miniooperator.html","title":"\u5bfc\u5165\u79bb\u7ebf MinIo Operator","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5728\u79bb\u7ebf\u73af\u5883\u4e0b\u5982\u4f55\u5bfc\u5165 MinIo Operator\u3002

              "},{"location":"admin/kpanda/olm/import-miniooperator.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5f53\u524d\u96c6\u7fa4\u5df2\u63a5\u5165\u5bb9\u5668\u7ba1\u7406\u4e14\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5df2\u7ecf\u5b89\u88c5 kolm \u7ec4\u4ef6\uff08helm \u6a21\u677f\u641c\u7d22 kolm\uff09
              • \u5f53\u524d\u96c6\u7fa4\u5df2\u7ecf\u5b89\u88c5 olm \u7ec4\u4ef6\u4e14\u7248\u672c >= 0.2.4 (helm \u6a21\u677f\u641c\u7d22 olm)
              • \u652f\u6301\u6267\u884c Docker \u547d\u4ee4
              • \u51c6\u5907\u4e00\u4e2a\u955c\u50cf\u4ed3\u5e93
              "},{"location":"admin/kpanda/olm/import-miniooperator.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u5728\u6267\u884c\u73af\u5883\u4e2d\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u5e76\u5728\u540e\u7eed\u6b65\u9aa4\u4f7f\u7528\uff0c\u6267\u884c\u547d\u4ee4\uff1a

                export OPM_IMG=10.5.14.200/quay.m.daocloud.io/operator-framework/opm:v1.29.0 \nexport BUNDLE_IMG=10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3 \n

                \u5982\u4f55\u83b7\u53d6\u4e0a\u8ff0\u955c\u50cf\u5730\u5740\uff1a

                \u524d\u5f80 \u5bb9\u5668\u7ba1\u7406 -> \u9009\u62e9\u5f53\u524d\u96c6\u7fa4 -> helm \u5e94\u7528 -> \u67e5\u770b olm \u7ec4\u4ef6 -> \u63d2\u4ef6\u8bbe\u7f6e \uff0c\u627e\u5230\u540e\u7eed\u6b65\u9aa4\u6240\u9700 opm\uff0cminio\uff0cminio bundle\uff0cminio operator \u7684\u955c\u50cf\u3002

                \u4ee5\u4e0a\u8bc9\u622a\u56fe\u4e3a\u4f8b\uff0c\u5219\u56db\u4e2a\u955c\u50cf\u5730\u5740\u5982\u4e0b\n\n# opm \u955c\u50cf \n10.5.14.200/quay.m.daocloud.io/operator-framework/opm:v1.29.0\n\n# minio \u955c\u50cf\n10.5.14.200/quay.m.daocloud.io/minio/minio:RELEASE.2023-03-24T21-41-23Z\n\n# minio bundle \u955c\u50cf\n10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3\n\n# minio operator \u955c\u50cf \n10.5.14.200/quay.m.daocloud.io/minio/operator:v5.0.3\n
              2. \u6267\u884c opm \u547d\u4ee4\u83b7\u53d6\u79bb\u7ebf bundle \u955c\u50cf\u5305\u542b\u7684 operator\u3002

                # \u521b\u5efa operator \u5b58\u653e\u76ee\u5f55\n$ mkdir minio-operator && cd minio-operator \n\n# \u83b7\u53d6 operator yaml \n$ docker run --user root  -v $PWD/minio-operator:/minio-operator ${OPM_IMG} alpha bundle unpack --skip-tls-verify -v -d ${BUNDLE_IMG} -o ./minio-operator\n\n# \u9884\u671f\u7ed3\u679c\n.\n\u2514\u2500\u2500 minio-operator\n    \u251c\u2500\u2500 manifests\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-env_v1_configmap.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-sa-secret_v1_secret.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio-operator.clusterserviceversion.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio.min.io_tenants.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 operator_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 sts.min.io_policybindings.yaml\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 sts_v1_service.yaml\n    \u2514\u2500\u2500 metadata\n        \u2514\u2500\u2500 annotations.yaml\n\n3 directories, 9 files\n
              3. \u66ff\u6362\u00a0 minio-operator/manifests/minio-operator.clusterserviceversion.yaml\u00a0 \u6587\u4ef6\u4e2d\u7684\u6240\u6709\u955c\u50cf\u5730\u5740\u4e3a\u79bb\u7ebf\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u955c\u50cf\u3002

                \u66ff\u6362\u524d\uff1a

                \u66ff\u6362\u540e\uff1a

              4. \u751f\u6210\u6784\u5efa bundle \u955c\u50cf\u7684 Dockerfile

                $ docker run --user root  -v $PWD:/minio-operator -w /minio-operator ${OPM_IMG} alpha bundle generate --channels stable,beta -d /minio-operator/minio-operator/manifests -e stable -p minio-operator \u00a0\n\n# \u9884\u671f\u7ed3\u679c\n.\n\u251c\u2500\u2500 bundle.Dockerfile\n\u2514\u2500\u2500 minio-operator\n    \u251c\u2500\u2500 manifests\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-env_v1_configmap.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-sa-secret_v1_secret.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio-operator.clusterserviceversion.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio.min.io_tenants.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 operator_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 sts.min.io_policybindings.yaml\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 sts_v1_service.yaml\n    \u2514\u2500\u2500 metadata\n        \u2514\u2500\u2500 annotations.yaml\n\n3 directories, 10 files\n
              5. \u6267\u884c\u6784\u5efa\u547d\u4ee4\uff0c\u6784\u5efa bundle \u955c\u50cf\u4e14\u63a8\u9001\u5230\u79bb\u7ebf registry\u3002

                # \u8bbe\u7f6e\u65b0\u7684 bundle image \nexport OFFLINE_BUNDLE_IMG=10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3-offline \n\n$ docker build . -f bundle.Dockerfile -t ${OFFLINE_BUNDLE_IMG} \u00a0\n\n$ docker push ${OFFLINE_BUNDLE_IMG}\n
              6. \u751f\u6210\u6784\u5efa catalog \u955c\u50cf\u7684 Dockerfile\u3002

                $ docker run --user root  -v $PWD:/minio-operator  -w /minio-operator ${OPM_IMG} index add  --bundles ${OFFLINE_BUNDLE_IMG} --generate --binary-image ${OPM_IMG} --skip-tls-verify\n\n# \u9884\u671f\u7ed3\u679c\n.\n\u251c\u2500\u2500 bundle.Dockerfile\n\u251c\u2500\u2500 database\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 index.db\n\u251c\u2500\u2500 index.Dockerfile\n\u2514\u2500\u2500 minio-operator\n    \u251c\u2500\u2500 manifests\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-env_v1_configmap.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-sa-secret_v1_secret.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio.min.io_tenants.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio-operator.clusterserviceversion.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 operator_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 sts.min.io_policybindings.yaml\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 sts_v1_service.yaml\n    \u2514\u2500\u2500 metadata\n        \u2514\u2500\u2500 annotations.yaml\n\n4 directories, 12 files\n
              7. \u6784\u5efa catalog \u955c\u50cf

                # \u8bbe\u7f6e\u65b0\u7684 catalog image  \nexport OFFLINE_CATALOG_IMG=10.5.14.200/release.daocloud.io/operator-framework/system-operator-index:v0.1.0-offline\n\n$ docker build . -f index.Dockerfile -t ${OFFLINE_CATALOG_IMG}  \n\n$ docker push ${OFFLINE_CATALOG_IMG}\n
              8. \u524d\u5f80\u5bb9\u5668\u7ba1\u7406\uff0c\u66f4\u65b0 helm \u5e94\u7528 olm \u7684\u5185\u7f6e catsrc \u955c\u50cf\uff08\u586b\u5199\u6784\u5efa catalog \u955c\u50cf\u6307\u5b9a\u7684 ${catalog-image} \u5373\u53ef\uff09

              9. \u66f4\u65b0\u6210\u529f\u540e\uff0cOperator Hub \u4e2d\u4f1a\u51fa\u73b0 minio-operator \u7ec4\u4ef6

              "},{"location":"admin/kpanda/permissions/cluster-ns-auth.html","title":"\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u6388\u6743","text":"

              \u5bb9\u5668\u7ba1\u7406\u57fa\u4e8e\u5168\u5c40\u6743\u9650\u7ba1\u7406\u53ca\u5168\u5c40\u7528\u6237/\u7528\u6237\u7ec4\u7ba1\u7406\u5b9e\u73b0\u6388\u6743\uff0c\u5982\u9700\u4e3a\u7528\u6237\u6388\u4e88\u5bb9\u5668\u7ba1\u7406\u7684\u6700\u9ad8\u6743\u9650\uff08\u53ef\u4ee5\u521b\u5efa\u3001\u7ba1\u7406\u3001\u5220\u9664\u6240\u6709\u96c6\u7fa4\uff09\uff0c\u8bf7\u53c2\u89c1\u4ec0\u4e48\u662f\u7528\u6237\u4e0e\u8bbf\u95ee\u63a7\u5236\u3002

              "},{"location":"admin/kpanda/permissions/cluster-ns-auth.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u7ed9\u7528\u6237/\u7528\u6237\u7ec4\u6388\u6743\u4e4b\u524d\uff0c\u8bf7\u5b8c\u6210\u5982\u4e0b\u51c6\u5907\uff1a

              • \u5df2\u5728\u5168\u5c40\u7ba1\u7406\u4e2d\u521b\u5efa\u4e86\u5f85\u6388\u6743\u7684\u7528\u6237/\u7528\u6237\u7ec4\uff0c\u8bf7\u53c2\u8003\u7528\u6237\u3002

              • \u4ec5 Kpanda Owner \u53ca\u5f53\u524d\u96c6\u7fa4\u7684 Cluster Admin \u5177\u5907\u96c6\u7fa4\u6388\u6743\u80fd\u529b\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u6743\u9650\u8bf4\u660e\u3002

              • \u4ec5 Kpanda Owner\u3001\u5f53\u524d\u96c6\u7fa4\u7684 Cluster Admin\uff0c\u5f53\u524d\u547d\u540d\u7a7a\u95f4\u7684 NS Admin \u5177\u5907\u547d\u540d\u7a7a\u95f4\u6388\u6743\u80fd\u529b\u3002

              "},{"location":"admin/kpanda/permissions/cluster-ns-auth.html#_3","title":"\u96c6\u7fa4\u6388\u6743","text":"
              1. \u7528\u6237\u767b\u5f55\u5e73\u53f0\u540e\uff0c\u70b9\u51fb\u5de6\u4fa7\u83dc\u5355\u680f \u5bb9\u5668\u7ba1\u7406 \u4e0b\u7684 \u6743\u9650\u7ba1\u7406 \uff0c\u9ed8\u8ba4\u4f4d\u4e8e \u96c6\u7fa4\u6743\u9650 \u9875\u7b7e\u3002

              2. \u70b9\u51fb \u6dfb\u52a0\u6388\u6743 \u6309\u94ae\u3002

              3. \u5728 \u6dfb\u52a0\u96c6\u7fa4\u6743\u9650 \u9875\u9762\u4e2d\uff0c\u9009\u62e9\u76ee\u6807\u96c6\u7fa4\u3001\u5f85\u6388\u6743\u7684\u7528\u6237/\u7528\u6237\u7ec4\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                \u76ee\u524d\u4ec5\u652f\u6301\u7684\u96c6\u7fa4\u89d2\u8272\u4e3a Cluster Admin \uff0c\u8be6\u60c5\u6743\u9650\u53ef\u53c2\u8003\u6743\u9650\u8bf4\u660e\u3002\u5982\u9700\u8981\u7ed9\u591a\u4e2a\u7528\u6237/\u7528\u6237\u7ec4\u540c\u65f6\u8fdb\u884c\u6388\u6743\uff0c \u53ef\u70b9\u51fb \u6dfb\u52a0\u7528\u6237\u6743\u9650 \u8fdb\u884c\u591a\u6b21\u6dfb\u52a0\u3002

              4. \u8fd4\u56de\u96c6\u7fa4\u6743\u9650\u7ba1\u7406\u9875\u9762\uff0c\u5c4f\u5e55\u51fa\u73b0\u6d88\u606f\uff1a \u6dfb\u52a0\u96c6\u7fa4\u6743\u9650\u6210\u529f \u3002

              "},{"location":"admin/kpanda/permissions/cluster-ns-auth.html#_4","title":"\u547d\u540d\u7a7a\u95f4\u6388\u6743","text":"
              1. \u7528\u6237\u767b\u5f55\u5e73\u53f0\u540e\uff0c\u70b9\u51fb\u5de6\u4fa7\u83dc\u5355\u680f \u5bb9\u5668\u7ba1\u7406 \u4e0b\u7684 \u6743\u9650\u7ba1\u7406 \uff0c\u70b9\u51fb \u547d\u540d\u7a7a\u95f4\u6743\u9650 \u9875\u7b7e\u3002

              2. \u70b9\u51fb \u6dfb\u52a0\u6388\u6743 \u6309\u94ae\u3002\u5728 \u6dfb\u52a0\u547d\u540d\u7a7a\u95f4\u6743\u9650 \u9875\u9762\u4e2d\uff0c\u9009\u62e9\u76ee\u6807\u96c6\u7fa4\u3001\u76ee\u6807\u547d\u540d\u7a7a\u95f4\uff0c\u4ee5\u53ca\u5f85\u6388\u6743\u7684\u7528\u6237/\u7528\u6237\u7ec4\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                \u76ee\u524d\u652f\u6301\u7684\u547d\u540d\u7a7a\u95f4\u89d2\u8272\u4e3a NS Admin\u3001NS Editor\u3001NS Viewer\uff0c\u8be6\u60c5\u6743\u9650\u53ef\u53c2\u8003\u6743\u9650\u8bf4\u660e\u3002\u5982\u9700\u7ed9\u591a\u4e2a\u7528\u6237/\u7528\u6237\u7ec4\u540c\u65f6\u8fdb\u884c\u6388\u6743\uff0c\u53ef\u70b9\u51fb \u6dfb\u52a0\u7528\u6237\u6743\u9650 \u8fdb\u884c\u591a\u6b21\u6dfb\u52a0\u3002\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u6743\u9650\u6388\u6743\u3002

              3. \u8fd4\u56de\u547d\u540d\u7a7a\u95f4\u6743\u9650\u7ba1\u7406\u9875\u9762\uff0c\u5c4f\u5e55\u51fa\u73b0\u6d88\u606f\uff1a \u6dfb\u52a0\u96c6\u7fa4\u6743\u9650\u6210\u529f \u3002

                Tip

                \u540e\u7eed\u5982\u9700\u5220\u9664\u6216\u7f16\u8f91\u6743\u9650\uff0c\u53ef\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u9009\u62e9 \u7f16\u8f91 \u6216 \u5220\u9664 \u3002

              "},{"location":"admin/kpanda/permissions/custom-kpanda-role.html","title":"\u589e\u52a0 Kpanda \u5185\u7f6e\u89d2\u8272\u6743\u9650\u70b9","text":"

              \u8fc7\u53bb Kpanda \u5185\u7f6e\u89d2\u8272\u7684\u6743\u9650\u70b9\uff08rbac rules\uff09\u90fd\u662f\u63d0\u524d\u9884\u5b9a\u4e49\u597d\u7684\u4e14\u7528\u6237\u65e0\u6cd5\u4fee\u6539\uff0c\u56e0\u4e3a\u4ee5\u524d\u4fee\u6539\u5185\u7f6e\u89d2\u8272\u7684\u6743\u9650\u70b9\u4e4b\u540e\u4e5f\u4f1a\u88ab Kpanda \u63a7\u5236\u5668\u8fd8\u539f\u6210\u9884\u5b9a\u4e49\u7684\u6743\u9650\u70b9\u3002 \u4e3a\u4e86\u652f\u6301\u66f4\u52a0\u7075\u6d3b\u7684\u6743\u9650\u914d\u7f6e\uff0c\u6ee1\u8db3\u5bf9\u7cfb\u7edf\u89d2\u8272\u7684\u81ea\u5b9a\u4e49\u9700\u6c42\uff0c\u76ee\u524d Kpanda \u652f\u6301\u4e3a\u5185\u7f6e\u7cfb\u7edf\u89d2\u8272\uff08cluster admin\u3001ns admin\u3001ns editor\u3001ns viewer\uff09\u4fee\u6539\u6743\u9650\u70b9\u3002 \u4ee5\u4e0b\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u65b0\u589e ns-viewer \u6743\u9650\u70b9\uff0c\u5c1d\u8bd5\u589e\u52a0\u53ef\u4ee5\u5220\u9664 Deployment \u7684\u6743\u9650\u3002\u5176\u4ed6\u6743\u9650\u70b9\u64cd\u4f5c\u7c7b\u4f3c\u3002

              "},{"location":"admin/kpanda/permissions/custom-kpanda-role.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u9002\u7528\u4e8e\u5bb9\u5668\u7ba1\u7406 v0.27.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u3002
              • \u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Viewer \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              Note

              • \u53ea\u9700\u5728 Global Cluster \u589e\u52a0\u6743\u9650\u70b9\uff0cKpanda \u63a7\u5236\u5668\u4f1a\u628a Global Cluster \u589e\u52a0\u7684\u6743\u9650\u70b9\u540c\u6b65\u5230\u6240\u6709\u63a5\u5165\u5b50\u96c6\u7fa4\u4e2d\uff0c\u540c\u6b65\u9700\u4e00\u6bb5\u65f6\u95f4\u624d\u80fd\u5b8c\u6210
              • \u53ea\u80fd\u5728 Global Cluster \u589e\u52a0\u6743\u9650\u70b9\uff0c\u5728\u5b50\u96c6\u7fa4\u65b0\u589e\u7684\u6743\u9650\u70b9\u4f1a\u88ab Global Cluster \u5185\u7f6e\u89d2\u8272\u6743\u9650\u70b9\u8986\u76d6
              • \u53ea\u652f\u6301\u4f7f\u7528\u56fa\u5b9a Label \u7684 ClusterRole \u8ffd\u52a0\u6743\u9650\uff0c\u4e0d\u652f\u6301\u66ff\u6362\u6216\u8005\u5220\u9664\u6743\u9650\uff0c\u4e5f\u4e0d\u80fd\u4f7f\u7528 role \u8ffd\u52a0\u6743\u9650\uff0c\u5185\u7f6e\u89d2\u8272\u8ddf\u7528\u6237\u521b\u5efa\u7684 ClusterRole Label \u5bf9\u5e94\u5173\u7cfb\u5982\u4e0b

                cluster-admin: rbac.kpanda.io/role-template-cluster-admin: \"true\"\ncluster-edit: rbac.kpanda.io/role-template-cluster-edit: \"true\"\ncluster-view: rbac.kpanda.io/role-template-cluster-view: \"true\"\nns-admin: rbac.kpanda.io/role-template-ns-admin: \"true\"\nns-edit: rbac.kpanda.io/role-template-ns-edit: \"true\"\nns-view: rbac.kpanda.io/role-template-ns-view: \"true\"\n
              "},{"location":"admin/kpanda/permissions/custom-kpanda-role.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u4f7f\u7528 admin \u6216\u8005 cluster admin \u6743\u9650\u7684\u7528\u6237\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d

              2. \u6388\u6743 ns-viewer\uff0c\u7528\u6237\u6709\u8be5 namespace ns-view \u6743\u9650

              3. \u5207\u6362\u767b\u5f55\u7528\u6237\u4e3a ns-viewer\uff0c\u6253\u5f00\u63a7\u5236\u53f0\u83b7\u53d6 ns-viewer \u7528\u6237\u5bf9\u5e94\u7684 token\uff0c\u4f7f\u7528 curl \u8bf7\u6c42\u5220\u9664\u4e0a\u8ff0\u7684 deployment nginx\uff0c\u53d1\u73b0\u65e0\u5220\u9664\u6743\u9650

                [root@master-01 ~]# curl -k -X DELETE  'https://${URL}/apis/kpanda.io/v1alpha1/clusters/cluster-member/namespaces/default/deployments/nginx' -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJOU044MG9BclBRMzUwZ2VVU2ZyNy1xMEREVWY4MmEtZmJqR05uRE1sd1lFIn0.eyJleHAiOjE3MTU3NjY1NzksImlhdCI6MTcxNTY4MDE3OSwiYXV0aF90aW1lIjoxNzE1NjgwMTc3LCJqdGkiOiIxZjI3MzJlNC1jYjFhLTQ4OTktYjBiZC1iN2IxZWY1MzAxNDEiLCJpc3MiOiJodHRwczovLzEwLjYuMjAxLjIwMTozMDE0Ny9hdXRoL3JlYWxtcy9naGlwcG8iLCJhdWQiOiJfX2ludGVybmFsLWdoaXBwbyIsInN1YiI6ImMxZmMxM2ViLTAwZGUtNDFiYS05ZTllLWE5OGU2OGM0MmVmMCIsInR5cCI6IklEIiwiYXpwIjoiX19pbnRlcm5hbC1naGlwcG8iLCJzZXNzaW9uX3N0YXRlIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiYXRfaGFzaCI6IlJhTHoyQjlKQ2FNc1RrbGVMR3V6blEiLCJhY3IiOiIwIiwic2lkIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJncm91cHMiOltdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJucy12aWV3ZXIiLCJsb2NhbGUiOiIifQ.As2ipMjfvzvgONAGlc9RnqOd3zMwAj82VXlcqcR74ZK9tAq3Q4ruQ1a6WuIfqiq8Kq4F77ljwwzYUuunfBli2zhU2II8zyxVhLoCEBu4pBVBd_oJyUycXuNa6HfQGnl36E1M7-_QG8b-_T51wFxxVb5b7SEDE1AvIf54NAlAr-rhDmGRdOK1c9CohQcS00ab52MD3IPiFFZ8_Iljnii-RpXKZoTjdcULJVn_uZNk_SzSUK-7MVWmPBK15m6sNktOMSf0pCObKWRqHd15JSe-2aA2PKBo1jBH3tHbOgZyMPdsLI0QdmEnKB5FiiOeMpwn_oHnT6IjT-BZlB18VkW8rA'\n{\"code\":7,\"message\":\"[RBAC] delete resources(deployments: nginx) is forbidden for user(ns-viewer) in cluster(cluster-member)\",\"details\":[]}[root@master-01 ~]#\n[root@master-01 ~]#\n
              4. \u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u521b\u5efa\u5982\u4e0b ClusterRole\uff1a

                apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: append-ns-view # (1)!\n  labels:\n    rbac.kpanda.io/role-template-ns-view: \"true\" # (2)!\nrules:\n  - apiGroups: [ \"apps\" ]\n    resources: [ \"deployments\" ]\n    verbs: [ \"delete\" ]\n
                1. \u6b64\u5b57\u6bb5\u503c\u53ef\u4efb\u610f\u6307\u5b9a\uff0c\u53ea\u9700\u4e0d\u91cd\u590d\u4e14\u7b26\u5408 Kubernetes \u8d44\u6e90\u540d\u79f0\u89c4\u5219\u8981\u6c42
                2. \u6ce8\u610f\u7ed9\u4e0d\u540c\u7684\u89d2\u8272\u6dfb\u52a0\u6743\u9650\u65f6\u5e94\u6253\u4e0a\u4e0d\u540c\u7684 label
              5. \u7b49\u5f85 Kpanda \u63a7\u5236\u5668\u6dfb\u52a0\u7528\u6237\u521b\u5efa\u6743\u9650\u5230\u5185\u7f6e\u89d2\u8272 ns-viewer \u4e2d\uff0c\u53ef\u67e5\u770b\u5bf9\u5e94\u5185\u7f6e\u89d2\u8272\u5982\u662f\u5426\u6709\u4e0a\u4e00\u6b65\u65b0\u589e\u7684\u6743\u9650\u70b9

                [root@master-01 ~]# kubectl get clusterrole role-template-ns-view -oyaml|grep deployments -C 10|tail -n 6\n
                - apiGroups:\n  - apps\n  resources:\n  - deployments\n  verbs:\n  - delete\n

              6. \u518d\u6b21\u4f7f\u7528 curl \u8bf7\u6c42\u5220\u9664\u4e0a\u8ff0\u7684 deployment nginx\uff0c\u8fd9\u6b21\u6210\u529f\u5220\u9664\u4e86\u3002\u4e5f\u5c31\u662f\u8bf4\uff0cns-viewer \u6210\u529f\u65b0\u589e\u4e86\u5220\u9664 Deployment \u7684\u6743\u9650\u3002

                [root@master-01 ~]# curl -k -X DELETE  'https://${URL}/apis/kpanda.io/v1alpha1/clusters/cluster-member/namespaces/default/deployments/nginx' -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJOU044MG9BclBRMzUwZ2VVU2ZyNy1xMEREVWY4MmEtZmJqR05uRE1sd1lFIn0.eyJleHAiOjE3MTU3NjY1NzksImlhdCI6MTcxNTY4MDE3OSwiYXV0aF90aW1lIjoxNzE1NjgwMTc3LCJqdGkiOiIxZjI3MzJlNC1jYjFhLTQ4OTktYjBiZC1iN2IxZWY1MzAxNDEiLCJpc3MiOiJodHRwczovLzEwLjYuMjAxLjIwMTozMDE0Ny9hdXRoL3JlYWxtcy9naGlwcG8iLCJhdWQiOiJfX2ludGVybmFsLWdoaXBwbyIsInN1YiI6ImMxZmMxM2ViLTAwZGUtNDFiYS05ZTllLWE5OGU2OGM0MmVmMCIsInR5cCI6IklEIiwiYXpwIjoiX19pbnRlcm5hbC1naGlwcG8iLCJzZXNzaW9uX3N0YXRlIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiYXRfaGFzaCI6IlJhTHoyQjlKQ2FNc1RrbGVMR3V6blEiLCJhY3IiOiIwIiwic2lkIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJncm91cHMiOltdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJucy12aWV3ZXIiLCJsb2NhbGUiOiIifQ.As2ipMjfvzvgONAGlc9RnqOd3zMwAj82VXlcqcR74ZK9tAq3Q4ruQ1a6WuIfqiq8Kq4F77ljwwzYUuunfBli2zhU2II8zyxVhLoCEBu4pBVBd_oJyUycXuNa6HfQGnl36E1M7-_QG8b-_T51wFxxVb5b7SEDE1AvIf54NAlAr-rhDmGRdOK1c9CohQcS00ab52MD3IPiFFZ8_Iljnii-RpXKZoTjdcULJVn_uZNk_SzSUK-7MVWmPBK15m6sNktOMSf0pCObKWRqHd15JSe-2aA2PKBo1jBH3tHbOgZyMPdsLI0QdmEnKB5FiiOeMpwn_oHnT6IjT-BZlB18VkW8rA'\n
              "},{"location":"admin/kpanda/permissions/permission-brief.html","title":"\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u8bf4\u660e","text":"

              \u5bb9\u5668\u7ba1\u7406\u6743\u9650\u57fa\u4e8e\u5168\u5c40\u6743\u9650\u7ba1\u7406\u4ee5\u53ca Kubernetes RBAC \u6743\u9650\u7ba1\u7406\u6253\u9020\u7684\u591a\u7ef4\u5ea6\u6743\u9650\u7ba1\u7406\u4f53\u7cfb\u3002 \u652f\u6301\u96c6\u7fa4\u7ea7\u3001\u547d\u540d\u7a7a\u95f4\u7ea7\u7684\u6743\u9650\u63a7\u5236\uff0c\u5e2e\u52a9\u7528\u6237\u4fbf\u6377\u7075\u6d3b\u5730\u5bf9\u79df\u6237\u4e0b\u7684 IAM \u7528\u6237\u3001\u7528\u6237\u7ec4\uff08\u7528\u6237\u7684\u96c6\u5408\uff09\u8bbe\u5b9a\u4e0d\u540c\u7684\u64cd\u4f5c\u6743\u9650\u3002

              "},{"location":"admin/kpanda/permissions/permission-brief.html#_2","title":"\u96c6\u7fa4\u6743\u9650","text":"

              \u96c6\u7fa4\u6743\u9650\u57fa\u4e8e Kubernetes RBAC \u7684 ClusterRolebinding \u6388\u6743\uff0c\u96c6\u7fa4\u6743\u9650\u8bbe\u7f6e\u53ef\u8ba9\u7528\u6237/\u7528\u6237\u7ec4\u5177\u5907\u96c6\u7fa4\u76f8\u5173\u6743\u9650\u3002 \u76ee\u524d\u7684\u9ed8\u8ba4\u96c6\u7fa4\u89d2\u8272\u4e3a Cluster Admin \uff08\u4e0d\u5177\u5907\u96c6\u7fa4\u7684\u521b\u5efa\u3001\u5220\u9664\u6743\u9650\uff09\u3002

              "},{"location":"admin/kpanda/permissions/permission-brief.html#cluster-admin","title":"Cluster Admin","text":"

              Cluster Admin \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

              • \u53ef\u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b\u5bf9\u5e94\u96c6\u7fa4

              • \u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b \u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d\u53ca\u96c6\u7fa4\u5185\u6240\u6709\u8d44\u6e90

              • \u53ef\u6388\u6743\u7528\u6237\u4e3a\u96c6\u7fa4\u5185\u89d2\u8272 (Cluster Admin\u3001NS Admin\u3001NS Editor\u3001NS Viewer)

              \u8be5\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b\u5982\u4e0b\uff1a

              apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:49Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-cluster-admin\n  resourceVersion: \"15168\"\n  uid: f8f86d42-d5ef-47aa-b284-097615795076\nrules:\n- apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n- nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'\n
              "},{"location":"admin/kpanda/permissions/permission-brief.html#_3","title":"\u547d\u540d\u7a7a\u95f4\u6743\u9650","text":"

              \u547d\u540d\u7a7a\u95f4\u6743\u9650\u662f\u57fa\u4e8e Kubernetes RBAC \u80fd\u529b\u7684\u6388\u6743\uff0c\u53ef\u4ee5\u5b9e\u73b0\u4e0d\u540c\u7684\u7528\u6237/\u7528\u6237\u7ec4\u5bf9\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u8d44\u6e90\u5177\u6709\u4e0d\u540c\u7684\u64cd\u4f5c\u6743\u9650(\u5305\u62ec Kubernetes API \u6743\u9650)\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\uff1aKubernetes RBAC\u3002\u76ee\u524d\u5bb9\u5668\u7ba1\u7406\u7684\u9ed8\u8ba4\u89d2\u8272\u4e3a\uff1aNS Admin\u3001NS Editor\u3001NS Viewer\u3002

              "},{"location":"admin/kpanda/permissions/permission-brief.html#ns-admin","title":"NS Admin","text":"

              NS Admin \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

              • \u53ef\u67e5\u770b\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4
              • \u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b \u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u53ca\u81ea\u5b9a\u4e49\u8d44\u6e90
              • \u53ef\u6388\u6743\u7528\u6237\u4e3a\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u89d2\u8272 (NS Editor\u3001NS Viewer)

              \u8be5\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b\u5982\u4e0b\uff1a

              apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:49Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-ns-admin\n  resourceVersion: \"15173\"\n  uid: 69f64c7e-70e7-4c7c-a3e0-053f507f2bc3\nrules:\n- apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n- nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'    \n
              "},{"location":"admin/kpanda/permissions/permission-brief.html#ns-editor","title":"NS Editor","text":"

              NS Editor \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

              • \u53ef\u67e5\u770b\u5bf9\u5e94\u6709\u6743\u9650\u7684\u547d\u540d\u7a7a\u95f4
              • \u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b \u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d
              \u70b9\u51fb\u67e5\u770b\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b
              apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:50Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-ns-edit\n  resourceVersion: \"15175\"\n  uid: ca9e690e-96c0-4978-8915-6e4c00c748fe\nrules:\n- apiGroups:\n  - \"\"\n  resources:\n  - configmaps\n  - endpoints\n  - persistentvolumeclaims\n  - persistentvolumeclaims/status\n  - pods\n  - replicationcontrollers\n  - replicationcontrollers/scale\n  - serviceaccounts\n  - services\n  - services/status\n  verbs:\n  - '*'\n- apiGroups:\n  - \"\"\n  resources:\n  - bindings\n  - events\n  - limitranges\n  - namespaces/status\n  - pods/log\n  - pods/status\n  - replicationcontrollers/status\n  - resourcequotas\n  - resourcequotas/status\n  verbs:\n  - '*'\n- apiGroups:\n  - \"\"\n  resources:\n  - namespaces\n  verbs:\n  - '*'\n- apiGroups:\n  - apps\n  resources:\n  - controllerrevisions\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - statefulsets\n  - statefulsets/scale\n  - statefulsets/status\n  verbs:\n  - '*'\n- apiGroups:\n  - autoscaling\n  resources:\n  - horizontalpodautoscalers\n  - horizontalpodautoscalers/status\n  verbs:\n  - '*'\n- apiGroups:\n  - batch\n  resources:\n  - cronjobs\n  - cronjobs/status\n  - jobs\n  - jobs/status\n  verbs:\n  - '*'\n- apiGroups:\n  - extensions\n  resources:\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - replicationcontrollers/scale\n  verbs:\n  - '*'\n- apiGroups:\n  - policy\n  resources:\n  - poddisruptionbudgets\n  - poddisruptionbudgets/status\n  verbs:\n  - '*'\n- apiGroups:\n  - networking.k8s.io\n  resources:\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  verbs:\n  - '*'      \n
              "},{"location":"admin/kpanda/permissions/permission-brief.html#ns-viewer","title":"NS Viewer","text":"

              NS Viewer \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

              • \u53ef\u67e5\u770b\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4
              • \u53ef\u67e5\u770b\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u53ca\u81ea\u5b9a\u4e49\u8d44\u6e90
              \u70b9\u51fb\u67e5\u770b\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b
              apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:50Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-ns-view\n  resourceVersion: \"15183\"\n  uid: 853888fd-6ee8-42ac-b91e-63923918baf8\nrules:\n- apiGroups:\n  - \"\"\n  resources:\n  - configmaps\n  - endpoints\n  - persistentvolumeclaims\n  - persistentvolumeclaims/status\n  - pods\n  - replicationcontrollers\n  - replicationcontrollers/scale\n  - serviceaccounts\n  - services\n  - services/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - \"\"\n  resources:\n  - bindings\n  - events\n  - limitranges\n  - namespaces/status\n  - pods/log\n  - pods/status\n  - replicationcontrollers/status\n  - resourcequotas\n  - resourcequotas/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - \"\"\n  resources:\n  - namespaces\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - apps\n  resources:\n  - controllerrevisions\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - statefulsets\n  - statefulsets/scale\n  - statefulsets/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - autoscaling\n  resources:\n  - horizontalpodautoscalers\n  - horizontalpodautoscalers/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - batch\n  resources:\n  - cronjobs\n  - cronjobs/status\n  - jobs\n  - jobs/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - extensions\n  resources:\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - replicationcontrollers/scale\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - policy\n  resources:\n  - poddisruptionbudgets\n  - poddisruptionbudgets/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - networking.k8s.io\n  resources:\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  verbs:\n  - get\n  - list\n  - watch \n
              "},{"location":"admin/kpanda/permissions/permission-brief.html#faq","title":"\u6743\u9650 FAQ","text":"
              1. \u5168\u5c40\u6743\u9650\u548c\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u7ba1\u7406\u7684\u5173\u7cfb\uff1f

                \u7b54\uff1a\u5168\u5c40\u6743\u9650\u4ec5\u6388\u6743\u4e3a\u7c97\u7c92\u5ea6\u6743\u9650\uff0c\u53ef\u7ba1\u7406\u6240\u6709\u96c6\u7fa4\u7684\u521b\u5efa\u3001\u7f16\u8f91\u3001\u5220\u9664\uff1b\u800c\u5bf9\u4e8e\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\uff0c\u5982\u5355\u4e2a\u96c6\u7fa4\u7684\u7ba1\u7406\u6743\u9650\uff0c\u5355\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u7ba1\u7406\u3001\u7f16\u8f91\u3001\u5220\u9664\u6743\u9650\uff0c\u9700\u8981\u57fa\u4e8e Kubernetes RBAC \u7684\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u8fdb\u884c\u5b9e\u73b0\u3002 \u4e00\u822c\u6743\u9650\u7684\u7528\u6237\u4ec5\u9700\u8981\u5728\u5bb9\u5668\u7ba1\u7406\u4e2d\u8fdb\u884c\u6388\u6743\u5373\u53ef\u3002

              2. \u76ee\u524d\u4ec5\u652f\u6301\u56db\u4e2a\u9ed8\u8ba4\u89d2\u8272\uff0c\u540e\u53f0\u81ea\u5b9a\u4e49\u89d2\u8272\u7684 RoleBinding \u4ee5\u53ca ClusterRoleBinding \uff08Kubernetes \u7ec6\u7c92\u5ea6\u7684 RBAC\uff09\u662f\u5426\u4e5f\u80fd\u751f\u6548\uff1f

                \u7b54\uff1a\u76ee\u524d\u81ea\u5b9a\u4e49\u6743\u9650\u6682\u65f6\u65e0\u6cd5\u901a\u8fc7\u56fe\u5f62\u754c\u9762\u8fdb\u884c\u7ba1\u7406\uff0c\u4f46\u662f\u901a\u8fc7 kubectl \u521b\u5efa\u7684\u6743\u9650\u89c4\u5219\u540c\u6837\u80fd\u751f\u6548\u3002

              "},{"location":"admin/kpanda/scale/create-hpa.html","title":"\u57fa\u4e8e\u5185\u7f6e\u6307\u6807\u521b\u5efa HPA","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301 Pod \u8d44\u6e90\u57fa\u4e8e\u6307\u6807\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\uff08Horizontal Pod Autoscaling, HPA\uff09\u3002 \u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e CPU \u5229\u7528\u7387\u3001\u5185\u5b58\u7528\u91cf\u53ca\u81ea\u5b9a\u4e49\u6307\u6807\u6307\u6807\u6765\u52a8\u6001\u8c03\u6574 Pod \u8d44\u6e90\u7684\u526f\u672c\u6570\u91cf\u3002 \u4f8b\u5982\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u8bbe\u7f6e\u57fa\u4e8e CPU \u5229\u7528\u7387\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u540e\uff0c\u5f53 Pod \u7684 CPU \u5229\u7528\u7387\u8d85\u8fc7/\u4f4e\u4e8e\u60a8\u8bbe\u7f6e\u7684\u6307\u6807\u9600\u503c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u63a7\u5236\u5668\u5c06\u4f1a\u81ea\u52a8\u589e\u52a0/\u8f83\u5c11 Pod \u526f\u672c\u6570\u3002

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u57fa\u4e8e\u5185\u7f6e\u6307\u6807\u7684\u5f39\u6027\u4f38\u7f29\u3002

              Note

              1. HPA \u4ec5\u9002\u7528\u4e8e Deployment \u548c StatefulSet\uff0c\u6bcf\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u53ea\u80fd\u521b\u5efa\u4e00\u4e2a HPA\u3002
              2. \u5982\u679c\u57fa\u4e8e CPU \u5229\u7528\u7387\u521b\u5efa HPA \u7b56\u7565\uff0c\u5fc5\u987b\u9884\u5148\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u8bbe\u7f6e\u914d\u7f6e\u9650\u5236\uff08Limit\uff09\uff0c\u5426\u5219\u65e0\u6cd5\u8ba1\u7b97 CPU \u5229\u7528\u7387\u3002
              3. \u5982\u679c\u540c\u65f6\u4f7f\u7528\u5185\u7f6e\u6307\u6807\u548c\u591a\u79cd\u81ea\u5b9a\u4e49\u6307\uff0cHPA \u4f1a\u6839\u636e\u591a\u9879\u6307\u6807\u5206\u522b\u8ba1\u7b97\u6240\u9700\u4f38\u7f29\u526f\u672c\u6570\uff0c\u53d6\u8f83\u5927\u503c\uff08\u4f46\u4e0d\u4f1a\u8d85\u8fc7\u8bbe\u7f6e HPA \u7b56\u7565\u65f6\u914d\u7f6e\u7684\u6700\u5927\u526f\u672c\u6570\uff09\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\u3002
              "},{"location":"admin/kpanda/scale/create-hpa.html#_1","title":"\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565","text":"

              \u7cfb\u7edf\u5185\u7f6e\u4e86 CPU \u548c\u5185\u5b58\u4e24\u79cd\u5f39\u6027\u4f38\u7f29\u6307\u6807\u4ee5\u6ee1\u8db3\u7528\u6237\u7684\u57fa\u7840\u4e1a\u52a1\u4f7f\u7528\u573a\u666f\u3002

              "},{"location":"admin/kpanda/scale/create-hpa.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5728\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u6216\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5df2\u5b8c\u6210 metrics-server \u63d2\u4ef6\u5b89\u88c5 \u3002

              "},{"location":"admin/kpanda/scale/create-hpa.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165\u96c6\u7fa4\u5217\u8868\u9875\u9762\u3002\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d \u8fdb\u5165\u5de5\u4f5c\u8d1f\u8f7d\u5217\u8868\u540e\uff0c\u70b9\u51fb\u4e00\u4e2a\u8d1f\u8f7d\u540d\u79f0\uff0c\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \u9875\u9762\u3002

              3. \u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u5f39\u6027\u4f38\u7f29\u914d\u7f6e\u60c5\u51b5\u3002

              4. \u786e\u8ba4\u96c6\u7fa4\u5df2\u5b89\u88c5\u4e86 metrics-server \u63d2\u4ef6\uff0c\u4e14\u63d2\u4ef6\u8fd0\u884c\u72b6\u6001\u4e3a\u6b63\u5e38\u540e\uff0c\u5373\u53ef\u70b9\u51fb \u65b0\u5efa\u4f38\u7f29 \u6309\u94ae\u3002

              5. \u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u53c2\u6570\u3002

                • \u7b56\u7565\u540d\u79f0\uff1a\u8f93\u5165\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 hpa-my-dep\u3002
                • \u547d\u540d\u7a7a\u95f4\uff1a\u8d1f\u8f7d\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002
                • \u5de5\u4f5c\u8d1f\u8f7d\uff1a\u6267\u884c\u5f39\u6027\u4f38\u7f29\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5bf9\u8c61\u3002
                • \u76ee\u6807 CPU \u5229\u7528\u7387\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u4e0b Pod \u7684 CPU \u4f7f\u7528\u7387\u3002\u8ba1\u7b97\u65b9\u5f0f\u4e3a\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u7684 Pod \u8d44\u6e90 / \u5de5\u4f5c\u8d1f\u8f7d\u7684\u8bf7\u6c42\uff08request\uff09\u503c\u3002\u5f53\u5b9e\u9645 CPU \u7528\u91cf\u5927\u4e8e/\u5c0f\u4e8e\u76ee\u6807\u503c\u65f6\uff0c\u7cfb\u7edf\u81ea\u52a8\u51cf\u5c11/\u589e\u52a0 Pod \u526f\u672c\u6570\u91cf\u3002
                • \u76ee\u6807\u5185\u5b58\u7528\u91cf\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u4e0b\u7684 Pod \u7684\u5185\u5b58\u7528\u91cf\u3002\u5f53\u5b9e\u9645\u5185\u5b58\u7528\u91cf\u5927\u4e8e/\u5c0f\u4e8e\u76ee\u6807\u503c\u65f6\uff0c\u7cfb\u7edf\u81ea\u52a8\u51cf\u5c11/\u589e\u52a0 Pod \u526f\u672c\u6570\u91cf\u3002
                • \u526f\u672c\u8303\u56f4\uff1aPod \u526f\u672c\u6570\u7684\u5f39\u6027\u4f38\u7f29\u8303\u56f4\u3002\u9ed8\u8ba4\u533a\u95f4\u4e3a\u4e3a 1 - 10\u3002
              6. \u5b8c\u6210\u53c2\u6570\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u5f39\u6027\u4f38\u7f29\u8be6\u60c5\u9875\u9762\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u7f16\u8f91\u3001\u5220\u9664\u64cd\u4f5c\uff0c\u8fd8\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u4e8b\u4ef6\u3002

              "},{"location":"admin/kpanda/scale/create-vpa.html","title":"\u521b\u5efa VPA","text":"

              \u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7b56\u7565\uff08Vertical Pod Autoscaler, VPA\uff09\u901a\u8fc7\u76d1\u63a7 Pod \u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u8d44\u6e90\u7533\u8bf7\u548c\u7528\u91cf\uff0c \u8ba1\u7b97\u51fa\u5bf9\u8be5 Pod \u800c\u8a00\u6700\u9002\u5408\u7684 CPU \u548c\u5185\u5b58\u8bf7\u6c42\u503c\u3002\u4f7f\u7528 VPA \u53ef\u4ee5\u66f4\u52a0\u5408\u7406\u5730\u4e3a\u96c6\u7fa4\u4e0b\u6bcf\u4e2a Pod \u5206\u914d\u8d44\u6e90\uff0c\u63d0\u9ad8\u96c6\u7fa4\u7684\u6574\u4f53\u8d44\u6e90\u5229\u7528\u7387\uff0c\u907f\u514d\u96c6\u7fa4\u8d44\u6e90\u6d6a\u8d39\u3002

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u901a\u8fc7\u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7b56\u7565\uff08Vertical Pod Autoscaler, VPA\uff09\uff0c\u57fa\u4e8e\u6b64\u529f\u80fd\u53ef\u4ee5\u6839\u636e\u5bb9\u5668\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u52a8\u6001\u8c03\u6574 Pod \u8bf7\u6c42\u503c\u3002 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u901a\u8fc7\u624b\u52a8\u548c\u81ea\u52a8\u4e24\u79cd\u65b9\u5f0f\u6765\u4fee\u6539\u8d44\u6e90\u8bf7\u6c42\u503c\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u8981\u8fdb\u884c\u914d\u7f6e\u3002

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e Pod \u5782\u76f4\u4f38\u7f29\u3002

              Warning

              \u4f7f\u7528 VPA \u4fee\u6539 Pod \u8d44\u6e90\u8bf7\u6c42\u4f1a\u89e6\u53d1 Pod \u91cd\u542f\u3002\u7531\u4e8e Kubernetes \u672c\u8eab\u7684\u9650\u5236\uff0c Pod \u91cd\u542f\u540e\u53ef\u80fd\u4f1a\u88ab\u8c03\u5ea6\u5230\u5176\u5b83\u8282\u70b9\u4e0a\u3002

              "},{"location":"admin/kpanda/scale/create-vpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3001\u7528\u6237\u3001\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u6216\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5f53\u524d\u96c6\u7fa4\u5df2\u7ecf\u5b89\u88c5 metrics-server \u548c VPA \u63d2\u4ef6\u3002

              "},{"location":"admin/kpanda/scale/create-vpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u3002

              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u4e2d\u627e\u5230\u76ee\u524d\u96c6\u7fa4\uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u627e\u5230\u9700\u8981\u521b\u5efa VPA \u7684\u8d1f\u8f7d\uff0c\u70b9\u51fb\u8be5\u8d1f\u8f7d\u7684\u540d\u79f0\u3002

                3. \u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u5f39\u6027\u4f38\u7f29\u914d\u7f6e\uff0c\u786e\u8ba4\u5df2\u7ecf\u5b89\u88c5\u4e86\u76f8\u5173\u63d2\u4ef6\u5e76\u4e14\u63d2\u4ef6\u662f\u5426\u8fd0\u884c\u6b63\u5e38\u3002

              3. \u70b9\u51fb \u65b0\u5efa\u4f38\u7f29 \u6309\u94ae\uff0c\u5e76\u914d\u7f6e VPA \u5782\u76f4\u4f38\u7f29\u7b56\u7565\u53c2\u6570\u3002

                • \u7b56\u7565\u540d\u79f0\uff1a\u8f93\u5165\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 vpa-my-dep\u3002
                • \u4f38\u7f29\u6a21\u5f0f\uff1a\u6267\u884c\u4fee\u6539 CPU \u548c\u5185\u5b58\u8bf7\u6c42\u503c\u7684\u65b9\u5f0f\uff0c\u76ee\u524d\u5782\u76f4\u4f38\u7f29\u652f\u6301\u624b\u52a8\u548c\u81ea\u52a8\u4e24\u79cd\u4f38\u7f29\u6a21\u5f0f\u3002
                  • \u624b\u52a8\u4f38\u7f29\uff1a\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u8ba1\u7b97\u51fa\u63a8\u8350\u7684\u8d44\u6e90\u914d\u7f6e\u503c\u540e\uff0c\u9700\u7528\u6237\u624b\u52a8\u4fee\u6539\u5e94\u7528\u7684\u8d44\u6e90\u914d\u989d\u3002
                  • \u81ea\u52a8\u4f38\u7f29\uff1a\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u81ea\u52a8\u8ba1\u7b97\u548c\u4fee\u6539\u5e94\u7528\u7684\u8d44\u6e90\u914d\u989d\u3002
                • \u76ee\u6807\u5bb9\u5668\uff1a\u9009\u62e9\u9700\u8981\u8fdb\u884c\u5782\u76f4\u4f38\u7f29\u7684\u5bb9\u5668\u3002
              4. \u5b8c\u6210\u53c2\u6570\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u5f39\u6027\u4f38\u7f29\u8be6\u60c5\u9875\u9762\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u7f16\u8f91\u3001\u5220\u9664\u64cd\u4f5c\u3002

              Note

              \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c--min-replicas \u7684\u503c\u4e3a 2\u3002\u8868\u793a\u5f53\u526f\u672c\u6570\u5927\u4e8e 1 \u65f6\uff0cVPA \u624d\u4f1a\u751f\u6548\uff0c \u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 updater \u7684 --min-replicas \u53c2\u6570\u503c\u6765\u6539\u53d8\u8fd9\u4e00\u9ed8\u8ba4\u884c\u4e3a\u3002

              spec: \n  containers: \n  - name: updater \n  args: \n  - \"--min-replicas=2\"\n
              "},{"location":"admin/kpanda/scale/custom-hpa.html","title":"\u57fa\u4e8e\u81ea\u5b9a\u4e49\u6307\u6807\u521b\u5efa HPA","text":"

              \u5f53\u7cfb\u7edf\u5185\u7f6e\u7684 CPU \u548c\u5185\u5b58\u4e24\u79cd\u6307\u6807\u4e0d\u80fd\u6ee1\u8db3\u60a8\u4e1a\u52a1\u7684\u5b9e\u9645\u9700\u6c42\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e ServiceMonitoring \u6765\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6307\u6807\uff0c \u5e76\u57fa\u4e8e\u81ea\u5b9a\u4e49\u6307\u6807\u5b9e\u73b0\u5f39\u6027\u4f38\u7f29\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u57fa\u4e8e\u81ea\u5b9a\u4e49\u6307\u6807\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\u3002

              Note

              1. HPA \u4ec5\u9002\u7528\u4e8e Deployment \u548c StatefulSet\uff0c\u6bcf\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u53ea\u80fd\u521b\u5efa\u4e00\u4e2a HPA\u3002
              2. \u5982\u679c\u540c\u65f6\u4f7f\u7528\u5185\u7f6e\u6307\u6807\u548c\u591a\u79cd\u81ea\u5b9a\u4e49\u6307\uff0cHPA \u4f1a\u6839\u636e\u591a\u9879\u6307\u6807\u5206\u522b\u8ba1\u7b97\u6240\u9700\u4f38\u7f29\u526f\u672c\u6570\uff0c\u53d6\u8f83\u5927\u503c\uff08\u4f46\u4e0d\u4f1a\u8d85\u8fc7\u8bbe\u7f6e HPA \u7b56\u7565\u65f6\u914d\u7f6e\u7684\u6700\u5927\u526f\u672c\u6570\uff09\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\u3002
              "},{"location":"admin/kpanda/scale/custom-hpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5728\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c \u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762
              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u6216\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa
              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c \u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743
              • \u5df2\u5b89\u88c5 metrics-server \u63d2\u4ef6
              • \u5df2\u5b89\u88c5 insight-agent \u63d2\u4ef6
              • \u5df2\u5b89\u88c5 Prometheus-adapter \u63d2\u4ef6
              "},{"location":"admin/kpanda/scale/custom-hpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165\u96c6\u7fa4\u5217\u8868\u9875\u9762\u3002\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d \u8fdb\u5165\u5de5\u4f5c\u8d1f\u8f7d\u5217\u8868\u540e\uff0c\u70b9\u51fb\u4e00\u4e2a\u8d1f\u8f7d\u540d\u79f0\uff0c\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \u9875\u9762\u3002

              3. \u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u5f39\u6027\u4f38\u7f29\u914d\u7f6e\u60c5\u51b5\u3002

              4. \u786e\u8ba4\u96c6\u7fa4\u5df2\u5b89\u88c5\u4e86 metrics-server \u3001Insight\u3001Prometheus-adapter \u63d2\u4ef6\u4e14\u63d2\u4ef6\u8fd0\u884c\u72b6\u6001\u4e3a\u6b63\u5e38\u540e\uff0c\u5373\u53ef\u70b9\u51fb \u65b0\u5efa\u4f38\u7f29 \u6309\u94ae\u3002

                Note

                \u5982\u679c\u76f8\u5173\u63d2\u4ef6\u672a\u5b89\u88c5\u6216\u63d2\u4ef6\u5904\u4e8e\u5f02\u5e38\u72b6\u6001\uff0c\u60a8\u5728\u9875\u9762\u4e0a\u5c06\u65e0\u6cd5\u770b\u89c1\u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u5165\u53e3\u3002

              5. \u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u53c2\u6570\u3002

                • \u7b56\u7565\u540d\u79f0\uff1a\u8f93\u5165\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 hpa-my-dep\u3002
                • \u547d\u540d\u7a7a\u95f4\uff1a\u8d1f\u8f7d\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002
                • \u5de5\u4f5c\u8d1f\u8f7d\uff1a\u6267\u884c\u5f39\u6027\u4f38\u7f29\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5bf9\u8c61\u3002
                • \u8d44\u6e90\u7c7b\u578b\uff1a\u8fdb\u884c\u76d1\u63a7\u7684\u81ea\u5b9a\u4e49\u6307\u6807\u7c7b\u578b\uff0c\u5305\u542b Pod \u548c Service \u4e24\u79cd\u7c7b\u578b\u3002
                • \u6307\u6807\uff1a\u4f7f\u7528 ServiceMonitoring \u521b\u5efa\u7684\u81ea\u5b9a\u4e49\u6307\u6807\u540d\u79f0\u6216\u7cfb\u7edf\u5185\u7f6e\u7684\u81ea\u5b9a\u4e49\u6307\u6807\u540d\u79f0\u3002
                • \u6570\u636e\u7c7b\u578b\uff1a\u7528\u4e8e\u8ba1\u7b97\u6307\u6807\u503c\u7684\u65b9\u6cd5\uff0c\u5305\u542b\u76ee\u6807\u503c\u548c\u76ee\u6807\u5e73\u5747\u503c\u4e24\u79cd\u7c7b\u578b\uff0c\u5f53\u8d44\u6e90\u7c7b\u578b\u4e3a Pod \u65f6\uff0c\u53ea\u652f\u6301\u4f7f\u7528\u76ee\u6807\u5e73\u5747\u503c\u3002
              "},{"location":"admin/kpanda/scale/custom-hpa.html#_3","title":"\u64cd\u4f5c\u793a\u4f8b","text":"

              \u672c\u6848\u4f8b\u4ee5 Golang \u4e1a\u52a1\u7a0b\u5e8f\u4e3a\u4f8b\uff0c\u8be5\u793a\u4f8b\u7a0b\u5e8f\u66b4\u9732\u4e86 httpserver_requests_total \u6307\u6807\uff0c\u5e76\u8bb0\u5f55 HTTP \u7684\u8bf7\u6c42\uff0c\u901a\u8fc7\u8be5\u6307\u6807\u53ef\u4ee5\u8ba1\u7b97\u51fa\u4e1a\u52a1\u7a0b\u5e8f\u7684 QPS \u503c\u3002

              "},{"location":"admin/kpanda/scale/custom-hpa.html#_4","title":"\u90e8\u7f72\u4e1a\u52a1\u7a0b\u5e8f","text":"

              \u4f7f\u7528 Deployment \u90e8\u7f72\u4e1a\u52a1\u7a0b\u5e8f\uff1a

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: httpserver\n  namespace: httpserver\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: httpserver\n  template:\n    metadata:\n      labels:\n        app: httpserver\n    spec:\n      containers:\n      - name: httpserver\n        image: registry.imroc.cc/test/httpserver:custom-metrics\n        imagePullPolicy: Always\n---\n\napiVersion: v1\nkind: Service\nmetadata:\n  name: httpserver\n  namespace: httpserver\n  labels:\n    app: httpserver\n  annotations:\n    prometheus.io/scrape: \"true\"\n    prometheus.io/path: \"/metrics\"\n    prometheus.io/port: \"http\"\nspec:\n  type: ClusterIP\n  ports:\n  - port: 80\n    protocol: TCP\n    name: http\n  selector:\n    app: httpserver\n
              "},{"location":"admin/kpanda/scale/custom-hpa.html#prometheus","title":"Prometheus \u91c7\u96c6\u4e1a\u52a1\u76d1\u63a7","text":"

              \u82e5\u5df2\u5b89\u88c5 insight-agent\uff0c\u53ef\u4ee5\u901a\u8fc7\u521b\u5efa ServiceMonitor \u7684 CRD \u5bf9\u8c61\u914d\u7f6e Prometheus\u3002

              \u64cd\u4f5c\u6b65\u9aa4\uff1a\u5728 \u96c6\u7fa4\u8be6\u60c5 -> \u81ea\u5b9a\u4e49\u8d44\u6e90 \u641c\u7d22\u201cservicemonitors.monitoring.coreos.com\"\uff0c\u70b9\u51fb\u540d\u79f0\u8fdb\u5165\u8be6\u60c5\u3002 \u901a\u8fc7\u521b\u5efa YAML\uff0c\u5728\u547d\u540d\u7a7a\u95f4 httpserver \u4e0b\u521b\u5efa\u5982\u4e0b\u793a\u4f8b\u7684 CRD\uff1a

              apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: httpserver\n  namespace: httpserver\n  labels:\n    operator.insight.io/managed-by: insight\nspec:\n  endpoints:\n  - port: http\n    interval: 5s\n  namespaceSelector:\n    matchNames:\n    - httpserver\n  selector:\n    matchLabels:\n      app: httpserver\n

              Note

              \u82e5\u901a\u8fc7 insight \u5b89\u88c5 Prometheus\uff0c\u5219 serviceMonitor \u4e0a\u5fc5\u987b\u6253\u4e0a operator.insight.io/managed-by: insight \u8fd9\u4e2a label\uff0c\u901a\u8fc7\u5176\u4ed6\u65b9\u5f0f\u5b89\u88c5\u5219\u65e0\u9700\u6b64 label\u3002

              "},{"location":"admin/kpanda/scale/custom-hpa.html#prometheus-adapter","title":"\u5728 prometheus-adapter \u4e2d\u914d\u7f6e\u6307\u6807\u89c4\u5219","text":"

              \u64cd\u4f5c\u6b65\u9aa4\uff1a\u5728 \u96c6\u7fa4\u8be6\u60c5 -> Helm \u5e94\u7528 \u641c\u7d22 \u201cprometheus-adapter\"\uff0c\u901a\u8fc7\u64cd\u4f5c\u680f\u8fdb\u5165\u66f4\u65b0\u9875\u9762\uff0c\u5728 YAML \u4e2d\u914d\u7f6e\u81ea\u5b9a\u4e49\u6307\u6807\uff0c\u793a\u4f8b\u5982\u4e0b\uff1a

              rules:\n  custom:\n    - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)\n      name:\n        as: httpserver_requests_qps\n        matches: httpserver_requests_total\n      resources:\n        template: <<.Resource>>\n      seriesQuery: httpserver_requests_total\n

              "},{"location":"admin/kpanda/scale/custom-hpa.html#_5","title":"\u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u53c2\u6570","text":"

              \u6309\u7167\u4e0a\u8ff0\u6b65\u9aa4\u5728 Deployment \u4e2d\u627e\u5230\u5e94\u7528\u7a0b\u5e8f httpserver \u5e76\u901a\u8fc7\u81ea\u5b9a\u4e49\u6307\u6807\u521b\u5efa\u5f39\u6027\u4f38\u7f29\u3002

              "},{"location":"admin/kpanda/scale/hpa-cronhpa-compatibility-rules.html","title":"HPA \u548c CronHPA \u517c\u5bb9\u89c4\u5219","text":"

              HPA \u5168\u79f0\u4e3a HorizontalPodAutoscaler\uff0c\u5373 Pod \u6c34\u5e73\u81ea\u52a8\u4f38\u7f29\u3002

              CronHPA \u5168\u79f0\u4e3a Cron HorizontalPodAutoscaler\uff0c\u5373 Pod \u5b9a\u65f6\u7684\u6c34\u5e73\u81ea\u52a8\u4f38\u7f29\u3002

              "},{"location":"admin/kpanda/scale/hpa-cronhpa-compatibility-rules.html#cronhpa-hpa","title":"CronHPA \u548c HPA \u517c\u5bb9\u51b2\u7a81","text":"

              \u5b9a\u65f6\u4f38\u7f29 CronHPA \u901a\u8fc7\u8bbe\u7f6e\u5b9a\u65f6\u7684\u65b9\u5f0f\u89e6\u53d1\u5bb9\u5668\u7684\u6c34\u5e73\u526f\u672c\u4f38\u7f29\u3002\u4e3a\u4e86\u9632\u6b62\u7a81\u53d1\u7684\u6d41\u91cf\u51b2\u51fb\u7b49\u72b6\u51b5\uff0c \u60a8\u53ef\u80fd\u5df2\u7ecf\u914d\u7f6e HPA \u4fdd\u969c\u5e94\u7528\u7684\u6b63\u5e38\u8fd0\u884c\u3002\u5982\u679c\u540c\u65f6\u68c0\u6d4b\u5230\u4e86 HPA \u548c CronHPA \u7684\u5b58\u5728\uff0c \u7531\u4e8e CronHPA \u548c HPA \u76f8\u4e92\u72ec\u7acb\u65e0\u6cd5\u611f\u77e5\uff0c\u5c31\u4f1a\u51fa\u73b0\u4e24\u4e2a\u63a7\u5236\u5668\u5404\u81ea\u5de5\u4f5c\uff0c\u540e\u6267\u884c\u7684\u64cd\u4f5c\u4f1a\u8986\u76d6\u5148\u6267\u884c\u7684\u64cd\u4f5c\u3002

              \u5bf9\u6bd4 CronHPA \u548c HPA \u7684\u5b9a\u4e49\u6a21\u677f\uff0c\u53ef\u4ee5\u89c2\u5bdf\u5230\u4ee5\u4e0b\u51e0\u70b9\uff1a

              • CronHPA \u548c HPA \u90fd\u662f\u901a\u8fc7 scaleTargetRef \u5b57\u6bb5\u6765\u83b7\u53d6\u4f38\u7f29\u5bf9\u8c61\u3002
              • CronHPA \u901a\u8fc7 jobs \u7684 crontab \u89c4\u5219\u5b9a\u65f6\u4f38\u7f29\u526f\u672c\u6570\u3002
              • HPA \u901a\u8fc7\u8d44\u6e90\u5229\u7528\u7387\u5224\u65ad\u4f38\u7f29\u60c5\u51b5\u3002

              Note

              \u5982\u679c\u540c\u65f6\u8bbe\u7f6e CronHPA \u548c HPA\uff0c\u4f1a\u51fa\u73b0 CronHPA \u548c HPA \u540c\u65f6\u64cd\u4f5c\u4e00\u4e2a scaleTargetRef \u7684\u573a\u666f\u3002

              "},{"location":"admin/kpanda/scale/hpa-cronhpa-compatibility-rules.html#cronhpa-hpa_1","title":"CronHPA \u548c HPA \u517c\u5bb9\u65b9\u6848","text":"

              \u4ece\u4e0a\u6587\u53ef\u77e5\uff0cCronHPA \u548c HPA \u540c\u65f6\u4f7f\u7528\u4f1a\u5bfc\u81f4\u540e\u6267\u884c\u7684\u64cd\u4f5c\u8986\u76d6\u5148\u6267\u884c\u64cd\u4f5c\u7684\u672c\u8d28\u539f\u56e0\u662f\u4e24\u4e2a\u63a7\u5236\u5668\u65e0\u6cd5\u76f8\u4e92\u611f\u77e5\uff0c \u90a3\u4e48\u53ea\u9700\u8981\u8ba9 CronHPA \u611f\u77e5 HPA \u7684\u5f53\u524d\u72b6\u6001\u5c31\u80fd\u89e3\u51b3\u51b2\u7a81\u95ee\u9898\u3002

              \u7cfb\u7edf\u4f1a\u5c06 HPA \u4f5c\u4e3a\u5b9a\u65f6\u4f38\u7f29 CronHPA \u7684\u6269\u7f29\u5bb9\u5bf9\u8c61\uff0c\u4ece\u800c\u5b9e\u73b0\u5bf9\u8be5 HPA \u5b9a\u4e49\u7684 Deployment \u5bf9\u8c61\u7684\u5b9a\u65f6\u6269\u7f29\u5bb9\u3002

              HPA \u7684\u5b9a\u4e49\u5c06 Deployment \u914d\u7f6e\u5728 scaleTargetRef \u5b57\u6bb5\u4e0b\uff0c\u7136\u540e Deployment \u901a\u8fc7\u81ea\u8eab\u5b9a\u4e49\u67e5\u627e ReplicaSet\uff0c\u6700\u540e\u901a\u8fc7 ReplicaSet \u8c03\u6574\u771f\u5b9e\u7684\u526f\u672c\u6570\u76ee\u3002

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5c06 CronHPA \u4e2d\u7684 scaleTargetRef \u8bbe\u7f6e\u4e3a HPA \u5bf9\u8c61\uff0c\u7136\u540e\u901a\u8fc7 HPA \u5bf9\u8c61\u6765\u5bfb\u627e\u771f\u5b9e\u7684 scaleTargetRef\uff0c\u4ece\u800c\u8ba9 CronHPA \u611f\u77e5 HPA \u7684\u5f53\u524d\u72b6\u6001\u3002

              CronHPA \u4f1a\u901a\u8fc7\u8c03\u6574 HPA \u7684\u65b9\u5f0f\u611f\u77e5 HPA\u3002CronHPA \u901a\u8fc7\u8bc6\u522b\u8981\u8fbe\u5230\u7684\u526f\u672c\u6570\u4e0e\u5f53\u524d\u526f\u672c\u6570\u4e24\u8005\u95f4\u7684\u8f83\u5927\u503c\uff0c \u5224\u65ad\u662f\u5426\u9700\u8981\u6269\u7f29\u5bb9\u53ca\u4fee\u6539 HPA \u7684\u4e0a\u9650\uff1bCronHPA \u901a\u8fc7\u8bc6\u522b CronHPA \u8981\u8fbe\u5230\u7684\u526f\u672c\u6570\u4e0e HPA \u7684\u914d\u7f6e\u95f4\u7684\u8f83\u5c0f\u503c\uff0c\u5224\u65ad\u662f\u5426\u9700\u8981\u4fee\u6539 HPA \u7684\u4e0b\u9650\u3002

              "},{"location":"admin/kpanda/scale/install-cronhpa.html","title":"\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6","text":"

              \u5bb9\u5668\u526f\u672c\u5b9a\u65f6\u6c34\u5e73\u6269\u7f29\u5bb9\u7b56\u7565\uff08CronHPA\uff09\u80fd\u591f\u4e3a\u5468\u671f\u6027\u9ad8\u5e76\u53d1\u5e94\u7528\u63d0\u4f9b\u7a33\u5b9a\u7684\u8ba1\u7b97\u8d44\u6e90\u4fdd\u969c\uff0c kubernetes-cronhpa-controller \u5219\u662f\u5b9e\u73b0 CronHPA \u7684\u5173\u952e\u7ec4\u4ef6\u3002

              \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\u3002

              Note

              \u4e3a\u4e86\u4f7f\u7528 CornHPA\uff0c\u4e0d\u4ec5\u9700\u8981\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\uff0c\u8fd8\u8981\u5b89\u88c5 metrics-server \u63d2\u4ef6\u3002

              "},{"location":"admin/kpanda/scale/install-cronhpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              "},{"location":"admin/kpanda/scale/install-cronhpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\u3002

              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u627e\u5230\u9700\u8981\u5b89\u88c5\u6b64\u63d2\u4ef6\u7684\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u8be5\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d \uff0c\u70b9\u51fb\u76ee\u6807\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u3002

              2. \u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u5728 CronHPA \u53f3\u4fa7\u70b9\u51fb \u5b89\u88c5 \u3002

              3. \u9605\u8bfb\u8be5\u63d2\u4ef6\u7684\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u63a8\u8350\u5b89\u88c5 1.3.0 \u6216\u66f4\u9ad8\u7248\u672c\u3002

              4. \u53c2\u8003\u4ee5\u4e0b\u8bf4\u660e\u914d\u7f6e\u53c2\u6570\u3002

                • \u540d\u79f0\uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 kubernetes-cronhpa-controller\u3002
                • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u63d2\u4ef6\u5b89\u88c5\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u6b64\u5904\u4ee5 default \u4e3a\u4f8b\u3002
                • \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 1.3.0 \u7248\u672c\u4e3a\u4f8b\u3002
                • \u5c31\u7eea\u7b49\u5f85\uff1a\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u7684\u6240\u6709\u5173\u8054\u8d44\u6e90\u90fd\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
                • \u5931\u8d25\u5220\u9664\uff1a\u5982\u679c\u63d2\u4ef6\u5b89\u88c5\u5931\u8d25\uff0c\u5219\u5220\u9664\u5df2\u7ecf\u5b89\u88c5\u7684\u5173\u8054\u8d44\u6e90\u3002\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u3002
                • \u8be6\u60c5\u65e5\u5fd7\uff1a\u5f00\u542f\u540e\uff0c\u5c06\u8bb0\u5f55\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

                Note

                \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a\u201c\u8fd0\u884c\u4e2d\u201d\u72b6\u6001\u3002

              5. \u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \uff0c\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u3002\u7a0d\u7b49\u51e0\u5206\u949f\u540e\u5237\u65b0\u9875\u9762\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

                Warning

                \u5982\u9700\u5220\u9664 kubernetes-cronhpa-controller \u63d2\u4ef6\uff0c\u5e94\u5728 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u624d\u80fd\u5c06\u5176\u5f7b\u5e95\u5220\u9664\u3002

                \u5982\u679c\u5728\u5de5\u4f5c\u8d1f\u8f7d\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\u4e0b\u5220\u9664\u63d2\u4ef6\uff0c\u8fd9\u53ea\u662f\u5220\u9664\u4e86\u8be5\u63d2\u4ef6\u7684\u5de5\u4f5c\u8d1f\u8f7d\u526f\u672c\uff0c\u63d2\u4ef6\u672c\u8eab\u4ecd\u672a\u5220\u9664\uff0c\u540e\u7eed\u91cd\u65b0\u5b89\u88c5\u8be5\u63d2\u4ef6\u65f6\u4e5f\u4f1a\u63d0\u793a\u9519\u8bef\u3002

              6. \u56de\u5230\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\u4e0b\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u53ef\u4ee5\u770b\u5230\u754c\u9762\u663e\u793a \u63d2\u4ef6\u5df2\u5b89\u88c5 \u3002\u73b0\u5728\u53ef\u4ee5\u5f00\u59cb\u521b\u5efa CronHPA \u7b56\u7565\u4e86\u3002

              "},{"location":"admin/kpanda/scale/install-metrics-server.html","title":"\u5b89\u88c5 metrics-server \u63d2\u4ef6","text":"

              metrics-server \u662f Kubernetes \u5185\u7f6e\u7684\u8d44\u6e90\u4f7f\u7528\u6307\u6807\u91c7\u96c6\u7ec4\u4ef6\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u5f39\u6027\u4f38\u7f29\uff08HPA\uff09\u7b56\u7565\u6765\u5b9e\u73b0\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u81ea\u52a8\u6c34\u5e73\u4f38\u7f29 Pod \u526f\u672c\u3002

              \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5 metrics-server \u3002

              "},{"location":"admin/kpanda/scale/install-metrics-server.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5b89\u88c5 metrics-server \u63d2\u4ef6\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              "},{"location":"admin/kpanda/scale/install-metrics-server.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u8bf7\u6267\u884c\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 metrics-server \u63d2\u4ef6\u3002

              1. \u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u4e0b\u7684\u5f39\u6027\u4f38\u7f29\u9875\u9762\uff0c\u70b9\u51fb \u53bb\u5b89\u88c5 \uff0c\u8fdb\u5165 metrics-server \u63d2\u4ef6\u5b89\u88c5\u754c\u9762\u3002

              2. \u9605\u8bfb metrics-server \u63d2\u4ef6\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u672c\u6587\u5c06\u4ee5 3.8.2 \u7248\u672c\u4e3a\u4f8b\u8fdb\u884c\u5b89\u88c5\uff0c\u63a8\u8350\u60a8\u5b89\u88c5 3.8.2 \u53ca\u66f4\u9ad8\u7248\u672c\u3002

              3. \u5728\u5b89\u88c5\u914d\u7f6e\u754c\u9762\u914d\u7f6e\u57fa\u672c\u53c2\u6570\u3002

                • \u540d\u79f0\uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 metrics-server-01\u3002
                • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u63d2\u4ef6\u5b89\u88c5\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6b64\u5904\u4ee5 default \u4e3a\u4f8b\u3002
                • \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 3.8.2 \u7248\u672c\u4e3a\u4f8b\u3002
                • \u5c31\u7eea\u7b49\u5f85\uff1a\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u6240\u6709\u5173\u8054\u8d44\u6e90\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
                • \u5931\u8d25\u5220\u9664\uff1a\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f\u5c31\u7eea\u7b49\u5f85\u3002\u5982\u679c\u5b89\u88c5\u5931\u8d25\uff0c\u5c06\u5220\u9664\u5b89\u88c5\u76f8\u5173\u8d44\u6e90\u3002
                • \u8be6\u60c5\u65e5\u5fd7\uff1a\u5f00\u542f\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\u7684\u8be6\u7ec6\u8f93\u51fa\u3002

                Note

                \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u7ecf\u8fc7\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

              4. \u9ad8\u7ea7\u53c2\u6570\u914d\u7f6e

                • \u5982\u679c\u96c6\u7fa4\u7f51\u7edc\u65e0\u6cd5\u8bbf\u95ee k8s.gcr.io \u4ed3\u5e93\uff0c\u8bf7\u5c1d\u8bd5\u4fee\u6539 repositort \u53c2\u6570\u4e3a repository: k8s.m.daocloud.io/metrics-server/metrics-server

                • \u5b89\u88c5 metrics-server \u63d2\u4ef6\u8fd8\u9700\u63d0\u4f9b SSL \u8bc1\u4e66\u3002\u5982\u9700\u7ed5\u8fc7\u8bc1\u4e66\u6821\u9a8c\uff0c\u9700\u8981\u5728 defaultArgs: \u5904\u6dfb\u52a0 - --kubelet-insecure-tls \u53c2\u6570\u3002

                \u70b9\u51fb\u67e5\u770b\u63a8\u8350\u7684 YAML \u53c2\u6570
                image:\n  repository: k8s.m.daocloud.io/metrics-server/metrics-server # \u5c06\u4ed3\u5e93\u6e90\u5730\u5740\u4fee\u6539\u4e3a k8s.m.daocloud.io\n  tag: ''\n  pullPolicy: IfNotPresent\nimagePullSecrets: []\nnameOverride: ''\nfullnameOverride: ''\nserviceAccount:\n  create: true\n  annotations: {}\n  name: ''\nrbac:\n  create: true\n  pspEnabled: false\napiService:\n  create: true\npodLabels: {}\npodAnnotations: {}\npodSecurityContext: {}\nsecurityContext:\n  allowPrivilegeEscalation: false\n  readOnlyRootFilesystem: true\n  runAsNonRoot: true\n  runAsUser: 1000\npriorityClassName: system-cluster-critical\ncontainerPort: 4443\nhostNetwork:\n  enabled: false\nreplicas: 1\nupdateStrategy: {}\npodDisruptionBudget:\n  enabled: false\n  minAvailable: null\n  maxUnavailable: null\ndefaultArgs:\n  - '--cert-dir=/tmp'\n  - '--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname'\n  - '--kubelet-use-node-status-port'\n  - '--metric-resolution=15s'\n  - --kubelet-insecure-tls # \u7ed5\u8fc7\u8bc1\u4e66\u6821\u9a8c\nargs: []\nlivenessProbe:\n  httpGet:\n    path: /livez\n    port: https\n    scheme: HTTPS\n  initialDelaySeconds: 0\n  periodSeconds: 10\n  failureThreshold: 3\nreadinessProbe:\n  httpGet:\n    path: /readyz\n    port: https\n    scheme: HTTPS\n  initialDelaySeconds: 20\n  periodSeconds: 10\n  failureThreshold: 3\nservice:\n  type: ClusterIP\n  port: 443\n  annotations: {}\n  labels: {}\nmetrics:\n  enabled: false\nserviceMonitor:\n  enabled: false\n  additionalLabels: {}\n  interval: 1m\n  scrapeTimeout: 10s\nresources: {}\nextraVolumeMounts: []\nextraVolumes: []\nnodeSelector: {}\ntolerations: []\naffinity: {}\n
              5. \u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u5b8c\u6210 metrics-server \u63d2\u4ef6\u7684\u5b89\u88c5\uff0c\u4e4b\u540e\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\uff0c \u7a0d\u7b49\u51e0\u5206\u949f\u540e\uff0c\u4e3a\u9875\u9762\u6267\u884c\u5237\u65b0\u64cd\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

              Note

              \u5220\u9664 metrics-server \u63d2\u4ef6\u65f6\uff0c\u5728 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u624d\u80fd\u5f7b\u5e95\u5220\u9664\u8be5\u63d2\u4ef6\u3002\u5982\u679c\u4ec5\u5728\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u5220\u9664 metrics-server \uff0c \u8fd9\u53ea\u662f\u5220\u9664\u4e86\u8be5\u5e94\u7528\u7684\u5de5\u4f5c\u8d1f\u8f7d\u526f\u672c\uff0c\u5e94\u7528\u672c\u8eab\u4ecd\u672a\u5220\u9664\uff0c\u540e\u7eed\u91cd\u65b0\u5b89\u88c5\u8be5\u63d2\u4ef6\u65f6\u4e5f\u4f1a\u63d0\u793a\u9519\u8bef\u3002

              "},{"location":"admin/kpanda/scale/install-vpa.html","title":"\u5b89\u88c5 vpa \u63d2\u4ef6","text":"

              \u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7b56\u7565\uff08Vertical Pod Autoscaler, VPA\uff09\u80fd\u591f\u8ba9\u96c6\u7fa4\u7684\u8d44\u6e90\u914d\u7f6e\u66f4\u52a0\u5408\u7406\uff0c\u907f\u514d\u96c6\u7fa4\u8d44\u6e90\u6d6a\u8d39\u3002 vpa \u5219\u662f\u5b9e\u73b0\u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7684\u5173\u952e\u7ec4\u4ef6\u3002

              \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5 vpa \u63d2\u4ef6\u3002

              \u4e3a\u4e86\u4f7f\u7528 VPA \u7b56\u7565\uff0c\u4e0d\u4ec5\u9700\u8981\u5b89\u88c5 __vpa__ \u63d2\u4ef6\uff0c\u8fd8\u8981[\u5b89\u88c5 __metrics-server__ \u63d2\u4ef6](install-metrics-server.md)\u3002\n
              "},{"location":"admin/kpanda/scale/install-vpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5b89\u88c5 vpa \u63d2\u4ef6\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              "},{"location":"admin/kpanda/scale/install-vpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 vpa \u63d2\u4ef6\u3002

              1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u627e\u5230\u9700\u8981\u5b89\u88c5\u6b64\u63d2\u4ef6\u7684\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u8be5\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d \uff0c\u70b9\u51fb\u76ee\u6807\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u3002

              2. \u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u5728 VPA \u53f3\u4fa7\u70b9\u51fb \u5b89\u88c5 \u3002

                3. \u9605\u8bfb\u8be5\u63d2\u4ef6\u7684\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u63a8\u8350\u5b89\u88c5 1.5.0 \u6216\u66f4\u9ad8\u7248\u672c\u3002

                4. \u67e5\u770b\u4ee5\u4e0b\u8bf4\u660e\u914d\u7f6e\u53c2\u6570\u3002

                - \u540d\u79f0\uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 kubernetes-cronhpa-controller\u3002 - \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u63d2\u4ef6\u5b89\u88c5\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u6b64\u5904\u4ee5 default \u4e3a\u4f8b\u3002 - \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 4.5.0 \u7248\u672c\u4e3a\u4f8b\u3002 - \u5c31\u7eea\u7b49\u5f85\uff1a\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u7684\u6240\u6709\u5173\u8054\u8d44\u6e90\u90fd\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002 - \u5931\u8d25\u5220\u9664\uff1a\u5982\u679c\u63d2\u4ef6\u5b89\u88c5\u5931\u8d25\uff0c\u5219\u5220\u9664\u5df2\u7ecf\u5b89\u88c5\u7684\u5173\u8054\u8d44\u6e90\u3002\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u3002 - \u8be6\u60c5\u65e5\u5fd7\uff1a\u5f00\u542f\u540e\uff0c\u5c06\u8bb0\u5f55\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

                Note

                \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u7ecf\u8fc7\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a\u201c\u8fd0\u884c\u4e2d\u201d\u72b6\u6001\u3002

              3. \u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \uff0c\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u3002\u7a0d\u7b49\u51e0\u5206\u949f\u540e\u5237\u65b0\u9875\u9762\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

                Warning

                \u5982\u9700\u5220\u9664 vpa \u63d2\u4ef6\uff0c\u5e94\u5728 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u624d\u80fd\u5c06\u5176\u5f7b\u5e95\u5220\u9664\u3002

                \u5982\u679c\u5728\u5de5\u4f5c\u8d1f\u8f7d\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\u4e0b\u5220\u9664\u63d2\u4ef6\uff0c\u8fd9\u53ea\u662f\u5220\u9664\u4e86\u8be5\u63d2\u4ef6\u7684\u5de5\u4f5c\u8d1f\u8f7d\u526f\u672c\uff0c\u63d2\u4ef6\u672c\u8eab\u4ecd\u672a\u5220\u9664\uff0c\u540e\u7eed\u91cd\u65b0\u5b89\u88c5\u8be5\u63d2\u4ef6\u65f6\u4e5f\u4f1a\u63d0\u793a\u9519\u8bef\u3002

              4. \u56de\u5230\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\u4e0b\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u53ef\u4ee5\u770b\u5230\u754c\u9762\u663e\u793a \u63d2\u4ef6\u5df2\u5b89\u88c5 \u3002\u73b0\u5728\u53ef\u4ee5\u5f00\u59cb\u521b\u5efa VPA \u7b56\u7565\u4e86\u3002

              "},{"location":"admin/kpanda/scale/knative/install.html","title":"\u5b89\u88c5","text":"

              Knative \u662f\u4e00\u4e2a\u9762\u5411\u65e0\u670d\u52a1\u5668\u90e8\u7f72\u7684\u8de8\u5e73\u53f0\u89e3\u51b3\u65b9\u6848\u3002

              1. \u767b\u5f55\u96c6\u7fa4\uff0c\u70b9\u51fb\u4fa7\u8fb9\u680f Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u5728\u53f3\u4fa7\u4e0a\u65b9\u641c\u7d22\u6846\u8f93\u5165 knative \uff0c\u7136\u540e\u6309\u56de\u8f66\u952e\u641c\u7d22\u3002

              2. \u70b9\u51fb\u641c\u7d22\u51fa\u7684 knative-operator \uff0c\u8fdb\u5165\u5b89\u88c5\u914d\u7f6e\u754c\u9762\u3002\u4f60\u53ef\u4ee5\u5728\u8be5\u754c\u9762\u67e5\u770b\u53ef\u7528\u7248\u672c\u4ee5\u53ca Helm values \u7684 Parameters \u53ef\u9009\u9879\u3002

              3. \u70b9\u51fb\u5b89\u88c5\u6309\u94ae\u540e\uff0c\u8fdb\u5165\u5b89\u88c5\u914d\u7f6e\u754c\u9762\u3002

              4. \u8f93\u5165\u540d\u79f0\uff0c\u5b89\u88c5\u79df\u6237\uff0c\u5efa\u8bae\u52fe\u9009 \u5c31\u7eea\u7b49\u5f85 \u548c \u8be6\u7ec6\u65e5\u5fd7 \u3002

              5. \u5728\u4e0b\u65b9\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u52fe\u9009 Serving \uff0c\u5e76\u8f93\u5165 Knative Serving \u7ec4\u4ef6\u7684\u5b89\u88c5\u79df\u6237\uff0c\u4f1a\u5728\u5b89\u88c5\u540e\u90e8\u7f72 Knative Serving \u7ec4\u4ef6\uff0c\u8be5\u7ec4\u4ef6\u7531 Knative Operator \u7ba1\u7406\u3002

              "},{"location":"admin/kpanda/scale/knative/knative.html","title":"Kantive \u4ecb\u7ecd","text":"

              Knative \u63d0\u4f9b\u4e86\u4e00\u79cd\u66f4\u9ad8\u5c42\u6b21\u7684\u62bd\u8c61\uff0c\u7b80\u5316\u5e76\u52a0\u901f\u4e86\u5728 Kubernetes \u4e0a\u6784\u5efa\u3001\u90e8\u7f72\u548c\u7ba1\u7406\u5e94\u7528\u7684\u8fc7\u7a0b\u3002\u5b83\u4f7f\u5f97\u5f00\u53d1\u4eba\u5458\u80fd\u591f\u66f4\u4e13\u6ce8\u4e8e\u4e1a\u52a1\u903b\u8f91\u7684\u5b9e\u73b0\uff0c\u800c\u5c06\u5927\u90e8\u5206\u57fa\u7840\u8bbe\u65bd\u548c\u8fd0\u7ef4\u5de5\u4f5c\u4ea4\u7ed9 Knative \u53bb\u5904\u7406\uff0c\u4ece\u800c\u663e\u8457\u63d0\u9ad8\u751f\u4ea7\u529b\u3002

              "},{"location":"admin/kpanda/scale/knative/knative.html#_1","title":"\u7ec4\u4ef6","text":"

              knative-operator \u8fd0\u884c\u7ec4\u4ef6\u5982\u4e0b\u3002

              knative-operator   knative-operator-58f7d7db5c-7f6r5      1/1     Running     0     6m55s\nknative-operator   operator-webhook-667dc67bc-qvrv4       1/1     Running     0     6m55s\n

              knative-serving \u7ec4\u4ef6\u5982\u4e0b\u3002

              knative-serving        3scale-kourier-gateway-d69fbfbd-bd8d8   1/1     Running     0                 7m13s\nknative-serving        activator-7c6fddd698-wdlng              1/1     Running     0                 7m3s\nknative-serving        autoscaler-8f4b876bb-kd25p              1/1     Running     0                 7m17s\nknative-serving        autoscaler-hpa-5f7f74679c-vkc7p         1/1     Running     0                 7m15s\nknative-serving        controller-789c896c46-tfvsv             1/1     Running     0                 7m17s\nknative-serving        net-kourier-controller-7db578c889-7gd5l 1/1     Running     0                 7m14s\nknative-serving        webhook-5c88b94c5-78x7m                 1/1     Running     0                 7m1s\nknative-serving        storage-version-migration-serving-serving-1.12.2-t7zvd   0/1  Completed   0   7m15s\n
              \u7ec4\u4ef6 \u4f5c\u7528 Activator \u5bf9\u8bf7\u6c42\u6392\u961f\uff08\u5982\u679c\u4e00\u4e2a Knative Service \u5df2\u7ecf\u7f29\u51cf\u5230\u96f6\uff09\u3002\u8c03\u7528 autoscaler\uff0c\u5c06\u7f29\u51cf\u5230 0 \u7684\u670d\u52a1\u6062\u590d\u5e76\u8f6c\u53d1\u6392\u961f\u7684\u8bf7\u6c42\u3002Activator \u8fd8\u53ef\u4ee5\u5145\u5f53\u8bf7\u6c42\u7f13\u51b2\u5668\uff0c\u5904\u7406\u7a81\u53d1\u6d41\u91cf\u3002 Autoscaler Autoscaler \u8d1f\u8d23\u6839\u636e\u914d\u7f6e\u3001\u6307\u6807\u548c\u8fdb\u5165\u7684\u8bf7\u6c42\u6765\u7f29\u653e Knative \u670d\u52a1\u3002 Controller \u7ba1\u7406 Knative CR \u7684\u72b6\u6001\u3002\u5b83\u4f1a\u76d1\u89c6\u591a\u4e2a\u5bf9\u8c61\uff0c\u7ba1\u7406\u4f9d\u8d56\u8d44\u6e90\u7684\u751f\u547d\u5468\u671f\uff0c\u5e76\u66f4\u65b0\u8d44\u6e90\u72b6\u6001\u3002 Queue-Proxy Sidecar \u5bb9\u5668\uff0c\u6bcf\u4e2a Knative Service \u90fd\u4f1a\u6ce8\u5165\u4e00\u4e2a\u3002\u8d1f\u8d23\u6536\u96c6\u6d41\u91cf\u6570\u636e\u5e76\u62a5\u544a\u7ed9 Autoscaler\uff0cAutoscaler \u6839\u636e\u8fd9\u4e9b\u6570\u636e\u548c\u9884\u8bbe\u7684\u89c4\u5219\u6765\u53d1\u8d77\u6269\u5bb9\u6216\u7f29\u5bb9\u8bf7\u6c42\u3002 Webhooks Knative Serving \u6709\u51e0\u4e2a Webhooks \u8d1f\u8d23\u9a8c\u8bc1\u548c\u53d8\u66f4 Knative \u8d44\u6e90\u3002"},{"location":"admin/kpanda/scale/knative/knative.html#ingress","title":"Ingress \u6d41\u91cf\u5165\u53e3\u65b9\u6848","text":"\u65b9\u6848 \u9002\u7528\u573a\u666f Istio \u5982\u679c\u5df2\u7ecf\u7528\u4e86 Istio\uff0c\u53ef\u4ee5\u9009\u62e9 Istio \u4f5c\u4e3a\u6d41\u91cf\u5165\u53e3\u65b9\u6848\u3002 Contour \u5982\u679c\u96c6\u7fa4\u4e2d\u5df2\u7ecf\u542f\u7528\u4e86 Contour\uff0c\u53ef\u4ee5\u9009\u62e9 Contour \u4f5c\u4e3a\u6d41\u91cf\u5165\u53e3\u65b9\u6848\u3002 Kourier \u5982\u679c\u5728\u6ca1\u6709\u4e0a\u8ff0 2 \u79cd Ingress \u7ec4\u4ef6\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 Knative \u57fa\u4e8e Envoy \u5b9e\u73b0\u7684 Kourier Ingress \u4f5c\u4e3a\u6d41\u91cf\u5165\u53e3\u3002"},{"location":"admin/kpanda/scale/knative/knative.html#autoscaler","title":"Autoscaler \u65b9\u6848\u5bf9\u6bd4","text":"Autoscaler \u7c7b\u578b \u662f\u5426\u4e3a Knative Serving \u6838\u5fc3\u90e8\u5206 \u9ed8\u8ba4\u542f\u7528 Scale to Zero \u652f\u6301 \u57fa\u4e8e CPU \u7684 Autoscaling \u652f\u6301 Knative Pod Autoscaler (KPA) \u662f \u662f \u662f \u5426 Horizontal Pod Autoscaler (HPA) \u5426 \u9700\u5b89\u88c5 Knative Serving \u540e\u542f\u7528 \u5426 \u662f"},{"location":"admin/kpanda/scale/knative/knative.html#crd","title":"CRD","text":"\u8d44\u6e90\u7c7b\u578b API \u540d\u79f0 \u63cf\u8ff0 Services service.serving.knative.dev \u81ea\u52a8\u7ba1\u7406 Workload \u7684\u6574\u4e2a\u751f\u547d\u5468\u671f\uff0c\u63a7\u5236\u5176\u4ed6\u5bf9\u8c61\u7684\u521b\u5efa\uff0c\u786e\u4fdd\u5e94\u7528\u5177\u6709 Routes\u3001Configurations \u4ee5\u53ca\u6bcf\u6b21\u66f4\u65b0\u65f6\u7684\u65b0 revision\u3002 Routes route.serving.knative.dev \u5c06\u7f51\u7edc\u7aef\u70b9\u6620\u5c04\u5230\u4e00\u4e2a\u6216\u591a\u4e2a\u4fee\u8ba2\u7248\u672c\uff0c\u652f\u6301\u6d41\u91cf\u5206\u914d\u548c\u7248\u672c\u8def\u7531\u3002 Configurations configuration.serving.knative.dev \u7ef4\u62a4\u90e8\u7f72\u7684\u671f\u671b\u72b6\u6001\uff0c\u63d0\u4f9b\u4ee3\u7801\u548c\u914d\u7f6e\u4e4b\u95f4\u7684\u5206\u79bb\uff0c\u9075\u5faa Twelve-Factor \u5e94\u7528\u7a0b\u5e8f\u65b9\u6cd5\u8bba\uff0c\u4fee\u6539\u914d\u7f6e\u4f1a\u521b\u5efa\u65b0\u7684 revision\u3002 Revisions revision.serving.knative.dev \u6bcf\u6b21\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u4fee\u6539\u7684\u65f6\u95f4\u70b9\u5feb\u7167\uff0c\u662f\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff0c\u53ef\u6839\u636e\u6d41\u91cf\u81ea\u52a8\u6269\u5bb9\u548c\u7f29\u5bb9\u3002"},{"location":"admin/kpanda/scale/knative/playground.html","title":"Knative \u4f7f\u7528\u5b9e\u8df5","text":"

              \u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u51e0\u4e2a\u5b9e\u8df5\u6765\u6df1\u5165\u4e86\u89e3\u5b66\u4e60 Knative\u3002

              "},{"location":"admin/kpanda/scale/knative/playground.html#case-1-hello-world","title":"case 1 - Hello World","text":"
              apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n

              \u53ef\u4ee5\u4f7f\u7528 kubectl \u5df2\u90e8\u7f72\u7684\u5e94\u7528\u7684\u72b6\u6001\uff0c\u8fd9\u4e2a\u5e94\u7528\u7531 knative \u81ea\u52a8\u914d\u7f6e\u4e86 ingress \u548c\u4f38\u7f29\u5668\u3002

              ~ kubectl get service.serving.knative.dev/hello\nNAME    URL                                              LATESTCREATED   LATESTREADY   READY   REASON\nhello   http://hello.knative-serving.knative.loulan.me   hello-00001     hello-00001   True\n

              \u90e8\u7f72\u51fa\u7684 Pod YAML \u5982\u4e0b\uff0c\u7531 2 \u4e2a Pod \u7ec4\u6210\uff1auser-container \u548c queue-proxy\u3002

              apiVersion: v1\nkind: Pod\nmetadata:\n  name: hello-00003-deployment-5fcb8ccbf-7qjfk\nspec:\n  containers:\n  - name: user-container\n  - name: queue-proxy\n

              \u8bf7\u6c42\u6d41\uff1a

              1. case1 \u5728\u4f4e\u6d41\u91cf\u6216\u96f6\u6d41\u91cf\u65f6\uff0c\u6d41\u91cf\u5c06\u8def\u7531\u5230 activator
              2. case2 \u6d41\u91cf\u5927\u65f6\uff0c\u6d41\u91cf\u5927\u4e8e target-burst-capacity \u65f6\u624d\u76f4\u63a5\u8def\u7531\u5230 Pod
                1. \u914d\u7f6e\u4e3a 0\uff0c\u53ea\u6709\u4ece 0 \u6269\u5bb9\u5b58\u5728
                2. \u914d\u7f6e\u4e3a -1\uff0cactivator \u4f1a\u4e00\u76f4\u5b58\u5728\u8bf7\u6c42\u8def\u5f84
                3. \u914d\u7f6e\u4e3a >0\uff0c\u89e6\u53d1\u6269\u7f29\u5bb9\u4e4b\u524d\uff0c\u7cfb\u7edf\u80fd\u591f\u989d\u5916\u5904\u7406\u7684\u5e76\u53d1\u8bf7\u6c42\u6570\u91cf\u3002
              3. case3 \u6d41\u91cf\u518d\u53d8\u5c0f\u65f6\uff0c\u6d41\u91cf\u4f4e\u4e8e current_demand + target-burst-capacity > (pods * concurrency-target) \u65f6\u5c06\u518d\u6b21\u8def\u7531\u5230 activator

                \u5f85\u5904\u7406\u7684\u8bf7\u6c42\u603b\u6570 + \u80fd\u63a5\u53d7\u7684\u8d85\u8fc7\u76ee\u6807\u5e76\u53d1\u6570\u7684\u8bf7\u6c42\u6570\u91cf > \u6bcf\u4e2a Pod \u7684\u76ee\u6807\u5e76\u53d1\u6570 * Pod \u6570\u91cf

              "},{"location":"admin/kpanda/scale/knative/playground.html#case-2-","title":"case 2 - \u57fa\u4e8e\u5e76\u53d1\u5f39\u6027\u4f38\u7f29","text":"

              \u6211\u4eec\u9996\u5148\u5728\u96c6\u7fa4\u5e94\u7528\u4e0b\u9762 YAML \u5b9a\u4e49\u3002

              apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    metadata:\n      annotations:\n        autoscaling.knative.dev/target: \"1\"\n        autoscaling.knative.dev/class: \"kpa.autoscaling.knative.dev\"\n    spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n

              \u6267\u884c\u4e0b\u9762\u547d\u4ee4\u6d4b\u8bd5\uff0c\u5e76\u53ef\u4ee5\u901a\u8fc7 kubectl get pods -A -w \u6765\u89c2\u5bdf\u6269\u5bb9\u7684 Pod\u3002

              wrk -t2 -c4 -d6s http://hello.knative-serving.knative.daocloud.io/\n
              "},{"location":"admin/kpanda/scale/knative/playground.html#case-3-","title":"case 3 - \u57fa\u4e8e\u5e76\u53d1\u5f39\u6027\u4f38\u7f29\uff0c\u8fbe\u5230\u7279\u5b9a\u6bd4\u4f8b\u63d0\u524d\u6269\u5bb9","text":"

              \u6211\u4eec\u53ef\u4ee5\u5f88\u8f7b\u677e\u7684\u5b9e\u73b0\uff0c\u4f8b\u5982\u9650\u5236\u6bcf\u4e2a\u5bb9\u5668\u5e76\u53d1\u4e3a 10\uff0c\u53ef\u4ee5\u901a\u8fc7 autoscaling.knative.dev/target-utilization-percentage: 70 \u6765\u5b9e\u73b0\uff0c\u8fbe\u5230 70% \u5c31\u5f00\u59cb\u6269\u5bb9 Pod\u3002

              apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    metadata:\n      annotations:\n        autoscaling.knative.dev/target: \"10\"\n        autoscaling.knative.dev/class: \"kpa.autoscaling.knative.dev\"\n \u00a0 \u00a0 \u00a0 \u00a0autoscaling.knative.dev/target-utilization-percentage: \"70\" \n \u00a0 \u00a0 \u00a0 \u00a0autoscaling.knative.dev/metric: \"concurrency\"\n \u00a0 \u00a0 spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n
              "},{"location":"admin/kpanda/scale/knative/playground.html#case-4-","title":"case 4 - \u7070\u5ea6\u53d1\u5e03/\u6d41\u91cf\u767e\u5206\u6bd4","text":"

              \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 spec.traffic \u5b9e\u73b0\u5230\u6bcf\u4e2a\u7248\u672c\u6d41\u91cf\u7684\u63a7\u5236\u3002

              apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    metadata:\n      annotations:\n        autoscaling.knative.dev/target: \"1\"  \n        autoscaling.knative.dev/class: \"kpa.autoscaling.knative.dev\"         \n    spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n  traffic:\n  - latestRevision: true\n    percent: 50\n  - latestRevision: false\n    percent: 50\n    revisionName: hello-00001\n
              "},{"location":"admin/kpanda/scale/knative/scene.html","title":"\u4f7f\u7528\u573a\u666f","text":""},{"location":"admin/kpanda/scale/knative/scene.html#_2","title":"\u9002\u5408\u7684\u573a\u666f","text":"
              • \u77ed\u8fde\u63a5\u9ad8\u5e76\u53d1\u4e1a\u52a1
              • \u9700\u8981\u5f39\u6027\u4f38\u7f29\u7684\u4e1a\u52a1
              • \u5927\u91cf\u5e94\u7528\u9700\u8981\u7f29\u5bb9\u5230 0 \u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u7387
              • AI Serving \u670d\u52a1\uff0c\u57fa\u4e8e\u7279\u5b9a\u6307\u6807\u8fdb\u884c\u6269\u5bb9

              Tip

              \u77ed\u8fde\u63a5\u9ad8\u5e76\u53d1\u4e1a\u52a1\u4ee5\u53ca\u9700\u8981\u5f39\u6027\u4f38\u7f29\u7684\u4e1a\u52a1\uff0c\u63a8\u8350\u4f7f\u7528 HPA \u548c VPA \u80fd\u529b\u3002

              "},{"location":"admin/kpanda/scale/knative/scene.html#_3","title":"\u4e0d\u9002\u5408\u7684\u573a\u666f","text":"
              • \u957f\u8fde\u63a5\u4e1a\u52a1
              • \u5ef6\u65f6\u654f\u611f\u4e1a\u52a1
              • \u57fa\u4e8e cookie \u7684\u6d41\u91cf\u5206\u6d41
              • \u57fa\u4e8e header \u7684\u6d41\u91cf\u5206\u6d41
              "},{"location":"admin/kpanda/security/index.html","title":"\u5b89\u5168\u626b\u63cf\u7c7b\u578b","text":"

              \u5728Kubernetes\uff08\u7b80\u79f0K8s\uff09\u73af\u5883\u4e2d\uff0c\u5b89\u5168\u626b\u63cf\u662f\u786e\u4fdd\u96c6\u7fa4\u5b89\u5168\u6027\u7684\u5173\u952e\u63aa\u65bd\u4e4b\u4e00\u3002\u5176\u4e2d\uff0c\u5408\u89c4\u6027\u626b\u63cf\uff08\u57fa\u4e8eCIS Benchmark\uff09\u3001\u6743\u9650\u626b\u63cf\uff08\u57fa\u4e8ekube-audit\u5ba1\u8ba1\u529f\u80fd\uff09\u3001\u6f0f\u6d1e\u626b\u63cf\uff08\u57fa\u4e8e kube-hunter\uff09\u662f\u4e09\u79cd\u5e38\u89c1\u4e14\u91cd\u8981\u7684\u5b89\u5168\u626b\u63cf\u624b\u6bb5\uff1a

              • \u5408\u89c4\u6027\u626b\u63cf\uff1a\u57fa\u4e8e CIS Benchmark \u5bf9\u96c6\u7fa4\u8282\u70b9\u8fdb\u884c\u5b89\u5168\u626b\u63cf\u3002CIS Benchmark \u662f\u4e00\u5957\u5168\u7403\u516c\u8ba4\u7684\u6700\u4f73\u5b9e\u8df5\u6807\u51c6\uff0c\u4e3a Kubernetes \u96c6\u7fa4\u63d0\u4f9b\u4e86\u8be6\u7ec6\u7684\u5b89\u5168\u914d\u7f6e\u6307\u5357\u548c\u81ea\u52a8\u5316\u68c0\u67e5\u5de5\u5177\uff08\u5982Kube-Bench\uff09\uff0c\u5e2e\u52a9\u7ec4\u7ec7\u786e\u4fdd\u5176K8s\u96c6\u7fa4\u7b26\u5408\u5b89\u5168\u57fa\u7ebf\u8981\u6c42\uff0c\u4fdd\u62a4\u7cfb\u7edf\u548c\u6570\u636e\u514d\u53d7\u5a01\u80c1\u3002

              • \u6743\u9650\u626b\u63cf\uff1a\u57fa\u4e8ekube-audit\u5ba1\u8ba1\u529f\u80fd\u3002\u6743\u9650\u626b\u63cf\u4e3b\u8981\u89e3\u51b3\u96c6\u7fa4\u8bbf\u95ee\u63a7\u5236\u548c\u64cd\u4f5c\u900f\u660e\u5ea6\u7684\u95ee\u9898\u3002\u901a\u8fc7\u5ba1\u8ba1\u65e5\u5fd7\uff0c\u96c6\u7fa4\u7ba1\u7406\u5458\u80fd\u591f\u8ffd\u6eaf\u96c6\u7fa4\u8d44\u6e90\u7684\u8bbf\u95ee\u5386\u53f2\uff0c\u8bc6\u522b\u5f02\u5e38\u884c\u4e3a\uff0c\u5982\u672a\u7ecf\u6388\u6743\u7684\u8bbf\u95ee\u3001\u654f\u611f\u6570\u636e\u7684\u6cc4\u9732\u3001\u6709\u5b89\u5168\u6f0f\u6d1e\u7684\u64cd\u4f5c\u8bb0\u5f55\u7b49\u3002\u8fd9\u5bf9\u4e8e\u6545\u969c\u6392\u67e5\u3001\u5b89\u5168\u4e8b\u4ef6\u54cd\u5e94\u4ee5\u53ca\u6ee1\u8db3\u5408\u89c4\u6027\u8981\u6c42\u81f3\u5173\u91cd\u8981\u3002\u6b64\u5916\uff0c\u6743\u9650\u626b\u63cf\u8fd8\u53ef\u4ee5\u5e2e\u52a9\u7ec4\u7ec7\u53d1\u73b0\u6f5c\u5728\u7684\u6743\u9650\u6ee5\u7528\u95ee\u9898\uff0c\u53ca\u65f6\u91c7\u53d6\u63aa\u65bd\u9632\u6b62\u5b89\u5168\u4e8b\u4ef6\u7684\u53d1\u751f\u3002

              • \u6f0f\u6d1e\u626b\u63cf\uff1a\u57fa\u4e8e kube-hunter\uff0c\u4e3b\u8981\u89e3\u51b3 Kubernetes \u96c6\u7fa4\u4e2d\u5b58\u5728\u7684\u5df2\u77e5\u6f0f\u6d1e\u548c\u914d\u7f6e\u9519\u8bef\u95ee\u9898\u3002kube-hunter \u901a\u8fc7\u6a21\u62df\u653b\u51fb\u884c\u4e3a\uff0c\u80fd\u591f\u8bc6\u522b\u96c6\u7fa4\u4e2d\u53ef\u88ab\u6076\u610f\u5229\u7528\u7684\u6f0f\u6d1e\uff0c\u5982\u672a\u6388\u6743\u8bbf\u95ee\u3001\u66b4\u9732\u7684\u670d\u52a1\u548cAPI\u7aef\u70b9\u3001\u914d\u7f6e\u9519\u8bef\u7684\u89d2\u8272\u548c\u7ed1\u5b9a\u7b56\u7565\u7b49\u3002\u7279\u522b\u5730\uff0ckube-hunter\u80fd\u591f\u8bc6\u522b\u5e76\u62a5\u544a CVE \u6f0f\u6d1e\uff0c\u8fd9\u4e9b\u6f0f\u6d1e\u5982\u679c\u88ab\u6076\u610f\u5229\u7528\uff0c\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u6cc4\u9732\u3001\u670d\u52a1\u4e2d\u65ad\u7b49\u4e25\u91cd\u540e\u679c\u3002CVE \u6f0f\u6d1e\u662f\u7531\u56fd\u9645\u77e5\u540d\u7684\u5b89\u5168\u7ec4\u7ec7\u5982MITRE\u6240\u5b9a\u4e49\u548c\u7ef4\u62a4\u7684\uff0cCVE\u6570\u636e\u5e93\u4e3a\u8f6f\u4ef6\u548c\u56fa\u4ef6\u4e2d\u7684\u5df2\u77e5\u6f0f\u6d1e\u63d0\u4f9b\u4e86\u552f\u4e00\u6807\u8bc6\u7b26\uff0c\u6210\u4e3a\u5168\u7403\u5b89\u5168\u793e\u533a\u5171\u540c\u9075\u5faa\u7684\u6807\u51c6\u3002kube-hunter \u901a\u8fc7\u5229\u7528 CVE \u6570\u636e\u5e93\u4e2d\u7684\u4fe1\u606f\uff0c\u80fd\u591f\u5e2e\u52a9\u7528\u6237\u5feb\u901f\u8bc6\u522b\u5e76\u54cd\u5e94Kubernetes\u96c6\u7fa4\u4e2d\u7684\u5b89\u5168\u5a01\u80c1\u3002

              "},{"location":"admin/kpanda/security/index.html#_2","title":"\u5408\u89c4\u6027\u626b\u63cf","text":"

              \u5408\u89c4\u6027\u626b\u63cf\u7684\u5bf9\u8c61\u662f\u96c6\u7fa4\u8282\u70b9\u3002\u626b\u63cf\u7ed3\u679c\u4e2d\u4f1a\u5217\u51fa\u626b\u63cf\u9879\u4ee5\u53ca\u626b\u63cf\u7ed3\u679c\uff0c\u5e76\u9488\u5bf9\u672a\u901a\u8fc7\u7684\u626b\u63cf\u9879\u7ed9\u51fa\u4fee\u590d\u5efa\u8bae\u3002\u6709\u5173\u626b\u63cf\u65f6\u7528\u5230\u7684\u5177\u4f53\u5b89\u5168\u89c4\u5219\uff0c\u53ef\u53c2\u8003 CIS Kubernetes Benchmark

              \u68c0\u67e5\u4e0d\u540c\u7c7b\u578b\u7684\u8282\u70b9\u65f6\uff0c\u626b\u63cf\u7684\u4fa7\u91cd\u70b9\u6709\u6240\u4e0d\u540c\u3002

              • \u626b\u63cf\u63a7\u5236\u5e73\u9762\u8282\u70b9\uff08Controller\uff09

                • \u5173\u6ce8 API Server \u3001 controller-manager \u3001 scheduler \u3001 kubelet \u7b49\u7cfb\u7edf\u7ec4\u4ef6\u7684\u5b89\u5168\u6027
                • \u68c0\u67e5 Etcd \u6570\u636e\u5e93\u7684\u5b89\u5168\u914d\u7f6e
                • \u68c0\u67e5\u96c6\u7fa4\u8eab\u4efd\u9a8c\u8bc1\u673a\u5236\u3001\u6388\u6743\u7b56\u7565\u548c\u7f51\u7edc\u5b89\u5168\u914d\u7f6e\u662f\u5426\u7b26\u5408\u5b89\u5168\u6807\u51c6
              • \u626b\u63cf\u5de5\u4f5c\u8282\u70b9\uff08Worker\uff09

                • \u68c0\u67e5 kubelet\u3001Docker\u7b49\u5bb9\u5668\u8fd0\u884c\u65f6\u7684\u914d\u7f6e\u5426\u7b26\u5408\u5b89\u5168\u6807\u51c6
                • \u68c0\u67e5\u5bb9\u5668\u955c\u50cf\u662f\u5426\u7ecf\u8fc7\u4fe1\u4efb\u9a8c\u8bc1
                • \u68c0\u67e5\u8282\u70b9\u7684\u7f51\u7edc\u5b89\u5168\u914d\u7f6e\u5426\u7b26\u5408\u5b89\u5168\u6807\u51c6

              Tip

              \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u65f6\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u914d\u7f6e\uff0c\u7136\u540e\u57fa\u4e8e\u8be5\u914d\u7f6e\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002\u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u62a5\u544a\u3002

              "},{"location":"admin/kpanda/security/index.html#_3","title":"\u6743\u9650\u626b\u63cf","text":"

              \u6743\u9650\u626b\u63cf\u4fa7\u91cd\u4e8e\u6743\u9650\u95ee\u9898\u5f15\u53d1\u7684\u5b89\u5168\u6f0f\u6d1e\u3002\u6743\u9650\u626b\u63cf\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u8bc6\u522b Kubernetes \u96c6\u7fa4\u4e2d\u7684\u5b89\u5168\u5a01\u80c1\uff0c\u6807\u8bc6\u54ea\u4e9b\u8d44\u6e90\u9700\u8981\u8fdb\u884c\u8fdb\u4e00\u6b65\u7684\u5ba1\u67e5\u548c\u4fdd\u62a4\u63aa\u65bd\u3002\u901a\u8fc7\u6267\u884c\u8fd9\u4e9b\u68c0\u67e5\u9879\uff0c\u7528\u6237\u53ef\u4ee5\u66f4\u6e05\u695a\u3001\u66f4\u5168\u9762\u5730\u4e86\u89e3\u81ea\u5df1\u7684 Kubernetes \u73af\u5883\uff0c\u786e\u4fdd\u96c6\u7fa4\u73af\u5883\u7b26\u5408 Kubernetes \u7684\u6700\u4f73\u5b9e\u8df5\u548c\u5b89\u5168\u6807\u51c6\u3002

              \u5177\u4f53\u800c\u8a00\uff0c\u6743\u9650\u626b\u63cf\u652f\u6301\u4ee5\u4e0b\u64cd\u4f5c\uff1a

              • \u626b\u63cf\u96c6\u7fa4\u4e2d\u7684\u6240\u6709\u8282\u70b9\u7684\u5065\u5eb7\u72b6\u6001\u3002

              • \u626b\u63cf\u96c6\u7fa4\u7ec4\u4ef6\u7684\u8fd0\u884c\u72b6\u51b5\uff0c\u5982 kube-apiserver \u3001 kube-controller-manager \u3001 kube-scheduler \u7b49\u3002

              • \u626b\u63cf\u5b89\u5168\u914d\u7f6e\uff1a\u68c0\u67e5 Kubernetes \u7684\u5b89\u5168\u914d\u7f6e

                • API \u5b89\u5168\uff1a\u542f\u7528\u4e86\u4e0d\u5b89\u5168\u7684 API \u7248\u672c\uff0c\u662f\u5426\u8bbe\u7f6e\u4e86\u9002\u5f53\u7684 RBAC \u89d2\u8272\u548c\u6743\u9650\u9650\u5236\u7b49
                • \u5bb9\u5668\u5b89\u5168\uff1a\u662f\u5426\u4f7f\u7528\u4e86\u4e0d\u5b89\u5168\u7684 Image\u3001\u662f\u5426\u5f00\u653e\u4e86\u7279\u6743\u6a21\u5f0f\uff0c\u662f\u5426\u8bbe\u7f6e\u4e86\u5408\u9002\u7684\u5b89\u5168\u4e0a\u4e0b\u6587\u7b49
                • \u7f51\u7edc\u5b89\u5168\uff1a\u662f\u5426\u542f\u7528\u4e86\u5408\u9002\u7684\u7f51\u7edc\u7b56\u7565\u6765\u9650\u5236\u6d41\u91cf\uff0c\u662f\u5426\u4f7f\u7528\u4e86 TLS \u52a0\u5bc6\u7b49
                • \u5b58\u50a8\u5b89\u5168\uff1a\u662f\u5426\u542f\u7528\u4e86\u9002\u5f53\u7684\u52a0\u5bc6\u3001\u8bbf\u95ee\u63a7\u5236\u7b49\u3002
                • \u5e94\u7528\u7a0b\u5e8f\u5b89\u5168\uff1a\u662f\u5426\u8bbe\u7f6e\u4e86\u5fc5\u8981\u7684\u5b89\u5168\u63aa\u65bd\uff0c\u4f8b\u5982\u5bc6\u7801\u7ba1\u7406\u3001\u8de8\u7ad9\u811a\u672c\u653b\u51fb\u9632\u5fa1\u7b49\u3002
              • \u63d0\u4f9b\u8b66\u544a\u548c\u5efa\u8bae\uff1a\u5efa\u8bae\u96c6\u7fa4\u7ba1\u7406\u5458\u6267\u884c\u7684\u5b89\u5168\u6700\u4f73\u5b9e\u8df5\uff0c\u4f8b\u5982\u5b9a\u671f\u8f6e\u6362\u8bc1\u4e66\u3001\u4f7f\u7528\u5f3a\u5bc6\u7801\u3001\u9650\u5236\u7f51\u7edc\u8bbf\u95ee\u7b49\u3002

              Tip

              \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u65f6\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002\u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u62a5\u544a\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5b89\u5168\u626b\u63cf\u3002

              "},{"location":"admin/kpanda/security/index.html#_4","title":"\u6f0f\u6d1e\u626b\u63cf","text":"

              \u6f0f\u6d1e\u626b\u63cf\u4fa7\u91cd\u4e8e\u626b\u63cf\u6f5c\u5728\u7684\u6076\u610f\u653b\u51fb\u548c\u5b89\u5168\u6f0f\u6d1e\uff0c\u4f8b\u5982\u8fdc\u7a0b\u4ee3\u7801\u6267\u884c\u3001SQL \u6ce8\u5165\u3001XSS \u653b\u51fb\u7b49\uff0c\u4ee5\u53ca\u4e00\u4e9b\u9488\u5bf9 Kubernetes \u7279\u5b9a\u7684\u653b\u51fb\u3002\u6700\u7ec8\u7684\u626b\u63cf\u62a5\u544a\u4f1a\u5217\u51fa\u96c6\u7fa4\u4e2d\u5b58\u5728\u7684\u5b89\u5168\u6f0f\u6d1e\uff0c\u5e76\u63d0\u51fa\u4fee\u590d\u5efa\u8bae\u3002

              Tip

              \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u65f6\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002\u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u62a5\u544a\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u6f0f\u6d1e\u626b\u63cf\u3002

              "},{"location":"admin/kpanda/security/audit.html","title":"\u6743\u9650\u626b\u63cf","text":"

              \u4e3a\u4e86\u4f7f\u7528\u6743\u9650\u626b\u63cf\u529f\u80fd\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\uff0c\u6267\u884c\u8be5\u7b56\u7565\u4e4b\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u626b\u63cf\u62a5\u544a\u4ee5\u4f9b\u67e5\u770b\u3002

              "},{"location":"admin/kpanda/security/audit.html#_2","title":"\u521b\u5efa\u626b\u63cf\u7b56\u7565","text":"
              1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u9996\u9875\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5b89\u5168\u7ba1\u7406 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6743\u9650\u626b\u63cf \uff0c\u70b9\u51fb \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb \u521b\u5efa\u626b\u63cf\u7b56\u7565 \u3002

              3. \u53c2\u8003\u4e0b\u5217\u8bf4\u660e\u586b\u5199\u914d\u7f6e\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u626b\u63cf\u54ea\u4e2a\u96c6\u7fa4\u3002\u53ef\u9009\u7684\u96c6\u7fa4\u5217\u8868\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\u3002\u5982\u679c\u6ca1\u6709\u60f3\u9009\u7684\u96c6\u7fa4\uff0c\u53ef\u4ee5\u53bb\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u3002
                • \u626b\u63cf\u7c7b\u578b\uff1a

                  • \u7acb\u5373\u626b\u63cf\uff1a\u5728\u626b\u63cf\u7b56\u7565\u521b\u5efa\u597d\u4e4b\u540e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u626b\u63cf\uff0c\u540e\u7eed\u4e0d\u53ef\u4ee5\u81ea\u52a8/\u624b\u52a8\u518d\u6b21\u6267\u884c\u626b\u63cf\u3002
                  • \u5b9a\u65f6\u626b\u63cf\uff1a\u901a\u8fc7\u8bbe\u7f6e\u626b\u63cf\u5468\u671f\uff0c\u81ea\u52a8\u6309\u65f6\u91cd\u590d\u6267\u884c\u626b\u63cf\u3002
                • \u626b\u63cf\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff1a\u8bbe\u7f6e\u6700\u591a\u4fdd\u7559\u591a\u5c11\u626b\u63cf\u62a5\u544a\u3002\u8d85\u8fc7\u6307\u5b9a\u7684\u4fdd\u7559\u6570\u91cf\u65f6\uff0c\u4ece\u6700\u65e9\u7684\u62a5\u544a\u5f00\u59cb\u5220\u9664\u3002

              "},{"location":"admin/kpanda/security/audit.html#_3","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u7b56\u7565","text":"

              \u521b\u5efa\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u66f4\u65b0\u6216\u5220\u9664\u626b\u63cf\u7b56\u7565\u3002

              \u5728 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

              • \u5bf9\u4e8e\u5468\u671f\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a

                • \u9009\u62e9 \u7acb\u5373\u6267\u884c \u610f\u5473\u7740\uff0c\u5728\u5468\u671f\u8ba1\u5212\u4e4b\u5916\u7acb\u5373\u518d\u626b\u63cf\u4e00\u6b21\u96c6\u7fa4
                • \u9009\u62e9 \u7981\u7528 \u4f1a\u4e2d\u65ad\u626b\u63cf\u8ba1\u5212\uff0c\u76f4\u5230\u70b9\u51fb \u542f\u7528 \u624d\u53ef\u4ee5\u7ee7\u7eed\u6839\u636e\u5468\u671f\u8ba1\u5212\u6267\u884c\u8be5\u626b\u63cf\u7b56\u7565\u3002
                • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u626b\u63cf\u914d\u7f6e\u3001\u7c7b\u578b\u3001\u626b\u63cf\u5468\u671f\u3001\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff0c\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u548c\u9700\u8981\u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4\u3002
                • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e
              • \u5bf9\u4e8e\u4e00\u6b21\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a\u4ec5\u652f\u6301 \u5220\u9664 \u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/security/audit.html#_4","title":"\u67e5\u770b\u626b\u63cf\u62a5\u544a","text":"
              1. \u5728 \u5b89\u5168\u7ba1\u7406 -> \u6743\u9650\u626b\u63cf -> \u626b\u63cf\u62a5\u544a \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u62a5\u544a\u540d\u79f0

                \u5728\u62a5\u544a\u53f3\u4fa7\u70b9\u51fb \u5220\u9664 \u53ef\u4ee5\u624b\u52a8\u5220\u9664\u62a5\u544a\u3002

              2. \u67e5\u770b\u626b\u63cf\u62a5\u544a\u5185\u5bb9\uff0c\u5305\u62ec\uff1a

                • \u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4
                • \u4f7f\u7528\u7684\u626b\u63cf\u7b56\u7565
                • \u626b\u63cf\u9879\u603b\u6570\u3001\u8b66\u544a\u6570\u3001\u9519\u8bef\u6570
                • \u5728\u5468\u671f\u6027\u626b\u63cf\u7b56\u7565\u751f\u6210\u7684\u626b\u63cf\u62a5\u544a\u4e2d\uff0c\u8fd8\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u9891\u7387
                • \u626b\u63cf\u5f00\u59cb\u7684\u65f6\u95f4
                • \u68c0\u67e5\u8be6\u60c5\uff0c\u4f8b\u5982\u88ab\u68c0\u67e5\u7684\u8d44\u6e90\u3001\u8d44\u6e90\u7c7b\u578b\u3001\u626b\u63cf\u7ed3\u679c\u3001\u9519\u8bef\u7c7b\u578b\u3001\u9519\u8bef\u8be6\u60c5

              "},{"location":"admin/kpanda/security/hunter.html","title":"\u6f0f\u6d1e\u626b\u63cf","text":"

              \u4e3a\u4e86\u4f7f\u7528\u6f0f\u6d1e\u626b\u63cf\u529f\u80fd\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\uff0c\u6267\u884c\u8be5\u7b56\u7565\u4e4b\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u626b\u63cf\u62a5\u544a\u4ee5\u4f9b\u67e5\u770b\u3002

              "},{"location":"admin/kpanda/security/hunter.html#_2","title":"\u521b\u5efa\u626b\u63cf\u7b56\u7565","text":"
              1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u9996\u9875\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5b89\u5168\u7ba1\u7406 \u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6f0f\u6d1e\u626b\u63cf \uff0c\u70b9\u51fb \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb \u521b\u5efa\u626b\u63cf\u7b56\u7565 \u3002

              3. \u53c2\u8003\u4e0b\u5217\u8bf4\u660e\u586b\u5199\u914d\u7f6e\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u626b\u63cf\u54ea\u4e2a\u96c6\u7fa4\u3002\u53ef\u9009\u7684\u96c6\u7fa4\u5217\u8868\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\u3002\u5982\u679c\u6ca1\u6709\u60f3\u9009\u7684\u96c6\u7fa4\uff0c\u53ef\u4ee5\u53bb\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u3002
                • \u626b\u63cf\u7c7b\u578b\uff1a

                  • \u7acb\u5373\u626b\u63cf\uff1a\u5728\u626b\u63cf\u7b56\u7565\u521b\u5efa\u597d\u4e4b\u540e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u626b\u63cf\uff0c\u540e\u7eed\u4e0d\u53ef\u4ee5\u81ea\u52a8/\u624b\u52a8\u518d\u6b21\u6267\u884c\u626b\u63cf\u3002
                  • \u5b9a\u65f6\u626b\u63cf\uff1a\u901a\u8fc7\u8bbe\u7f6e\u626b\u63cf\u5468\u671f\uff0c\u81ea\u52a8\u6309\u65f6\u91cd\u590d\u6267\u884c\u626b\u63cf\u3002
                • \u626b\u63cf\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff1a\u8bbe\u7f6e\u6700\u591a\u4fdd\u7559\u591a\u5c11\u626b\u63cf\u62a5\u544a\u3002\u8d85\u8fc7\u6307\u5b9a\u7684\u4fdd\u7559\u6570\u91cf\u65f6\uff0c\u4ece\u6700\u65e9\u7684\u62a5\u544a\u5f00\u59cb\u5220\u9664\u3002

              "},{"location":"admin/kpanda/security/hunter.html#_3","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u7b56\u7565","text":"

              \u521b\u5efa\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u66f4\u65b0\u6216\u5220\u9664\u626b\u63cf\u7b56\u7565\u3002

              \u5728 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

              • \u5bf9\u4e8e\u5468\u671f\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a

                • \u9009\u62e9 \u7acb\u5373\u6267\u884c \u610f\u5473\u7740\uff0c\u5728\u5468\u671f\u8ba1\u5212\u4e4b\u5916\u7acb\u5373\u518d\u626b\u63cf\u4e00\u6b21\u96c6\u7fa4
                • \u9009\u62e9 \u7981\u7528 \u4f1a\u4e2d\u65ad\u626b\u63cf\u8ba1\u5212\uff0c\u76f4\u5230\u70b9\u51fb \u542f\u7528 \u624d\u53ef\u4ee5\u7ee7\u7eed\u6839\u636e\u5468\u671f\u8ba1\u5212\u6267\u884c\u8be5\u626b\u63cf\u7b56\u7565\u3002
                • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u626b\u63cf\u914d\u7f6e\u3001\u7c7b\u578b\u3001\u626b\u63cf\u5468\u671f\u3001\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff0c\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u548c\u9700\u8981\u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4\u3002
                • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e
              • \u5bf9\u4e8e\u4e00\u6b21\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a\u4ec5\u652f\u6301 \u5220\u9664 \u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/security/hunter.html#_4","title":"\u67e5\u770b\u626b\u63cf\u62a5\u544a","text":"
              1. \u5728 \u5b89\u5168\u7ba1\u7406 -> \u6743\u9650\u626b\u63cf -> \u626b\u63cf\u62a5\u544a \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u62a5\u544a\u540d\u79f0

                \u5728\u62a5\u544a\u53f3\u4fa7\u70b9\u51fb \u5220\u9664 \u53ef\u4ee5\u624b\u52a8\u5220\u9664\u62a5\u544a\u3002

              2. \u67e5\u770b\u626b\u63cf\u62a5\u544a\u5185\u5bb9\uff0c\u5305\u62ec\uff1a

                • \u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4
                • \u4f7f\u7528\u7684\u626b\u63cf\u7b56\u7565
                • \u626b\u63cf\u9891\u7387
                • \u98ce\u9669\u603b\u6570\u3001\u9ad8\u98ce\u9669\u6570\u3001\u4e2d\u98ce\u9669\u6570\u3001\u4f4e\u98ce\u9669\u6570
                • \u626b\u63cf\u65f6\u95f4
                • \u68c0\u67e5\u8be6\u60c5\uff0c\u4f8b\u5982\u6f0f\u6d1e ID\u3001\u6f0f\u6d1e\u7c7b\u578b\u3001\u6f0f\u6d1e\u540d\u79f0\u3001\u6f0f\u6d1e\u63cf\u8ff0\u7b49

              "},{"location":"admin/kpanda/security/cis/config.html","title":"\u626b\u63cf\u914d\u7f6e","text":"

              \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u7684\u7b2c\u4e00\u6b65\uff0c\u5c31\u662f\u5148\u521b\u5efa\u626b\u63cf\u914d\u7f6e\u3002\u57fa\u4e8e\u626b\u63cf\u914d\u7f6e\u518d\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3001\u6267\u884c\u626b\u63cf\u7b56\u7565\uff0c\u6700\u540e\u67e5\u770b\u626b\u63cf\u7ed3\u679c\u3002

              "},{"location":"admin/kpanda/security/cis/config.html#_2","title":"\u521b\u5efa\u626b\u63cf\u914d\u7f6e","text":"

              \u521b\u5efa\u626b\u63cf\u914d\u7f6e\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

              1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u9996\u9875\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5b89\u5168\u7ba1\u7406 \u3002

              2. \u9ed8\u8ba4\u8fdb\u5165 \u5408\u89c4\u6027\u626b\u63cf \u9875\u9762\uff0c\u70b9\u51fb \u626b\u63cf\u914d\u7f6e \u9875\u7b7e\uff0c\u7136\u540e\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u521b\u5efa\u626b\u63cf\u914d\u7f6e \u3002

              3. \u586b\u5199\u914d\u7f6e\u540d\u79f0\u3001\u9009\u62e9\u914d\u7f6e\u6a21\u677f\u3001\u6309\u9700\u52fe\u9009\u626b\u63cf\u9879\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                \u626b\u63cf\u6a21\u677f\uff1a\u76ee\u524d\u63d0\u4f9b\u4e86\u4e24\u4e2a\u6a21\u677f\u3002 kubeadm \u6a21\u677f\u9002\u7528\u4e8e\u4e00\u822c\u60c5\u51b5\u4e0b\u7684 Kubernetes \u96c6\u7fa4\u3002 \u6211\u4eec\u5728 kubeadm \u6a21\u677f\u57fa\u7840\u4e0a\uff0c\u7ed3\u5408\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u5e73\u53f0\u8bbe\u8ba1\u5ffd\u7565\u4e86\u4e0d\u9002\u7528\u4e8e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u626b\u63cf\u9879\u3002

              "},{"location":"admin/kpanda/security/cis/config.html#_3","title":"\u67e5\u770b\u626b\u63cf\u914d\u7f6e","text":"

              \u5728\u626b\u63cf\u914d\u7f6e\u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u626b\u63cf\u914d\u7f6e\u7684\u540d\u79f0\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u914d\u7f6e\u7684\u7c7b\u578b\u3001\u626b\u63cf\u9879\u6570\u91cf\u3001\u521b\u5efa\u65f6\u95f4\u3001\u914d\u7f6e\u6a21\u677f\uff0c\u4ee5\u53ca\u8be5\u914d\u7f6e\u542f\u7528\u7684\u5177\u4f53\u626b\u63cf\u9879\u3002

              "},{"location":"admin/kpanda/security/cis/config.html#_4","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u914d\u7f6e","text":"

              \u626b\u63cf\u914d\u7f6e\u521b\u5efa\u6210\u529f\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u66f4\u65b0\u914d\u7f6e\u6216\u5220\u9664\u8be5\u914d\u7f6e\u3002

              \u5728\u626b\u63cf\u914d\u7f6e\u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

              • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u63cf\u8ff0\u3001\u6a21\u677f\u548c\u626b\u63cf\u9879\u3002\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u3002
              • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e\u3002

              "},{"location":"admin/kpanda/security/cis/policy.html","title":"\u626b\u63cf\u7b56\u7565","text":""},{"location":"admin/kpanda/security/cis/policy.html#_2","title":"\u521b\u5efa\u626b\u63cf\u7b56\u7565","text":"

              \u521b\u5efa\u626b\u63cf\u914d\u7f6e\u4e4b\u540e\uff0c\u53ef\u4ee5\u57fa\u4e8e\u914d\u7f6e\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002

              1. \u5728 \u5b89\u5168\u7ba1\u7406 -> \u5408\u89c4\u6027\u626b\u63cf \u9875\u9762\u7684 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002

              2. \u53c2\u8003\u4e0b\u5217\u8bf4\u660e\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u626b\u63cf\u54ea\u4e2a\u96c6\u7fa4\u3002\u53ef\u9009\u7684\u96c6\u7fa4\u5217\u8868\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\u3002\u5982\u679c\u6ca1\u6709\u60f3\u9009\u7684\u96c6\u7fa4\uff0c\u53ef\u4ee5\u53bb\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u3002
                • \u626b\u63cf\u914d\u7f6e\uff1a\u9009\u62e9\u4e8b\u5148\u521b\u5efa\u597d\u7684\u626b\u63cf\u914d\u7f6e\u3002\u626b\u63cf\u914d\u7f6e\u89c4\u5b9a\u4e86\u9700\u8981\u6267\u884c\u54ea\u4e9b\u5177\u4f53\u7684\u626b\u63cf\u9879\u3002
                • \u626b\u63cf\u7c7b\u578b\uff1a

                  • \u7acb\u5373\u626b\u63cf\uff1a\u5728\u626b\u63cf\u7b56\u7565\u521b\u5efa\u597d\u4e4b\u540e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u626b\u63cf\uff0c\u540e\u7eed\u4e0d\u53ef\u4ee5\u81ea\u52a8/\u624b\u52a8\u518d\u6b21\u6267\u884c\u626b\u63cf\u3002
                  • \u5b9a\u65f6\u626b\u63cf\uff1a\u901a\u8fc7\u8bbe\u7f6e\u626b\u63cf\u5468\u671f\uff0c\u81ea\u52a8\u6309\u65f6\u91cd\u590d\u6267\u884c\u626b\u63cf\u3002
                • \u626b\u63cf\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff1a\u8bbe\u7f6e\u6700\u591a\u4fdd\u7559\u591a\u5c11\u626b\u63cf\u62a5\u544a\u3002\u8d85\u8fc7\u6307\u5b9a\u7684\u4fdd\u7559\u6570\u91cf\u65f6\uff0c\u4ece\u6700\u65e9\u7684\u62a5\u544a\u5f00\u59cb\u5220\u9664\u3002

              "},{"location":"admin/kpanda/security/cis/policy.html#_3","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u7b56\u7565","text":"

              \u521b\u5efa\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u66f4\u65b0\u6216\u5220\u9664\u626b\u63cf\u7b56\u7565\u3002

              \u5728 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

              • \u5bf9\u4e8e\u5468\u671f\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a

                • \u9009\u62e9 \u7acb\u5373\u6267\u884c \u610f\u5473\u7740\uff0c\u5728\u5468\u671f\u8ba1\u5212\u4e4b\u5916\u7acb\u5373\u518d\u626b\u63cf\u4e00\u6b21\u96c6\u7fa4
                • \u9009\u62e9 \u7981\u7528 \u4f1a\u4e2d\u65ad\u626b\u63cf\u8ba1\u5212\uff0c\u76f4\u5230\u70b9\u51fb \u542f\u7528 \u624d\u53ef\u4ee5\u7ee7\u7eed\u6839\u636e\u5468\u671f\u8ba1\u5212\u6267\u884c\u8be5\u626b\u63cf\u7b56\u7565\u3002
                • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u626b\u63cf\u914d\u7f6e\u3001\u7c7b\u578b\u3001\u626b\u63cf\u5468\u671f\u3001\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff0c\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u548c\u9700\u8981\u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4\u3002
                • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e
              • \u5bf9\u4e8e\u4e00\u6b21\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a\u4ec5\u652f\u6301 \u5220\u9664 \u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/security/cis/report.html","title":"\u626b\u63cf\u62a5\u544a","text":"

              hide\uff1a - toc

              "},{"location":"admin/kpanda/security/cis/report.html#_1","title":"\u626b\u63cf\u62a5\u544a","text":"

              \u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u626b\u63cf\u62a5\u544a\u3002\u60a8\u53ef\u4ee5\u5728\u7ebf\u67e5\u770b\u626b\u63cf\u62a5\u544a\u6216\u5c06\u5176\u4e0b\u8f7d\u5230\u672c\u5730\u67e5\u770b\u3002

              • \u4e0b\u8f7d\u67e5\u770b\u626b\u63cf\u62a5\u544a

                \u5b89\u5168\u7ba1\u7406 -> \u5408\u89c4\u6027\u626b\u63cf \u9875\u9762\u7684 \u626b\u63cf\u62a5\u544a \u9875\u7b7e\u70b9\u51fb\u62a5\u544a\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u4e0b\u8f7d \u3002

              • \u5728\u7ebf\u67e5\u770b\u626b\u63cf\u62a5\u544a

                \u70b9\u51fb\u67d0\u4e2a\u62a5\u544a\u7684\u540d\u79f0\uff0c\u60a8\u53ef\u4ee5\u5728\u7ebf\u67e5\u770b CIS \u5408\u89c4\u6027\u626b\u63cf\u7684\u62a5\u544a\u5185\u5bb9\u3002\u5177\u4f53\u5305\u62ec\uff1a

                • \u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4
                • \u4f7f\u7528\u7684\u626b\u63cf\u7b56\u7565\u548c\u626b\u63cf\u914d\u7f6e
                • \u626b\u63cf\u5f00\u59cb\u65f6\u95f4
                • \u626b\u63cf\u9879\u603b\u6570\u3001\u901a\u8fc7\u6570\u4e0e\u672a\u901a\u8fc7\u6570
                • \u5bf9\u4e8e\u672a\u901a\u8fc7\u7684\u626b\u63cf\u9879\u7ed9\u51fa\u5bf9\u5e94\u7684\u4fee\u590d\u5efa\u8bae
                • \u5bf9\u4e8e\u901a\u8fc7\u7684\u626b\u63cf\u9879\u7ed9\u51fa\u66f4\u5b89\u5168\u7684\u64cd\u4f5c\u5efa\u8bae

              "},{"location":"admin/kpanda/storage/pv.html","title":"\u6570\u636e\u5377(PV)","text":"

              \u6570\u636e\u5377\uff08PersistentVolume\uff0cPV\uff09\u662f\u96c6\u7fa4\u4e2d\u7684\u4e00\u5757\u5b58\u50a8\uff0c\u53ef\u7531\u7ba1\u7406\u5458\u4e8b\u5148\u5236\u5907\uff0c\u6216\u4f7f\u7528\u5b58\u50a8\u7c7b\uff08Storage Class\uff09\u6765\u52a8\u6001\u5236\u5907\u3002PV \u662f\u96c6\u7fa4\u8d44\u6e90\uff0c\u4f46\u62e5\u6709\u72ec\u7acb\u7684\u751f\u547d\u5468\u671f\uff0c\u4e0d\u4f1a\u968f\u7740 Pod \u8fdb\u7a0b\u7ed3\u675f\u800c\u88ab\u5220\u9664\u3002\u5c06 PV \u6302\u8f7d\u5230\u5de5\u4f5c\u8d1f\u8f7d\u53ef\u4ee5\u5b9e\u73b0\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\u6301\u4e45\u5316\u3002PV \u4e2d\u4fdd\u5b58\u4e86\u53ef\u88ab Pod \u4e2d\u5bb9\u5668\u8bbf\u95ee\u7684\u6570\u636e\u76ee\u5f55\u3002

              "},{"location":"admin/kpanda/storage/pv.html#_1","title":"\u521b\u5efa\u6570\u636e\u5377","text":"

              \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u6570\u636e\u5377\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

              • \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u6570\u636e\u5377\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

              • \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

              "},{"location":"admin/kpanda/storage/pv.html#yaml","title":"YAML \u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) -> YAML \u521b\u5efa \u3002

              2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

              "},{"location":"admin/kpanda/storage/pv.html#_2","title":"\u8868\u5355\u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) -> \u521b\u5efa\u6570\u636e\u5377(PV) \u3002

              2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

                • \u6570\u636e\u5377\u540d\u79f0\u3001\u6570\u636e\u5377\u7c7b\u578b\u3001\u6302\u8f7d\u8def\u5f84\u3001\u5377\u6a21\u5f0f\u3001\u8282\u70b9\u4eb2\u548c\u6027\u5728\u521b\u5efa\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                • \u6570\u636e\u5377\u7c7b\u578b\uff1a\u6709\u5173\u5377\u7c7b\u578b\u7684\u8be6\u7ec6\u4ecb\u7ecd\uff0c\u53ef\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u5377\u3002

                • Local\uff1a\u5c06 Node \u8282\u70b9\u7684\u672c\u5730\u5b58\u50a8\u5305\u88c5\u6210 PVC \u63a5\u53e3\uff0c\u5bb9\u5668\u76f4\u63a5\u4f7f\u7528 PVC \u800c\u65e0\u9700\u5173\u6ce8\u5e95\u5c42\u7684\u5b58\u50a8\u7c7b\u578b\u3002Local \u5377\u4e0d\u652f\u6301\u52a8\u6001\u914d\u7f6e\u6570\u636e\u5377\uff0c\u4f46\u652f\u6301\u914d\u7f6e\u8282\u70b9\u4eb2\u548c\u6027\uff0c\u53ef\u4ee5\u9650\u5236\u80fd\u4ece\u54ea\u4e9b\u8282\u70b9\u4e0a\u8bbf\u95ee\u8be5\u6570\u636e\u5377\u3002

                • HostPath\uff1a\u4f7f\u7528 Node \u8282\u70b9\u7684\u6587\u4ef6\u7cfb\u7edf\u4e0a\u7684\u6587\u4ef6\u6216\u76ee\u5f55\u4f5c\u4e3a\u6570\u636e\u5377\uff0c\u4e0d\u652f\u6301\u57fa\u4e8e\u8282\u70b9\u4eb2\u548c\u6027\u7684 Pod \u8c03\u5ea6\u3002

                • \u6302\u8f7d\u8def\u5f84\uff1a\u5c06\u6570\u636e\u5377\u6302\u8f7d\u5230\u5bb9\u5668\u4e2d\u7684\u67d0\u4e2a\u5177\u4f53\u76ee\u5f55\u4e0b\u3002

                • \u8bbf\u95ee\u6a21\u5f0f\uff1a

                  • ReadWriteOnce\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u4e00\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                  • ReadWriteMany\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                  • ReadOnlyMany\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u53ea\u8bfb\u65b9\u5f0f\u6302\u8f7d\u3002
                  • ReadWriteOncePod\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u5355\u4e2a Pod \u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                • \u56de\u6536\u7b56\u7565\uff1a

                  • Retain\uff1a\u4e0d\u5220\u9664 PV\uff0c\u4ec5\u5c06\u5176\u72b6\u6001\u53d8\u4e3a released \uff0c\u9700\u8981\u7528\u6237\u624b\u52a8\u56de\u6536\u3002\u6709\u5173\u5982\u4f55\u624b\u52a8\u56de\u6536\uff0c\u53ef\u53c2\u8003\u6301\u4e45\u5377\u3002
                  • Recycle\uff1a\u4fdd\u7559 PV \u4f46\u6e05\u7a7a\u5176\u4e2d\u7684\u6570\u636e\uff0c\u6267\u884c\u57fa\u672c\u7684\u64e6\u9664\u64cd\u4f5c\uff08 rm -rf /thevolume/* \uff09\u3002
                  • Delete\uff1a\u5220\u9664 PV \u65f6\u53ca\u5176\u4e2d\u7684\u6570\u636e\u3002
                • \u5377\u6a21\u5f0f\uff1a

                  • \u6587\u4ef6\u7cfb\u7edf\uff1a\u6570\u636e\u5377\u5c06\u88ab Pod \u6302\u8f7d\u5230\u67d0\u4e2a\u76ee\u5f55\u3002\u5982\u679c\u6570\u636e\u5377\u7684\u5b58\u50a8\u6765\u81ea\u67d0\u5757\u8bbe\u5907\u800c\u8be5\u8bbe\u5907\u76ee\u524d\u4e3a\u7a7a\uff0c\u7b2c\u4e00\u6b21\u6302\u8f7d\u5377\u4e4b\u524d\u4f1a\u5728\u8bbe\u5907\u4e0a\u521b\u5efa\u6587\u4ef6\u7cfb\u7edf\u3002
                  • \u5757\uff1a\u5c06\u6570\u636e\u5377\u4f5c\u4e3a\u539f\u59cb\u5757\u8bbe\u5907\u6765\u4f7f\u7528\u3002\u8fd9\u7c7b\u5377\u4ee5\u5757\u8bbe\u5907\u7684\u65b9\u5f0f\u4ea4\u7ed9 Pod \u4f7f\u7528\uff0c\u5176\u4e0a\u6ca1\u6709\u4efb\u4f55\u6587\u4ef6\u7cfb\u7edf\uff0c\u53ef\u4ee5\u8ba9 Pod \u66f4\u5feb\u5730\u8bbf\u95ee\u6570\u636e\u5377\u3002
                • \u8282\u70b9\u4eb2\u548c\u6027\uff1a

              "},{"location":"admin/kpanda/storage/pv.html#_3","title":"\u67e5\u770b\u6570\u636e\u5377","text":"

              \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) \u3002

              • \u8be5\u9875\u9762\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u4e2d\u7684\u6240\u6709\u6570\u636e\u5377\uff0c\u4ee5\u53ca\u5404\u4e2a\u6570\u636e\u5377\u7684\u72b6\u6001\u3001\u5bb9\u91cf\u3001\u547d\u540d\u7a7a\u95f4\u7b49\u4fe1\u606f\u3002

              • \u652f\u6301\u6309\u7167\u6570\u636e\u5377\u7684\u540d\u79f0\u3001\u72b6\u6001\u3001\u547d\u540d\u7a7a\u95f4\u3001\u521b\u5efa\u65f6\u95f4\u8fdb\u884c\u987a\u5e8f\u6216\u9006\u5e8f\u6392\u5e8f\u3002

              • \u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u6570\u636e\u5377\u7684\u57fa\u672c\u914d\u7f6e\u3001\u5b58\u50a8\u6c60\u4fe1\u606f\u3001\u6807\u7b7e\u3001\u6ce8\u89e3\u7b49\u4fe1\u606f\u3002

              "},{"location":"admin/kpanda/storage/pv.html#_4","title":"\u514b\u9686\u6570\u636e\u5377","text":"

              \u901a\u8fc7\u514b\u9686\u6570\u636e\u5377\uff0c\u53ef\u4ee5\u57fa\u4e8e\u88ab\u514b\u9686\u6570\u636e\u5377\u7684\u914d\u7f6e\uff0c\u91cd\u65b0\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6570\u636e\u5377\u3002

              1. \u8fdb\u5165\u514b\u9686\u9875\u9762

                • \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u514b\u9686\u7684\u6570\u636e\u5377\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u514b\u9686 \u3002

                  \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u514b\u9686 \u3002

              2. \u76f4\u63a5\u4f7f\u7528\u539f\u914d\u7f6e\uff0c\u6216\u8005\u6309\u9700\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

              "},{"location":"admin/kpanda/storage/pv.html#_5","title":"\u66f4\u65b0\u6570\u636e\u5377","text":"

              \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u66f4\u65b0\u6570\u636e\u5377\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u6570\u636e\u5377\u3002

              Note

              \u4ec5\u652f\u6301\u66f4\u65b0\u6570\u636e\u5377\u7684\u522b\u540d\u3001\u5bb9\u91cf\u3001\u8bbf\u95ee\u6a21\u5f0f\u3001\u56de\u6536\u7b56\u7565\u3001\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

              • \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u6570\u636e\u5377\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

              • \u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u6570\u636e\u5377\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

              "},{"location":"admin/kpanda/storage/pv.html#_6","title":"\u5220\u9664\u6570\u636e\u5377","text":"

              \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u5220\u9664\u7684\u6570\u636e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u5220\u9664 \u3002

              \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u5220\u9664 \u3002

              "},{"location":"admin/kpanda/storage/pvc.html","title":"\u6570\u636e\u5377\u58f0\u660e(PVC)","text":"

              \u6301\u4e45\u5377\u58f0\u660e\uff08PersistentVolumeClaim\uff0cPVC\uff09\u8868\u8fbe\u7684\u662f\u7528\u6237\u5bf9\u5b58\u50a8\u7684\u8bf7\u6c42\u3002PVC \u6d88\u8017 PV \u8d44\u6e90\uff0c\u7533\u9886\u4f7f\u7528\u7279\u5b9a\u5927\u5c0f\u3001\u7279\u5b9a\u8bbf\u95ee\u6a21\u5f0f\u7684\u6570\u636e\u5377\uff0c\u4f8b\u5982\u8981\u6c42 PV \u5377\u4ee5 ReadWriteOnce\u3001ReadOnlyMany \u6216 ReadWriteMany \u7b49\u6a21\u5f0f\u6765\u6302\u8f7d\u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_1","title":"\u521b\u5efa\u6570\u636e\u5377\u58f0\u660e","text":"

              \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u6570\u636e\u5377\u58f0\u660e\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

              • \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u6570\u636e\u5377\u58f0\u660e\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

              • \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

              "},{"location":"admin/kpanda/storage/pvc.html#yaml","title":"YAML \u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e (PVC) -> YAML \u521b\u5efa \u3002

              2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_2","title":"\u8868\u5355\u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e (PVC) -> \u521b\u5efa\u6570\u636e\u5377\u58f0\u660e (PVC) \u3002

              2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

                • \u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\u3001\u547d\u540d\u7a7a\u95f4\u3001\u521b\u5efa\u65b9\u5f0f\u3001\u6570\u636e\u5377\u3001\u5bb9\u91cf\u3001\u8bbf\u95ee\u6a21\u5f0f\u5728\u521b\u5efa\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                • \u521b\u5efa\u65b9\u5f0f\uff1a\u5728\u5df2\u6709\u7684\u5b58\u50a8\u6c60\u6216\u8005\u6570\u636e\u5377\u4e2d\u52a8\u6001\u521b\u5efa\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\uff0c\u6216\u8005\u57fa\u4e8e\u6570\u636e\u5377\u58f0\u660e\u7684\u5feb\u7167\u521b\u5efa\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

                  \u57fa\u4e8e\u5feb\u7167\u521b\u5efa\u65f6\u65e0\u6cd5\u4fee\u6539\u6570\u636e\u5377\u58f0\u660e\u7684\u5bb9\u91cf\uff0c\u53ef\u4ee5\u5728\u521b\u5efa\u5b8c\u6210\u540e\u518d\u8fdb\u884c\u4fee\u6539\u3002

                • \u9009\u62e9\u521b\u5efa\u65b9\u5f0f\u4e4b\u540e\uff0c\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u9009\u62e9\u60f3\u8981\u4f7f\u7528\u7684\u5b58\u50a8\u6c60/\u6570\u636e\u5377/\u5feb\u7167\u3002

                • \u8bbf\u95ee\u6a21\u5f0f\uff1a

                • ReadWriteOnce\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u4e00\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002

                • ReadWriteMany\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                • ReadOnlyMany\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u53ea\u8bfb\u65b9\u5f0f\u6302\u8f7d\u3002
                • ReadWriteOncePod\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u5355\u4e2a Pod \u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_3","title":"\u67e5\u770b\u6570\u636e\u5377\u58f0\u660e","text":"

              \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \u3002

              • \u8be5\u9875\u9762\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u4e2d\u7684\u6240\u6709\u6570\u636e\u5377\u58f0\u660e\uff0c\u4ee5\u53ca\u5404\u4e2a\u6570\u636e\u5377\u58f0\u660e\u7684\u72b6\u6001\u3001\u5bb9\u91cf\u3001\u547d\u540d\u7a7a\u95f4\u7b49\u4fe1\u606f\u3002

              • \u652f\u6301\u6309\u7167\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\u3001\u72b6\u6001\u3001\u547d\u540d\u7a7a\u95f4\u3001\u521b\u5efa\u65f6\u95f4\u8fdb\u884c\u987a\u5e8f\u6216\u9006\u5e8f\u6392\u5e8f\u3002

              • \u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u6570\u636e\u5377\u58f0\u660e\u7684\u57fa\u672c\u914d\u7f6e\u3001\u5b58\u50a8\u6c60\u4fe1\u606f\u3001\u6807\u7b7e\u3001\u6ce8\u89e3\u7b49\u4fe1\u606f\u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_4","title":"\u6269\u5bb9\u6570\u636e\u5377\u58f0\u660e","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \uff0c\u627e\u5230\u60f3\u8981\u8c03\u6574\u5bb9\u91cf\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

              2. \u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u6269\u5bb9 \u3002

              3. \u8f93\u5165\u76ee\u6807\u5bb9\u91cf\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a \u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_5","title":"\u514b\u9686\u6570\u636e\u5377\u58f0\u660e","text":"

              \u901a\u8fc7\u514b\u9686\u6570\u636e\u5377\u58f0\u660e\uff0c\u53ef\u4ee5\u57fa\u4e8e\u88ab\u514b\u9686\u6570\u636e\u5377\u58f0\u660e\u7684\u914d\u7f6e\uff0c\u91cd\u65b0\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

              1. \u8fdb\u5165\u514b\u9686\u9875\u9762

                • \u5728\u6570\u636e\u5377\u58f0\u660e\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u514b\u9686\u7684\u6570\u636e\u5377\u58f0\u660e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u514b\u9686 \u3002

                  \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u514b\u9686 \u3002

              2. \u76f4\u63a5\u4f7f\u7528\u539f\u914d\u7f6e\uff0c\u6216\u8005\u6309\u9700\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_6","title":"\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e","text":"

              \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e\u3002

              Note

              \u4ec5\u652f\u6301\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e\u7684\u522b\u540d\u3001\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

              • \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

              • \u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u6570\u636e\u5377\u58f0\u660e\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_7","title":"\u5220\u9664\u6570\u636e\u5377\u58f0\u660e","text":"

              \u5728\u6570\u636e\u5377\u58f0\u660e\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u5220\u9664\u7684\u6570\u636e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u5220\u9664 \u3002

              \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u5220\u9664 \u3002

              "},{"location":"admin/kpanda/storage/pvc.html#_8","title":"\u5e38\u89c1\u95ee\u9898","text":"
              1. \u5982\u679c\u5217\u8868\u4e2d\u6ca1\u6709\u53ef\u9009\u7684\u5b58\u50a8\u6c60\u6216\u6570\u636e\u5377\uff0c\u53ef\u4ee5\u521b\u5efa\u5b58\u50a8\u6c60\u6216\u521b\u5efa\u6570\u636e\u5377\u3002

              2. \u5982\u679c\u5217\u8868\u4e2d\u6ca1\u6709\u53ef\u9009\u7684\u5feb\u7167\uff0c\u53ef\u4ee5\u8fdb\u5165\u6570\u636e\u5377\u58f0\u660e\u7684\u8be6\u60c5\u9875\uff0c\u5728\u53f3\u4e0a\u89d2\u5236\u4f5c\u5feb\u7167\u3002

              3. \u5982\u679c\u6570\u636e\u5377\u58f0\u660e\u6240\u4f7f\u7528\u7684\u5b58\u50a8\u6c60 (SC) \u6ca1\u6709\u542f\u7528\u5feb\u7167\uff0c\u5219\u65e0\u6cd5\u5236\u4f5c\u5feb\u7167\uff0c\u9875\u9762\u4e0d\u4f1a\u663e\u793a\u201c\u5236\u4f5c\u5feb\u7167\u201d\u9009\u9879\u3002

              4. \u5982\u679c\u6570\u636e\u5377\u58f0\u660e\u6240\u4f7f\u7528\u7684\u5b58\u50a8\u6c60 (SC) \u6ca1\u6709\u5f00\u542f\u6269\u5bb9\u529f\u80fd\uff0c\u5219\u8be5\u6570\u636e\u5377\u4e0d\u652f\u6301\u6269\u5bb9\uff0c\u9875\u9762\u4e0d\u4f1a\u663e\u793a\u6269\u5bb9\u9009\u9879\u3002

              "},{"location":"admin/kpanda/storage/sc-share.html","title":"\u5171\u4eab\u5b58\u50a8\u6c60","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u5c06\u4e00\u4e2a\u5b58\u50a8\u6c60\u5171\u4eab\u7ed9\u591a\u4e2a\u547d\u540d\u7a7a\u95f4\u4f7f\u7528\uff0c\u4ee5\u4fbf\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u6548\u7387\u3002

              1. \u5728\u5b58\u50a8\u6c60\u5217\u8868\u4e2d\u627e\u5230\u9700\u8981\u5171\u4eab\u7684\u5b58\u50a8\u6c60\uff0c\u5728\u53f3\u4fa7\u64cd\u4f5c\u680f\u4e0b\u70b9\u51fb \u6388\u6743\u547d\u540d\u7a7a\u95f4 \u3002

              2. \u70b9\u51fb \u81ea\u5b9a\u4e49\u547d\u540d\u7a7a\u95f4 \u53ef\u4ee5\u9010\u4e00\u9009\u62e9\u9700\u8981\u5c06\u6b64\u5b58\u50a8\u6c60\u5171\u4eab\u5230\u54ea\u4e9b\u547d\u540d\u7a7a\u95f4\u3002

                • \u70b9\u51fb \u6388\u6743\u6240\u6709\u547d\u540d\u7a7a\u95f4 \u53ef\u4ee5\u4e00\u6b21\u6027\u5c06\u6b64\u5b58\u50a8\u6c60\u5171\u4eab\u5230\u5f53\u524d\u96c6\u7fa4\u4e0b\u7684\u6240\u6709\u547d\u540d\u7a7a\u95f4\u3002
                • \u5728\u5217\u8868\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u65b9\u70b9\u51fb \u79fb\u9664\u6388\u6743 \uff0c\u53ef\u4ee5\u89e3\u9664\u6388\u6743\uff0c\u505c\u6b62\u5c06\u6b64\u5b58\u50a8\u6c60\u5171\u4eab\u5230\u8be5\u547d\u540d\u7a7a\u95f4\u3002

              "},{"location":"admin/kpanda/storage/sc.html","title":"\u5b58\u50a8\u6c60(SC)","text":"

              \u5b58\u50a8\u6c60\u6307\u5c06\u8bb8\u591a\u7269\u7406\u78c1\u76d8\u7ec4\u6210\u4e00\u4e2a\u5927\u578b\u5b58\u50a8\u8d44\u6e90\u6c60\uff0c\u672c\u5e73\u53f0\u652f\u6301\u63a5\u5165\u5404\u7c7b\u5b58\u50a8\u5382\u5546\u540e\u521b\u5efa\u5757\u5b58\u50a8\u6c60\u3001\u672c\u5730\u5b58\u50a8\u6c60\u3001\u81ea\u5b9a\u4e49\u5b58\u50a8\u6c60\uff0c\u7136\u540e\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u52a8\u6001\u914d\u7f6e\u6570\u636e\u5377\u3002

              "},{"location":"admin/kpanda/storage/sc.html#sc_1","title":"\u521b\u5efa\u5b58\u50a8\u6c60(SC)","text":"

              \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u5b58\u50a8\u6c60\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

              • \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u5b58\u50a8\u6c60\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

              • \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

              "},{"location":"admin/kpanda/storage/sc.html#yaml","title":"YAML \u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u5b58\u50a8\u6c60(SC) -> YAML \u521b\u5efa \u3002

              2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

              "},{"location":"admin/kpanda/storage/sc.html#_1","title":"\u8868\u5355\u521b\u5efa","text":"
              1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u5b58\u50a8\u6c60(SC) -> \u521b\u5efa\u5b58\u50a8\u6c60(SC) \u3002

              2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\uff0c\u7136\u540e\u5728\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                \u81ea\u5b9a\u4e49\u5b58\u50a8\u7cfb\u7edf

                • \u5b58\u50a8\u6c60\u540d\u79f0\u3001\u9a71\u52a8\u3001\u56de\u6536\u7b56\u7565\u5728\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002
                • CSI \u5b58\u50a8\u9a71\u52a8\uff1a\u57fa\u4e8e\u6807\u51c6 Kubernetes \u7684\u5bb9\u5668\u5b58\u50a8\u63a5\u53e3\u63d2\u4ef6\uff0c\u9700\u9075\u5b88\u5b58\u50a8\u5382\u5546\u89c4\u5b9a\u7684\u683c\u5f0f\uff0c\u4f8b\u5982 rancher.io/local-path \u3002

                  • \u6709\u5173\u5982\u4f55\u586b\u5199\u4e0d\u540c\u5382\u5546\u63d0\u4f9b\u7684 CSI \u9a71\u52a8\uff0c\u53ef\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u5b58\u50a8\u7c7b\u3002
                    • \u56de\u6536\u7b56\u7565\uff1a\u5220\u9664\u6570\u636e\u5377\u65f6\uff0c\u4fdd\u7559\u6570\u636e\u5377\u4e2d\u7684\u6570\u636e\u6216\u8005\u5220\u9664\u5176\u4e2d\u7684\u6570\u636e\u3002
                    • \u5feb\u7167/\u6269\u5bb9\uff1a\u5f00\u542f\u540e\uff0c\u57fa\u4e8e\u8be5\u5b58\u50a8\u6c60\u7684\u6570\u636e\u5377/\u6570\u636e\u5377\u58f0\u660e\u624d\u80fd\u652f\u6301\u6269\u5bb9\u548c\u5feb\u7167\u529f\u80fd\uff0c\u4f46 \u524d\u63d0\u662f\u5e95\u5c42\u4f7f\u7528\u7684\u5b58\u50a8\u9a71\u52a8\u652f\u6301\u5feb\u7167\u548c\u6269\u5bb9\u529f\u80fd\u3002

                HwameiStor \u5b58\u50a8\u7cfb\u7edf

                • \u5b58\u50a8\u6c60\u540d\u79f0\u3001\u9a71\u52a8\u3001\u56de\u6536\u7b56\u7565\u5728\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002
                • \u5b58\u50a8\u7cfb\u7edf\uff1aHwameiStor \u5b58\u50a8\u7cfb\u7edf\u3002
                • \u5b58\u50a8\u7c7b\u578b\uff1a\u652f\u6301 LVM\uff0c\u88f8\u78c1\u76d8\u7c7b\u578b
                  • LVM \u7c7b\u578b \uff1aHwameiStor \u63a8\u8350\u4f7f\u7528\u6b64\u65b9\u5f0f\uff0c\u53ef\u4f7f\u7528\u9ad8\u53ef\u7528\u6570\u636e\u5377\uff0c\u5bf9\u5e94\u7684\u7684 CSI \u5b58\u50a8\u9a71\u52a8\u4e3a lvm.hwameistor.io\u3002
                  • \u88f8\u78c1\u76d8\u6570\u636e\u5377 \uff1a \u9002\u7528\u4e8e\u975e\u9ad8\u53ef\u7528\u573a\u666f\uff0c\u65e0\u9ad8\u53ef\u7528\u80fd\u529b\uff0c\u5bf9\u5e94\u7684 CSI \u9a71\u52a8\u4e3a hdd.hwameistor.io
                • \u9ad8\u53ef\u7528\u6a21\u5f0f\uff1a\u4f7f\u7528\u9ad8\u53ef\u7528\u80fd\u529b\u4e4b\u524d\u8bf7\u786e\u8ba4 DRBD \u7ec4\u4ef6 \u5df2\u5b89\u88c5\u3002\u5f00\u542f\u9ad8\u53ef\u7528\u6a21\u5f0f\u540e\uff0c\u53ef\u5c06\u6570\u636e\u5377\u526f\u672c\u6570\u8bbe\u7f6e\u4e3a 1 \u548c 2\u3002 \u5982\u9700\u8981\u53ef\u5c06\u6570\u636e\u5377\u526f\u672c\u4ece 1 Convert \u6210 1
                • \u56de\u6536\u7b56\u7565\uff1a\u5220\u9664\u6570\u636e\u5377\u65f6\uff0c\u4fdd\u7559\u6570\u636e\u5377\u4e2d\u7684\u6570\u636e\u6216\u8005\u5220\u9664\u5176\u4e2d\u7684\u6570\u636e\u3002
                • \u5feb\u7167/\u6269\u5bb9\uff1a\u5f00\u542f\u540e\uff0c\u57fa\u4e8e\u8be5\u5b58\u50a8\u6c60\u7684\u6570\u636e\u5377/\u6570\u636e\u5377\u58f0\u660e\u624d\u80fd\u652f\u6301\u6269\u5bb9\u548c\u5feb\u7167\u529f\u80fd\uff0c\u4f46 \u524d\u63d0\u662f\u5e95\u5c42\u4f7f\u7528\u7684\u5b58\u50a8\u9a71\u52a8\u652f\u6301\u5feb\u7167\u548c\u6269\u5bb9\u529f\u80fd\u3002

                Note

                \u76ee\u524d HwameiStor xfs\u3001ext4 \u4e24\u79cd\u6587\u4ef6\u7cfb\u7edf\uff0c\u5176\u4e2d\u9ed8\u8ba4\u4f7f\u7528\u7684\u662f xfs \u6587\u4ef6\u7cfb\u7edf\uff0c\u5982\u679c\u60f3\u8981\u66ff\u6362\u4e3a ext4\uff0c\u53ef\u4ee5\u5728\u81ea\u5b9a\u4e49\u53c2\u6570\u6dfb\u52a0 csi.storage.k8s.io/fstype: ext4

              "},{"location":"admin/kpanda/storage/sc.html#sc_2","title":"\u66f4\u65b0\u5b58\u50a8\u6c60(SC)","text":"

              \u5728\u5b58\u50a8\u6c60\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u5b58\u50a8\u6c60\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u7f16\u8f91 \u5373\u53ef\u901a\u8fc7\u66f4\u65b0\u5b58\u50a8\u6c60\u3002

              Info

              \u9009\u62e9 \u67e5\u770b YAML \u53ef\u4ee5\u67e5\u770b\u8be5\u5b58\u50a8\u6c60\u7684 YAML \u6587\u4ef6\uff0c\u4f46\u4e0d\u652f\u6301\u7f16\u8f91\u3002

              "},{"location":"admin/kpanda/storage/sc.html#sc_3","title":"\u5220\u9664\u5b58\u50a8\u6c60(SC)","text":"

              \u5728\u5b58\u50a8\u6c60\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u5220\u9664\u7684\u5b58\u50a8\u6c60\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u5220\u9664 \u3002

              "},{"location":"admin/kpanda/workloads/create-cronjob.html","title":"\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09\u3002

              \u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09\u9002\u7528\u4e8e\u4e8e\u6267\u884c\u5468\u671f\u6027\u7684\u64cd\u4f5c\uff0c\u4f8b\u5982\u5907\u4efd\u3001\u62a5\u544a\u751f\u6210\u7b49\u3002\u8fd9\u4e9b\u4efb\u52a1\u53ef\u4ee5\u914d\u7f6e\u4e3a\u5468\u671f\u6027\u91cd\u590d\u7684\uff08\u4f8b\u5982\uff1a\u6bcf\u5929/\u6bcf\u5468/\u6bcf\u6708\u4e00\u6b21\uff09\uff0c\u53ef\u4ee5\u5b9a\u4e49\u4efb\u52a1\u5f00\u59cb\u6267\u884c\u7684\u65f6\u95f4\u95f4\u9694\u3002

              "},{"location":"admin/kpanda/workloads/create-cronjob.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

              "},{"location":"admin/kpanda/workloads/create-cronjob.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u5b9a\u65f6\u4efb\u52a1\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b9a\u65f6\u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

              3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u5b9a\u65f6\u4efb\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u5b9a\u65f6\u4efb\u52a1 \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u5b9a\u65f6\u4efb\u52a1\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u91cd\u542f\u7b49\u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/workloads/create-cronjob.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

              \u5728 \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1 \u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
              • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u5b9a\u65f6\u4efb\u52a1\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
              • \u63cf\u8ff0\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u91cf\u5e94\u4e0d\u8d85\u8fc7 512 \u4e2a\u3002
              "},{"location":"admin/kpanda/workloads/create-cronjob.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

              \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

              \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

              \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

              • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
              • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
              • \u955c\u50cf\uff1a
                • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
              • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
              • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
              • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                • \u6574\u5361\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                  • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                  • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                  • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                  • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                  • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                • Mig \u6a21\u5f0f
                  • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                  • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

              \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

              \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

              \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

              \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

              \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

              \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

              "},{"location":"admin/kpanda/workloads/create-cronjob.html#_5","title":"\u5b9a\u65f6\u4efb\u52a1\u914d\u7f6e","text":"
              • \u5e76\u53d1\u7b56\u7565\uff1a\u662f\u5426\u5141\u8bb8\u591a\u4e2a Job \u4efb\u52a1\u5e76\u884c\u6267\u884c\u3002

                • Allow \uff1a\u53ef\u4ee5\u5728\u524d\u4e00\u4e2a\u4efb\u52a1\u672a\u5b8c\u6210\u65f6\u5c31\u521b\u5efa\u65b0\u7684\u5b9a\u65f6\u4efb\u52a1\uff0c\u800c\u4e14\u591a\u4e2a\u4efb\u52a1\u53ef\u4ee5\u5e76\u884c\u3002\u4efb\u52a1\u592a\u591a\u53ef\u80fd\u62a2\u5360\u96c6\u7fa4\u8d44\u6e90\u3002
                • Forbid \uff1a\u5728\u524d\u4e00\u4e2a\u4efb\u52a1\u5b8c\u6210\u4e4b\u524d\uff0c\u4e0d\u80fd\u521b\u5efa\u65b0\u4efb\u52a1\uff0c\u5982\u679c\u65b0\u4efb\u52a1\u7684\u6267\u884c\u65f6\u95f4\u5230\u4e86\u800c\u4e4b\u524d\u7684\u4efb\u52a1\u4ecd\u672a\u6267\u884c\u5b8c\uff0cCronJob \u4f1a\u5ffd\u7565\u65b0\u4efb\u52a1\u7684\u6267\u884c\u3002
                • Replace \uff1a\u5982\u679c\u65b0\u4efb\u52a1\u7684\u6267\u884c\u65f6\u95f4\u5230\u4e86\uff0c\u4f46\u524d\u4e00\u4e2a\u4efb\u52a1\u8fd8\u672a\u5b8c\u6210\uff0c\u65b0\u7684\u4efb\u52a1\u4f1a\u53d6\u4ee3\u524d\u4e00\u4e2a\u4efb\u52a1\u3002

                \u4e0a\u8ff0\u89c4\u5219\u4ec5\u9002\u7528\u4e8e\u540c\u4e00\u4e2a CronJob \u521b\u5efa\u7684\u591a\u4e2a\u4efb\u52a1\u3002\u591a\u4e2a CronJob \u521b\u5efa\u7684\u591a\u4e2a\u4efb\u52a1\u603b\u662f\u5141\u8bb8\u5e76\u53d1\u6267\u884c\u3002

              • \u5b9a\u65f6\u89c4\u5219\uff1a\u57fa\u4e8e\u5206\u949f\u3001\u5c0f\u65f6\u3001\u5929\u3001\u5468\u3001\u6708\u8bbe\u7f6e\u4efb\u52a1\u6267\u884c\u7684\u65f6\u95f4\u5468\u671f\u3002\u652f\u6301\u7528\u6570\u5b57\u548c * \u81ea\u5b9a\u4e49 Cron \u8868\u8fbe\u5f0f\uff0c\u8f93\u5165\u8868\u8fbe\u5f0f\u540e\u4e0b\u65b9\u4f1a\u63d0\u793a\u5f53\u524d\u8868\u8fbe\u5f0f\u7684\u542b\u4e49\u3002\u6709\u5173\u8be6\u7ec6\u7684\u8868\u8fbe\u5f0f\u8bed\u6cd5\u89c4\u5219\uff0c\u53ef\u53c2\u8003 Cron \u65f6\u95f4\u8868\u8bed\u6cd5\u3002

              • \u4efb\u52a1\u8bb0\u5f55\uff1a\u8bbe\u5b9a\u4fdd\u7559\u591a\u5c11\u6761\u4efb\u52a1\u6267\u884c\u6210\u529f\u6216\u5931\u8d25\u7684\u8bb0\u5f55\u3002 0 \u8868\u793a\u4e0d\u4fdd\u7559\u3002
              • \u8d85\u65f6\u65f6\u95f4\uff1a\u8d85\u51fa\u8be5\u65f6\u95f4\u65f6\uff0c\u4efb\u52a1\u5c31\u4f1a\u88ab\u6807\u8bc6\u4e3a\u6267\u884c\u5931\u8d25\uff0c\u4efb\u52a1\u4e0b\u7684\u6240\u6709 Pod \u90fd\u4f1a\u88ab\u5220\u9664\u3002\u4e3a\u7a7a\u65f6\u8868\u793a\u4e0d\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\u3002\u9ed8\u8ba4\u503c\u4e3a 360 s\u3002
              • \u91cd\u8bd5\u6b21\u6570\uff1a\u4efb\u52a1\u53ef\u91cd\u8bd5\u6b21\u6570\uff0c\u9ed8\u8ba4\u503c\u4e3a 6\u3002
              • \u91cd\u542f\u7b56\u7565\uff1a\u8bbe\u7f6e\u4efb\u52a1\u5931\u8d25\u65f6\u662f\u5426\u91cd\u542f Pod\u3002
              "},{"location":"admin/kpanda/workloads/create-cronjob.html#_6","title":"\u670d\u52a1\u914d\u7f6e","text":"

              \u4e3a\u6709\u72b6\u6001\u8d1f\u8f7d\u914d\u7f6e\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u6709\u72b6\u6001\u8d1f\u8f7d\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

              1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

              2. \u53c2\u8003\u521b\u5efa\u670d\u52a1\uff0c\u914d\u7f6e\u670d\u52a1\u53c2\u6570\u3002

              3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              "},{"location":"admin/kpanda/workloads/create-cronjob.html#_7","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

              \u5b9a\u65f6\u4efb\u52a1\u7684\u9ad8\u7ea7\u914d\u7f6e\u4e3b\u8981\u6d89\u53ca\u6807\u7b7e\u4e0e\u6ce8\u89e3\u3002

              \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u4f8b Pod \u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

              "},{"location":"admin/kpanda/workloads/create-cronjob.html#yaml","title":"YAML \u521b\u5efa","text":"

              \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b9a\u65f6\u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

              3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

              \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u7684 YAML \u793a\u4f8b
              apiVersion: batch/v1\nkind: CronJob\nmetadata:\n  creationTimestamp: '2022-12-26T09:45:47Z'\n  generation: 1\n  name: demo\n  namespace: default\n  resourceVersion: '92726617'\n  uid: d030d8d7-a405-4dcd-b09a-176942ef36c9\nspec:\n  concurrencyPolicy: Allow\n  failedJobsHistoryLimit: 1\n  jobTemplate:\n    metadata:\n      creationTimestamp: null\n    spec:\n      activeDeadlineSeconds: 360\n      backoffLimit: 6\n      template:\n        metadata:\n          creationTimestamp: null\n        spec:\n          containers:\n            - image: nginx\n              imagePullPolicy: IfNotPresent\n              lifecycle: {}\n              name: container-3\n              resources:\n                limits:\n                  cpu: 250m\n                  memory: 512Mi\n                requests:\n                  cpu: 250m\n                  memory: 512Mi\n              securityContext:\n                privileged: false\n              terminationMessagePath: /dev/termination-log\n              terminationMessagePolicy: File\n          dnsPolicy: ClusterFirst\n          restartPolicy: Never\n          schedulerName: default-scheduler\n          securityContext: {}\n          terminationGracePeriodSeconds: 30\n  schedule: 0 0 13 * 5\n  successfulJobsHistoryLimit: 3\n  suspend: false\nstatus: {}\n
              "},{"location":"admin/kpanda/workloads/create-daemonset.html","title":"\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b(DaemonSet)","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b\uff08DaemonSet\uff09\u3002

              \u5b88\u62a4\u8fdb\u7a0b\uff08DaemonSet\uff09\u901a\u8fc7\u8282\u70b9\u4eb2\u548c\u6027\u4e0e\u6c61\u70b9\u529f\u80fd\u786e\u4fdd\u5728\u5168\u90e8\u6216\u90e8\u5206\u8282\u70b9\u4e0a\u8fd0\u884c\u4e00\u4e2a Pod \u7684\u526f\u672c\u3002\u5bf9\u4e8e\u65b0\u52a0\u5165\u96c6\u7fa4\u7684\u8282\u70b9\uff0cDaemonSet \u81ea\u52a8\u5728\u65b0\u8282\u70b9\u4e0a\u90e8\u7f72\u76f8\u5e94\u7684 Pod\uff0c\u5e76\u8ddf\u8e2a Pod \u7684\u8fd0\u884c\u72b6\u6001\u3002\u5f53\u8282\u70b9\u88ab\u79fb\u9664\u65f6\uff0cDaemonSet \u5219\u5220\u9664\u5176\u521b\u5efa\u7684\u6240\u6709 Pod\u3002

              \u5b88\u62a4\u8fdb\u7a0b\u7684\u5e38\u89c1\u7528\u4f8b\u5305\u62ec\uff1a

              • \u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u96c6\u7fa4\u5b88\u62a4\u8fdb\u7a0b\u3002

              • \u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u65e5\u5fd7\u6536\u96c6\u5b88\u62a4\u8fdb\u7a0b\u3002

              • \u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u76d1\u63a7\u5b88\u62a4\u8fdb\u7a0b\u3002

              \u7b80\u5355\u8d77\u89c1\uff0c\u53ef\u4ee5\u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u4e3a\u6bcf\u79cd\u7c7b\u578b\u7684\u5b88\u62a4\u8fdb\u7a0b\u90fd\u542f\u52a8\u4e00\u4e2a DaemonSet\u3002\u5982\u9700\u66f4\u7cbe\u7ec6\u3001\u66f4\u9ad8\u7ea7\u5730\u7ba1\u7406\u5b88\u62a4\u8fdb\u7a0b\uff0c\u4e5f\u53ef\u4ee5\u4e3a\u540c\u4e00\u79cd\u5b88\u62a4\u8fdb\u7a0b\u90e8\u7f72\u591a\u4e2a DaemonSet\u3002\u6bcf\u4e2a DaemonSet \u5177\u6709\u4e0d\u540c\u7684\u6807\u5fd7\uff0c\u5e76\u4e14\u5bf9\u4e0d\u540c\u786c\u4ef6\u7c7b\u578b\u5177\u6709\u4e0d\u540c\u7684\u5185\u5b58\u3001CPU \u8981\u6c42\u3002

              "},{"location":"admin/kpanda/workloads/create-daemonset.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u521b\u5efa DaemonSet \u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

              "},{"location":"admin/kpanda/workloads/create-daemonset.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u5b88\u62a4\u8fdb\u7a0b\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b88\u62a4\u8fdb\u7a0b \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

              3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u5b88\u62a4\u8fdb\u7a0b \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u5b88\u62a4\u8fdb\u7a0b\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u91cd\u542f\u7b49\u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/workloads/create-daemonset.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

              \u5728 \u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b \u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
              • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u5b88\u62a4\u8fdb\u7a0b\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
              • \u63cf\u8ff0\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u91cf\u5e94\u4e0d\u8d85\u8fc7 512 \u4e2a\u3002
              "},{"location":"admin/kpanda/workloads/create-daemonset.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

              \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

              \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

              \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

              • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
              • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
              • \u955c\u50cf\uff1a
                • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
              • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
              • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
              • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                • \u6574\u5361\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                  • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                  • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                  • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                  • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                  • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                • Mig \u6a21\u5f0f
                  • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                  • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

              \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

              \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

              \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

              \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

              \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

              \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

              "},{"location":"admin/kpanda/workloads/create-daemonset.html#_5","title":"\u670d\u52a1\u914d\u7f6e","text":"

              \u4e3a\u5b88\u62a4\u8fdb\u7a0b\u521b\u5efa\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u5b88\u62a4\u8fdb\u7a0b\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

              1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

              2. \u914d\u7f6e\u670d\u52a1\u53c2\u6570\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\u521b\u5efa\u670d\u52a1\u3002

              3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              "},{"location":"admin/kpanda/workloads/create-daemonset.html#_6","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

              \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u8d1f\u8f7d\u7684\u7f51\u7edc\u914d\u7f6e\u3001\u5347\u7ea7\u7b56\u7565\u3001\u8c03\u5ea6\u7b56\u7565\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u56db\u90e8\u5206\uff0c\u53ef\u70b9\u51fb\u4e0b\u65b9\u7684\u9875\u7b7e\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u7f51\u7edc\u914d\u7f6e\u5347\u7ea7\u7b56\u7565\u8c03\u5ea6\u7b56\u7565\u6807\u7b7e\u4e0e\u6ce8\u89e3

              \u5e94\u7528\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u4f1a\u51fa\u73b0\u5197\u4f59\u7684 DNS \u67e5\u8be2\u3002Kubernetes \u4e3a\u5e94\u7528\u63d0\u4f9b\u4e86\u4e0e DNS \u76f8\u5173\u7684\u914d\u7f6e\u9009\u9879\uff0c\u80fd\u591f\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u6709\u6548\u5730\u51cf\u5c11\u5197\u4f59\u7684 DNS \u67e5\u8be2\uff0c\u63d0\u5347\u4e1a\u52a1\u5e76\u53d1\u91cf\u3002

              • DNS \u7b56\u7565

                • Default\uff1a\u4f7f\u5bb9\u5668\u4f7f\u7528 kubelet \u7684 --resolv-conf \u53c2\u6570\u6307\u5411\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u3002\u8be5\u914d\u7f6e\u53ea\u80fd\u89e3\u6790\u6ce8\u518c\u5230\u4e92\u8054\u7f51\u4e0a\u7684\u5916\u90e8\u57df\u540d\uff0c\u65e0\u6cd5\u89e3\u6790\u96c6\u7fa4\u5185\u90e8\u57df\u540d\uff0c\u4e14\u4e0d\u5b58\u5728\u65e0\u6548\u7684 DNS \u67e5\u8be2\u3002
                • ClusterFirstWithHostNet\uff1a\u5e94\u7528\u5bf9\u63a5\u4e3b\u673a\u7684\u57df\u540d\u6587\u4ef6\u3002
                • ClusterFirst\uff1a\u5e94\u7528\u5bf9\u63a5 Kube-DNS/CoreDNS\u3002
                • None\uff1aKubernetes v1.9\uff08Beta in v1.10\uff09\u4e2d\u5f15\u5165\u7684\u65b0\u9009\u9879\u503c\u3002\u8bbe\u7f6e\u4e3a None \u4e4b\u540e\uff0c\u5fc5\u987b\u8bbe\u7f6e dnsConfig\uff0c\u6b64\u65f6\u5bb9\u5668\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u5c06\u5b8c\u5168\u901a\u8fc7 dnsConfig \u7684\u914d\u7f6e\u6765\u751f\u6210\u3002
              • \u57df\u540d\u670d\u52a1\u5668\uff1a\u586b\u5199\u57df\u540d\u670d\u52a1\u5668\u7684\u5730\u5740\uff0c\u4f8b\u5982 10.6.175.20 \u3002

              • \u641c\u7d22\u57df\uff1a\u57df\u540d\u67e5\u8be2\u65f6\u7684 DNS \u641c\u7d22\u57df\u5217\u8868\u3002\u6307\u5b9a\u540e\uff0c\u63d0\u4f9b\u7684\u641c\u7d22\u57df\u5217\u8868\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 search \u5b57\u6bb5\u4e2d\uff0c\u5e76\u5220\u9664\u91cd\u590d\u7684\u57df\u540d\u3002Kubernetes \u6700\u591a\u5141\u8bb8 6 \u4e2a\u641c\u7d22\u57df\u3002
              • Options\uff1aDNS \u7684\u914d\u7f6e\u9009\u9879\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5177\u6709 name \u5c5e\u6027\uff08\u5fc5\u9700\uff09\u548c value \u5c5e\u6027\uff08\u53ef\u9009\uff09\u3002\u8be5\u5b57\u6bb5\u4e2d\u7684\u5185\u5bb9\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 options \u5b57\u6bb5\u4e2d\uff0cdnsConfig \u7684 options \u7684\u67d0\u4e9b\u9009\u9879\u5982\u679c\u4e0e\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684\u9009\u9879\u51b2\u7a81\uff0c\u5219\u4f1a\u88ab dnsConfig \u6240\u8986\u76d6\u3002
              • \u4e3b\u673a\u522b\u540d\uff1a\u4e3a\u4e3b\u673a\u8bbe\u7f6e\u7684\u522b\u540d\u3002

              • \u5347\u7ea7\u65b9\u5f0f\uff1a \u6eda\u52a8\u5347\u7ea7 \u6307\u9010\u6b65\u7528\u65b0\u7248\u672c\u7684\u5b9e\u4f8b\u66ff\u6362\u65e7\u7248\u672c\u7684\u5b9e\u4f8b\uff0c\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e1a\u52a1\u6d41\u91cf\u4f1a\u540c\u65f6\u8d1f\u8f7d\u5747\u8861\u5206\u5e03\u5230\u65b0\u8001\u7684\u5b9e\u4f8b\u4e0a\uff0c\u56e0\u6b64\u4e1a\u52a1\u4e0d\u4f1a\u4e2d\u65ad\u3002 \u91cd\u5efa\u5347\u7ea7 \u6307\u5148\u5220\u9664\u8001\u7248\u672c\u7684\u8d1f\u8f7d\u5b9e\u4f8b\uff0c\u518d\u5b89\u88c5\u6307\u5b9a\u7684\u65b0\u7248\u672c\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2d\u4e1a\u52a1\u4f1a\u4e2d\u65ad\u3002
              • \u6700\u5927\u65e0\u6548 Pod \u6570\uff1a\u6307\u5b9a\u8d1f\u8f7d\u66f4\u65b0\u8fc7\u7a0b\u4e2d\u4e0d\u53ef\u7528 Pod \u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\uff0c\u9ed8\u8ba4 25%\u3002\u5982\u679c\u7b49\u4e8e\u5b9e\u4f8b\u6570\u6709\u670d\u52a1\u4e2d\u65ad\u7684\u98ce\u9669\u3002
              • \u6700\u5927\u6d6a\u6d8c\uff1a\u66f4\u65b0 Pod \u7684\u8fc7\u7a0b\u4e2d Pod \u603b\u6570\u8d85\u8fc7 Pod \u671f\u671b\u526f\u672c\u6570\u90e8\u5206\u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\u3002\u9ed8\u8ba4 25%\u3002
              • \u6700\u5927\u4fdd\u7559\u7248\u672c\u6570\uff1a\u8bbe\u7f6e\u7248\u672c\u56de\u6eda\u65f6\u4fdd\u7559\u7684\u65e7\u7248\u672c\u6570\u91cf\u3002\u9ed8\u8ba4 10\u3002
              • Pod \u53ef\u7528\u6700\u77ed\u65f6\u95f4\uff1aPod \u5c31\u7eea\u7684\u6700\u77ed\u65f6\u95f4\uff0c\u53ea\u6709\u8d85\u51fa\u8fd9\u4e2a\u65f6\u95f4 Pod \u624d\u88ab\u8ba4\u4e3a\u53ef\u7528\uff0c\u9ed8\u8ba4 0 \u79d2\u3002
              • \u5347\u7ea7\u6700\u5927\u6301\u7eed\u65f6\u95f4\uff1a\u5982\u679c\u8d85\u8fc7\u6240\u8bbe\u7f6e\u7684\u65f6\u95f4\u4ecd\u672a\u90e8\u7f72\u6210\u529f\uff0c\u5219\u5c06\u8be5\u8d1f\u8f7d\u6807\u8bb0\u4e3a\u5931\u8d25\u3002\u9ed8\u8ba4 600 \u79d2\u3002
              • \u7f29\u5bb9\u65f6\u95f4\u7a97\uff1a\u8d1f\u8f7d\u505c\u6b62\u524d\u547d\u4ee4\u7684\u6267\u884c\u65f6\u95f4\u7a97\uff080-9,999\u79d2\uff09\uff0c\u9ed8\u8ba4 30 \u79d2\u3002

              • \u5bb9\u5fcd\u65f6\u95f4\uff1a\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u5c06\u8d1f\u8f7d\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002
              • \u8282\u70b9\u4eb2\u548c\u6027\uff1a\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002
              • \u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
              • \u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u4e0d\u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
              • \u62d3\u6251\u57df\uff1a\u5373 topologyKey\uff0c\u7528\u4e8e\u6307\u5b9a\u53ef\u4ee5\u8c03\u5ea6\u7684\u4e00\u7ec4\u8282\u70b9\u3002\u4f8b\u5982\uff0c kubernetes.io/os \u8868\u793a\u53ea\u8981\u67d0\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u7684\u8282\u70b9\u6ee1\u8db3 labelSelector \u7684\u6761\u4ef6\u5c31\u53ef\u4ee5\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002

              \u5177\u4f53\u8be6\u60c5\u8bf7\u53c2\u8003\u8c03\u5ea6\u7b56\u7565\u3002

              \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u548c\u5bb9\u5668\u7ec4\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

              "},{"location":"admin/kpanda/workloads/create-daemonset.html#yaml","title":"YAML \u521b\u5efa","text":"

              \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b88\u62a4\u8fdb\u7a0b \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

              3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

              \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b\u7684 YAML \u793a\u4f8b
              kind: DaemonSet\napiVersion: apps/v1\nmetadata:\n  name: hwameistor-local-disk-manager\n  namespace: hwameistor\n  uid: ccbdc098-7de3-4a8a-96dd-d1cee159c92b\n  resourceVersion: '90999552'\n  generation: 1\n  creationTimestamp: '2022-12-15T09:03:44Z'\n  labels:\n    app.kubernetes.io/managed-by: Helm\n  annotations:\n    deprecated.daemonset.template.generation: '1'\n    meta.helm.sh/release-name: hwameistor\n    meta.helm.sh/release-namespace: hwameistor\nspec:\n  selector:\n    matchLabels:\n      app: hwameistor-local-disk-manager\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: hwameistor-local-disk-manager\n    spec:\n      volumes:\n        - name: udev\n          hostPath:\n            path: /run/udev\n            type: Directory\n        - name: procmount\n          hostPath:\n            path: /proc\n            type: Directory\n        - name: devmount\n          hostPath:\n            path: /dev\n            type: Directory\n        - name: socket-dir\n          hostPath:\n            path: /var/lib/kubelet/plugins/disk.hwameistor.io\n            type: DirectoryOrCreate\n        - name: registration-dir\n          hostPath:\n            path: /var/lib/kubelet/plugins_registry/\n            type: Directory\n        - name: plugin-dir\n          hostPath:\n            path: /var/lib/kubelet/plugins\n            type: DirectoryOrCreate\n        - name: pods-mount-dir\n          hostPath:\n            path: /var/lib/kubelet/pods\n            type: DirectoryOrCreate\n      containers:\n        - name: registrar\n          image: k8s-gcr.m.daocloud.io/sig-storage/csi-node-driver-registrar:v2.5.0\n          args:\n            - '--v=5'\n            - '--csi-address=/csi/csi.sock'\n            - >-\n              --kubelet-registration-path=/var/lib/kubelet/plugins/disk.hwameistor.io/csi.sock\n          env:\n            - name: KUBE_NODE_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: spec.nodeName\n          resources: {}\n          volumeMounts:\n            - name: socket-dir\n              mountPath: /csi\n            - name: registration-dir\n              mountPath: /registration\n          lifecycle:\n            preStop:\n              exec:\n                command:\n                  - /bin/sh\n                  - '-c'\n                  - >-\n                    rm -rf /registration/disk.hwameistor.io \n                    /registration/disk.hwameistor.io-reg.sock\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: manager\n          image: ghcr.m.daocloud.io/hwameistor/local-disk-manager:v0.6.1\n          command:\n            - /local-disk-manager\n          args:\n            - '--endpoint=$(CSI_ENDPOINT)'\n            - '--nodeid=$(NODENAME)'\n            - '--csi-enable=true'\n          env:\n            - name: CSI_ENDPOINT\n              value: unix://var/lib/kubelet/plugins/disk.hwameistor.io/csi.sock\n            - name: NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: WATCH_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: NODENAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: spec.nodeName\n            - name: OPERATOR_NAME\n              value: local-disk-manager\n          resources: {}\n          volumeMounts:\n            - name: udev\n              mountPath: /run/udev\n            - name: procmount\n              readOnly: true\n              mountPath: /host/proc\n            - name: devmount\n              mountPath: /dev\n            - name: registration-dir\n              mountPath: /var/lib/kubelet/plugins_registry\n            - name: plugin-dir\n              mountPath: /var/lib/kubelet/plugins\n              mountPropagation: Bidirectional\n            - name: pods-mount-dir\n              mountPath: /var/lib/kubelet/pods\n              mountPropagation: Bidirectional\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n          securityContext:\n            privileged: true\n      restartPolicy: Always\n      terminationGracePeriodSeconds: 30\n      dnsPolicy: ClusterFirst\n      serviceAccountName: hwameistor-admin\n      serviceAccount: hwameistor-admin\n      hostNetwork: true\n      hostPID: true\n      securityContext: {}\n      schedulerName: default-scheduler\n      tolerations:\n        - key: CriticalAddonsOnly\n          operator: Exists\n        - key: node.kubernetes.io/not-ready\n          operator: Exists\n          effect: NoSchedule\n        - key: node-role.kubernetes.io/master\n          operator: Exists\n          effect: NoSchedule\n        - key: node-role.kubernetes.io/control-plane\n          operator: Exists\n          effect: NoSchedule\n        - key: node.cloudprovider.kubernetes.io/uninitialized\n          operator: Exists\n          effect: NoSchedule\n  updateStrategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxUnavailable: 1\n      maxSurge: 0\n  revisionHistoryLimit: 10\nstatus:\n  currentNumberScheduled: 4\n  numberMisscheduled: 0\n  desiredNumberScheduled: 4\n  numberReady: 4\n  observedGeneration: 1\n  updatedNumberScheduled: 4\n  numberAvailable: 4\n
              "},{"location":"admin/kpanda/workloads/create-deployment.html","title":"\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u3002

              \u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09\u662f Kubernetes \u4e2d\u7684\u4e00\u79cd\u5e38\u89c1\u8d44\u6e90\uff0c\u4e3b\u8981\u4e3a Pod \u548c ReplicaSet \u63d0\u4f9b\u58f0\u660e\u5f0f\u66f4\u65b0\uff0c\u652f\u6301\u5f39\u6027\u4f38\u7f29\u3001\u6eda\u52a8\u5347\u7ea7\u3001\u7248\u672c\u56de\u9000\u7b49\u529f\u80fd\u3002\u5728 Deployment \u4e2d\u58f0\u660e\u671f\u671b\u7684 Pod \u72b6\u6001\uff0cDeployment Controller \u4f1a\u901a\u8fc7 ReplicaSet \u4fee\u6539\u5f53\u524d\u72b6\u6001\uff0c\u4f7f\u5176\u8fbe\u5230\u9884\u5148\u58f0\u660e\u7684\u671f\u671b\u72b6\u6001\u3002Deployment \u662f\u65e0\u72b6\u6001\u7684\uff0c\u4e0d\u652f\u6301\u6570\u636e\u6301\u4e45\u5316\uff0c\u9002\u7528\u4e8e\u90e8\u7f72\u65e0\u72b6\u6001\u7684\u3001\u4e0d\u9700\u8981\u4fdd\u5b58\u6570\u636e\u3001\u968f\u65f6\u53ef\u4ee5\u91cd\u542f\u56de\u6eda\u7684\u5e94\u7528\u3002

              \u901a\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\uff0c\u53ef\u4ee5\u57fa\u4e8e\u76f8\u5e94\u7684\u89d2\u8272\u6743\u9650\u8f7b\u677e\u7ba1\u7406\u591a\u4e91\u591a\u96c6\u7fa4\u4e0a\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5305\u62ec\u5bf9\u65e0\u72b6\u6001\u8d1f\u8f7d\u7684\u521b\u5efa\u3001\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u3002

              "},{"location":"admin/kpanda/workloads/create-deployment.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5728\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

              "},{"location":"admin/kpanda/workloads/create-deployment.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u65e0\u72b6\u6001\u8d1f\u8f7d\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

              3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u65e0\u72b6\u6001\u8d1f\u8f7d \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u8d1f\u8f7d\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u64cd\u4f5c\u3002\u5982\u679c\u8d1f\u8f7d\u72b6\u6001\u51fa\u73b0\u5f02\u5e38\uff0c\u8bf7\u67e5\u770b\u5177\u4f53\u5f02\u5e38\u4fe1\u606f\uff0c\u53ef\u53c2\u8003\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u3002

              "},{"location":"admin/kpanda/workloads/create-deployment.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"
              • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 deployment-01\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
              • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u8d1f\u8f7d\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
              • \u5b9e\u4f8b\u6570\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684 Pod \u5b9e\u4f8b\u6570\u91cf\uff0c\u9ed8\u8ba4\u521b\u5efa 1 \u4e2a Pod \u5b9e\u4f8b\u3002
              • \u63cf\u8ff0\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u4e0d\u8d85\u8fc7 512\u3002

              "},{"location":"admin/kpanda/workloads/create-deployment.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

              \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

              \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

              \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

              • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
              • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
              • \u955c\u50cf\uff1a
                • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u5b89\u88c5\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
              • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
              • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
              • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                • \u6574\u5361\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                  • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                  • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                  • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                  • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                  • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                • Mig \u6a21\u5f0f
                  • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                  • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

              \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

              \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

              \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

              \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

              \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

              \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

              "},{"location":"admin/kpanda/workloads/create-deployment.html#_5","title":"\u670d\u52a1\u914d\u7f6e","text":"

              \u4e3a\u65e0\u72b6\u6001\u8d1f\u8f7d\u914d\u7f6e\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u65e0\u72b6\u6001\u8d1f\u8f7d\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

              1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

              2. \u53c2\u8003\u521b\u5efa\u670d\u52a1\uff0c\u914d\u7f6e\u670d\u52a1\u53c2\u6570\u3002

              3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              "},{"location":"admin/kpanda/workloads/create-deployment.html#_6","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

              \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u8d1f\u8f7d\u7684\u7f51\u7edc\u914d\u7f6e\u3001\u5347\u7ea7\u7b56\u7565\u3001\u8c03\u5ea6\u7b56\u7565\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u56db\u90e8\u5206\uff0c\u53ef\u70b9\u51fb\u4e0b\u65b9\u7684\u9875\u7b7e\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u7f51\u7edc\u914d\u7f6e\u5347\u7ea7\u7b56\u7565\u8c03\u5ea6\u7b56\u7565\u6807\u7b7e\u4e0e\u6ce8\u89e3
              • \u5982\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u4e86 SpiderPool \u548c Multus \u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u5728\u7f51\u7edc\u914d\u7f6e\u4e2d\u914d\u7f6e\u5bb9\u5668\u7f51\u5361\u3002

              • DNS \u914d\u7f6e\uff1a\u5e94\u7528\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u4f1a\u51fa\u73b0\u5197\u4f59\u7684 DNS \u67e5\u8be2\u3002Kubernetes \u4e3a\u5e94\u7528\u63d0\u4f9b\u4e86\u4e0e DNS \u76f8\u5173\u7684\u914d\u7f6e\u9009\u9879\uff0c\u80fd\u591f\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u6709\u6548\u5730\u51cf\u5c11\u5197\u4f59\u7684 DNS \u67e5\u8be2\uff0c\u63d0\u5347\u4e1a\u52a1\u5e76\u53d1\u91cf\u3002

              • DNS \u7b56\u7565

                • Default\uff1a\u4f7f\u5bb9\u5668\u4f7f\u7528 kubelet \u7684 --resolv-conf \u53c2\u6570\u6307\u5411\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u3002\u8be5\u914d\u7f6e\u53ea\u80fd\u89e3\u6790\u6ce8\u518c\u5230\u4e92\u8054\u7f51\u4e0a\u7684\u5916\u90e8\u57df\u540d\uff0c\u65e0\u6cd5\u89e3\u6790\u96c6\u7fa4\u5185\u90e8\u57df\u540d\uff0c\u4e14\u4e0d\u5b58\u5728\u65e0\u6548\u7684 DNS \u67e5\u8be2\u3002
                • ClusterFirstWithHostNet\uff1a\u5e94\u7528\u5bf9\u63a5\u4e3b\u673a\u7684\u57df\u540d\u6587\u4ef6\u3002
                • ClusterFirst\uff1a\u5e94\u7528\u5bf9\u63a5 Kube-DNS/CoreDNS\u3002
                • None\uff1aKubernetes v1.9\uff08Beta in v1.10\uff09\u4e2d\u5f15\u5165\u7684\u65b0\u9009\u9879\u503c\u3002\u8bbe\u7f6e\u4e3a None \u4e4b\u540e\uff0c\u5fc5\u987b\u8bbe\u7f6e dnsConfig\uff0c\u6b64\u65f6\u5bb9\u5668\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u5c06\u5b8c\u5168\u901a\u8fc7 dnsConfig \u7684\u914d\u7f6e\u6765\u751f\u6210\u3002
              • \u57df\u540d\u670d\u52a1\u5668\uff1a\u586b\u5199\u57df\u540d\u670d\u52a1\u5668\u7684\u5730\u5740\uff0c\u4f8b\u5982 10.6.175.20 \u3002

              • \u641c\u7d22\u57df\uff1a\u57df\u540d\u67e5\u8be2\u65f6\u7684 DNS \u641c\u7d22\u57df\u5217\u8868\u3002\u6307\u5b9a\u540e\uff0c\u63d0\u4f9b\u7684\u641c\u7d22\u57df\u5217\u8868\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 search \u5b57\u6bb5\u4e2d\uff0c\u5e76\u5220\u9664\u91cd\u590d\u7684\u57df\u540d\u3002Kubernetes \u6700\u591a\u5141\u8bb8 6 \u4e2a\u641c\u7d22\u57df\u3002
              • Options\uff1aDNS \u7684\u914d\u7f6e\u9009\u9879\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5177\u6709 name \u5c5e\u6027\uff08\u5fc5\u9700\uff09\u548c value \u5c5e\u6027\uff08\u53ef\u9009\uff09\u3002\u8be5\u5b57\u6bb5\u4e2d\u7684\u5185\u5bb9\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 options \u5b57\u6bb5\u4e2d\uff0cdnsConfig \u7684 options \u7684\u67d0\u4e9b\u9009\u9879\u5982\u679c\u4e0e\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684\u9009\u9879\u51b2\u7a81\uff0c\u5219\u4f1a\u88ab dnsConfig \u6240\u8986\u76d6\u3002
              • \u4e3b\u673a\u522b\u540d\uff1a\u4e3a\u4e3b\u673a\u8bbe\u7f6e\u7684\u522b\u540d\u3002

              • \u5347\u7ea7\u65b9\u5f0f\uff1a \u6eda\u52a8\u5347\u7ea7 \u6307\u9010\u6b65\u7528\u65b0\u7248\u672c\u7684\u5b9e\u4f8b\u66ff\u6362\u65e7\u7248\u672c\u7684\u5b9e\u4f8b\uff0c\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e1a\u52a1\u6d41\u91cf\u4f1a\u540c\u65f6\u8d1f\u8f7d\u5747\u8861\u5206\u5e03\u5230\u65b0\u8001\u7684\u5b9e\u4f8b\u4e0a\uff0c\u56e0\u6b64\u4e1a\u52a1\u4e0d\u4f1a\u4e2d\u65ad\u3002 \u91cd\u5efa\u5347\u7ea7 \u6307\u5148\u5220\u9664\u8001\u7248\u672c\u7684\u8d1f\u8f7d\u5b9e\u4f8b\uff0c\u518d\u5b89\u88c5\u6307\u5b9a\u7684\u65b0\u7248\u672c\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2d\u4e1a\u52a1\u4f1a\u4e2d\u65ad\u3002
              • \u6700\u5927\u4e0d\u53ef\u7528\uff1a\u6307\u5b9a\u8d1f\u8f7d\u66f4\u65b0\u8fc7\u7a0b\u4e2d\u4e0d\u53ef\u7528 Pod \u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\uff0c\u9ed8\u8ba4 25%\u3002\u5982\u679c\u7b49\u4e8e\u5b9e\u4f8b\u6570\u6709\u670d\u52a1\u4e2d\u65ad\u7684\u98ce\u9669\u3002
              • \u6700\u5927\u5cf0\u503c\uff1a\u66f4\u65b0 Pod \u7684\u8fc7\u7a0b\u4e2d Pod \u603b\u6570\u8d85\u8fc7 Pod \u671f\u671b\u526f\u672c\u6570\u90e8\u5206\u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\u3002\u9ed8\u8ba4 25%\u3002
              • \u6700\u5927\u4fdd\u7559\u7248\u672c\u6570\uff1a\u8bbe\u7f6e\u7248\u672c\u56de\u6eda\u65f6\u4fdd\u7559\u7684\u65e7\u7248\u672c\u6570\u91cf\u3002\u9ed8\u8ba4 10\u3002
              • Pod \u53ef\u7528\u6700\u77ed\u65f6\u95f4\uff1aPod \u5c31\u7eea\u7684\u6700\u77ed\u65f6\u95f4\uff0c\u53ea\u6709\u8d85\u51fa\u8fd9\u4e2a\u65f6\u95f4 Pod \u624d\u88ab\u8ba4\u4e3a\u53ef\u7528\uff0c\u9ed8\u8ba4 0 \u79d2\u3002
              • \u5347\u7ea7\u6700\u5927\u6301\u7eed\u65f6\u95f4\uff1a\u5982\u679c\u8d85\u8fc7\u6240\u8bbe\u7f6e\u7684\u65f6\u95f4\u4ecd\u672a\u90e8\u7f72\u6210\u529f\uff0c\u5219\u5c06\u8be5\u8d1f\u8f7d\u6807\u8bb0\u4e3a\u5931\u8d25\u3002\u9ed8\u8ba4 600 \u79d2\u3002
              • \u7f29\u5bb9\u65f6\u95f4\u7a97\uff1a\u8d1f\u8f7d\u505c\u6b62\u524d\u547d\u4ee4\u7684\u6267\u884c\u65f6\u95f4\u7a97\uff080-9,999\u79d2\uff09\uff0c\u9ed8\u8ba4 30 \u79d2\u3002

              • \u5bb9\u5fcd\u65f6\u95f4\uff1a\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u5c06\u8d1f\u8f7d\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002
              • \u8282\u70b9\u4eb2\u548c\u6027\uff1a\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002
              • \u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
              • \u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u4e0d\u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002

              \u5177\u4f53\u8be6\u60c5\u8bf7\u53c2\u8003\u8c03\u5ea6\u7b56\u7565\u3002

              \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u548c\u5bb9\u5668\u7ec4\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

              "},{"location":"admin/kpanda/workloads/create-deployment.html#yaml","title":"YAML \u521b\u5efa","text":"

              \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

              3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

              \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u7684 YAML \u793a\u4f8b
              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\nspec:\n  selector:\n    matchLabels:\n      app: nginx\n  replicas: 2 # \u544a\u77e5 Deployment \u8fd0\u884c 2 \u4e2a\u4e0e\u8be5\u6a21\u677f\u5339\u914d\u7684 Pod\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.14.2\n        ports:\n        - containerPort: 80\n
              "},{"location":"admin/kpanda/workloads/create-job.html","title":"\u521b\u5efa\u4efb\u52a1\uff08Job\uff09","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u4efb\u52a1\uff08Job\uff09\u3002

              \u4efb\u52a1\uff08Job\uff09\u9002\u7528\u4e8e\u6267\u884c\u4e00\u6b21\u6027\u4efb\u52a1\u3002Job \u4f1a\u521b\u5efa\u4e00\u4e2a\u6216\u591a\u4e2a Pod\uff0cJob \u4f1a\u4e00\u76f4\u91cd\u65b0\u5c1d\u8bd5\u6267\u884c Pod\uff0c\u76f4\u5230\u6210\u529f\u7ec8\u6b62\u7684 Pod \u8fbe\u5230\u4e00\u5b9a\u6570\u91cf\u3002\u6210\u529f\u7ec8\u6b62\u7684 Pod \u8fbe\u5230\u6307\u5b9a\u7684\u6570\u91cf\u540e\uff0cJob \u4e5f\u968f\u4e4b\u7ed3\u675f\u3002\u5220\u9664 Job \u65f6\u4f1a\u4e00\u540c\u6e05\u9664\u8be5 Job \u521b\u5efa\u7684\u6240\u6709 Pod\u3002\u6682\u505c Job \u65f6\u5220\u9664\u8be5 Job \u4e2d\u7684\u6240\u6709\u6d3b\u8dc3 Pod\uff0c\u76f4\u5230 Job \u88ab\u7ee7\u7eed\u6267\u884c\u3002\u6709\u5173\u4efb\u52a1\uff08Job\uff09\u7684\u66f4\u591a\u4ecb\u7ecd\uff0c\u53ef\u53c2\u8003Job\u3002

              "},{"location":"admin/kpanda/workloads/create-job.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

              "},{"location":"admin/kpanda/workloads/create-job.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u4efb\u52a1\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

              3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u4efb\u52a1 \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u4efb\u52a1\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u91cd\u542f\u7b49\u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/workloads/create-job.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

              \u5728 \u521b\u5efa\u4efb\u52a1 \u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u57fa\u672c\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
              • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u4efb\u52a1\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
              • \u5b9e\u4f8b\u6570\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u5b9e\u4f8b\u6570\u91cf\u3002\u9ed8\u8ba4\u521b\u5efa 1 \u4e2a Pod \u5b9e\u4f8b\u3002
              • \u63cf\u8ff0\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u91cf\u5e94\u4e0d\u8d85\u8fc7 512 \u4e2a\u3002
              "},{"location":"admin/kpanda/workloads/create-job.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

              \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

              \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

              \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

              • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
              • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
              • \u955c\u50cf\uff1a
                • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
              • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
              • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
              • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                • \u6574\u5361\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                  • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                  • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                  • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                  • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                  • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                • Mig \u6a21\u5f0f
                  • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                  • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

              \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

              \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

              \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

              \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

              \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

              \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

              "},{"location":"admin/kpanda/workloads/create-job.html#_5","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

              \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u4efb\u52a1\u8bbe\u7f6e\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u4e24\u90e8\u5206\u3002

              \u4efb\u52a1\u8bbe\u7f6e\u6807\u7b7e\u4e0e\u6ce8\u89e3

              • \u5e76\u884c\u6570\uff1a\u4efb\u52a1\u6267\u884c\u8fc7\u7a0b\u4e2d\u5141\u8bb8\u540c\u65f6\u521b\u5efa\u7684\u6700\u5927 Pod \u6570\uff0c\u5e76\u884c\u6570\u5e94\u4e0d\u5927\u4e8e Pod \u603b\u6570\u3002\u9ed8\u8ba4\u4e3a 1\u3002
              • \u8d85\u65f6\u65f6\u95f4\uff1a\u8d85\u51fa\u8be5\u65f6\u95f4\u65f6\uff0c\u4efb\u52a1\u4f1a\u88ab\u6807\u8bc6\u4e3a\u6267\u884c\u5931\u8d25\uff0c\u4efb\u52a1\u4e0b\u7684\u6240\u6709 Pod \u90fd\u4f1a\u88ab\u5220\u9664\u3002\u4e3a\u7a7a\u65f6\u8868\u793a\u4e0d\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\u3002
              • \u91cd\u542f\u7b56\u7565\uff1a\u8bbe\u7f6e\u5931\u8d25\u65f6\u662f\u5426\u91cd\u542f Pod\u3002

              \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u4f8b Pod \u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

              "},{"location":"admin/kpanda/workloads/create-job.html#yaml","title":"YAML \u521b\u5efa","text":"

              \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u4efb\u52a1\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

              3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

              \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u4efb\u52a1\u7684 YAML \u793a\u4f8b
              kind: Job\napiVersion: batch/v1\nmetadata:\n  name: demo\n  namespace: default\n  uid: a9708239-0358-4aa1-87d3-a092c080836e\n  resourceVersion: '92751876'\n  generation: 1\n  creationTimestamp: '2022-12-26T10:52:22Z'\n  labels:\n    app: demo\n    controller-uid: a9708239-0358-4aa1-87d3-a092c080836e\n    job-name: demo\n  annotations:\n    revisions: >-\n      {\"1\":{\"status\":\"running\",\"uid\":\"a9708239-0358-4aa1-87d3-a092c080836e\",\"start-time\":\"2022-12-26T10:52:22Z\",\"completion-time\":\"0001-01-01T00:00:00Z\"}}\nspec:\n  parallelism: 1\n  backoffLimit: 6\n  selector:\n    matchLabels:\n      controller-uid: a9708239-0358-4aa1-87d3-a092c080836e\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: demo\n        controller-uid: a9708239-0358-4aa1-87d3-a092c080836e\n        job-name: demo\n    spec:\n      containers:\n        - name: container-4\n          image: nginx\n          resources:\n            limits:\n              cpu: 250m\n              memory: 512Mi\n            requests:\n              cpu: 250m\n              memory: 512Mi\n          lifecycle: {}\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n          securityContext:\n            privileged: false\n      restartPolicy: Never\n      terminationGracePeriodSeconds: 30\n      dnsPolicy: ClusterFirst\n      securityContext: {}\n      schedulerName: default-scheduler\n  completionMode: NonIndexed\n  suspend: false\nstatus:\n  startTime: '2022-12-26T10:52:22Z'\n  active: 1\n
              "},{"location":"admin/kpanda/workloads/create-statefulset.html","title":"\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\uff08StatefulSet\uff09","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\uff08StatefulSet\uff09\u3002

              \u6709\u72b6\u6001\u8d1f\u8f7d\uff08StatefulSet\uff09\u662f Kubernetes \u4e2d\u7684\u4e00\u79cd\u5e38\u89c1\u8d44\u6e90\uff0c\u548c\u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09\u7c7b\u4f3c\uff0c\u4e3b\u8981\u7528\u4e8e\u7ba1\u7406 Pod \u96c6\u5408\u7684\u90e8\u7f72\u548c\u4f38\u7f29\u3002\u4e8c\u8005\u7684\u4e3b\u8981\u533a\u522b\u5728\u4e8e\uff0cDeployment \u662f\u65e0\u72b6\u6001\u7684\uff0c\u4e0d\u4fdd\u5b58\u6570\u636e\uff0c\u800c StatefulSet \u662f\u6709\u72b6\u6001\u7684\uff0c\u4e3b\u8981\u7528\u4e8e\u7ba1\u7406\u6709\u72b6\u6001\u5e94\u7528\u3002\u6b64\u5916\uff0cStatefulSet \u4e2d\u7684 Pod \u5177\u6709\u6c38\u4e45\u4e0d\u53d8\u7684 ID\uff0c\u4fbf\u4e8e\u5728\u5339\u914d\u5b58\u50a8\u5377\u65f6\u8bc6\u522b\u5bf9\u5e94\u7684 Pod\u3002

              \u901a\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\uff0c\u53ef\u4ee5\u57fa\u4e8e\u76f8\u5e94\u7684\u89d2\u8272\u6743\u9650\u8f7b\u677e\u7ba1\u7406\u591a\u4e91\u591a\u96c6\u7fa4\u4e0a\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5305\u62ec\u5bf9\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u3001\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u3002

              "},{"location":"admin/kpanda/workloads/create-statefulset.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5728\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

              "},{"location":"admin/kpanda/workloads/create-statefulset.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u6709\u72b6\u6001\u8d1f\u8f7d\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

              2. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u6709\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u53f3\u4e0a\u89d2 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

              3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d \u5217\u8868\uff0c\u7b49\u5f85\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u53d8\u4e3a \u8fd0\u884c\u4e2d \u3002\u5982\u679c\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u51fa\u73b0\u5f02\u5e38\uff0c\u8bf7\u67e5\u770b\u5177\u4f53\u5f02\u5e38\u4fe1\u606f\uff0c\u53ef\u53c2\u8003\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u3002

                \u70b9\u51fb\u65b0\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u5217\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u64cd\u4f5c\u3002

              "},{"location":"admin/kpanda/workloads/create-statefulset.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"
              • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 deployment-01\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
              • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u8d1f\u8f7d\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
              • \u5b9e\u4f8b\u6570\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684 Pod \u5b9e\u4f8b\u6570\u91cf\uff0c\u9ed8\u8ba4\u521b\u5efa 1 \u4e2a Pod \u5b9e\u4f8b\u3002
              • \u63cf\u8ff0\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u4e0d\u8d85\u8fc7 512\u3002

              "},{"location":"admin/kpanda/workloads/create-statefulset.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

              \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

              \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

              \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

              • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
              • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
              • \u955c\u50cf\uff1a
                • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
              • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
              • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
              • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                • \u6574\u5361\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                  • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                  • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                  • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                  • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                  • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                  • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                • Mig \u6a21\u5f0f
                  • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                  • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

              \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

              \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

              \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\u3002\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

              \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

              \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

              \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

              "},{"location":"admin/kpanda/workloads/create-statefulset.html#_5","title":"\u670d\u52a1\u914d\u7f6e","text":"

              \u4e3a\u6709\u72b6\u6001\u8d1f\u8f7d\u914d\u7f6e\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u6709\u72b6\u6001\u8d1f\u8f7d\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

              1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

              2. \u53c2\u8003\u521b\u5efa\u670d\u52a1\uff0c\u914d\u7f6e\u670d\u52a1\u53c2\u6570\u3002

              3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              "},{"location":"admin/kpanda/workloads/create-statefulset.html#_6","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

              \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u8d1f\u8f7d\u7684\u7f51\u7edc\u914d\u7f6e\u3001\u5347\u7ea7\u7b56\u7565\u3001\u8c03\u5ea6\u7b56\u7565\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u56db\u90e8\u5206\uff0c\u53ef\u70b9\u51fb\u4e0b\u65b9\u7684\u9875\u7b7e\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

              \u7f51\u7edc\u914d\u7f6e\u5347\u7ea7\u7b56\u7565\u5bb9\u5668\u7ba1\u7406\u7b56\u7565\u8c03\u5ea6\u7b56\u7565\u6807\u7b7e\u4e0e\u6ce8\u89e3
              • \u5982\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u4e86 SpiderPool \u548c Multus \u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u5728\u7f51\u7edc\u914d\u7f6e\u4e2d\u914d\u7f6e\u5bb9\u5668\u7f51\u5361\u3002

              • DNS \u914d\u7f6e\uff1a\u5e94\u7528\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u4f1a\u51fa\u73b0\u5197\u4f59\u7684 DNS \u67e5\u8be2\u3002Kubernetes \u4e3a\u5e94\u7528\u63d0\u4f9b\u4e86\u4e0e DNS \u76f8\u5173\u7684\u914d\u7f6e\u9009\u9879\uff0c\u80fd\u591f\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u6709\u6548\u5730\u51cf\u5c11\u5197\u4f59\u7684 DNS \u67e5\u8be2\uff0c\u63d0\u5347\u4e1a\u52a1\u5e76\u53d1\u91cf\u3002

              • DNS \u7b56\u7565

                • Default\uff1a\u4f7f\u5bb9\u5668\u4f7f\u7528 kubelet \u7684 --resolv-conf \u53c2\u6570\u6307\u5411\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u3002\u8be5\u914d\u7f6e\u53ea\u80fd\u89e3\u6790\u6ce8\u518c\u5230\u4e92\u8054\u7f51\u4e0a\u7684\u5916\u90e8\u57df\u540d\uff0c\u65e0\u6cd5\u89e3\u6790\u96c6\u7fa4\u5185\u90e8\u57df\u540d\uff0c\u4e14\u4e0d\u5b58\u5728\u65e0\u6548\u7684 DNS \u67e5\u8be2\u3002
                • ClusterFirstWithHostNet\uff1a\u5e94\u7528\u5bf9\u63a5\u4e3b\u673a\u7684\u57df\u540d\u6587\u4ef6\u3002
                • ClusterFirst\uff1a\u5e94\u7528\u5bf9\u63a5 Kube-DNS/CoreDNS\u3002
                • None\uff1aKubernetes v1.9\uff08Beta in v1.10\uff09\u4e2d\u5f15\u5165\u7684\u65b0\u9009\u9879\u503c\u3002\u8bbe\u7f6e\u4e3a None \u4e4b\u540e\uff0c\u5fc5\u987b\u8bbe\u7f6e dnsConfig\uff0c\u6b64\u65f6\u5bb9\u5668\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u5c06\u5b8c\u5168\u901a\u8fc7 dnsConfig \u7684\u914d\u7f6e\u6765\u751f\u6210\u3002
              • \u57df\u540d\u670d\u52a1\u5668\uff1a\u586b\u5199\u57df\u540d\u670d\u52a1\u5668\u7684\u5730\u5740\uff0c\u4f8b\u5982 10.6.175.20 \u3002

              • \u641c\u7d22\u57df\uff1a\u57df\u540d\u67e5\u8be2\u65f6\u7684 DNS \u641c\u7d22\u57df\u5217\u8868\u3002\u6307\u5b9a\u540e\uff0c\u63d0\u4f9b\u7684\u641c\u7d22\u57df\u5217\u8868\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 search \u5b57\u6bb5\u4e2d\uff0c\u5e76\u5220\u9664\u91cd\u590d\u7684\u57df\u540d\u3002Kubernetes \u6700\u591a\u5141\u8bb8 6 \u4e2a\u641c\u7d22\u57df\u3002
              • Options\uff1aDNS \u7684\u914d\u7f6e\u9009\u9879\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5177\u6709 name \u5c5e\u6027\uff08\u5fc5\u9700\uff09\u548c value \u5c5e\u6027\uff08\u53ef\u9009\uff09\u3002\u8be5\u5b57\u6bb5\u4e2d\u7684\u5185\u5bb9\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 options \u5b57\u6bb5\u4e2d\uff0cdnsConfig \u7684 options \u7684\u67d0\u4e9b\u9009\u9879\u5982\u679c\u4e0e\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684\u9009\u9879\u51b2\u7a81\uff0c\u5219\u4f1a\u88ab dnsConfig \u6240\u8986\u76d6\u3002
              • \u4e3b\u673a\u522b\u540d\uff1a\u4e3a\u4e3b\u673a\u8bbe\u7f6e\u7684\u522b\u540d\u3002

              • \u5347\u7ea7\u65b9\u5f0f\uff1a \u6eda\u52a8\u5347\u7ea7 \u6307\u9010\u6b65\u7528\u65b0\u7248\u672c\u7684\u5b9e\u4f8b\u66ff\u6362\u65e7\u7248\u672c\u7684\u5b9e\u4f8b\uff0c\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e1a\u52a1\u6d41\u91cf\u4f1a\u540c\u65f6\u8d1f\u8f7d\u5747\u8861\u5206\u5e03\u5230\u65b0\u8001\u7684\u5b9e\u4f8b\u4e0a\uff0c\u56e0\u6b64\u4e1a\u52a1\u4e0d\u4f1a\u4e2d\u65ad\u3002 \u91cd\u5efa\u5347\u7ea7 \u6307\u5148\u5220\u9664\u8001\u7248\u672c\u7684\u8d1f\u8f7d\u5b9e\u4f8b\uff0c\u518d\u5b89\u88c5\u6307\u5b9a\u7684\u65b0\u7248\u672c\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2d\u4e1a\u52a1\u4f1a\u4e2d\u65ad\u3002
              • \u6700\u5927\u4fdd\u7559\u7248\u672c\u6570\uff1a\u8bbe\u7f6e\u7248\u672c\u56de\u6eda\u65f6\u4fdd\u7559\u7684\u65e7\u7248\u672c\u6570\u91cf\u3002\u9ed8\u8ba4 10\u3002
              • \u7f29\u5bb9\u65f6\u95f4\u7a97\uff1a\u8d1f\u8f7d\u505c\u6b62\u524d\u547d\u4ee4\u7684\u6267\u884c\u65f6\u95f4\u7a97\uff080-9,999\u79d2\uff09\uff0c\u9ed8\u8ba4 30 \u79d2\u3002

              Kubernetes v1.7 \u53ca\u5176\u4e4b\u540e\u7684\u7248\u672c\u53ef\u4ee5\u901a\u8fc7 .spec.podManagementPolicy \u8bbe\u7f6e Pod \u7684\u7ba1\u7406\u7b56\u7565\uff0c\u652f\u6301\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\uff1a

              • \u6309\u5e8f\u7b56\u7565\uff08OrderedReady\uff09 \uff1a\u9ed8\u8ba4\u7684 Pod \u7ba1\u7406\u7b56\u7565\uff0c\u8868\u793a\u6309\u987a\u5e8f\u90e8\u7f72 Pod\uff0c\u53ea\u6709\u524d\u4e00\u4e2a Pod \u90e8\u7f72 \u6210\u529f\u5b8c\u6210\u540e\uff0c\u6709\u72b6\u6001\u8d1f\u8f7d\u624d\u4f1a\u5f00\u59cb\u90e8\u7f72\u4e0b\u4e00\u4e2a Pod\u3002\u5220\u9664 Pod \u65f6\u5219\u91c7\u7528\u9006\u5e8f\uff0c\u6700\u540e\u521b\u5efa\u7684\u6700\u5148\u88ab\u5220\u9664\u3002

              • \u5e76\u884c\u7b56\u7565\uff08Parallel\uff09 \uff1a\u5e76\u884c\u521b\u5efa\u6216\u5220\u9664\u5bb9\u5668\uff0c\u548c Deployment \u7c7b\u578b\u7684 Pod \u4e00\u6837\u3002StatefulSet \u63a7\u5236\u5668\u5e76\u884c\u5730\u542f\u52a8\u6216\u7ec8\u6b62\u6240\u6709\u7684\u5bb9\u5668\u3002\u542f\u52a8\u6216\u8005\u7ec8\u6b62\u5176\u4ed6 Pod \u524d\uff0c\u65e0\u9700\u7b49\u5f85 Pod \u8fdb\u5165 Running \u548c ready \u6216\u8005\u5b8c\u5168\u505c\u6b62\u72b6\u6001\u3002 \u8fd9\u4e2a\u9009\u9879\u53ea\u4f1a\u5f71\u54cd\u6269\u7f29\u64cd\u4f5c\u7684\u884c\u4e3a\uff0c\u4e0d\u5f71\u54cd\u66f4\u65b0\u65f6\u7684\u987a\u5e8f\u3002

              • \u5bb9\u5fcd\u65f6\u95f4\uff1a\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u5c06\u8d1f\u8f7d\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002
              • \u8282\u70b9\u4eb2\u548c\u6027\uff1a\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002
              • \u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
              • \u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u4e0d\u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
              • \u62d3\u6251\u57df\uff1a\u5373 topologyKey\uff0c\u7528\u4e8e\u6307\u5b9a\u53ef\u4ee5\u8c03\u5ea6\u7684\u4e00\u7ec4\u8282\u70b9\u3002\u4f8b\u5982\uff0c kubernetes.io/os \u8868\u793a\u53ea\u8981\u67d0\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u7684\u8282\u70b9\u6ee1\u8db3 labelSelector \u7684\u6761\u4ef6\u5c31\u53ef\u4ee5\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002

              \u5177\u4f53\u8be6\u60c5\u8bf7\u53c2\u8003\u8c03\u5ea6\u7b56\u7565\u3002

              ![\u8c03\u5ea6\u7b56\u7565](../../../images/deploy15_1.png)\n

              \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u548c\u5bb9\u5668\u7ec4\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

              "},{"location":"admin/kpanda/workloads/create-statefulset.html#yaml","title":"YAML \u521b\u5efa","text":"

              \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

              2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u6709\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

              3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

              \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\u7684 YAML \u793a\u4f8b
              kind: StatefulSet\napiVersion: apps/v1\nmetadata:\n  name: test-mysql-123-mysql\n  namespace: default\n  uid: d3f45527-a0ab-4b22-9013-5842a06f4e0e\n  resourceVersion: '20504385'\n  generation: 1\n  creationTimestamp: '2022-09-22T09:34:10Z'\n  ownerReferences:\n    - apiVersion: mysql.presslabs.org/v1alpha1\n      kind: MysqlCluster\n      name: test-mysql-123\n      uid: 5e877cc3-5167-49da-904e-820940cf1a6d\n      controller: true\n      blockOwnerDeletion: true\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app.kubernetes.io/managed-by: mysql.presslabs.org\n      app.kubernetes.io/name: mysql\n      mysql.presslabs.org/cluster: test-mysql-123\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app.kubernetes.io/component: database\n        app.kubernetes.io/instance: test-mysql-123\n        app.kubernetes.io/managed-by: mysql.presslabs.org\n        app.kubernetes.io/name: mysql\n        app.kubernetes.io/version: 5.7.31\n        mysql.presslabs.org/cluster: test-mysql-123\n      annotations:\n        config_rev: '13941099'\n        prometheus.io/port: '9125'\n        prometheus.io/scrape: 'true'\n        secret_rev: '13941101'\n    spec:\n      volumes:\n        - name: conf\n          emptyDir: {}\n        - name: init-scripts\n          emptyDir: {}\n        - name: config-map\n          configMap:\n            name: test-mysql-123-mysql\n            defaultMode: 420\n        - name: data\n          persistentVolumeClaim:\n            claimName: data\n      initContainers:\n        - name: init\n          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1\n          args:\n            - clone-and-init\n          envFrom:\n            - secretRef:\n                name: test-mysql-123-mysql-operated\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: BACKUP_USER\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: BACKUP_USER\n                  optional: true\n            - name: BACKUP_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: BACKUP_PASSWORD\n                  optional: true\n          resources: {}\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n            - name: config-map\n              mountPath: /mnt/conf\n            - name: data\n              mountPath: /var/lib/mysql\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n      containers:\n        - name: mysql\n          image: docker.m.daocloud.io/mysql:5.7.31\n          ports:\n            - name: mysql\n              containerPort: 3306\n              protocol: TCP\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: ORCH_CLUSTER_ALIAS\n              value: test-mysql-123.default\n            - name: ORCH_HTTP_API\n              value: http://mysql-operator.mcamel-system/api\n            - name: MYSQL_ROOT_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: ROOT_PASSWORD\n                  optional: false\n            - name: MYSQL_USER\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: USER\n                  optional: true\n            - name: MYSQL_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: PASSWORD\n                  optional: true\n            - name: MYSQL_DATABASE\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: DATABASE\n                  optional: true\n          resources:\n            limits:\n              cpu: '1'\n              memory: 1Gi\n            requests:\n              cpu: 100m\n              memory: 512Mi\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n            - name: data\n              mountPath: /var/lib/mysql\n          livenessProbe:\n            exec:\n              command:\n                - mysqladmin\n                - '--defaults-file=/etc/mysql/client.conf'\n                - ping\n            initialDelaySeconds: 60\n            timeoutSeconds: 5\n            periodSeconds: 5\n            successThreshold: 1\n            failureThreshold: 3\n          readinessProbe:\n            exec:\n              command:\n                - /bin/sh\n                - '-c'\n                - >-\n                  test $(mysql --defaults-file=/etc/mysql/client.conf -NB -e\n                  'SELECT COUNT(*) FROM sys_operator.status WHERE\n                  name=\"configured\" AND value=\"1\"') -eq 1\n            initialDelaySeconds: 5\n            timeoutSeconds: 5\n            periodSeconds: 2\n            successThreshold: 1\n            failureThreshold: 3\n          lifecycle:\n            preStop:\n              exec:\n                command:\n                  - bash\n                  - /etc/mysql/pre-shutdown-ha.sh\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: sidecar\n          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1\n          args:\n            - config-and-serve\n          ports:\n            - name: sidecar-http\n              containerPort: 8080\n              protocol: TCP\n          envFrom:\n            - secretRef:\n                name: test-mysql-123-mysql-operated\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: XTRABACKUP_TARGET_DIR\n              value: /tmp/xtrabackup_backupfiles/\n          resources:\n            limits:\n              cpu: '1'\n              memory: 1Gi\n            requests:\n              cpu: 10m\n              memory: 64Mi\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n            - name: data\n              mountPath: /var/lib/mysql\n          readinessProbe:\n            httpGet:\n              path: /health\n              port: 8080\n              scheme: HTTP\n            initialDelaySeconds: 30\n            timeoutSeconds: 5\n            periodSeconds: 5\n            successThreshold: 1\n            failureThreshold: 3\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: metrics-exporter\n          image: prom/mysqld-exporter:v0.13.0\n          args:\n            - '--web.listen-address=0.0.0.0:9125'\n            - '--web.telemetry-path=/metrics'\n            - '--collect.heartbeat'\n            - '--collect.heartbeat.database=sys_operator'\n          ports:\n            - name: prometheus\n              containerPort: 9125\n              protocol: TCP\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: USER\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: METRICS_EXPORTER_USER\n                  optional: false\n            - name: PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: METRICS_EXPORTER_PASSWORD\n                  optional: false\n            - name: DATA_SOURCE_NAME\n              value: $(USER):$(PASSWORD)@(127.0.0.1:3306)/\n          resources:\n            limits:\n              cpu: 100m\n              memory: 128Mi\n            requests:\n              cpu: 10m\n              memory: 32Mi\n          livenessProbe:\n            httpGet:\n              path: /metrics\n              port: 9125\n              scheme: HTTP\n            initialDelaySeconds: 30\n            timeoutSeconds: 30\n            periodSeconds: 30\n            successThreshold: 1\n            failureThreshold: 3\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: pt-heartbeat\n          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1\n          args:\n            - pt-heartbeat\n            - '--update'\n            - '--replace'\n            - '--check-read-only'\n            - '--create-table'\n            - '--database'\n            - sys_operator\n            - '--table'\n            - heartbeat\n            - '--utc'\n            - '--defaults-file'\n            - /etc/mysql/heartbeat.conf\n            - '--fail-successive-errors=20'\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n          resources:\n            limits:\n              cpu: 100m\n              memory: 64Mi\n            requests:\n              cpu: 10m\n              memory: 32Mi\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n      restartPolicy: Always\n      terminationGracePeriodSeconds: 30\n      dnsPolicy: ClusterFirst\n      securityContext:\n        runAsUser: 999\n        fsGroup: 999\n      affinity:\n        podAntiAffinity:\n          preferredDuringSchedulingIgnoredDuringExecution:\n            - weight: 100\n              podAffinityTerm:\n                labelSelector:\n                  matchLabels:\n                    app.kubernetes.io/component: database\n                    app.kubernetes.io/instance: test-mysql-123\n                    app.kubernetes.io/managed-by: mysql.presslabs.org\n                    app.kubernetes.io/name: mysql\n                    app.kubernetes.io/version: 5.7.31\n                    mysql.presslabs.org/cluster: test-mysql-123\n                topologyKey: kubernetes.io/hostname\n      schedulerName: default-scheduler\n  volumeClaimTemplates:\n    - kind: PersistentVolumeClaim\n      apiVersion: v1\n      metadata:\n        name: data\n        creationTimestamp: null\n        ownerReferences:\n          - apiVersion: mysql.presslabs.org/v1alpha1\n            kind: MysqlCluster\n            name: test-mysql-123\n            uid: 5e877cc3-5167-49da-904e-820940cf1a6d\n            controller: true\n      spec:\n        accessModes:\n          - ReadWriteOnce\n        resources:\n          limits:\n            storage: 1Gi\n          requests:\n            storage: 1Gi\n        storageClassName: local-path\n        volumeMode: Filesystem\n      status:\n        phase: Pending\n  serviceName: mysql\n  podManagementPolicy: OrderedReady\n  updateStrategy:\n    type: RollingUpdate\n    rollingUpdate:\n      partition: 0\n  revisionHistoryLimit: 10\nstatus:\n  observedGeneration: 1\n  replicas: 1\n  readyReplicas: 1\n  currentReplicas: 1\n  updatedReplicas: 1\n  currentRevision: test-mysql-123-mysql-6b8f5577c7\n  updateRevision: test-mysql-123-mysql-6b8f5577c7\n  collisionCount: 0\n  availableReplicas: 1\n
              "},{"location":"admin/kpanda/workloads/pod-config/env-variables.html","title":"\u914d\u7f6e\u73af\u5883\u53d8\u91cf","text":"

              \u73af\u5883\u53d8\u91cf\u662f\u6307\u5bb9\u5668\u8fd0\u884c\u73af\u5883\u4e2d\u8bbe\u5b9a\u7684\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u4e8e\u7ed9 Pod \u6dfb\u52a0\u73af\u5883\u6807\u5fd7\u6216\u4f20\u9012\u914d\u7f6e\u7b49\uff0c\u652f\u6301\u901a\u8fc7\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u4e3a Pod \u914d\u7f6e\u73af\u5883\u53d8\u91cf\u3002

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u5728\u539f\u751f Kubernetes \u7684\u57fa\u7840\u4e0a\u589e\u52a0\u4e86\u56fe\u5f62\u5316\u754c\u9762\u4e3a Pod \u914d\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u652f\u6301\u4ee5\u4e0b\u51e0\u79cd\u914d\u7f6e\u65b9\u5f0f\uff1a

              • \u952e\u503c\u5bf9\uff08Key/Value Pair\uff09\uff1a\u5c06\u81ea\u5b9a\u4e49\u7684\u952e\u503c\u5bf9\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf
              • \u8d44\u6e90\u5f15\u7528\uff08Resource\uff09\uff1a\u5c06 Container \u5b9a\u4e49\u7684\u5b57\u6bb5\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff0c\u4f8b\u5982\u5bb9\u5668\u7684\u5185\u5b58\u9650\u5236\u3001\u526f\u672c\u6570\u7b49
              • \u53d8\u91cf/\u53d8\u91cf\u5f15\u7528\uff08Pod Field\uff09\uff1a\u5c06 Pod \u5b57\u6bb5\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff0c\u4f8b\u5982 Pod \u7684\u540d\u79f0
              • \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165\uff08ConfigMap key\uff09\uff1a\u5bfc\u5165\u914d\u7f6e\u9879\u4e2d\u67d0\u4e2a\u952e\u7684\u503c\u4f5c\u4e3a\u67d0\u4e2a\u73af\u5883\u53d8\u91cf\u7684\u503c
              • \u5bc6\u94a5\u952e\u503c\u5bfc\u5165\uff08Secret Key\uff09\uff1a\u4f7f\u7528\u6765\u81ea Secret \u4e2d\u7684\u6570\u636e\u5b9a\u4e49\u73af\u5883\u53d8\u91cf\u7684\u503c
              • \u5bc6\u94a5\u5bfc\u5165\uff08Secret\uff09\uff1a\u5c06 Secret \u4e2d\u7684\u6240\u6709\u952e\u503c\u90fd\u5bfc\u5165\u4e3a\u73af\u5883\u53d8\u91cf
              • \u914d\u7f6e\u9879\u5bfc\u5165\uff08ConfigMap\uff09\uff1a\u5c06\u914d\u7f6e\u9879\u4e2d\u6240\u6709\u952e\u503c\u90fd\u5bfc\u5165\u4e3a\u73af\u5883\u53d8\u91cf
              "},{"location":"admin/kpanda/workloads/pod-config/health-check.html","title":"\u5bb9\u5668\u7684\u5065\u5eb7\u68c0\u67e5","text":"

              \u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u6839\u636e\u7528\u6237\u9700\u6c42\uff0c\u68c0\u67e5\u5bb9\u5668\u7684\u5065\u5eb7\u72b6\u51b5\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5185\u7684\u5e94\u7528\u7a0b\u5e8f\u5165\u5982\u679c\u5f02\u5e38\uff0c\u5bb9\u5668\u4f1a\u81ea\u52a8\u8fdb\u884c\u91cd\u542f\u6062\u590d\u3002Kubernetes \u63d0\u4f9b\u4e86\u5b58\u6d3b\uff08Liveness\uff09\u68c0\u67e5\u3001\u5c31\u7eea\uff08Readiness\uff09\u68c0\u67e5\u548c\u542f\u52a8\uff08Startup\uff09\u68c0\u67e5\u3002

              • \u5b58\u6d3b\u68c0\u67e5\uff08LivenessProbe\uff09 \u53ef\u63a2\u6d4b\u5230\u5e94\u7528\u6b7b\u9501\uff08\u5e94\u7528\u7a0b\u5e8f\u5728\u8fd0\u884c\uff0c\u4f46\u662f\u65e0\u6cd5\u7ee7\u7eed\u6267\u884c\u540e\u9762\u7684\u6b65\u9aa4\uff09\u60c5\u51b5\u3002 \u91cd\u542f\u8fd9\u79cd\u72b6\u6001\u4e0b\u7684\u5bb9\u5668\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\uff0c\u5373\u4f7f\u5176\u4e2d\u5b58\u5728\u7f3a\u9677\u3002

              • \u5c31\u7eea\u68c0\u67e5\uff08ReadinessProbe\uff09 \u53ef\u63a2\u77e5\u5bb9\u5668\u4f55\u65f6\u51c6\u5907\u597d\u63a5\u53d7\u8bf7\u6c42\u6d41\u91cf\uff0c\u5f53\u4e00\u4e2a Pod \u5185\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5c31\u7eea\u65f6\uff0c\u624d\u80fd\u8ba4\u4e3a\u8be5 Pod \u5c31\u7eea\u3002 \u8fd9\u79cd\u4fe1\u53f7\u7684\u4e00\u4e2a\u7528\u9014\u5c31\u662f\u63a7\u5236\u54ea\u4e2a Pod \u4f5c\u4e3a Service \u7684\u540e\u7aef\u3002 \u82e5 Pod \u5c1a\u672a\u5c31\u7eea\uff0c\u4f1a\u88ab\u4ece Service \u7684\u8d1f\u8f7d\u5747\u8861\u5668\u4e2d\u5254\u9664\u3002

              • \u542f\u52a8\u68c0\u67e5\uff08StartupProbe\uff09 \u53ef\u4ee5\u4e86\u89e3\u5e94\u7528\u5bb9\u5668\u4f55\u65f6\u542f\u52a8\uff0c\u914d\u7f6e\u540e\uff0c\u53ef\u63a7\u5236\u5bb9\u5668\u5728\u542f\u52a8\u6210\u529f\u540e\u518d\u8fdb\u884c\u5b58\u6d3b\u6027\u548c\u5c31\u7eea\u6001\u68c0\u67e5\uff0c \u786e\u4fdd\u8fd9\u4e9b\u5b58\u6d3b\u3001\u5c31\u7eea\u63a2\u6d4b\u5668\u4e0d\u4f1a\u5f71\u54cd\u5e94\u7528\u7684\u542f\u52a8\u3002 \u542f\u52a8\u63a2\u6d4b\u53ef\u4ee5\u7528\u4e8e\u5bf9\u6162\u542f\u52a8\u5bb9\u5668\u8fdb\u884c\u5b58\u6d3b\u6027\u68c0\u6d4b\uff0c\u907f\u514d\u5b83\u4eec\u5728\u542f\u52a8\u8fd0\u884c\u4e4b\u524d\u5c31\u88ab\u6740\u6389\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/health-check.html#_2","title":"\u5b58\u6d3b\u548c\u5c31\u7eea\u68c0\u67e5","text":"

              \u5b58\u6d3b\u68c0\u67e5\uff08LivenessProbe\uff09\u7684\u914d\u7f6e\u548c\u5c31\u7eea\u68c0\u67e5\uff08ReadinessProbe\uff09\u7684\u914d\u7f6e\u53c2\u6570\u76f8\u4f3c\uff0c \u552f\u4e00\u533a\u522b\u662f\u8981\u4f7f\u7528 readinessProbe \u5b57\u6bb5\uff0c\u800c\u4e0d\u662f livenessProbe \u5b57\u6bb5\u3002

              HTTP GET \u53c2\u6570\u8bf4\u660e\uff1a

              \u53c2\u6570 \u53c2\u6570\u8bf4\u660e \u8def\u5f84\uff08 Path\uff09 \u8bbf\u95ee\u7684\u8bf7\u6c42\u8def\u5f84\u3002\u5982\uff1a \u793a\u4f8b\u4e2d\u7684 /healthz \u8def\u5f84 \u7aef\u53e3(Port) \u670d\u52a1\u76d1\u542c\u7aef\u53e3\u3002 \u5982\uff1a \u793a\u4f8b\u4e2d\u7684 8080 \u7aef\u53e3 \u534f\u8bae \u8bbf\u95ee\u534f\u8bae\uff0cHttp \u6216\u8005Https \u5ef6\u8fdf\u65f6\u95f4\uff08initialDelaySeconds\uff09 \u5ef6\u8fdf\u68c0\u67e5\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\uff0c\u6b64\u8bbe\u7f6e\u4e0e\u4e1a\u52a1\u7a0b\u5e8f\u6b63\u5e38\u542f\u52a8\u65f6\u95f4\u76f8\u5173\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a30\uff0c\u8868\u660e\u5bb9\u5668\u542f\u52a8\u540e30\u79d2\u624d\u5f00\u59cb\u5065\u5eb7\u68c0\u67e5\uff0c\u8be5\u65f6\u95f4\u662f\u9884\u7559\u7ed9\u4e1a\u52a1\u7a0b\u5e8f\u542f\u52a8\u7684\u65f6\u95f4\u3002 \u8d85\u65f6\u65f6\u95f4\uff08timeoutSeconds\uff09 \u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a10\uff0c\u8868\u660e\u6267\u884c\u5065\u5eb7\u68c0\u67e5\u7684\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a10\u79d2\uff0c\u5982\u679c\u8d85\u8fc7\u8fd9\u4e2a\u65f6\u95f4\uff0c\u672c\u6b21\u5065\u5eb7\u68c0\u67e5\u5c31\u88ab\u89c6\u4e3a\u5931\u8d25\u3002\u82e5\u8bbe\u7f6e\u4e3a0\u6216\u4e0d\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a1\u79d2\u3002 \u8d85\u65f6\u65f6\u95f4\uff08timeoutSeconds\uff09 \u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a10\uff0c\u8868\u660e\u6267\u884c\u5065\u5eb7\u68c0\u67e5\u7684\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a10\u79d2\uff0c\u5982\u679c\u8d85\u8fc7\u8fd9\u4e2a\u65f6\u95f4\uff0c\u672c\u6b21\u5065\u5eb7\u68c0\u67e5\u5c31\u88ab\u89c6\u4e3a\u5931\u8d25\u3002\u82e5\u8bbe\u7f6e\u4e3a0\u6216\u4e0d\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a1\u79d2\u3002 \u6210\u529f\u9608\u503c\uff08successThreshold\uff09 \u63a2\u6d4b\u5931\u8d25\u540e\uff0c\u88ab\u89c6\u4e3a\u6210\u529f\u7684\u6700\u5c0f\u8fde\u7eed\u6210\u529f\u6570\u3002\u9ed8\u8ba4\u503c\u662f 1\uff0c\u6700\u5c0f\u503c\u662f 1\u3002\u5b58\u6d3b\u548c\u542f\u52a8\u63a2\u6d4b\u7684\u8fd9\u4e2a\u503c\u5fc5\u987b\u662f 1\u3002 \u6700\u5927\u5931\u8d25\u6b21\u6570\uff08failureThreshold\uff09 \u5f53\u63a2\u6d4b\u5931\u8d25\u65f6\u91cd\u8bd5\u7684\u6b21\u6570\u3002\u5b58\u6d3b\u63a2\u6d4b\u60c5\u51b5\u4e0b\u7684\u653e\u5f03\u5c31\u610f\u5473\u7740\u91cd\u65b0\u542f\u52a8\u5bb9\u5668\u3002\u5c31\u7eea\u63a2\u6d4b\u60c5\u51b5\u4e0b\u7684\u653e\u5f03 Pod \u4f1a\u88ab\u6253\u4e0a\u672a\u5c31\u7eea\u7684\u6807\u7b7e\u3002\u9ed8\u8ba4\u503c\u662f 3\u3002\u6700\u5c0f\u503c\u662f 1\u3002"},{"location":"admin/kpanda/workloads/pod-config/health-check.html#http-get","title":"\u4f7f\u7528 HTTP GET \u8bf7\u6c42\u68c0\u67e5","text":"

              YAML \u793a\u4f8b\uff1a

              apiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    test: liveness\n  name: liveness-http\nspec:\n  containers:\n  - name: liveness\n    image: k8s.gcr.io/liveness\n    args:\n    - /server\n    livenessProbe:\n      httpGet:\n        path: /healthz  # \u8bbf\u95ee\u7684\u8bf7\u6c42\u8def\u5f84\n        port: 8080  # \u670d\u52a1\u76d1\u542c\u7aef\u53e3\n        httpHeaders:\n        - name: Custom-Header\n          value: Awesome\n      initialDelaySeconds: 3  # kubelet \u5728\u6267\u884c\u7b2c\u4e00\u6b21\u63a2\u6d4b\u524d\u5e94\u8be5\u7b49\u5f85 3 \u79d2\n      periodSeconds: 3   # kubelet \u6bcf\u9694 3 \u79d2\u6267\u884c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\n

              \u6309\u7167\u8bbe\u5b9a\u7684\u89c4\u5219\uff0ckubelet \u5411\u5bb9\u5668\u5185\u8fd0\u884c\u7684\u670d\u52a1\uff08\u670d\u52a1\u5728\u76d1\u542c 8080 \u7aef\u53e3\uff09\u53d1\u9001\u4e00\u4e2a HTTP GET \u8bf7\u6c42\u6765\u6267\u884c\u63a2\u6d4b\u3002\u5982\u679c\u670d\u52a1\u5668\u4e0a /healthz \u8def\u5f84\u4e0b\u7684\u5904\u7406\u7a0b\u5e8f\u8fd4\u56de\u6210\u529f\u4ee3\u7801\uff0c\u5219 kubelet \u8ba4\u4e3a\u5bb9\u5668\u662f\u5065\u5eb7\u5b58\u6d3b\u7684\u3002 \u5982\u679c\u5904\u7406\u7a0b\u5e8f\u8fd4\u56de\u5931\u8d25\u4ee3\u7801\uff0c\u5219 kubelet \u4f1a\u6740\u6b7b\u8fd9\u4e2a\u5bb9\u5668\u5e76\u5c06\u5176\u91cd\u542f\u3002\u8fd4\u56de\u5927\u4e8e\u6216\u7b49\u4e8e 200 \u5e76\u4e14\u5c0f\u4e8e 400 \u7684\u4efb\u4f55\u4ee3\u7801\u90fd\u6807\u793a\u6210\u529f\uff0c\u5176\u5b83\u8fd4\u56de\u4ee3\u7801\u90fd\u6807\u793a\u5931\u8d25\u3002 \u5bb9\u5668\u5b58\u6d3b\u671f\u95f4\u7684\u6700\u5f00\u59cb 10 \u79d2\u4e2d\uff0c /healthz \u5904\u7406\u7a0b\u5e8f\u8fd4\u56de 200 \u7684\u72b6\u6001\u7801\u3002 \u4e4b\u540e\u5904\u7406\u7a0b\u5e8f\u8fd4\u56de 500 \u7684\u72b6\u6001\u7801\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/health-check.html#tcp","title":"\u4f7f\u7528 TCP \u7aef\u53e3\u68c0\u67e5","text":"

              TCP \u7aef\u53e3\u53c2\u6570\u8bf4\u660e\uff1a

              \u53c2\u6570 \u53c2\u6570\u8bf4\u660e \u7aef\u53e3(Port) \u670d\u52a1\u76d1\u542c\u7aef\u53e3\u3002 \u5982\uff1a \u793a\u4f8b\u4e2d\u7684 8080 \u7aef\u53e3 \u5ef6\u8fdf\u65f6\u95f4\uff08initialDelaySeconds\uff09 \u5ef6\u8fdf\u68c0\u67e5\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\uff0c\u6b64\u8bbe\u7f6e\u4e0e\u4e1a\u52a1\u7a0b\u5e8f\u6b63\u5e38\u542f\u52a8\u65f6\u95f4\u76f8\u5173\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a30\uff0c\u8868\u660e\u5bb9\u5668\u542f\u52a8\u540e30\u79d2\u624d\u5f00\u59cb\u5065\u5eb7\u68c0\u67e5\uff0c\u8be5\u65f6\u95f4\u662f\u9884\u7559\u7ed9\u4e1a\u52a1\u7a0b\u5e8f\u542f\u52a8\u7684\u65f6\u95f4\u3002 \u8d85\u65f6\u65f6\u95f4\uff08timeoutSeconds\uff09 \u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a10\uff0c\u8868\u660e\u6267\u884c\u5065\u5eb7\u68c0\u67e5\u7684\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a10\u79d2\uff0c\u5982\u679c\u8d85\u8fc7\u8fd9\u4e2a\u65f6\u95f4\uff0c\u672c\u6b21\u5065\u5eb7\u68c0\u67e5\u5c31\u88ab\u89c6\u4e3a\u5931\u8d25\u3002\u82e5\u8bbe\u7f6e\u4e3a0\u6216\u4e0d\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a1\u79d2\u3002

              \u5bf9\u4e8e\u63d0\u4f9bTCP\u901a\u4fe1\u670d\u52a1\u7684\u5bb9\u5668\uff0c\u57fa\u4e8e\u6b64\u914d\u7f6e\uff0c\u6309\u7167\u8bbe\u5b9a\u89c4\u5219\u96c6\u7fa4\u5bf9\u8be5\u5bb9\u5668\u5efa\u7acbTCP\u8fde\u63a5\uff0c\u5982\u679c\u8fde\u63a5\u6210\u529f\uff0c\u5219\u8bc1\u660e\u63a2\u6d4b\u6210\u529f\uff0c\u5426\u5219\u63a2\u6d4b\u5931\u8d25\u3002\u9009\u62e9TCP\u7aef\u53e3\u63a2\u6d4b\u65b9\u5f0f\uff0c\u5fc5\u987b\u6307\u5b9a\u5bb9\u5668\u76d1\u542c\u7684\u7aef\u53e3\u3002

              YAML \u793a\u4f8b\uff1a

              apiVersion: v1\nkind: Pod\nmetadata:\n  name: goproxy\n  labels:\n    app: goproxy\nspec:\n  containers:\n  - name: goproxy\n    image: k8s.gcr.io/goproxy:0.1\n    ports:\n    - containerPort: 8080\n    readinessProbe:\n      tcpSocket:\n        port: 8080\n      initialDelaySeconds: 5\n      periodSeconds: 10\n    livenessProbe:\n      tcpSocket:\n        port: 8080\n      initialDelaySeconds: 15\n      periodSeconds: 20\n

              \u6b64\u793a\u4f8b\u540c\u65f6\u4f7f\u7528\u5c31\u7eea\u548c\u5b58\u6d3b\u63a2\u9488\u3002kubelet \u5728\u5bb9\u5668\u542f\u52a8 5 \u79d2\u540e\u53d1\u9001\u7b2c\u4e00\u4e2a\u5c31\u7eea\u63a2\u6d4b\u3002 \u5c1d\u8bd5\u8fde\u63a5 goproxy \u5bb9\u5668\u7684 8080 \u7aef\u53e3\uff0c \u5982\u679c\u63a2\u6d4b\u6210\u529f\uff0c\u8fd9\u4e2a Pod \u4f1a\u88ab\u6807\u8bb0\u4e3a\u5c31\u7eea\u72b6\u6001\uff0ckubelet \u5c06\u7ee7\u7eed\u6bcf\u9694 10 \u79d2\u8fd0\u884c\u4e00\u6b21\u68c0\u6d4b\u3002

              \u9664\u4e86\u5c31\u7eea\u63a2\u6d4b\uff0c\u8fd9\u4e2a\u914d\u7f6e\u5305\u62ec\u4e86\u4e00\u4e2a\u5b58\u6d3b\u63a2\u6d4b\u3002 kubelet \u4f1a\u5728\u5bb9\u5668\u542f\u52a8 15 \u79d2\u540e\u8fdb\u884c\u7b2c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\u3002 \u5c31\u7eea\u63a2\u6d4b\u4f1a\u5c1d\u8bd5\u8fde\u63a5 goproxy \u5bb9\u5668\u7684 8080 \u7aef\u53e3\u3002 \u5982\u679c\u5b58\u6d3b\u63a2\u6d4b\u5931\u8d25\uff0c\u5bb9\u5668\u4f1a\u88ab\u91cd\u65b0\u542f\u52a8\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/health-check.html#_3","title":"\u6267\u884c\u547d\u4ee4\u68c0\u67e5","text":"

              YAML \u793a\u4f8b:

              apiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    test: liveness\n  name: liveness-exec\nspec:\n  containers:\n  - name: liveness\n    image: k8s.gcr.io/busybox\n    args:\n    - /bin/sh\n    - -c\n    - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600\n    livenessProbe:\n      exec:\n        command:\n        - cat\n        - /tmp/healthy\n      initialDelaySeconds: 5 # kubelet \u5728\u6267\u884c\u7b2c\u4e00\u6b21\u63a2\u6d4b\u524d\u7b49\u5f85 5 \u79d2\n      periodSeconds: 5  #kubelet \u6bcf 5 \u79d2\u6267\u884c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\n

              periodSeconds \u5b57\u6bb5\u6307\u5b9a\u4e86 kubelet \u6bcf 5 \u79d2\u6267\u884c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\uff0c initialDelaySeconds \u5b57\u6bb5\u6307\u5b9a kubelet \u5728\u6267\u884c\u7b2c\u4e00\u6b21\u63a2\u6d4b\u524d\u7b49\u5f85 5 \u79d2\u3002\u6309\u7167\u8bbe\u5b9a\u89c4\u5219\uff0c\u96c6\u7fa4\u5468\u671f\u6027\u7684\u901a\u8fc7 kubelet \u5728\u5bb9\u5668\u5185\u6267\u884c\u547d\u4ee4 cat /tmp/healthy \u6765\u8fdb\u884c\u63a2\u6d4b\u3002 \u5982\u679c\u547d\u4ee4\u6267\u884c\u6210\u529f\u5e76\u4e14\u8fd4\u56de\u503c\u4e3a 0\uff0ckubelet \u5c31\u4f1a\u8ba4\u4e3a\u8fd9\u4e2a\u5bb9\u5668\u662f\u5065\u5eb7\u5b58\u6d3b\u7684\u3002 \u5982\u679c\u8fd9\u4e2a\u547d\u4ee4\u8fd4\u56de\u975e 0 \u503c\uff0ckubelet \u4f1a\u6740\u6b7b\u8fd9\u4e2a\u5bb9\u5668\u5e76\u91cd\u65b0\u542f\u52a8\u5b83\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/health-check.html#_4","title":"\u4f7f\u7528\u542f\u52a8\u524d\u68c0\u67e5\u4fdd\u62a4\u6162\u542f\u52a8\u5bb9\u5668","text":"

              \u6709\u4e9b\u5e94\u7528\u5728\u542f\u52a8\u65f6\u9700\u8981\u8f83\u957f\u7684\u521d\u59cb\u5316\u65f6\u95f4\uff0c\u9700\u8981\u4f7f\u7528\u76f8\u540c\u7684\u547d\u4ee4\u6765\u8bbe\u7f6e\u542f\u52a8\u63a2\u6d4b\uff0c\u9488\u5bf9 HTTP \u6216 TCP \u68c0\u6d4b\uff0c\u53ef\u4ee5\u901a\u8fc7\u5c06 failureThreshold * periodSeconds \u53c2\u6570\u8bbe\u7f6e\u4e3a\u8db3\u591f\u957f\u7684\u65f6\u95f4\u6765\u5e94\u5bf9\u542f\u52a8\u9700\u8981\u8f83\u957f\u65f6\u95f4\u7684\u573a\u666f\u3002

              YAML \u793a\u4f8b\uff1a

              ports:\n- name: liveness-port\n  containerPort: 8080\n  hostPort: 8080\n\nlivenessProbe:\n  httpGet:\n    path: /healthz\n    port: liveness-port\n  failureThreshold: 1\n  periodSeconds: 10\n\nstartupProbe:\n  httpGet:\n    path: /healthz\n    port: liveness-port\n  failureThreshold: 30\n  periodSeconds: 10\n

              \u5982\u4e0a\u8bbe\u7f6e\uff0c\u5e94\u7528\u5c06\u6709\u6700\u591a 5 \u5206\u949f\uff0830 * 10 = 300s\uff09\u7684\u65f6\u95f4\u6765\u5b8c\u6210\u542f\u52a8\u8fc7\u7a0b\uff0c \u4e00\u65e6\u542f\u52a8\u63a2\u6d4b\u6210\u529f\uff0c\u5b58\u6d3b\u63a2\u6d4b\u4efb\u52a1\u5c31\u4f1a\u63a5\u7ba1\u5bf9\u5bb9\u5668\u7684\u63a2\u6d4b\uff0c\u5bf9\u5bb9\u5668\u6b7b\u9501\u4f5c\u51fa\u5feb\u901f\u54cd\u5e94\u3002 \u5982\u679c\u542f\u52a8\u63a2\u6d4b\u4e00\u76f4\u6ca1\u6709\u6210\u529f\uff0c\u5bb9\u5668\u4f1a\u5728 300 \u79d2\u540e\u88ab\u6740\u6b7b\uff0c\u5e76\u4e14\u6839\u636e restartPolicy \u6765 \u6267\u884c\u8fdb\u4e00\u6b65\u5904\u7f6e\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/job-parameters.html","title":"\u4efb\u52a1\u53c2\u6570\u8bf4\u660e","text":"

              \u6839\u636e .spec.completions \u548c .spec.Parallelism \u7684\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u5c06\u4efb\u52a1\uff08Job\uff09\u5212\u5206\u4e3a\u4ee5\u4e0b\u51e0\u79cd\u7c7b\u578b:

              Job \u7c7b\u578b \u8bf4\u660e \u975e\u5e76\u884c Job \u521b\u5efa\u4e00\u4e2a Pod \u76f4\u81f3\u5176 Job \u6210\u529f\u7ed3\u675f \u5177\u6709\u786e\u5b9a\u5b8c\u6210\u8ba1\u6570\u7684\u5e76\u884c Job \u5f53\u6210\u529f\u7684 Pod \u4e2a\u6570\u8fbe\u5230 .spec.completions \u65f6\uff0cJob \u88ab\u89c6\u4e3a\u5b8c\u6210 \u5e76\u884c Job \u521b\u5efa\u4e00\u4e2a\u6216\u591a\u4e2a Pod \u76f4\u81f3\u6709\u4e00\u4e2a\u6210\u529f\u7ed3\u675f

              \u53c2\u6570\u8bf4\u660e

              RestartPolicy \u521b\u5efa\u4e00\u4e2a Pod \u76f4\u81f3\u5176\u6210\u529f\u7ed3\u675f .spec.completions \u8868\u793a Job \u7ed3\u675f\u9700\u8981\u6210\u529f\u8fd0\u884c\u7684 Pod \u4e2a\u6570\uff0c\u9ed8\u8ba4\u4e3a 1 .spec.parallelism \u8868\u793a\u5e76\u884c\u8fd0\u884c\u7684 Pod \u7684\u4e2a\u6570\uff0c\u9ed8\u8ba4\u4e3a 1 spec.backoffLimit \u8868\u793a\u5931\u8d25 Pod \u7684\u91cd\u8bd5\u6700\u5927\u6b21\u6570\uff0c\u8d85\u8fc7\u8fd9\u4e2a\u6b21\u6570\u4e0d\u4f1a\u7ee7\u7eed\u91cd\u8bd5\u3002 .spec.activeDeadlineSeconds \u8868\u793a Pod \u8fd0\u884c\u65f6\u95f4\uff0c\u4e00\u65e6\u8fbe\u5230\u8fd9\u4e2a\u65f6\u95f4\uff0cJob \u5373\u5176\u6240\u6709\u7684 Pod \u90fd\u4f1a\u505c\u6b62\u3002\u4e14activeDeadlineSeconds \u4f18\u5148\u7ea7\u9ad8\u4e8e backoffLimit\uff0c\u5373\u5230\u8fbe activeDeadlineSeconds \u7684 Job \u4f1a\u5ffd\u7565backoffLimit \u7684\u8bbe\u7f6e\u3002

              \u4ee5\u4e0b\u662f\u4e00\u4e2a Job \u914d\u7f6e\u793a\u4f8b\uff0c\u4fdd\u5b58\u5728 myjob.yaml \u4e2d\uff0c\u5176\u8ba1\u7b97 \u03c0 \u5230 2000 \u4f4d\u5e76\u6253\u5370\u8f93\u51fa\u3002

              apiVersion: batch/v1\nkind: Job            #\u5f53\u524d\u8d44\u6e90\u7684\u7c7b\u578b\nmetadata:\n  name: myjob\nspec:\n  completions: 50        # Job\u7ed3\u675f\u9700\u8981\u8fd0\u884c50\u4e2aPod\uff0c\u8fd9\u4e2a\u793a\u4f8b\u4e2d\u5c31\u662f\u6253\u5370\u03c0 50\u6b21\n  parallelism: 5        # \u5e76\u884c5\u4e2aPod\n  backoffLimit: 5        # \u6700\u591a\u91cd\u8bd55\u6b21\n  template:\n    spec:\n      containers:\n      - name: pi\n        image: perl\n        command: [\"perl\",  \"-Mbignum=bpi\", \"-wle\", \"print bpi(2000)\"]\n      restartPolicy: Never #\u91cd\u542f\u7b56\u7565\n

              \u76f8\u5173\u547d\u4ee4

              kubectl apply -f myjob.yaml  #\u542f\u52a8 job\nkubectl get job #\u67e5\u770b\u8fd9\u4e2ajob\nkubectl logs myjob-1122dswzs \u67e5\u770bJob Pod \u7684\u65e5\u5fd7\n
              "},{"location":"admin/kpanda/workloads/pod-config/lifecycle.html","title":"\u914d\u7f6e\u5bb9\u5668\u751f\u547d\u5468\u671f","text":"

              Pod \u9075\u5faa\u4e00\u4e2a\u9884\u5b9a\u4e49\u7684\u751f\u547d\u5468\u671f\uff0c\u8d77\u59cb\u4e8e Pending \u9636\u6bb5\uff0c\u5982\u679c Pod \u5185\u81f3\u5c11\u6709\u4e00\u4e2a\u5bb9\u5668\u6b63\u5e38\u542f\u52a8\uff0c\u5219\u8fdb\u5165 Running \u72b6\u6001\u3002\u5982\u679c Pod \u4e2d\u6709\u5bb9\u5668\u4ee5\u5931\u8d25\u72b6\u6001\u7ed3\u675f\uff0c\u5219\u72b6\u6001\u53d8\u4e3a Failed \u3002\u4ee5\u4e0b phase \u5b57\u6bb5\u503c\u8868\u660e\u4e86\u4e00\u4e2a Pod \u5904\u4e8e\u751f\u547d\u5468\u671f\u7684\u54ea\u4e2a\u9636\u6bb5\u3002

              \u503c \u63cf\u8ff0 Pending \uff08\u60ac\u51b3\uff09 Pod \u5df2\u88ab\u7cfb\u7edf\u63a5\u53d7\uff0c\u4f46\u6709\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u5bb9\u5668\u5c1a\u672a\u521b\u5efa\u4ea6\u672a\u8fd0\u884c\u3002\u8fd9\u4e2a\u9636\u6bb5\u5305\u62ec\u7b49\u5f85 Pod \u88ab\u8c03\u5ea6\u7684\u65f6\u95f4\u548c\u901a\u8fc7\u7f51\u7edc\u4e0b\u8f7d\u955c\u50cf\u7684\u65f6\u95f4\u3002 Running \uff08\u8fd0\u884c\u4e2d\uff09 Pod \u5df2\u7ecf\u7ed1\u5b9a\u5230\u4e86\u67d0\u4e2a\u8282\u70b9\uff0cPod \u4e2d\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5df2\u88ab\u521b\u5efa\u3002\u81f3\u5c11\u6709\u4e00\u4e2a\u5bb9\u5668\u4ecd\u5728\u8fd0\u884c\uff0c\u6216\u8005\u6b63\u5904\u4e8e\u542f\u52a8\u6216\u91cd\u542f\u72b6\u6001\u3002 Succeeded \uff08\u6210\u529f\uff09 Pod \u4e2d\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5df2\u6210\u529f\u7ec8\u6b62\uff0c\u5e76\u4e14\u4e0d\u4f1a\u518d\u91cd\u542f\u3002 Failed \uff08\u5931\u8d25\uff09 Pod \u4e2d\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5df2\u7ec8\u6b62\uff0c\u5e76\u4e14\u81f3\u5c11\u6709\u4e00\u4e2a\u5bb9\u5668\u662f\u56e0\u4e3a\u5931\u8d25\u800c\u7ec8\u6b62\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5bb9\u5668\u4ee5\u975e 0 \u72b6\u6001\u9000\u51fa\u6216\u8005\u88ab\u7cfb\u7edf\u7ec8\u6b62\u3002 Unknown \uff08\u672a\u77e5\uff09 \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u65e0\u6cd5\u53d6\u5f97 Pod \u7684\u72b6\u6001\uff0c\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u56e0\u4e3a\u4e0e Pod \u6240\u5728\u4e3b\u673a\u901a\u4fe1\u5931\u8d25\u6240\u81f4\u3002

              \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u4e2d\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u901a\u5e38\u4f7f\u7528\u955c\u50cf\u6765\u6307\u5b9a\u5bb9\u5668\u4e2d\u7684\u8fd0\u884c\u73af\u5883\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5728\u6784\u5efa\u955c\u50cf\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7 Entrypoint \u548c CMD \u4e24\u4e2a\u5b57\u6bb5\u6765\u5b9a\u4e49\u5bb9\u5668\u8fd0\u884c\u65f6\u6267\u884c\u7684\u547d\u4ee4\u548c\u53c2\u6570\u3002\u5982\u679c\u9700\u8981\u66f4\u6539\u5bb9\u5668\u955c\u50cf\u542f\u52a8\u524d\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u7684\u547d\u4ee4\u548c\u53c2\u6570\uff0c\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u5bb9\u5668\u7684\u751f\u547d\u5468\u671f\u4e8b\u4ef6\u547d\u4ee4\u548c\u53c2\u6570\uff0c\u6765\u8986\u76d6\u955c\u50cf\u4e2d\u9ed8\u8ba4\u7684\u547d\u4ee4\u548c\u53c2\u6570\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/lifecycle.html#_2","title":"\u751f\u547d\u5468\u671f\u914d\u7f6e","text":"

              \u6839\u636e\u4e1a\u52a1\u9700\u8981\u5bf9\u5bb9\u5668\u7684\u542f\u52a8\u547d\u4ee4\u3001\u542f\u52a8\u540e\u547d\u4ee4\u3001\u505c\u6b62\u524d\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u542f\u52a8\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5bb9\u5668\u5c06\u6309\u7167\u542f\u52a8\u547d\u4ee4\u8fdb\u884c\u542f\u52a8\u3002 \u542f\u52a8\u540e\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5bb9\u5668\u542f\u52a8\u540e\u51fa\u53d1\u7684\u547d\u4ee4 \u505c\u6b62\u524d\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5bb9\u5668\u5728\u6536\u5230\u505c\u6b62\u547d\u4ee4\u540e\u6267\u884c\u7684\u547d\u4ee4\u3002\u786e\u4fdd\u5347\u7ea7\u6216\u5b9e\u4f8b\u5220\u9664\u65f6\u53ef\u63d0\u524d\u5c06\u5b9e\u4f8b\u4e2d\u8fd0\u884c\u7684\u4e1a\u52a1\u6392\u6c34\u3002 --"},{"location":"admin/kpanda/workloads/pod-config/lifecycle.html#_3","title":"\u542f\u52a8\u547d\u4ee4","text":"

              \u6839\u636e\u4e0b\u8868\u5bf9\u542f\u52a8\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8fd0\u884c\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u53ef\u6267\u884c\u7684\u547d\u4ee4\uff0c\u591a\u4e2a\u547d\u4ee4\u4e4b\u95f4\u7528\u7a7a\u683c\u8fdb\u884c\u5206\u5272\uff0c\u5982\u547d\u4ee4\u672c\u8eab\u5e26\u7a7a\u683c\uff0c\u5219\u9700\u8981\u52a0\uff08\u201c\u201d\uff09\u3002\u3010\u542b\u4e49\u3011\u591a\u547d\u4ee4\u65f6\uff0c\u8fd0\u884c\u547d\u4ee4\u5efa\u8bae\u7528/bin/sh\u6216\u5176\u4ed6\u7684shell\uff0c\u5176\u4ed6\u5168\u90e8\u547d\u4ee4\u4f5c\u4e3a\u53c2\u6570\u6765\u4f20\u5165\u3002 /run/server \u8fd0\u884c\u53c2\u6570 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u63a7\u5236\u5bb9\u5668\u8fd0\u884c\u547d\u4ee4\u53c2\u6570\u3002 port=8080"},{"location":"admin/kpanda/workloads/pod-config/lifecycle.html#_4","title":"\u542f\u52a8\u540e\u547d\u4ee4","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u547d\u4ee4\u884c\u811a\u672c\u548c HTTP \u8bf7\u6c42\u4e24\u79cd\u5904\u7406\u7c7b\u578b\u5bf9\u542f\u52a8\u540e\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u4e0b\u8868\u9009\u62e9\u9002\u5408\u60a8\u7684\u914d\u7f6e\u65b9\u5f0f\u3002

              \u547d\u4ee4\u884c\u811a\u672c\u914d\u7f6e

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8fd0\u884c\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u53ef\u6267\u884c\u7684\u547d\u4ee4\uff0c\u591a\u4e2a\u547d\u4ee4\u4e4b\u95f4\u7528\u7a7a\u683c\u8fdb\u884c\u5206\u5272\uff0c\u5982\u547d\u4ee4\u672c\u8eab\u5e26\u7a7a\u683c\uff0c\u5219\u9700\u8981\u52a0\uff08\u201c\u201d\uff09\u3002\u3010\u542b\u4e49\u3011\u591a\u547d\u4ee4\u65f6\uff0c\u8fd0\u884c\u547d\u4ee4\u5efa\u8bae\u7528/bin/sh\u6216\u5176\u4ed6\u7684shell\uff0c\u5176\u4ed6\u5168\u90e8\u547d\u4ee4\u4f5c\u4e3a\u53c2\u6570\u6765\u4f20\u5165\u3002 /run/server \u8fd0\u884c\u53c2\u6570 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u63a7\u5236\u5bb9\u5668\u8fd0\u884c\u547d\u4ee4\u53c2\u6570\u3002 port=8080"},{"location":"admin/kpanda/workloads/pod-config/lifecycle.html#_5","title":"\u505c\u6b62\u524d\u547d\u4ee4","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u547d\u4ee4\u884c\u811a\u672c\u548c HTTP \u8bf7\u6c42\u4e24\u79cd\u5904\u7406\u7c7b\u578b\u5bf9\u505c\u6b62\u524d\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u4e0b\u8868\u9009\u62e9\u9002\u5408\u60a8\u7684\u914d\u7f6e\u65b9\u5f0f\u3002

              HTTP \u8bf7\u6c42\u914d\u7f6e

              \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c URL \u8def\u5f84 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8bf7\u6c42\u7684URL\u8def\u5f84\u3002\u3010\u542b\u4e49\u3011\u591a\u547d\u4ee4\u65f6\uff0c\u8fd0\u884c\u547d\u4ee4\u5efa\u8bae\u7528/bin/sh\u6216\u5176\u4ed6\u7684shell\uff0c\u5176\u4ed6\u5168\u90e8\u547d\u4ee4\u4f5c\u4e3a\u53c2\u6570\u6765\u4f20\u5165\u3002 /run/server \u7aef\u53e3 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8bf7\u6c42\u7684\u7aef\u53e3\u3002 port=8080 \u8282\u70b9\u5730\u5740 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8bf7\u6c42\u7684 IP \u5730\u5740\uff0c\u9ed8\u8ba4\u662f\u5bb9\u5668\u6240\u5728\u7684\u8282\u70b9 IP\u3002 --"},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html","title":"\u8c03\u5ea6\u7b56\u7565","text":"

              \u5728 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u8282\u70b9\u4e5f\u6709\u6807\u7b7e\u3002\u60a8\u53ef\u4ee5\u624b\u52a8\u6dfb\u52a0\u6807\u7b7e\u3002 Kubernetes \u4e5f\u4f1a\u4e3a\u96c6\u7fa4\u4e2d\u6240\u6709\u8282\u70b9\u6dfb\u52a0\u4e00\u4e9b\u6807\u51c6\u7684\u6807\u7b7e\u3002\u53c2\u89c1\u5e38\u7528\u7684\u6807\u7b7e\u3001\u6ce8\u89e3\u548c\u6c61\u70b9\u4ee5\u4e86\u89e3\u5e38\u89c1\u7684\u8282\u70b9\u6807\u7b7e\u3002\u901a\u8fc7\u4e3a\u8282\u70b9\u6dfb\u52a0\u6807\u7b7e\uff0c\u60a8\u53ef\u4ee5\u8ba9 Pod \u8c03\u5ea6\u5230\u7279\u5b9a\u8282\u70b9\u6216\u8282\u70b9\u7ec4\u4e0a\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528\u8fd9\u4e2a\u529f\u80fd\u6765\u786e\u4fdd\u7279\u5b9a\u7684 Pod \u53ea\u80fd\u8fd0\u884c\u5728\u5177\u6709\u4e00\u5b9a\u9694\u79bb\u6027\uff0c\u5b89\u5168\u6027\u6216\u76d1\u7ba1\u5c5e\u6027\u7684\u8282\u70b9\u4e0a\u3002

              nodeSelector \u662f\u8282\u70b9\u9009\u62e9\u7ea6\u675f\u7684\u6700\u7b80\u5355\u63a8\u8350\u5f62\u5f0f\u3002\u60a8\u53ef\u4ee5\u5c06 nodeSelector \u5b57\u6bb5\u6dfb\u52a0\u5230 Pod \u7684\u89c4\u7ea6\u4e2d\u8bbe\u7f6e\u60a8\u5e0c\u671b\u76ee\u6807\u8282\u70b9\u6240\u5177\u6709\u7684\u8282\u70b9\u6807\u7b7e\u3002Kubernetes \u53ea\u4f1a\u5c06 Pod \u8c03\u5ea6\u5230\u62e5\u6709\u6307\u5b9a\u6bcf\u4e2a\u6807\u7b7e\u7684\u8282\u70b9\u4e0a\u3002 nodeSelector \u63d0\u4f9b\u4e86\u4e00\u79cd\u6700\u7b80\u5355\u7684\u65b9\u6cd5\u6765\u5c06 Pod \u7ea6\u675f\u5230\u5177\u6709\u7279\u5b9a\u6807\u7b7e\u7684\u8282\u70b9\u4e0a\u3002\u4eb2\u548c\u6027\u548c\u53cd\u4eb2\u548c\u6027\u6269\u5c55\u4e86\u60a8\u53ef\u4ee5\u5b9a\u4e49\u7684\u7ea6\u675f\u7c7b\u578b\u3002\u4f7f\u7528\u4eb2\u548c\u6027\u4e0e\u53cd\u4eb2\u548c\u6027\u7684\u4e00\u4e9b\u597d\u5904\u6709\uff1a

              • \u4eb2\u548c\u6027\u3001\u53cd\u4eb2\u548c\u6027\u8bed\u8a00\u7684\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002 nodeSelector \u53ea\u80fd\u9009\u62e9\u62e5\u6709\u6240\u6709\u6307\u5b9a\u6807\u7b7e\u7684\u8282\u70b9\u3002\u4eb2\u548c\u6027\u3001\u53cd\u4eb2\u548c\u6027\u4e3a\u60a8\u63d0\u4f9b\u5bf9\u9009\u62e9\u903b\u8f91\u7684\u66f4\u5f3a\u63a7\u5236\u80fd\u529b\u3002

              • \u60a8\u53ef\u4ee5\u6807\u660e\u67d0\u89c4\u5219\u662f\u201c\u8f6f\u9700\u6c42\u201d\u6216\u8005\u201c\u504f\u597d\u201d\uff0c\u8fd9\u6837\u8c03\u5ea6\u5668\u5728\u65e0\u6cd5\u627e\u5230\u5339\u914d\u8282\u70b9\u65f6\uff0c\u4f1a\u5ffd\u7565\u4eb2\u548c\u6027/\u53cd\u4eb2\u548c\u6027\u89c4\u5219\uff0c\u786e\u4fdd Pod \u8c03\u5ea6\u6210\u529f\u3002

              • \u60a8\u53ef\u4ee5\u4f7f\u7528\u8282\u70b9\u4e0a\uff08\u6216\u5176\u4ed6\u62d3\u6251\u57df\u4e2d\uff09\u8fd0\u884c\u7684\u5176\u4ed6 Pod \u7684\u6807\u7b7e\u6765\u5b9e\u65bd\u8c03\u5ea6\u7ea6\u675f\uff0c\u800c\u4e0d\u662f\u53ea\u80fd\u4f7f\u7528\u8282\u70b9\u672c\u8eab\u7684\u6807\u7b7e\u3002\u8fd9\u4e2a\u80fd\u529b\u8ba9\u60a8\u80fd\u591f\u5b9a\u4e49\u89c4\u5219\u5141\u8bb8\u54ea\u4e9b Pod \u53ef\u4ee5\u88ab\u653e\u7f6e\u5728\u4e00\u8d77\u3002

              \u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u4eb2\u548c\uff08affinity\uff09\u4e0e\u53cd\u4eb2\u548c\uff08anti-affinity\uff09\u6765\u9009\u62e9 Pod \u8981\u90e8\u7f72\u7684\u8282\u70b9\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_2","title":"\u5bb9\u5fcd\u65f6\u95f4","text":"

              \u5f53\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u7cfb\u7edf\u5c06\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\u7a97\u3002\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#nodeaffinity","title":"\u8282\u70b9\u4eb2\u548c\u6027\uff08nodeAffinity\uff09","text":"

              \u8282\u70b9\u4eb2\u548c\u6027\u6982\u5ff5\u4e0a\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u5b83\u4f7f\u60a8\u53ef\u4ee5\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002 \u8282\u70b9\u4eb2\u548c\u6027\u6709\u4e24\u79cd\uff1a

              • \u5fc5\u987b\u6ee1\u8db3\uff1a\uff08 requiredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002\u60a8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

              • \u5c3d\u91cf\u6ee1\u8db3\uff1a\uff08 preferredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002\u60a8\u8fd8\u53ef\u4e3a\u8f6f\u7ea6\u675f\u89c4\u5219\u8bbe\u5b9a\u6743\u91cd\uff0c\u5177\u4f53\u8c03\u5ea6\u65f6\uff0c\u82e5\u5b58\u5728\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u8282\u70b9\uff0c\u6743\u91cd\u6700\u5927\u7684\u8282\u70b9\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u540c\u65f6\u60a8\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_3","title":"\u6807\u7b7e\u540d","text":"

              \u5bf9\u5e94\u8282\u70b9\u7684\u6807\u7b7e\uff0c\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u7684\u6807\u7b7e\u4e5f\u53ef\u4ee5\u7528\u6237\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_4","title":"\u64cd\u4f5c\u7b26","text":"
              • In\uff1a\u6807\u7b7e\u503c\u9700\u8981\u5728 values \u7684\u5217\u8868\u4e2d
              • NotIn\uff1a\u6807\u7b7e\u7684\u503c\u4e0d\u5728\u67d0\u4e2a\u5217\u8868\u4e2d
              • Exists\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
              • DoesNotExist\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u4e0d\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
              • Gt\uff1a\u6807\u7b7e\u7684\u503c\u5927\u4e8e\u67d0\u4e2a\u503c\uff08\u5b57\u7b26\u4e32\u6bd4\u8f83\uff09
              • Lt\uff1a\u6807\u7b7e\u7684\u503c\u5c0f\u4e8e\u67d0\u4e2a\u503c\uff08\u5b57\u7b26\u4e32\u6bd4\u8f83\uff09
              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_5","title":"\u6743\u91cd","text":"

              \u4ec5\u652f\u6301\u5728\u201c\u5c3d\u91cf\u6ee1\u8db3\u201d\u7b56\u7565\u4e2d\u6dfb\u52a0\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u8c03\u5ea6\u7684\u4f18\u5148\u7ea7\uff0c\u6743\u91cd\u5927\u7684\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u53d6\u503c\u8303\u56f4\u662f 1 \u5230 100\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_6","title":"\u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027","text":"

              \u4e0e\u8282\u70b9\u4eb2\u548c\u6027\u7c7b\u4f3c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u7684\u4eb2\u548c\u6027\u4e5f\u6709\u4e24\u79cd\u7c7b\u578b\uff1a

              • \u5fc5\u987b\u6ee1\u8db3\uff1a\uff08 requiredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002\u60a8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002
              • \u5c3d\u91cf\u6ee1\u8db3\uff1a\uff08 preferredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002\u60a8\u8fd8\u53ef\u4e3a\u8f6f\u7ea6\u675f\u89c4\u5219\u8bbe\u5b9a\u6743\u91cd\uff0c\u5177\u4f53\u8c03\u5ea6\u65f6\uff0c\u82e5\u5b58\u5728\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u8282\u70b9\uff0c\u6743\u91cd\u6700\u5927\u7684\u8282\u70b9\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u540c\u65f6\u60a8\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

              \u5de5\u4f5c\u8d1f\u8f7d\u7684\u4eb2\u548c\u6027\u4e3b\u8981\u7528\u6765\u51b3\u5b9a\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u53ef\u4ee5\u548c\u54ea\u4e9b Pod\u90e8 \u7f72\u5728\u540c\u4e00\u62d3\u6251\u57df\u3002\u4f8b\u5982\uff0c\u5bf9\u4e8e\u76f8\u4e92\u901a\u4fe1\u7684\u670d\u52a1\uff0c\u53ef\u901a\u8fc7\u5e94\u7528\u4eb2\u548c\u6027\u8c03\u5ea6\uff0c\u5c06\u5176\u90e8\u7f72\u5230\u540c\u4e00\u62d3\u6251\u57df\uff08\u5982\u540c\u4e00\u53ef\u7528\u533a\uff09\u4e2d\uff0c\u51cf\u5c11\u5b83\u4eec\u4e4b\u95f4\u7684\u7f51\u7edc\u5ef6\u8fdf\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_7","title":"\u6807\u7b7e\u540d","text":"

              \u5bf9\u5e94\u8282\u70b9\u7684\u6807\u7b7e\uff0c\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u7684\u6807\u7b7e\u4e5f\u53ef\u4ee5\u7528\u6237\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_8","title":"\u547d\u540d\u7a7a\u95f4","text":"

              \u6307\u5b9a\u8c03\u5ea6\u7b56\u7565\u751f\u6548\u7684\u547d\u540d\u7a7a\u95f4\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_9","title":"\u64cd\u4f5c\u7b26","text":"
              • In\uff1a\u6807\u7b7e\u503c\u9700\u8981\u5728 values \u7684\u5217\u8868\u4e2d
              • NotIn\uff1a\u6807\u7b7e\u7684\u503c\u4e0d\u5728\u67d0\u4e2a\u5217\u8868\u4e2d
              • Exists\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
              • DoesNotExist\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u4e0d\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_10","title":"\u62d3\u6251\u57df","text":"

              \u6307\u5b9a\u8c03\u5ea6\u65f6\u7684\u5f71\u54cd\u8303\u56f4\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6307\u5b9a\u4e3a kubernetes.io/Clustername \u8868\u793a\u4ee5 Node \u8282\u70b9\u4e3a\u533a\u5206\u8303\u56f4\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_11","title":"\u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027","text":"

              \u4e0e\u8282\u70b9\u4eb2\u548c\u6027\u7c7b\u4f3c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u7684\u53cd\u4eb2\u548c\u6027\u4e5f\u6709\u4e24\u79cd\u7c7b\u578b\uff1a

              • \u5fc5\u987b\u6ee1\u8db3\uff1a\uff08 requiredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002\u60a8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002
              • \u5c3d\u91cf\u6ee1\u8db3\uff1a\uff08 preferredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002\u60a8\u8fd8\u53ef\u4e3a\u8f6f\u7ea6\u675f\u89c4\u5219\u8bbe\u5b9a\u6743\u91cd\uff0c\u5177\u4f53\u8c03\u5ea6\u65f6\uff0c\u82e5\u5b58\u5728\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u8282\u70b9\uff0c\u6743\u91cd\u6700\u5927\u7684\u8282\u70b9\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u540c\u65f6\u60a8\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

              \u5de5\u4f5c\u8d1f\u8f7d\u7684\u53cd\u4eb2\u548c\u6027\u4e3b\u8981\u7528\u6765\u51b3\u5b9a\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u4e0d\u53ef\u4ee5\u548c\u54ea\u4e9b Pod \u90e8\u7f72\u5728\u540c\u4e00\u62d3\u6251\u57df\u3002\u4f8b\u5982\uff0c\u5c06\u4e00\u4e2a\u8d1f\u8f7d\u7684\u76f8\u540c Pod \u5206\u6563\u90e8\u7f72\u5230\u4e0d\u540c\u7684\u62d3\u6251\u57df\uff08\u4f8b\u5982\u4e0d\u540c\u4e3b\u673a\uff09\u4e2d\uff0c\u63d0\u9ad8\u8d1f\u8f7d\u672c\u8eab\u7684\u7a33\u5b9a\u6027\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_12","title":"\u6807\u7b7e\u540d","text":"

              \u5bf9\u5e94\u8282\u70b9\u7684\u6807\u7b7e\uff0c\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u7684\u6807\u7b7e\u4e5f\u53ef\u4ee5\u7528\u6237\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_13","title":"\u547d\u540d\u7a7a\u95f4","text":"

              \u6307\u5b9a\u8c03\u5ea6\u7b56\u7565\u751f\u6548\u7684\u547d\u540d\u7a7a\u95f4\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_14","title":"\u64cd\u4f5c\u7b26","text":"
              • In\uff1a\u6807\u7b7e\u503c\u9700\u8981\u5728 values \u7684\u5217\u8868\u4e2d
              • NotIn\uff1a\u6807\u7b7e\u7684\u503c\u4e0d\u5728\u67d0\u4e2a\u5217\u8868\u4e2d
              • Exists\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
              • DoesNotExist\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u4e0d\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
              "},{"location":"admin/kpanda/workloads/pod-config/scheduling-policy.html#_15","title":"\u62d3\u6251\u57df","text":"

              \u6307\u5b9a\u8c03\u5ea6\u65f6\u7684\u5f71\u54cd\u8303\u56f4\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6307\u5b9a\u4e3a kubernetes.io/Clustername \u8868\u793a\u4ee5 Node \u8282\u70b9\u4e3a\u533a\u5206\u8303\u56f4\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/workload-status.html","title":"\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001","text":"

              \u5de5\u4f5c\u8d1f\u8f7d\u662f\u8fd0\u884c\u5728 Kubernetes \u4e0a\u7684\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5728 Kubernetes \u4e2d\uff0c\u65e0\u8bba\u60a8\u7684\u5e94\u7528\u7a0b\u5e8f\u662f\u7531\u5355\u4e2a\u540c\u4e00\u7ec4\u4ef6\u6216\u662f\u7531\u591a\u4e2a\u4e0d\u540c\u7684\u7ec4\u4ef6\u6784\u6210\uff0c\u90fd\u53ef\u4ee5\u4f7f\u7528\u4e00\u7ec4 Pod \u6765\u8fd0\u884c\u5b83\u3002Kubernetes \u63d0\u4f9b\u4e86\u4e94\u79cd\u5185\u7f6e\u7684\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u6765\u7ba1\u7406 Pod\uff1a

              • \u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d
              • \u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d
              • \u5b88\u62a4\u8fdb\u7a0b
              • \u4efb\u52a1
              • \u5b9a\u65f6\u4efb\u52a1

              \u60a8\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u81ea\u5b9a\u4e49\u8d44\u6e90 CRD \u6765\u5b9e\u73b0\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u7684\u6269\u5c55\u3002\u5728\u7b2c\u4e94\u4ee3\u5bb9\u5668\u7ba1\u7406\u4e2d\uff0c\u652f\u6301\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u8fdb\u884c\u521b\u5efa\u3001\u66f4\u65b0\u3001\u6269\u5bb9\u3001\u76d1\u63a7\u3001\u65e5\u5fd7\u3001\u5220\u9664\u3001\u7248\u672c\u7ba1\u7406\u7b49\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/workload-status.html#pod","title":"Pod \u72b6\u6001","text":"

              Pod \u662f Kuberneters \u4e2d\u521b\u5efa\u548c\u7ba1\u7406\u7684\u3001\u6700\u5c0f\u7684\u8ba1\u7b97\u5355\u5143\uff0c\u5373\u4e00\u7ec4\u5bb9\u5668\u7684\u96c6\u5408\u3002\u8fd9\u4e9b\u5bb9\u5668\u5171\u4eab\u5b58\u50a8\u3001\u7f51\u7edc\u4ee5\u53ca\u7ba1\u7406\u63a7\u5236\u5bb9\u5668\u8fd0\u884c\u65b9\u5f0f\u7684\u7b56\u7565\u3002 Pod \u901a\u5e38\u4e0d\u7531\u7528\u6237\u76f4\u63a5\u521b\u5efa\uff0c\u800c\u662f\u901a\u8fc7\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u6765\u521b\u5efa\u3002 Pod \u9075\u5faa\u4e00\u4e2a\u9884\u5b9a\u4e49\u7684\u751f\u547d\u5468\u671f\uff0c\u8d77\u59cb\u4e8e Pending \u9636\u6bb5\uff0c\u5982\u679c\u81f3\u5c11\u5176\u4e2d\u6709\u4e00\u4e2a\u4e3b\u8981\u5bb9\u5668\u6b63\u5e38\u542f\u52a8\uff0c\u5219\u8fdb\u5165 Running \uff0c\u4e4b\u540e\u53d6\u51b3\u4e8e Pod \u4e2d\u662f\u5426\u6709\u5bb9\u5668\u4ee5\u5931\u8d25\u72b6\u6001\u7ed3\u675f\u800c\u8fdb\u5165 Succeeded \u6216\u8005 Failed \u9636\u6bb5\u3002

              "},{"location":"admin/kpanda/workloads/pod-config/workload-status.html#_2","title":"\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001","text":"

              \u7b2c\u4e94\u4ee3\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4f9d\u636e Pod \u7684\u72b6\u6001\u3001\u526f\u672c\u6570\u7b49\u56e0\u7d20\uff0c\u8bbe\u8ba1\u4e86\u4e00\u79cd\u5185\u7f6e\u7684\u5de5\u4f5c\u8d1f\u8f7d\u751f\u547d\u5468\u671f\u7684\u72b6\u6001\u96c6\uff0c\u4ee5\u8ba9\u7528\u6237\u80fd\u591f\u66f4\u52a0\u771f\u5b9e\u7684\u611f\u77e5\u5de5\u4f5c\u8d1f\u8f7d\u8fd0\u884c\u60c5\u51b5\u3002 \u7531\u4e8e\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\u7c7b\u578b\uff08\u6bd4\u5982\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u548c\u4efb\u52a1\uff09\u5bf9 Pod \u7684\u7ba1\u7406\u673a\u5236\u4e0d\u4e00\u81f4\uff0c\u56e0\u6b64\uff0c\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4f1a\u5448\u73b0\u4e0d\u540c\u7684\u751f\u547d\u5468\u671f\u72b6\u6001\uff0c\u5177\u4f53\u5982\u4e0b\u8868\uff1a

              "},{"location":"admin/kpanda/workloads/pod-config/workload-status.html#_3","title":"\u65e0\u72b6\u6001\u8d1f\u8f7d\u3001\u6709\u72b6\u6001\u8d1f\u8f7d\u3001\u5b88\u62a4\u8fdb\u7a0b\u72b6\u6001","text":"\u72b6\u6001 \u63cf\u8ff0 \u7b49\u5f85\u4e2d 1. \u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u6b63\u5728\u8fdb\u884c\u4e2d\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u30022. \u89e6\u53d1\u5347\u7ea7\u6216\u8005\u56de\u6eda\u52a8\u4f5c\u540e\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u30023. \u89e6\u53d1\u6682\u505c/\u6269\u7f29\u5bb9\u7b49\u64cd\u4f5c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u5728\u6b64\u72b6\u6001\u3002 \u8fd0\u884c\u4e2d \u8d1f\u8f7d\u4e0b\u7684\u6240\u6709\u5b9e\u4f8b\u90fd\u5728\u8fd0\u884c\u4e2d\u4e14\u526f\u672c\u6570\u4e0e\u7528\u6237\u9884\u5b9a\u4e49\u7684\u6570\u91cf\u4e00\u81f4\u65f6\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5220\u9664\u4e2d \u6267\u884c\u5220\u9664\u64cd\u4f5c\u65f6\uff0c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\uff0c\u76f4\u5230\u5220\u9664\u5b8c\u6210\u3002 \u5f02\u5e38 \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u65e0\u6cd5\u53d6\u5f97\u5de5\u4f5c\u8d1f\u8f7d\u7684\u72b6\u6001\u3002\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u56e0\u4e3a\u4e0e Pod \u6240\u5728\u4e3b\u673a\u901a\u4fe1\u5931\u8d25\u3002 \u672a\u5c31\u7eea \u5bb9\u5668\u5904\u4e8e\u5f02\u5e38\uff0cpending \u72b6\u6001\u65f6\uff0c\u56e0\u672a\u77e5\u9519\u8bef\u5bfc\u81f4\u8d1f\u8f7d\u65e0\u6cd5\u542f\u52a8\u65f6\u663e\u793a\u6b64\u72b6\u6001"},{"location":"admin/kpanda/workloads/pod-config/workload-status.html#_4","title":"\u4efb\u52a1\u72b6\u6001","text":"\u72b6\u6001 \u63cf\u8ff0 \u7b49\u5f85\u4e2d \u4efb\u52a1\u521b\u5efa\u6b63\u5728\u8fdb\u884c\u4e2d\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u6267\u884c\u4e2d \u4efb\u52a1\u6b63\u5728\u6267\u884c\u4e2d\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u6267\u884c\u5b8c\u6210 \u4efb\u52a1\u6267\u884c\u5b8c\u6210\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5220\u9664\u4e2d \u89e6\u53d1\u5220\u9664\u64cd\u4f5c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u5728\u6b64\u72b6\u6001\u3002 \u5f02\u5e38 \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u65e0\u6cd5\u53d6\u5f97 Pod \u7684\u72b6\u6001\u3002\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u56e0\u4e3a\u4e0e Pod \u6240\u5728\u4e3b\u673a\u901a\u4fe1\u5931\u8d25\u3002"},{"location":"admin/kpanda/workloads/pod-config/workload-status.html#_5","title":"\u5b9a\u65f6\u4efb\u52a1\u72b6\u6001","text":"\u72b6\u6001 \u63cf\u8ff0 \u7b49\u5f85\u4e2d \u5b9a\u65f6\u4efb\u52a1\u521b\u5efa\u6b63\u5728\u8fdb\u884c\u4e2d\uff0c\u5b9a\u65f6\u4efb\u52a1\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5df2\u542f\u52a8 \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u6210\u529f\u540e\uff0c\u6b63\u5e38\u8fd0\u884c\u6216\u5c06\u5df2\u6682\u505c\u7684\u4efb\u52a1\u542f\u52a8\u65f6\u5b9a\u65f6\u4efb\u52a1\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5df2\u505c\u6b62 \u6267\u884c\u505c\u6b62\u4efb\u52a1\u64cd\u4f5c\u65f6\uff0c\u5b9a\u65f6\u4efb\u52a1\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5220\u9664\u4e2d \u89e6\u53d1\u5220\u9664\u64cd\u4f5c\uff0c\u5b9a\u65f6\u4efb\u52a1\u5904\u5728\u6b64\u72b6\u6001\u3002

              \u5f53\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u5f02\u5e38\u6216\u672a\u5c31\u7eea\u72b6\u6001\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5c06\u9f20\u6807\u79fb\u52a8\u5230\u8d1f\u8f7d\u7684\u72b6\u6001\u503c\u4e0a\uff0c\u7cfb\u7edf\u5c06\u901a\u8fc7\u63d0\u793a\u6846\u5c55\u793a\u66f4\u52a0\u8be6\u7ec6\u7684\u9519\u8bef\u4fe1\u606f\u3002\u60a8\u4e5f\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u65e5\u5fd7\u6216\u4e8b\u4ef6\u6765\u83b7\u53d6\u5de5\u4f5c\u8d1f\u8f7d\u7684\u76f8\u5173\u8fd0\u884c\u4fe1\u606f\u3002

              "},{"location":"admin/register/index.html","title":"\u7528\u6237\u6ce8\u518c","text":"

              \u65b0\u7528\u6237\u9996\u6b21\u4f7f\u7528 AI \u7b97\u529b\u5e73\u53f0\u9700\u8981\u8fdb\u884c\u6ce8\u518c\u3002

              "},{"location":"admin/register/index.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u5df2\u5f00\u542f\u90ae\u7bb1\u6ce8\u518c\u529f\u80fd
              • \u6709\u4e00\u4e2a\u53ef\u7528\u7684\u90ae\u7bb1
              "},{"location":"admin/register/index.html#_3","title":"\u90ae\u7bb1\u6ce8\u518c\u6b65\u9aa4","text":"
              1. \u6253\u5f00 AI \u7b97\u529b\u5e73\u53f0\u9996\u9875 https://ai.isuanova.com/\uff0c\u70b9\u51fb \u6ce8\u518c

              2. \u952e\u5165\u7528\u6237\u540d\u3001\u5bc6\u7801\u3001\u90ae\u7bb1\u540e\u70b9\u51fb \u6ce8\u518c

              3. \u7cfb\u7edf\u63d0\u793a\u53d1\u9001\u4e86\u4e00\u5c01\u90ae\u4ef6\u5230\u60a8\u7684\u90ae\u7bb1\u3002

              4. \u767b\u5f55\u81ea\u5df1\u7684\u90ae\u7bb1\uff0c\u627e\u5230\u90ae\u4ef6\uff0c\u70b9\u51fb\u94fe\u63a5\u3002

              5. \u606d\u559c\uff0c\u60a8\u6210\u529f\u8fdb\u5165\u4e86 AI \u7b97\u529b\u5e73\u53f0\uff0c\u73b0\u5728\u53ef\u4ee5\u5f00\u59cb\u60a8\u7684 AI \u4e4b\u65c5\u4e86\u3002

              \u4e0b\u4e00\u6b65\uff1a\u4e3a\u7528\u6237\u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4

              "},{"location":"admin/register/bindws.html","title":"\u4e3a\u7528\u6237\u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4","text":"

              \u7528\u6237\u6210\u529f\u6ce8\u518c\u4e4b\u540e\uff0c\u9700\u8981\u4e3a\u5176\u7ed1\u5b9a\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u3002

              "},{"location":"admin/register/bindws.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u7528\u6237\u5df2\u6210\u529f\u6ce8\u518c
              • \u6709\u4e00\u4e2a\u53ef\u7528\u7684\u7ba1\u7406\u5458\u8d26\u53f7
              "},{"location":"admin/register/bindws.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u5bfc\u822a\u5207\u6362\u81f3 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \uff0c\u70b9\u51fb \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4

              3. \u8f93\u5165\u540d\u79f0\uff0c\u9009\u62e9\u6587\u4ef6\u5939\u540e\u70b9\u51fb \u786e\u5b9a \uff0c\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4

              4. \u7ed9\u5de5\u4f5c\u7a7a\u95f4\u7ed1\u5b9a\u8d44\u6e90

                \u53ef\u4ee5\u5728\u8fd9\u4e2a\u754c\u9762\u4e0a\u70b9\u51fb \u521b\u5efa\u96c6\u7fa4-\u547d\u540d\u7a7a\u95f4 \u6765\u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002

              5. \u6dfb\u52a0\u6388\u6743\uff1a\u5c06\u7528\u6237\u5206\u914d\u81f3\u5de5\u4f5c\u7a7a\u95f4

              6. \u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u67e5\u770b\u662f\u5426\u5177\u6709\u5de5\u4f5c\u7a7a\u95f4\u53ca\u547d\u540d\u7a7a\u95f4\u7684\u6743\u9650\u3002 \u7ba1\u7406\u5458\u53ef\u4ee5\u901a\u8fc7\u53f3\u4fa7\u7684 \u2507 \u6267\u884c\u66f4\u591a\u64cd\u4f5c\u3002

              \u4e0b\u4e00\u6b65\uff1a\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u8d44\u6e90

              "},{"location":"admin/register/wsres.html","title":"\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u8d44\u6e90","text":"

              \u5c06\u7528\u6237\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\u540e\uff0c\u9700\u8981\u7ed9\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u5408\u9002\u7684\u8d44\u6e90\u3002

              "},{"location":"admin/register/wsres.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u6709\u4e00\u4e2a\u53ef\u7528\u7684\u7ba1\u7406\u5458\u8d26\u53f7
              • \u5de5\u4f5c\u7a7a\u95f4\u5df2\u521b\u5efa\u4e14\u7ed1\u5b9a\u4e86\u547d\u540d\u7a7a\u95f4
              "},{"location":"admin/register/wsres.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u5bfc\u822a\u5230 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\uff0c\u627e\u5230\u8981\u6dfb\u52a0\u8d44\u6e90\u7684\u5de5\u4f5c\u7a7a\u95f4\uff0c\u70b9\u51fb \u65b0\u589e\u5171\u4eab\u8d44\u6e90

              3. \u9009\u62e9\u96c6\u7fa4\uff0c\u8bbe\u7f6e\u5408\u9002\u7684\u8d44\u6e90\u914d\u989d\u540e\uff0c\u70b9\u51fb \u786e\u5b9a

              4. \u8fd4\u56de\u5171\u4eab\u8d44\u6e90\u9875\uff0c\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u6210\u529f\u5206\u914d\u4e86\u8d44\u6e90\uff0c\u7ba1\u7406\u5458\u53ef\u4ee5\u901a\u8fc7\u53f3\u4fa7\u7684 \u2507 \u968f\u65f6\u4fee\u6539\u3002

              \u4e0b\u4e00\u6b65\uff1a\u521b\u5efa\u4e91\u4e3b\u673a

              "},{"location":"admin/security/index.html","title":"\u4e91\u539f\u751f\u5b89\u5168","text":"

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9488\u5bf9\u5bb9\u5668\u3001Pod\u3001\u955c\u50cf\u3001\u8fd0\u884c\u65f6\u3001\u5fae\u670d\u52a1\u63d0\u4f9b\u4e86\u5168\u9762\u81ea\u52a8\u5316\u7684\u5b89\u5168\u5b9e\u73b0\u3002 \u4e0b\u8868\u5217\u51fa\u4e86\u4e00\u4e9b\u5df2\u5b9e\u73b0\u6216\u6b63\u5728\u5b9e\u73b0\u4e2d\u7684\u5b89\u5168\u7279\u6027\u3002

              \u5b89\u5168\u7279\u6027 \u7ec6\u76ee \u63cf\u8ff0 \u955c\u50cf\u5b89\u5168 \u53ef\u4fe1\u955c\u50cf\u5206\u53d1 \u4e3a\u5b9e\u73b0\u955c\u50cf\u7684\u5b89\u5168\u4f20\u8f93\uff0c\u9700\u5177\u5907\u5bc6\u94a5\u5bf9\u548c\u7b7e\u540d\u4fe1\u606f\uff0c\u4fdd\u8bc1\u4f20\u8f93\u5b89\u5168\u3002\u5728\u4f20\u8f93\u955c\u50cf\u65f6\u5177\u5907\u9009\u62e9\u5bc6\u94a5\u8fdb\u884c\u955c\u50cf\u7b7e\u540d\u80fd\u529b\u3002 \u8fd0\u884c\u65f6\u5b89\u5168 \u4e8b\u4ef6\u5173\u8054\u5206\u6790 \u652f\u6301\u5bf9\u8fd0\u884c\u65f6\u68c0\u6d4b\u51fa\u7684\u5b89\u5168\u4e8b\u4ef6\u505a\u5173\u8054\u4e0e\u98ce\u9669\u5206\u6790\uff0c\u589e\u52a0\u653b\u51fb\u6eaf\u6e90\u80fd\u529b\uff0c\u6536\u655b\u544a\u8b66\uff0c\u964d\u4f4e\u65e0\u6548\u544a\u8b66\uff0c\u63d0\u9ad8\u4e8b\u4ef6\u54cd\u5e94\u6548\u7387\u3002 - \u5bb9\u5668\u8bf1\u9975\u4ed3\u5e93 \u5177\u5907\u5bb9\u5668\u8bf1\u9975\u4ed3\u5e93\uff0c\u5e38\u89c1\u8bf1\u9975\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a\u672a\u6388\u6743\u8bbf\u95ee\u6f0f\u6d1e\u3001\u4ee3\u7801\u6267\u884c\u6f0f\u6d1e\u3001\u672c\u5730\u6587\u4ef6\u8bfb\u53d6\u6f0f\u6d1e\u3001\u8fdc\u7a0b\u547d\u4ee4\u6267\u884c RCE \u6f0f\u6d1e\u7b49\u5bb9\u5668\u8bf1\u9975\u3002 - \u5bb9\u5668\u8bf1\u9975\u90e8\u7f72 \u652f\u6301\u81ea\u5b9a\u4e49\u65b0\u589e\u8bf1\u9975\u5bb9\u5668\uff0c\u53ef\u4ee5\u81ea\u5b9a\u4e49\u670d\u52a1\u540d\u79f0\u3001\u670d\u52a1\u4f4d\u7f6e\u7b49\u3002 - \u5bb9\u5668\u8bf1\u9975\u544a\u8b66 \u652f\u6301\u5bf9\u5bb9\u5668\u8bf1\u9975\u4e2d\u53ef\u7591\u884c\u4e3a\u8fdb\u884c\u544a\u8b66\u3002 - \u504f\u79fb\u68c0\u6d4b \u5728\u626b\u63cf\u955c\u50cf\u540c\u65f6\uff0c\u5b66\u4e60\u955c\u50cf\u4e2d\u5168\u90e8\u4e8c\u8fdb\u5236\u6587\u4ef6\u4fe1\u606f\uff0c\u5e76\u5f62\u6210\u201c\u767d\u540d\u5355\u201d\uff0c\u5bb9\u5668\u4e0a\u7ebf\u540e\u4ec5\u5141\u8bb8\u201c\u767d\u540d\u5355\u201d\u4e2d\u4e8c\u8fdb\u5236\u6587\u4ef6\u8fd0\u884c\uff0c\u786e\u4fdd\u5bb9\u5668\u5185\u4e0d\u80fd\u8fd0\u884c\u4e0d\u6388\u4fe1\uff08\u5982\u975e\u6cd5\u4e0b\u8f7d\uff09\u7684\u53ef\u6267\u884c\u6587\u4ef6\u3002 \u5fae\u9694\u79bb \u9694\u79bb\u7b56\u7565\u667a\u80fd\u63a8\u8350 \u652f\u6301\u8bb0\u5f55\u8d44\u6e90\u5386\u53f2\u8bbf\u95ee\u6d41\u91cf\uff0c\u5e76\u5728\u5bf9\u8d44\u6e90\u8fdb\u884c\u9694\u79bb\u7b56\u7565\u914d\u7f6e\u65f6\u80fd\u591f\u667a\u80fd\u4f9d\u636e\u5386\u53f2\u8bbf\u95ee\u6d41\u91cf\u8fdb\u884c\u7b56\u7565\u63a8\u8350\u3002 - \u79df\u6237\u9694\u79bb \u652f\u6301\u5bf9 Kubernetes \u96c6\u7fa4\u5185\u79df\u6237\u8fdb\u884c\u9694\u79bb\u63a7\u5236\uff0c\u5177\u5907\u5bf9\u4e0d\u540c\u7684\u79df\u6237\u8bbe\u7f6e\u4e0d\u540c\u7684\u7f51\u7edc\u5b89\u5168\u7ec4\u7684\u80fd\u529b\uff0c\u652f\u6301\u79df\u6237\u7ea7\u522b\u7684\u5b89\u5168\u7b56\u7565\u8bbe\u7f6e\u529f\u80fd\uff0c\u901a\u8fc7\u4e0d\u540c\u5b89\u5168\u7ec4\u548c\u8bbe\u7f6e\u7684\u5b89\u5168\u7b56\u7565\u5b9e\u73b0\u79df\u6237\u95f4\u7f51\u7edc\u7684\u8bbf\u95ee\u4e0e\u9694\u79bb\u3002 \u5fae\u670d\u52a1\u5b89\u5168 \u670d\u52a1\u53ca API \u5b89\u5168\u626b\u63cf \u5bf9\u96c6\u7fa4\u5185\u7684\u670d\u52a1\u53ca API \u652f\u6301\u81ea\u52a8\u626b\u63cf\u3001\u624b\u52a8\u626b\u63cf\u53ca\u5468\u671f\u6027\u626b\u63cf\u7684\u5b89\u5168\u626b\u63cf\u65b9\u5f0f\uff0c\u652f\u6301\u5168\u90e8\u7684\u4f20\u7edf web \u626b\u63cf\u9879\u76ee\u5305\u62ec XSS \u6f0f\u6d1e\u3001SQL \u6ce8\u5165\u3001\u547d\u4ee4/\u4ee3\u7801\u6ce8\u5165\u3001\u76ee\u5f55\u679a\u4e3e\u3001\u8def\u5f84\u7a7f\u8d8a\u3001XML \u5b9e\u4f53\u6ce8\u5165\u3001poc\u3001\u6587\u4ef6\u4e0a\u4f20\u3001\u5f31\u53e3\u4ee4\u3001jsonp\u3001ssrf\u3001\u4efb\u610f\u8df3\u8f6c\u3001CRLF \u6ce8\u5165\u7b49\u98ce\u9669\uff0c\u4ee5\u53ca\u5bb9\u5668\u73af\u5883\u7279\u6709\u7684\u9879\uff0c\u9488\u5bf9\u53d1\u73b0\u7684\u6f0f\u6d1e\u652f\u6301\u6f0f\u6d1e\u7c7b\u578b\u5c55\u793a\u3001url \u5c55\u793a\u3001\u53c2\u6570\u5c55\u793a\u3001\u5371\u9669\u7ea7\u522b\u5c55\u793a\u3001\u6d4b\u8bd5\u65b9\u6cd5\u5c55\u793a\u7b49\u3002"},{"location":"admin/security/falco-exporter.html","title":"Falco-exporter","text":"

              Falco-exporter \u662f\u4e00\u4e2a Falco \u8f93\u51fa\u4e8b\u4ef6\u7684 Prometheus Metrics \u5bfc\u51fa\u5668\u3002

              Falco-exporter \u4f1a\u90e8\u7f72\u4e3a Kubernetes \u96c6\u7fa4\u4e0a\u7684\u5b88\u62a4\u8fdb\u7a0b\u96c6\u3002\u5982\u679c\u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5\u5e76\u8fd0\u884c Prometheus\uff0cPrometheus \u5c06\u81ea\u52a8\u53d1\u73b0 Falco-exporter \u63d0\u4f9b\u7684\u6307\u6807\u3002

              "},{"location":"admin/security/falco-exporter.html#falco-exporter_1","title":"\u5b89\u88c5 Falco-exporter","text":"

              \u672c\u9875\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5 Falco-exporter \u7ec4\u4ef6\u3002

              Note

              \u5728\u5b89\u88c5\u4f7f\u7528 Falco-exporter \u4e4b\u524d\uff0c\u9700\u8981\u5b89\u88c5\u5e76\u8fd0\u884c Falco\uff0c\u5e76\u542f\u7528 gRPC \u8f93\u51fa\uff08\u9ed8\u8ba4\u901a\u8fc7 Unix \u5957\u63a5\u5b57\u542f\u7528\uff09\u3002 \u5173\u4e8e\u542f\u7528 gRPC \u8f93\u51fa\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u53ef\u53c2\u9605\u5728 Falco Helm Chart \u4e2d\u542f\u7528 gRPC \u8f93\u51fa\u3002

              \u8bf7\u786e\u8ba4\u60a8\u7684\u96c6\u7fa4\u5df2\u6210\u529f\u63a5\u5165\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u6b65\u9aa4\u5b89\u88c5 Falco-exporter\u3002

              1. \u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb\u5bb9\u5668\u7ba1\u7406\u2014>\u96c6\u7fa4\u5217\u8868\uff0c\u7136\u540e\u627e\u5230\u51c6\u5907\u5b89\u88c5 Falco-exporter \u7684\u96c6\u7fa4\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u9009\u62e9 Helm \u5e94\u7528 -> Helm \u6a21\u677f\uff0c\u627e\u5230\u5e76\u70b9\u51fb falco-exporter\u3002

              3. \u5728\u7248\u672c\u9009\u62e9\u4e2d\u9009\u62e9\u5e0c\u671b\u5b89\u88c5\u7684\u7248\u672c\uff0c\u70b9\u51fb\u5b89\u88c5\u3002

              4. \u5728\u5b89\u88c5\u754c\u9762\uff0c\u586b\u5199\u6240\u9700\u7684\u5b89\u88c5\u53c2\u6570\u3002

                \u5728\u5982\u4e0a\u754c\u9762\u4e2d\uff0c\u586b\u5199\u5e94\u7528\u540d\u79f0\u3001\u547d\u540d\u7a7a\u95f4\u3001\u7248\u672c\u7b49\u3002

                \u5728\u5982\u4e0a\u754c\u9762\u4e2d\uff0c\u586b\u5199\u4ee5\u4e0b\u53c2\u6570:

                • Falco Prometheus Exporter -> Image Settings -> Registry\uff1a\u8bbe\u7f6e falco-exporter \u955c\u50cf\u7684\u4ed3\u5e93\u5730\u5740\uff0c\u5df2\u7ecf\u9ed8\u8ba4\u586b\u5199\u53ef\u7528\u7684\u5728\u7ebf\u4ed3\u5e93\u3002\u5982\u679c\u662f\u79c1\u6709\u5316\u73af\u5883\uff0c\u53ef\u4fee\u6539\u4e3a\u79c1\u6709\u4ed3\u5e93\u5730\u5740\u3002
                • Falco Prometheus Exporter -> Prometheus ServiceMonitor Settings -> Repository\uff1a\u8bbe\u7f6e falco-exporter \u955c\u50cf\u540d\u3002
                • Falco Prometheus Exporter -> Prometheus ServiceMonitor Settings -> Install ServiceMonitor\uff1a\u5b89\u88c5 Prometheus Operator \u670d\u52a1\u76d1\u89c6\u5668\uff0c\u9ed8\u8ba4\u5f00\u542f\u3002
                • Falco Prometheus Exporter -> Prometheus ServiceMonitor Settings -> Scrape Interval\uff1a\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u95f4\u9694\uff1b\u5982\u679c\u672a\u6307\u5b9a\uff0c\u5219\u4f7f\u7528 Prometheus \u9ed8\u8ba4\u95f4\u9694\u3002
                • Falco Prometheus Exporter -> Prometheus ServiceMonitor Settings -> Scrape Timeout\uff1a\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u6293\u53d6\u8d85\u65f6\u65f6\u95f4\uff1b\u5982\u679c\u672a\u6307\u5b9a\uff0c\u5219\u4f7f\u7528 Prometheus \u9ed8\u8ba4\u7684\u6293\u53d6\u8d85\u65f6\u65f6\u95f4\u3002

                \u5728\u5982\u4e0a\u754c\u9762\u4e2d\uff0c\u586b\u5199\u4ee5\u4e0b\u53c2\u6570:

                • Falco Prometheus Exporter -> Prometheus prometheusRules -> Install prometheusRules\uff1a\u521b\u5efa PrometheusRules\uff0c\u5bf9\u4f18\u5148\u4e8b\u4ef6\u53d1\u51fa\u8b66\u62a5\uff0c\u9ed8\u8ba4\u5f00\u542f\u3002
                • Falco Prometheus Exporter -> Prometheus prometheusRules -> Alerts settings\uff1a\u8b66\u62a5\u8bbe\u7f6e\uff0c\u4e3a\u4e0d\u540c\u7ea7\u522b\u7684\u65e5\u5fd7\u4e8b\u4ef6\u8bbe\u7f6e\u8b66\u62a5\u662f\u5426\u542f\u7528\u3001\u8b66\u62a5\u7684\u95f4\u9694\u65f6\u95f4\u3001\u8b66\u62a5\u7684\u9608\u503c\u3002
              5. \u70b9\u51fb\u53f3\u4e0b\u89d2\u786e\u5b9a\u6309\u94ae\u5373\u53ef\u5b8c\u6210\u5b89\u88c5\u3002

              "},{"location":"admin/security/falco-install.html","title":"\u5b89\u88c5 Falco","text":"

              \u8bf7\u786e\u8ba4\u60a8\u7684\u96c6\u7fa4\u5df2\u6210\u529f\u63a5\u5165\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u6b65\u9aa4\u5b89\u88c5 Falco\u3002

              1. \u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb\u5bb9\u5668\u7ba1\u7406\u2014>\u96c6\u7fa4\u5217\u8868\uff0c\u7136\u540e\u627e\u5230\u51c6\u5907\u5b89\u88c5 Falco \u7684\u96c6\u7fa4\u540d\u79f0\u3002

              2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u9009\u62e9 Helm \u5e94\u7528 -> Helm \u6a21\u677f\uff0c\u627e\u5230\u5e76\u70b9\u51fb Falco\u3002

              3. \u5728\u7248\u672c\u9009\u62e9\u4e2d\u9009\u62e9\u5e0c\u671b\u5b89\u88c5\u7684\u7248\u672c\uff0c\u70b9\u51fb\u5b89\u88c5\u3002

              4. \u5728\u5b89\u88c5\u754c\u9762\uff0c\u586b\u5199\u6240\u9700\u7684\u5b89\u88c5\u53c2\u6570\u3002

                \u5728\u5982\u4e0a\u754c\u9762\u4e2d\uff0c\u586b\u5199\u5e94\u7528\u540d\u79f0\u3001\u547d\u540d\u7a7a\u95f4\u3001\u7248\u672c\u7b49\u3002

                \u5728\u5982\u4e0a\u754c\u9762\u4e2d\uff0c\u586b\u5199\u4ee5\u4e0b\u53c2\u6570\uff1a

                • Falco -> Image Settings -> Registry\uff1a\u8bbe\u7f6e Falco \u955c\u50cf\u7684\u4ed3\u5e93\u5730\u5740\uff0c\u5df2\u7ecf\u9ed8\u8ba4\u586b\u5199\u53ef\u7528\u7684\u5728\u7ebf\u4ed3\u5e93\u3002\u5982\u679c\u662f\u79c1\u6709\u5316\u73af\u5883\uff0c\u53ef\u4fee\u6539\u4e3a\u79c1\u6709\u4ed3\u5e93\u5730\u5740\u3002

                • Falco -> Image Settings -> Repository\uff1a\u8bbe\u7f6e Falco \u955c\u50cf\u540d\u3002

                • Falco -> Falco Driver -> Image Settings -> Registry\uff1a\u8bbe\u7f6e Falco Driver \u955c\u50cf\u7684\u4ed3\u5e93\u5730\u5740\uff0c\u5df2\u7ecf\u9ed8\u8ba4\u586b\u5199\u53ef\u7528\u7684\u5728\u7ebf\u4ed3\u5e93\u3002\u5982\u679c\u662f\u79c1\u6709\u5316\u73af\u5883\uff0c\u53ef\u4fee\u6539\u4e3a\u79c1\u6709\u4ed3\u5e93\u5730\u5740\u3002

                • Falco -> Falco Driver -> Image Settings -> Repository\uff1a\u8bbe\u7f6e Falco Driver \u955c\u50cf\u540d\u3002

                • Falco -> Falco Driver -> Image Settings -> Driver Kind\uff1a\u8bbe\u7f6e Driver Kind\uff0c\u63d0\u4f9b\u4ee5\u4e0b\u4e24\u79cd\u9009\u62e9\uff1a

                  1. ebpf\uff1a\u4f7f\u7528 ebpf \u6765\u68c0\u6d4b\u4e8b\u4ef6\uff0c\u8fd9\u9700\u8981 Linux \u5185\u6838\u652f\u6301 ebpf\uff0c\u5e76\u542f\u7528 CONFIG_BPF_JIT \u548c sysctl net.core.bpf_jit_enable=1\u3002

                  2. module\uff1a\u4f7f\u7528\u5185\u6838\u6a21\u5757\u68c0\u6d4b\uff0c\u652f\u6301\u6709\u9650\u7684\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\uff0c\u53c2\u8003 module \u652f\u6301\u7cfb\u7edf\u7248\u672c\u3002

                • Falco -> Falco Driver -> Image Settings -> Log Level\uff1a\u8981\u5305\u542b\u5728\u65e5\u5fd7\u4e2d\u7684\u6700\u5c0f\u65e5\u5fd7\u7ea7\u522b\u3002

                  \u53ef\u9009\u62e9\u503c\u4e3a\uff1aemergency, alert, critical, error, warning, notice, info, debug\u3002

                • Falco -> Falco Driver -> Image Settings -> Registry\uff1a\u8bbe\u7f6e Falco Driver \u955c\u50cf\u7684\u4ed3\u5e93\u5730\u5740\uff0c\u5df2\u7ecf\u9ed8\u8ba4\u586b\u5199\u53ef\u7528\u7684\u5728\u7ebf\u4ed3\u5e93\u3002\u5982\u679c\u662f\u79c1\u6709\u5316\u73af\u5883\uff0c\u53ef\u4fee\u6539\u4e3a\u79c1\u6709\u4ed3\u5e93\u5730\u5740\u3002

                • Falco -> Falco Driver -> Image Settings -> Repository\uff1a\u8bbe\u7f6e Falco Driver \u955c\u50cf\u540d\u3002

                • Falco -> Falco Driver -> Image Settings -> Driver Kind\uff1a\u8bbe\u7f6e Driver Kind\uff0c\u63d0\u4f9b\u4ee5\u4e0b\u4e24\u79cd\u9009\u62e9\uff1a

                  1. ebpf\uff1a\u4f7f\u7528 ebpf \u6765\u68c0\u6d4b\u4e8b\u4ef6\uff0c\u8fd9\u9700\u8981 Linux \u5185\u6838\u652f\u6301 ebpf\uff0c\u5e76\u542f\u7528 CONFIG_BPF_JIT \u548c sysctl net.core.bpf_jit_enable=1\u3002
                  2. module\uff1a\u4f7f\u7528\u5185\u6838\u6a21\u5757\u68c0\u6d4b\uff0c\u652f\u6301\u6709\u9650\u7684\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\uff0c\u53c2\u8003 module \u652f\u6301\u7cfb\u7edf\u7248\u672c\u3002
                • Falco -> Falco Driver -> Image Settings -> Log Level\uff1a\u8981\u5305\u542b\u5728\u65e5\u5fd7\u4e2d\u7684\u6700\u5c0f\u65e5\u5fd7\u7ea7\u522b\u3002

                  \u53ef\u9009\u62e9\u503c\u4e3a\uff1aemergency\u3001alert\u3001critical\u3001error\u3001warning\u3001notice\u3001info\u3001debug\u3002

              5. \u70b9\u51fb\u53f3\u4e0b\u89d2\u786e\u5b9a\u6309\u94ae\u5373\u53ef\u5b8c\u6210\u5b89\u88c5\u3002

              "},{"location":"admin/security/falco.html","title":"\u4ec0\u4e48\u662f Falco","text":"

              Falco \u662f\u4e00\u4e2a\u4e91\u539f\u751f\u8fd0\u884c\u65f6\u5b89\u5168\u5de5\u5177\uff0c\u65e8\u5728\u68c0\u6d4b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u5f02\u5e38\u6d3b\u52a8\uff0c\u53ef\u7528\u4e8e\u76d1\u63a7 Kubernetes \u5e94\u7528\u7a0b\u5e8f\u548c\u5185\u90e8\u7ec4\u4ef6\u7684\u8fd0\u884c\u65f6\u5b89\u5168\u6027\u3002\u4ec5\u9700\u4e3a Falco \u64b0\u5199\u4e00\u5957\u89c4\u5219\uff0c\u5373\u53ef\u6301\u7eed\u76d1\u6d4b\u5e76\u76d1\u63a7\u5bb9\u5668\u3001\u5e94\u7528\u3001\u4e3b\u673a\u53ca\u7f51\u7edc\u7684\u5f02\u5e38\u6d3b\u52a8\u3002

              "},{"location":"admin/security/falco.html#falco_1","title":"Falco \u80fd\u68c0\u6d4b\u5230\u4ec0\u4e48\uff1f","text":"

              Falco \u53ef\u5bf9\u4efb\u4f55\u6d89\u53ca Linux \u7cfb\u7edf\u8c03\u7528\u7684\u884c\u4e3a\u8fdb\u884c\u68c0\u6d4b\u548c\u62a5\u8b66\u3002Falco \u7684\u8b66\u62a5\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u7279\u5b9a\u7684\u7cfb\u7edf\u8c03\u7528\u3001\u53c2\u6570\u4ee5\u53ca\u8c03\u7528\u8fdb\u7a0b\u7684\u5c5e\u6027\u6765\u89e6\u53d1\u3002\u4f8b\u5982\uff0cFalco \u53ef\u4ee5\u8f7b\u677e\u68c0\u6d4b\u5230\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\u4ee5\u4e0b\u4e8b\u4ef6\uff1a

              • Kubernetes \u4e2d\u7684\u5bb9\u5668\u6216 pod \u5185\u6b63\u5728\u8fd0\u884c\u4e00\u4e2a shell \u3002
              • \u5bb9\u5668\u4ee5\u7279\u6743\u6a21\u5f0f\u8fd0\u884c\uff0c\u6216\u4ece\u4e3b\u673a\u6302\u8f7d\u654f\u611f\u8def\u5f84\uff0c\u5982 /proc\u3002
              • \u4e00\u4e2a\u670d\u52a1\u5668\u8fdb\u7a0b\u6b63\u5728\u751f\u6210\u4e00\u4e2a\u610f\u5916\u7c7b\u578b\u7684\u5b50\u8fdb\u7a0b\u3002
              • \u610f\u5916\u8bfb\u53d6\u4e00\u4e2a\u654f\u611f\u6587\u4ef6\uff0c\u5982 /etc/shadow\u3002
              • \u4e00\u4e2a\u975e\u8bbe\u5907\u6587\u4ef6\u88ab\u5199\u5230 /dev\u3002
              • \u4e00\u4e2a\u6807\u51c6\u7684\u7cfb\u7edf\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5982 ls\uff0c\u6b63\u5728\u8fdb\u884c\u4e00\u4e2a\u5916\u5411\u7684\u7f51\u7edc\u8fde\u63a5\u3002
              • \u5728 Kubernetes \u96c6\u7fa4\u4e2d\u542f\u52a8\u4e00\u4e2a\u6709\u7279\u6743\u7684 Pod\u3002

              \u5173\u4e8e Falco \u9644\u5e26\u7684\u66f4\u591a\u9ed8\u8ba4\u89c4\u5219\uff0c\u8bf7\u53c2\u8003 Rules \u6587\u6863\u3002

              "},{"location":"admin/security/falco.html#falco_2","title":"\u4ec0\u4e48\u662f Falco \u89c4\u5219\uff1f","text":"

              Falco \u89c4\u5219\u5b9a\u4e49 Falco \u5e94\u76d1\u89c6\u7684\u884c\u4e3a\u53ca\u4e8b\u4ef6\uff1b\u53ef\u4ee5\u5728 Falco \u89c4\u5219\u6587\u4ef6\u6216\u901a\u7528\u914d\u7f6e\u6587\u4ef6\u64b0\u5199\u89c4\u5219\u3002\u6709\u5173\u7f16\u5199\u3001\u7ba1\u7406\u548c\u90e8\u7f72\u89c4\u5219\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 Falco Rules\u3002

              "},{"location":"admin/security/falco.html#falco_3","title":"\u4ec0\u4e48\u662f Falco \u8b66\u62a5\uff1f","text":"

              \u8b66\u62a5\u662f\u53ef\u914d\u7f6e\u7684\u4e0b\u6e38\u64cd\u4f5c\uff0c\u53ef\u4ee5\u50cf\u8bb0\u5f55\u65e5\u5fd7\u4e00\u6837\u7b80\u5355\uff0c\u4e5f\u53ef\u4ee5\u50cf STDOUT \u5411\u5ba2\u6237\u7aef\u4f20\u9012 gRPC \u8c03\u7528\u4e00\u6837\u590d\u6742\u3002\u6709\u5173\u914d\u7f6e\u3001\u7406\u89e3\u548c\u5f00\u53d1\u8b66\u62a5\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605Falco \u8b66\u62a5\u3002Falco \u53ef\u4ee5\u5c06\u8b66\u62a5\u53d1\u9001\u81f3\uff1a

              • \u6807\u51c6\u8f93\u51fa
              • \u4e00\u4efd\u6587\u4ef6
              • \u7cfb\u7edf\u65e5\u5fd7
              • \u751f\u6210\u7684\u7a0b\u5e8f
              • \u4e00\u4e2a HTTP[s] \u7aef\u70b9
              • \u901a\u8fc7 gRPC API \u7684\u5ba2\u6237\u7aef
              "},{"location":"admin/security/falco.html#falco_4","title":"Falco \u7531\u54ea\u4e9b\u90e8\u5206\u7ec4\u6210\uff1f","text":"

              Falco \u7531\u4ee5\u4e0b\u51e0\u4e2a\u4e3b\u8981\u7ec4\u4ef6\u7ec4\u6210\uff1a

              • \u7528\u6237\u7a7a\u95f4\u7a0b\u5e8f\uff1aCLI \u5de5\u5177\uff0c\u53ef\u7528\u4e8e\u4e0e Falco \u4ea4\u4e92\u3002\u7528\u6237\u7a7a\u95f4\u7a0b\u5e8f\u5904\u7406\u4fe1\u53f7\uff0c\u89e3\u6790\u6765\u81ea Falco \u9a71\u52a8\u7684\u4fe1\u606f\uff0c\u5e76\u53d1\u9001\u8b66\u62a5\u3002

              • \u914d\u7f6e\uff1a\u5b9a\u4e49 Falco \u7684\u8fd0\u884c\u65b9\u5f0f\u3001\u8981\u65ad\u8a00\u7684\u89c4\u5219\u4ee5\u53ca\u5982\u4f55\u6267\u884c\u8b66\u62a5\u3002\u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u914d\u7f6e\u3002

              • Driver\uff1a\u4e00\u6b3e\u9075\u5faa Falco \u9a71\u52a8\u89c4\u8303\u5e76\u53d1\u9001\u7cfb\u7edf\u8c03\u7528\u4fe1\u606f\u6d41\u7684\u8f6f\u4ef6\u3002\u5982\u679c\u4e0d\u5b89\u88c5\u9a71\u52a8\u7a0b\u5e8f\uff0c\u5c06\u65e0\u6cd5\u8fd0\u884c Falco\u3002\u76ee\u524d\uff0cFalco \u652f\u6301\u4ee5\u4e0b\u9a71\u52a8\u7a0b\u5e8f\uff1a

                • \u57fa\u4e8e C++ \u5e93\u6784\u5efa libscap \u7684\u5185\u6838\u6a21\u5757 libsinsp\uff08\u9ed8\u8ba4\uff09
                • \u7531\u76f8\u540c\u6a21\u5757\u6784\u5efa\u7684 BPF \u63a2\u9488
                • \u7528\u6237\u7a7a\u95f4\u68c0\u6d4b

                  \u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 Falco \u9a71\u52a8\u7a0b\u5e8f\u3002

              • \u63d2\u4ef6\uff1a\u53ef\u7528\u4e8e\u6269\u5c55 falco libraries/falco \u53ef\u6267\u884c\u6587\u4ef6\u7684\u529f\u80fd\uff0c\u6269\u5c55\u65b9\u5f0f\u662f\u901a\u8fc7\u6dfb\u52a0\u65b0\u7684\u4e8b\u4ef6\u6e90\u548c\u4ece\u4e8b\u4ef6\u4e2d\u63d0\u53d6\u4fe1\u606f\u7684\u65b0\u5b57\u6bb5\u3002 \u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605\u63d2\u4ef6\u3002

              "},{"location":"admin/share/infer.html","title":"\u521b\u5efa\u63a8\u7406\u670d\u52a1","text":""},{"location":"admin/share/job.html","title":"\u521b\u5efa\u8bad\u7ec3\u4efb\u52a1","text":""},{"location":"admin/share/notebook.html","title":"\u4f7f\u7528 Notebook","text":"

              Notebook \u901a\u5e38\u6307\u7684\u662f Jupyter Notebook \u6216\u7c7b\u4f3c\u7684\u4ea4\u4e92\u5f0f\u8ba1\u7b97\u73af\u5883\u3002 \u8fd9\u662f\u4e00\u79cd\u975e\u5e38\u6d41\u884c\u7684\u5de5\u5177\uff0c\u5e7f\u6cdb\u7528\u4e8e\u6570\u636e\u79d1\u5b66\u3001\u673a\u5668\u5b66\u4e60\u548c\u6df1\u5ea6\u5b66\u4e60\u7b49\u9886\u57df\u3002 \u672c\u9875\u8bf4\u660e\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528 Notebook\u3002

              "},{"location":"admin/share/notebook.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u7528\u6237\u5df2\u6210\u529f\u6ce8\u518c
              • \u7ba1\u7406\u5458\u4e3a\u7528\u6237\u5206\u914d\u4e86\u5de5\u4f5c\u7a7a\u95f4
              • \u5df2\u51c6\u5907\u597d\u6570\u636e\u96c6\uff08\u4ee3\u7801\u3001\u6570\u636e\u7b49\uff09
              "},{"location":"admin/share/notebook.html#notebook_1","title":"\u521b\u5efa\u548c\u4f7f\u7528 Notebook \u5b9e\u4f8b","text":"
              1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u5bfc\u822a\u81f3 AI Lab -> \u8fd0\u7ef4\u7ba1\u7406 -> \u961f\u5217\u7ba1\u7406 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae

              3. \u952e\u5165\u540d\u79f0\uff0c\u9009\u62e9\u96c6\u7fa4\u3001\u5de5\u4f5c\u7a7a\u95f4\u548c\u914d\u989d\u540e\uff0c\u70b9\u51fb \u786e\u5b9a

              4. \u4ee5 \u7528\u6237\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5bfc\u822a\u81f3 AI Lab -> Notebook \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae

              5. \u914d\u7f6e\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a

                \u57fa\u672c\u4fe1\u606f\u8d44\u6e90\u914d\u7f6e\u9ad8\u7ea7\u914d\u7f6e

                \u952e\u5165\u540d\u79f0\uff0c\u9009\u62e9\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\uff0c\u9009\u62e9\u521a\u521b\u5efa\u7684\u961f\u5217\uff0c\u70b9\u51fb \u4e00\u952e\u521d\u59cb\u5316

                \u9009\u62e9 Notebook \u7c7b\u578b\uff0c\u914d\u7f6e\u5185\u5b58\u3001CPU\uff0c\u5f00\u542f GPU\uff0c\u521b\u5efa\u548c\u914d\u7f6e PVC\uff1a

                \u5f00\u542f SSH \u5916\u7f51\u8bbf\u95ee\uff1a

              6. \u81ea\u52a8\u8df3\u8f6c\u5230 Notebook \u5b9e\u4f8b\u5217\u8868\uff0c\u70b9\u51fb\u5b9e\u4f8b\u540d\u79f0

              7. \u8fdb\u5165 Notebook \u5b9e\u4f8b\u8be6\u60c5\u9875\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u6253\u5f00 \u6309\u94ae

              8. \u8fdb\u5165\u4e86 Notebook \u5f00\u53d1\u73af\u5883\uff0c\u6bd4\u5982\u5728 /home/jovyan \u76ee\u5f55\u6302\u8f7d\u4e86\u6301\u4e45\u5377\uff0c\u53ef\u4ee5\u901a\u8fc7 git \u514b\u9686\u4ee3\u7801\uff0c\u901a\u8fc7 SSH \u8fde\u63a5\u540e\u4e0a\u4f20\u6570\u636e\u7b49\u3002

              "},{"location":"admin/share/notebook.html#ssh-notebook","title":"\u901a\u8fc7 SSH \u8bbf\u95ee Notebook \u5b9e\u4f8b","text":"
              1. \u5728\u81ea\u5df1\u7684\u7535\u8111\u4e0a\u751f\u6210 SSH \u5bc6\u94a5\u5bf9

                \u5728\u81ea\u5df1\u7535\u8111\u4e0a\u6253\u5f00\u547d\u4ee4\u884c\uff0c\u6bd4\u5982\u5728 Windows \u4e0a\u6253\u5f00 git bash\uff0c\u8f93\u5165 ssh-keygen.exe -t rsa\uff0c\u7136\u540e\u4e00\u8def\u56de\u8f66\u3002

              2. \u901a\u8fc7 cat ~/.ssh/id_rsa.pub \u7b49\u547d\u4ee4\u67e5\u770b\u5e76\u590d\u5236\u516c\u94a5

              3. \u4ee5\u7528\u6237\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u4e2a\u4eba\u4e2d\u5fc3 -> SSH \u516c\u94a5 -> \u5bfc\u5165 SSH \u516c\u94a5

              4. \u8fdb\u5165 Notebook \u5b9e\u4f8b\u7684\u8be6\u60c5\u9875\uff0c\u590d\u5236 SSH \u7684\u94fe\u63a5

              5. \u5728\u5ba2\u6237\u7aef\u4f7f\u7528 SSH \u8bbf\u95ee Notebook \u5b9e\u4f8b

              \u4e0b\u4e00\u6b65\uff1a\u521b\u5efa\u8bad\u7ec3\u4efb\u52a1

              "},{"location":"admin/share/quota.html","title":"\u914d\u989d\u7ba1\u7406","text":"

              \u7528\u6237\u88ab\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\u540e\uff0c\u5373\u53ef\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u8d44\u6e90\uff0c\u7ba1\u7406\u8d44\u6e90\u914d\u989d\u3002

              "},{"location":"admin/share/quota.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u6709\u4e00\u4e2a\u53ef\u7528\u7684\u7ba1\u7406\u5458\u8d26\u53f7
              "},{"location":"admin/share/quota.html#_3","title":"\u521b\u5efa\u548c\u7ba1\u7406\u914d\u989d","text":"
              1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\u548c\u547d\u540d\u7a7a\u95f4\uff0c\u5e76\u7ed1\u5b9a\u7528\u6237
              3. \u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u8d44\u6e90\u914d\u989d

              4. \u7ba1\u7406\u547d\u540d\u7a7a\u95f4 test-ns-1 \u7684\u8d44\u6e90\u914d\u989d\uff0c\u5176\u6570\u503c\u4e0d\u80fd\u8d85\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u7684\u914d\u989d\u3002

              5. \u4ee5 \u7528\u6237\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u67e5\u770b\u5176\u662f\u5426\u88ab\u5206\u914d\u4e86 test-ns-1 \u547d\u540d\u7a7a\u95f4\u3002

              \u4e0b\u4e00\u6b65\uff1a\u521b\u5efa AI \u8d1f\u8f7d\u4f7f\u7528 GPU \u8d44\u6e90

              "},{"location":"admin/share/workload.html","title":"\u521b\u5efa AI \u8d1f\u8f7d\u4f7f\u7528 GPU \u8d44\u6e90","text":"

              \u7ba1\u7406\u5458\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u8d44\u6e90\u914d\u989d\u540e\uff0c\u7528\u6237\u5c31\u53ef\u4ee5\u521b\u5efa AI \u5de5\u4f5c\u8d1f\u8f7d\u6765\u4f7f\u7528 GPU \u7b97\u529b\u8d44\u6e90\u3002

              "},{"location":"admin/share/workload.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u7528\u6237\u5df2\u6210\u529f\u6ce8\u518c
              • \u7ba1\u7406\u5458\u4e3a\u7528\u6237\u5206\u914d\u4e86\u5de5\u4f5c\u7a7a\u95f4
              • \u4e3a\u5de5\u4f5c\u7a7a\u95f4\u8bbe\u7f6e\u4e86\u8d44\u6e90\u914d\u989d
              • \u5df2\u7ecf\u521b\u5efa\u4e86\u4e00\u4e2a\u96c6\u7fa4
              "},{"location":"admin/share/workload.html#ai","title":"\u521b\u5efa AI \u8d1f\u8f7d\u6b65\u9aa4","text":"
              1. \u4ee5\u7528\u6237\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 \uff0c\u9009\u62e9\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c \u70b9\u51fb\u53f3\u4fa7\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae

              3. \u914d\u7f6e\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a

                \u57fa\u672c\u4fe1\u606f\u5bb9\u5668\u914d\u7f6e\u5176\u4ed6

                \u9009\u62e9\u81ea\u5df1\u7684\u547d\u540d\u7a7a\u95f4\u3002

                \u8bbe\u7f6e\u955c\u50cf\uff0c\u914d\u7f6e CPU\u3001\u5185\u5b58\u3001GPU \u7b49\u8d44\u6e90\uff0c\u8bbe\u7f6e\u542f\u52a8\u547d\u4ee4\u3002

                \u670d\u52a1\u914d\u7f6e\u548c\u9ad8\u7ea7\u914d\u7f6e\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u914d\u7f6e\u3002

              4. \u81ea\u52a8\u8fd4\u56de\u65e0\u72b6\u6001\u8d1f\u8f7d\u5217\u8868\uff0c\u70b9\u51fb\u8d1f\u8f7d\u540d\u79f0

              5. \u8fdb\u5165\u8be6\u60c5\u9875\uff0c\u53ef\u4ee5\u770b\u5230 GPU \u914d\u989d

              6. \u4f60\u8fd8\u53ef\u4ee5\u8fdb\u5165\u63a7\u5236\u53f0\uff0c\u8fd0\u884c mx-smi \u547d\u4ee4\u67e5\u770b GPU \u8d44\u6e90

              \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528 Notebook

              "},{"location":"admin/virtnest/best-practice/import-ubuntu.html","title":"\u5982\u4f55\u4ece VMWare \u5bfc\u5165\u4f20\u7edf Linux \u4e91\u4e3b\u673a\u5230\u4e91\u539f\u751f\u4e91\u4e3b\u673a\u5e73\u53f0","text":"

              \u672c\u6587\u5c06\u8be6\u7ec6\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u547d\u4ee4\u884c\u5c06\u5916\u90e8\u5e73\u53f0 VMware \u4e0a\u7684 Linux \u4e91\u4e3b\u673a\u5bfc\u5165\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u7684\u4e91\u4e3b\u673a\u4e2d\u3002

              Info

              \u672c\u6587\u6863\u5916\u90e8\u865a\u62df\u5e73\u53f0\u662f VMware vSphere Client\uff0c\u540e\u7eed\u7b80\u5199\u4e3a vSphere\u3002 \u6280\u672f\u4e0a\u662f\u4f9d\u9760 kubevirt cdi \u6765\u5b9e\u73b0\u7684\u3002\u64cd\u4f5c\u524d\uff0cvSphere \u4e0a\u88ab\u5bfc\u5165\u7684\u4e91\u4e3b\u673a\u9700\u8981\u5173\u673a\u3002 \u4ee5 Ubuntu \u64cd\u4f5c\u7cfb\u7edf\u7684\u4e91\u4e3b\u673a\u4e3a\u4f8b\u3002

              "},{"location":"admin/virtnest/best-practice/import-ubuntu.html#vsphere","title":"\u83b7\u53d6 vSphere \u7684\u4e91\u4e3b\u673a\u57fa\u7840\u4fe1\u606f","text":"
              • vSphere URL\uff1a\u76ee\u6807\u5e73\u53f0\u7684 URL \u5730\u5740\u4fe1\u606f

              • vSphere SSL \u8bc1\u4e66\u6307\u7eb9 thumbprint\uff1a\u9700\u8981\u901a\u8fc7 openssl \u83b7\u53d6

                openssl s_client -connect 10.64.56.11:443 </dev/null | openssl x509 -in /dev/stdin -fingerprint -sha1 -noout\n

                \u8f93\u51fa\u7c7b\u4f3c\u4e8e\uff1a

                Can't use SSL_get_servername\ndepth=0 CN = vcsa.daocloud.io\nverify error:num=20:unable to get local issuer certificate\nverify return:1\ndepth=0 CN = vcsa.daocloud.io\nverify error:num=21:unable to verify the first certificate\nverify return:1\ndepth=0 CN = vcsa.daocloud.io\nverify return:1\nDONE\nsha1 Fingerprint=C3:9D:D7:55:6A:43:11:2B:DE:BA:27:EA:3B:C2:13:AF:E4:12:62:4D  # \u6240\u9700\u503c\n
              • vSphere \u8d26\u53f7\uff1a\u83b7\u53d6 vSphere \u7684\u8d26\u53f7\u4fe1\u606f\uff0c\u6ce8\u610f\u6743\u9650\u95ee\u9898

              • vSphere \u5bc6\u7801\uff1a\u83b7\u53d6 vSphere \u7684\u5bc6\u7801\u4fe1\u606f

              • \u9700\u8981\u5bfc\u5165\u4e91\u4e3b\u673a\u7684 UUID\uff08\u9700\u8981\u5728 vSphere \u7684 web \u9875\u9762\u83b7\u53d6\uff09

                • \u8fdb\u5165 Vsphere \u9875\u9762\u4e2d\uff0c\u8fdb\u5165\u88ab\u5bfc\u5165\u4e91\u4e3b\u673a\u7684\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb \u7f16\u8f91\u914d\u7f6e \uff0c\u6b64\u65f6\u6253\u5f00\u6d4f\u89c8\u5668\u7684\u5f00\u53d1\u8005\u63a7\u5236\u53f0\uff0c \u70b9\u51fb \u7f51\u7edc \u2014> \u6807\u5934 \u627e\u5230\u5982\u4e0b\u56fe\u6240\u793a\u7684 URL\u3002

                • \u70b9\u51fb \u54cd\u5e94 \uff0c\u5b9a\u4f4d\u5230 vmConfigContext \u2014> config \uff0c\u6700\u7ec8\u627e\u5230\u76ee\u6807\u503c uuid \u3002

              • \u9700\u8981\u5bfc\u5165\u4e91\u4e3b\u673a\u7684 vmdk \u6587\u4ef6 path

              "},{"location":"admin/virtnest/best-practice/import-ubuntu.html#_1","title":"\u7f51\u7edc\u914d\u7f6e","text":"

              \u9700\u8981\u6839\u636e\u7f51\u7edc\u6a21\u5f0f\u7684\u4e0d\u540c\u914d\u7f6e\u4e0d\u540c\u7684\u4fe1\u606f\uff0c\u82e5\u6709\u56fa\u5b9a IP \u7684\u9700\u6c42\uff0c\u9700\u8981\u9009\u62e9 Bridge \u7f51\u7edc\u6a21\u5f0f

              • \u521b\u5efa ovs \u7c7b\u578b\u7684 Multus CR\uff0c\u53ef\u53c2\u8003\u521b\u5efa Multus CR
              • \u521b\u5efa\u5b50\u7f51\u53ca IP \u6c60\uff0c\u53c2\u8003\u521b\u5efa\u5b50\u7f51\u548c IP \u6c60

                apiVersion: spiderpool.spidernet.io/v2beta1\nkind: SpiderIPPool\nmetadata:\n  name: test2\nspec:\n  ips:\n  - 10.20.3.90\n  subnet: 10.20.0.0/16\n  gateway: 10.20.0.1\n\n---\napiVersion: spiderpool.spidernet.io/v2beta1\nkind: SpiderIPPool\nmetadata:\n  name: test3\nspec:\n  ips:\n  - 10.20.240.1\n  subnet: 10.20.0.0/16\n  gateway: 10.20.0.1\n\n---\napiVersion: spiderpool.spidernet.io/v2beta1\nkind: SpiderMultusConfig\nmetadata:\n  name: test1\n  namespace: kube-system\nspec:\n  cniType: ovs\n  coordinator:\n    detectGateway: false\n    detectIPConflict: false\n    mode: auto\n    tunePodRoutes: true\n  disableIPAM: false\n  enableCoordinator: true\n  ovs:\n    bridge: br-1\n    ippools:\n    ipv4:\n    - test1\n    - test2\n
              "},{"location":"admin/virtnest/best-practice/import-ubuntu.html#vsphere-secret","title":"\u83b7\u53d6 vSphere \u7684\u8d26\u53f7\u5bc6\u7801 secret","text":"
              apiVersion: v1\nkind: Secret\nmetadata:\n  name: vsphere   # \u53ef\u66f4\u6539\n  labels:\n    app: containerized-data-importer  # \u8bf7\u52ff\u66f4\u6539\ntype: Opaque\ndata:\n  accessKeyId: \"username-base64\"\n  secretKey: \"password-base64\"\n
              "},{"location":"admin/virtnest/best-practice/import-ubuntu.html#kubevirt-vm-yaml-vm","title":"\u7f16\u5199 kubevirt vm yaml \u521b\u5efa vm","text":"

              Tip

              \u82e5\u6709\u56fa\u5b9aIP\u9700\u6c42\uff0c\u5219\u8be5 yaml \u4e0e\u4f7f\u7528\u9ed8\u8ba4\u7f51\u7edc\u7684 yaml \u6709\u4e00\u4e9b\u533a\u522b\uff0c\u5df2\u6807\u6ce8\u3002

              apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  annotations:\n    kubevirt.io/latest-observed-api-version: v1\n    kubevirt.io/storage-observed-api-version: v1\n    virtnest.io/alias-name: \"\"\n    virtnest.io/image-secret: \"\"\n  creationTimestamp: \"2024-05-23T06:46:28Z\"\n  finalizers:\n  - kubevirt.io/virtualMachineControllerFinalize\n  generation: 1\n  labels:\n    virtnest.io/os-family: Ubuntu\n    virtnest.io/os-version: \"22.04\"\n  name: export-ubuntu\n  namespace: default\nspec:\n  dataVolumeTemplates:\n  - metadata:\n      creationTimestamp: null\n      name: export-ubuntu-rootdisk\n      namespace: default\n    spec:\n      pvc:\n        accessModes:\n        - ReadWriteOnce\n        resources:\n          requests:\n            storage: 10Gi\n        storageClassName: local-path\n      source:\n        vddk:\n          backingFile: \"[A05-09-ShangPu-Local-DataStore] virtnest-export-ubuntu/virtnest-export-ubuntu.vmdk\"  \n          url: \"https://10.64.56.21\"                                                       \n          uuid: \"421d6135-4edb-df80-ee54-8c5b10cc4e78\"                                     \n          thumbprint: \"D7:C4:22:E3:6F:69:DA:72:50:81:12:FA:42:18:3F:29:5C:7F:41:CA\"            \n          secretRef: \"vsphere\"\n          initImageURL: \"release.daocloud.io/virtnest/vddk:v8\"\n  runStrategy: Manual\n  template:\n    metadata:\n      annotations:\n        ipam.spidernet.io/ippools: '[{\"cleangateway\":false,\"ipv4\":[\"test2\"]}]'  // \u8fd9\u91cc\u6dfb\u52a0 spiderpool \u7f51\u7edc\n      creationTimestamp: null\n    spec:\n      architecture: amd64\n      domain:\n        devices:\n          disks:\n          - bootOrder: 1\n            disk:\n              bus: virtio\n            name: rootdisk\n          interfaces:                                                          // \u4fee\u6539\u8fd9\u91cc\u7684\u7f51\u7edc\u914d\u7f6e\n          - bridge: {}\n            name: ovs-bridge0\n        machine:\n          type: q35\n        resources:\n          requests:\n            memory: 4Gi\n      networks:                                                                // \u4fee\u6539\u8fd9\u91cc\u7684\u7f51\u7edc\u914d\u7f6e\n      - multus:\n          default: true\n          networkName: kube-system/test1\n        name: ovs-bridge0\n      volumes:\n      - dataVolume:\n          name: export-ubuntu-rootdisk\n        name: rootdisk\n
              "},{"location":"admin/virtnest/best-practice/import-ubuntu.html#vnc","title":"\u8fdb\u5165 VNC \u68c0\u67e5\u662f\u5426\u6210\u529f\u8fd0\u884c","text":"
              1. \u4fee\u6539\u4e91\u4e3b\u673a\u7684\u7f51\u7edc\u914d\u7f6e

              2. \u67e5\u770b\u5f53\u524d\u7f51\u7edc

                \u5728\u5b9e\u9645\u5bfc\u5165\u5b8c\u6210\u65f6\uff0c\u5982\u4e0b\u56fe\u6240\u793a\u7684\u914d\u7f6e\u5df2\u7ecf\u5b8c\u6210\u3002\u7136\u800c\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cenp1s0\u63a5\u53e3\u5e76\u6ca1\u6709\u5305\u542binet\u5b57\u6bb5\uff0c\u56e0\u6b64\u65e0\u6cd5\u8fde\u63a5\u5230\u5916\u90e8\u7f51\u7edc\u3002

              3. \u914d\u7f6e netplan

                \u5728\u4e0a\u56fe\u6240\u793a\u7684\u914d\u7f6e\u4e2d\uff0c\u5c06 ethernets \u4e2d\u7684\u5bf9\u8c61\u66f4\u6539\u4e3a enp1s0\uff0c\u5e76\u4f7f\u7528 DHCP \u83b7\u5f97 IP \u5730\u5740\u3002

              4. \u5c06 netplan \u914d\u7f6e\u5e94\u7528\u5230\u7cfb\u7edf\u7f51\u7edc\u914d\u7f6e\u4e2d

                sudo netplan apply\n
              5. \u5bf9\u5916\u90e8\u7f51\u7edc\u8fdb\u884c ping \u6d4b\u8bd5

              6. \u901a\u8fc7 SSH \u5728\u8282\u70b9\u4e0a\u8bbf\u95ee\u4e91\u4e3b\u673a\u3002

              "},{"location":"admin/virtnest/best-practice/import-windows.html","title":"\u5982\u4f55\u4ece VMWare \u5bfc\u5165\u4f20\u7edf Windows \u4e91\u4e3b\u673a\u5230\u4e91\u539f\u751f\u4e91\u4e3b\u673a\u5e73\u53f0","text":"

              \u672c\u6587\u5c06\u8be6\u7ec6\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u547d\u4ee4\u884c\u5c06\u5916\u90e8\u5e73\u53f0 VMware \u4e0a\u7684\u4e91\u4e3b\u673a\u5bfc\u5165\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u7684\u4e91\u4e3b\u673a\u4e2d\u3002

              Info

              \u672c\u6587\u6863\u5916\u90e8\u865a\u62df\u5e73\u53f0\u662f VMware vSphere Client\uff0c\u540e\u7eed\u7b80\u5199\u4e3a vSphere\u3002 \u6280\u672f\u4e0a\u662f\u4f9d\u9760 kubevirt cdi \u6765\u5b9e\u73b0\u7684\u3002\u64cd\u4f5c\u524d\uff0cvSphere \u4e0a\u88ab\u5bfc\u5165\u7684\u4e91\u4e3b\u673a\u9700\u8981\u5173\u673a\u3002 \u4ee5 Windows \u64cd\u4f5c\u7cfb\u7edf\u7684\u4e91\u4e3b\u673a\u4e3a\u4f8b\u3002

              "},{"location":"admin/virtnest/best-practice/import-windows.html#_1","title":"\u73af\u5883\u51c6\u5907","text":"

              \u5bfc\u5165\u524d\uff0c\u9700\u8981\u53c2\u8003\u7f51\u7edc\u914d\u7f6e\u51c6\u5907\u73af\u5883\u3002

              "},{"location":"admin/virtnest/best-practice/import-windows.html#windows","title":"\u83b7\u53d6 Windows \u4e91\u4e3b\u673a\u7684\u4fe1\u606f","text":"

              \u4e0e\u5bfc\u5165 Linux \u64cd\u4f5c\u7cfb\u7edf\u7684\u4e91\u4e3b\u673a\u7c7b\u4f3c\uff0c\u53ef\u53c2\u8003\u5982\u4f55\u4ece VMWare \u5bfc\u5165\u4f20\u7edf Linuxs \u4e91\u4e3b\u673a\u5230\u4e91\u539f\u751f\u4e91\u4e3b\u673a\u5e73\u53f0\u83b7\u53d6\u4ee5\u4e0b\u4fe1\u606f\uff1a

              • \u83b7\u53d6 vSphere \u8d26\u53f7\u5bc6\u7801
              • \u83b7\u53d6 vSphere \u4e91\u4e3b\u673a\u4fe1\u606f
              "},{"location":"admin/virtnest/best-practice/import-windows.html#windows_1","title":"\u68c0\u67e5 Windows \u7684\u5f15\u5bfc\u7c7b\u578b","text":"

              \u5c06\u5916\u90e8\u5e73\u53f0\u7684\u4e91\u4e3b\u673a\u5bfc\u5165\u5230 AI \u7b97\u529b\u4e2d\u5fc3\u7684\u865a\u62df\u5316\u5e73\u53f0\u4e2d\u65f6\uff0c\u9700\u8981\u6839\u636e\u4e91\u4e3b\u673a\u7684\u542f\u52a8\u7c7b\u578b\uff08BIOS \u6216 UEFI\uff09\u8fdb\u884c\u76f8\u5e94\u7684\u914d\u7f6e\uff0c\u4ee5\u786e\u4fdd\u4e91\u4e3b\u673a\u80fd\u591f\u6b63\u786e\u542f\u52a8\u548c\u8fd0\u884c\u3002

              \u53ef\u4ee5\u901a\u8fc7\"\u7cfb\u7edf\u4fe1\u606f\"\u68c0\u67e5 Windows \u662f BIOS \u8fd8\u662f UEFI \u5f15\u5bfc\u3002\u5982\u679c\u662f UEFI \u5219\u9700\u8981\u5728 YAML \u6587\u4ef6\u4e2d\u6dfb\u52a0\u76f8\u5173\u4fe1\u606f\u3002

              "},{"location":"admin/virtnest/best-practice/import-windows.html#_2","title":"\u5bfc\u5165\u8fc7\u7a0b","text":"

              \u51c6\u5907 window.yaml \u6587\u4ef6\uff0c\u6ce8\u610f\u4ee5\u4e0b\u914d\u7f6e\u9879

              • \u5f15\u5bfc Virtio \u9a71\u52a8\u7684 PVC
              • \u78c1\u76d8\u603b\u7ebf\u7c7b\u578b\uff0c\u6839\u636e\u5f15\u5bfc\u7c7b\u578b\u8bbe\u7f6e\u4e3a sata \u6216 virtio
              • \u5982\u679c\u4f7f\u7528 UEFI\uff0c\u9700\u8981\u6dfb\u52a0 UEFI \u914d\u7f6e
              \u70b9\u51fb\u67e5\u770b window.yaml \u793a\u4f8b window.yaml
              apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  labels:\n    virtnest.io/os-family: windows\n    virtnest.io/os-version: \"server2019\"\n  name: export-window-21\n  namespace: default\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        name: export-window-21-rootdisk\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 22Gi\n          storageClassName: local-path\n        source:\n          vddk:\n            backingFile: \"[A05-09-ShangPu-Local-DataStore] virtnest-export-window/virtnest-export-window.vmdk\"\n            url: \"https://10.64.56.21\"\n            uuid: \"421d40f2-21a2-cfeb-d5c9-e7f8abfc2faa\"\n            thumbprint: \"D7:C4:22:E3:6F:69:DA:72:50:81:12:FA:42:18:3F:29:5C:7F:41:CA\"\n            secretRef: \"vsphere21\"\n            initImageURL: \"release.daocloud.io/virtnest/vddk:v8\"\n    - metadata:\n        name: export-window-21-datadisk\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 1Gi\n          storageClassName: local-path\n        source:\n          vddk:\n            backingFile: \"[A05-09-ShangPu-Local-DataStore] virtnest-export-window/virtnest-export-window_1.vmdk\"\n            url: \"https://10.64.56.21\"\n            uuid: \"421d40f2-21a2-cfeb-d5c9-e7f8abfc2faa\"\n            thumbprint: \"D7:C4:22:E3:6F:69:DA:72:50:81:12:FA:42:18:3F:29:5C:7F:41:CA\"\n            secretRef: \"vsphere21\"\n            initImageURL: \"release.daocloud.io/virtnest/vddk:v8\"\n    # <1>. \u5f15\u5bfc virtio \u9a71\u52a8\u7684 pvc\n    # \u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\n    - metadata:\n        name: virtio-disk\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 10Mi\n          storageClassName: local-path\n        source:\n          blank: {}\n          # \u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\n  running: true\n  template:\n    metadata:\n      annotations:\n        ipam.spidernet.io/ippools: '[{\"cleangateway\":false,\"ipv4\":[\"test86\"]}]'\n    spec:\n      dnsConfig:\n        nameservers:\n        - 223.5.5.5\n      domain:\n        cpu:\n          cores: 2\n        memory:\n          guest: 4Gi\n        devices:\n          disks:\n            - bootOrder: 1\n              disk:\n                bus: sata   # <2> \u78c1\u76d8\u603b\u7ebf\u7c7b\u578b\uff0c\u6839\u636e\u5f15\u5bfc\u7c7b\u578b\u8bbe\u7f6e\u4e3a sata \u6216 virtio\n              name: rootdisk\n            - bootOrder: 2\n              disk:\n                bus: sata   # <2> \u78c1\u76d8\u603b\u7ebf\u7c7b\u578b\uff0c\u6839\u636e\u5f15\u5bfc\u7c7b\u578b\u8bbe\u7f6e\u4e3a sata \u6216 virtio\n              name: datadisk\n            # <1>. \u5f15\u5bfc virtio \u9a71\u52a8\u7684 disk\n            # \u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\n            - bootOrder: 3\n              disk:\n                bus: virtio\n              name: virtdisk\n            - bootOrder: 4\n              cdrom:\n                bus: sata\n              name: virtiocontainerdisk\n            # \u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\n          interfaces:\n            - bridge: {}\n              name: ovs-bridge0\n        # <3> \u5728\u4e0a\u6587\u201c\u67e5\u770b window \u5f15\u5bfc\u662f BIOS \u8fd8\u662f UEFI\u201d\n        # \u5982\u679c\u4f7f\u7528\u4e86 UEFI \u9700\u8981\u6dfb\u52a0\u7684\u4fe1\u606f\n        # \u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\n        features:\n          smm:\n            enabled: true\n        firmware:\n          bootloader:\n            efi:\n              secureBoot: false\n        # \u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\n        machine:\n          type: q35\n        resources:\n          requests:\n            memory: 4Gi\n      networks:\n        - multus:\n            default: true\n            networkName: kube-system/test1\n          name: ovs-bridge0\n      volumes:\n        - dataVolume:\n            name: export-window-21-rootdisk\n          name: rootdisk\n        - dataVolume:\n            name: export-window-21-datadisk\n          name: datadisk      \n        # <1> \u5f15\u5bfc virtio \u9a71\u52a8\u7684 volumes\n        # \u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\n        - dataVolume:\n            name: virtio-disk\n          name: virtdisk\n        - containerDisk:\n            image: release-ci.daocloud.io/virtnest/kubevirt/virtio-win:v4.12.12-5\n          name: virtiocontainerdisk\n        # \u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\n
              "},{"location":"admin/virtnest/best-practice/import-windows.html#vnc-virtio","title":"\u901a\u8fc7 VNC \u5b89\u88c5 VirtIO \u9a71\u52a8","text":"
              1. \u901a\u8fc7 VNC \u8bbf\u95ee\u548c\u8fde\u63a5\u5230\u4e91\u4e3b\u673a\u3002
              2. \u6839\u636e Windows \u7248\u672c\u4e0b\u8f7d\u5e76\u5b89\u88c5\u76f8\u5e94\u7684 VirtIO \u9a71\u52a8\u7a0b\u5e8f\u3002
              3. \u53ef\u4ee5\u5f00\u542f\u8fdc\u7a0b\u684c\u9762\uff08Remote Desktop\uff09\uff0c\u65b9\u4fbf\u5728\u540e\u7eed\u901a\u8fc7\u8fdc\u7a0b\u684c\u9762\u534f\u8bae\uff08RDP\uff09\u8fde\u63a5\u5230\u4e91\u4e3b\u673a\u3002
              4. \u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u91cd\u542f\u4e91\u4e3b\u673a\u540e\u66f4\u65b0 YAML\u3002
              "},{"location":"admin/virtnest/best-practice/import-windows.html#yaml","title":"\u91cd\u542f\u540e\u66f4\u65b0 YAML","text":"\u70b9\u51fb\u67e5\u770b\u4fee\u6539\u540e\u7684 window.yaml \u793a\u4f8b window.yaml
              # \u5220\u9664 \u6807\u53f7 <1> \u76f8\u5173\u5b57\u6bb5\uff0c\u4fee\u6539\u6807\u53f7 <2> \u5b57\u6bb5\uff1asata \u6539\u6210 virtio\napiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  labels:\n    virtnest.io/os-family: windows\n    virtnest.io/os-version: \"server2019\"\n  name: export-window-21\n  namespace: default\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        name: export-window-21-rootdisk\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 22Gi\n          storageClassName: local-path\n        source:\n          vddk:\n            backingFile: \"[A05-09-ShangPu-Local-DataStore] virtnest-export-window/virtnest-export-window.vmdk\"\n            url: \"https://10.64.56.21\"\n            uuid: \"421d40f2-21a2-cfeb-d5c9-e7f8abfc2faa\"\n            thumbprint: \"D7:C4:22:E3:6F:69:DA:72:50:81:12:FA:42:18:3F:29:5C:7F:41:CA\"\n            secretRef: \"vsphere21\"\n            initImageURL: \"release.daocloud.io/virtnest/vddk:v8\"\n    - metadata:\n        name: export-window-21-datadisk\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 1Gi\n          storageClassName: local-path\n        source:\n          vddk:\n            backingFile: \"[A05-09-ShangPu-Local-DataStore] virtnest-export-window/virtnest-export-window_1.vmdk\"\n            url: \"https://10.64.56.21\"\n            uuid: \"421d40f2-21a2-cfeb-d5c9-e7f8abfc2faa\"\n            thumbprint: \"D7:C4:22:E3:6F:69:DA:72:50:81:12:FA:42:18:3F:29:5C:7F:41:CA\"\n            secretRef: \"vsphere21\"\n            initImageURL: \"release.daocloud.io/virtnest/vddk:v8\"\n  running: true\n  template:\n    metadata:\n      annotations:\n        ipam.spidernet.io/ippools: '[{\"cleangateway\":false,\"ipv4\":[\"test86\"]}]'\n    spec:\n      dnsConfig:\n        nameservers:\n        - 223.5.5.5\n      domain:\n        cpu:\n          cores: 2\n        memory:\n          guest: 4Gi\n        devices:\n          disks:\n            - bootOrder: 1\n              disk:\n                bus: virtio  # <2>\n              name: rootdisk\n            - bootOrder: 2\n              disk:\n                bus: virtio  # <2>\n              name: datadisk\n          interfaces:\n            - bridge: {}\n              name: ovs-bridge0\n        # <3> \u5728\u4e0a\u6587\u201c\u67e5\u770b window \u5f15\u5bfc\u662f BIOS \u8fd8\u662f UEFI\u201d\n        # \u5982\u679c\u4f7f\u7528\u4e86 UEFI \u9700\u8981\u6dfb\u52a0\u7684\u4fe1\u606f\n        # \u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\u2193\n        features:\n          smm:\n            enabled: true\n        firmware:\n          bootloader:\n            efi:\n              secureBoot: false\n        # \u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\u2191\n        machine:\n          type: q35\n        resources:\n          requests:\n            memory: 4Gi\n      networks:\n        - multus:\n            default: true\n            networkName: kube-system/test1\n          name: ovs-bridge0\n      volumes:\n        - dataVolume:\n            name: export-window-21-rootdisk\n          name: rootdisk\n        - dataVolume:\n            name: export-window-21-datadisk\n          name: datadisk\n
              "},{"location":"admin/virtnest/best-practice/import-windows.html#rdp","title":"RDP \u8bbf\u95ee\u548c\u9a8c\u8bc1","text":"
              • \u4f7f\u7528 RDP \u5ba2\u6237\u7aef\u8fde\u63a5\u5230\u4e91\u4e3b\u673a\u3002\u8f93\u5165\u9ed8\u8ba4\u8d26\u53f7 admin \u548c\u5bc6\u7801 dangerous!123 \u8fdb\u884c\u767b\u5f55\u3002

              • \u9a8c\u8bc1\u7f51\u7edc\u8bbf\u95ee\u548c\u6570\u636e\u76d8\u6570\u636e

              "},{"location":"admin/virtnest/best-practice/import-windows.html#linux-windows","title":"\u5bf9\u6bd4\u5bfc\u5165 Linux \u548c Windows \u4e91\u4e3b\u673a\u7684\u5dee\u5f02","text":"
              • Windows \u53ef\u80fd\u9700\u8981 UEFI \u914d\u7f6e\u3002
              • Windows \u901a\u5e38\u9700\u8981\u5b89\u88c5 VirtIO \u9a71\u52a8\u3002
              • Windows \u591a\u78c1\u76d8\u5bfc\u5165\u901a\u5e38\u4e0d\u9700\u8981\u91cd\u65b0\u6302\u8f7d\u78c1\u76d8\u3002
              "},{"location":"admin/virtnest/best-practice/vm-windows.html","title":"\u521b\u5efa Windows \u4e91\u4e3b\u673a","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u547d\u4ee4\u884c\u521b\u5efa Windows \u4e91\u4e3b\u673a\u3002

              "},{"location":"admin/virtnest/best-practice/vm-windows.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              1. \u521b\u5efa Windows \u4e91\u4e3b\u673a\u4e4b\u524d\uff0c\u9700\u8981\u5148\u53c2\u8003\u5b89\u88c5\u4e91\u4e3b\u673a\u6a21\u5757\u7684\u4f9d\u8d56\u548c\u524d\u63d0\u786e\u5b9a\u60a8\u7684\u73af\u5883\u5df2\u7ecf\u51c6\u5907\u5c31\u7eea\u3002
              2. \u521b\u5efa\u8fc7\u7a0b\u5efa\u8bae\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff1a\u5b89\u88c5 windows \u7684\u6587\u6863\u3001 \u5b89\u88c5 Windows \u76f8\u5173\u9a71\u52a8\u7a0b\u5e8f\u3002
              3. Windows \u4e91\u4e3b\u673a\u5efa\u8bae\u4f7f\u7528 VNC \u7684\u8bbf\u95ee\u65b9\u5f0f\u3002
              "},{"location":"admin/virtnest/best-practice/vm-windows.html#iso","title":"\u5bfc\u5165 ISO \u955c\u50cf","text":"

              \u200b\u521b\u5efa Windows \u4e91\u4e3b\u673a\u9700\u8981\u5bfc\u5165 ISO \u955c\u50cf\u7684\u4e3b\u8981\u539f\u56e0\u662f\u4e3a\u4e86\u5b89\u88c5 Windows \u64cd\u4f5c\u7cfb\u7edf\u3002 \u4e0e Linux \u64cd\u4f5c\u7cfb\u7edf\u4e0d\u540c\uff0cWindows \u64cd\u4f5c\u7cfb\u7edf\u5b89\u88c5\u8fc7\u7a0b\u901a\u5e38\u9700\u8981\u4ece\u5b89\u88c5\u5149\u76d8\u6216 ISO \u955c\u50cf\u6587\u4ef6\u4e2d\u5f15\u5bfc\u3002 \u56e0\u6b64\uff0c\u5728\u521b\u5efa Windows \u4e91\u4e3b\u673a\u65f6\uff0c\u9700\u8981\u5148\u5bfc\u5165 Windows \u64cd\u4f5c\u7cfb\u7edf\u7684\u5b89\u88c5 ISO \u955c\u50cf\u6587\u4ef6\uff0c\u4ee5\u4fbf\u4e91\u4e3b\u673a\u80fd\u591f\u6b63\u5e38\u5b89\u88c5\u3002

              \u4ee5\u4e0b\u4ecb\u7ecd\u4e24\u4e2a\u5bfc\u5165 ISO \u955c\u50cf\u7684\u529e\u6cd5\uff1a

              1. \uff08\u63a8\u8350\uff09\u5236\u4f5c Docker \u955c\u50cf\uff0c\u5efa\u8bae\u53c2\u8003 \u6784\u5efa\u955c\u50cf

              2. \uff08\u4e0d\u63a8\u8350\uff09\u4f7f\u7528 virtctl \u5c06\u955c\u50cf\u5bfc\u5165\u5230 PVC \u4e2d

                \u53ef\u53c2\u8003\u5982\u4e0b\u547d\u4ee4

                virtctl image-upload -n <\u547d\u540d\u7a7a\u95f4> pvc <PVC \u540d\u79f0> \\ \n   --image-path=<IOS \u6587\u4ef6\u8def\u5f84> \\ \n   --access-mode=ReadWriteOnce \\ \n   --size=6G \\ --uploadproxy-url=<https://cdi-uploadproxy ClusterIP \u548c\u7aef\u53e3> \\ \n   --force-bind \\ \n   --insecure \\ \n   --wait-secs=240 \\ \n   --storage-class=<SC>\n

                \u4f8b\u5982\uff1a

                virtctl image-upload -n <\u547d\u540d\u7a7a\u95f4> pvc <PVC \u540d\u79f0> \\ \n   --image-path=<IOS \u6587\u4ef6\u8def\u5f84> \\ \n   --access-mode=ReadWriteOnce \\ \n   --size=6G \\ --uploadproxy-url=<https://cdi-uploadproxy ClusterIP \u548c\u7aef\u53e3> \\ \n   --force-bind \\ \n   --insecure \\ \n   --wait-secs=240 \\ \n   --storage-class=<SC>\n
              "},{"location":"admin/virtnest/best-practice/vm-windows.html#yaml-windows","title":"YAML \u521b\u5efa Windows \u4e91\u4e3b\u673a","text":"

              \u4f7f\u7528 yaml \u521b\u5efa Windows \u4e91\u4e3b\u673a\uff0c\u66f4\u52a0\u7075\u6d3b\u5e76\u4e14\u66f4\u6613\u7f16\u5199\u559d\u7ef4\u62a4\u3002\u4ee5\u4e0b\u4ecb\u7ecd\u4e09\u79cd\u53c2\u8003\u7684 yaml\uff1a

              1. \u63a8\u8350\u4f7f\u7528 Virtio \u9a71\u52a8 + Docker \u955c\u50cf\u7684\u65b9\u5f0f

                • \u5982\u679c\u4f60\u9700\u8981\u4f7f\u7528\u5b58\u50a8\u80fd\u529b-\u6302\u8f7d\u78c1\u76d8\uff0c\u8bf7\u5b89\u88c5 viostor \u9a71\u52a8\u7a0b\u5e8f
                • \u5982\u679c\u4f60\u9700\u8981\u4f7f\u7528\u7f51\u7edc\u80fd\u529b\uff0c\u8bf7\u5b89\u88c5 NetKVM \u9a71\u52a8\u7a0b\u5e8f
                apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  annotations:\n    kubevirt.io/latest-observed-api-version: v1\n    kubevirt.io/storage-observed-api-version: v1\n  labels:\n    virtnest.io/os-family: Windows\n    virtnest.io/os-version: '10'\n  name: windows10-virtio\n  namespace: default\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        name: win10-system-virtio\n        namespace: default\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 32Gi\n          storageClassName: local-path\n        source:\n          blank: {}\n  running: true\n  template:\n    metadata:\n      labels:\n        app: windows10-virtio\n        version: v1\n        kubevirt.io/domain: windows10-virtio\n    spec:\n      architecture: amd64\n      domain:\n        cpu:\n          cores: 8\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n            - bootOrder: 1\n              disk:\n                bus: virtio # \u4f7f\u7528 virtio\n              name: win10-system-virtio\n            - bootOrder: 2\n              cdrom:\n                bus: sata # \u5bf9\u4e8e ISO \u955c\u50cf\uff0c\u4f7f\u7528 sata\n              name: iso-win10\n            - bootOrder: 3\n              cdrom:\n                bus: sata # \u5bf9\u4e8e containerdisk\uff0c\u4f7f\u7528 sata\n              name: virtiocontainerdisk\n          interfaces:\n            - name: default\n              masquerade: {}\n        machine:\n          type: q35\n        resources:\n          requests:\n            memory: 8G\n      networks:\n        - name: default\n          pod: {}\n      volumes:\n        - name: iso-win10\n          persistentVolumeClaim:\n            claimName: iso-win10\n        - name: win10-system-virtio\n          persistentVolumeClaim:\n            claimName: win10-system-virtio\n        - containerDisk:\n            image: kubevirt/virtio-container-disk\n          name: virtiocontainerdisk\n
              2. \uff08\u4e0d\u63a8\u8350\uff09\u4f7f\u7528 Virtio \u9a71\u52a8\u548c virtctl \u5de5\u5177\u7684\u7ec4\u5408\u65b9\u5f0f\uff0c\u5c06\u955c\u50cf\u5bfc\u5165\u5230 Persistent Volume Claim\uff08PVC\uff09\u4e2d\u3002

                apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  annotations:\n    kubevirt.io/latest-observed-api-version: v1\n    kubevirt.io/storage-observed-api-version: v1\n  labels:\n    virtnest.io/os-family: Windows\n    virtnest.io/os-version: '10'\n  name: windows10-virtio\n  namespace: default\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        name: win10-system-virtio\n        namespace: default\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 32Gi\n          storageClassName: local-path\n        source:\n          blank: {}\n  running: true\n  template:\n    metadata:\n      labels:\n        app: windows10-virtio\n        version: v1\n        kubevirt.io/domain: windows10-virtio\n    spec:\n      architecture: amd64\n      domain:\n        cpu:\n          cores: 8\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n            - bootOrder: 1\n              # \u8bf7\u4f7f\u7528 virtio\n              disk:\n                bus: virtio\n              name: win10-system-virtio\n              # ISO \u955c\u50cf\u8bf7\u4f7f\u7528 sata\n            - bootOrder: 2\n              cdrom:\n                bus: sata\n              name: iso-win10\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # containerdisk \u8bf7\u4f7f\u7528 sata\n            - bootOrder: 3\n              cdrom:\n                bus: sata\n              name: virtiocontainerdisk\n          interfaces:\n            - name: default\n              masquerade: {}\n        machine:\n          type: q35\n        resources:\n          requests:\n            memory: 8G\n      networks:\n        - name: default\n          pod: {}\n      volumes:\n        - name: iso-win10\n          persistentVolumeClaim:\n            claimName: iso-win10\n        - name: win10-system-virtio\n          persistentVolumeClaim:\n            claimName: win10-system-virtio\n        - containerDisk:\n            image: kubevirt/virtio-container-disk\n          name: virtiocontainerdisk\n
              3. \uff08\u4e0d\u63a8\u8350\uff09\u4e0d\u4f7f\u7528 Virtio \u9a71\u52a8\u7684\u60c5\u51b5\u4e0b\uff0c\u4f7f\u7528 virtctl \u5de5\u5177\u5c06\u955c\u50cf\u5bfc\u5165\u5230 Persistent Volume Claim\uff08PVC\uff09\u4e2d\u3002\u4e91\u4e3b\u673a\u53ef\u80fd\u4f7f\u7528\u5176\u4ed6\u7c7b\u578b\u7684\u9a71\u52a8\u6216\u9ed8\u8ba4\u9a71\u52a8\u6765\u64cd\u4f5c\u78c1\u76d8\u548c\u7f51\u7edc\u8bbe\u5907\u3002

                apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  annotations:\n    kubevirt.io/latest-observed-api-version: v1\n    kubevirt.io/storage-observed-api-version: v1\n  labels:\n    virtnest.io/os-family: Windows\n    virtnest.io/os-version: '10'\n  name: windows10\n  namespace: default\nspec:\n  dataVolumeTemplates:\n    # \u521b\u5efa\u7cfb\u7edf\u76d8\uff0c\u4f60\u521b\u5efa\u591a\u4e2a PVC\uff08\u78c1\u76d8\uff09\n    - metadata:\n        name: win10-system\n        namespace: default\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 32Gi\n          storageClassName: local-path\n        source:\n          blank: {}\n  running: true\n  template:\n    metadata:\n      labels:\n        app: windows10\n        version: v1\n        kubevirt.io/domain: windows10\n    spec:\n      architecture: amd64\n      domain:\n        cpu:\n          cores: 8\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n            - bootOrder: 1\n              # \u65e0 virtio \u9a71\u52a8\uff0c\u8bf7\u4f7f\u7528 sata\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0cdrom:\n                bus: sata\n              name: win10-system\n              # ISO \u955c\u50cf\uff0c\u8bf7\u4f7f\u7528 sata\n            - bootOrder: 2\n              cdrom:\n                bus: sata\n              name: iso-win10\n          interfaces:\n            - name: default\n              masquerade: {}\n        machine:\n          type: q35\n        resources:\n          requests:\n            memory: 8G\n      networks:\n        - name: default\n          pod: {}\n      volumes:\n        - name: iso-win10\n          persistentVolumeClaim:\n            claimName: iso-win10\n        - name: win10-system\n          persistentVolumeClaim:\n            claimName: win10-system\n
              "},{"location":"admin/virtnest/best-practice/vm-windows.html#_2","title":"\u4e91\u684c\u9762","text":"

              Windows \u7248\u672c\u7684\u4e91\u4e3b\u673a\u5927\u591a\u6570\u60c5\u51b5\u662f\u9700\u8981\u8fdc\u7a0b\u684c\u9762\u63a7\u5236\u8bbf\u95ee\u7684\uff0c\u5efa\u8bae\u4f7f\u7528 Microsoft \u8fdc\u7a0b\u684c\u9762\u63a7\u5236\u60a8\u7684\u4e91\u4e3b\u673a\u3002

              Note

              • \u4f60\u7684 Windows \u7248\u672c\u9700\u652f\u6301\u8fdc\u7a0b\u684c\u9762\u63a7\u5236\uff0c\u624d\u80fd\u4f7f\u7528 Microsoft \u8fdc\u7a0b\u684c\u9762\u3002
              • \u9700\u8981\u5173\u95ed Windows \u7684\u9632\u706b\u5899\u3002
              "},{"location":"admin/virtnest/best-practice/vm-windows.html#_3","title":"\u589e\u52a0\u6570\u636e\u76d8","text":"

              Windows \u4e91\u4e3b\u673a\u6dfb\u52a0\u6570\u636e\u76d8\u7684\u65b9\u5f0f\u548c Linux \u4e91\u4e3b\u673a\u4e00\u81f4\u3002\u4f60\u53ef\u4ee5\u53c2\u8003\u4e0b\u9762\u7684 YAML \u793a\u4f8b\uff1a

                apiVersion: kubevirt.io/v1\n  kind: VirtualMachine\n  <...>\n  spec:\n    dataVolumeTemplates:\n      # \u6dfb\u52a0\u4e00\u5757\u6570\u636e\u76d8\n      - metadata:\n        name: win10-disk\n        namespace: default\n        spec:\n          pvc:\n            accessModes:\n              - ReadWriteOnce\n            resources:\n              requests:\n                storage: 16Gi\n            storageClassName: hwameistor-storage-lvm-hdd\n          source:\n            blank: {}\n    template:\n      spec:\n        domain:\n          devices:\n            disks:\n              - bootOrder: 1\n                disk:\n                  bus: virtio\n                name: win10-system\n              # \u6dfb\u52a0\u4e00\u5757\u6570\u636e\u76d8\n              - bootOrder: 2\n                disk:\n                  bus: virtio\n                name: win10-disk\n            <....>\n        volumes:\n          <....>\n          # \u6dfb\u52a0\u4e00\u5757\u6570\u636e\u76d8\n          - name: win10-disk\n            persistentVolumeClaim:\n              claimName: win10-disk\n
              "},{"location":"admin/virtnest/best-practice/vm-windows.html#_4","title":"\u5feb\u7167\u3001\u514b\u9686\u3001\u5b9e\u65f6\u8fc1\u79fb","text":"

              \u8fd9\u4e9b\u80fd\u529b\u548c Linux \u4e91\u4e3b\u673a\u4e00\u81f4\uff0c\u53ef\u76f4\u63a5\u53c2\u8003\u914d\u7f6e Linux \u4e91\u4e3b\u673a\u7684\u65b9\u5f0f\u3002

              "},{"location":"admin/virtnest/best-practice/vm-windows.html#windows_1","title":"\u8bbf\u95ee Windows \u4e91\u4e3b\u673a","text":"
              1. \u521b\u5efa\u6210\u529f\u540e\uff0c\u8fdb\u5165\u4e91\u4e3b\u673a\u5217\u8868\u9875\u9762\uff0c\u53d1\u73b0\u4e91\u4e3b\u673a\u6b63\u5e38\u8fd0\u884c\u3002

              2. \u70b9\u51fb\u63a7\u5236\u53f0\u8bbf\u95ee\uff08VNC\uff09\uff0c\u53ef\u4ee5\u6b63\u5e38\u8bbf\u95ee\u3002

              "},{"location":"admin/virtnest/gpu/vm-gpu.html","title":"\u4e91\u4e3b\u673a\u914d\u7f6e GPU\uff08\u76f4\u901a\u6a21\u5f0f\uff09","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\uff0c\u914d\u7f6e GPU \u7684\u524d\u63d0\u6761\u4ef6\u3002

              \u914d\u7f6e\u4e91\u4e3b\u673a\u7684 GPU \u7684\u91cd\u70b9\u662f\u5bf9 GPU Operator \u8fdb\u884c\u914d\u7f6e\uff0c\u4ee5\u4fbf\u5728\u5de5\u4f5c\u8282\u70b9\u4e0a\u90e8\u7f72\u4e0d\u540c\u7684\u8f6f\u4ef6\u7ec4\u4ef6\uff0c \u5177\u4f53\u53d6\u51b3\u4e8e\u8fd9\u4e9b\u8282\u70b9\u4e0a\u914d\u7f6e\u8fd0\u884c\u7684 GPU \u5de5\u4f5c\u8d1f\u8f7d\u3002\u4ee5\u4e0b\u4e09\u4e2a\u8282\u70b9\u4e3a\u4f8b\uff1a

              • controller-node-1 \u8282\u70b9\u914d\u7f6e\u4e3a\u8fd0\u884c\u5bb9\u5668\u3002
              • work-node-1 \u8282\u70b9\u914d\u7f6e\u4e3a\u8fd0\u884c\u5177\u6709\u76f4\u901a GPU \u7684\u4e91\u4e3b\u673a\u3002
              • work-node-2 \u8282\u70b9\u914d\u7f6e\u4e3a\u8fd0\u884c\u5177\u6709\u865a\u62df vGPU \u7684\u4e91\u4e3b\u673a\u3002
              "},{"location":"admin/virtnest/gpu/vm-gpu.html#_1","title":"\u5047\u8bbe\u3001\u9650\u5236\u548c\u4f9d\u8d56\u6027","text":"

              \u5de5\u4f5c\u8282\u70b9\u53ef\u4ee5\u8fd0\u884c GPU \u52a0\u901f\u5bb9\u5668\uff0c\u4e5f\u53ef\u4ee5\u8fd0\u884c\u5177\u6709 GPU \u76f4\u901a\u7684 GPU \u52a0\u901f VM\uff0c\u6216\u8005\u5177\u6709 vGPU \u7684 GPU \u52a0\u901f VM\uff0c\u4f46\u4e0d\u80fd\u8fd0\u884c\u5176\u4e2d\u4efb\u4f55\u4e00\u4e2a\u7684\u7ec4\u5408\u3002

              1. \u96c6\u7fa4\u7ba1\u7406\u5458\u6216\u5f00\u53d1\u4eba\u5458\u9700\u8981\u63d0\u524d\u4e86\u89e3\u96c6\u7fa4\u60c5\u51b5\uff0c\u5e76\u6b63\u786e\u6807\u8bb0\u8282\u70b9\u4ee5\u6307\u793a\u5b83\u4eec\u5c06\u8fd0\u884c\u7684 GPU \u5de5\u4f5c\u8d1f\u8f7d\u7c7b\u578b\u3002
              2. \u8fd0\u884c\u5177\u6709 GPU \u76f4\u901a\u6216 vGPU \u7684 GPU \u52a0\u901f VM \u7684\u5de5\u4f5c\u8282\u70b9\u88ab\u5047\u5b9a\u4e3a\u88f8\u673a\uff0c\u5982\u679c\u5de5\u4f5c\u8282\u70b9\u662f\u4e91\u4e3b\u673a\uff0c \u5219\u9700\u8981\u5728\u4e91\u4e3b\u673a\u5e73\u53f0\u4e0a\u542f\u7528 GPU \u76f4\u901a\u529f\u80fd\uff0c\u8bf7\u5411\u4e91\u4e3b\u673a\u5e73\u53f0\u63d0\u4f9b\u5546\u54a8\u8be2\u3002
              3. \u4e0d\u652f\u6301 Nvidia MIG \u7684 vGPU\u3002
              4. GPU Operator \u4e0d\u4f1a\u81ea\u52a8\u5728 VM \u4e2d\u5b89\u88c5 GPU \u9a71\u52a8\u7a0b\u5e8f\u3002
              "},{"location":"admin/virtnest/gpu/vm-gpu.html#iommu","title":"\u542f\u7528 IOMMU","text":"

              \u4e3a\u4e86\u542f\u7528GPU\u76f4\u901a\u529f\u80fd\uff0c\u96c6\u7fa4\u8282\u70b9\u9700\u8981\u5f00\u542fIOMMU\u3002\u8bf7\u53c2\u8003\u5982\u4f55\u5f00\u542f IOMMU\u3002 \u5982\u679c\u60a8\u7684\u96c6\u7fa4\u662f\u5728\u4e91\u4e3b\u673a\u4e0a\u8fd0\u884c\uff0c\u8bf7\u54a8\u8be2\u60a8\u7684\u4e91\u4e3b\u673a\u5e73\u53f0\u63d0\u4f9b\u5546\u3002

              "},{"location":"admin/virtnest/gpu/vm-gpu.html#_2","title":"\u6807\u8bb0\u96c6\u7fa4\u8282\u70b9","text":"

              \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \uff0c\u9009\u53d6\u60a8\u7684\u5de5\u4f5c\u96c6\u7fa4\uff0c\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \u7684\u64cd\u4f5c\u680f \u4fee\u6539\u6807\u7b7e \uff0c\u4e3a\u8282\u70b9\u6dfb\u52a0\u6807\u7b7e\uff0c\u6bcf\u4e2a\u8282\u70b9\u53ea\u80fd\u6709\u4e00\u79cd\u6807\u7b7e\u3002

              \u60a8\u53ef\u4ee5\u4e3a\u6807\u7b7e\u5206\u914d\u4ee5\u4e0b\u503c\uff1acontainer\u3001vm-passthrough \u548c vm-vgpu\u3002

              "},{"location":"admin/virtnest/gpu/vm-gpu.html#nvidia-operator","title":"\u5b89\u88c5 Nvidia Operator","text":"
              1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \uff0c\u9009\u53d6\u60a8\u7684\u5de5\u4f5c\u96c6\u7fa4\uff0c\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u9009\u62e9\u5e76\u5b89\u88c5 gpu-operator\u3002 \u9700\u8981\u4fee\u6539\u4e00\u4e9b yaml \u4e2d\u7684\u76f8\u5173\u5b57\u6bb5\u3002

                gpu-operator.sandboxWorkloads.enabled=true\ngpu-operator.vfioManager.enabled=true\ngpu-operator.sandboxDevicePlugin.enabled=true\ngpu-operator.sandboxDevicePlugin.version=v1.2.4   # (1)!\ngpu-operator.toolkit.version=v1.14.3-ubuntu20.04\n
                1. version \u9700\u8981 >= v1.2.4
              2. \u7b49\u5f85\u5b89\u88c5\u6210\u529f\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

              "},{"location":"admin/virtnest/gpu/vm-gpu.html#virtnest-agent-cr","title":"\u5b89\u88c5 virtnest-agent \u5e76\u914d\u7f6e CR","text":"
              1. \u5b89\u88c5 virtnest-agent\uff0c\u53c2\u8003\u5b89\u88c5 virtnest-agent\u3002

              2. \u5c06 vGPU \u548c GPU \u76f4\u901a\u52a0\u5165 Virtnest Kubevirt CR\uff0c\u4ee5\u4e0b\u793a\u4f8b\u662f\u6dfb\u52a0 vGPU \u548c GPU \u76f4\u901a\u540e\u7684 \u90e8\u5206\u5173\u952e yaml\uff1a

                spec:\n  configuration:\n    developerConfiguration:\n      featureGates:\n      - GPU\n      - DisableMDEVConfiguration\n    permittedHostDevices: # (1)!\n      mediatedDevices:            # (2)!\n      - mdevNameSelector: GRID P4-1Q\n        resourceName: nvidia.com /GRID_P4-1Q\n      pciHostDevices:             # (3)!\n      - externalResourceProvider:  true\n        pciVendorSelector: 10DE:1BB3\n        resourceName: nvidia.com /GP104GL_TESLA_P4\n
                1. \u4e0b\u9762\u662f\u9700\u8981\u586b\u5199\u7684\u4fe1\u606f
                2. vGPU
                3. GPU \u76f4\u901a
              3. \u5728 kubevirt CR yaml \u4e2d\uff0cpermittedHostDevices \u7528\u4e8e\u5bfc\u5165 VM \u8bbe\u5907\uff0cvGPU \u9700\u5728\u5176\u4e2d\u6dfb\u52a0 mediatedDevices\uff0c\u5177\u4f53\u7ed3\u6784\u5982\u4e0b\uff1a

                mediatedDevices:          \n- mdevNameSelector: GRID P4-1Q          # (1)!\n  resourceName: nvidia.com/GRID_P4-1Q   # (2)!\n
                1. \u8bbe\u5907\u540d\u79f0
                2. GPU Operator \u6ce8\u518c\u5230\u8282\u70b9\u7684 vGPU \u4fe1\u606f
              4. GPU \u76f4\u901a\u9700\u8981\u5728 permittedHostDevices \u4e0b\u6dfb\u52a0 pciHostDevices\uff0c\u5177\u4f53\u7ed3\u6784\u5982\u4e0b\uff1a

                pciHostDevices:           \n- externalResourceProvider: true            # (1)!\n  pciVendorSelector: 10DE:1BB3              # (2)!\n  resourceName: nvidia.com/GP104GL_TESLA_P4 # (3)!\n
                1. \u9ed8\u8ba4\u4e0d\u8981\u66f4\u6539
                2. \u5f53\u524d pci \u8bbe\u5907\u7684 vednor id
                3. GPU Operator \u6ce8\u518c\u5230\u8282\u70b9\u7684 GPU \u4fe1\u606f
              5. \u83b7\u53d6 vGPU \u4fe1\u606f\u793a\u4f8b\uff08\u4ec5\u9002\u7528\u4e8e vGPU\uff09\uff1a\u5728\u6807\u8bb0\u4e3a nvidia.com/gpu.workload.config=vm-gpu \u7684\u8282\u70b9\uff08\u4f8b\u5982 work-node-2\uff09\u4e0a\u67e5\u770b\u8282\u70b9\u4fe1\u606f\uff0c Capacity \u4e2d\u7684 nvidia.com/GRID_P4-1Q: 8 \u8868\u793a\u53ef\u7528 vGPU\uff1a

                kubectl describe node work-node-2\n
                Capacity:\n  cpu:                                 64\n  devices.kubevirt.io/kvm:             1k\n  devices.kubevirt.io/tun:             1k\n  devices.kubevirt.io/vhost-net:       1k\n  ephemeral-storage:                   102626232Ki\n  hugepages-1Gi:                       0\n  hugepages-2Mi:                       0\n  memory:                              264010840Ki\n  nvidia.com/GRID_P4-1Q :              8\n  pods:                                110\nAllocatable:\n  cpu:                                  64\n  devices.kubevirt.io/kvm:              1k\n  devices.kubevirt.io/tun:              1k\n  devices.kubevirt.io/vhost-net:        1k\n  ephemeral-storage:                    94580335255\n  hugepages-1Gi:                        0\n  hugepages-2Mi:                        0\n  memory:                               263908440Ki\n  nvidia.com/GRID_P4-1Q:                8\n  pods:                                 110\n

                \u90a3\u4e48 mdevNameSelector \u5e94\u8be5\u662f \u201cGRID P4-1Q\u201d\uff0cresourceName \u5e94\u8be5\u662f \u201cGRID_P4-1Q\u201d

              6. \u83b7\u53d6 GPU \u76f4\u901a\u4fe1\u606f\uff1a\u5728\u6807\u8bb0 nvidia.com/gpu.workload.config=vm-passthrough \u7684 node \u4e0a\uff08\u672c\u6587\u6863\u793a\u4f8b node \u4e3a work-node-1\uff09\uff0c \u67e5\u770b node \u4fe1\u606f\uff0cCapacity \u4e2d nvidia.com/GP104GL_TESLA_P4: 2 \u5c31\u662f\u53ef\u7528 vGPU\uff1a

                kubectl describe node work-node-1\n
                Capacity:\n  cpu:                            64\n  devices.kubevirt.io/kvm:        1k\n  devices.kubevirt.io/tun:        1k\n  devices.kubevirt.io/vhost-net:  1k\n  ephemeral-storage:              102626232Ki\n  hugepages-1Gi:                  0\n  hugepages-2Mi:                  0\n  memory:                         264010840Ki\n  nvidia.com/GP104GL_TESLA_P4:    2\n  pods:                           110\nAllocatable:\n  cpu:                            64\n  devices.kubevirt.io/kvm:        1k\n  devices.kubevirt.io/tun:        1k\n  devices.kubevirt.io/vhost-net:  1k\n  ephemeral-storage:              94580335255\n  hugepages-1Gi:                  0\n  hugepages-2Mi:                  0\n  memory:                         263908440Ki\n  nvidia.com/GP104GL_TESLA_P4:    2\n  pods:                           110\n

                \u90a3\u4e48 resourceName \u5e94\u8be5\u662f \u201cGRID_P4-1Q\u201d, \u5982\u4f55\u83b7\u53d6 pciVendorSelector \u5462\uff1f\u901a\u8fc7 ssh \u767b\u5f55\u5230 work-node-1 \u76ee\u6807\u8282\u70b9\uff0c \u901a\u8fc7 lspci -nnk -d 10de: \u547d\u4ee4\u83b7\u53d6 Nvidia GPU PCI \u4fe1\u606f\uff0c\u5982\u4e0b\u6240\u793a\uff1a\u7ea2\u6846\u6240\u793a\u5373\u662f pciVendorSelector \u4fe1\u606f\u3002

              7. \u7f16\u8f91 kubevirt CR \u63d0\u793a\uff1a\u5982\u679c\u540c\u4e00\u578b\u53f7 GPU \u6709\u591a\u4e2a\uff0c\u53ea\u9700\u5728 CR \u4e2d\u5199\u5165\u4e00\u4e2a\u5373\u53ef\uff0c\u65e0\u9700\u5217\u51fa\u6bcf\u4e2a GPU\u3002

                kubectl -n virtnest-system edit kubevirt kubevirt\n
                spec:\n  configuration:\n    developerConfiguration:\n      featureGates:\n      - GPU\n      - DisableMDEVConfiguration\n    permittedHostDevices: # (1)!\n      mediatedDevices:                    # (2)!\n      - mdevNameSelector: GRID P4-1Q\n        resourceName: nvidia.com/GRID_P4-1Q\n      pciHostDevices:                     # (3)!\n      - externalResourceProvider: true\n        pciVendorSelector: 10DE:1BB3\n        resourceName: nvidia.com/GP104GL_TESLA_P4 \n

                1. \u4e0b\u9762\u662f\u9700\u8981\u586b\u5199\u7684\u4fe1\u606f
                2. vGPU
                3. GPU \u76f4\u901a\uff0c\u4e0a\u9762\u7684\u793a\u4f8b\u4e2d TEESLA P4 \u6709\u4e24\u4e2a GPU\uff0c\u8fd9\u91cc\u53ea\u9700\u8981\u6ce8\u518c\u4e00\u4e2a\u5373\u53ef
              "},{"location":"admin/virtnest/gpu/vm-gpu.html#yaml-vm-gpu","title":"\u901a\u8fc7 YAML \u521b\u5efa VM \u5e76\u4f7f\u7528 GPU \u52a0\u901f","text":"

              \u4e0e\u666e\u901a\u4e91\u4e3b\u673a\u552f\u4e00\u7684\u533a\u522b\u662f\u5728 devices \u4e2d\u6dfb\u52a0 GPU \u76f8\u5173\u4fe1\u606f\u3002

              \u70b9\u51fb\u67e5\u770b\u5b8c\u6574 YAML
              apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  name: testvm-gpu1\n  namespace: default\nspec:\n  dataVolumeTemplates:\n  - metadata:\n      creationTimestamp: null\n      name: systemdisk-testvm-gpu1\n      namespace: default\n    spec:\n      pvc:\n        accessModes:\n        - ReadWriteOnce\n        resources:\n          requests:\n            storage: 10Gi\n        storageClassName: www\n      source:\n        registry:\n          url: docker://release-ci.daocloud.io/virtnest/system-images/debian-12-x86_64:v1\nrunStrategy: Manual\ntemplate:\n    metadata:\n      creationTimestamp: null\n    spec:\n      domain:\n        cpu:\n          cores: 1\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n          - bootOrder: 1\n            disk:\n              bus: virtio\n            name: systemdisk-testvm-gpu1\n          - disk:\n              bus: virtio\n            name: cloudinitdisk\n        gpus:\n        - deviceName: nvidia.com/GP104GL_TESLA_P4\n            name: gpu-0-0\n        - deviceName: nvidia.com/GP104GL_TESLA_P4\n          name: gpu-0-1\n        interfaces:\n        - masquerade: {}\n          name: default\n      machine:\n        type: q35\n      resources:\n        requests:\n          memory: 2Gi\n    networks:\n    - name: default\n      pod: {}\n    volumes:\n    - dataVolume:\n        name: systemdisk-testvm-gpu1\n      name: systemdisk-testvm-gpu1\n    - cloudInitNoCloud:\n        userDataBase64: I2Nsb3VkLWNvbmZpZwpzc2hfcHdhdXRoOiB0cnVlCmRpc2FibGVfcm9vdDogZmFsc2UKY2hwYXNzd2Q6IHsibGlzdCI6ICJyb290OmRhbmdlcm91cyIsIGV4cGlyZTogRmFsc2V9CgoKcnVuY21kOgogIC0gc2VkIC1pICIvI1w/UGVybWl0Um9vdExvZ2luL3MvXi4qJC9QZXJtaXRSb290TG9naW4geWVzL2ciIC9ldGMvc3NoL3NzaGRfY29uZmlnCiAgLSBzeXN0ZW1jdGwgcmVzdGFydCBzc2guc2VydmljZQ==\n        name: cloudinitdisk\n
              "},{"location":"admin/virtnest/gpu/vm-vgpu.html","title":"\u4e91\u4e3b\u673a\u914d\u7f6e GPU\uff08vGPU\uff09","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\uff0c\u914d\u7f6e GPU \u7684\u524d\u63d0\u6761\u4ef6\u3002

              \u914d\u7f6e\u4e91\u4e3b\u673a\u7684 GPU \u7684\u91cd\u70b9\u662f\u5bf9 GPU Operator \u8fdb\u884c\u914d\u7f6e\uff0c\u4ee5\u4fbf\u5728\u5de5\u4f5c\u8282\u70b9\u4e0a\u90e8\u7f72\u4e0d\u540c\u7684\u8f6f\u4ef6\u7ec4\u4ef6\uff0c \u5177\u4f53\u53d6\u51b3\u4e8e\u8fd9\u4e9b\u8282\u70b9\u4e0a\u914d\u7f6e\u8fd0\u884c\u7684 GPU \u5de5\u4f5c\u8d1f\u8f7d\u3002\u4ee5\u4e0b\u4e09\u4e2a\u8282\u70b9\u4e3a\u4f8b\uff1a

              • controller-node-1 \u8282\u70b9\u914d\u7f6e\u4e3a\u8fd0\u884c\u5bb9\u5668\u3002
              • work-node-1 \u8282\u70b9\u914d\u7f6e\u4e3a\u8fd0\u884c\u5177\u6709\u76f4\u901a GPU \u7684\u4e91\u4e3b\u673a\u3002
              • work-node-2 \u8282\u70b9\u914d\u7f6e\u4e3a\u8fd0\u884c\u5177\u6709\u865a\u62df vGPU \u7684\u4e91\u4e3b\u673a\u3002
              "},{"location":"admin/virtnest/gpu/vm-vgpu.html#_1","title":"\u5047\u8bbe\u3001\u9650\u5236\u548c\u4f9d\u8d56\u6027","text":"

              \u5de5\u4f5c\u8282\u70b9\u53ef\u4ee5\u8fd0\u884c GPU \u52a0\u901f\u5bb9\u5668\uff0c\u4e5f\u53ef\u4ee5\u8fd0\u884c\u5177\u6709 GPU \u76f4\u901a\u7684 GPU \u52a0\u901f VM\uff0c\u6216\u8005\u5177\u6709 vGPU \u7684 GPU \u52a0\u901f VM\uff0c\u4f46\u4e0d\u80fd\u8fd0\u884c\u5176\u4e2d\u4efb\u4f55\u4e00\u4e2a\u7684\u7ec4\u5408\u3002

              1. \u5de5\u4f5c\u8282\u70b9\u53ef\u4ee5\u5355\u72ec\u8fd0\u884c GPU \u52a0\u901f\u5bb9\u5668\u3001\u5177\u6709 GPU \u76f4\u901a\u7684 GPU \u52a0\u901f VM\uff0c\u6216\u8005\u5177\u6709 vGPU \u7684 GPU \u52a0\u901f VM\uff0c\u4e0d\u652f\u6301\u4efb\u4f55\u7ec4\u5408\u5f62\u5f0f\u3002
              2. \u96c6\u7fa4\u7ba1\u7406\u5458\u6216\u5f00\u53d1\u4eba\u5458\u9700\u8981\u63d0\u524d\u4e86\u89e3\u96c6\u7fa4\u60c5\u51b5\uff0c\u5e76\u6b63\u786e\u6807\u8bb0\u8282\u70b9\u4ee5\u6307\u793a\u5b83\u4eec\u5c06\u8fd0\u884c\u7684 GPU \u5de5\u4f5c\u8d1f\u8f7d\u7c7b\u578b\u3002
              3. \u8fd0\u884c\u5177\u6709 GPU \u76f4\u901a\u6216vGPU\u7684 GPU \u52a0\u901f VM\u7684\u5de5\u4f5c\u8282\u70b9\u88ab\u5047\u5b9a\u4e3a\u88f8\u673a\uff0c\u5982\u679c\u5de5\u4f5c\u8282\u70b9\u662f\u4e91\u4e3b\u673a\uff0c\u5219\u9700\u8981\u5728\u4e91\u4e3b\u673a\u5e73\u53f0\u4e0a\u542f\u7528GPU\u76f4\u901a\u529f\u80fd\uff0c\u8bf7\u5411\u4e91\u4e3b\u673a\u5e73\u53f0\u63d0\u4f9b\u5546\u54a8\u8be2\u3002
              4. \u4e0d\u652f\u6301 Nvidia MIG \u7684 vGPU\u3002
              5. GPU Operator \u4e0d\u4f1a\u81ea\u52a8\u5728 VM \u4e2d\u5b89\u88c5 GPU \u9a71\u52a8\u7a0b\u5e8f\u3002
              "},{"location":"admin/virtnest/gpu/vm-vgpu.html#iommu","title":"\u542f\u7528 IOMMU","text":"

              \u4e3a\u4e86\u542f\u7528GPU\u76f4\u901a\u529f\u80fd\uff0c\u96c6\u7fa4\u8282\u70b9\u9700\u8981\u5f00\u542fIOMMU\u3002\u8bf7\u53c2\u8003\u5982\u4f55\u5f00\u542fIOMMU\u3002 \u5982\u679c\u60a8\u7684\u96c6\u7fa4\u662f\u5728\u4e91\u4e3b\u673a\u4e0a\u8fd0\u884c\uff0c\u8bf7\u54a8\u8be2\u60a8\u7684\u4e91\u4e3b\u673a\u5e73\u53f0\u63d0\u4f9b\u5546\u3002

              "},{"location":"admin/virtnest/gpu/vm-vgpu.html#vgpu-manager","title":"\u6784\u5efa vGPU Manager \u955c\u50cf","text":"

              \u6ce8\u610f\uff1a\u4ec5\u5f53\u4f7f\u7528 NVIDIA vGPU \u65f6\u624d\u9700\u8981\u6784\u5efa vGPU Manager \u955c\u50cf\u3002\u5982\u679c\u60a8\u8ba1\u5212\u4ec5\u4f7f\u7528 GPU \u76f4\u901a\uff0c\u8bf7\u8df3\u8fc7\u6b64\u90e8\u5206\u3002

              \u4ee5\u4e0b\u662f\u6784\u5efa vGPU Manager \u955c\u50cf\u5e76\u5c06\u5176\u63a8\u9001\u5230\u955c\u50cf\u4ed3\u5e93\u4e2d\u7684\u6b65\u9aa4\uff1a

              1. \u4ece NVIDIA Licensing Portal \u4e0b\u8f7d vGPU \u8f6f\u4ef6\u3002

                • \u767b\u5f55 NVIDIA Licensing Portal\uff0c\u8f6c\u5230 Software Downloads \u9875\u9762\u3002
                • NVIDIA vGPU \u8f6f\u4ef6\u4f4d\u4e8e Software Downloads \u9875\u9762\u7684 Driver downloads \u9009\u9879\u5361\u4e2d\u3002
                • \u5728\u7b5b\u9009\u6761\u4ef6\u4e2d\u9009\u62e9 VGPU + Linux \uff0c\u70b9\u51fb \u4e0b\u8f7d \u4ee5\u83b7\u53d6 Linux KVM \u7684\u8f6f\u4ef6\u5305\u3002 \u8bf7\u89e3\u538b\u4e0b\u8f7d\u7684\u6587\u4ef6\uff08NVIDIA-Linux-x86_64-<version>-vgpu-kvm.run\uff09\u3002

              2. \u6253\u5f00\u7ec8\u7aef\u514b\u9686 container-images/driver \u4ed3\u5e93

                git clone https://gitlab.com/nvidia/container-images/driver cd driver\n
              3. \u5207\u6362\u5230\u60a8\u7684\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u5e94 vgpu-manager \u76ee\u5f55

                cd vgpu-manager/<your-os>\n
              4. \u5c06\u6b65\u9aa4 1 \u4e2d\u63d0\u53d6\u7684 .run \u6587\u4ef6 copy \u5230\u5f53\u524d\u76ee\u5f55

                cp <local-driver-download-directory>/*-vgpu-kvm.run ./\n
              5. \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf

                • PRIVATE_REGISTRY\uff1a\u4e13\u7528\u6ce8\u518c\u8868\u7684\u540d\u79f0\uff0c\u7528\u4e8e\u5b58\u50a8\u9a71\u52a8\u7a0b\u5e8f\u6620\u50cf\u3002
                • VERSION\uff1aNVIDIA vGPU\u7ba1\u7406\u5668\u7684\u7248\u672c\uff0c\u4eceNVIDIA\u8f6f\u4ef6\u95e8\u6237\u4e0b\u8f7d\u3002
                • OS_TAG\uff1a\u5fc5\u987b\u4e0e\u96c6\u7fa4\u8282\u70b9\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u5339\u914d\u3002
                • CUDA_VERSION\uff1a\u7528\u4e8e\u6784\u5efa\u9a71\u52a8\u7a0b\u5e8f\u6620\u50cf\u7684CUDA\u57fa\u672c\u6620\u50cf\u7248\u672c\u3002
                export PRIVATE_REGISTRY=my/private/registry VERSION=510.73.06 OS_TAG=ubuntu22.04 CUDA_VERSION=12.2.0\n
              6. \u6784\u5efa NVIDIA vGPU Manager Image

                docker build \\\n  --build-arg DRIVER_VERSION=${VERSION} \\\n  --build-arg CUDA_VERSION=${CUDA_VERSION} \\\n  -t ${PRIVATE_REGISTRY}/vgpu-manager:${VERSION}-${OS_TAG} .\n
              7. \u5c06 NVIDIA vGPU Manager \u6620\u50cf\u63a8\u9001\u5230\u60a8\u7684\u955c\u50cf\u4ed3\u5e93

                docker push ${PRIVATE_REGISTRY}/vgpu-manager:${VERSION}-${OS_TAG}\n
              "},{"location":"admin/virtnest/gpu/vm-vgpu.html#_2","title":"\u6807\u8bb0\u96c6\u7fa4\u8282\u70b9","text":"

              \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \uff0c\u9009\u53d6\u60a8\u7684\u5de5\u4f5c\u96c6\u7fa4\uff0c\u7136\u540e\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 , \u8fdb\u5165\u5217\u8868\u9875\u9762\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u9009\u62e9 \u4fee\u6539\u6807\u7b7e \uff0c\u4e3a\u8282\u70b9\u6dfb\u52a0\u6807\u7b7e\uff0c\u6bcf\u4e2a\u8282\u70b9\u53ea\u80fd\u6709\u4e00\u79cd\u6807\u7b7e\u3002

              \u60a8\u53ef\u4ee5\u4e3a\u6807\u7b7e\u5206\u914d\u4ee5\u4e0b\u503c\uff1acontainer\u3001vm-passthrough \u548c vm-vgpu\u3002

              "},{"location":"admin/virtnest/gpu/vm-vgpu.html#nvidia-operator","title":"\u5b89\u88c5 Nvidia Operator","text":"
              1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \uff0c\u9009\u53d6\u60a8\u7684\u5de5\u4f5c\u96c6\u7fa4\uff0c\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u9009\u62e9\u5e76\u5b89\u88c5 gpu-operator\u3002\u9700\u8981\u4fee\u6539\u4e00\u4e9b yaml \u4e2d\u7684\u76f8\u5173\u5b57\u6bb5\u3002

                gpu-operator.sandboxWorkloads.enabled=true\ngpu-operator.vgpuManager.enabled=true\ngpu-operator.vgpuManager.repository=<your-register-url>      # (1)!\ngpu-operator.vgpuManager.image=vgpu-manager\ngpu-operator.vgpuManager.version=<your-vgpu-manager-version> # (2)!\ngpu-operator.vgpuDeviceManager.enabled=true\n
                1. \u201c\u6784\u5efa vGPU Manager \u955c\u50cf\u201d \u6b65\u9aa4\u4e2d\u7684\u955c\u50cf\u4ed3\u5e93\u5730\u5740
                2. \u201c\u6784\u5efa vGPU Manager \u955c\u50cf\u201d \u6b65\u9aa4\u4e2d\u7684 VERSION
              2. \u7b49\u5f85\u5b89\u88c5\u6210\u529f\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

              "},{"location":"admin/virtnest/gpu/vm-vgpu.html#virtnest-agent-cr","title":"\u5b89\u88c5 virtnest-agent \u5e76\u914d\u7f6e CR","text":"
              1. \u5b89\u88c5 virtnest-agent\uff0c\u53c2\u8003\u5b89\u88c5 virtnest-agent\u3002

              2. \u5c06 vGPU \u548c GPU \u76f4\u901a\u52a0\u5165 Virtnest Kubevirt CR\uff0c\u4ee5\u4e0b\u793a\u4f8b\u662f\u6dfb\u52a0 vGPU \u548c GPU \u76f4\u901a\u540e\u7684 \u90e8\u5206\u5173\u952e yaml\uff1a

                spec:\n  configuration:\n    developerConfiguration:\n      featureGates:\n      - GPU\n      - DisableMDEVConfiguration\n    permittedHostDevices: # (1)!\n      mediatedDevices:            # (2)!\n      - mdevNameSelector: GRID P4-1Q\n        resourceName: nvidia.com /GRID_P4-1Q\n      pciHostDevices:             # (3)!\n      - externalResourceProvider:  true\n        pciVendorSelector: 10DE:1BB3\n        resourceName: nvidia.com /GP104GL_TESLA_P4\n
                1. \u4e0b\u9762\u662f\u9700\u8981\u586b\u5199\u7684\u4fe1\u606f
                2. vGPU
                3. GPU \u76f4\u901a
              3. \u5728 kubevirt CR yaml \u4e2d\uff0cpermittedHostDevices \u7528\u4e8e\u5bfc\u5165 VM \u8bbe\u5907\uff0cvGPU \u9700\u5728\u5176\u4e2d\u6dfb\u52a0 mediatedDevices\uff0c\u5177\u4f53\u7ed3\u6784\u5982\u4e0b\uff1a

                mediatedDevices:          \n- mdevNameSelector: GRID P4-1Q          # (1)!\n  resourceName: nvidia.com/GRID_P4-1Q   # (2)!\n
                1. \u8bbe\u5907\u540d\u79f0
                2. GPU Operator \u6ce8\u518c\u5230\u8282\u70b9\u7684 vGPU \u4fe1\u606f
              4. GPU \u76f4\u901a\u9700\u8981\u5728 permittedHostDevices \u4e0b\u6dfb\u52a0 pciHostDevices\uff0c\u5177\u4f53\u7ed3\u6784\u5982\u4e0b\uff1a

                pciHostDevices:           \n- externalResourceProvider: true            # (1)!\n  pciVendorSelector: 10DE:1BB3              # (2)!\n  resourceName: nvidia.com/GP104GL_TESLA_P4 # (3)!\n
                1. \u9ed8\u8ba4\u4e0d\u8981\u66f4\u6539
                2. \u5f53\u524d pci \u8bbe\u5907\u7684 vednor id
                3. GPU Operator \u6ce8\u518c\u5230\u8282\u70b9\u7684 GPU \u4fe1\u606f
              5. \u83b7\u53d6 vGPU \u4fe1\u606f\u793a\u4f8b\uff08\u4ec5\u9002\u7528\u4e8e vGPU\uff09\uff1a\u5728\u6807\u8bb0\u4e3a nvidia.com/gpu.workload.config=vm-gpu \u7684\u8282\u70b9\uff08\u4f8b\u5982 work-node-2\uff09\u4e0a\u67e5\u770b\u8282\u70b9\u4fe1\u606f\uff0c Capacity \u4e2d\u7684 nvidia.com/GRID_P4-1Q: 8 \u8868\u793a\u53ef\u7528 vGPU\uff1a

                kubectl describe node work-node-2\n
                Capacity:\n  cpu:                                 64\n  devices.kubevirt.io/kvm:             1k\n  devices.kubevirt.io/tun:             1k\n  devices.kubevirt.io/vhost-net:       1k\n  ephemeral-storage:                   102626232Ki\n  hugepages-1Gi:                       0\n  hugepages-2Mi:                       0\n  memory:                              264010840Ki\n  nvidia.com/GRID_P4-1Q :              8\n  pods:                                110\nAllocatable:\n  cpu:                                  64\n  devices.kubevirt.io/kvm:              1k\n  devices.kubevirt.io/tun:              1k\n  devices.kubevirt.io/vhost-net:        1k\n  ephemeral-storage:                    94580335255\n  hugepages-1Gi:                        0\n  hugepages-2Mi:                        0\n  memory:                               263908440Ki\n  nvidia.com/GRID_P4-1Q:                8\n  pods:                                 110\n

                \u90a3\u4e48 mdevNameSelector \u5e94\u8be5\u662f \u201cGRID P4-1Q\u201d\uff0cresourceName \u5e94\u8be5\u662f \u201cGRID_P4-1Q\u201d

              6. \u83b7\u53d6 GPU \u76f4\u901a\u4fe1\u606f\uff1a\u5728\u6807\u8bb0 nvidia.com/gpu.workload.config=vm-passthrough \u7684 node \u4e0a\uff08\u672c\u6587\u6863\u793a\u4f8b node \u4e3a work-node-1\uff09\uff0c \u67e5\u770b node \u4fe1\u606f\uff0cCapacity \u4e2d nvidia.com/GP104GL_TESLA_P4: 2 \u5c31\u662f\u53ef\u7528 vGPU\uff1a

                kubectl describe node work-node-1\n
                Capacity:\n  cpu:                            64\n  devices.kubevirt.io/kvm:        1k\n  devices.kubevirt.io/tun:        1k\n  devices.kubevirt.io/vhost-net:  1k\n  ephemeral-storage:              102626232Ki\n  hugepages-1Gi:                  0\n  hugepages-2Mi:                  0\n  memory:                         264010840Ki\n  nvidia.com/GP104GL_TESLA_P4:    2\n  pods:                           110\nAllocatable:\n  cpu:                            64\n  devices.kubevirt.io/kvm:        1k\n  devices.kubevirt.io/tun:        1k\n  devices.kubevirt.io/vhost-net:  1k\n  ephemeral-storage:              94580335255\n  hugepages-1Gi:                  0\n  hugepages-2Mi:                  0\n  memory:                         263908440Ki\n  nvidia.com/GP104GL_TESLA_P4:    2\n  pods:                           110\n

                \u90a3\u4e48 resourceName \u5e94\u8be5\u662f \u201cGRID_P4-1Q\u201d, \u5982\u4f55\u83b7\u53d6 pciVendorSelector \u5462\uff1f\u901a\u8fc7 ssh \u767b\u5f55\u5230 work-node-1 \u76ee\u6807\u8282\u70b9\uff0c \u901a\u8fc7 lspci -nnk -d 10de: \u547d\u4ee4\u83b7\u53d6 Nvidia GPU PCI \u4fe1\u606f\uff0c\u5982\u4e0b\u6240\u793a\uff1a\u7ea2\u6846\u6240\u793a\u5373\u662f pciVendorSelector \u4fe1\u606f\u3002

              7. \u7f16\u8f91 kubevirt CR \u63d0\u793a\uff1a\u5982\u679c\u540c\u4e00\u578b\u53f7 GPU \u6709\u591a\u4e2a\uff0c\u53ea\u9700\u5728 CR \u4e2d\u5199\u5165\u4e00\u4e2a\u5373\u53ef\uff0c\u65e0\u9700\u5217\u51fa\u6bcf\u4e2a GPU\u3002

                kubectl -n virtnest-system edit kubevirt kubevirt\n
                spec:\n  configuration:\n    developerConfiguration:\n      featureGates:\n      - GPU\n      - DisableMDEVConfiguration\n    permittedHostDevices: # (1)!\n      mediatedDevices:                    # (2)!\n      - mdevNameSelector: GRID P4-1Q\n        resourceName: nvidia.com/GRID_P4-1Q\n      pciHostDevices:                       # (3)!\n      - externalResourceProvider: true\n        pciVendorSelector: 10DE:1BB3\n        resourceName: nvidia.com/GP104GL_TESLA_P4 \n

                1. \u4e0b\u9762\u662f\u9700\u8981\u586b\u5199\u7684\u4fe1\u606f
                2. vGPU
                3. GPU \u76f4\u901a\uff0c\u4e0a\u9762\u7684\u793a\u4f8b\u4e2d TEESLA P4 \u6709\u4e24\u4e2a GPU\uff0c\u8fd9\u91cc\u53ea\u9700\u8981\u6ce8\u518c\u4e00\u4e2a\u5373\u53ef
              "},{"location":"admin/virtnest/gpu/vm-vgpu.html#yaml-vm-gpu","title":"\u901a\u8fc7 YAML \u521b\u5efa VM \u5e76\u4f7f\u7528 GPU \u52a0\u901f","text":"

              \u4e0e\u666e\u901a\u4e91\u4e3b\u673a\u552f\u4e00\u7684\u533a\u522b\u662f\u5728 devices \u4e2d\u6dfb\u52a0 gpu \u76f8\u5173\u4fe1\u606f\u3002

              \u70b9\u51fb\u67e5\u770b\u5b8c\u6574 YAML
              apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  name: testvm-gpu1\n  namespace: default\nspec:\n  dataVolumeTemplates:\n  - metadata:\n      creationTimestamp: null\n      name: systemdisk-testvm-gpu1\n      namespace: default\n    spec:\n      pvc:\n        accessModes:\n        - ReadWriteOnce\n        resources:\n          requests:\n            storage: 10Gi\n        storageClassName: www\n      source:\n        registry:\n          url: docker://release-ci.daocloud.io/virtnest/system-images/debian-12-x86_64:v1\nrunStrategy: Manual\ntemplate:\n    metadata:\n      creationTimestamp: null\n    spec:\n      domain:\n        cpu:\n          cores: 1\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n          - bootOrder: 1\n            disk:\n              bus: virtio\n            name: systemdisk-testvm-gpu1\n          - disk:\n              bus: virtio\n            name: cloudinitdisk\n        gpus:\n        - deviceName: nvidia.com/GP104GL_TESLA_P4\n            name: gpu-0-0\n        - deviceName: nvidia.com/GP104GL_TESLA_P4\n          name: gpu-0-1\n        interfaces:\n        - masquerade: {}\n          name: default\n      machine:\n        type: q35\n      resources:\n        requests:\n          memory: 2Gi\n    networks:\n    - name: default\n      pod: {}\n    volumes:\n    - dataVolume:\n        name: systemdisk-testvm-gpu1\n      name: systemdisk-testvm-gpu1\n    - cloudInitNoCloud:\n        userDataBase64: I2Nsb3VkLWNvbmZpZwpzc2hfcHdhdXRoOiB0cnVlCmRpc2FibGVfcm9vdDogZmFsc2UKY2hwYXNzd2Q6IHsibGlzdCI6ICJyb290OmRhbmdlcm91cyIsIGV4cGlyZTogRmFsc2V9CgoKcnVuY21kOgogIC0gc2VkIC1pICIvI1w/UGVybWl0Um9vdExvZ2luL3MvXi4qJC9QZXJtaXRSb290TG9naW4geWVzL2ciIC9ldGMvc3NoL3NzaGRfY29uZmlnCiAgLSBzeXN0ZW1jdGwgcmVzdGFydCBzc2guc2VydmljZQ==\n        name: cloudinitdisk\n
              "},{"location":"admin/virtnest/install/index.html","title":"\u5b89\u88c5\u4e91\u4e3b\u673a\u6a21\u5757","text":"

              \u672c\u9875\u8bf4\u660e\u5982\u4f55\u5b89\u88c5\u4e91\u4e3b\u673a\u6a21\u5757\u3002

              Info

              \u4e0b\u8ff0\u547d\u4ee4\u6216\u811a\u672c\u5185\u51fa\u73b0\u7684 virtnest \u5b57\u6837\u662f\u4e91\u4e3b\u673a\u6a21\u5757\u7684\u5185\u90e8\u5f00\u53d1\u4ee3\u53f7\u3002

              "},{"location":"admin/virtnest/install/index.html#virtnest-helm","title":"\u914d\u7f6e virtnest helm \u4ed3\u5e93","text":"

              helm-charts \u4ed3\u5e93\u5730\u5740\uff1ahttps://release.daocloud.io/harbor/projects/10/helm-charts/virtnest/versions

              helm repo add virtnest-release https://release.daocloud.io/chartrepo/virtnest\nhelm repo update virtnest-release\n

              \u5982\u679c\u60a8\u60f3\u4f53\u9a8c\u6700\u65b0\u5f00\u53d1\u7248\u7684 virtnest\uff0c\u90a3\u4e48\u8bf7\u6dfb\u52a0\u5982\u4e0b\u4ed3\u5e93\u5730\u5740\uff08\u5f00\u53d1\u7248\u672c\u7684 virtnest \u6781\u5176\u4e0d\u7a33\u5b9a\uff09

              helm repo add virtnest-release-ci https://release-ci.daocloud.io/chartrepo/virtnest\nhelm repo update virtnest-release-ci\n
              "},{"location":"admin/virtnest/install/index.html#virtnest","title":"\u9009\u62e9\u60a8\u60f3\u5b89\u88c5\u7684 virtnest \u7248\u672c","text":"

              \u5efa\u8bae\u5b89\u88c5\u6700\u65b0\u7248\u672c\u3002

              [root@master ~]# helm search repo virtnest-release/virtnest --versions\nNAME                   CHART VERSION  APP VERSION  DESCRIPTION\nvirtnest-release/virtnest  0.6.0          v0.6.0       A Helm chart for virtnest\n
              "},{"location":"admin/virtnest/install/index.html#namespace","title":"\u521b\u5efa namespace","text":"
              kubectl create namespace virtnest-system\n
              "},{"location":"admin/virtnest/install/index.html#_2","title":"\u6267\u884c\u5b89\u88c5\u6b65\u9aa4","text":"
              helm install virtnest virtnest-release/virtnest -n virtnest-system --version 0.6.0\n
              "},{"location":"admin/virtnest/install/index.html#_3","title":"\u5347\u7ea7","text":""},{"location":"admin/virtnest/install/index.html#virtnest-helm_1","title":"\u66f4\u65b0 virtnest helm \u4ed3\u5e93","text":"
              helm repo update virtnest-release\n
              "},{"location":"admin/virtnest/install/index.html#-set","title":"\u5907\u4efd --set \u53c2\u6570","text":"

              \u5728\u5347\u7ea7 virtnest \u7248\u672c\u4e4b\u524d\uff0c\u6211\u4eec\u5efa\u8bae\u60a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5907\u4efd\u4e0a\u4e00\u4e2a\u7248\u672c\u7684 --set \u53c2\u6570

              helm get values virtnest -n virtnest-system -o yaml > bak.yaml\n
              "},{"location":"admin/virtnest/install/index.html#helm-upgrade","title":"\u6267\u884c helm upgrade","text":"
              helm upgrade virtnest virtnest-release/virtnest \\\n    -n virtnest-system \\\n    -f ./bak.yaml \\\n    --version 0.6.0\n
              "},{"location":"admin/virtnest/install/index.html#_4","title":"\u5378\u8f7d","text":"
              helm delete virtnest -n virtnest-system\n
              "},{"location":"admin/virtnest/install/install-dependency.html","title":"\u5b89\u88c5\u4f9d\u8d56\u548c\u524d\u63d0\u6761\u4ef6","text":"

              \u672c\u9875\u8bf4\u660e\u5b89\u88c5\u4e91\u4e3b\u673a\u6a21\u5757\u7684\u4f9d\u8d56\u548c\u524d\u63d0\u6761\u4ef6\u3002

              Info

              \u4e0b\u8ff0\u547d\u4ee4\u6216\u811a\u672c\u5185\u51fa\u73b0\u7684 virtnest \u5b57\u6837\u662f\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u7684\u5185\u90e8\u5f00\u53d1\u4ee3\u53f7\u3002

              "},{"location":"admin/virtnest/install/install-dependency.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":""},{"location":"admin/virtnest/install/install-dependency.html#411","title":"\u64cd\u4f5c\u7cfb\u7edf\u5185\u6838\u7248\u672c\u9700\u8981\u5728 4.11 \u4ee5\u4e0a","text":"

              \u76ee\u6807\u96c6\u7fa4\u6240\u6709\u8282\u70b9\u7684\u64cd\u4f5c\u7cfb\u7edf\u5185\u6838\u7248\u672c\u9700\u8981\u5927\u4e8e 4.11\uff08\u8be6\u89c1 kubevirt issue\uff09\u3002 \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u5185\u6838\u7248\u672c\uff1a

              uname -a\n

              \u793a\u4f8b\u8f93\u51fa\uff1a

              Linux master 6.5.3-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Sep 13 11:46:28 EDT 2023 x86_64 x86_64 x86_64 GNU/Linux\n
              "},{"location":"admin/virtnest/install/install-dependency.html#cpu-x86-64-v2","title":"CPU \u9700\u652f\u6301 x86-64-v2 \u53ca\u4ee5\u4e0a\u7684\u6307\u4ee4\u96c6","text":"

              \u4f7f\u7528\u4ee5\u4e0b\u811a\u672c\u68c0\u67e5\u5f53\u524d\u8282\u70b9\u7684 CPU \u662f\u5426\u652f\u6301\uff1a

              Note

              \u82e5\u51fa\u73b0\u4e0e\u8f93\u51fa\u4fe1\u606f\u65e0\u5173\u7684\u62a5\u9519\uff08\u5982\u4e0b\u6240\u793a\uff09\uff0c\u53ef\u65e0\u9700\u5173\u6ce8\uff0c\u4e0d\u5f71\u54cd\u6700\u7ec8\u7ed3\u679c\u3002

              \u793a\u4f8b
              $ sh detect-cpu.sh\ndetect-cpu.sh: line 3: fpu: command not found\n
              cat <<EOF > detect-cpu.sh\n#!/bin/sh -eu\n\nflags=$(cat /proc/cpuinfo | grep flags | head -n 1 | cut -d: -f2)\n\nsupports_v2='awk \"/cx16/&&/lahf/&&/popcnt/&&/sse4_1/&&/sse4_2/&&/ssse3/ {found=1} END {exit !found}\"'\nsupports_v3='awk \"/avx/&&/avx2/&&/bmi1/&&/bmi2/&&/f16c/&&/fma/&&/abm/&&/movbe/&&/xsave/ {found=1} END {exit !found}\"'\nsupports_v4='awk \"/avx512f/&&/avx512bw/&&/avx512cd/&&/avx512dq/&&/avx512vl/ {found=1} END {exit !found}\"'\n\necho \"$flags\" | eval $supports_v2 || exit 2 && echo \"CPU supports x86-64-v2\"\necho \"$flags\" | eval $supports_v3 || exit 3 && echo \"CPU supports x86-64-v3\"\necho \"$flags\" | eval $supports_v4 || exit 4 && echo \"CPU supports x86-64-v4\"\nEOF\nchmod +x detect-cpu.sh\nsh detect-cpu.sh\n
              "},{"location":"admin/virtnest/install/install-dependency.html#_3","title":"\u6240\u6709\u8282\u70b9\u5fc5\u987b\u542f\u7528\u786c\u4ef6\u865a\u62df\u5316\uff08\u5d4c\u5957\u865a\u62df\u5316\uff09","text":"
              • \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u68c0\u67e5\uff1a

                virt-host-validate qemu\n
                # \u6210\u529f\u7684\u60c5\u51b5\nQEMU: Checking for hardware virtualization                                 : PASS\nQEMU: Checking if device /dev/kvm exists                                   : PASS\nQEMU: Checking if device /dev/kvm is accessible                            : PASS\nQEMU: Checking if device /dev/vhost-net exists                             : PASS\nQEMU: Checking if device /dev/net/tun exists                               : PASS\nQEMU: Checking for cgroup 'cpu' controller support                         : PASS\nQEMU: Checking for cgroup 'cpuacct' controller support                     : PASS\nQEMU: Checking for cgroup 'cpuset' controller support                      : PASS\nQEMU: Checking for cgroup 'memory' controller support                      : PASS\nQEMU: Checking for cgroup 'devices' controller support                     : PASS\nQEMU: Checking for cgroup 'blkio' controller support                       : PASS\nQEMU: Checking for device assignment IOMMU support                         : PASS\nQEMU: Checking if IOMMU is enabled by kernel                               : PASS\nQEMU: Checking for secure guest support                                    : WARN (Unknown if this platform has Secure Guest support)\n\n# \u5931\u8d25\u7684\u60c5\u51b5\nQEMU: Checking for hardware virtualization                                 : FAIL (Only emulated CPUs are available, performance will be significantly limited)\nQEMU: Checking if device /dev/vhost-net exists                             : PASS\nQEMU: Checking if device /dev/net/tun exists                               : PASS\nQEMU: Checking for cgroup 'memory' controller support                      : PASS\nQEMU: Checking for cgroup 'memory' controller mount-point                  : PASS\nQEMU: Checking for cgroup 'cpu' controller support                         : PASS\nQEMU: Checking for cgroup 'cpu' controller mount-point                     : PASS\nQEMU: Checking for cgroup 'cpuacct' controller support                     : PASS\nQEMU: Checking for cgroup 'cpuacct' controller mount-point                 : PASS\nQEMU: Checking for cgroup 'cpuset' controller support                      : PASS\nQEMU: Checking for cgroup 'cpuset' controller mount-point                  : PASS\nQEMU: Checking for cgroup 'devices' controller support                     : PASS\nQEMU: Checking for cgroup 'devices' controller mount-point                 : PASS\nQEMU: Checking for cgroup 'blkio' controller support                       : PASS\nQEMU: Checking for cgroup 'blkio' controller mount-point                   : PASS\nWARN (Unknown if this platform has IOMMU support)\n
              • \u5b89\u88c5 virt-host-validate\uff1a

                \u5728 CentOS \u4e0a\u5b89\u88c5\u5728 Ubuntu \u4e0a\u5b89\u88c5
                yum install -y qemu-kvm libvirt virt-install bridge-utils\n
                apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils\n
              • \u786c\u4ef6\u865a\u62df\u5316\u542f\u7528\u65b9\u6cd5\uff1a

                \u4e0d\u540c\u5e73\u53f0\u542f\u7528\u786c\u4ef6\u865a\u62df\u5316\u7684\u65b9\u6cd5\u4e5f\u4e0d\u4e00\u6837\uff0c\u4ee5 vsphere \u4e3a\u4f8b\uff0c \u65b9\u6cd5\u8bf7\u53c2\u7167 vmware \u5b98\u7f51\u6587\u6863\u3002

              "},{"location":"admin/virtnest/install/install-dependency.html#docker-engine","title":"\u5982\u679c\u4f7f\u7528 Docker Engine \u4f5c\u4e3a\u5bb9\u5668\u8fd0\u884c\u65f6","text":"

              \u5982\u679c\u96c6\u7fa4\u4f7f\u7528 Docker Engine \u4f5c\u4e3a\u5bb9\u5668\u8fd0\u884c\u65f6\uff0c\u5219 Docker Engine \u7248\u672c\u9700\u8981\u5927\u4e8e 20.10.10

              "},{"location":"admin/virtnest/install/install-dependency.html#iommu","title":"\u5efa\u8bae\u5f00\u542f IOMMU","text":"

              \u4e3a\u4e86\u540e\u7eed\u529f\u80fd\u505a\u51c6\u5907\uff0c\u5efa\u8bae\u5f00\u542f IOMMU\u3002

              "},{"location":"admin/virtnest/install/offline-install.html","title":"\u79bb\u7ebf\u5347\u7ea7","text":"

              \u672c\u9875\u8bf4\u660e\u4ece\u4e0b\u8f7d\u4e2d\u5fc3\u4e0b\u8f7d\u4e91\u4e3b\u673a\u6a21\u5757\u540e\uff0c\u5e94\u8be5\u5982\u4f55\u5b89\u88c5\u6216\u5347\u7ea7\u3002

              Info

              \u4e0b\u8ff0\u547d\u4ee4\u6216\u811a\u672c\u5185\u51fa\u73b0\u7684 virtnest \u5b57\u6837\u662f\u4e91\u4e3b\u673a\u6a21\u5757\u7684\u5185\u90e8\u5f00\u53d1\u4ee3\u53f7\u3002

              "},{"location":"admin/virtnest/install/offline-install.html#_2","title":"\u4ece\u5b89\u88c5\u5305\u4e2d\u52a0\u8f7d\u955c\u50cf","text":"

              \u60a8\u53ef\u4ee5\u6839\u636e\u4e0b\u9762\u4e24\u79cd\u65b9\u5f0f\u4e4b\u4e00\u52a0\u8f7d\u955c\u50cf\uff0c\u5f53\u73af\u5883\u4e2d\u5b58\u5728\u955c\u50cf\u4ed3\u5e93\u65f6\uff0c\u5efa\u8bae\u9009\u62e9chart-syncer\u540c\u6b65\u955c\u50cf\u5230\u955c\u50cf\u4ed3\u5e93\uff0c\u8be5\u65b9\u6cd5\u66f4\u52a0\u9ad8\u6548\u4fbf\u6377\u3002

              "},{"location":"admin/virtnest/install/offline-install.html#chart-syncer","title":"chart-syncer \u540c\u6b65\u955c\u50cf\u5230\u955c\u50cf\u4ed3\u5e93","text":"
              1. \u521b\u5efa load-image.yaml

                Note

                \u8be5 YAML \u6587\u4ef6\u4e2d\u7684\u5404\u9879\u53c2\u6570\u5747\u4e3a\u5fc5\u586b\u9879\u3002\u60a8\u9700\u8981\u4e00\u4e2a\u79c1\u6709\u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u5e76\u4fee\u6539\u76f8\u5173\u914d\u7f6e\u3002

                \u5df2\u5b89\u88c5 chart repo\u672a\u5b89\u88c5 chart repo

                \u82e5\u5f53\u524d\u73af\u5883\u5df2\u5b89\u88c5 chart repo\uff0cchart-syncer \u4e5f\u652f\u6301\u5c06 chart \u5bfc\u51fa\u4e3a tgz \u6587\u4ef6\u3002

                load-image.yaml
                source:\n  intermediateBundlesPath: virtnest-offline # \u5230\u6267\u884c charts-syncer \u547d\u4ee4\u7684\u76f8\u5bf9\u8def\u5f84\uff0c\u800c\u4e0d\u662f\u6b64 YAML \u6587\u4ef6\u548c\u79bb\u7ebf\u5305\u4e4b\u95f4\u7684\u76f8\u5bf9\u8def\u5f84\ntarget:\n  containerRegistry: 10.16.10.111 # \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93 url\n  containerRepository: release.daocloud.io/virtnest # \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93\n  repo:\n    kind: HARBOR # \u4e5f\u53ef\u4ee5\u662f\u4efb\u4f55\u5176\u4ed6\u652f\u6301\u7684 Helm Chart \u4ed3\u5e93\u7c7b\u522b\n    url: http://10.16.10.111/chartrepo/release.daocloud.io # \u9700\u66f4\u6539\u4e3a chart repo url\n    auth:\n      username: \"admin\" # \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u7528\u6237\u540d\n      password: \"Harbor12345\" # \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u5bc6\u7801\n  containers:\n    auth:\n      username: \"admin\" # \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u7528\u6237\u540d\n      password: \"Harbor12345\" # \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u5bc6\u7801\n

                \u82e5\u5f53\u524d\u73af\u5883\u672a\u5b89\u88c5 chart repo\uff0cchart-syncer \u4e5f\u652f\u6301\u5c06 chart \u5bfc\u51fa\u4e3a tgz \u6587\u4ef6\uff0c\u5e76\u5b58\u653e\u5728\u6307\u5b9a\u8def\u5f84\u3002

                load-image.yaml
                source:\n  intermediateBundlesPath: virtnest-offline # \u5230\u6267\u884c charts-syncer \u547d\u4ee4\u7684\u76f8\u5bf9\u8def\u5f84\uff0c\u800c\u4e0d\u662f\u6b64 YAML \u6587\u4ef6\u548c\u79bb\u7ebf\u5305\u4e4b\u95f4\u7684\u76f8\u5bf9\u8def\u5f84\ntarget:\n  containerRegistry: 10.16.10.111 # \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93 url\n  containerRepository: release.daocloud.io/virtnest # \u9700\u66f4\u6539\u4e3a\u4f60\u7684\u955c\u50cf\u4ed3\u5e93\n  repo:\n    kind: LOCAL\n    path: ./local-repo # chart \u672c\u5730\u8def\u5f84\n  containers:\n    auth:\n      username: \"admin\" # \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u7528\u6237\u540d\n      password: \"Harbor12345\" # \u4f60\u7684\u955c\u50cf\u4ed3\u5e93\u5bc6\u7801\n
              2. \u6267\u884c\u540c\u6b65\u955c\u50cf\u547d\u4ee4\u3002

                charts-syncer sync --config load-image.yaml\n
              "},{"location":"admin/virtnest/install/offline-install.html#docker-containerd","title":"Docker \u6216 containerd \u76f4\u63a5\u52a0\u8f7d","text":"

              \u89e3\u538b\u5e76\u52a0\u8f7d\u955c\u50cf\u6587\u4ef6\u3002

              1. \u89e3\u538b tar \u538b\u7f29\u5305\u3002

                tar xvf virtnest.bundle.tar\n

                \u89e3\u538b\u6210\u529f\u540e\u4f1a\u5f97\u5230 3 \u4e2a\u6587\u4ef6\uff1a

                • hints.yaml
                • images.tar
                • original-chart
              2. \u4ece\u672c\u5730\u52a0\u8f7d\u955c\u50cf\u5230 Docker \u6216 containerd\u3002

                Dockercontainerd
                docker load -i images.tar\n
                ctr -n k8s.io image import images.tar\n

              Note

              \u6bcf\u4e2a node \u90fd\u9700\u8981\u505a Docker \u6216 containerd \u52a0\u8f7d\u955c\u50cf\u64cd\u4f5c\uff0c \u52a0\u8f7d\u5b8c\u6210\u540e\u9700\u8981 tag \u955c\u50cf\uff0c\u4fdd\u6301 Registry\u3001Repository \u4e0e\u5b89\u88c5\u65f6\u4e00\u81f4\u3002

              "},{"location":"admin/virtnest/install/offline-install.html#_3","title":"\u5347\u7ea7","text":"

              \u6709\u4e24\u79cd\u5347\u7ea7\u65b9\u5f0f\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u524d\u7f6e\u64cd\u4f5c\uff0c\u9009\u62e9\u5bf9\u5e94\u7684\u5347\u7ea7\u65b9\u6848\uff1a

              \u901a\u8fc7 helm repo \u5347\u7ea7\u901a\u8fc7 chart \u5305\u5347\u7ea7
              1. \u68c0\u67e5\u4e91\u4e3b\u673a helm \u4ed3\u5e93\u662f\u5426\u5b58\u5728\u3002

                helm repo list | grep virtnest\n

                \u82e5\u8fd4\u56de\u7ed3\u679c\u4e3a\u7a7a\u6216\u5982\u4e0b\u63d0\u793a\uff0c\u5219\u8fdb\u884c\u4e0b\u4e00\u6b65\uff1b\u53cd\u4e4b\u5219\u8df3\u8fc7\u4e0b\u4e00\u6b65\u3002

                Error: no repositories to show\n
              2. \u6dfb\u52a0\u4e91\u4e3b\u673a\u7684 helm \u4ed3\u5e93\u3002

                helm repo add virtnest http://{harbor url}/chartrepo/{project}\n
              3. \u66f4\u65b0\u4e91\u4e3b\u673a\u7684 helm \u4ed3\u5e93\u3002

                helm repo update virtnest # (1)\n
                1. helm \u7248\u672c\u8fc7\u4f4e\u4f1a\u5bfc\u81f4\u5931\u8d25\uff0c\u82e5\u5931\u8d25\uff0c\u8bf7\u5c1d\u8bd5\u6267\u884c helm update repo
              4. \u9009\u62e9\u60a8\u60f3\u5b89\u88c5\u7684\u4e91\u4e3b\u673a\u7248\u672c\uff08\u5efa\u8bae\u5b89\u88c5\u6700\u65b0\u7248\u672c\uff09\u3002

                helm search repo virtnest/virtnest --versions\n
                [root@master ~]# helm search repo virtnest/virtnest --versions\nNAME                   CHART VERSION  APP VERSION  DESCRIPTION\nvirtnest/virtnest  0.2.0          v0.2.0       A Helm chart for virtnest\n...\n
              5. \u5907\u4efd --set \u53c2\u6570\u3002

                \u5728\u5347\u7ea7\u4e91\u4e3b\u673a\u7248\u672c\u4e4b\u524d\uff0c\u5efa\u8bae\u60a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5907\u4efd\u8001\u7248\u672c\u7684 --set \u53c2\u6570\u3002

                helm get values virtnest -n virtnest-system -o yaml > bak.yaml\n
              6. \u66f4\u65b0 virtnest crds

                helm pull virtnest/virtnest --version 0.2.0 && tar -zxf virtnest-0.2.0.tgz\nkubectl apply -f virtnest/crds\n
              7. \u6267\u884c helm upgrade\u3002

                \u5347\u7ea7\u524d\u5efa\u8bae\u60a8\u8986\u76d6 bak.yaml \u4e2d\u7684 global.imageRegistry \u5b57\u6bb5\u4e3a\u5f53\u524d\u4f7f\u7528\u7684\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u3002

                export imageRegistry={\u4f60\u7684\u955c\u50cf\u4ed3\u5e93}\n
                helm upgrade virtnest virtnest/virtnest \\\n  -n virtnest-system \\\n  -f ./bak.yaml \\\n  --set global.imageRegistry=$imageRegistry \\\n  --version 0.2.0\n
              1. \u5907\u4efd --set \u53c2\u6570\u3002

                \u5728\u5347\u7ea7\u4e91\u4e3b\u673a\u7248\u672c\u4e4b\u524d\uff0c\u5efa\u8bae\u60a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5907\u4efd\u8001\u7248\u672c\u7684 --set \u53c2\u6570\u3002

                helm get values virtnest -n virtnest-system -o yaml > bak.yaml\n
              2. \u66f4\u65b0 virtnest crds

                kubectl apply -f ./crds\n
              3. \u6267\u884c helm upgrade\u3002

                \u5347\u7ea7\u524d\u5efa\u8bae\u60a8\u8986\u76d6 bak.yaml \u4e2d\u7684 global.imageRegistry \u4e3a\u5f53\u524d\u4f7f\u7528\u7684\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u3002

                export imageRegistry={\u4f60\u7684\u955c\u50cf\u4ed3\u5e93}\n
                helm upgrade virtnest . \\\n  -n virtnest-system \\\n  -f ./bak.yaml \\\n  --set global.imageRegistry=$imageRegistry\n
              "},{"location":"admin/virtnest/install/virtnest-agent.html","title":"\u5b89\u88c5 virtnest-agent","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u6307\u5b9a\u96c6\u7fa4\u5185\u5b89\u88c5 virtnest-agent\u3002

              "},{"location":"admin/virtnest/install/virtnest-agent.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5b89\u88c5 virtnest-agent \u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u64cd\u4f5c\u7cfb\u7edf\u5185\u6838\u7248\u672c\u9700\u8981\u5728 v4.11 \u4ee5\u4e0a\u3002
              "},{"location":"admin/virtnest/install/virtnest-agent.html#_2","title":"\u5b89\u88c5\u6b65\u9aa4","text":"

              \u521d\u59cb\u96c6\u7fa4\u9700\u8981\u5728 Helm \u4e2d\u5b89\u88c5 virtnest-agent \u7ec4\u4ef6\u540e\u65b9\u53ef\u4f7f\u7528\u4e91\u4e3b\u673a\u7684\u76f8\u5173\u80fd\u529b\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u82e5\u672a\u5b89\u88c5 virtnest-agent \u7ec4\u4ef6\uff0c\u5219\u65e0\u6cd5\u6b63\u5e38\u4f7f\u7528\u4e91\u4e3b\u673a\u80fd\u529b\u3002\u5c06\u63d0\u9192\u7528\u6237\u5728\u6240\u9700\u96c6\u7fa4\u5185\u8fdb\u884c\u5b89\u88c5\u3002

              2. \u9009\u62e9\u6240\u9700\u96c6\u7fa4\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 Helm \u5e94\u7528 \uff0c\u7136\u540e\u70b9\u51fb Helm \u6a21\u677f \uff0c\u67e5\u770b\u6a21\u677f\u5217\u8868\u3002

              3. \u641c\u7d22 virtnest-agent \u7ec4\u4ef6\uff0c\u8fdb\u5165\u7ec4\u4ef6\u8be6\u60c5\uff0c\u9009\u62e9\u5408\u9002\u7248\u672c\uff0c\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\uff0c\u8fdb\u884c\u5b89\u88c5\u3002

              4. \u8fdb\u5165\u5b89\u88c5\u8868\u5355\u9875\u9762\uff0c\u586b\u5199\u57fa\u672c\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b89\u88c5\u5b8c\u6210\u3002

              5. \u91cd\u65b0\u70b9\u51fb \u4e91\u4e3b\u673a \u5bfc\u822a\u680f\uff0c\u6210\u529f\u51fa\u73b0\u4e91\u4e3b\u673a\u5217\u8868\uff0c\u53ef\u4ee5\u6b63\u5e38\u4f7f\u7528\u4e91\u4e3b\u673a\u80fd\u529b\u3002

              "},{"location":"admin/virtnest/quickstart/index.html","title":"\u521b\u5efa\u4e91\u4e3b\u673a","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u4e91\u4e3b\u673a\u3002

              \u4e91\u4e3b\u673a\u57fa\u4e8e KubeVirt \u6280\u672f\u5c06\u4e91\u4e3b\u673a\u4f5c\u4e3a\u4e91\u539f\u751f\u5e94\u7528\u8fdb\u884c\u7ba1\u7406\uff0c\u4e0e\u5bb9\u5668\u65e0\u7f1d\u5730\u8854\u63a5\u5728\u4e00\u8d77\uff0c \u4f7f\u7528\u6237\u80fd\u591f\u8f7b\u677e\u5730\u90e8\u7f72\u4e91\u4e3b\u673a\u5e94\u7528\uff0c\u4eab\u53d7\u4e0e\u5bb9\u5668\u5e94\u7528\u4e00\u81f4\u7684\u4e1d\u6ed1\u4f53\u9a8c\u3002

              "},{"location":"admin/virtnest/quickstart/index.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u521b\u5efa\u4e91\u4e3b\u673a\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5411\u7528\u6237\u673a\u64cd\u4f5c\u7cfb\u7edf\u516c\u5f00\u786c\u4ef6\u8f85\u52a9\u7684\u865a\u62df\u5316\u3002
              • \u5728\u6307\u5b9a\u96c6\u7fa4\u5b89\u88c5 virtnest-agent\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5185\u6838\u7248\u672c\u9700\u8981\u5728 3.15 \u4ee5\u4e0a\u3002
              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002
              • \u63d0\u524d\u51c6\u5907\u597d\u955c\u50cf\uff0c\u5e73\u53f0\u5185\u7f6e\u4e09\u79cd\u955c\u50cf (\u5982\u4e0b\u6587\u6240\u793a)\uff0c\u5982\u9700\u5236\u4f5c\u955c\u50cf\uff0c\u53ef\u53c2\u8003\u5f00\u6e90\u9879\u76ee\u5236\u4f5c\u955c\u50cf\u3002
              • \u8fdb\u884c\u7f51\u7edc\u914d\u7f6e\u65f6\uff0c\u82e5\u9009\u62e9\u4f7f\u7528 Passt \u7f51\u7edc\u6a21\u5f0f\uff0c\u5219\u9700\u8981\u5347\u7ea7\u81f3 0.4.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u3002
              "},{"location":"admin/virtnest/quickstart/index.html#_3","title":"\u955c\u50cf\u521b\u5efa","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u4e91\u4e3b\u673a\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165 \u4e91\u4e3b\u673a \u9875\u9762\u3002

              2. \u5728\u4e91\u4e3b\u673a\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb \u521b\u5efa\u4e91\u4e3b\u673a -> \u9009\u62e9 \u901a\u8fc7\u955c\u50cf\u521b\u5efa \u3002

              3. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u9875\u9762\uff0c\u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u955c\u50cf\u914d\u7f6e\u3001\u5b58\u50a8\u4e0e\u7f51\u7edc\u3001\u767b\u5f55\u8bbe\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de\u4e91\u4e3b\u673a\u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u4e91\u4e3b\u673a\u6267\u884c\u5173\u673a/\u5f00\u542f\u3001\u91cd\u542f\u3001\u514b\u9686\u3001\u66f4\u65b0\u3001\u521b\u5efa\u5feb\u7167\u3001\u63a7\u5236\u53f0\u8bbf\u95ee\uff08VNC\uff09\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002 \u514b\u9686\u548c\u5feb\u7167\u80fd\u529b\u4f9d\u8d56\u4e8e\u5b58\u50a8\u6c60\u7684\u9009\u62e9\u3002

              "},{"location":"admin/virtnest/quickstart/index.html#_4","title":"\u57fa\u672c\u4fe1\u606f","text":"

              \u5728 \u521b\u5efa\u4e91\u4e3b\u673a \u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              • \u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002 \u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u540d\u79f0\u5728\u4e91\u4e3b\u673a\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
              • \u522b\u540d\uff1a\u5141\u8bb8\u4efb\u4f55\u5b57\u7b26\uff0c\u6700\u957f 60 \u4e2a\u5b57\u7b26\u3002
              • \u96c6\u7fa4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u4e91\u4e3b\u673a\u90e8\u7f72\u5728\u54ea\u4e2a\u96c6\u7fa4\u5185\uff0c\u82e5\u6709\u4f7f\u7528 GPU \u80fd\u529b\u7684\u9700\u6c42\uff0c\u5219\u9700\u8981\u9009\u62e9\u6709 GPU/vGPU \u5361\u7684\u96c6\u7fa4\u3002
              • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u4e91\u4e3b\u673a\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\u3002 \u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
              • \u6807\u7b7e/\u6ce8\u89e3\uff1a\u9009\u62e9\u4e3a\u4e91\u4e3b\u673a\u6dfb\u52a0\u6240\u9700\u7684\u6807\u7b7e/\u6ce8\u89e3\u4fe1\u606f\u3002
              "},{"location":"admin/virtnest/quickstart/index.html#_5","title":"\u955c\u50cf\u914d\u7f6e","text":"

              \u6839\u636e\u4e0b\u8868\u586b\u5199\u955c\u50cf\u76f8\u5173\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65

              1. \u955c\u50cf\u6765\u6e90\uff1a\u652f\u6301\u4e09\u79cd\u7c7b\u578b\u7684\u6765\u6e90\u3002

                • \u955c\u50cf\u4ed3\u5e93\u7c7b\u578b\uff1a\u955c\u50cf\u5b58\u50a8\u5728\u5bb9\u5668\u955c\u50cf\u4ed3\u5e93\u4e2d\uff0c\u652f\u6301\u4ece\u955c\u50cf\u4ed3\u5e93\u4e2d\u6309\u9700\u9009\u62e9\u955c\u50cf\uff1b
                • HTTP \u7c7b\u578b\uff1a\u955c\u50cf\u5b58\u50a8\u4e8e HTTP \u534f\u8bae\u7684\u6587\u4ef6\u670d\u52a1\u5668\u4e2d\uff0c\u652f\u6301 HTTPS://\u548c HTTP://\u524d\u7f00\uff1b
                • \u5bf9\u8c61\u5b58\u50a8\uff08S3\uff09\uff1a\u652f\u6301\u901a\u8fc7\u5bf9\u8c61\u5b58\u50a8\u534f\u8bae (S3) \u83b7\u53d6\u7684\u4e91\u4e3b\u673a\u955c\u50cf\uff0c\u82e5\u662f\u65e0\u9700\u8ba4\u8bc1\u7684\u5bf9\u8c61\u5b58\u50a8\u6587\u4ef6\uff0c\u8bf7\u4f7f\u7528 HTTP \u6765\u6e90\u3002
              2. \u4ee5\u4e0b\u662f\u5e73\u53f0\u5185\u7f6e\u7684\u955c\u50cf\u4fe1\u606f\uff0c\u5305\u62ec\u64cd\u4f5c\u7cfb\u7edf\u548c\u7248\u672c\u3001\u955c\u50cf\u5730\u5740\u3002\u540c\u65f6\u4e5f\u652f\u6301\u81ea\u5b9a\u4e49\u4e91\u4e3b\u673a\u955c\u50cf\u3002

                \u64cd\u4f5c\u7cfb\u7edf \u5bf9\u5e94\u7248\u672c \u955c\u50cf\u5730\u5740 CentOS CentOS 7.9 release-ci.daocloud.io/virtnest/system-images/centos-7.9-x86_64:v1 Ubuntu Ubuntu 22.04 release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1 Debian Debian 12 release-ci.daocloud.io/virtnest/system-images/debian-12-x86_64:v1
              3. \u955c\u50cf\u5bc6\u94a5\uff1a\u4ec5\u652f\u6301\u9ed8\u8ba4\uff08Opaque\uff09\u7c7b\u578b\u5bc6\u94a5\uff0c\u5177\u4f53\u683c\u5f0f\u8bf7\u53c2\u8003\u521b\u5efa\u5bc6\u94a5\u3002

                \u5e73\u53f0\u5185\u7f6e\u955c\u50cf\u5b58\u50a8\u5728\u70b9\u706b\u96c6\u7fa4\u4e2d\uff0c\u800c\u70b9\u706b\u96c6\u7fa4\u7684\u955c\u50cf\u4ed3\u5e93\u672a\u52a0\u5bc6\uff0c\u56e0\u6b64\u5f53\u9009\u62e9\u5185\u7f6e\u955c\u50cf\u65f6\uff0c\u65e0\u9700\u9009\u62e9\u5bc6\u94a5\u3002

              Note

              CPU \u548c\u5185\u5b58\u7684\u70ed\u52a0\u8f7d\u914d\u7f6e\u8981\u6c42\uff1avirtnest \u7684\u7248\u672c\u4e0d\u4f4e\u4e8e v0.10.0\uff0c\u5e76\u4e14 virtnest-agent \u7248\u672c\u4e0d\u4f4e\u4e8e v0.7.0\uff1b\u652f\u6301\u5b9e\u65f6\u8fc1\u79fb\uff08\u786e\u4fdd PVC \u8bbf\u95ee\u6a21\u5f0f\u4e3a ReadWriteMany\uff09\u3002

              1. \u8d44\u6e90\u914d\u7f6e\uff1aCPU \u5efa\u8bae\u4f7f\u7528\u6574\u6570\uff0c\u82e5\u586b\u5199\u5c0f\u6570\u5219\u4f1a\u5411\u4e0a\u53d6\u6574\u3002\u652f\u6301 CPU\u3001\u5185\u5b58\u7684\u70ed\u52a0\u8f7d\u3002

              2. GPU \u914d\u7f6e\uff1a\u542f\u7528 GPU \u529f\u80fd\u9700\u8981\u9700\u8981\u6ee1\u8db3\u524d\u63d0\u6761\u4ef6\uff0c\u5177\u4f53\u53ef\u53c2\u8003 \u4e91\u4e3b\u673a\u914d\u7f6e GPU\uff08Nvidia)\u3002 \u4e91\u4e3b\u673a\u652f\u6301 Nvidia\u2014GPU \u548c Nvidia\u2014vGPU \u4e24\u79cd\u7c7b\u578b\uff0c\u9009\u62e9\u6240\u9700\u7c7b\u578b\u540e\uff0c\u9700\u8981\u9009\u62e9\u5bf9\u5e94\u7684 GPU \u578b\u53f7\u548c\u5361\u7684\u6570\u91cf\u3002

              "},{"location":"admin/virtnest/quickstart/index.html#_6","title":"\u5b58\u50a8\u4e0e\u7f51\u7edc\u914d\u7f6e","text":"
              • \u5b58\u50a8\uff1a

                • \u5b58\u50a8\u548c\u4e91\u4e3b\u673a\u7684\u529f\u80fd\u606f\u606f\u76f8\u5173\uff0c\u4e3b\u8981\u662f\u901a\u8fc7\u4f7f\u7528 Kubernetes \u7684\u6301\u4e45\u5377\u548c\u5b58\u50a8\u7c7b\uff0c\u63d0\u4f9b\u4e86\u7075\u6d3b\u4e14\u53ef\u6269\u5c55\u7684\u4e91\u4e3b\u673a\u5b58\u50a8\u80fd\u529b\u3002\u6bd4\u5982\u4e91\u4e3b\u673a\u955c\u50cf\u5b58\u50a8\u5728 pvc \u91cc\uff0c\u652f\u6301\u548c\u5176\u4ed6\u6570\u636e\u4e00\u8d77\u514b\u9686\u3001\u5feb\u7167\u7b49\u3002

                • \u7cfb\u7edf\u76d8\uff1a\u7cfb\u7edf\u9ed8\u8ba4\u521b\u5efa\u4e00\u4e2a VirtIO \u7c7b\u578b\u7684 rootfs \u7cfb\u7edf\u76d8\uff0c\u7528\u4e8e\u5b58\u653e\u64cd\u4f5c\u7cfb\u7edf\u548c\u6570\u636e\u3002

                • \u6570\u636e\u76d8\uff1a\u6570\u636e\u76d8\u662f\u4e91\u4e3b\u673a\u4e2d\u7528\u4e8e\u5b58\u50a8\u7528\u6237\u6570\u636e\u3001\u5e94\u7528\u7a0b\u5e8f\u6570\u636e\u6216\u5176\u4ed6\u975e\u64cd\u4f5c\u7cfb\u7edf\u76f8\u5173\u6587\u4ef6\u7684\u5b58\u50a8\u8bbe\u5907\u3002\u4e0e\u7cfb\u7edf\u76d8\u76f8\u6bd4\uff0c\u6570\u636e\u76d8\u662f\u975e\u5fc5\u9009\u7684\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u52a8\u6001\u6dfb\u52a0\u6216\u79fb\u9664\u3002\u6570\u636e\u76d8\u7684\u5bb9\u91cf\u4e5f\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u8fdb\u884c\u7075\u6d3b\u914d\u7f6e\u3002

                • \u9ed8\u8ba4\u4f7f\u7528\u5757\u5b58\u50a8\u3002\u5982\u679c\u9700\u8981\u4f7f\u7528\u514b\u9686\u548c\u5feb\u7167\u529f\u80fd\uff0c\u8bf7\u786e\u4fdd\u60a8\u7684\u5b58\u50a8\u6c60\u5df2\u7ecf\u521b\u5efa\u4e86\u5bf9\u5e94\u7684 VolumeSnapshotClass\uff0c \u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u793a\u4f8b\u3002\u5982\u679c\u9700\u8981\u4f7f\u7528\u5b9e\u65f6\u8fc1\u79fb\u529f\u80fd\uff0c\u8bf7\u786e\u4fdd\u60a8\u7684\u5b58\u50a8\u652f\u6301\u5e76\u9009\u62e9\u4e86 ReadWriteMany \u7684\u8bbf\u95ee\u6a21\u5f0f \u3002

                  \u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u5b58\u50a8\u5728\u5b89\u88c5\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u81ea\u52a8\u521b\u5efa\u8fd9\u6837\u7684 VolumeSnapshotClass\uff0c\u56e0\u6b64\u60a8\u9700\u8981\u624b\u52a8\u521b\u5efa VolumeSnapshotClass\u3002 \u4ee5\u4e0b\u662f\u4e00\u4e2a HwameiStor \u521b\u5efa VolumeSnapshotClass \u7684\u793a\u4f8b\uff1a

                  kind: VolumeSnapshotClass\napiVersion: snapshot.storage.k8s.io/v1\nmetadata:\n  name: hwameistor-storage-lvm-snapshot\n  annotations:\n    snapshot.storage.kubernetes.io/is-default-class: \"true\"\nparameters:\n  snapsize: \"1073741824\"\ndriver: lvm.hwameistor.io\ndeletionPolicy: Delete\n
                • \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u68c0\u67e5 VolumeSnapshotClass \u662f\u5426\u521b\u5efa\u6210\u529f\u3002

                  kubectl get VolumeSnapshotClass\n
                • \u67e5\u770b\u5df2\u521b\u5efa\u7684 Snapshotclass\uff0c\u5e76\u4e14\u786e\u8ba4 provisioner \u5c5e\u6027\u540c\u5b58\u50a8\u6c60\u4e2d\u7684 Driver \u5c5e\u6027\u4e00\u81f4\u3002

              • \u7f51\u7edc\uff1a

                • \u7f51\u7edc\u914d\u7f6e\u53ef\u4ee5\u6839\u636e\u8868\u683c\u4fe1\u606f\u6309\u9700\u7ec4\u5408\u3002

                  \u7f51\u7edc\u6a21\u5f0f CNI \u662f\u5426\u5b89\u88c5 Spiderpool \u7f51\u5361\u6a21\u5f0f \u56fa\u5b9a IP \u5b9e\u65f6\u8fc1\u79fb Masquerade\uff08NAT\uff09 Calico \u274c \u5355\u7f51\u5361 \u274c \u2705 Cilium \u274c \u5355\u7f51\u5361 \u274c \u2705 Flannel \u274c \u5355\u7f51\u5361 \u274c \u2705 Bridge\uff08\u6865\u63a5\uff09 OVS \u2705 \u591a\u7f51\u5361 \u2705 \u2705

                • \u7f51\u7edc\u6a21\u5f0f\u5206\u4e3a Masquerade\uff08NAT\uff09\u548c Bridge\uff08\u6865\u63a5\uff09\uff0cBridge\uff08\u6865\u63a5\uff09\u6a21\u5f0f\u9700\u8981\u5b89\u88c5\u4e86 Spiderpool \u7ec4\u4ef6\u540e\u65b9\u53ef\u4f7f\u7528\u3002

                  • \u9ed8\u8ba4\u9009\u62e9 Masquerade\uff08NAT\uff09\u7684\u7f51\u7edc\u6a21\u5f0f\uff0c\u4f7f\u7528 eth0 \u9ed8\u8ba4\u7f51\u5361\u3002
                  • \u82e5\u96c6\u7fa4\u5185\u5b89\u88c5\u4e86 spiderpool \u7ec4\u4ef6\uff0c\u5219\u652f\u6301\u9009\u62e9 Bridge\uff08\u6865\u63a5\uff09\u6a21\u5f0f\uff0cBridge\uff08\u6865\u63a5\uff09\u6a21\u5f0f\u652f\u6301\u591a\u7f51\u5361\u5f62\u5f0f\u3002

                • \u6dfb\u52a0\u7f51\u5361

                  • Passt\uff08\u76f4\u901a\uff09/Bridge\uff08\u6865\u63a5\uff09\u6a21\u5f0f\u4e0b\u652f\u6301\u624b\u52a8\u6dfb\u52a0\u7f51\u5361\u3002\u70b9\u51fb \u6dfb\u52a0\u7f51\u5361 \uff0c\u8fdb\u884c\u7f51\u5361 IP \u6c60\u7684\u914d\u7f6e\u3002\u9009\u62e9\u548c\u7f51\u7edc\u6a21\u5f0f\u5339\u914d\u7684 Multus CR\uff0c\u82e5\u6ca1\u6709\u5219\u9700\u8981\u81ea\u884c\u521b\u5efa\u3002
                  • \u82e5\u6253\u5f00 \u4f7f\u7528\u9ed8\u8ba4 IP \u6c60 \u5f00\u5173\uff0c\u5219\u4f7f\u7528 multus CR \u914d\u7f6e\u4e2d\u7684\u9ed8\u8ba4 IP \u6c60\u3002\u82e5\u5173\u95ed\u5f00\u5173\uff0c\u5219\u624b\u52a8\u9009\u62e9 IP \u6c60\u3002

              "},{"location":"admin/virtnest/quickstart/index.html#_7","title":"\u767b\u5f55\u8bbe\u7f6e","text":"
              • \u7528\u6237\u540d/\u5bc6\u7801\uff1a\u53ef\u4ee5\u901a\u8fc7\u7528\u6237\u540d\u548c\u5bc6\u7801\u767b\u5f55\u81f3\u4e91\u4e3b\u673a\u3002
              • SSH\uff1a\u9009\u62e9 SSH \u767b\u5f55\u65b9\u5f0f\u65f6\u53ef\u4e3a\u4e91\u4e3b\u673a\u7ed1\u5b9a SSH \u5bc6\u94a5\uff0c\u7528\u4e8e\u65e5\u540e\u767b\u5f55\u4e91\u4e3b\u673a\u3002
              "},{"location":"admin/virtnest/quickstart/index.html#yaml","title":"YAML \u521b\u5efa","text":"

              \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u4e91\u4e3b\u673a\u3002

              \u8fdb\u5165\u4e91\u4e3b\u673a\u5217\u8868\u9875\uff0c\u70b9\u51fb \u901a\u8fc7 YAML \u521b\u5efa \u6309\u94ae\u3002

              \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u4e91\u4e3b\u673a\u7684 YAML \u793a\u4f8b
              apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  name: demo\n  namespace: default\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        name: systemdisk-demo\n        namespace: default\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 10Gi\n          storageClassName: hwameistor-storage-lvm-hdd\n        source:\n          registry:\n            url: >-\n              docker://release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1\n  runStrategy: Always\n  template:\n    spec:\n      architecture: amd64\n      domain:\n        cpu:\n          cores: 1\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n            - bootOrder: 1\n              disk:\n                bus: virtio\n              name: systemdisk-demo\n            - disk:\n                bus: virtio\n              name: cloudinitdisk\n          interfaces:\n            - masquerade: {}\n              name: default\n        machine:\n          type: q35\n        resources:\n          requests:\n            memory: 2Gi\n      networks:\n        - name: default\n          pod: {}\n      volumes:\n        - dataVolume:\n            name: systemdisk-demo\n          name: systemdisk-demo\n        - cloudInitNoCloud:\n            userDataBase64: >-\n              I2Nsb3VkLWNvbmZpZwpzc2hfcHdhdXRoOiB0cnVlCmRpc2FibGVfcm9vdDogZmFsc2UKY2hwYXNzd2Q6IHsibGlzdCI6ICJyb290OjEyMzQ1NiIsIGV4cGlyZTogRmFsc2V9CgoKcnVuY21kOgogIC0gc2VkIC1pICIvI1w/UGVybWl0Um9vdExvZ2luL3MvXi4qJC9QZXJtaXRSb290TG9naW4geWVzL2ciIC9ldGMvc3NoL3NzaGRfY29uZmlnCiAgLSBzeXN0ZW1jdGwgcmVzdGFydCBzc2guc2VydmljZQ==\n          name: cloudinitdisk\n
              "},{"location":"admin/virtnest/quickstart/access.html","title":"\u8fde\u63a5\u4e91\u4e3b\u673a","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u4e24\u79cd\u8fde\u63a5\u4e91\u4e3b\u673a\u7684\u65b9\u5f0f\uff0c\u5206\u522b\u4e3a \u63a7\u5236\u53f0\u8bbf\u95ee\uff08VNC\uff09\u548c\u7ec8\u7aef\u65b9\u5f0f\u3002

              "},{"location":"admin/virtnest/quickstart/access.html#_2","title":"\u7ec8\u7aef","text":"

              \u901a\u8fc7\u7ec8\u7aef\u8bbf\u95ee\u4e91\u4e3b\u673a\u7684\u65b9\u5f0f\u66f4\u52a0\u7075\u6d3b\u548c\u8f7b\u91cf\uff0c\u4f46\u662f\u65e0\u6cd5\u76f4\u63a5\u5c55\u793a\u56fe\u5f62\u754c\u9762\uff0c\u4ea4\u4e92\u6027\u8f83\u5dee\uff0c\u4e14\u65e0\u6cd5\u591a\u7ec8\u7aef\u540c\u65f6\u5728\u7ebf\u3002

              \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u652f\u6301\u901a\u8fc7\u7ec8\u7aef\u65b9\u5f0f\u8bbf\u95ee\u4e91\u4e3b\u673a\u3002

              "},{"location":"admin/virtnest/quickstart/access.html#vnc","title":"\u63a7\u5236\u53f0\u8bbf\u95ee\uff08VNC\uff09","text":"

              \u901a\u8fc7 VNC \u8bbf\u95ee\u4e91\u4e3b\u673a\u7684\u65b9\u5f0f\u53ef\u4ee5\u5b9e\u73b0\u5bf9\u8fdc\u7a0b\u8ba1\u7b97\u673a\u7684\u5b8c\u6574\u56fe\u5f62\u754c\u9762\u7684\u8bbf\u95ee\u548c\u63a7\u5236\uff0c\u80fd\u591f\u76f4\u89c2\u5730\u64cd\u4f5c\u8fdc\u7a0b\u8bbe\u5907\uff0c\u4ea4\u4e92\u6027\u66f4\u52a0\u597d\uff0c\u4f46\u662f\u6027\u80fd\u4f1a\u53d7\u5230\u4e00\u5b9a\u5f71\u54cd\uff0c\u4e14\u65e0\u6cd5\u591a\u7ec8\u7aef\u540c\u65f6\u5728\u7ebf\u3002

              Windows \u7cfb\u7edf\u9009\u62e9 VNC\u3002

              \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u652f\u6301\u901a\u8fc7\u63a7\u5236\u53f0\u8bbf\u95ee\uff08VNC\uff09\u7684\u65b9\u5f0f\u8bbf\u95ee\u4e91\u4e3b\u673a\u3002

              "},{"location":"admin/virtnest/quickstart/detail.html","title":"\u4e91\u4e3b\u673a\u8be6\u60c5","text":"

              \u6210\u529f\u521b\u5efa\u4e91\u4e3b\u673a\u540e\uff0c\u53ef\u8fdb\u5165\u4e91\u4e3b\u673a\u8be6\u60c5\u9875\u9762\uff0c\u652f\u6301\u67e5\u770b\u57fa\u672c\u4fe1\u606f\u3001\u914d\u7f6e\u4fe1\u606f\u3001GPU \u4fe1\u606f\u3001\u6982\u89c8\u3001\u5b58\u50a8\u3001\u7f51\u7edc\u3001\u5feb\u7167\u3001\u4e8b\u4ef6\u7b49\u3002

              \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u96c6\u7fa4\u5217\u8868 \uff0c\u8fdb\u5165\u4e91\u4e3b\u673a\u6240\u5728\u96c6\u7fa4\u8be6\u60c5\uff0c\u70b9\u51fb\u4e91\u4e3b\u673a\u540d\u79f0\u67e5\u770b\u4e91\u4e3b\u673a\u8be6\u60c5\u3002

              "},{"location":"admin/virtnest/quickstart/detail.html#_2","title":"\u57fa\u672c\u4fe1\u606f","text":"

              \u4e91\u4e3b\u673a\u57fa\u672c\u4fe1\u606f\u5305\u542b\u72b6\u6001\u3001\u522b\u540d\u3001\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001IP\u3001\u6807\u7b7e\u3001\u8282\u70b9\u3001\u7528\u6237\u540d\u3001\u5bc6\u7801\u3001\u521b\u5efa\u65f6\u95f4\u7b49\u3002\u5176\u4e2d\uff0c

              • \u72b6\u6001\uff1a\u4e91\u4e3b\u673a\u5f53\u524d\u7684\u8fd0\u884c\u72b6\u6001\uff08\u8fd0\u884c\u4e2d/\u5904\u7406\u4e2d/\u5173\u673a/\u9519\u8bef\uff09\u3002
              • IP \uff1a\u4e91\u4e3b\u673a\u7684 IP \u5730\u5740\u3002\u5bf9\u4e8e\u6dfb\u52a0\u591a\u5f20\u7f51\u5361\u7684\u4e91\u4e3b\u673a\uff0c\u4f1a\u4e3a\u5176\u5206\u914d\u591a\u4e2a IP \u5730\u5740\u3002
              "},{"location":"admin/virtnest/quickstart/detail.html#gpu","title":"\u914d\u7f6e\u4fe1\u606f & GPU \u914d\u7f6e","text":"

              \u4e91\u4e3b\u673a\u914d\u7f6e\u4fe1\u606f\u5305\u62ec\uff1a

              • \u64cd\u4f5c\u7cfb\u7edf\uff1a\u5b89\u88c5\u5728\u4e91\u4e3b\u673a\u4e0a\u7528\u4e8e\u6267\u884c\u7a0b\u5e8f\u7684\u64cd\u4f5c\u7cfb\u7edf\u3002
              • \u955c\u50cf\u5730\u5740\uff1a\u5411\u4e00\u4e2a\u865a\u62df\u786c\u76d8\u6587\u4ef6\u6216\u64cd\u4f5c\u7cfb\u7edf\u5b89\u88c5\u4ecb\u8d28\u7684\u94fe\u63a5\uff0c\u8fd9\u4e2a\u5730\u5740\u7528\u4e8e\u5728\u4e91\u4e3b\u673a\u8f6f\u4ef6\u4e2d\u52a0\u8f7d\u548c\u5b89\u88c5\u64cd\u4f5c\u7cfb\u7edf\u3002
              • \u7f51\u7edc\u6a21\u5f0f\uff1a\u4e91\u4e3b\u673a\u914d\u7f6e\u7684\u7f51\u7edc\u6a21\u5f0f\uff0cBridge\uff08\u6865\u63a5\uff09\u6216 Masquerade\uff08NAT\uff09\u3002
              • CPU\u3001\u5185\u5b58\uff1a\u4e3a\u4e91\u4e3b\u673a\u5206\u914d\u7684\u8d44\u6e90\u3002

              GPU \u914d\u7f6e\u4fe1\u606f\u5305\u542b GPU \u7c7b\u578b\u3001GPU \u578b\u53f7\u4ee5\u53ca\u5361\u6570\u91cf\u3002

              "},{"location":"admin/virtnest/quickstart/detail.html#_3","title":"\u5176\u4ed6\u4fe1\u606f","text":"\u6982\u89c8\u50a8\u5b58\u7f51\u7edc\u5feb\u7167\u4e8b\u4ef6\u5217\u8868

              \u4e91\u4e3b\u673a\u6982\u89c8\u9875\u53ef\u67e5\u770b\u4e91\u4e3b\u673a\u7684\u76d1\u63a7\u5185\u5bb9\u3002\u8bf7\u6ce8\u610f\uff0c\u82e5\u672a\u5b89\u88c5 insight-agent \u7ec4\u4ef6\uff0c\u5219\u65e0\u6cd5\u83b7\u53d6\u76d1\u63a7\u4fe1\u606f\u3002

              \u5c55\u793a\u4e91\u4e3b\u673a\u6240\u7528\u7684\u5b58\u50a8\uff0c\u5305\u62ec\u7cfb\u7edf\u76d8\u548c\u6570\u636e\u76d8\u7684\u4fe1\u606f\u3002

              \u5c55\u793a\u4e91\u4e3b\u673a\u7684\u7f51\u7edc\u914d\u7f6e\uff0c\u5305\u62ec Multus CR\u3001\u7f51\u5361\u540d\u79f0\u3001IP \u5730\u5740\u7b49\u4fe1\u606f\u3002

              \u82e5\u5df2\u7ecf\u521b\u5efa\u5feb\u7167\uff0c\u672c\u9875\u5c06\u5c55\u793a\u4e91\u4e3b\u673a\u7684\u5feb\u7167\u4fe1\u606f\uff0c\u652f\u6301\u901a\u8fc7\u5feb\u7167\u6062\u590d\u4e91\u4e3b\u673a\u3002

              \u4e8b\u4ef6\u5217\u8868\u5305\u542b\u4e91\u4e3b\u673a\u7684\u751f\u547d\u5468\u671f\u4e2d\u53d1\u751f\u7684\u5404\u79cd\u72b6\u6001\u53d8\u5316\u3001\u64cd\u4f5c\u8bb0\u5f55\u548c\u7cfb\u7edf\u6d88\u606f\u7b49\u3002

              "},{"location":"admin/virtnest/quickstart/nodeport.html","title":"\u901a\u8fc7 NodePort \u8bbf\u95ee\u4e91\u4e3b\u673a","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7 NodePort \u8bbf\u95ee\u4e91\u4e3b\u673a\u3002

              "},{"location":"admin/virtnest/quickstart/nodeport.html#_1","title":"\u73b0\u6709\u8bbf\u95ee\u65b9\u5f0f\u7684\u7f3a\u9677","text":"
              1. \u4e91\u4e3b\u673a\u652f\u6301\u901a\u8fc7 VNC \u6216\u8005 console \u8bbf\u95ee\uff0c\u4f46\u8fd9\u4e24\u79cd\u8bbf\u95ee\u65b9\u5f0f\u90fd\u6709\u4e00\u4e2a\u5f0a\u7aef\uff0c\u65e0\u6cd5\u591a\u7ec8\u7aef\u540c\u65f6\u5728\u7ebf\u3002

              2. \u901a\u8fc7 NodePort \u5f62\u5f0f\u7684 Service\uff0c\u53ef\u4ee5\u5e2e\u52a9\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

              "},{"location":"admin/virtnest/quickstart/nodeport.html#service","title":"\u521b\u5efa service \u7684\u65b9\u5f0f","text":"
              1. \u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u9875\u9762

                • \u9009\u62e9\u76ee\u6807\u8bbf\u95ee\u7684\u4e91\u4e3b\u673a\u6240\u5728\u96c6\u7fa4\u9875\u9762\u521b\u5efa\u670d\u52a1\uff08Service\uff09
                • \u9009\u62e9\u8bbf\u95ee\u7c7b\u578b\u4e3a\u8282\u70b9\u8bbf\u95ee\uff08NodePort\uff09
                • \u9009\u62e9\u547d\u540d\u7a7a\u95f4\uff08\u4e91\u4e3b\u673a\u6240\u5728 namespace\uff09
                • \u6807\u7b7e\u9009\u62e9\u5668\u586b\u5199 vm.kubevirt.io/name: you-vm-name
                • \u7aef\u53e3\u914d\u7f6e\uff1a\u534f\u8bae\u9009\u62e9 TCP\uff0c\u7aef\u53e3\u540d\u79f0\u81ea\u5b9a\u4e49\uff0c\u670d\u52a1\u7aef\u53e3\u3001\u5bb9\u5668\u7aef\u53e3\u586b\u5199 22
              2. \u521b\u5efa\u6210\u529f\u540e\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7 ssh username@nodeip -p port \u6765\u8bbf\u95ee\u4e91\u4e3b\u673a

              "},{"location":"admin/virtnest/quickstart/nodeport.html#kubectl-svc","title":"\u901a\u8fc7 kubectl \u521b\u5efa svc","text":"
              1. \u7f16\u5199 YAML \u6587\u4ef6\uff0c\u793a\u4f8b\u5982\u4e0b\uff1a

                apiVersion: v1\nkind: Service\n  metadata:\n    name: test-ssh\nspec:\n  ports:\n  - name: tcp-ssh\n    nodePort: 32090\n    protocol: TCP\n    // 22 \u7aef\u53e3\uff0c\u4e0d\u8981\u66f4\u6539\n    port: 22 \n    targetPort: 22\n  selector:\n    // \u4e91\u4e3b\u673a\u7684 name\n\u00a0 \u00a0vm.kubevirt.io/name: test-image-s3\n  type: NodePort\n
              2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4

                kubectl apply -f you-svc.yaml\n
              3. \u521b\u5efa\u6210\u529f\u540e\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7 ssh username@nodeip -p 32090 \u6765\u8bbf\u95ee\u4e91\u4e3b\u673a

              "},{"location":"admin/virtnest/quickstart/update.html","title":"\u66f4\u65b0\u4e91\u4e3b\u673a","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u8868\u5355\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u66f4\u65b0\u4e91\u4e3b\u673a\u3002

              "},{"location":"admin/virtnest/quickstart/update.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5f00\u673a\u72b6\u6001\u4e0b\u66f4\u65b0\u4e91\u4e3b\u673a CPU\u3001\u5185\u5b58\u3001\u6570\u636e\u76d8\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u4e91\u4e3b\u673a\u652f\u6301\u5b9e\u65f6\u8fc1\u79fb\u80fd\u529b\u3002
              "},{"location":"admin/virtnest/quickstart/update.html#_3","title":"\u8868\u5355\u66f4\u65b0\u4e91\u4e3b\u673a","text":"

              \u5728\u4e91\u4e3b\u673a\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb \u66f4\u65b0 \u8fdb\u5165\u4e91\u4e3b\u673a\u66f4\u65b0\u9875\u9762\u3002

              \u57fa\u672c\u4fe1\u606f\u955c\u50cf\u914d\u7f6e\u5b58\u50a8\u4e0e\u7f51\u7edc\u767b\u5f55\u8bbe\u7f6e

              \u57fa\u672c\u4fe1\u606f\u9875\u9762\u4e2d\uff0c \u522b\u540d \u4e0e \u6807\u7b7e\u6ce8\u89e3 \u652f\u6301\u66f4\u65b0\uff0c\u5176\u4ed6\u4fe1\u606f\u65e0\u6cd5\u66f4\u6539\u3002\u5b8c\u6210\u66f4\u65b0\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u8fdb\u5165\u955c\u50cf\u914d\u7f6e\u7684\u754c\u9762\u3002

              \u5728\u955c\u50cf\u914d\u7f6e\u9875\u9762\u4e2d\uff0c\u955c\u50cf\u6765\u6e90\u3001\u64cd\u4f5c\u7cfb\u7edf\u3001\u7248\u672c\u7b49\u53c2\u6570\u4e00\u65e6\u9009\u62e9\u540e\u65e0\u6cd5\u66f4\u6539\uff0c\u5141\u8bb8\u7528\u6237\u66f4\u65b0 GPU \u914d\u7f6e \uff0c \u5305\u62ec\u542f\u7528\u6216\u7981\u7528 GPU \u652f\u6301\uff0c\u9009\u62e9 GPU \u7684\u7c7b\u578b\uff0c\u6307\u5b9a\u6240\u9700\u7684\u578b\u53f7\uff0c\u4ee5\u53ca\u914d\u7f6e GPU \u5361\u7684\u6570\u91cf\uff0c\u66f4\u65b0\u540e\u9700\u8981\u91cd\u542f\u624d\u80fd\u751f\u6548\u3002 \u5b8c\u6210\u66f4\u65b0\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u8fdb\u5165\u5b58\u50a8\u4e0e\u7f51\u7edc\u7684\u754c\u9762\u3002

              \u5728\u5b58\u50a8\u4e0e\u7f51\u7edc\u9875\u9762\u4e2d\uff0c\u7cfb\u7edf\u76d8\u7684\u5b58\u50a8\u6c60\u548c PVC \u8bbf\u95ee\u6a21\u5f0f\u4e00\u65e6\u9009\u62e9\u540e\u65e0\u6cd5\u66f4\u6539\uff0c\u652f\u6301\u589e\u52a0\u78c1\u76d8\u5bb9\u91cf\uff0c\u4e0d\u53ef\u51cf\u5c11\u3002 \u6b64\u5916\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u7531\u6dfb\u52a0\u6216\u8005\u79fb\u9664\u6570\u636e\u76d8\u3002\u4e0d\u652f\u6301\u66f4\u65b0\u7f51\u7edc\u914d\u7f6e\u3002\u5b8c\u6210\u66f4\u65b0\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u8fdb\u5165\u767b\u5f55\u8bbe\u7f6e\u7684\u754c\u9762\u3002

              Note

              \u5efa\u8bae\u5728\u4fee\u6539\u5b58\u50a8\u5bb9\u91cf\u6216\u589e\u52a0\u6570\u636e\u76d8\u540e\u91cd\u542f\u4e91\u4e3b\u673a\uff0c\u4ee5\u786e\u4fdd\u914d\u7f6e\u751f\u6548\u3002

              \u5728\u767b\u5f55\u8bbe\u7f6e\u9875\u9762\u4e2d\uff0c\u7528\u6237\u540d\u3001\u5bc6\u7801\u4ee5\u53ca SSH \u5bc6\u94a5\u914d\u7f6e\u4e00\u65e6\u8bbe\u7f6e\uff0c\u4e0d\u5141\u8bb8\u66f4\u6539\u3002\u786e\u8ba4\u60a8\u7684\u767b\u5f55\u4fe1\u606f\u65e0\u8bef\u540e\uff0c\u70b9\u51fb\u786e\u5b9a\u6309\u94ae\u4ee5\u5b8c\u6210\u66f4\u65b0\u6d41\u7a0b\u3002

              "},{"location":"admin/virtnest/quickstart/update.html#yaml","title":"\u7f16\u8f91 YAML","text":"

              \u9664\u4e86\u901a\u8fc7\u8868\u5355\u65b9\u5f0f\u66f4\u65b0\u4e91\u4e3b\u673a\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u66f4\u65b0\u4e91\u4e3b\u673a\u3002

              \u8fdb\u5165\u4e91\u4e3b\u673a\u5217\u8868\u9875\uff0c\u70b9\u51fb \u7f16\u8f91 YAML \u6309\u94ae\u3002

              "},{"location":"admin/virtnest/template/index.html","title":"\u901a\u8fc7\u6a21\u677f\u521b\u5efa\u4e91\u4e3b\u673a","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u6a21\u677f\u521b\u5efa\u4e91\u4e3b\u673a\u3002

              \u901a\u8fc7\u5185\u7f6e\u6a21\u677f\u548c\u81ea\u5b9a\u4e49\u6a21\u677f\uff0c\u7528\u6237\u53ef\u4ee5\u8f7b\u677e\u521b\u5efa\u65b0\u7684\u4e91\u4e3b\u673a\u3002\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u63d0\u4f9b\u5c06\u73b0\u6709\u4e91\u4e3b\u673a\u8f6c\u6362\u4e3a\u4e91\u4e3b\u673a\u6a21\u677f\u7684\u529f\u80fd\uff0c\u8ba9\u7528\u6237\u80fd\u591f\u66f4\u52a0\u7075\u6d3b\u5730\u7ba1\u7406\u548c\u4f7f\u7528\u8d44\u6e90\u3002

              "},{"location":"admin/virtnest/template/index.html#_2","title":"\u6a21\u677f\u521b\u5efa","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u6a21\u677f\u521b\u5efa\u4e00\u4e2a\u4e91\u4e3b\u673a\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165 \u4e91\u4e3b\u673a\u7ba1\u7406 \u9875\u9762\u3002\u5728\u4e91\u4e3b\u673a\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u521b\u5efa\u4e91\u4e3b\u673a-\u9009\u62e9\u6a21\u677f\u521b\u5efa\u4e91\u4e3b\u673a\u3002

              2. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u9875\u9762\uff0c\u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u6a21\u677f\u914d\u7f6e\u3001\u5b58\u50a8\u4e0e\u7f51\u7edc\u3001\u767b\u5f55\u8bbe\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de\u4e91\u4e3b\u673a\u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u4e91\u4e3b\u673a\u6267\u884c\u5173\u673a/\u5f00\u542f\u3001\u91cd\u542f\u3001\u514b\u9686\u3001\u66f4\u65b0\u3001\u521b\u5efa\u5feb\u7167\u3001\u914d\u7f6e\u8f6c\u6362\u4e3a\u6a21\u677f\u3001\u63a7\u5236\u53f0\u8bbf\u95ee\uff08VNC\uff09\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002 \u514b\u9686\u548c\u5feb\u7167\u80fd\u529b\u4f9d\u8d56\u4e8e\u5b58\u50a8\u6c60\u7684\u9009\u62e9\u3002

              "},{"location":"admin/virtnest/template/index.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

              \u5728\u521b\u5efa\u4e91\u4e3b\u673a\u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              • \u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002 \u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u540d\u79f0\u5728\u4e91\u4e3b\u673a\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
              • \u522b\u540d\uff1a\u5141\u8bb8\u4efb\u4f55\u5b57\u7b26\uff0c\u6700\u957f60\u4e2a\u5b57\u7b26\u3002
              • \u96c6\u7fa4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u4e91\u4e3b\u673a\u90e8\u7f72\u5728\u54ea\u4e2a\u96c6\u7fa4\u5185\u3002
              • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u4e91\u4e3b\u673a\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\u3002 \u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
              "},{"location":"admin/virtnest/template/index.html#_4","title":"\u6a21\u677f\u914d\u7f6e","text":"

              \u51fa\u73b0\u6a21\u677f\u5217\u8868\uff0c\u6309\u9700\u9009\u62e9\u5185\u7f6e\u6a21\u677f/\u81ea\u5b9a\u4e49\u6a21\u677f\u3002

              • \u9009\u62e9\u5185\u7f6e\u6a21\u677f\uff1a\u5e73\u53f0\u5185\u7f6e\u4e862\u4e2a\u6807\u51c6\u6a21\u677f\uff0c\u4e0d\u5141\u8bb8\u7f16\u8f91\u548c\u5220\u9664\u3002\u9009\u62e9\u5185\u7f6e\u6a21\u677f\u540e\uff0c\u955c\u50cf\u6765\u6e90\u3001\u64cd\u4f5c\u7cfb\u7edf\u3001\u955c\u50cf\u5730\u5740\u7b49\u5c06\u4f7f\u7528\u6a21\u677f\u5185\u7684\u4fe1\u606f\uff0c\u65e0\u6cd5\u4fee\u6539\uff1b\u8d44\u6e90\u914d\u989d\u4e5f\u5c06\u4f7f\u7528\u6a21\u677f\u5185\u7684\u4fe1\u606f\uff0c\u5141\u8bb8\u4fee\u6539\u3002

              • \u9009\u62e9\u81ea\u5b9a\u4e49\u6a21\u677f\uff1a\u7531\u4e91\u4e3b\u673a\u914d\u7f6e\u8f6c\u5316\u800c\u6765\u7684\u6a21\u677f\uff0c\u652f\u6301\u7f16\u8f91\u548c\u5220\u9664\u3002\u4f7f\u7528\u81ea\u5b9a\u4e49\u6a21\u677f\u5219\u6839\u636e\u5177\u4f53\u60c5\u51b5\u652f\u6301\u4fee\u6539\u955c\u50cf\u6765\u6e90\u7b49\u4fe1\u606f\u3002

              "},{"location":"admin/virtnest/template/index.html#_5","title":"\u5b58\u50a8\u4e0e\u7f51\u7edc\u914d\u7f6e","text":"
              • \u5b58\u50a8\uff1a\u7cfb\u7edf\u9ed8\u8ba4\u521b\u5efa\u4e00\u4e2a VirtIO \u7c7b\u578b\u7684 rootfs \u7cfb\u7edf\u76d8\uff0c\u7528\u4e8e\u5b58\u653e\u64cd\u4f5c\u7cfb\u7edf\u548c\u6570\u636e\u3002 \u9ed8\u8ba4\u4f7f\u7528\u5757\u5b58\u50a8\u3002\u5982\u679c\u9700\u8981\u4f7f\u7528\u514b\u9686\u548c\u5feb\u7167\u529f\u80fd\uff0c\u8bf7\u786e\u4fdd\u60a8\u7684\u5b58\u50a8\u6c60\u652f\u6301 VolumeSnapshots \u529f\u80fd\uff0c \u5e76\u5728\u5b58\u50a8\u6c60\uff08SC\uff09\u4e2d\u8fdb\u884c\u521b\u5efa\u3002\u8bf7\u6ce8\u610f\uff0c\u5b58\u50a8\u6c60\uff08SC\uff09\u8fd8\u6709\u5176\u4ed6\u4e00\u4e9b\u5148\u51b3\u6761\u4ef6\u9700\u8981\u6ee1\u8db3\u3002

                • \u5148\u51b3\u6761\u4ef6\uff1a

                  • KubeVirt \u5229\u7528 Kubernetes CSI \u9a71\u52a8\u7a0b\u5e8f\u7684 VolumeSnapshot\u529f\u80fd\u6765\u6355\u83b7\u6301\u4e45\u5316\u4e91\u4e3b\u673a\u72b6\u6001\u3002 \u56e0\u6b64\uff0c\u60a8\u9700\u8981\u786e\u4fdd\u60a8\u7684\u4e91\u4e3b\u673a\u4f7f\u7528\u7531\u652f\u6301 VolumeSnapshots \u7684 StorageClass \u5e76\u914d\u7f6e\u4e86\u6b63\u786e\u7684 VolumeSnapshotClass\u3002
                  • \u67e5\u770b\u5df2\u521b\u5efa\u7684 Snapshotclass \uff0c\u5e76\u4e14\u786e\u8ba4 provisioner \u5c5e\u6027\u540c\u5b58\u50a8\u6c60\u4e2d\u7684 Driver \u5c5e\u6027\u4e00\u81f4\u3002
                • \u652f\u6301\u6dfb\u52a0\u4e00\u5757\u7cfb\u7edf\u76d8\u548c\u591a\u5757\u6570\u636e\u76d8\u3002

              • \u7f51\u7edc\uff1a\u82e5\u60a8\u4e0d\u505a\u4efb\u4f55\u914d\u7f6e\uff0c\u7cfb\u7edf\u5c06\u9ed8\u8ba4\u521b\u5efa\u4e00\u4e2a VirtIO \u7c7b\u578b\u7684\u7f51\u7edc\u3002

              "},{"location":"admin/virtnest/template/index.html#_6","title":"\u767b\u5f55\u8bbe\u7f6e","text":"
              • \u7528\u6237\u540d/\u5bc6\u7801\uff1a\u53ef\u4ee5\u901a\u8fc7\u7528\u6237\u540d\u548c\u5bc6\u7801\u767b\u5f55\u81f3\u4e91\u4e3b\u673a\u3002
              • SSH\uff1a\u9009\u62e9 SSH \u767b\u5f55\u65b9\u5f0f\u65f6\u53ef\u4e3a\u4e91\u4e3b\u673a\u7ed1\u5b9a SSH \u5bc6\u94a5\uff0c\u7528\u4e8e\u65e5\u540e\u767b\u5f55\u4e91\u4e3b\u673a\u3002
              "},{"location":"admin/virtnest/template/tep.html","title":"\u4e91\u4e3b\u673a\u6a21\u677f","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5185\u7f6e\u4e91\u4e3b\u673a\u6a21\u677f\u548c\u81ea\u5b9a\u4e49\u4e91\u4e3b\u673a\u6a21\u677f\u3002

              \u901a\u8fc7\u5185\u7f6e\u6a21\u677f\u548c\u81ea\u5b9a\u4e49\u6a21\u677f\uff0c\u7528\u6237\u53ef\u4ee5\u8f7b\u677e\u521b\u5efa\u65b0\u7684\u4e91\u4e3b\u673a\u3002\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u63d0\u4f9b\u5c06\u73b0\u6709\u4e91\u4e3b\u673a\u8f6c\u6362\u4e3a\u4e91\u4e3b\u673a\u6a21\u677f\u7684\u529f\u80fd\uff0c\u8ba9\u7528\u6237\u80fd\u591f\u66f4\u52a0\u7075\u6d3b\u5730\u7ba1\u7406\u548c\u4f7f\u7528\u8d44\u6e90\u3002

              "},{"location":"admin/virtnest/template/tep.html#_2","title":"\u4e91\u4e3b\u673a\u6a21\u677f","text":"
              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a\u6a21\u677f \uff0c\u8fdb\u5165 \u4e91\u4e3b\u673a\u6a21\u677f \u9875\u9762\uff0c\u82e5\u8be5\u6a21\u677f\u662f\u7531\u914d\u7f6e\u4e86 GPU \u7684\u4e91\u4e3b\u673a\u8f6c\u6362\u800c\u6765\uff0c\u6a21\u677f\u4e5f\u4f1a\u5e26\u6709 GPU \u7684\u4fe1\u606f\uff0c\u5c06\u5728\u6a21\u677f\u5217\u8868\u4e2d\u5c55\u793a\u3002

              2. \u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u5185\u7f6e\u6a21\u677f\u6267\u884c\u521b\u5efa\u4e91\u4e3b\u673a\u548c\u67e5\u770b YAML \u64cd\u4f5c\uff1b\u5bf9\u81ea\u5b9a\u4e49\u6a21\u677f\u652f\u6301\u521b\u5efa\u4e91\u4e3b\u673a\u3001\u7f16\u8f91 YAML \u548c\u5220\u9664\u64cd\u4f5c\u3002

              "},{"location":"admin/virtnest/template/tep.html#_3","title":"\u5185\u7f6e\u6a21\u677f","text":"
              • \u5e73\u53f0\u5185\u5185\u7f6e\u4e24\u79cd\u6a21\u677f\uff0c\u5206\u522b\u662f CentOS \u548c Ubuntu\u3002

              "},{"location":"admin/virtnest/template/tep.html#_4","title":"\u81ea\u5b9a\u4e49\u6a21\u677f","text":"

              \u81ea\u5b9a\u4e49\u6a21\u677f\u662f\u7531\u4e91\u4e3b\u673a\u914d\u7f6e\u8f6c\u5316\u800c\u6765\u7684\u6a21\u677f\u3002\u4ee5\u4e0b\u4ecb\u7ecd\u5982\u4f55\u4ece\u4e91\u4e3b\u673a\u914d\u7f6e\u8f6c\u6362\u4e3a\u6a21\u677f\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \u652f\u6301\u5c06\u914d\u7f6e\u8f6c\u6362\u4e3a\u6a21\u677f\u3002\u53ea\u6709\u8fd0\u884c\u4e2d/\u5173\u95ed\u72b6\u6001\u4e0b\u7684\u4e91\u4e3b\u673a\u652f\u6301\u8f6c\u5316\u3002

              2. \u586b\u5199\u65b0\u6a21\u677f\u7684\u540d\u79f0\uff0c\u63d0\u793a\u539f\u59cb\u4e91\u4e3b\u673a\u5c06\u4f1a\u4fdd\u7559\u5e76\u4e14\u53ef\u7528\u3002\u8f6c\u6362\u6210\u529f\u540e\uff0c\u5c06\u4f1a\u5728\u6a21\u677f\u5217\u8868\u65b0\u589e\u4e00\u6761\u6570\u636e\u3002

              "},{"location":"admin/virtnest/template/tep.html#_5","title":"\u6a21\u677f\u8be6\u60c5","text":"

              \u6210\u529f\u521b\u5efa\u51fa\u6765\u4e00\u4e2a\u6a21\u677f\u540e\uff0c\u70b9\u51fb\u6a21\u677f\u540d\u79f0\uff0c\u53ef\u4ee5\u67e5\u770b\u4e91\u4e3b\u673a\u8be6\u60c5\uff0c\u5305\u62ec\u57fa\u672c\u4fe1\u606f\u3001GPU \u4fe1\u606f\u3001\u5b58\u50a8\u3001\u7f51\u7edc\u7b49\u3002\u5982\u679c\u9700\u8981\u5feb\u901f\u57fa\u4e8e\u8be5\u6a21\u677f\u90e8\u7f72\u65b0\u7684\u4e91\u4e3b\u673a\uff0c\u53ea\u9700\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa\u4e91\u4e3b\u673a \u6309\u94ae\u5373\u53ef\u4fbf\u6377\u64cd\u4f5c\u3002

              "},{"location":"admin/virtnest/vm/auto-migrate.html","title":"\u4e91\u4e3b\u673a\u81ea\u52a8\u6f02\u79fb","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5f53\u96c6\u7fa4\u5185\u67d0\u4e2a\u8282\u70b9\u56e0\u4e3a\u65ad\u7535\u6216\u7f51\u7edc\u6545\u969c\uff0c\u5bfc\u81f4\u8be5\u8282\u70b9\u4e0a\u7684\u4e91\u4e3b\u673a\u65e0\u6cd5\u8bbf\u95ee\u65f6\uff0c \u5982\u4f55\u5c06\u6b63\u5728\u8fd0\u884c\u7684\u4e91\u4e3b\u673a\u65e0\u7f1d\u8fc1\u79fb\u5230\u5176\u4ed6\u7684\u8282\u70b9\u4e0a\uff0c\u540c\u65f6\u4fdd\u8bc1\u4e1a\u52a1\u7684\u8fde\u7eed\u6027\u548c\u6570\u636e\u7684\u5b89\u5168\u6027\u3002

              \u4e0e\u5b9e\u65f6\u8fc1\u79fb\u76f8\u6bd4\uff0c\u81ea\u52a8\u6f02\u79fb\u4e0d\u9700\u8981\u60a8\u5728\u754c\u9762\u4e2d\u4e3b\u52a8\u64cd\u4f5c\uff0c\u800c\u662f\u7cfb\u7edf\u81ea\u52a8\u89e6\u53d1\u8fc1\u79fb\u8fc7\u7a0b\u3002

              "},{"location":"admin/virtnest/vm/auto-migrate.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5b9e\u73b0\u81ea\u52a8\u6f02\u79fb\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u4e91\u4e3b\u673a\u672a\u8fdb\u884c\u78c1\u76d8\u843d\u76d8\u64cd\u4f5c\uff0c\u6216\u4f7f\u7528 Rook-Ceph\u3001HwameiStor HA \u6a21\u5f0f\u4f5c\u4e3a\u5b58\u50a8\u7cfb\u7edf
              • \u8282\u70b9\u5931\u8054\u65f6\u95f4\u8d85\u8fc7\u4e94\u5206\u949f
              • \u786e\u4fdd\u96c6\u7fa4\u5185\u81f3\u5c11\u6709\u4e24\u4e2a\u8282\u70b9\u53ef\u4f9b\u4f7f\u7528\uff0c\u5e76\u4e14\u4e91\u4e3b\u673a\u6ca1\u6709\u6307\u5b9a\u8c03\u5ea6\u8282\u70b9
              • \u4e91\u4e3b\u673a\u7684 launcher pod \u5df2\u88ab\u5220\u9664
              "},{"location":"admin/virtnest/vm/auto-migrate.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u68c0\u67e5\u4e91\u4e3b\u673a launcher pod \u72b6\u6001\uff1a

                kubectl get pod\n

                \u67e5\u770b launcher pod \u662f\u5426\u5904\u4e8e Terminating \u72b6\u6001\u3002

              2. \u5f3a\u5236\u5220\u9664 launcher pod\uff1a

                \u5982\u679c launcher pod \u72b6\u6001\u4e3a Terminating\uff0c\u53ef\u4ee5\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5f3a\u5236\u5220\u9664\uff1a

                kubectl delete <launcher pod> --force\n

                \u66ff\u6362 <launcher pod> \u4e3a\u4f60\u7684 launcher pod \u540d\u79f0\u3002

              3. \u7b49\u5f85\u91cd\u65b0\u521b\u5efa\u5e76\u68c0\u67e5\u72b6\u6001\uff1a

                \u5220\u9664\u540e\uff0c\u7cfb\u7edf\u5c06\u81ea\u52a8\u91cd\u65b0\u521b\u5efa launcher pod\u3002 \u7b49\u5f85\u5176\u72b6\u6001\u53d8\u4e3a running\uff0c\u7136\u540e\u5237\u65b0\u4e91\u4e3b\u673a\u5217\u8868\uff0c\u89c2\u5bdf\u4e91\u4e3b\u673a\u662f\u5426\u6210\u529f\u8fc1\u79fb\u5230\u65b0\u8282\u70b9\u3002

              "},{"location":"admin/virtnest/vm/auto-migrate.html#_4","title":"\u6ce8\u610f\u4e8b\u9879","text":"

              \u5982\u679c\u4f7f\u7528 rook-ceph \u4f5c\u4e3a\u5b58\u50a8\uff0c\u9700\u8981\u914d\u7f6e\u4e3a ReadWriteOnce \u6a21\u5f0f\uff1a

              1. \u5f3a\u5236\u5220\u9664 pod \u540e\uff0c\u9700\u8981\u7b49\u5f85\u5927\u7ea6\u516d\u5206\u949f\u4ee5\u8ba9 launcher pod \u542f\u52a8\uff0c\u6216\u8005\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u7acb\u5373\u542f\u52a8 pod\uff1a

                kubectl get pv | grep <vm name>\nkubectl get VolumeAttachment | grep <pv name>\n

                \u66ff\u6362 <vm name> \u548c <pv name> \u4e3a\u4f60\u7684\u4e91\u4e3b\u673a\u540d\u79f0\u548c\u6301\u4e45\u5377\u540d\u79f0\u3002

              2. \u7136\u540e\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u5220\u9664\u5bf9\u5e94\u7684 VolumeAttachment\uff1a

                kubectl delete VolumeAttachment <vm>\n

                \u66ff\u6362 <vm> \u4e3a\u4f60\u7684\u4e91\u4e3b\u673a\u540d\u79f0\u3002

              "},{"location":"admin/virtnest/vm/clone.html","title":"\u514b\u9686\u4e91\u4e3b\u673a","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u514b\u9686\u4e00\u53f0\u65b0\u7684\u4e91\u4e3b\u673a\u3002

              \u7528\u6237\u53ef\u4ee5\u514b\u9686\u4e00\u53f0\u65b0\u7684\u4e91\u4e3b\u673a\uff0c\u514b\u9686\u540e\u7684\u4e91\u4e3b\u673a\u5c06\u5177\u6709\u4e0e\u539f\u59cb\u4e91\u4e3b\u673a\u76f8\u540c\u7684\u64cd\u4f5c\u7cfb\u7edf\u548c\u7cfb\u7edf\u914d\u7f6e\uff0c\u80fd\u591f\u5b9e\u73b0\u5feb\u901f\u90e8\u7f72\u548c\u6269\u5c55\uff0c\u5feb\u901f\u521b\u5efa\u76f8\u4f3c\u914d\u7f6e\u7684\u65b0\u4e91\u4e3b\u673a\uff0c\u800c\u65e0\u9700\u4ece\u5934\u5f00\u59cb\u5b89\u88c5\u3002

              "},{"location":"admin/virtnest/vm/clone.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u4f7f\u7528\u514b\u9686\u529f\u80fd\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff08\u548c\u5feb\u7167\u529f\u80fd\u7684\u524d\u63d0\u6761\u4ef6\u4e00\u81f4\uff09\uff1a

              • \u53ea\u6709\u975e\u9519\u8bef\u72b6\u6001\u4e0b\u7684\u4e91\u4e3b\u673a\u624d\u80fd\u4f7f\u7528\u514b\u9686\u529f\u80fd\u3002
              • \u5b89\u88c5 Snapshot CRDs\u3001Snapshot Controller\u3001CSI Driver\u3002 \u5177\u4f53\u5b89\u88c5\u6b65\u9aa4\u53ef\u53c2\u8003 CSI Snapshotter\u3002
              • \u7b49\u5f85 snapshot-controller \u7ec4\u4ef6\u51c6\u5907\u5c31\u7eea, \u8be5\u7ec4\u4ef6\u4f1a\u76d1\u63a7 VolumeSnapshot \u548c VolumeSnapshotContent \u76f8\u5173\u4e8b\u4ef6\uff0c\u5e76\u89e6\u53d1\u76f8\u5173\u64cd\u4f5c\u3002
              • \u7b49\u5f85 CSI Driver \u51c6\u5907\u5c31\u7eea, \u786e\u4fdd csi-snapshotter sidecar \u8dd1\u5728 CSI Driver \u91cc\uff0ccsi-snapshotter sidecar \u4f1a\u76d1\u63a7 VolumeSnapshotContent \u76f8\u5173\u4e8b\u4ef6\uff0c\u5e76\u89e6\u53d1\u76f8\u5173\u64cd\u4f5c\u3002
                • \u5982\u5b58\u50a8\u662f Rook-Ceph\uff0c\u53ef\u53c2\u8003 ceph-csi-snapshot
                • \u5982\u5b58\u50a8\u662f HwameiStor\uff0c\u53ef\u53c2\u8003 huameistor-snapshot
              "},{"location":"admin/virtnest/vm/clone.html#_3","title":"\u514b\u9686\u4e91\u4e3b\u673a","text":"
              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u975e\u9519\u8bef\u72b6\u6001\u4e0b\u7684\u4e91\u4e3b\u673a\u6267\u884c\u5feb\u7167\u64cd\u4f5c\u3002

              2. \u5f39\u51fa\u5f39\u6846\uff0c\u9700\u8981\u586b\u5199\u514b\u9686\u65b0\u7684\u4e91\u4e3b\u673a\u7684\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u514b\u9686\u64cd\u4f5c\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u65f6\u95f4\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u4e91\u4e3b\u673a\u7684\u5927\u5c0f\u548c\u5b58\u50a8\u6027\u80fd\u3002

              3. \u514b\u9686\u6210\u529f\u540e\u53ef\u4ee5\u5728\u4e91\u4e3b\u673a\u5217\u8868\u5185\u67e5\u770b\u5230\u65b0\u7684\u4e91\u4e3b\u673a\uff0c\u65b0\u521b\u5efa\u51fa\u6765\u7684\u4e91\u4e3b\u673a\u5904\u4e8e\u5173\u673a\u72b6\u6001\uff0c\u82e5\u9700\u8981\u5f00\u673a\u9700\u8981\u624b\u52a8\u64cd\u4f5c\u3002

              4. \u514b\u9686\u524d\u5efa\u8bae\u5bf9\u539f\u6709\u4e91\u4e3b\u673a\u8fdb\u884c\u5feb\u7167\uff0c\u5982\u679c\u514b\u9686\u8fc7\u7a0b\u4e2d\u9047\u5230\u95ee\u9898\uff0c\u8bf7\u68c0\u67e5\u5148\u51b3\u6761\u4ef6\u662f\u5426\u6ee1\u8db3\uff0c\u5e76\u5c1d\u8bd5\u91cd\u65b0\u6267\u884c\u514b\u9686\u64cd\u4f5c\u3002

              "},{"location":"admin/virtnest/vm/create-secret.html","title":"\u521b\u5efa\u5bc6\u94a5","text":"

              \u5f53\u521b\u5efa\u4e91\u4e3b\u673a\u4f7f\u7528\u5bf9\u8c61\u5b58\u50a8\uff08S3\uff09\u4f5c\u4e3a\u955c\u50cf\u6765\u6e90\u65f6\uff0c\u6709\u65f6\u5019\u9700\u8981\u586b\u5199\u5bc6\u94a5\u6765\u83b7\u53d6\u901a\u8fc7 S3 \u7684\u9a8c\u8bc1\u3002\u4ee5\u4e0b\u5c06\u4ecb\u7ecd\u5982\u4f55\u521b\u5efa\u7b26\u5408\u4e91\u4e3b\u673a\u8981\u6c42\u7684\u5bc6\u94a5\u3002

              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u96c6\u7fa4\u5217\u8868 \uff0c\u8fdb\u5165\u4e91\u4e3b\u673a\u6240\u5728\u96c6\u7fa4\u8be6\u60c5\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 \uff0c\u9009\u62e9 \u5bc6\u94a5 \uff0c\u70b9\u51fb \u521b\u5efa\u5bc6\u94a5 \u3002

              2. \u8fdb\u5165\u521b\u5efa\u9875\u9762\uff0c\u586b\u5199\u5bc6\u94a5\u540d\u79f0\uff0c\u9009\u62e9\u548c\u4e91\u4e3b\u673a\u76f8\u540c\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6ce8\u610f\u9700\u8981\u9009\u62e9 \u9ed8\u8ba4\uff08Opaque\uff09 \u7c7b\u578b\u3002\u5bc6\u94a5\u6570\u636e\u9700\u8981\u9075\u5faa\u4ee5\u4e0b\u539f\u5219

                • accessKeyId: \u9700\u8981\u4ee5 Base64 \u7f16\u7801\u65b9\u5f0f\u8868\u793a\u7684\u6570\u636e
                • secretKey: \u9700\u8981\u4ee5 Base64 \u7f16\u7801\u65b9\u5f0f\u8868\u793a\u7684\u6570\u636e
              3. \u521b\u5efa\u6210\u529f\u540e\u53ef\u4ee5\u5728\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\u4f7f\u7528\u6240\u9700\u5bc6\u94a5\uff0c\u6700\u540e\u901a\u8fc7\u9a8c\u8bc1\u3002

              "},{"location":"admin/virtnest/vm/cross-cluster-migrate.html","title":"\u4e91\u4e3b\u673a\u8de8\u96c6\u7fa4\u8fc1\u79fb","text":"

              \u672c\u529f\u80fd\u6682\u672a\u505a UI \u754c\u9762\u80fd\u529b\uff0c\u8bf7\u53c2\u8003\u6587\u6863\u7684\u64cd\u4f5c\u6b65\u9aa4\u6267\u884c\u3002

              "},{"location":"admin/virtnest/vm/cross-cluster-migrate.html#_2","title":"\u4f7f\u7528\u573a\u666f","text":"
              • \u5f53\u539f\u96c6\u7fa4\u53d1\u751f\u6545\u969c\u6216\u6027\u80fd\u4e0b\u964d\u5bfc\u81f4\u8be5\u96c6\u7fa4\u4e0a\u7684\u4e91\u4e3b\u673a\u65e0\u6cd5\u8bbf\u95ee\u65f6\uff0c\u5c06\u4e91\u4e3b\u673a\u8fc1\u79fb\u5230\u5176\u4ed6\u7684\u96c6\u7fa4\u4e0a\u3002
              • \u9700\u8981\u5bf9\u96c6\u7fa4\u8fdb\u884c\u8ba1\u5212\u5185\u7684\u7ef4\u62a4\u6216\u5347\u7ea7\u65f6\uff0c\u5c06\u4e91\u4e3b\u673a\u8fc1\u79fb\u5230\u5176\u4ed6\u7684\u96c6\u7fa4\u4e0a\u3002
              • \u5f53\u7279\u5b9a\u5e94\u7528\u7684\u6027\u80fd\u9700\u6c42\u53d8\u5316\uff0c\u9700\u8981\u8c03\u6574\u8d44\u6e90\u5206\u914d\u65f6\uff0c\u8fc1\u79fb\u4e91\u4e3b\u673a\u5230\u5176\u4ed6\u7684\u96c6\u7fa4\u4e0a\u4ee5\u5339\u914d\u66f4\u5408\u9002\u7684\u8d44\u6e90\u914d\u7f6e\u3002
              "},{"location":"admin/virtnest/vm/cross-cluster-migrate.html#_3","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5b9e\u73b0\u4e91\u4e3b\u673a\u8de8\u96c6\u7fa4\u8fc1\u79fb\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u96c6\u7fa4\u7f51\u7edc\u4e92\u901a\uff1a\u786e\u4fdd\u539f\u6709\u96c6\u7fa4\u4e0e\u76ee\u6807\u8fc1\u79fb\u96c6\u7fa4\u4e4b\u95f4\u7684\u7f51\u7edc\u662f\u4e92\u901a\u7684
              • \u76f8\u540c\u5b58\u50a8\u7c7b\u578b\uff1a\u76ee\u6807\u8fc1\u79fb\u96c6\u7fa4\u9700\u652f\u6301\u4e0e\u539f\u6709\u96c6\u7fa4\u76f8\u540c\u7684\u5b58\u50a8\u7c7b\u578b\uff08\u4f8b\u5982\uff0c\u5982\u679c\u5bfc\u51fa\u96c6\u7fa4\u4f7f\u7528 rook-ceph-block \u7c7b\u578b\u7684 StorageClass\uff0c\u5219\u5bfc\u5165\u96c6\u7fa4\u4e5f\u5fc5\u987b\u652f\u6301\u6b64\u7c7b\u578b\uff09\u3002
              • \u5728\u539f\u6709\u96c6\u7fa4\u7684 KubeVirt \u4e2d\u5f00\u542f VMExport Feature Gate\u3002
              "},{"location":"admin/virtnest/vm/cross-cluster-migrate.html#vmexport-feature-gate","title":"\u5f00\u542f VMExport Feature Gate","text":"

              \u6fc0\u6d3b VMExport Feature Gate\uff0c\u5728\u539f\u6709\u96c6\u7fa4\u5185\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c \u53ef\u53c2\u8003How to activate a feature gate

              kubectl edit kubevirt kubevirt -n virtnest-system\n

              \u8fd9\u6761\u547d\u4ee4\u5c06\u4fee\u6539 featureGates \uff0c\u589e\u52a0 VMExport \u3002

              apiVersion: kubevirt.io/v1\nkind: KubeVirt\nmetadata:\n  name: kubevirt\n  namespace: virtnest-system\nspec:\n  configuration:\n    developerConfiguration:\n      featureGates:\n        - DataVolumes\n        - LiveMigration\n        - VMExport\n
              "},{"location":"admin/virtnest/vm/cross-cluster-migrate.html#ingress","title":"\u914d\u7f6e\u539f\u6709\u96c6\u7fa4\u7684 Ingress","text":"

              \u4ee5 Nginx Ingress \u4e3a\u4f8b\uff0c\u914d\u7f6e Ingress \u4ee5\u6307\u5411 virt-exportproxy Service\uff1a

              apiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: ingress-vm-export\n  namespace: virtnest-system\nspec:\n  tls:\n    - hosts:\n        - upgrade-test.com\n      secretName: nginx-tls\n  rules:\n    - host: upgrade-test.com\n      http:\n        paths:\n          - path: /\n            pathType: Prefix\n            backend:\n              service:\n                name: virt-exportproxy\n                port:\n                  number: 8443\n  ingressClassName: nginx\n
              "},{"location":"admin/virtnest/vm/cross-cluster-migrate.html#_4","title":"\u8fc1\u79fb\u6b65\u9aa4","text":"
              1. \u521b\u5efa VirtualMachineExport CR

                • \u5982\u679c \u4e91\u4e3b\u673a\u5173\u673a\u72b6\u6001 \u4e0b\u8fdb\u884c\u8fc1\u79fb\uff08\u51b7\u8fc1\u79fb\uff09\uff1a

                  apiVersion: v1\nkind: Secret\nmetadata:\n  name: example-token # \u5bfc\u51fa\u4e91\u4e3b\u673a\u6240\u7528 token\n  namespace: default # \u4e91\u4e3b\u673a\u6240\u5728\u547d\u540d\u7a7a\u95f4\nstringData:\n  token: 1234567890ab # \u5bfc\u51fa\u4f7f\u7528\u7684 token,\u53ef\u4fee\u6539\n\n---\napiVersion: export.kubevirt.io/v1alpha1\nkind: VirtualMachineExport\nmetadata:\n  name: example-export # \u5bfc\u51fa\u540d\u79f0, \u53ef\u81ea\u884c\u4fee\u6539\n  namespace: default # \u4e91\u4e3b\u673a\u6240\u5728\u547d\u540d\u7a7a\u95f4\nspec:\n  tokenSecretRef: example-token # \u548c\u4e0a\u9762\u521b\u5efa\u7684token\u540d\u79f0\u4fdd\u6301\u4e00\u81f4\n  source:\n    apiGroup: \"kubevirt.io\"\n    kind: VirtualMachine\n    name: testvm # \u4e91\u4e3b\u673a\u540d\u79f0\n
                • \u5982\u679c\u8981\u5728 \u4e91\u4e3b\u673a\u4e0d\u5173\u673a \u7684\u72b6\u6001\u4e0b\uff0c\u4f7f\u7528\u4e91\u4e3b\u673a\u5feb\u7167\u8fdb\u884c\u8fc1\u79fb\uff08\u70ed\u8fc1\u79fb\uff09\uff1a

                  apiVersion: v1\nkind: Secret\nmetadata:\n  name: example-token # \u5bfc\u51fa\u4e91\u4e3b\u673a\u6240\u7528 token\n  namespace: default # \u4e91\u4e3b\u673a\u6240\u5728\u547d\u540d\u7a7a\u95f4\nstringData:\n  token: 1234567890ab # \u5bfc\u51fa\u4f7f\u7528\u7684 token ,\u53ef\u4fee\u6539\n\n---\napiVersion: export.kubevirt.io/v1alpha1\nkind: VirtualMachineExport\nmetadata:\n  name: export-snapshot # \u5bfc\u51fa\u540d\u79f0, \u53ef\u81ea\u884c\u4fee\u6539\n  namespace: default # \u4e91\u4e3b\u673a\u6240\u5728\u547d\u540d\u7a7a\u95f4\nspec:\n  tokenSecretRef: export-token # \u548c\u4e0a\u9762\u521b\u5efa\u7684token\u540d\u79f0\u4fdd\u6301\u4e00\u81f4\n  source:\n    apiGroup: \"snapshot.kubevirt.io\"\n    kind: VirtualMachineSnapshot\n    name: export-snap-202407191524 # \u5bf9\u5e94\u7684\u4e91\u4e3b\u673a\u5feb\u7167\u540d\u79f0\n
              2. \u68c0\u67e5 VirtualMachineExport \u662f\u5426\u51c6\u5907\u5c31\u7eea\uff1a

                # \u8fd9\u91cc\u7684 example-export \u9700\u8981\u66ff\u6362\u4e3a\u521b\u5efa\u7684 VirtualMachineExport \u540d\u79f0\nkubectl get VirtualMachineExport example-export -n default\n\nNAME             SOURCEKIND       SOURCENAME   PHASE\nexample-export   VirtualMachine   testvm       Ready\n
              3. \u5f53 VirtualMachineExport \u51c6\u5907\u5c31\u7eea\u540e\uff0c\u5bfc\u51fa\u4e91\u4e3b\u673a YAML\u3002

                • \u5982\u679c\u5df2\u5b89\u88c5 virtctl \uff0c\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5bfc\u51fa\u4e91\u4e3b\u673a\u7684 YAML\uff1a

                  # \u81ea\u884c\u5c06 example-export\u66ff\u6362\u4e3a\u521b\u5efa\u7684 VirtualMachineExport \u540d\u79f0\n# \u81ea\u884c\u901a\u8fc7 -n \u6307\u5b9a\u547d\u540d\u7a7a\u95f4\nvirtctl vmexport download example-export --manifest --include-secret --output=manifest.yaml\n
                • \u5982\u679c\u6ca1\u6709\u5b89\u88c5 virtctl \uff0c\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5bfc\u51fa\u4e91\u4e3b\u673a YAML\uff1a

                  # \u81ea\u884c\u66ff\u6362 example-export \u66ff\u6362\u4e3a\u521b\u5efa\u7684 VirtualMachineExport \u540d\u79f0 \u548c\u547d\u540d\u7a7a\u95f4\nmanifesturl=$(kubectl get VirtualMachineExport example-export -n default -o=jsonpath='{.status.links.internal.manifests[0].url}')\nsecreturl=$(kubectl get VirtualMachineExport example-export -n default -o=jsonpath='{.status.links.internal.manifests[1].url}')\n# \u81ea\u884c\u66ff\u6362 secert \u540d\u79f0\u548c\u547d\u540d\u7a7a\u95f4\ntoken=$(kubectl get secret example-token -n default -o=jsonpath='{.data.token}' | base64 -d)\n\ncurl -H \"Accept: application/yaml\" -H \"x-kubevirt-export-token: $token\"  --insecure  $secreturl > manifest.yaml\ncurl -H \"Accept: application/yaml\" -H \"x-kubevirt-export-token: $token\"  --insecure  $manifesturl >> manifest.yaml\n
              4. \u5bfc\u5165\u4e91\u4e3b\u673a

                \u5c06\u5bfc\u51fa\u7684 manifest.yaml \u590d\u5236\u5230\u76ee\u6807\u8fc1\u79fb\u96c6\u7fa4\u5e76\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff08\u5982\u679c\u547d\u540d\u7a7a\u95f4\u4e0d\u5b58\u5728\u5219\u9700\u8981\u63d0\u524d\u521b\u5efa\uff09\uff1a

                kubectl apply -f manifest.yaml\n
                \u521b\u5efa\u6210\u529f\u540e\uff0c\u91cd\u542f\u4e91\u4e3b\u673a\uff0c\u4e91\u4e3b\u673a\u6210\u529f\u8fd0\u884c\u540e\uff0c\u5728\u539f\u6709\u96c6\u7fa4\u5185\u5220\u9664\u539f\u4e91\u4e3b\u673a\uff08\u4e91\u4e3b\u673a\u672a\u542f\u52a8\u6210\u529f\u65f6\uff0c\u8bf7\u52ff\u5220\u9664\u539f\u4e91\u4e3b\u673a\uff09\u3002

              "},{"location":"admin/virtnest/vm/health-check.html","title":"\u5065\u5eb7\u68c0\u67e5","text":"

              \u5f53\u914d\u7f6e\u4e91\u4e3b\u673a\u7684\u5b58\u6d3b\uff08Liveness\uff09\u548c\u5c31\u7eea\uff08Readiness\uff09\u63a2\u9488\u65f6\uff0c\u4e0e Kubernetes \u7684\u914d\u7f6e\u8fc7\u7a0b\u76f8\u4f3c\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7 YAML \u4e3a\u4e91\u4e3b\u673a\u914d\u7f6e\u5065\u5eb7\u68c0\u67e5\u53c2\u6570\u3002

              \u4f46\u662f\u9700\u8981\u6ce8\u610f\uff1a\u9700\u8981\u5728\u4e91\u4e3b\u673a\u521b\u5efa\u6210\u529f\u5e76\u4e14\u5904\u4e8e\u5173\u673a\u72b6\u6001\u4e0b\uff0c\u4fee\u6539 YAML \u8fdb\u884c\u914d\u7f6e\u3002

              "},{"location":"admin/virtnest/vm/health-check.html#http-liveness-probe","title":"\u914d\u7f6e HTTP Liveness Probe","text":"
              1. \u5728 spec.template.spec \u4e2d\u914d\u7f6e livenessProbe.httpGet\u3002
              2. \u4fee\u6539 cloudInitNoCloud \u4ee5\u542f\u52a8\u4e00\u4e2a HTTP \u670d\u52a1\u5668\u3002

                \u70b9\u51fb\u67e5\u770b YAML \u793a\u4f8b\u914d\u7f6e
                apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  annotations:\n    kubevirt.io/latest-observed-api-version: v1\n    kubevirt.io/storage-observed-api-version: v1\n    virtnest.io/alias-name: ''\n    virtnest.io/image-secret: ''\n    virtnest.io/image-source: docker\n    virtnest.io/os-image: release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1\n  creationTimestamp: '2024-10-15T02:39:45Z'\n  finalizers:\n    - kubevirt.io/virtualMachineControllerFinalize\n  generation: 1\n  labels:\n    virtnest.io/os-family: Ubuntu\n    virtnest.io/os-version: '22.04'\n  name: test-probe\n  namespace: amamba-team\n  resourceVersion: '254032135'\n  uid: 6d92779d-7415-4721-8c7b-a2dde163d758\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        creationTimestamp: null\n        name: test-probe-rootdisk\n        namespace: amamba-team\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 10Gi\n          storageClassName: hwameistor-storage-lvm-hdd\n        source:\n          registry:\n            url: >-\n          docker://release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1\n  runStrategy: Halted\n  template:\n    metadata:\n      creationTimestamp: null\n    spec:\n      architecture: amd64\n      domain:\n        cpu:\n          cores: 1\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n            - bootOrder: 1\n              disk:\n                bus: virtio\n              name: rootdisk\n            - disk:\n                bus: virtio\n              name: cloudinitdisk\n          interfaces:\n            - masquerade: {}\n              name: default\n        machine:\n          type: q35\n        memory:\n          guest: 2Gi\n        resources:\n          requests:\n            memory: 2Gi\n      networks:\n        - name: default\n          pod: {}\n      livenessProbe:\n        initialDelaySeconds: 120\n        periodSeconds: 20\n        httpGet:\n          port: 1500\n        timeoutSeconds: 10\n      volumes:\n        - dataVolume:\n            name: test-probe-rootdisk\n          name: rootdisk\n        - cloudInitNoCloud:\n            userData: |\n              #cloud-config\n              ssh_pwauth: true\n              disable_root: false\n              chpasswd: {\"list\": \"root:dangerous\", expire: False}\n              runcmd:\n                - sed -i \"/#\\?PermitRootLogin/s/^.*$/PermitRootLogin yes/g\" /etc/ssh/sshd_config\n                - systemctl restart ssh.service\n                - dhclient -r && dhclient\n                - apt-get update && apt-get install -y ncat\n                - [\"systemd-run\", \"--unit=httpserver\", \"ncat\", \"-klp\", \"1500\", \"-e\", '/usr/bin/echo -e HTTP/1.1 200 OK\\nContent-Length: 12\\n\\nHello World!']\n          name: cloudinitdisk\n
              3. \u6839\u636e\u64cd\u4f5c\u7cfb\u7edf\uff08\u5982 Ubuntu/Debian \u6216 CentOS\uff09\uff0cuserData \u7684\u914d\u7f6e\u53ef\u80fd\u6709\u6240\u4e0d\u540c\u3002\u4e3b\u8981\u533a\u522b\uff1a

                • \u5305\u7ba1\u7406\u5668\uff1a

                  Ubuntu/Debian \u4f7f\u7528 apt-get \u4f5c\u4e3a\u5305\u7ba1\u7406\u5668\u3002 CentOS \u4f7f\u7528 yum \u4f5c\u4e3a\u5305\u7ba1\u7406\u5668\u3002

                • SSH \u670d\u52a1\u91cd\u542f\u547d\u4ee4\uff1a

                  Ubuntu/Debian \u4f7f\u7528 systemctl restart ssh.service\u3002 CentOS \u4f7f\u7528 systemctl restart sshd.service\uff08\u6ce8\u610f CentOS 7 \u53ca\u4e4b\u524d\u7248\u672c\u4f7f\u7528 service sshd restart\uff09\u3002

                • \u5b89\u88c5\u7684\u8f6f\u4ef6\u5305\uff1a

                  Ubuntu/Debian \u5b89\u88c5 ncat\u3002 CentOS \u5b89\u88c5 nmap-ncat\uff08\u56e0\u4e3a ncat \u5728 CentOS \u7684\u9ed8\u8ba4\u4ed3\u5e93\u4e2d\u53ef\u80fd\u4e0d\u53ef\u7528\uff09\u3002

              "},{"location":"admin/virtnest/vm/health-check.html#tcp-liveness-probe","title":"\u914d\u7f6e TCP Liveness Probe","text":"

              \u5728 spec.template.spec \u4e2d\u914d\u7f6e livenessProbe.tcpSocket\u3002

              \u70b9\u51fb\u67e5\u770b YAML \u793a\u4f8b\u914d\u7f6e
              apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  annotations:\n    kubevirt.io/latest-observed-api-version: v1\n    kubevirt.io/storage-observed-api-version: v1\n    virtnest.io/alias-name: ''\n    virtnest.io/image-secret: ''\n    virtnest.io/image-source: docker\n    virtnest.io/os-image: release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1\n  creationTimestamp: '2024-10-15T02:39:45Z'\n  finalizers:\n    - kubevirt.io/virtualMachineControllerFinalize\n  generation: 1\n  labels:\n    virtnest.io/os-family: Ubuntu\n    virtnest.io/os-version: '22.04'\n  name: test-probe\n  namespace: amamba-team\n  resourceVersion: '254032135'\n  uid: 6d92779d-7415-4721-8c7b-a2dde163d758\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        creationTimestamp: null\n        name: test-probe-rootdisk\n        namespace: amamba-team\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 10Gi\n          storageClassName: hwameistor-storage-lvm-hdd\n        source:\n          registry:\n            url: >-\n          docker://release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1\n  runStrategy: Halted\n  template:\n    metadata:\n      creationTimestamp: null\n    spec:\n      architecture: amd64\n      domain:\n        cpu:\n          cores: 1\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n            - bootOrder: 1\n              disk:\n                bus: virtio\n              name: rootdisk\n            - disk:\n                bus: virtio\n              name: cloudinitdisk\n          interfaces:\n            - masquerade: {}\n              name: default\n        machine:\n          type: q35\n        memory:\n          guest: 2Gi\n        resources:\n          requests:\n            memory: 2Gi\n      networks:\n        - name: default\n          pod: {}\n      livenessProbe:\n        initialDelaySeconds: 120\n        periodSeconds: 20\n        tcpSocket:\n          port: 1500\n        timeoutSeconds: 10\n      volumes:\n        - dataVolume:\n            name: test-probe-rootdisk\n          name: rootdisk\n        - cloudInitNoCloud:\n            userData: |\n              #cloud-config\n              ssh_pwauth: true\n              disable_root: false\n              chpasswd: {\"list\": \"root:dangerous\", expire: False}\n              runcmd:\n                - sed -i \"/#\\?PermitRootLogin/s/^.*$/PermitRootLogin yes/g\" /etc/ssh/sshd_config\n                - systemctl restart ssh.service\n                - dhclient -r && dhclient\n                - apt-get update && apt-get install -y ncat\n                - [\"systemd-run\", \"--unit=httpserver\", \"ncat\", \"-klp\", \"1500\", \"-e\", '/usr/bin/echo -e HTTP/1.1 200 OK\\nContent-Length: 12\\n\\nHello World!']\n          name: cloudinitdisk\n
              "},{"location":"admin/virtnest/vm/health-check.html#readiness-probes","title":"\u914d\u7f6e Readiness Probes","text":"

              \u5728 spec.template.spec \u4e2d\u914d\u7f6e readiness\u3002

              \u70b9\u51fb\u67e5\u770b YAML \u793a\u4f8b\u914d\u7f6e
              apiVersion: kubevirt.io/v1\nkind: VirtualMachine\nmetadata:\n  annotations:\n    kubevirt.io/latest-observed-api-version: v1\n    kubevirt.io/storage-observed-api-version: v1\n    virtnest.io/alias-name: ''\n    virtnest.io/image-secret: ''\n    virtnest.io/image-source: docker\n    virtnest.io/os-image: release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1\n  creationTimestamp: '2024-10-15T02:39:45Z'\n  finalizers:\n    - kubevirt.io/virtualMachineControllerFinalize\n  generation: 1\n  labels:\n    virtnest.io/os-family: Ubuntu\n    virtnest.io/os-version: '22.04'\n  name: test-probe\n  namespace: amamba-team\n  resourceVersion: '254032135'\n  uid: 6d92779d-7415-4721-8c7b-a2dde163d758\nspec:\n  dataVolumeTemplates:\n    - metadata:\n        creationTimestamp: null\n        name: test-probe-rootdisk\n        namespace: amamba-team\n      spec:\n        pvc:\n          accessModes:\n            - ReadWriteOnce\n          resources:\n            requests:\n              storage: 10Gi\n          storageClassName: hwameistor-storage-lvm-hdd\n        source:\n          registry:\n            url: >-\n          docker://release-ci.daocloud.io/virtnest/system-images/ubuntu-22.04-x86_64:v1\n  runStrategy: Halted\n  template:\n    metadata:\n      creationTimestamp: null\n    spec:\n      architecture: amd64\n      domain:\n        cpu:\n          cores: 1\n          sockets: 1\n          threads: 1\n        devices:\n          disks:\n            - bootOrder: 1\n              disk:\n                bus: virtio\n              name: rootdisk\n            - disk:\n                bus: virtio\n              name: cloudinitdisk\n          interfaces:\n            - masquerade: {}\n              name: default\n        machine:\n          type: q35\n        memory:\n          guest: 2Gi\n        resources:\n          requests:\n            memory: 2Gi\n      networks:\n        - name: default\n          pod: {}\n      readiness:\n        initialDelaySeconds: 120\n        periodSeconds: 20\n        httpGet:\n          port: 1500\n        timeoutSeconds: 10\n      volumes:\n        - dataVolume:\n            name: test-probe-rootdisk\n          name: rootdisk\n        - cloudInitNoCloud:\n            userData: |\n              #cloud-config\n              ssh_pwauth: true\n              disable_root: false\n              chpasswd: {\"list\": \"root:dangerous\", expire: False}\n              runcmd:\n                - sed -i \"/#\\?PermitRootLogin/s/^.*$/PermitRootLogin yes/g\" /etc/ssh/sshd_config\n                - systemctl restart ssh.service\n                - dhclient -r && dhclient\n                - apt-get update && apt-get install -y ncat\n                - [\"systemd-run\", \"--unit=httpserver\", \"ncat\", \"-klp\", \"1500\", \"-e\", '/usr/bin/echo -e HTTP/1.1 200 OK\\nContent-Length: 12\\n\\nHello World!']\n          name: cloudinitdisk\n
              "},{"location":"admin/virtnest/vm/live-migration.html","title":"\u5b9e\u65f6\u8fc1\u79fb","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5c06\u4e91\u4e3b\u673a\u4ece\u4e00\u4e2a\u8282\u70b9\u79fb\u52a8\u5230\u53e6\u4e00\u4e2a\u8282\u70b9\u3002

              \u5f53\u8282\u70b9\u7ef4\u62a4\u6216\u8005\u5347\u7ea7\u65f6\uff0c\u7528\u6237\u53ef\u4ee5\u5c06\u6b63\u5728\u8fd0\u884c\u7684\u4e91\u4e3b\u673a\u65e0\u7f1d\u8fc1\u79fb\u5230\u5176\u4ed6\u7684\u8282\u70b9\u4e0a\uff0c\u540c\u65f6\u53ef\u4ee5\u4fdd\u8bc1\u4e1a\u52a1\u7684\u8fde\u7eed\u6027\u548c\u6570\u636e\u7684\u5b89\u5168\u6027\u3002

              "},{"location":"admin/virtnest/vm/live-migration.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u4f7f\u7528\u5b9e\u65f6\u8fc1\u79fb\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u4e91\u4e3b\u673a\u5fc5\u987b\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\u624d\u80fd\u8fdb\u884c\u5b9e\u65f6\u8fc1\u79fb\u3002
              • \u786e\u4fdd\u60a8\u7684 PVC \u8bbf\u95ee\u6a21\u5f0f\u4e3a ReadWriteMany\uff0c\u4ee5\u4fbf\u4f7f\u7528\u5b9e\u65f6\u8fc1\u79fb\u529f\u80fd\u3002
              • \u786e\u4fdd\u96c6\u7fa4\u5185\u81f3\u5c11\u6709\u4e24\u4e2a\u8282\u70b9\u53ef\u4f9b\u4f7f\u7528\u3002
              "},{"location":"admin/virtnest/vm/live-migration.html#_3","title":"\u5b9e\u65f6\u8fc1\u79fb","text":"
              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u8fd0\u884c\u72b6\u6001\u4e0b\u7684\u4e91\u4e3b\u673a\u8fdb\u884c\u8fc1\u79fb\u52a8\u4f5c\u3002\u76ee\u524d\u4e91\u4e3b\u673a\u6240\u5728\u8282\u70b9\u4e3a controller-node-3 \u3002

              2. \u5f39\u51fa\u5f39\u6846\uff0c\u63d0\u793a\u5728\u5b9e\u65f6\u8fc1\u79fb\u671f\u95f4\uff0c\u6b63\u5728\u8fd0\u884c\u7684\u4e91\u4e3b\u673a\u5b9e\u4f8b\u4f1a\u79fb\u52a8\u5230\u53e6\u4e00\u4e2a\u8282\u70b9\uff0c\u53ef\u4ee5\u9009\u62e9\u6307\u5b9a\u8282\u70b9\u8fc1\u79fb\uff0c\u4e5f\u53ef\u4ee5\u968f\u673a\u8fc1\u79fb\uff0c\u8bf7\u786e\u4fdd\u5176\u4ed6\u8282\u70b9\u8d44\u6e90\u5145\u8db3\u3002

              3. \u8fc1\u79fb\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\uff0c\u6210\u529f\u540e\u53ef\u4ee5\u5728\u4e91\u4e3b\u673a\u5217\u8868\u5185\u67e5\u770b\u8282\u70b9\u4fe1\u606f\uff0c\u6b64\u65f6\u8282\u70b9\u8fc1\u79fb\u5230 controller-node-1 \u3002

              "},{"location":"admin/virtnest/vm/migratiom.html","title":"\u96c6\u7fa4\u5185\u51b7\u8fc1\u79fb","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5728\u5173\u673a\u72b6\u6001\u4e0b\u5982\u4f55\u5c06\u4e91\u4e3b\u673a\u5728\u540c\u4e00\u96c6\u7fa4\u5185\u4ece\u4e00\u4e2a\u8282\u70b9\u79fb\u52a8\u5230\u53e6\u4e00\u4e2a\u8282\u70b9\u3002

              \u51b7\u8fc1\u79fb\u7684\u4e3b\u8981\u7279\u70b9\u662f\uff0c\u4e91\u4e3b\u673a\u5728\u8fc1\u79fb\u8fc7\u7a0b\u4e2d\u4f1a\u5904\u4e8e\u79bb\u7ebf\u72b6\u6001\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5bf9\u4e1a\u52a1\u8fde\u7eed\u6027\u4ea7\u751f\u5f71\u54cd\u3002\u56e0\u6b64\uff0c \u5728\u5b9e\u65bd\u51b7\u8fc1\u79fb\u65f6\u9700\u8981\u4ed4\u7ec6\u89c4\u5212\u8fc1\u79fb\u65f6\u95f4\u7a97\u53e3\uff0c\u5e76\u8003\u8651\u4e1a\u52a1\u9700\u6c42\u548c\u7cfb\u7edf\u53ef\u7528\u6027\u3002\u901a\u5e38\uff0c\u51b7\u8fc1\u79fb\u9002\u7528\u4e8e\u5bf9\u505c\u673a\u65f6\u95f4\u8981\u6c42\u4e0d\u662f\u975e\u5e38\u4e25\u683c\u7684\u573a\u666f\u3002

              "},{"location":"admin/virtnest/vm/migratiom.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u4f7f\u7528\u51b7\u8fc1\u79fb\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u4e91\u4e3b\u673a\u5fc5\u987b\u5904\u4e8e\u5173\u673a\u72b6\u6001\u624d\u80fd\u8fdb\u884c\u51b7\u8fc1\u79fb\u3002
              "},{"location":"admin/virtnest/vm/migratiom.html#_3","title":"\u51b7\u8fc1\u79fb","text":"
              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c \u53ef\u4ee5\u5bf9\u5173\u673a\u72b6\u6001\u4e0b\u7684\u4e91\u4e3b\u673a\u8fdb\u884c\u8fc1\u79fb\u52a8\u4f5c\u3002\u4e91\u4e3b\u673a\u5728\u5173\u673a\u72b6\u6001\u4e0b\u65f6\u65e0\u6cd5\u67e5\u770b\u6240\u5728\u8282\u70b9\uff0c\u9700\u8981\u63d0\u524d\u89c4\u5212\u6216\u8005\u5f00\u673a\u67e5\u8be2\u3002

                Note

                \u5982\u679c\u60a8\u5728\u539f\u59cb\u8282\u70b9\u7684\u5b58\u50a8\u6c60\u4e2d\u4f7f\u7528\u4e86 local-path\uff0c\u8de8\u8282\u70b9\u8fc1\u79fb\u65f6\u53ef\u80fd\u51fa\u73b0\u95ee\u9898\uff0c\u8bf7\u8c28\u614e\u9009\u62e9\u3002

              2. \u70b9\u51fb\u8fc1\u79fb\u540e\uff0c\u63d0\u793a\u5728\u8fc1\u79fb\u671f\u95f4\uff0c\u53ef\u4ee5\u9009\u62e9\u6307\u5b9a\u8282\u70b9\u8fc1\u79fb\uff0c\u4e5f\u53ef\u4ee5\u968f\u673a\u8fc1\u79fb\uff0c\u82e5\u9700\u8981\u4fee\u6539\u5b58\u50a8\u6c60\uff0c \u9700\u8981\u786e\u4fdd\u76ee\u6807\u8282\u70b9\u5185\u6709\u53ef\u7528\u5b58\u50a8\u6c60\u3002\u540c\u65f6\u9700\u8981\u76ee\u6807\u8282\u70b9\u8d44\u6e90\u5145\u8db3\uff0c\u8fc1\u79fb\u8fc7\u7a0b\u8017\u8d39\u65f6\u95f4\u8f83\u957f\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\u3002

              3. \u8fc1\u79fb\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\uff0c\u6210\u529f\u540e\u9700\u8981\u91cd\u542f\u67e5\u770b\u662f\u5426\u8fc1\u79fb\u6210\u529f\u3002\u672c\u793a\u4f8b\u5df2\u7ecf\u5f00\u673a\u67e5\u770b\u8fc1\u79fb\u6548\u679c\u3002

              "},{"location":"admin/virtnest/vm/monitor.html","title":"\u4e91\u4e3b\u673a\u76d1\u63a7","text":"

              \u4e91\u4e3b\u673a\u57fa\u4e8e Kubevirt \u5f00\u6e90\u7684 Grafana Dashboard\uff0c\u4e3a\u4e86\u6bcf\u4e00\u4e2a\u4e91\u4e3b\u673a\u751f\u6210\u4e86\u76d1\u63a7\u770b\u677f

              \u4e91\u4e3b\u673a\u7684\u76d1\u63a7\u4fe1\u606f\u53ef\u4ee5\u66f4\u597d\u7684\u4e86\u89e3\u4e91\u4e3b\u673a\u7684\u8d44\u6e90\u6d88\u8017\u60c5\u51b5\uff0c\u6bd4\u5982 CPU\u3001\u5185\u5b58\u3001\u5b58\u50a8\u548c\u7f51\u7edc\u7b49\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c \u4ece\u800c\u8fdb\u884c\u8d44\u6e90\u7684\u4f18\u5316\u548c\u89c4\u5212\uff0c\u63d0\u5347\u6574\u4f53\u7684\u8d44\u6e90\u5229\u7528\u6548\u7387\u3002

              "},{"location":"admin/virtnest/vm/monitor.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u67e5\u770b\u4e91\u4e3b\u673a\u76d1\u63a7\u7684\u76f8\u5173\u4fe1\u606f\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u4e91\u4e3b\u673a\u6240\u5728\u7684\u540c\u4e00\u96c6\u7fa4\u5185\u5b89\u88c5 Insight-agent \u7ec4\u4ef6\uff0c\u5e76\u4e14\u4fdd\u8bc1 Insight-agent \u7ec4\u4ef6\u6b63\u5e38\u53ef\u7528\u3002
              "},{"location":"admin/virtnest/vm/monitor.html#_3","title":"\u4e91\u4e3b\u673a\u76d1\u63a7","text":"

              \u8fdb\u5165\u4e91\u4e3b\u673a\u7684\u8be6\u7ec6\u4fe1\u606f\u5e76\u70b9\u51fb \u6982\u89c8 \uff0c\u5373\u53ef\u67e5\u770b\u4e91\u4e3b\u673a\u7684\u76d1\u63a7\u5185\u5bb9\u3002\u8bf7\u6ce8\u610f\uff0c\u82e5\u672a\u5b89\u88c5 Insight-agent \u7ec4\u4ef6\uff0c\u5219\u65e0\u6cd5\u83b7\u53d6\u76d1\u63a7\u4fe1\u606f\u3002\u4ee5\u4e0b\u662f\u8be6\u7ec6\u4fe1\u606f\uff1a

              • CPU \u603b\u91cf\u3001CPU \u4f7f\u7528\u91cf\u3001\u5185\u5b58\u603b\u91cf\u3001\u5185\u5b58\u4f7f\u7528\u91cf\u3002

              • CPU \u4f7f\u7528\u7387\uff1a\u6307\u5f53\u524d\u4e91\u4e3b\u673a\u6b63\u5728\u4f7f\u7528\u7684 CPU \u8d44\u6e90\u7684\u767e\u5206\u6bd4\uff1b

              • \u5185\u5b58\u4f7f\u7528\u7387\uff1a\u6307\u5f53\u524d\u4e91\u4e3b\u673a\u6b63\u5728\u4f7f\u7528\u7684\u5185\u5b58\u8d44\u6e90\u5360\u603b\u53ef\u7528\u5185\u5b58\u7684\u767e\u5206\u6bd4\u3002

              • \u7f51\u7edc\u6d41\u91cf\uff1a\u6307\u4e91\u4e3b\u673a\u5728\u7279\u5b9a\u65f6\u95f4\u6bb5\u5185\u53d1\u9001\u548c\u63a5\u6536\u7684\u7f51\u7edc\u6570\u636e\u91cf\uff1b

              • \u7f51\u7edc\u4e22\u5305\u7387\uff1a\u6307\u5728\u6570\u636e\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u4e22\u5931\u7684\u6570\u636e\u5305\u5360\u603b\u53d1\u9001\u6570\u636e\u5305\u6570\u91cf\u7684\u6bd4\u4f8b\u3002

              • \u7f51\u7edc\u9519\u8bef\u7387\uff1a\u6307\u5728\u7f51\u7edc\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u53d1\u751f\u7684\u9519\u8bef\u7684\u6bd4\u7387\uff1b

              • \u78c1\u76d8\u541e\u5410\uff1a\u6307\u4e91\u4e3b\u673a\u7cfb\u7edf\u5728\u4e00\u5b9a\u65f6\u95f4\u5185\u8bfb\u53d6\u548c\u5199\u5165\u78c1\u76d8\u7684\u901f\u5ea6\u548c\u80fd\u529b\u3002

              • IOPS\uff1a\u6307\u7684\u662f\u5728\u4e00\u79d2\u949f\u5185\u4e91\u4e3b\u673a\u7cfb\u7edf\u8fdb\u884c\u7684\u8f93\u5165/\u8f93\u51fa\u64cd\u4f5c\u7684\u6b21\u6570\u3002\u78c1\u76d8\u5ef6\u8fdf\uff1a\u6307\u4e91\u4e3b\u673a\u7cfb\u7edf\u5728\u8fdb\u884c\u78c1\u76d8\u8bfb\u5199\u64cd\u4f5c\u65f6\u6240\u7ecf\u5386\u7684\u65f6\u95f4\u5ef6\u8fdf\u3002

              "},{"location":"admin/virtnest/vm/scheduled-snapshot.html","title":"\u5b9a\u65f6\u5feb\u7167","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u4e91\u4e3b\u673a\u5b9a\u65f6\u521b\u5efa\u5feb\u7167\u3002

              \u7528\u6237\u53ef\u4ee5\u4e3a\u4e91\u4e3b\u673a\u5b9a\u65f6\u521b\u5efa\u5feb\u7167\uff0c\u80fd\u591f\u4e3a\u6570\u636e\u63d0\u4f9b\u6301\u7eed\u7684\u4fdd\u62a4\uff0c\u786e\u4fdd\u5728\u53d1\u751f\u6570\u636e\u4e22\u5931\u3001\u635f\u574f\u6216\u5220\u9664\u7684\u60c5\u51b5\u4e0b\u53ef\u4ee5\u8fdb\u884c\u6709\u6548\u7684\u6570\u636e\u6062\u590d\u3002

              "},{"location":"admin/virtnest/vm/scheduled-snapshot.html#_2","title":"\u5b9a\u65f6\u5feb\u7167\u6b65\u9aa4","text":"
              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u5728\u5217\u8868\u9875\u9762\uff0c\u9009\u62e9\u76ee\u6807\u4e91\u4e3b\u673a\u6240\u5728\u7684\u96c6\u7fa4\u3002 \u8fdb\u5165\u96c6\u7fa4\u540e\uff0c\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d -> \u5b9a\u65f6\u4efb\u52a1 \uff0c\u9009\u62e9 YAML \u521b\u5efa \u5b9a\u65f6\u4efb\u52a1\uff0c\u53c2\u8003\u4ee5\u4e0b YAML \u793a\u4f8b\u53ef\u4e3a\u6307\u5b9a\u4e91\u4e3b\u673a\u5b9a\u65f6\u521b\u5efa\u5feb\u7167\u3002

                \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u7684 YAML \u793a\u4f8b
                apiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: xxxxx-xxxxx-cronjob # \u5b9a\u65f6\u4efb\u52a1\u540d\u79f0, \u53ef\u81ea\u5b9a\u4e49\n  namespace: virtnest-system # \u8bf7\u52ff\u4fee\u6539\u6b64namespace\nspec:\n  schedule: \"5 * * * *\" # \u6309\u9700\u4fee\u6539\u5b9a\u65f6\u4efb\u52a1\u6267\u884c\u95f4\u9694\n  concurrencyPolicy: Allow\n  suspend: false\n  successfulJobsHistoryLimit: 10\n  failedJobsHistoryLimit: 3\n  startingDeadlineSeconds: 60\n  jobTemplate:\n    spec:\n      template:\n        metadata:\n          labels:\n            virtnest.io/vm: xxxx # \u4fee\u6539\u4e3a\u9700\u8981\u5feb\u7167\u7684\u4e91\u4e3b\u673a\u540d\u79f0\n            virtnest.io/namespace: xxxx # \u4fee\u6539\u4e3a\u4e91\u4e3b\u673a\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\n        spec:\n          serviceAccountName: kubevirt-operator\n          containers:\n            - name: snapshot-job\n              image: release.daocloud.io/virtnest/tools:v0.1.5 # \u79bb\u7ebf\u73af\u5883\u4e0b,\u4ed3\u5e93\u5730\u5740\u4fee\u6539\u4e3a\u5bf9\u5e94\u706b\u79cd\u96c6\u7fa4\u4ed3\u5e93\u5730\u5740\n              imagePullPolicy: IfNotPresent\n              env:\n                - name: NS\n                  valueFrom:\n                    fieldRef:\n                      fieldPath: metadata.labels['virtnest.io/namespace']\n                - name: VM\n                  valueFrom:\n                    fieldRef:\n                      fieldPath: metadata.labels['virtnest.io/vm']\n              command:\n                - /bin/sh\n                - -c\n                - |\n                  export SUFFIX=$(date +\"%Y%m%d-%H%M%S\")\n                  cat <<EOF | kubectl apply -f -\n                  apiVersion: snapshot.kubevirt.io/v1alpha1\n                  kind: VirtualMachineSnapshot\n                  metadata:\n                    name: $(VM)-snapshot-$SUFFIX\n                    namespace: $(NS)\n                  spec:\n                    source:\n                      apiGroup: kubevirt.io\n                      kind: VirtualMachine\n                      name: $(VM)\n                  EOF\n          restartPolicy: OnFailure\n
              2. \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u5e76\u6210\u529f\u8fd0\u884c\u540e\uff0c\u53ef\u70b9\u51fb \u4e91\u4e3b\u673a \u5728\u5217\u8868\u9875\u9762\u9009\u62e9\u76ee\u6807\u4e91\u4e3b\u673a\uff0c\u8fdb\u5165\u8be6\u60c5\u540e\u53ef\u67e5\u770b\u5feb\u7167\u5217\u8868\u3002

              "},{"location":"admin/virtnest/vm/snapshot.html","title":"\u5feb\u7167\u7ba1\u7406","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u4e91\u4e3b\u673a\u521b\u5efa\u5feb\u7167\uff0c\u5e76\u4ece\u5feb\u7167\u4e2d\u6062\u590d\u7684\u3002

              \u7528\u6237\u53ef\u4ee5\u4e3a\u4e91\u4e3b\u673a\u521b\u5efa\u5feb\u7167\uff0c\u4fdd\u5b58\u4e91\u4e3b\u673a\u5f53\u4e0b\u7684\u72b6\u6001\uff0c\u4e00\u4e2a\u5feb\u7167\u53ef\u4ee5\u652f\u6301\u591a\u6b21\u6062\u590d\uff0c\u6bcf\u6b21\u6062\u590d\u65f6\uff0c \u4e91\u4e3b\u673a\u5c06\u88ab\u8fd8\u539f\u5230\u5feb\u7167\u521b\u5efa\u65f6\u7684\u72b6\u6001\u3002\u901a\u5e38\u53ef\u4ee5\u7528\u4e8e\u5907\u4efd\u3001\u6062\u590d\u3001\u56de\u6eda\u7b49\u573a\u666f\u3002

              "},{"location":"admin/virtnest/vm/snapshot.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u4f7f\u7528\u5feb\u7167\u529f\u80fd\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u53ea\u6709\u975e\u9519\u8bef\u72b6\u6001\u4e0b\u7684\u4e91\u4e3b\u673a\u624d\u80fd\u4f7f\u7528\u5feb\u7167\u529f\u80fd\u3002
              • \u5b89\u88c5 Snapshot CRDs\u3001Snapshot Controller\u3001CSI Driver\u3002 \u5177\u4f53\u5b89\u88c5\u6b65\u9aa4\u53ef\u53c2\u8003 CSI Snapshotter\u3002
              • \u7b49\u5f85 snapshot-controller \u7ec4\u4ef6\u51c6\u5907\u5c31\u7eea, \u8be5\u7ec4\u4ef6\u4f1a\u76d1\u63a7 VolumeSnapshot \u548c VolumeSnapshotContent \u76f8\u5173\u4e8b\u4ef6\uff0c\u5e76\u89e6\u53d1\u76f8\u5173\u64cd\u4f5c\u3002
              • \u7b49\u5f85 CSI Driver \u51c6\u5907\u5c31\u7eea, \u786e\u4fdd csi-snapshotter sidecar \u8dd1\u5728 CSI Driver \u91cc\uff0ccsi-snapshotter sidecar \u4f1a\u76d1\u63a7 VolumeSnapshotContent \u76f8\u5173\u4e8b\u4ef6\uff0c\u5e76\u89e6\u53d1\u76f8\u5173\u64cd\u4f5c\u3002\u5982 POC \u4f7f\u7528\u7684\u5b58\u50a8\u662f rook-ceph\uff0c\u53ef\u53c2\u8003 ceph-csi-snapshot
                • \u5982\u5b58\u50a8\u662f Rook-Ceph\uff0c\u53ef\u53c2\u8003 ceph-csi-snapshot
                • \u5982\u5b58\u50a8\u662f HwameiStor\uff0c\u53ef\u53c2\u8003 huameistor-snapshot
              "},{"location":"admin/virtnest/vm/snapshot.html#_3","title":"\u521b\u5efa\u5feb\u7167","text":"
              1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u5bb9\u5668\u7ba1\u7406 \uff0c\u7136\u540e\u70b9\u51fb \u4e91\u4e3b\u673a \uff0c\u8fdb\u5165\u5217\u8868\u9875\u9762\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u975e\u9519\u8bef\u72b6\u6001\u4e0b\u7684\u4e91\u4e3b\u673a\u6267\u884c\u5feb\u7167\u64cd\u4f5c\u3002

              2. \u5f39\u51fa\u5f39\u6846\uff0c\u9700\u8981\u586b\u5199\u5feb\u7167\u7684\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u521b\u5efa\u5feb\u7167\u5927\u6982\u9700\u8981\u51e0\u5206\u949f\u7684\u65f6\u95f4\uff0c\u5728\u6b64\u671f\u95f4\u65e0\u6cd5\u5bf9\u4e91\u4e3b\u673a\u505a\u4efb\u4f55\u64cd\u4f5c\u3002

              3. \u521b\u5efa\u6210\u529f\u540e\u53ef\u4ee5\u5728\u4e91\u4e3b\u673a\u8be6\u60c5\u5185\u67e5\u770b\u5feb\u7167\u4fe1\u606f\uff0c\u652f\u6301\u7f16\u8f91\u63cf\u8ff0\u3001\u4ece\u5feb\u7167\u4e2d\u6062\u590d\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002

              "},{"location":"admin/virtnest/vm/snapshot.html#_4","title":"\u4ece\u5feb\u7167\u4e2d\u6062\u590d","text":"
              1. \u70b9\u51fb \u4ece\u5feb\u7167\u6062\u590d \uff0c\u9700\u8981\u586b\u5199\u4e91\u4e3b\u673a\u6062\u590d\u8bb0\u5f55\u7684\u540d\u79f0\uff0c\u540c\u65f6\u6062\u590d\u64cd\u4f5c\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u65f6\u95f4\u6765\u5b8c\u6210\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u5feb\u7167\u7684\u5927\u5c0f\u548c\u5176\u4ed6\u56e0\u7d20\u3002\u6062\u590d\u6210\u529f\u540e\uff0c\u4e91\u4e3b\u673a\u5c06\u56de\u5230\u5feb\u7167\u521b\u5efa\u65f6\u7684\u72b6\u6001\u3002

              2. \u4e00\u6bb5\u65f6\u95f4\u540e\uff0c\u4e0b\u62c9\u5feb\u7167\u4fe1\u606f\uff0c\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u5feb\u7167\u7684\u6240\u6709\u6062\u590d\u8bb0\u5f55\uff0c\u5e76\u4e14\u652f\u6301\u5c55\u793a\u5b9a\u4f4d\u6062\u590d\u7684\u4f4d\u7f6e\u3002

              "},{"location":"admin/virtnest/vm/vm-network.html","title":"\u4e91\u4e3b\u673a\u7f51\u7edc","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\uff0c\u914d\u7f6e\u7f51\u7edc\u4fe1\u606f\u3002

              \u5728\u4e91\u4e3b\u673a\u4e2d\uff0c\u7f51\u7edc\u7ba1\u7406\u662f\u4e00\u4e2a\u5173\u952e\u7684\u90e8\u5206\uff0c\u5b83\u4f7f\u5f97\u6211\u4eec\u80fd\u591f\u5728 Kubernetes \u73af\u5883\u4e2d\u7ba1\u7406\u548c\u914d\u7f6e\u4e91\u4e3b\u673a\u7684\u7f51\u7edc\u8fde\u63a5\uff0c\u53ef\u4ee5\u6839\u636e\u4e0d\u540c\u7684\u9700\u6c42\u548c\u573a\u666f\u6765\u8fdb\u884c\u914d\u7f6e\uff0c\u5b9e\u73b0\u66f4\u7075\u6d3b\u548c\u591a\u6837\u5316\u7684\u7f51\u7edc\u67b6\u6784\u3002

              1. \u5355\u7f51\u5361\u573a\u666f\uff1a\u5bf9\u4e8e\u4e00\u4e9b\u7b80\u5355\u7684\u53ea\u9700\u8981\u57fa\u672c\u7f51\u7edc\u8fde\u63a5\u7684\u5e94\u7528\uff0c\u6216\u8005\u5b58\u5728\u8d44\u6e90\u9650\u5236\u7684\u65f6\u5019\uff0c\u4f7f\u7528\u5355\u7f51\u5361\u53ef\u4ee5\u8282\u7ea6\u7f51\u7edc\u8d44\u6e90\uff0c\u5e76\u907f\u514d\u8d44\u6e90\u7684\u6d6a\u8d39\u3002
              2. \u591a\u7f51\u5361\u573a\u666f\uff1a\u5f53\u9700\u8981\u5b9e\u73b0\u4e0d\u540c\u7f51\u7edc\u73af\u5883\u4e4b\u95f4\u7684\u5b89\u5168\u9694\u79bb\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528\u591a\u7f51\u5361\u6765\u5212\u5206\u4e0d\u540c\u7684\u7f51\u7edc\u533a\u57df\u3002\u540c\u65f6\u4e5f\u53ef\u4ee5\u5bf9\u63a7\u5236\u548c\u6d41\u91cf\u8fdb\u884c\u7ba1\u7406\u3002
              "},{"location":"admin/virtnest/vm/vm-network.html#_2","title":"\u7f51\u7edc\u914d\u7f6e\u524d\u63d0","text":"

              \u5728\u4f7f\u7528\u4e91\u4e3b\u673a\u7f51\u7edc\u529f\u80fd\u4e4b\u524d\uff0c\u9700\u8981\u6839\u636e\u7f51\u7edc\u6a21\u5f0f\u7684\u4e0d\u540c\u914d\u7f6e\u4e0d\u540c\u7684\u4fe1\u606f\uff1a

              • \u9009\u62e9 Bridge \u7f51\u7edc\u6a21\u5f0f\u65f6\u9700\u8981\u63d0\u524d\u914d\u7f6e\u4e00\u4e9b\u4fe1\u606f\uff1a

                • \u5728\u4e3b\u673a\u8282\u70b9\u4e0a\u5b89\u88c5\u5e76\u8fd0\u884c Open vSwitch, \u53ef\u53c2\u8003\u8fd9\u91cc
                • \u5728\u4e3b\u673a\u8282\u70b9\u4e0a\u914d\u7f6e Open vSwitch \u7f51\u6865, \u53ef\u53c2\u8003\u8fd9\u91cc
                • \u5b89\u88c5 Spiderpool\uff0c\u53ef\u53c2\u8003\u5b89\u88c5 Spiderpool, Spiderpool \u9ed8\u8ba4\u4f1a\u628a Multus CNI \u548c Ovs CNI \u90fd\u88c5\u4e0a
                • \u521b\u5efa ovs \u7c7b\u578b\u7684 Multus CR\uff0c\u53ef\u53c2\u8003\u754c\u9762\u521b\u5efa Multus CR \u6216 YAML \u521b\u5efa Multus CR
                • \u521b\u5efa\u5b50\u7f51\u53ca IP \u6c60\uff0c\u53c2\u8003\u521b\u5efa\u5b50\u7f51\u548c IP \u6c60
              "},{"location":"admin/virtnest/vm/vm-network.html#_3","title":"\u7f51\u7edc\u914d\u7f6e","text":"
              1. \u914d\u7f6e\u4e91\u4e3b\u673a\u7684\u7f51\u7edc\u914d\u7f6e\uff0c\u53ef\u4ee5\u6839\u636e\u8868\u683c\u4fe1\u606f\u6309\u9700\u7ec4\u5408\u3002

                \u7f51\u7edc\u6a21\u5f0f CNI \u662f\u5426\u5b89\u88c5 Spiderpool \u7f51\u5361\u6a21\u5f0f \u56fa\u5b9a IP \u5b9e\u65f6\u8fc1\u79fb Masquerade\uff08NAT\uff09 Calico \u274c \u5355\u7f51\u5361 \u274c \u2705 Cilium \u274c \u5355\u7f51\u5361 \u274c \u2705 Flannel \u274c \u5355\u7f51\u5361 \u274c \u2705 Bridge\uff08\u6865\u63a5\uff09 OVS \u2705 \u591a\u7f51\u5361 \u2705 \u2705

              2. \u7f51\u7edc\u6a21\u5f0f\uff1a\u5206\u4e3a Masquerade\uff08NAT\uff09\u3001Bridge\uff08\u6865\u63a5\uff09\u4e24\u79cd\uff0cBridge\uff08\u6865\u63a5\uff09\u6a21\u5f0f\u9700\u8981\u5b89\u88c5\u4e86 spiderpool \u7ec4\u4ef6\u540e\u65b9\u53ef\u4f7f\u7528\u3002

                1. \u9ed8\u8ba4\u9009\u62e9 Masquerade\uff08NAT\uff09\u7684\u7f51\u7edc\u6a21\u5f0f\uff0c\u4f7f\u7528 eth0 \u9ed8\u8ba4\u7f51\u5361\u3002

                2. \u82e5\u96c6\u7fa4\u5185\u5b89\u88c5\u4e86 spiderpool \u7ec4\u4ef6\uff0c\u5219\u652f\u6301\u9009\u62e9 Bridge\uff08\u6865\u63a5\uff09\u6a21\u5f0f\uff0c\u652f\u6301\u591a\u7f51\u5361\u5f62\u5f0f\u3002

                  \u9009\u62e9 Bridge \u6a21\u5f0f\u65f6\uff0c\u9700\u8981\u6709\u4e00\u4e9b\u524d\u63d0\u6761\u4ef6

              3. \u6dfb\u52a0\u7f51\u5361

                1. Bridge\uff08\u6865\u63a5\uff09\u6a21\u5f0f\u4e0b\u652f\u6301\u624b\u52a8\u6dfb\u52a0\u7f51\u5361\u3002\u70b9\u51fb \u6dfb\u52a0\u7f51\u5361 \uff0c\u8fdb\u884c\u7f51\u5361 IP \u6c60\u7684\u914d\u7f6e\u3002\u9009\u62e9\u548c\u7f51\u7edc\u6a21\u5f0f\u5339\u914d\u7684 Multus CR\uff0c\u82e5\u6ca1\u6709\u5219\u9700\u8981\u81ea\u884c\u521b\u5efa\u3002

                2. \u82e5\u6253\u5f00 \u4f7f\u7528\u9ed8\u8ba4 IP \u6c60 \u5f00\u5173\uff0c\u5219\u4f7f\u7528 multus CR \u914d\u7f6e\u4e2d\u7684\u9ed8\u8ba4 IP \u6c60\u3002\u82e5\u5173\u95ed\u5f00\u5173\uff0c\u5219\u624b\u52a8\u9009\u62e9 IP \u6c60\u3002

              "},{"location":"admin/virtnest/vm/vm-sc.html","title":"\u4e91\u4e3b\u673a\u5b58\u50a8","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\uff0c\u914d\u7f6e\u5b58\u50a8\u4fe1\u606f\u3002

              \u5b58\u50a8\u548c\u4e91\u4e3b\u673a\u7684\u529f\u80fd\u606f\u606f\u76f8\u5173\uff0c\u4e3b\u8981\u662f\u901a\u8fc7\u4f7f\u7528 Kubernetes \u7684\u6301\u4e45\u5377\u548c\u5b58\u50a8\u7c7b\uff0c\u63d0\u4f9b\u4e86\u7075\u6d3b\u4e14\u53ef\u6269\u5c55\u7684\u4e91\u4e3b\u673a\u5b58\u50a8\u80fd\u529b\u3002 \u6bd4\u5982\u4e91\u4e3b\u673a\u955c\u50cf\u5b58\u50a8\u5728 PVC \u91cc\uff0c\u652f\u6301\u548c\u5176\u4ed6\u6570\u636e\u4e00\u8d77\u514b\u9686\u3001\u5feb\u7167\u7b49

              "},{"location":"admin/virtnest/vm/vm-sc.html#_2","title":"\u90e8\u7f72\u4e0d\u540c\u7684\u5b58\u50a8","text":"

              \u5728\u4f7f\u7528\u4e91\u4e3b\u673a\u5b58\u50a8\u529f\u80fd\u4e4b\u524d\uff0c\u9700\u8981\u6839\u636e\u9700\u8981\u90e8\u7f72\u4e0d\u540c\u7684\u5b58\u50a8\uff1a

              1. \u53c2\u8003\u90e8\u7f72 hwameistor\uff0c \u6216\u8005\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684 Helm \u6a21\u677f\u4e2d\u5b89\u88c5 hwameistor-operator\u3002
              2. \u53c2\u8003\u90e8\u7f72 rook-ceph
              3. \u90e8\u7f72 localpath\uff0c\u4f7f\u7528\u547d\u4ee4 kubectl apply -f \u521b\u5efa\u4ee5\u4e0b YAML\uff1a
              \u70b9\u51fb\u67e5\u770b\u5b8c\u6574 YAML
              ---\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: local-path-storage\n\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: local-path-provisioner-service-account\n  namespace: local-path-storage\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: local-path-provisioner-role\nrules:\n- apiGroups: [\"\"]\n  resources: [\"nodes\", \"persistentvolumeclaims\", \"configmaps\"]\n  verbs: [\"get\", \"list\", \"watch\"]\n- apiGroups: [\"\"]\n  resources: [\"endpoints\", \"persistentvolumes\", \"pods\"]\n  verbs: [\"*\"]\n- apiGroups: [\"\"]\n  resources: [\"events\"]\n  verbs: [\"create\", \"patch\"]\n- apiGroups: [\"storage.k8s.io\"]\n  resources: [\"storageclasses\"]\n  verbs: [\"get\", \"list\", \"watch\"]\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: local-path-provisioner-bind\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: local-path-provisioner-role\nsubjects:\n- kind: ServiceAccount\n  name: local-path-provisioner-service-account\n  namespace: local-path-storage\n\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: local-path-provisioner\n  namespace: local-path-storage\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: local-path-provisioner\n  template:\n    metadata:\n      labels:\n        app: local-path-provisioner\n    spec:\n      serviceAccountName: local-path-provisioner-service-account\n      containers:\n      - name: local-path-provisioner\n        image: rancher/local-path-provisioner:v0.0.22\n        imagePullPolicy: IfNotPresent\n        command:\n        - local-path-provisioner\n        - --debug\n        - start\n        - --config\n        - /etc/config/config.json\n        volumeMounts:\n        - name: config-volume\n          mountPath: /etc/config/\n        env:\n        - name: POD_NAMESPACE\n          valueFrom:\n            fieldRef:\n              fieldPath: metadata.namespace\n      volumes:\n      - name: config-volume\n        configMap:\n          name: local-path-config\n\n---\napiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n  name: local-path\nprovisioner: rancher.io/local-path\nvolumeBindingMode: WaitForFirstConsumer\nreclaimPolicy: Delete\n\n---\nkind: ConfigMap\napiVersion: v1\nmetadata:\n  name: local-path-config\n  namespace: local-path-storage\ndata:\n  config.json: |-\n    {\n      \"nodePathMap\": [\n        {\n          \"node\": \"DEFAULT_PATH_FOR_NON_LISTED_NODES\",\n          \"paths\": [\"/opt/local-path-provisioner\"]\n        }\n      ]\n    }\n  setup: |-\n    #!/bin/sh\n    set -eu\n    mkdir -m 0777 -p \"$VOL_DIR\"\n  teardown: |-\n    #!/bin/sh\n    set -eu\n    rm -rf \"$VOL_DIR\"\n  helperPod.yaml: |-\n    apiVersion: v1\n    kind: Pod\n    metadata:\n      name: helper-pod\n    spec:\n      containers:\n      - name: helper-pod\n        image: busybox\n        imagePullPolicy: IfNotPresent\n
              "},{"location":"admin/virtnest/vm/vm-sc.html#_3","title":"\u4e91\u4e3b\u673a\u5b58\u50a8","text":"
              1. \u7cfb\u7edf\u76d8\uff1a\u7cfb\u7edf\u9ed8\u8ba4\u521b\u5efa\u4e00\u4e2a VirtIO \u7c7b\u578b\u7684 rootfs \u7cfb\u7edf\u76d8\uff0c\u7528\u4e8e\u5b58\u653e\u64cd\u4f5c\u7cfb\u7edf\u548c\u6570\u636e\u3002

              2. \u6570\u636e\u76d8\uff1a\u6570\u636e\u76d8\u662f\u4e91\u4e3b\u673a\u4e2d\u7528\u4e8e\u5b58\u50a8\u7528\u6237\u6570\u636e\u3001\u5e94\u7528\u7a0b\u5e8f\u6570\u636e\u6216\u5176\u4ed6\u975e\u64cd\u4f5c\u7cfb\u7edf\u76f8\u5173\u6587\u4ef6\u7684\u5b58\u50a8\u8bbe\u5907\u3002\u4e0e\u7cfb\u7edf\u76d8\u76f8\u6bd4\uff0c\u6570\u636e\u76d8\u662f\u975e\u5fc5\u9009\u7684\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u52a8\u6001\u6dfb\u52a0\u6216\u79fb\u9664\u3002\u6570\u636e\u76d8\u7684\u5bb9\u91cf\u4e5f\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u8fdb\u884c\u7075\u6d3b\u914d\u7f6e\u3002

                \u9ed8\u8ba4\u4f7f\u7528\u5757\u5b58\u50a8\u3002\u5982\u679c\u9700\u8981\u4f7f\u7528\u514b\u9686\u548c\u5feb\u7167\u529f\u80fd\uff0c\u8bf7\u786e\u4fdd\u60a8\u7684\u5b58\u50a8\u6c60\u5df2\u7ecf\u521b\u5efa\u4e86\u5bf9\u5e94\u7684 VolumeSnapshotClass\uff0c \u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u793a\u4f8b\u3002\u5982\u679c\u9700\u8981\u4f7f\u7528\u5b9e\u65f6\u8fc1\u79fb\u529f\u80fd\uff0c\u8bf7\u786e\u4fdd\u60a8\u7684\u5b58\u50a8\u652f\u6301\u5e76\u9009\u62e9\u4e86 ReadWriteMany \u7684\u8bbf\u95ee\u6a21\u5f0f \u3002

                \u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u5b58\u50a8\u5728\u5b89\u88c5\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u81ea\u52a8\u521b\u5efa\u8fd9\u6837\u7684 VolumeSnapshotClass\uff0c\u56e0\u6b64\u60a8\u9700\u8981\u624b\u52a8\u521b\u5efa VolumeSnapshotClass\u3002 \u4ee5\u4e0b\u662f\u4e00\u4e2a HwameiStor \u521b\u5efa VolumeSnapshotClass \u7684\u793a\u4f8b\uff1a

                kind: VolumeSnapshotClass\napiVersion: snapshot.storage.k8s.io/v1\nmetadata:\n  name: hwameistor-storage-lvm-snapshot\n  annotations:\n    snapshot.storage.kubernetes.io/is-default-class: \"true\"\nparameters:\n  snapsize: \"1073741824\"\ndriver: lvm.hwameistor.io\ndeletionPolicy: Delete\n
                • \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u68c0\u67e5 VolumeSnapshotClass \u662f\u5426\u521b\u5efa\u6210\u529f\u3002

                  kubectl get VolumeSnapshotClass\n
                • \u67e5\u770b\u5df2\u521b\u5efa\u7684 Snapshotclass\uff0c\u5e76\u4e14\u786e\u8ba4 Provisioner \u5c5e\u6027\u540c\u5b58\u50a8\u6c60\u4e2d\u7684 Driver \u5c5e\u6027\u4e00\u81f4\u3002

              "},{"location":"admin/virtnest/vm-image/index.html","title":"\u6784\u5efa\u4e91\u4e3b\u673a\u955c\u50cf","text":"

              \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u6784\u5efa\u9700\u8981\u7684\u4e91\u4e3b\u673a\u955c\u50cf\u3002

              \u4e91\u4e3b\u673a\u955c\u50cf\u5176\u5b9e\u5c31\u662f\u526f\u672c\u6587\u4ef6\uff0c\u662f\u5b89\u88c5\u6709\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e2a\u78c1\u76d8\u5206\u533a\u3002\u5e38\u89c1\u7684\u955c\u50cf\u6587\u4ef6\u683c\u5f0f\u5305\u62ec raw\u3001qcow2\u3001vmdk\u7b49\u3002

              "},{"location":"admin/virtnest/vm-image/index.html#_2","title":"\u6784\u5efa\u955c\u50cf","text":"

              \u4e0b\u9762\u662f\u6784\u5efa\u4e91\u4e3b\u673a\u955c\u50cf\u7684\u4e00\u4e9b\u8be6\u7ec6\u6b65\u9aa4\uff1a

              1. \u4e0b\u8f7d\u7cfb\u7edf\u955c\u50cf

                \u5728\u6784\u5efa\u4e91\u4e3b\u673a\u955c\u50cf\u4e4b\u524d\uff0c\u60a8\u9700\u8981\u4e0b\u8f7d\u6240\u9700\u7684\u7cfb\u7edf\u955c\u50cf\u3002\u6211\u4eec\u63a8\u8350\u4f7f\u7528 qcow2\u3001raw \u6216 vmdk \u683c\u5f0f\u7684\u955c\u50cf\u3002\u53ef\u4ee5\u8bbf\u95ee\u4ee5\u4e0b\u94fe\u63a5\u83b7\u53d6 CentOS \u548c Fedora \u7684\u955c\u50cf\uff1a

                • CentOS Cloud Images\uff1a\u652f\u6301\u4ece\u5b98\u65b9 CentOS \u9879\u76ee\u6216\u5176\u4ed6\u8d44\u6e90\u4e2d\u83b7\u53d6 CentOS \u955c\u50cf\u3002\u8bf7\u786e\u4fdd\u9009\u62e9\u4e0e\u60a8\u7684\u865a\u62df\u5316\u5e73\u53f0\u517c\u5bb9\u7684\u7248\u672c\u3002
                • Fedora Cloud Images\uff1a \u652f\u6301\u4ece\u5b98\u65b9 Fedora \u9879\u76ee\u83b7\u53d6\u955c\u50cf\u3002\u6839\u636e\u60a8\u7684\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u7248\u672c\u3002
              2. \u6784\u5efa Docker \u955c\u50cf\u5e76\u63a8\u9001\u5230\u5bb9\u5668\u955c\u50cf\u4ed3\u5e93

                \u5728\u6b64\u6b65\u9aa4\u4e2d\uff0c\u6211\u4eec\u5c06\u4f7f\u7528 Docker \u6784\u5efa\u4e00\u4e2a\u955c\u50cf\uff0c\u5e76\u5c06\u5176\u63a8\u9001\u5230\u5bb9\u5668\u955c\u50cf\u4ed3\u5e93\uff0c\u4ee5\u4fbf\u5728\u9700\u8981\u65f6\u80fd\u591f\u65b9\u4fbf\u5730\u90e8\u7f72\u548c\u4f7f\u7528\u3002

                • \u521b\u5efa Dockerfile \u6587\u4ef6

                  FROM scratch\nADD --chown=107:107 CentOS-7-x86_64-GenericCloud.qcow2 /disk/\n

                  \u5411\u57fa\u4e8e\u7a7a\u767d\u955c\u50cf\u6784\u5efa\u7684\u955c\u50cf\u4e2d\u6dfb\u52a0\u540d\u4e3a CentOS-7-x86_64-GenericCloud.qcow2 \u7684\u6587\u4ef6\uff0c\u5e76\u5c06\u5176\u653e\u7f6e\u5728\u955c\u50cf\u4e2d\u7684 /disk/ \u76ee\u5f55\u4e0b\u3002\u901a\u8fc7\u8fd9\u4e2a\u64cd\u4f5c\uff0c\u955c\u50cf\u5c31\u5305\u542b\u4e86\u8fd9\u4e2a\u6587\u4ef6\uff0c\u53ef\u4ee5\u5728\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\u4f7f\u7528\u5b83\u6765\u63d0\u4f9b CentOS 7 x86_64 \u7684\u64cd\u4f5c\u7cfb\u7edf\u73af\u5883\u3002

                • \u6784\u5efa\u955c\u50cf

                  docker build -t release-ci.daocloud.io/ghippo/kubevirt-demo/centos7:v1 .\n

                  \u4e0a\u8ff0\u547d\u4ee4\u5c06\u4f7f\u7528 Dockerfile \u4e2d\u7684\u6307\u4ee4\u6784\u5efa\u4e00\u4e2a\u540d\u4e3a release-ci.daocloud.io/ghippo/kubevirt-demo/centos7:v1 \u7684\u955c\u50cf\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u9879\u76ee\u9700\u6c42\u4fee\u6539\u955c\u50cf\u540d\u79f0\u3002

                • \u63a8\u9001\u955c\u50cf\u81f3\u5bb9\u5668\u955c\u50cf\u4ed3\u5e93

                  \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u5c06\u6784\u5efa\u597d\u7684\u955c\u50cf\u63a8\u9001\u5230\u540d\u4e3a release-ci.daocloud.io \u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u60a8\u8fd8\u53ef\u4ee5\u6839\u636e\u9700\u8981\u4fee\u6539\u955c\u50cf\u4ed3\u5e93\u7684\u540d\u79f0\u548c\u5730\u5740\u3002

                  docker push release-ci.daocloud.io/ghippo/kubevirt-demo/centos7:v1\n

              \u4ee5\u4e0a\u662f\u6784\u5efa\u4e91\u4e3b\u673a\u955c\u50cf\u7684\u8be6\u7ec6\u6b65\u9aa4\u548c\u8bf4\u660e\u3002\u901a\u8fc7\u6309\u7167\u8fd9\u4e9b\u6b65\u9aa4\u64cd\u4f5c\uff0c\u60a8\u5c06\u80fd\u591f\u6210\u529f\u6784\u5efa\u5e76\u63a8\u9001\u7528\u4e8e\u4e91\u4e3b\u673a\u7684\u955c\u50cf\uff0c\u4ee5\u6ee1\u8db3\u60a8\u7684\u4f7f\u7528\u9700\u6c42\u3002

              "},{"location":"end-user/index.html","title":"\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 - \u7ec8\u7aef\u7528\u6237","text":"

              \u8fd9\u662f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9762\u5411\u7ec8\u7aef\u7528\u6237\u7684\u4f7f\u7528\u6587\u6863\u3002

              • \u7528\u6237\u6ce8\u518c

                \u7528\u6237\u6ce8\u518c\u662f\u4f7f\u7528 AI \u7b97\u529b\u5e73\u53f0\u7684\u7b2c\u4e00\u6b65\u3002

                • \u7528\u6237\u6ce8\u518c
              • \u4e91\u4e3b\u673a

                \u4e91\u4e3b\u673a\u662f\u90e8\u7f72\u5728\u4e91\u7aef\u7684\u865a\u62df\u673a\u3002

                • \u521b\u5efa\u4e91\u4e3b\u673a
                • \u4f7f\u7528\u4e91\u4e3b\u673a
              • \u5bb9\u5668\u7ba1\u7406

                \u5bb9\u5668\u7ba1\u7406\u662f AI \u7b97\u529b\u4e2d\u5fc3\u7684\u6838\u5fc3\u6a21\u5757\u3002

                • \u4e91\u4e0a K8s \u96c6\u7fa4
                • \u8282\u70b9\u7ba1\u7406
                • \u5de5\u4f5c\u8d1f\u8f7d
                • Helm \u5e94\u7528\u548c\u6a21\u677f
              • \u7b97\u6cd5\u5f00\u53d1

                \u7ba1\u7406\u6570\u636e\u96c6\uff0c\u6267\u884c AI \u8bad\u7ec3\u548c\u63a8\u7406\u4efb\u52a1\u3002

                • \u521b\u5efa AI \u5de5\u4f5c\u8d1f\u8f7d
                • \u4f7f\u7528 Notebook
                • \u521b\u5efa\u8bad\u7ec3\u4efb\u52a1
                • \u521b\u5efa\u63a8\u7406\u670d\u52a1
              • \u53ef\u89c2\u6d4b\u6027

                \u901a\u8fc7\u4eea\u8868\u76d8\u76d1\u63a7\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u51b5\u3002

                • \u76d1\u63a7\u96c6\u7fa4/\u8282\u70b9
                • \u6307\u6807
                • \u65e5\u5fd7
                • \u94fe\u8def\u8ffd\u8e2a
              • \u4e2a\u4eba\u4e2d\u5fc3

                \u5728\u4e2a\u4eba\u4e2d\u5fc3\u8bbe\u7f6e\u5bc6\u7801\u3001\u5bc6\u94a5\u548c\u8bed\u8a00\u3002

                • \u5b89\u5168\u8bbe\u7f6e
                • \u8bbf\u95ee\u5bc6\u94a5
                • \u8bed\u8a00\u8bbe\u7f6e
              "},{"location":"end-user/baize/dataset/create-use-delete.html","title":"\u6570\u636e\u96c6\u5217\u8868","text":"

              AI Lab \u63d0\u4f9b\u6a21\u578b\u5f00\u53d1\u3001\u8bad\u7ec3\u4ee5\u53ca\u63a8\u7406\u8fc7\u7a0b\u6240\u6709\u9700\u8981\u7684\u6570\u636e\u96c6\u7ba1\u7406\u529f\u80fd\u3002\u76ee\u524d\u652f\u6301\u5c06\u591a\u79cd\u6570\u636e\u6e90\u7edf\u4e00\u63a5\u5165\u80fd\u529b\u3002

              \u901a\u8fc7\u7b80\u5355\u914d\u7f6e\u5373\u53ef\u5c06\u6570\u636e\u6e90\u63a5\u5165\u5230 AI Lab \u4e2d\uff0c\u5b9e\u73b0\u6570\u636e\u7684\u7edf\u4e00\u7eb3\u7ba1\u3001\u9884\u70ed\u3001\u6570\u636e\u96c6\u7ba1\u7406\u7b49\u529f\u80fd\u3002

              "},{"location":"end-user/baize/dataset/create-use-delete.html#_2","title":"\u521b\u5efa\u6570\u636e\u96c6","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u6570\u636e\u7ba1\u7406 -> \u6570\u636e\u96c6\u5217\u8868 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

              2. \u9009\u62e9\u6570\u636e\u96c6\u5f52\u5c5e\u7684\u5de5\u4f5c\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4 \u4e0b\u4e00\u6b65 \u3002

              3. \u914d\u7f6e\u76ee\u6807\u6570\u636e\u7684\u6570\u636e\u6e90\u7c7b\u578b\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                \u76ee\u524d\u652f\u6301\u8fd9\u51e0\u79cd\u6570\u636e\u6e90\uff1a

                • GIT\uff1a\u652f\u6301 GitHub\u3001GitLab\u3001Gitee \u7b49\u4ed3\u5e93
                • S3\uff1a\u652f\u6301 Amazon \u4e91\u7b49\u5bf9\u8c61\u5b58\u50a8
                • HTTP\uff1a\u76f4\u63a5\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684 HTTP \u7f51\u5740
                • PVC\uff1a\u652f\u6301\u9884\u5148\u521b\u5efa\u7684 Kubernetes PersistentVolumeClaim
                • NFS\uff1a\u652f\u6301 NFS \u5171\u4eab\u5b58\u50a8
              4. \u6570\u636e\u96c6\u521b\u5efa\u6210\u529f\u5c06\u8fd4\u56de\u6570\u636e\u96c6\u5217\u8868\u3002\u4f60\u53ef\u4ee5\u901a\u8fc7\u53f3\u4fa7\u7684 \u2507 \u6267\u884c\u66f4\u591a\u64cd\u4f5c\u3002

              Info

              \u7cfb\u7edf\u81ea\u52a8\u4f1a\u5728\u6570\u636e\u96c6\u521b\u5efa\u6210\u529f\u540e\uff0c\u7acb\u5373\u8fdb\u884c\u4e00\u6b21\u6027\u7684\u6570\u636e\u9884\u52a0\u8f7d\uff1b\u5728\u9884\u52a0\u8f7d\u5b8c\u6210\u4e4b\u524d\uff0c\u6570\u636e\u96c6\u4e0d\u53ef\u4ee5\u4f7f\u7528\u3002

              "},{"location":"end-user/baize/dataset/create-use-delete.html#_3","title":"\u6570\u636e\u96c6\u4f7f\u7528","text":"

              \u6570\u636e\u96c6\u521b\u5efa\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u5728\u6a21\u578b\u8bad\u7ec3\u3001\u63a8\u7406\u7b49\u4efb\u52a1\u4e2d\u4f7f\u7528\u3002

              "},{"location":"end-user/baize/dataset/create-use-delete.html#notebook","title":"\u5728 Notebook \u4e2d\u4f7f\u7528","text":"

              \u5728\u521b\u5efa Notebook \u4e2d\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6570\u636e\u96c6\uff1b\u4f7f\u7528\u65b9\u5f0f\u5982\u4e0b\uff1a

              • \u4f7f\u7528\u6570\u636e\u96c6\u505a\u8bad\u7ec3\u6570\u636e\u6302\u8f7d
              • \u4f7f\u7528\u6570\u636e\u96c6\u505a\u4ee3\u7801\u6302\u8f7d

              "},{"location":"end-user/baize/dataset/create-use-delete.html#_4","title":"\u5728 \u8bad\u7ec3\u4efb\u52a1 \u4e2d\u4f7f\u7528","text":"
              • \u4f7f\u7528\u6570\u636e\u96c6\u6307\u5b9a\u4efb\u52a1\u8f93\u51fa
              • \u4f7f\u7528\u6570\u636e\u96c6\u6307\u5b9a\u4efb\u52a1\u8f93\u5165
              • \u4f7f\u7528\u6570\u636e\u96c6\u6307\u5b9a TensorBoard \u8f93\u51fa
              "},{"location":"end-user/baize/dataset/create-use-delete.html#_5","title":"\u5728\u63a8\u7406\u670d\u52a1 \u4e2d\u4f7f\u7528","text":"
              • \u4f7f\u7528\u6570\u636e\u96c6\u6302\u8f7d\u6a21\u578b
              "},{"location":"end-user/baize/dataset/create-use-delete.html#_6","title":"\u5220\u9664\u6570\u636e\u96c6","text":"

              \u5982\u679c\u53d1\u73b0\u6570\u636e\u96c6\u5197\u4f59\u3001\u8fc7\u671f\u6216\u56e0\u5176\u4ed6\u7f18\u6545\u4e0d\u518d\u9700\u8981\uff0c\u53ef\u4ee5\u4ece\u6570\u636e\u96c6\u5217\u8868\u4e2d\u5220\u9664\u3002

              1. \u5728\u6570\u636e\u96c6\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

              2. \u5728\u5f39\u7a97\u4e2d\u786e\u8ba4\u8981\u5220\u9664\u7684\u6570\u636e\u96c6\uff0c\u8f93\u5165\u6570\u636e\u96c6\u540d\u79f0\u540e\u70b9\u51fb \u5220\u9664 \u3002

              3. \u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\uff0c\u8be5\u6570\u636e\u96c6\u4ece\u5217\u8868\u4e2d\u6d88\u5931\u3002

              Caution

              \u6570\u636e\u96c6\u4e00\u65e6\u5220\u9664\u5c06\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

              "},{"location":"end-user/baize/dataset/environments.html","title":"\u7ba1\u7406\u73af\u5883","text":"

              \u672c\u6587\u8bf4\u660e\u5982\u4f55\u5728 AI Lab \u4e2d\u7ba1\u7406\u4f60\u7684\u73af\u5883\u4f9d\u8d56\u5e93\uff0c\u4ee5\u4e0b\u662f\u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u548c\u6ce8\u610f\u4e8b\u9879\u3002

              1. \u73af\u5883\u7ba1\u7406\u6982\u8ff0
              2. \u521b\u5efa\u65b0\u73af\u5883
              3. \u914d\u7f6e\u73af\u5883
              4. \u6545\u969c\u6392\u9664
              "},{"location":"end-user/baize/dataset/environments.html#_2","title":"\u73af\u5883\u7ba1\u7406\u6982\u8ff0","text":"

              \u4f20\u7edf\u65b9\u5f0f\uff0c\u4e00\u822c\u4f1a\u5c06 Python \u73af\u5883\u4f9d\u8d56\u5728\u955c\u50cf\u4e2d\u6784\u5efa\uff0c\u955c\u50cf\u5e26\u6709 Python \u7248\u672c\u548c\u4f9d\u8d56\u5305\u7684\u955c\u50cf\uff0c\u7ef4\u62a4\u6210\u672c\u8f83\u9ad8\u4e14\u66f4\u65b0\u4e0d\u65b9\u4fbf\uff0c\u5f80\u5f80\u9700\u8981\u91cd\u65b0\u6784\u5efa\u955c\u50cf\u3002

              \u800c\u5728 AI Lab \u4e2d\uff0c\u7528\u6237\u53ef\u4ee5\u901a\u8fc7 \u73af\u5883\u7ba1\u7406 \u6a21\u5757\u6765\u7ba1\u7406\u7eaf\u7cb9\u7684\u73af\u5883\u4f9d\u8d56\uff0c\u5c06\u8fd9\u90e8\u5206\u4ece\u955c\u50cf\u4e2d\u89e3\u8026\uff0c\u5e26\u6765\u7684\u4f18\u52bf\u6709\uff1a

              • \u4e00\u4efd\u73af\u5883\u591a\u5904\u4f7f\u7528\uff0c\u540c\u65f6\u53ef\u4ee5\u5728 Notebook\u3001\u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u3001\u4e43\u81f3\u63a8\u7406\u670d\u52a1\u4e2d\u4f7f\u7528\u3002
              • \u66f4\u65b0\u4f9d\u8d56\u5305\u66f4\u52a0\u65b9\u4fbf\uff0c\u53ea\u9700\u8981\u66f4\u65b0\u73af\u5883\u4f9d\u8d56\u5373\u53ef\uff0c\u65e0\u9700\u91cd\u65b0\u6784\u5efa\u955c\u50cf\u3002

              \u4ee5\u4e0b\u4e3a\u73af\u5883\u7ba1\u7406\u7684\u4e3b\u8981\u7ec4\u6210\u90e8\u5206\uff1a

              • \u96c6\u7fa4 \uff1a\u9009\u62e9\u9700\u8981\u64cd\u4f5c\u7684\u96c6\u7fa4\u3002
              • \u547d\u540d\u7a7a\u95f4 \uff1a\u9009\u62e9\u547d\u540d\u7a7a\u95f4\u4ee5\u9650\u5b9a\u64cd\u4f5c\u8303\u56f4\u3002
              • \u73af\u5883\u5217\u8868 \uff1a\u5c55\u793a\u5f53\u524d\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u73af\u5883\u53ca\u5176\u72b6\u6001\u3002

              \u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c \u540d\u79f0 \u73af\u5883\u7684\u540d\u79f0 my-environment \u72b6\u6001 \u73af\u5883\u5f53\u524d\u7684\u72b6\u6001\uff08\u6b63\u5e38\u6216\u5931\u8d25\uff09\uff0c\u65b0\u521b\u5efa\u73af\u5883\u6709\u4e00\u4e2a\u9884\u70ed\u8fc7\u7a0b\uff0c\u9884\u70ed\u6210\u529f\u540e\u5373\u53ef\u5728\u5176\u4ed6\u4efb\u52a1\u4e2d\u4f7f\u7528 \u6b63\u5e38 \u521b\u5efa\u65f6\u95f4 \u73af\u5883\u521b\u5efa\u7684\u65f6\u95f4 2023-10-01 10:00:00"},{"location":"end-user/baize/dataset/environments.html#_3","title":"\u521b\u5efa\u65b0\u73af\u5883","text":"

              \u5728 \u73af\u5883\u7ba1\u7406 \u754c\u9762\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u521b\u5efa\u73af\u5883\u7684\u6d41\u7a0b\u3002

              \u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c \u540d\u79f0 \u8f93\u5165\u73af\u5883\u7684\u540d\u79f0\uff0c\u957f\u5ea6\u4e3a 2-63 \u4e2a\u5b57\u7b26\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\u3002 my-environment \u90e8\u7f72\u4f4d\u7f6e \u96c6\u7fa4 \uff1a\u9009\u62e9\u9700\u8981\u90e8\u7f72\u7684\u96c6\u7fa4 gpu-cluster \u547d\u540d\u7a7a\u95f4 \uff1a\u9009\u62e9\u547d\u540d\u7a7a\u95f4 default \u5907\u6ce8 \u586b\u5199\u5907\u6ce8\u4fe1\u606f\u3002 \u8fd9\u662f\u4e00\u4e2a\u6d4b\u8bd5\u73af\u5883 \u6807\u7b7e \u4e3a\u73af\u5883\u6dfb\u52a0\u6807\u7b7e\u3002 env:test \u6ce8\u89e3 \u4e3a\u73af\u5883\u6dfb\u52a0\u6ce8\u89e3\u3002\u586b\u5199\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u8fdb\u5165\u73af\u5883\u914d\u7f6e\u3002 \u6ce8\u89e3\u793a\u4f8b"},{"location":"end-user/baize/dataset/environments.html#_4","title":"\u914d\u7f6e\u73af\u5883","text":"

              \u5728\u73af\u5883\u914d\u7f6e\u6b65\u9aa4\u4e2d\uff0c\u7528\u6237\u9700\u8981\u914d\u7f6e Python \u7248\u672c\u548c\u4f9d\u8d56\u5305\u7ba1\u7406\u5de5\u5177\u3002

              \u5b57\u6bb5 \u63cf\u8ff0 \u4e3e\u4f8b\u503c Python \u7248\u672c \u9009\u62e9\u6240\u9700\u7684 Python \u7248\u672c 3.12.3 \u5305\u7ba1\u7406\u5668 \u9009\u62e9\u5305\u7ba1\u7406\u5de5\u5177\uff0c\u53ef\u9009 PIP \u6216 CONDA PIP Environment Data \u5982\u679c\u9009\u62e9 PIP\uff1a\u5728\u4e0b\u65b9\u7f16\u8f91\u5668\u4e2d\u8f93\u5165 requirements.txt \u683c\u5f0f\u7684\u4f9d\u8d56\u5305\u5217\u8868\u3002 numpy==1.21.0 \u5982\u679c\u9009\u62e9 CONDA\uff1a\u5728\u4e0b\u65b9\u7f16\u8f91\u5668\u4e2d\u8f93\u5165 environment.yaml \u683c\u5f0f\u7684\u4f9d\u8d56\u5305\u5217\u8868\u3002 \u5176\u4ed6\u9009\u9879 pip \u989d\u5916\u7d22\u5f15\u5730\u5740 \uff1a\u914d\u7f6e pip \u989d\u5916\u7684\u7d22\u5f15\u5730\u5740\uff1b\u9002\u7528\u4e8e\u4f01\u4e1a\u5185\u90e8\u6709\u81ea\u5df1\u7684\u79c1\u6709\u4ed3\u5e93\u6216\u8005 PIP \u52a0\u901f\u7ad9\u70b9\u3002 https://pypi.example.com GPU \u914d\u7f6e \uff1a\u542f\u7528\u6216\u7981\u7528 GPU \u914d\u7f6e\uff1b\u90e8\u5206\u6d89\u53ca\u5230 GPU \u7684\u4f9d\u8d56\u5305\u9700\u8981\u5728\u9884\u52a0\u8f7d\u65f6\u914d\u7f6e GPU \u8d44\u6e90\u3002 \u542f\u7528 \u5173\u8054\u5b58\u50a8 \uff1a\u9009\u62e9\u5173\u8054\u7684\u5b58\u50a8\u914d\u7f6e\uff1b\u73af\u5883\u4f9d\u8d56\u5305\u4f1a\u5b58\u50a8\u5728\u5173\u8054\u5b58\u50a8\u4e2d\u3002\u6ce8\u610f\uff1a\u9700\u8981\u4f7f\u7528\u652f\u6301 ReadWriteMany \u7684\u5b58\u50a8\u3002 my-storage-config

              \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u521b\u5efa \u6309\u94ae\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u521b\u5efa\u5e76\u914d\u7f6e\u65b0\u7684 Python \u73af\u5883\u3002

              "},{"location":"end-user/baize/dataset/environments.html#_5","title":"\u6545\u969c\u6392\u9664","text":"
              • \u5982\u679c\u73af\u5883\u521b\u5efa\u5931\u8d25\uff1a

                • \u68c0\u67e5\u7f51\u7edc\u8fde\u63a5\u662f\u5426\u6b63\u5e38\u3002
                • \u786e\u8ba4\u586b\u5199\u7684 Python \u7248\u672c\u548c\u5305\u7ba1\u7406\u5668\u914d\u7f6e\u65e0\u8bef\u3002
                • \u786e\u4fdd\u6240\u9009\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u53ef\u7528\u3002
              • \u5982\u679c\u4f9d\u8d56\u9884\u70ed\u5931\u8d25\uff1a

                • \u68c0\u67e5 requirements.txt \u6216 environment.yaml \u6587\u4ef6\u683c\u5f0f\u662f\u5426\u6b63\u786e\u3002
                • \u786e\u8ba4\u4f9d\u8d56\u5305\u540d\u79f0\u548c\u7248\u672c\u662f\u5426\u6b63\u786e\u65e0\u8bef\u3002\u5982\u9047\u5230\u5176\u4ed6\u95ee\u9898\uff0c\u8bf7\u8054\u7cfb\u5e73\u53f0\u7ba1\u7406\u5458\u6216\u67e5\u770b\u5e73\u53f0\u5e2e\u52a9\u6587\u6863\u83b7\u53d6\u66f4\u591a\u652f\u6301\u3002

              \u4ee5\u4e0a\u5373\u4e3a\u5728 AI Lab \u4e2d\u7ba1\u7406 Python \u4f9d\u8d56\u5e93\u7684\u57fa\u672c\u64cd\u4f5c\u6b65\u9aa4\u548c\u6ce8\u610f\u4e8b\u9879\u3002

              "},{"location":"end-user/baize/inference/models.html","title":"\u4e86\u89e3\u6a21\u578b\u652f\u6301\u60c5\u51b5","text":"

              \u968f\u7740 AI Lab \u7684\u5feb\u901f\u8fed\u4ee3\uff0c\u6211\u4eec\u5df2\u7ecf\u652f\u6301\u4e86\u591a\u79cd\u6a21\u578b\u7684\u63a8\u7406\u670d\u52a1\uff0c\u60a8\u53ef\u4ee5\u5728\u8fd9\u91cc\u770b\u5230\u6240\u652f\u6301\u7684\u6a21\u578b\u4fe1\u606f\u3002

              • AI Lab v0.3.0 \u4e0a\u7ebf\u4e86\u6a21\u578b\u63a8\u7406\u670d\u52a1\uff0c\u9488\u5bf9\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\uff0c\u65b9\u4fbf\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528AI Lab \u7684\u63a8\u7406\u670d\u52a1\uff0c\u65e0\u9700\u5173\u5fc3\u6a21\u578b\u7684\u90e8\u7f72\u548c\u7ef4\u62a4\u3002
              • AI Lab v0.6.0 \u652f\u6301\u4e86\u5b8c\u6574\u7248\u672c\u7684 vLLM \u63a8\u7406\u80fd\u529b\uff0c\u652f\u6301\u8bf8\u591a\u5927\u8bed\u8a00\u6a21\u578b\uff0c\u5982 LLama\u3001Qwen\u3001ChatGLM \u7b49\u3002

              \u60a8\u53ef\u4ee5\u5728 AI Lab \u4e2d\u4f7f\u7528\u7ecf\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9a8c\u8bc1\u8fc7\u7684 GPU \u7c7b\u578b\uff1b \u66f4\u591a\u7ec6\u8282\u53c2\u9605 GPU \u652f\u6301\u77e9\u9635\u3002

              "},{"location":"end-user/baize/inference/models.html#triton-inference-server","title":"Triton Inference Server","text":"

              \u901a\u8fc7 Triton Inference Server \u53ef\u4ee5\u5f88\u597d\u7684\u652f\u6301\u4f20\u7edf\u7684\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\uff0c\u6211\u4eec\u76ee\u524d\u652f\u6301\u4e3b\u6d41\u7684\u63a8\u7406\u540e\u7aef\u670d\u52a1\uff1a

              Backend \u652f\u6301\u6a21\u578b\u683c\u5f0f \u4ecb\u7ecd pytorch TorchScript\u3001PyTorch 2.0 \u683c\u5f0f\u7684\u6a21\u578b triton-inference-server/pytorch_backend tensorflow TensorFlow 2.x triton-inference-server/tensorflow_backend vLLM(Deprecated) \u4e0e vLLM \u4e00\u81f4 \u652f\u6301\u7684\u6a21\u578b\u548c vLLM support Model \u4e00\u81f4

              Danger

              \u4f7f\u7528 Triton \u7684 Backend vLLM \u7684\u65b9\u5f0f\u5df2\u88ab\u5f03\u7528\uff0c\u63a8\u8350\u4f7f\u7528\u6700\u65b0\u652f\u6301 vLLM \u6765\u90e8\u7f72\u60a8\u7684\u5927\u8bed\u8a00\u6a21\u578b\u3002

              "},{"location":"end-user/baize/inference/models.html#vllm","title":"vLLM","text":"

              \u901a\u8fc7 vLLM \u6211\u4eec\u53ef\u4ee5\u5f88\u5feb\u7684\u4f7f\u7528\u5927\u8bed\u8a00\u6a21\u578b\uff0c\u60a8\u53ef\u4ee5\u5728\u8fd9\u91cc\u770b\u5230\u6211\u4eec\u652f\u6301\u7684\u6a21\u578b\u5217\u8868\uff0c\u8fd9\u901a\u5e38\u548c vLLM Support Models \u4fdd\u6301\u4e00\u81f4\u3002

              • HuggingFace \u6a21\u578b\uff1a\u6211\u4eec\u652f\u6301\u4e86 HuggingFace \u7684\u5927\u90e8\u5206\u6a21\u578b\uff0c\u60a8\u53ef\u4ee5\u5728 HuggingFace Model Hub \u67e5\u770b\u66f4\u591a\u6a21\u578b\u3002
              • vLLM \u652f\u6301\u6a21\u578b\u5217\u51fa\u4e86\u652f\u6301\u7684\u5927\u8bed\u8a00\u6a21\u578b\u548c\u89c6\u89c9\u8bed\u8a00\u6a21\u578b\u3002
              • \u4f7f\u7528 vLLM \u652f\u6301\u6846\u67b6\u7684\u6a21\u578b\u8fdb\u884c\u5fae\u8c03\u540e\u7684\u6a21\u578b\u3002
              "},{"location":"end-user/baize/inference/models.html#vllm_1","title":"vLLM \u65b0\u7279\u6027","text":"

              \u76ee\u524d\uff0cAI Lab \u8fd8\u652f\u6301\u5728\u4f7f\u7528 vLLM \u4f5c\u4e3a\u63a8\u7406\u5de5\u5177\u65f6\u7684\u4e00\u4e9b\u65b0\u7279\u6027\uff1a

              • \u5728\u63a8\u7406\u6a21\u578b\u65f6\uff0c\u542f\u7528 Lora Adapter \u6765\u4f18\u5316\u6a21\u578b\u63a8\u7406\u670d\u52a1
              • \u63d0\u4f9b\u517c\u5bb9 OpenAI \u7684 OpenAPI \u63a5\u53e3\uff0c\u65b9\u4fbf\u7528\u6237\u5207\u6362\u5230\u672c\u5730\u63a8\u7406\u670d\u52a1\u65f6\uff0c\u53ef\u4ee5\u4f4e\u6210\u672c\u7684\u5feb\u901f\u5207\u6362
              "},{"location":"end-user/baize/inference/models.html#_2","title":"\u4e0b\u4e00\u6b65","text":"
              • \u521b\u5efa Triton \u63a8\u7406\u670d\u52a1
              • \u521b\u5efa vLLM \u63a8\u7406\u670d\u52a1
              "},{"location":"end-user/baize/inference/triton-inference.html","title":"\u521b\u5efa Triton \u63a8\u7406\u670d\u52a1","text":"

              AI Lab \u76ee\u524d\u63d0\u4f9b\u4ee5 Triton\u3001vLLM \u4f5c\u4e3a\u63a8\u7406\u6846\u67b6\uff0c\u7528\u6237\u53ea\u9700\u7b80\u5355\u914d\u7f6e\u5373\u53ef\u5feb\u901f\u542f\u52a8\u4e00\u4e2a\u9ad8\u6027\u80fd\u7684\u63a8\u7406\u670d\u52a1\u3002

              Danger

              \u4f7f\u7528 Triton \u7684 Backend vLLM \u7684\u65b9\u5f0f\u5df2\u88ab\u5f03\u7528\uff0c\u63a8\u8350\u4f7f\u7528\u6700\u65b0\u652f\u6301 vLLM \u6765\u90e8\u7f72\u60a8\u7684\u5927\u8bed\u8a00\u6a21\u578b\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#triton_1","title":"Triton\u4ecb\u7ecd","text":"

              Triton \u662f\u7531 NVIDIA \u5f00\u53d1\u7684\u4e00\u4e2a\u5f00\u6e90\u63a8\u7406\u670d\u52a1\u5668\uff0c\u65e8\u5728\u7b80\u5316\u673a\u5668\u5b66\u4e60\u6a21\u578b\u7684\u90e8\u7f72\u548c\u63a8\u7406\u670d\u52a1\u3002\u5b83\u652f\u6301\u591a\u79cd\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5305\u62ec TensorFlow\u3001PyTorch \u7b49\uff0c\u4f7f\u5f97\u7528\u6237\u80fd\u591f\u8f7b\u677e\u7ba1\u7406\u548c\u90e8\u7f72\u4e0d\u540c\u7c7b\u578b\u7684\u6a21\u578b\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u51c6\u5907\u6a21\u578b\u6570\u636e\uff1a\u5728\u6570\u636e\u96c6\u7ba1\u7406\u4e2d\u7eb3\u7ba1\u6a21\u578b\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u6570\u636e\u6210\u529f\u9884\u52a0\u8f7d\uff0c\u4e0b\u9762\u4ee5 mnist \u624b\u5199\u6570\u5b57\u8bc6\u522b\u7684 PyTorch \u6a21\u578b\u4e3a\u4f8b\u3002

              Note

              \u5f85\u63a8\u7406\u7684\u6a21\u578b\u5728\u6570\u636e\u96c6\u4e2d\u9700\u8981\u9075\u4ee5\u4e0b\u76ee\u5f55\u683c\u5f0f\uff1a

                <model-repository-name>\n  \u2514\u2500\u2500 <model-name>\n     \u2514\u2500\u2500 <version>\n        \u2514\u2500\u2500 <model-definition-file>\n

              \u672c\u4f8b\u4e2d\u7684\u76ee\u5f55\u683c\u5f0f\u4e3a\uff1a

                  model-repo\n    \u2514\u2500\u2500 mnist-cnn\n        \u2514\u2500\u2500 1\n            \u2514\u2500\u2500 model.pt\n
              "},{"location":"end-user/baize/inference/triton-inference.html#_2","title":"\u521b\u5efa\u63a8\u7406\u670d\u52a1","text":"

              \u76ee\u524d\u5df2\u7ecf\u652f\u6301\u8868\u5355\u521b\u5efa\uff0c\u53ef\u4ee5\u754c\u9762\u5b57\u6bb5\u63d0\u793a\uff0c\u8fdb\u884c\u670d\u52a1\u521b\u5efa\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#_3","title":"\u914d\u7f6e\u6a21\u578b\u8def\u5f84","text":"

              \u6a21\u578b\u8def\u5f84 model-repo/mnist-cnn/1/model.pt \u9700\u8981\u548c\u6570\u636e\u96c6\u4e2d\u7684\u6a21\u578b\u76ee\u5f55\u683c\u5f0f\u4e00\u81f4\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#_4","title":"\u6a21\u578b\u914d\u7f6e","text":""},{"location":"end-user/baize/inference/triton-inference.html#_5","title":"\u914d\u7f6e\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570","text":"

              Note

              \u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u7684\u7b2c\u4e00\u4e2a\u7ef4\u5ea6\u9ed8\u8ba4\u4e3a batchsize \u7684\u5927\u5c0f\uff0c\u8bbe\u7f6e\u4e3a -1 \u53ef\u4ee5\u6839\u636e\u8f93\u5165\u7684\u63a8\u7406\u6570\u636e\u81ea\u52a8\u8ba1\u7b97 batchsize\u3002\u53c2\u6570\u5176\u4f59\u7ef4\u5ea6\u548c\u6570\u636e\u7c7b\u578b\u9700\u8981\u4e0e\u6a21\u578b\u8f93\u5165\u5339\u914d\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#_6","title":"\u914d\u7f6e\u73af\u5883","text":"

              \u53ef\u4ee5\u5bfc\u5165 \u73af\u5883\u7ba1\u7406 \u4e2d\u521b\u5efa\u7684\u73af\u5883\u4f5c\u4e3a\u63a8\u7406\u65f6\u7684\u8fd0\u884c\u73af\u5883\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#_7","title":"\u9ad8\u7ea7\u914d\u7f6e","text":""},{"location":"end-user/baize/inference/triton-inference.html#_8","title":"\u914d\u7f6e\u8ba4\u8bc1\u7b56\u7565","text":"

              \u652f\u6301 API key \u7684\u8bf7\u6c42\u65b9\u5f0f\u8ba4\u8bc1\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u5b9a\u4e49\u589e\u52a0\u8ba4\u8bc1\u53c2\u6570\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#_9","title":"\u4eb2\u548c\u6027\u8c03\u5ea6","text":"

              \u652f\u6301 \u6839\u636e GPU \u8d44\u6e90\u7b49\u8282\u70b9\u914d\u7f6e\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u4eb2\u548c\u6027\u8c03\u5ea6\uff0c\u540c\u65f6\u4e5f\u65b9\u4fbf\u7528\u6237\u81ea\u5b9a\u4e49\u8c03\u5ea6\u7b56\u7565\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#_10","title":"\u8bbf\u95ee","text":""},{"location":"end-user/baize/inference/triton-inference.html#api","title":"API \u8bbf\u95ee","text":"
              • Triton \u63d0\u4f9b\u4e86\u4e00\u4e2a\u57fa\u4e8e REST \u7684 API\uff0c\u5141\u8bb8\u5ba2\u6237\u7aef\u901a\u8fc7 HTTP POST \u8bf7\u6c42\u8fdb\u884c\u6a21\u578b\u63a8\u7406\u3002
              • \u5ba2\u6237\u7aef\u53ef\u4ee5\u53d1\u9001 JSON \u683c\u5f0f\u7684\u8bf7\u6c42\u4f53\uff0c\u5176\u4e2d\u5305\u542b\u8f93\u5165\u6570\u636e\u548c\u76f8\u5173\u7684\u5143\u6570\u636e\u3002
              "},{"location":"end-user/baize/inference/triton-inference.html#http","title":"HTTP \u8bbf\u95ee","text":"
              1. \u53d1\u9001 HTTP POST \u8bf7\u6c42\uff1a\u4f7f\u7528\u5de5\u5177\u5982 curl \u6216 HTTP \u5ba2\u6237\u7aef\u5e93\uff08\u5982 Python \u7684 requests \u5e93\uff09\u5411 Triton Server \u53d1\u9001 POST \u8bf7\u6c42\u3002

              2. \u8bbe\u7f6e HTTP \u5934\uff1a\u6839\u636e\u7528\u6237\u914d\u7f6e\u9879\u81ea\u52a8\u751f\u6210\u7684\u914d\u7f6e\uff0c\u5305\u542b\u6a21\u578b\u8f93\u5165\u548c\u8f93\u51fa\u7684\u5143\u6570\u636e\u3002

              3. \u6784\u5efa\u8bf7\u6c42\u4f53\uff1a\u8bf7\u6c42\u4f53\u901a\u5e38\u5305\u542b\u8981\u8fdb\u884c\u63a8\u7406\u7684\u8f93\u5165\u6570\u636e\uff0c\u4ee5\u53ca\u6a21\u578b\u7279\u5b9a\u7684\u5143\u6570\u636e\u3002

              "},{"location":"end-user/baize/inference/triton-inference.html#curl","title":"\u793a\u4f8b curl \u547d\u4ee4","text":"
                curl -X POST \"http://<ip>:<port>/v2/models/<inference-name>/infer\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"inputs\": [\n      {\n        \"name\": \"model_input\",            \n        \"shape\": [1, 1, 32, 32],          \n        \"datatype\": \"FP32\",               \n        \"data\": [\n          [0.1234, 0.5678, 0.9101, ... ]  \n        ]\n      }\n    ]\n  }'\n
              • <ip> \u662f Triton Inference Server \u8fd0\u884c\u7684\u4e3b\u673a\u5730\u5740\u3002
              • <port> \u662f Triton Inference Server \u8fd0\u884c\u7684\u4e3b\u673a\u7aef\u53e3\u53f7\u3002
              • <inference-name> \u662f\u6240\u521b\u5efa\u7684\u63a8\u7406\u670d\u52a1\u7684\u540d\u79f0\u3002
              • \"name\" \u8981\u4e0e\u6a21\u578b\u914d\u7f6e\u4e2d\u7684\u8f93\u5165\u53c2\u6570\u7684 name \u4e00\u81f4\u3002
              • \"shape\" \u8981\u4e0e\u6a21\u578b\u914d\u7f6e\u4e2d\u7684\u8f93\u5165\u53c2\u6570\u7684 dims \u4e00\u81f4\u3002
              • \"datatype\" \u8981\u4e0e\u6a21\u578b\u914d\u7f6e\u4e2d\u7684\u8f93\u5165\u53c2\u6570\u7684 Data Type \u4e00\u81f4\u3002
              • \"data\" \u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u63a8\u7406\u6570\u636e\u3002

              \u8bf7\u6ce8\u610f\uff0c\u4e0a\u8ff0\u793a\u4f8b\u4ee3\u7801\u9700\u8981\u6839\u636e\u4f60\u7684\u5177\u4f53\u6a21\u578b\u548c\u73af\u5883\u8fdb\u884c\u8c03\u6574\uff0c\u8f93\u5165\u6570\u636e\u7684\u683c\u5f0f\u548c\u5185\u5bb9\u4e5f\u9700\u8981\u7b26\u5408\u6a21\u578b\u7684\u8981\u6c42\u3002

              "},{"location":"end-user/baize/inference/vllm-inference.html","title":"\u521b\u5efa vLLM \u63a8\u7406\u670d\u52a1","text":"

              AI Lab \u652f\u6301\u4ee5 vLLM \u4f5c\u4e3a\u63a8\u7406\u670d\u52a1\uff0c\u63d0\u4f9b\u5168\u90e8 vLLM \u7684\u80fd\u529b\uff0c\u540c\u65f6\u63d0\u4f9b\u4e86\u5b8c\u5168\u9002\u914d OpenAI \u63a5\u53e3\u5b9a\u4e49\u3002

              "},{"location":"end-user/baize/inference/vllm-inference.html#vllm_1","title":"vLLM \u4ecb\u7ecd","text":"

              vLLM \u662f\u4e00\u4e2a\u5feb\u901f\u4e14\u6613\u4e8e\u4f7f\u7528\u7684\u7528\u4e8e\u63a8\u7406\u548c\u670d\u52a1\u7684\u5e93\uff0cvLLM \u65e8\u5728\u6781\u5927\u5730\u63d0\u5347\u5b9e\u65f6\u573a\u666f\u4e0b\u7684\u8bed\u8a00\u6a21\u578b\u670d\u52a1\u7684\u541e\u5410\u4e0e\u5185\u5b58\u4f7f\u7528\u6548\u7387\u3002vLLM \u5728\u901f\u5ea6\u3001\u7075\u6d3b\u6027\u65b9\u9762\u5177\u6709\u4ee5\u4e0b\u90e8\u5206\u7279\u70b9\uff1a

              • \u8fde\u7eed\u6279\u5904\u7406\u4f20\u5165\u8bf7\u6c42\uff1b
              • \u4f7f\u7528 PagedAttention \u9ad8\u6548\u7ba1\u7406\u6ce8\u610f\u529b\u952e\u548c\u503c\u5185\u5b58\uff1b
              • \u4e0e\u6d41\u884c\u7684 HuggingFace \u578b\u53f7\u65e0\u7f1d\u96c6\u6210\uff1b
              • \u517c\u5bb9 OpenAI \u7684 API \u670d\u52a1\u5668\u3002
              "},{"location":"end-user/baize/inference/vllm-inference.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u51c6\u5907\u6a21\u578b\u6570\u636e\uff1a\u5728\u6570\u636e\u96c6\u7ba1\u7406\u4e2d\u7eb3\u7ba1\u6a21\u578b\u4ee3\u7801\uff0c\u5e76\u4fdd\u8bc1\u6570\u636e\u6210\u529f\u9884\u52a0\u8f7d\u3002

              "},{"location":"end-user/baize/inference/vllm-inference.html#_2","title":"\u521b\u5efa\u63a8\u7406\u670d\u52a1","text":"
              1. \u9009\u62e9 vLLM \u63a8\u7406\u6846\u67b6\uff0c\u5e76\u5728\u9009\u62e9\u6a21\u578b\u6a21\u5757\u9009\u62e9\u63d0\u524d\u521b\u5efa\u597d\u7684\u6a21\u578b\u6570\u636e\u96c6 hdd-models \u5e76\u586b\u5199\u6570\u636e\u96c6\u4e2d\u6a21\u578b\u6240\u5728\u7684\u8def\u5f84\u4fe1\u606f\u3002

                \u672c\u6587\u63a8\u7406\u670d\u52a1\u7684\u521b\u5efa\u4f7f\u7528 ChatGLM3 \u6a21\u578b\u3002

              2. \u914d\u7f6e\u63a8\u7406\u670d\u52a1\u7684\u8d44\u6e90\uff0c\u5e76\u8c03\u6574\u63a8\u7406\u670d\u52a1\u8fd0\u884c\u7684\u53c2\u6570\u3002

                \u53c2\u6570\u540d \u63cf\u8ff0 GPU \u8d44\u6e90 \u6839\u636e\u6a21\u578b\u89c4\u6a21\u4ee5\u53ca\u96c6\u7fa4\u8d44\u6e90\u53ef\u4ee5\u4e3a\u63a8\u7406\u914d\u7f6e GPU \u8d44\u6e90\u3002 \u5141\u8bb8\u8fdc\u7a0b\u4ee3\u7801 \u63a7\u5236 vLLM \u662f\u5426\u4fe1\u4efb\u5e76\u6267\u884c\u6765\u81ea\u8fdc\u7a0b\u6e90\u7684\u4ee3\u7801 LoRA LoRA \u662f\u4e00\u79cd\u9488\u5bf9\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u7684\u53c2\u6570\u9ad8\u6548\u8c03\u6574\u6280\u672f\u3002\u5b83\u901a\u8fc7\u5c06\u539f\u59cb\u6a21\u578b\u53c2\u6570\u77e9\u9635\u5206\u89e3\u4e3a\u4f4e\u79e9\u77e9\u9635\uff0c\u4ece\u800c\u51cf\u5c11\u53c2\u6570\u6570\u91cf\u548c\u8ba1\u7b97\u590d\u6742\u5ea6\u3002 1. --lora-modules\uff1a\u7528\u6765\u6307\u5b9a\u7279\u5b9a\u6a21\u5757\u6216\u5c42\u8fdb\u884c\u4f4e\u79e9\u8fd1\u4f3c 2. max_loras_rank\uff1a\u7528\u6765\u6307\u5b9a LoRA \u6a21\u578b\u4e2d\u6bcf\u4e2a\u9002\u914d\u5c42\u7684\u6700\u5927\u79e9\uff0c\u5bf9\u4e8e\u7b80\u5355\u7684\u4efb\u52a1\uff0c\u53ef\u4ee5\u9009\u62e9\u8f83\u5c0f\u7684\u79e9\u503c\uff0c\u800c\u5bf9\u4e8e\u590d\u6742\u4efb\u52a1\uff0c\u53ef\u80fd\u9700\u8981\u8f83\u5927\u7684\u79e9\u503c\u6765\u4fdd\u8bc1\u6a21\u578b\u6027\u80fd\u3002 3. max_loras\uff1a\u8868\u793a\u6a21\u578b\u4e2d\u53ef\u4ee5\u5305\u542b\u7684 LoRA \u5c42\u7684\u6700\u5927\u6570\u91cf\uff0c\u6839\u636e\u6a21\u578b\u5927\u5c0f\u3001\u63a8\u7406\u590d\u6742\u5ea6\u7b49\u56e0\u7d20\u81ea\u5b9a 4. max_cpu_loras\uff1a\u7528\u4e8e\u6307\u5b9a\u5728 CPU \u73af\u5883\u4e2d\u53ef\u4ee5\u5904\u7406\u7684 LoRA \u5c42\u7684\u6700\u5927\u6570\u3002 \u5173\u8054\u73af\u5883 \u901a\u8fc7\u9009\u62e9\u73af\u5883\u9884\u5b9a\u4e49\u63a8\u7406\u65f6\u6240\u9700\u7684\u73af\u5883\u4f9d\u8d56\u3002

                Info

                \u652f\u6301\u914d\u7f6e LoRA \u53c2\u6570\u7684\u6a21\u578b\u53ef\u53c2\u8003 vLLM \u652f\u6301\u7684\u6a21\u578b\u3002

              3. \u5728 \u9ad8\u7ea7\u914d\u7f6e \u4e2d\uff0c\u652f\u6301\u6839\u636e GPU \u8d44\u6e90\u7b49\u8282\u70b9\u914d\u7f6e\u5b9e\u73b0\u81ea\u52a8\u5316\u7684\u4eb2\u548c\u6027\u8c03\u5ea6\uff0c\u540c\u65f6\u4e5f\u65b9\u4fbf\u7528\u6237\u81ea\u5b9a\u4e49\u8c03\u5ea6\u7b56\u7565\u3002

              "},{"location":"end-user/baize/inference/vllm-inference.html#_3","title":"\u9a8c\u8bc1\u63a8\u7406\u670d\u52a1","text":"

              \u63a8\u7406\u670d\u52a1\u521b\u5efa\u5b8c\u6210\u4e4b\u540e\uff0c\u70b9\u51fb\u63a8\u7406\u670d\u52a1\u540d\u79f0\u8fdb\u5165\u8be6\u60c5\uff0c\u67e5\u770b API \u8c03\u7528\u65b9\u6cd5\u3002\u901a\u8fc7\u4f7f\u7528 Curl\u3001Python\u3001Nodejs \u7b49\u65b9\u5f0f\u9a8c\u8bc1\u6267\u884c\u7ed3\u679c\u3002

              \u62f7\u8d1d\u8be6\u60c5\u4e2d\u7684 curl \u547d\u4ee4\uff0c\u5e76\u5728\u7ec8\u7aef\u4e2d\u6267\u884c\u547d\u4ee4\u53d1\u9001\u4e00\u6761\u6a21\u578b\u63a8\u7406\u8bf7\u6c42\uff0c\u9884\u671f\u8f93\u51fa\uff1a

              "},{"location":"end-user/baize/jobs/create.html","title":"\u521b\u5efa\u4efb\u52a1\uff08Job\uff09","text":"

              \u4efb\u52a1\u7ba1\u7406\u662f\u6307\u901a\u8fc7\u4f5c\u4e1a\u8c03\u5ea6\u548c\u7ba1\u63a7\u7ec4\u4ef6\u6765\u521b\u5efa\u548c\u7ba1\u7406\u4efb\u52a1\u751f\u547d\u5468\u671f\u7684\u529f\u80fd\u3002

              AI Lab \u91c7\u7528 Kubernetes \u7684 Job \u673a\u5236\u6765\u8c03\u5ea6\u5404\u9879 AI \u63a8\u7406\u3001\u8bad\u7ec3\u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/create.html#_1","title":"\u901a\u7528\u6b65\u9aa4","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u4efb\u52a1\u4e2d\u5fc3 -> \u8bad\u7ec3\u4efb\u52a1 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

              2. \u7cfb\u7edf\u4f1a\u9884\u5148\u586b\u5145\u57fa\u7840\u914d\u7f6e\u6570\u636e\uff0c\u5305\u62ec\u8981\u90e8\u7f72\u7684\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u4efb\u52a1\u7c7b\u578b\u3001\u961f\u5217\u3001\u4f18\u5148\u7ea7\u7b49\u3002 \u8c03\u6574\u8fd9\u4e9b\u53c2\u6570\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              3. \u914d\u7f6e\u955c\u50cf\u5730\u5740\u3001\u8fd0\u884c\u53c2\u6570\u4ee5\u53ca\u5173\u8054\u7684\u6570\u636e\u96c6\u3001\u73af\u5883\u548c\u8d44\u6e90\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

              4. \u6309\u9700\u6dfb\u52a0\u6807\u7b7e\u3001\u6ce8\u89e3\u3001\u73af\u5883\u53d8\u91cf\u7b49\u4efb\u52a1\u53c2\u6570\uff0c\u9009\u62e9\u8c03\u5ea6\u7b56\u7565\u540e\u70b9\u51fb \u786e\u5b9a \u3002

              5. \u4efb\u52a1\u521b\u5efa\u6210\u529f\u540e\uff0c\u4f1a\u6709\u51e0\u79cd\u8fd0\u884c\u72b6\u6001\uff1a

                • \u8fd0\u884c\u4e2d
                • \u6392\u961f\u4e2d
                • \u63d0\u4ea4\u6210\u529f\u3001\u63d0\u4ea4\u5931\u8d25
                • \u4efb\u52a1\u6210\u529f\u3001\u4efb\u52a1\u5931\u8d25
              "},{"location":"end-user/baize/jobs/create.html#_2","title":"\u521b\u5efa\u7279\u5b9a\u4efb\u52a1","text":"
              • \u521b\u5efa Pytorch \u4efb\u52a1
              • \u521b\u5efa TensorFlow \u4efb\u52a1
              • \u521b\u5efa MPI \u4efb\u52a1
              • \u521b\u5efa MXNet \u4efb\u52a1
              • \u521b\u5efa PaddlePaddle \u4efb\u52a1
              "},{"location":"end-user/baize/jobs/delete.html","title":"\u5220\u9664\u4efb\u52a1\uff08Job\uff09","text":"

              \u5982\u679c\u53d1\u73b0\u4efb\u52a1\u5197\u4f59\u3001\u8fc7\u671f\u6216\u56e0\u5176\u4ed6\u7f18\u6545\u4e0d\u518d\u9700\u8981\uff0c\u53ef\u4ee5\u4ece\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u4e2d\u5220\u9664\u3002

              1. \u5728\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

              2. \u5728\u5f39\u7a97\u4e2d\u786e\u8ba4\u8981\u5220\u9664\u7684\u4efb\u52a1\uff0c\u8f93\u5165\u4efb\u52a1\u540d\u79f0\u540e\u70b9\u51fb \u5220\u9664 \u3002

              3. \u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\uff0c\u8be5\u4efb\u52a1\u4ece\u5217\u8868\u4e2d\u6d88\u5931\u3002

              Caution

              \u4efb\u52a1\u4e00\u65e6\u5220\u9664\u5c06\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

              "},{"location":"end-user/baize/jobs/mpi.html","title":"MPI \u4efb\u52a1","text":"

              MPI\uff08Message Passing Interface\uff09\u662f\u4e00\u79cd\u7528\u4e8e\u5e76\u884c\u8ba1\u7b97\u7684\u901a\u4fe1\u534f\u8bae\uff0c\u5b83\u5141\u8bb8\u591a\u4e2a\u8ba1\u7b97\u8282\u70b9\u4e4b\u95f4\u8fdb\u884c\u6d88\u606f\u4f20\u9012\u548c\u534f\u4f5c\u3002 MPI \u4efb\u52a1\u662f\u4f7f\u7528 MPI \u534f\u8bae\u8fdb\u884c\u5e76\u884c\u8ba1\u7b97\u7684\u4efb\u52a1\uff0c\u9002\u7528\u4e8e\u9700\u8981\u5927\u89c4\u6a21\u5e76\u884c\u5904\u7406\u7684\u5e94\u7528\u573a\u666f\uff0c\u4f8b\u5982\u5206\u5e03\u5f0f\u8bad\u7ec3\u3001\u79d1\u5b66\u8ba1\u7b97\u7b49\u3002

              \u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86 MPI \u4efb\u52a1\u7684\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa MPI \u4efb\u52a1\uff0c\u8fdb\u884c\u9ad8\u6027\u80fd\u7684\u5e76\u884c\u8ba1\u7b97\u3002 \u672c\u6559\u7a0b\u5c06\u6307\u5bfc\u60a8\u5982\u4f55\u5728 AI Lab \u4e2d\u521b\u5efa\u548c\u8fd0\u884c\u4e00\u4e2a MPI \u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/mpi.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
              • \u4efb\u52a1\u7c7b\u578b \uff1aMPI\uff0c\u7528\u4e8e\u8fd0\u884c\u5e76\u884c\u8ba1\u7b97\u4efb\u52a1\u3002
              • \u8fd0\u884c\u73af\u5883 \uff1a\u9009\u7528\u9884\u88c5\u4e86 MPI \u73af\u5883\u7684\u955c\u50cf\uff0c\u6216\u8005\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u5b89\u88c5\u5fc5\u8981\u7684\u4f9d\u8d56\u3002
              • MPIJob \u914d\u7f6e \uff1a\u7406\u89e3\u5e76\u914d\u7f6e MPIJob \u7684\u5404\u9879\u53c2\u6570\uff0c\u5982\u526f\u672c\u6570\u3001\u8d44\u6e90\u8bf7\u6c42\u7b49\u3002
              "},{"location":"end-user/baize/jobs/mpi.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

              \u5728\u8fd9\u91cc\u6211\u4eec\u4f7f\u7528 baize-notebook \u57fa\u7840\u955c\u50cf\u548c \u5173\u8054\u73af\u5883 \u7684\u65b9\u5f0f\u6765\u4f5c\u4e3a\u4efb\u52a1\u7684\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002 \u786e\u4fdd\u8fd0\u884c\u73af\u5883\u4e2d\u5305\u542b MPI \u53ca\u76f8\u5173\u5e93\uff0c\u5982 OpenMPI\u3001mpi4py \u7b49\u3002

              \u6ce8\u610f \uff1a\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u73af\u5883\uff0c\u8bf7\u53c2\u8003\u73af\u5883\u5217\u8868\u3002

              "},{"location":"end-user/baize/jobs/mpi.html#mpi_1","title":"\u521b\u5efa MPI \u4efb\u52a1","text":""},{"location":"end-user/baize/jobs/mpi.html#mpi_2","title":"MPI \u4efb\u52a1\u521b\u5efa\u6b65\u9aa4","text":"
              1. \u767b\u5f55\u5e73\u53f0 \uff1a\u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3\uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
              2. \u521b\u5efa\u4efb\u52a1 \uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b \uff1a\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\uff0c\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a MPI\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
              4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f \uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cbenchmarks-mpi\u201d\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
              5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570 \uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\uff0c\u914d\u7f6e\u4efb\u52a1\u7684\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u4fe1\u606f\u3002
              "},{"location":"end-user/baize/jobs/mpi.html#_3","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4 \uff1a\u4f7f\u7528 mpirun\uff0c\u8fd9\u662f\u8fd0\u884c MPI \u7a0b\u5e8f\u7684\u547d\u4ee4\u3002
              • \u547d\u4ee4\u53c2\u6570 \uff1a\u8f93\u5165\u60a8\u8981\u8fd0\u884c\u7684 MPI \u7a0b\u5e8f\u7684\u53c2\u6570\u3002

              \u793a\u4f8b\uff1a\u8fd0\u884c TensorFlow Benchmarks

              \u5728\u672c\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u5c06\u8fd0\u884c\u4e00\u4e2a TensorFlow \u7684\u57fa\u51c6\u6d4b\u8bd5\u7a0b\u5e8f\uff0c\u4f7f\u7528 Horovod \u8fdb\u884c\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002 \u9996\u5148\uff0c\u786e\u4fdd\u60a8\u4f7f\u7528\u7684\u955c\u50cf\u4e2d\u5305\u542b\u6240\u9700\u7684\u4f9d\u8d56\u9879\uff0c\u4f8b\u5982 TensorFlow\u3001Horovod\u3001Open MPI \u7b49\u3002

              \u955c\u50cf\u9009\u62e9 \uff1a\u4f7f\u7528\u5305\u542b TensorFlow \u548c MPI \u7684\u955c\u50cf\uff0c\u4f8b\u5982 mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest\u3002

              \u547d\u4ee4\u53c2\u6570 \uff1a

              mpirun --allow-run-as-root -np 2 -bind-to none -map-by slot \\\n  -x NCCL_DEBUG=INFO -x LD_LIBRARY_PATH -x PATH \\\n  -mca pml ob1 -mca btl ^openib \\\n  python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \\\n  --model=resnet101 --batch_size=64 --variable_update=horovod\n

              \u8bf4\u660e \uff1a

              • mpirun\uff1aMPI \u7684\u542f\u52a8\u547d\u4ee4\u3002
              • --allow-run-as-root\uff1a\u5141\u8bb8\u4ee5 root \u7528\u6237\u8fd0\u884c\uff08\u5728\u5bb9\u5668\u4e2d\u901a\u5e38\u662f root \u7528\u6237\uff09\u3002
              • -np 2\uff1a\u6307\u5b9a\u8fd0\u884c\u7684\u8fdb\u7a0b\u6570\u4e3a 2\u3002
              • -bind-to none\uff0c-map-by slot\uff1aMPI \u8fdb\u7a0b\u7ed1\u5b9a\u548c\u6620\u5c04\u7684\u914d\u7f6e\u3002
              • -x NCCL_DEBUG=INFO\uff1a\u8bbe\u7f6e NCCL\uff08NVIDIA Collective Communication Library\uff09\u7684\u8c03\u8bd5\u4fe1\u606f\u7ea7\u522b\u3002
              • -x LD_LIBRARY_PATH\uff0c-x PATH\uff1a\u5728 MPI \u73af\u5883\u4e2d\u4f20\u9012\u5fc5\u8981\u7684\u73af\u5883\u53d8\u91cf\u3002
              • -mca pml ob1 -mca btl ^openib\uff1aMPI \u7684\u914d\u7f6e\u53c2\u6570\uff0c\u6307\u5b9a\u4f20\u8f93\u5c42\u548c\u6d88\u606f\u5c42\u534f\u8bae\u3002
              • python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py\uff1a\u8fd0\u884c TensorFlow \u57fa\u51c6\u6d4b\u8bd5\u811a\u672c\u3002
              • --model=resnet101\uff0c--batch_size=64\uff0c--variable_update=horovod\uff1aTensorFlow \u811a\u672c\u7684\u53c2\u6570\uff0c\u6307\u5b9a\u6a21\u578b\u3001\u6279\u91cf\u5927\u5c0f\u548c\u4f7f\u7528 Horovod \u8fdb\u884c\u53c2\u6570\u66f4\u65b0\u3002
              "},{"location":"end-user/baize/jobs/mpi.html#_4","title":"\u8d44\u6e90\u914d\u7f6e","text":"

              \u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u9700\u8981\u4e3a\u6bcf\u4e2a\u8282\u70b9\uff08Launcher \u548c Worker\uff09\u5206\u914d\u9002\u5f53\u7684\u8d44\u6e90\uff0c\u4f8b\u5982 CPU\u3001\u5185\u5b58\u548c GPU\u3002

              \u8d44\u6e90\u793a\u4f8b \uff1a

              • Launcher\uff08\u542f\u52a8\u5668\uff09 \uff1a

                • \u526f\u672c\u6570 \uff1a1
                • \u8d44\u6e90\u8bf7\u6c42 \uff1a
                  • CPU\uff1a2 \u6838
                  • \u5185\u5b58\uff1a4 GiB
              • Worker\uff08\u5de5\u4f5c\u8282\u70b9\uff09 \uff1a

                • \u526f\u672c\u6570 \uff1a2
                • \u8d44\u6e90\u8bf7\u6c42 \uff1a
                  • CPU\uff1a2 \u6838
                  • \u5185\u5b58\uff1a4 GiB
                  • GPU\uff1a\u6839\u636e\u9700\u6c42\u5206\u914d
              "},{"location":"end-user/baize/jobs/mpi.html#mpijob","title":"\u5b8c\u6574\u7684 MPIJob \u914d\u7f6e\u793a\u4f8b","text":"

              \u4ee5\u4e0b\u662f\u5b8c\u6574\u7684 MPIJob \u914d\u7f6e\u793a\u4f8b\uff0c\u4f9b\u60a8\u53c2\u8003\u3002

              apiVersion: kubeflow.org/v1\nkind: MPIJob\nmetadata:\n  name: tensorflow-benchmarks\nspec:\n  slotsPerWorker: 1\n  runPolicy:\n    cleanPodPolicy: Running\n  mpiReplicaSpecs:\n    Launcher:\n      replicas: 1\n      template:\n        spec:\n          containers:\n            - name: tensorflow-benchmarks\n              image: mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest\n              command:\n                - mpirun\n                - --allow-run-as-root\n                - -np\n                - \"2\"\n                - -bind-to\n                - none\n                - -map-by\n                - slot\n                - -x\n                - NCCL_DEBUG=INFO\n                - -x\n                - LD_LIBRARY_PATH\n                - -x\n                - PATH\n                - -mca\n                - pml\n                - ob1\n                - -mca\n                - btl\n                - ^openib\n                - python\n                - scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py\n                - --model=resnet101\n                - --batch_size=64\n                - --variable_update=horovod\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n    Worker:\n      replicas: 2\n      template:\n        spec:\n          containers:\n            - name: tensorflow-benchmarks\n              image: mai.daocloud.io/docker.io/mpioperator/tensorflow-benchmarks:latest\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpumem: 1k\n                  nvidia.com/vgpu: \"1\"\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n

              \u914d\u7f6e\u89e3\u6790 \uff1a

              • apiVersion \u548c kind\uff1a\u8868\u793a\u8d44\u6e90\u7684 API \u7248\u672c\u548c\u7c7b\u578b\uff0cMPIJob \u662f Kubeflow \u5b9a\u4e49\u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\uff0c\u7528\u4e8e\u521b\u5efa MPI \u7c7b\u578b\u7684\u4efb\u52a1\u3002
              • metadata\uff1a\u5143\u6570\u636e\uff0c\u5305\u542b\u4efb\u52a1\u7684\u540d\u79f0\u7b49\u4fe1\u606f\u3002
              • spec\uff1a\u4efb\u52a1\u7684\u8be6\u7ec6\u914d\u7f6e\u3002
                • slotsPerWorker\uff1a\u6bcf\u4e2a Worker \u8282\u70b9\u7684\u69fd\u4f4d\u6570\u91cf\uff0c\u901a\u5e38\u8bbe\u7f6e\u4e3a 1\u3002
                • runPolicy\uff1a\u8fd0\u884c\u7b56\u7565\uff0c\u4f8b\u5982\u4efb\u52a1\u5b8c\u6210\u540e\u662f\u5426\u6e05\u7406 Pod\u3002
                • mpiReplicaSpecs\uff1aMPI \u4efb\u52a1\u7684\u526f\u672c\u914d\u7f6e\u3002
                  • Launcher\uff1a\u542f\u52a8\u5668\uff0c\u8d1f\u8d23\u542f\u52a8 MPI \u4efb\u52a1\u3002
                    • replicas\uff1a\u526f\u672c\u6570\uff0c\u901a\u5e38\u4e3a 1\u3002
                    • template\uff1aPod \u6a21\u677f\uff0c\u5b9a\u4e49\u5bb9\u5668\u8fd0\u884c\u7684\u955c\u50cf\u3001\u547d\u4ee4\u3001\u8d44\u6e90\u7b49\u3002
                  • Worker\uff1a\u5de5\u4f5c\u8282\u70b9\uff0c\u5b9e\u9645\u6267\u884c\u4efb\u52a1\u7684\u8ba1\u7b97\u8282\u70b9\u3002
                    • replicas\uff1a\u526f\u672c\u6570\uff0c\u6839\u636e\u5e76\u884c\u9700\u6c42\u8bbe\u7f6e\uff0c\u8fd9\u91cc\u8bbe\u7f6e\u4e3a 2\u3002
                    • template\uff1aPod \u6a21\u677f\uff0c\u540c\u6837\u5b9a\u4e49\u5bb9\u5668\u7684\u8fd0\u884c\u73af\u5883\u548c\u8d44\u6e90\u3002
              "},{"location":"end-user/baize/jobs/mpi.html#_5","title":"\u8bbe\u7f6e\u4efb\u52a1\u526f\u672c\u6570","text":"

              \u5728\u521b\u5efa MPI \u4efb\u52a1\u65f6\uff0c\u9700\u8981\u6839\u636e mpiReplicaSpecs \u4e2d\u914d\u7f6e\u7684\u526f\u672c\u6570\uff0c\u6b63\u786e\u8bbe\u7f6e \u4efb\u52a1\u526f\u672c\u6570\u3002

              • \u603b\u526f\u672c\u6570 = Launcher \u526f\u672c\u6570 + Worker \u526f\u672c\u6570
              • \u672c\u793a\u4f8b\u4e2d\uff1a

                • Launcher \u526f\u672c\u6570\uff1a1
                • Worker \u526f\u672c\u6570\uff1a2
                • \u603b\u526f\u672c\u6570 \uff1a1 + 2 = 3

              \u56e0\u6b64\uff0c\u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u60a8\u9700\u8981\u5c06 \u4efb\u52a1\u526f\u672c\u6570 \u8bbe\u7f6e\u4e3a 3\u3002

              "},{"location":"end-user/baize/jobs/mpi.html#_6","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

              \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c MPI \u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/mpi.html#_7","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

              \u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u60a8\u53ef\u4ee5\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u548c\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u3002 \u4ece\u53f3\u4e0a\u89d2\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\uff0c\u53ef\u4ee5\u67e5\u770b\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u6bcf\u4e2a\u8282\u70b9\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

              \u793a\u4f8b\u8f93\u51fa\uff1a

              TensorFlow:  1.13\nModel:       resnet101\nMode:        training\nBatch size:  64\n...\n\nTotal images/sec: 125.67\n

              \u8fd9\u8868\u793a MPI \u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0cTensorFlow \u57fa\u51c6\u6d4b\u8bd5\u7a0b\u5e8f\u5b8c\u6210\u4e86\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002

              "},{"location":"end-user/baize/jobs/mpi.html#_8","title":"\u5c0f\u7ed3","text":"

              \u901a\u8fc7\u672c\u6559\u7a0b\uff0c\u60a8\u5b66\u4e60\u4e86\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c\u4e00\u4e2a MPI \u4efb\u52a1\u3002\u6211\u4eec\u8be6\u7ec6\u4ecb\u7ecd\u4e86 MPIJob \u7684\u914d\u7f6e\u65b9\u5f0f\uff0c \u4ee5\u53ca\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u8fd0\u884c\u7684\u547d\u4ee4\u548c\u8d44\u6e90\u9700\u6c42\u3002\u5e0c\u671b\u672c\u6559\u7a0b\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9\uff0c\u5982\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u5e73\u53f0\u63d0\u4f9b\u7684\u5176\u4ed6\u6587\u6863\u6216\u8054\u7cfb\u6280\u672f\u652f\u6301\u3002

              \u9644\u5f55 \uff1a

              • \u5982\u679c\u60a8\u7684\u8fd0\u884c\u73af\u5883\u672a\u9884\u88c5\u6240\u9700\u7684\u5e93\uff08\u5982 mpi4py\u3001Horovod \u7b49\uff09\uff0c\u8bf7\u5728\u4efb\u52a1\u4e2d\u6dfb\u52a0\u5b89\u88c5\u547d\u4ee4\uff0c\u6216\u8005\u4f7f\u7528\u9884\u88c5\u4e86\u76f8\u5173\u4f9d\u8d56\u7684\u955c\u50cf\u3002
              • \u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u4fee\u6539 MPIJob \u7684\u914d\u7f6e\uff0c\u4f8b\u5982\u66f4\u6539\u955c\u50cf\u3001\u547d\u4ee4\u53c2\u6570\u3001\u8d44\u6e90\u8bf7\u6c42\u7b49\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html","title":"MXNet \u4efb\u52a1","text":"

              Warning

              \u7531\u4e8e Apache MXNet \u9879\u76ee\u5df2\u5b58\u6863\uff0c\u56e0\u6b64 Kubeflow MXJob \u5c06\u5728\u672a\u6765\u7684 Training Operator 1.9 \u7248\u672c\u4e2d\u5f03\u7528\u548c\u5220\u9664\u3002

              Apache MXNet \u662f\u4e00\u4e2a\u9ad8\u6027\u80fd\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u652f\u6301\u591a\u79cd\u7f16\u7a0b\u8bed\u8a00\u3002MXNet \u4efb\u52a1\u53ef\u4ee5\u4f7f\u7528\u591a\u79cd\u65b9\u5f0f\u8fdb\u884c\u8bad\u7ec3\uff0c\u5305\u62ec\u5355\u673a\u6a21\u5f0f\u548c\u5206\u5e03\u5f0f\u6a21\u5f0f\u3002\u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86\u5bf9 MXNet \u4efb\u52a1\u7684\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa MXNet \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

              \u672c\u6559\u7a0b\u5c06\u6307\u5bfc\u60a8\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c MXNet \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
              • \u4efb\u52a1\u7c7b\u578b\uff1aMXNet\uff0c\u652f\u6301\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4e24\u79cd\u6a21\u5f0f\u3002
              • \u8fd0\u884c\u73af\u5883\uff1a\u9009\u62e9\u5305\u542b MXNet \u6846\u67b6\u7684\u955c\u50cf\uff0c\u6216\u5728\u4efb\u52a1\u4e2d\u5b89\u88c5\u5fc5\u8981\u7684\u4f9d\u8d56\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

              \u6211\u4eec\u4f7f\u7528 release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest \u955c\u50cf\u4f5c\u4e3a\u4efb\u52a1\u7684\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002\u8be5\u955c\u50cf\u9884\u88c5\u4e86 MXNet \u53ca\u5176\u76f8\u5173\u4f9d\u8d56\uff0c\u652f\u6301 GPU \u52a0\u901f\u3002

              \u6ce8\u610f\uff1a\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u548c\u7ba1\u7406\u73af\u5883\uff0c\u8bf7\u53c2\u8003 \u73af\u5883\u5217\u8868\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#mxnet_1","title":"\u521b\u5efa MXNet \u4efb\u52a1","text":""},{"location":"end-user/baize/jobs/mxnet.html#mxnet_2","title":"MXNet \u5355\u673a\u4efb\u52a1","text":""},{"location":"end-user/baize/jobs/mxnet.html#_3","title":"\u521b\u5efa\u6b65\u9aa4","text":"
              1. \u767b\u5f55\u5e73\u53f0\uff1a\u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3\uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
              2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\uff0c\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a MXNet\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
              4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cMXNet \u5355\u673a\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
              5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\uff0c\u914d\u7f6e\u4efb\u52a1\u7684\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u4fe1\u606f\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html#_4","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4\uff1apython3
              • \u547d\u4ee4\u53c2\u6570\uff1a

                /mxnet/mxnet/example/gluon/mnist/mnist.py --epochs 10 --cuda\n

                \u8bf4\u660e\uff1a

                • /mxnet/mxnet/example/gluon/mnist/mnist.py\uff1aMXNet \u63d0\u4f9b\u7684 MNIST \u624b\u5199\u6570\u5b57\u8bc6\u522b\u793a\u4f8b\u811a\u672c\u3002
                • --epochs 10\uff1a\u8bbe\u7f6e\u8bad\u7ec3\u8f6e\u6570\u4e3a 10\u3002
                • --cuda\uff1a\u4f7f\u7528 CUDA \u8fdb\u884c GPU \u52a0\u901f\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html#_5","title":"\u8d44\u6e90\u914d\u7f6e","text":"
              • \u526f\u672c\u6570\uff1a1\uff08\u5355\u673a\u4efb\u52a1\uff09
              • \u8d44\u6e90\u8bf7\u6c42\uff1a
                • CPU\uff1a2 \u6838
                • \u5185\u5b58\uff1a4 GiB
                • GPU\uff1a1 \u5757
              "},{"location":"end-user/baize/jobs/mxnet.html#mxjob","title":"\u5b8c\u6574\u7684 MXJob \u914d\u7f6e\u793a\u4f8b","text":"

              \u4ee5\u4e0b\u662f\u5355\u673a MXJob \u7684 YAML \u914d\u7f6e\uff1a

              apiVersion: \"kubeflow.org/v1\"\nkind: \"MXJob\"\nmetadata:\n  name: \"mxnet-single-job\"\nspec:\n  jobMode: MXTrain\n  mxReplicaSpecs:\n    Worker:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              command: [\"python3\"]\n              args:\n                [\n                  \"/mxnet/mxnet/example/gluon/mnist/mnist.py\",\n                  \"--epochs\",\n                  \"10\",\n                  \"--cuda\",\n                ]\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n

              \u914d\u7f6e\u89e3\u6790\uff1a

              • apiVersion \u548c kind\uff1a\u6307\u5b9a\u8d44\u6e90\u7684 API \u7248\u672c\u548c\u7c7b\u578b\uff0c\u8fd9\u91cc\u662f MXJob\u3002
              • metadata\uff1a\u5143\u6570\u636e\uff0c\u5305\u62ec\u4efb\u52a1\u540d\u79f0\u7b49\u4fe1\u606f\u3002
              • spec\uff1a\u4efb\u52a1\u7684\u8be6\u7ec6\u914d\u7f6e\u3002
                • jobMode\uff1a\u8bbe\u7f6e\u4e3a MXTrain\uff0c\u8868\u793a\u8bad\u7ec3\u4efb\u52a1\u3002
                • mxReplicaSpecs\uff1aMXNet \u4efb\u52a1\u7684\u526f\u672c\u914d\u7f6e\u3002
                  • Worker\uff1a\u6307\u5b9a\u5de5\u4f5c\u8282\u70b9\u7684\u914d\u7f6e\u3002
                    • replicas\uff1a\u526f\u672c\u6570\uff0c\u8fd9\u91cc\u4e3a 1\u3002
                    • restartPolicy\uff1a\u91cd\u542f\u7b56\u7565\uff0c\u8bbe\u4e3a Never\uff0c\u8868\u793a\u4efb\u52a1\u5931\u8d25\u65f6\u4e0d\u91cd\u542f\u3002
                    • template\uff1aPod \u6a21\u677f\uff0c\u5b9a\u4e49\u5bb9\u5668\u7684\u8fd0\u884c\u73af\u5883\u548c\u8d44\u6e90\u3002
                      • containers\uff1a\u5bb9\u5668\u5217\u8868\u3002
                        • name\uff1a\u5bb9\u5668\u540d\u79f0\u3002
                        • image\uff1a\u4f7f\u7528\u7684\u955c\u50cf\u3002
                        • command \u548c args\uff1a\u542f\u52a8\u547d\u4ee4\u548c\u53c2\u6570\u3002
                        • ports\uff1a\u5bb9\u5668\u7aef\u53e3\u914d\u7f6e\u3002
                        • resources\uff1a\u8d44\u6e90\u8bf7\u6c42\u548c\u9650\u5236\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html#_6","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

              \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c MXNet \u5355\u673a\u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#_7","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

              \u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u60a8\u53ef\u4ee5\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u548c\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u3002\u4ece\u53f3\u4e0a\u89d2\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\uff0c\u53ef\u4ee5\u67e5\u770b\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

              \u793a\u4f8b\u8f93\u51fa\uff1a

              Epoch 1: accuracy=0.95\nEpoch 2: accuracy=0.97\n...\nEpoch 10: accuracy=0.98\nTraining completed.\n

              \u8fd9\u8868\u793a MXNet \u5355\u673a\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#mxnet_3","title":"MXNet \u5206\u5e03\u5f0f\u4efb\u52a1","text":"

              \u5728\u5206\u5e03\u5f0f\u6a21\u5f0f\u4e0b\uff0cMXNet \u4efb\u52a1\u53ef\u4ee5\u4f7f\u7528\u591a\u53f0\u8ba1\u7b97\u8282\u70b9\u5171\u540c\u5b8c\u6210\u8bad\u7ec3\uff0c\u63d0\u9ad8\u8bad\u7ec3\u6548\u7387\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#_8","title":"\u521b\u5efa\u6b65\u9aa4","text":"
              1. \u767b\u5f55\u5e73\u53f0\uff1a\u540c\u4e0a\u3002
              2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a MXNet\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
              4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cMXNet \u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
              5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u9700\u6c42\uff0c\u914d\u7f6e\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html#_9","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4\uff1apython3
              • \u547d\u4ee4\u53c2\u6570\uff1a

                /mxnet/mxnet/example/image-classification/train_mnist.py --num-epochs 10 --num-layers 2 --kv-store dist_device_sync --gpus 0\n

                \u8bf4\u660e\uff1a

                • /mxnet/mxnet/example/image-classification/train_mnist.py\uff1aMXNet \u63d0\u4f9b\u7684\u56fe\u50cf\u5206\u7c7b\u793a\u4f8b\u811a\u672c\u3002
                • --num-epochs 10\uff1a\u8bad\u7ec3\u8f6e\u6570\u4e3a 10\u3002
                • --num-layers 2\uff1a\u6a21\u578b\u7684\u5c42\u6570\u4e3a 2\u3002
                • --kv-store dist_device_sync\uff1a\u4f7f\u7528\u5206\u5e03\u5f0f\u8bbe\u5907\u540c\u6b65\u6a21\u5f0f\u3002
                • --gpus 0\uff1a\u4f7f\u7528 GPU \u8fdb\u884c\u52a0\u901f\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html#_10","title":"\u8d44\u6e90\u914d\u7f6e","text":"
              • \u4efb\u52a1\u526f\u672c\u6570\uff1a3\uff08\u5305\u62ec Scheduler\u3001Server \u548c Worker\uff09
              • \u5404\u89d2\u8272\u8d44\u6e90\u8bf7\u6c42\uff1a
                • Scheduler\uff08\u8c03\u5ea6\u5668\uff09\uff1a
                  • \u526f\u672c\u6570\uff1a1
                  • \u8d44\u6e90\u8bf7\u6c42\uff1a
                    • CPU\uff1a2 \u6838
                    • \u5185\u5b58\uff1a4 GiB
                    • GPU\uff1a1 \u5757
                • Server\uff08\u53c2\u6570\u670d\u52a1\u5668\uff09\uff1a
                  • \u526f\u672c\u6570\uff1a1
                  • \u8d44\u6e90\u8bf7\u6c42\uff1a
                    • CPU\uff1a2 \u6838
                    • \u5185\u5b58\uff1a4 GiB
                    • GPU\uff1a1 \u5757
                • Worker\uff08\u5de5\u4f5c\u8282\u70b9\uff09\uff1a
                  • \u526f\u672c\u6570\uff1a1
                  • \u8d44\u6e90\u8bf7\u6c42\uff1a
                    • CPU\uff1a2 \u6838
                    • \u5185\u5b58\uff1a4 GiB
                    • GPU\uff1a1 \u5757
              "},{"location":"end-user/baize/jobs/mxnet.html#mxjob_1","title":"\u5b8c\u6574\u7684 MXJob \u914d\u7f6e\u793a\u4f8b","text":"

              \u4ee5\u4e0b\u662f\u5206\u5e03\u5f0f MXJob \u7684 YAML \u914d\u7f6e\uff1a

              apiVersion: \"kubeflow.org/v1\"\nkind: \"MXJob\"\nmetadata:\n  name: \"mxnet-job\"\nspec:\n  jobMode: MXTrain\n  mxReplicaSpecs:\n    Scheduler:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n    Server:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n    Worker:\n      replicas: 1\n      restartPolicy: Never\n      template:\n        spec:\n          containers:\n            - name: mxnet\n              image: release-ci.daocloud.io/baize/kubeflow/mxnet-gpu:latest\n              command: [\"python3\"]\n              args:\n                [\n                  \"/mxnet/mxnet/example/image-classification/train_mnist.py\",\n                  \"--num-epochs\",\n                  \"10\",\n                  \"--num-layers\",\n                  \"2\",\n                  \"--kv-store\",\n                  \"dist_device_sync\",\n                  \"--gpus\",\n                  \"0\",\n                ]\n              ports:\n                - containerPort: 9991\n                  name: mxjob-port\n              resources:\n                limits:\n                  cpu: \"2\"\n                  memory: 4Gi\n                  nvidia.com/gpu: 1\n                requests:\n                  cpu: \"2\"\n                  memory: 4Gi\n

              \u914d\u7f6e\u89e3\u6790\uff1a

              • Scheduler\uff08\u8c03\u5ea6\u5668\uff09\uff1a\u8d1f\u8d23\u534f\u8c03\u96c6\u7fa4\u4e2d\u5404\u8282\u70b9\u7684\u4efb\u52a1\u8c03\u5ea6\u3002
              • Server\uff08\u53c2\u6570\u670d\u52a1\u5668\uff09\uff1a\u7528\u4e8e\u5b58\u50a8\u548c\u66f4\u65b0\u6a21\u578b\u53c2\u6570\uff0c\u5b9e\u73b0\u5206\u5e03\u5f0f\u53c2\u6570\u540c\u6b65\u3002
              • Worker\uff08\u5de5\u4f5c\u8282\u70b9\uff09\uff1a\u5b9e\u9645\u6267\u884c\u8bad\u7ec3\u4efb\u52a1\u3002
              • \u8d44\u6e90\u914d\u7f6e\uff1a\u4e3a\u5404\u89d2\u8272\u5206\u914d\u9002\u5f53\u7684\u8d44\u6e90\uff0c\u786e\u4fdd\u4efb\u52a1\u987a\u5229\u8fd0\u884c\u3002
              "},{"location":"end-user/baize/jobs/mxnet.html#_11","title":"\u8bbe\u7f6e\u4efb\u52a1\u526f\u672c\u6570","text":"

              \u5728\u521b\u5efa MXNet \u5206\u5e03\u5f0f\u4efb\u52a1\u65f6\uff0c\u9700\u8981\u6839\u636e mxReplicaSpecs \u4e2d\u914d\u7f6e\u7684\u526f\u672c\u6570\uff0c\u6b63\u786e\u8bbe\u7f6e \u4efb\u52a1\u526f\u672c\u6570\u3002

              • \u603b\u526f\u672c\u6570 = Scheduler \u526f\u672c\u6570 + Server \u526f\u672c\u6570 + Worker \u526f\u672c\u6570
              • \u672c\u793a\u4f8b\u4e2d\uff1a
                • Scheduler \u526f\u672c\u6570\uff1a1
                • Server \u526f\u672c\u6570\uff1a1
                • Worker \u526f\u672c\u6570\uff1a1
                • \u603b\u526f\u672c\u6570\uff1a1 + 1 + 1 = 3

              \u56e0\u6b64\uff0c\u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u9700\u8981\u5c06 \u4efb\u52a1\u526f\u672c\u6570 \u8bbe\u7f6e\u4e3a 3\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#_12","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

              \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c MXNet \u5206\u5e03\u5f0f\u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#_13","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

              \u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u548c\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3002\u60a8\u53ef\u4ee5\u67e5\u770b\u6bcf\u4e2a\u89d2\u8272\uff08Scheduler\u3001Server\u3001Worker\uff09\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

              \u793a\u4f8b\u8f93\u51fa\uff1a

              INFO:root:Epoch[0] Batch [50]     Speed: 1000 samples/sec   accuracy=0.85\nINFO:root:Epoch[0] Batch [100]    Speed: 1200 samples/sec   accuracy=0.87\n...\nINFO:root:Epoch[9] Batch [100]    Speed: 1300 samples/sec   accuracy=0.98\nTraining completed.\n

              \u8fd9\u8868\u793a MXNet \u5206\u5e03\u5f0f\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#_14","title":"\u5c0f\u7ed3","text":"

              \u901a\u8fc7\u672c\u6559\u7a0b\uff0c\u60a8\u5b66\u4e60\u4e86\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c MXNet \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002\u6211\u4eec\u8be6\u7ec6\u4ecb\u7ecd\u4e86 MXJob \u7684\u914d\u7f6e\u65b9\u5f0f\uff0c\u4ee5\u53ca\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u8fd0\u884c\u7684\u547d\u4ee4\u548c\u8d44\u6e90\u9700\u6c42\u3002\u5e0c\u671b\u672c\u6559\u7a0b\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9\uff0c\u5982\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u5e73\u53f0\u63d0\u4f9b\u7684\u5176\u4ed6\u6587\u6863\u6216\u8054\u7cfb\u6280\u672f\u652f\u6301\u3002

              "},{"location":"end-user/baize/jobs/mxnet.html#_15","title":"\u9644\u5f55","text":"
              • \u6ce8\u610f\u4e8b\u9879\uff1a

                • \u786e\u4fdd\u60a8\u4f7f\u7528\u7684\u955c\u50cf\u5305\u542b\u6240\u9700\u7684 MXNet \u7248\u672c\u548c\u4f9d\u8d56\u3002
                • \u6839\u636e\u5b9e\u9645\u9700\u6c42\u8c03\u6574\u8d44\u6e90\u914d\u7f6e\uff0c\u907f\u514d\u8d44\u6e90\u4e0d\u8db3\u6216\u6d6a\u8d39\u3002
                • \u5982\u9700\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u8bad\u7ec3\u811a\u672c\uff0c\u8bf7\u4fee\u6539\u542f\u52a8\u547d\u4ee4\u548c\u53c2\u6570\u3002
              • \u53c2\u8003\u6587\u6863\uff1a

                • MXNet \u5b98\u65b9\u6587\u6863
                • Kubeflow MXJob \u6307\u5357
              "},{"location":"end-user/baize/jobs/paddle.html","title":"PaddlePaddle \u4efb\u52a1","text":"

              PaddlePaddle\uff08\u98de\u6868\uff09\u662f\u767e\u5ea6\u5f00\u6e90\u7684\u6df1\u5ea6\u5b66\u4e60\u5e73\u53f0\uff0c\u652f\u6301\u4e30\u5bcc\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u548c\u5206\u5e03\u5f0f\u8bad\u7ec3\u65b9\u5f0f\u3002PaddlePaddle \u4efb\u52a1\u53ef\u4ee5\u901a\u8fc7\u5355\u673a\u6216\u5206\u5e03\u5f0f\u6a21\u5f0f\u8fdb\u884c\u8bad\u7ec3\u3002\u5728 AI Lab \u5e73\u53f0\u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86\u5bf9 PaddlePaddle \u4efb\u52a1\u7684\u652f\u6301\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa PaddlePaddle \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

              \u672c\u6559\u7a0b\u5c06\u6307\u5bfc\u60a8\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c PaddlePaddle \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
              • \u4efb\u52a1\u7c7b\u578b\uff1aPaddlePaddle\uff0c\u652f\u6301\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4e24\u79cd\u6a21\u5f0f\u3002
              • \u8fd0\u884c\u73af\u5883\uff1a\u9009\u62e9\u5305\u542b PaddlePaddle \u6846\u67b6\u7684\u955c\u50cf\uff0c\u6216\u5728\u4efb\u52a1\u4e2d\u5b89\u88c5\u5fc5\u8981\u7684\u4f9d\u8d56\u3002
              "},{"location":"end-user/baize/jobs/paddle.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

              \u6211\u4eec\u4f7f\u7528 registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu \u955c\u50cf\u4f5c\u4e3a\u4efb\u52a1\u7684\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002\u8be5\u955c\u50cf\u9884\u88c5\u4e86 PaddlePaddle \u6846\u67b6\uff0c\u9002\u7528\u4e8e CPU \u8ba1\u7b97\u3002\u5982\u679c\u9700\u8981\u4f7f\u7528 GPU\uff0c\u8bf7\u9009\u62e9\u5bf9\u5e94\u7684 GPU \u7248\u672c\u955c\u50cf\u3002

              \u6ce8\u610f\uff1a\u4e86\u89e3\u5982\u4f55\u521b\u5efa\u548c\u7ba1\u7406\u73af\u5883\uff0c\u8bf7\u53c2\u8003 \u73af\u5883\u5217\u8868\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#paddlepaddle_1","title":"\u521b\u5efa PaddlePaddle \u4efb\u52a1","text":""},{"location":"end-user/baize/jobs/paddle.html#paddlepaddle_2","title":"PaddlePaddle \u5355\u673a\u8bad\u7ec3\u4efb\u52a1","text":""},{"location":"end-user/baize/jobs/paddle.html#_3","title":"\u521b\u5efa\u6b65\u9aa4","text":"
              1. \u767b\u5f55\u5e73\u53f0\uff1a\u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3\uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
              2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\uff0c\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a PaddlePaddle\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
              4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cPaddlePaddle \u5355\u673a\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
              5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\uff0c\u914d\u7f6e\u4efb\u52a1\u7684\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u4fe1\u606f\u3002
              "},{"location":"end-user/baize/jobs/paddle.html#_4","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4\uff1apython
              • \u547d\u4ee4\u53c2\u6570\uff1a

                -m paddle.distributed.launch run_check\n

                \u8bf4\u660e\uff1a

                • -m paddle.distributed.launch\uff1a\u4f7f\u7528 PaddlePaddle \u63d0\u4f9b\u7684\u5206\u5e03\u5f0f\u542f\u52a8\u6a21\u5757\uff0c\u5373\u4f7f\u5728\u5355\u673a\u6a21\u5f0f\u4e0b\u4e5f\u53ef\u4ee5\u4f7f\u7528\uff0c\u65b9\u4fbf\u5c06\u6765\u8fc1\u79fb\u5230\u5206\u5e03\u5f0f\u3002
                • run_check\uff1aPaddlePaddle \u63d0\u4f9b\u7684\u6d4b\u8bd5\u811a\u672c\uff0c\u7528\u4e8e\u68c0\u67e5\u5206\u5e03\u5f0f\u73af\u5883\u662f\u5426\u6b63\u5e38\u3002
              "},{"location":"end-user/baize/jobs/paddle.html#_5","title":"\u8d44\u6e90\u914d\u7f6e","text":"
              • \u526f\u672c\u6570\uff1a1\uff08\u5355\u673a\u4efb\u52a1\uff09
              • \u8d44\u6e90\u8bf7\u6c42\uff1a
                • CPU\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 1 \u6838
                • \u5185\u5b58\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 2 GiB
                • GPU\uff1a\u5982\u679c\u9700\u8981\u4f7f\u7528 GPU\uff0c\u9009\u62e9 GPU \u7248\u672c\u7684\u955c\u50cf\uff0c\u5e76\u5206\u914d\u76f8\u5e94\u7684 GPU \u8d44\u6e90
              "},{"location":"end-user/baize/jobs/paddle.html#paddlejob","title":"\u5b8c\u6574\u7684 PaddleJob \u914d\u7f6e\u793a\u4f8b","text":"

              \u4ee5\u4e0b\u662f\u5355\u673a PaddleJob \u7684 YAML \u914d\u7f6e\uff1a

              apiVersion: kubeflow.org/v1\nkind: PaddleJob\nmetadata:\n    name: paddle-simple-cpu\n    namespace: kubeflow\nspec:\n    paddleReplicaSpecs:\n        Worker:\n            replicas: 1\n            restartPolicy: OnFailure\n            template:\n                spec:\n                    containers:\n                        - name: paddle\n                          image: registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu\n                          command:\n                              [\n                                  'python',\n                                  '-m',\n                                  'paddle.distributed.launch',\n                                  'run_check',\n                              ]\n

              \u914d\u7f6e\u89e3\u6790\uff1a

              • apiVersion \u548c kind\uff1a\u6307\u5b9a\u8d44\u6e90\u7684 API \u7248\u672c\u548c\u7c7b\u578b\uff0c\u8fd9\u91cc\u662f PaddleJob\u3002
              • metadata\uff1a\u5143\u6570\u636e\uff0c\u5305\u62ec\u4efb\u52a1\u540d\u79f0\u548c\u547d\u540d\u7a7a\u95f4\u3002
              • spec\uff1a\u4efb\u52a1\u7684\u8be6\u7ec6\u914d\u7f6e\u3002
                • paddleReplicaSpecs\uff1aPaddlePaddle \u4efb\u52a1\u7684\u526f\u672c\u914d\u7f6e\u3002
                  • Worker\uff1a\u6307\u5b9a\u5de5\u4f5c\u8282\u70b9\u7684\u914d\u7f6e\u3002
                    • replicas\uff1a\u526f\u672c\u6570\uff0c\u8fd9\u91cc\u4e3a 1\uff0c\u8868\u793a\u5355\u673a\u8bad\u7ec3\u3002
                    • restartPolicy\uff1a\u91cd\u542f\u7b56\u7565\uff0c\u8bbe\u4e3a OnFailure\uff0c\u8868\u793a\u4efb\u52a1\u5931\u8d25\u65f6\u81ea\u52a8\u91cd\u542f\u3002
                    • template\uff1aPod \u6a21\u677f\uff0c\u5b9a\u4e49\u5bb9\u5668\u7684\u8fd0\u884c\u73af\u5883\u548c\u8d44\u6e90\u3002
                      • containers\uff1a\u5bb9\u5668\u5217\u8868\u3002
                        • name\uff1a\u5bb9\u5668\u540d\u79f0\u3002
                        • image\uff1a\u4f7f\u7528\u7684\u955c\u50cf\u3002
                        • command\uff1a\u542f\u52a8\u547d\u4ee4\u548c\u53c2\u6570\u3002
              "},{"location":"end-user/baize/jobs/paddle.html#_6","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

              \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c PaddlePaddle \u5355\u673a\u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#_7","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

              \u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u60a8\u53ef\u4ee5\u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u548c\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u3002\u4ece\u53f3\u4e0a\u89d2\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\uff0c\u53ef\u4ee5\u67e5\u770b\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

              \u793a\u4f8b\u8f93\u51fa\uff1a

              run check success, PaddlePaddle is installed correctly on this node :)\n

              \u8fd9\u8868\u793a PaddlePaddle \u5355\u673a\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u73af\u5883\u914d\u7f6e\u6b63\u5e38\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#paddlepaddle_3","title":"PaddlePaddle \u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1","text":"

              \u5728\u5206\u5e03\u5f0f\u6a21\u5f0f\u4e0b\uff0cPaddlePaddle \u4efb\u52a1\u53ef\u4ee5\u4f7f\u7528\u591a\u53f0\u8ba1\u7b97\u8282\u70b9\u5171\u540c\u5b8c\u6210\u8bad\u7ec3\uff0c\u63d0\u9ad8\u8bad\u7ec3\u6548\u7387\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#_8","title":"\u521b\u5efa\u6b65\u9aa4","text":"
              1. \u767b\u5f55\u5e73\u53f0\uff1a\u540c\u4e0a\u3002
              2. \u521b\u5efa\u4efb\u52a1\uff1a\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\uff1a\u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a PaddlePaddle\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002
              4. \u586b\u5199\u4efb\u52a1\u4fe1\u606f\uff1a\u586b\u5199\u4efb\u52a1\u540d\u79f0\u548c\u63cf\u8ff0\uff0c\u4f8b\u5982 \u201cPaddlePaddle \u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u201d\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a\u3002
              5. \u914d\u7f6e\u4efb\u52a1\u53c2\u6570\uff1a\u6839\u636e\u9700\u6c42\uff0c\u914d\u7f6e\u8fd0\u884c\u53c2\u6570\u3001\u955c\u50cf\u3001\u8d44\u6e90\u7b49\u3002
              "},{"location":"end-user/baize/jobs/paddle.html#_9","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4\uff1apython
              • \u547d\u4ee4\u53c2\u6570\uff1a

                -m paddle.distributed.launch train.py --epochs=10\n

                \u8bf4\u660e\uff1a

                • -m paddle.distributed.launch\uff1a\u4f7f\u7528 PaddlePaddle \u63d0\u4f9b\u7684\u5206\u5e03\u5f0f\u542f\u52a8\u6a21\u5757\u3002
                • train.py\uff1a\u60a8\u7684\u8bad\u7ec3\u811a\u672c\uff0c\u9700\u8981\u653e\u5728\u955c\u50cf\u4e2d\u6216\u6302\u8f7d\u5230\u5bb9\u5668\u5185\u3002
                • --epochs=10\uff1a\u8bad\u7ec3\u7684\u8f6e\u6570\uff0c\u8fd9\u91cc\u8bbe\u7f6e\u4e3a 10\u3002
              "},{"location":"end-user/baize/jobs/paddle.html#_10","title":"\u8d44\u6e90\u914d\u7f6e","text":"
              • \u4efb\u52a1\u526f\u672c\u6570\uff1a\u6839\u636e Worker \u526f\u672c\u6570\u8bbe\u7f6e\uff0c\u8fd9\u91cc\u4e3a 2\u3002
              • \u8d44\u6e90\u8bf7\u6c42\uff1a
                • CPU\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 1 \u6838
                • \u5185\u5b58\uff1a\u6839\u636e\u9700\u6c42\u8bbe\u7f6e\uff0c\u5efa\u8bae\u81f3\u5c11 2 GiB
                • GPU\uff1a\u5982\u679c\u9700\u8981\u4f7f\u7528 GPU\uff0c\u9009\u62e9 GPU \u7248\u672c\u7684\u955c\u50cf\uff0c\u5e76\u5206\u914d\u76f8\u5e94\u7684 GPU \u8d44\u6e90
              "},{"location":"end-user/baize/jobs/paddle.html#paddlejob_1","title":"\u5b8c\u6574\u7684 PaddleJob \u914d\u7f6e\u793a\u4f8b","text":"

              \u4ee5\u4e0b\u662f\u5206\u5e03\u5f0f PaddleJob \u7684 YAML \u914d\u7f6e\uff1a

              apiVersion: kubeflow.org/v1\nkind: PaddleJob\nmetadata:\n    name: paddle-distributed-job\n    namespace: kubeflow\nspec:\n    paddleReplicaSpecs:\n        Worker:\n            replicas: 2\n            restartPolicy: OnFailure\n            template:\n                spec:\n                    containers:\n                        - name: paddle\n                          image: registry.baidubce.com/paddlepaddle/paddle:2.4.0rc0-cpu\n                          command:\n                              [\n                                  'python',\n                                  '-m',\n                                  'paddle.distributed.launch',\n                                  'train.py',\n                              ]\n                          args:\n                              - '--epochs=10'\n

              \u914d\u7f6e\u89e3\u6790\uff1a

              • Worker\uff1a
                • replicas\uff1a\u526f\u672c\u6570\uff0c\u8bbe\u7f6e\u4e3a 2\uff0c\u8868\u793a\u4f7f\u7528 2 \u4e2a\u5de5\u4f5c\u8282\u70b9\u8fdb\u884c\u5206\u5e03\u5f0f\u8bad\u7ec3\u3002
                • \u5176\u4ed6\u914d\u7f6e\u4e0e\u5355\u673a\u6a21\u5f0f\u7c7b\u4f3c\u3002
              "},{"location":"end-user/baize/jobs/paddle.html#_11","title":"\u8bbe\u7f6e\u4efb\u52a1\u526f\u672c\u6570","text":"

              \u5728\u521b\u5efa PaddlePaddle \u5206\u5e03\u5f0f\u4efb\u52a1\u65f6\uff0c\u9700\u8981\u6839\u636e paddleReplicaSpecs \u4e2d\u914d\u7f6e\u7684\u526f\u672c\u6570\uff0c\u6b63\u786e\u8bbe\u7f6e \u4efb\u52a1\u526f\u672c\u6570\u3002

              • \u603b\u526f\u672c\u6570 = Worker \u526f\u672c\u6570
              • \u672c\u793a\u4f8b\u4e2d\uff1a
                • Worker \u526f\u672c\u6570\uff1a2
                • \u603b\u526f\u672c\u6570\uff1a2

              \u56e0\u6b64\uff0c\u5728\u4efb\u52a1\u914d\u7f6e\u4e2d\uff0c\u9700\u8981\u5c06 \u4efb\u52a1\u526f\u672c\u6570 \u8bbe\u7f6e\u4e3a 2\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#_12","title":"\u63d0\u4ea4\u4efb\u52a1","text":"

              \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u63d0\u4ea4 \u6309\u94ae\uff0c\u5f00\u59cb\u8fd0\u884c PaddlePaddle \u5206\u5e03\u5f0f\u4efb\u52a1\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#_13","title":"\u67e5\u770b\u8fd0\u884c\u7ed3\u679c","text":"

              \u8fdb\u5165 \u4efb\u52a1\u8be6\u60c5 \u9875\u9762\uff0c\u67e5\u770b\u4efb\u52a1\u7684\u8fd0\u884c\u72b6\u6001\u548c\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3002\u60a8\u53ef\u4ee5\u67e5\u770b\u6bcf\u4e2a\u5de5\u4f5c\u8282\u70b9\u7684\u65e5\u5fd7\u8f93\u51fa\uff0c\u786e\u8ba4\u5206\u5e03\u5f0f\u8bad\u7ec3\u662f\u5426\u6b63\u5e38\u8fd0\u884c\u3002

              \u793a\u4f8b\u8f93\u51fa\uff1a

              Worker 0: Epoch 1, Batch 100, Loss 0.5\nWorker 1: Epoch 1, Batch 100, Loss 0.6\n...\nTraining completed.\n

              \u8fd9\u8868\u793a PaddlePaddle \u5206\u5e03\u5f0f\u4efb\u52a1\u6210\u529f\u8fd0\u884c\uff0c\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#_14","title":"\u5c0f\u7ed3","text":"

              \u901a\u8fc7\u672c\u6559\u7a0b\uff0c\u60a8\u5b66\u4e60\u4e86\u5982\u4f55\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u548c\u8fd0\u884c PaddlePaddle \u7684\u5355\u673a\u548c\u5206\u5e03\u5f0f\u4efb\u52a1\u3002\u6211\u4eec\u8be6\u7ec6\u4ecb\u7ecd\u4e86 PaddleJob \u7684\u914d\u7f6e\u65b9\u5f0f\uff0c\u4ee5\u53ca\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u6307\u5b9a\u8fd0\u884c\u7684\u547d\u4ee4\u548c\u8d44\u6e90\u9700\u6c42\u3002\u5e0c\u671b\u672c\u6559\u7a0b\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9\uff0c\u5982\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u5e73\u53f0\u63d0\u4f9b\u7684\u5176\u4ed6\u6587\u6863\u6216\u8054\u7cfb\u6280\u672f\u652f\u6301\u3002

              "},{"location":"end-user/baize/jobs/paddle.html#_15","title":"\u9644\u5f55","text":"
              • \u6ce8\u610f\u4e8b\u9879\uff1a

                • \u8bad\u7ec3\u811a\u672c\uff1a\u786e\u4fdd train.py\uff08\u6216\u5176\u4ed6\u8bad\u7ec3\u811a\u672c\uff09\u5728\u5bb9\u5668\u5185\u5b58\u5728\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u81ea\u5b9a\u4e49\u955c\u50cf\u3001\u6302\u8f7d\u6301\u4e45\u5316\u5b58\u50a8\u7b49\u65b9\u5f0f\u5c06\u811a\u672c\u653e\u5165\u5bb9\u5668\u3002
                • \u955c\u50cf\u9009\u62e9\uff1a\u6839\u636e\u60a8\u7684\u9700\u6c42\u9009\u62e9\u5408\u9002\u7684\u955c\u50cf\uff0c\u4f8b\u5982\u4f7f\u7528 GPU \u65f6\u9009\u62e9 paddle:2.4.0rc0-gpu \u7b49\u3002
                • \u53c2\u6570\u8c03\u6574\uff1a\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 command \u548c args \u6765\u4f20\u9012\u4e0d\u540c\u7684\u8bad\u7ec3\u53c2\u6570\u3002
              • \u53c2\u8003\u6587\u6863\uff1a

                • PaddlePaddle \u5b98\u65b9\u6587\u6863
                • Kubeflow PaddleJob \u6307\u5357
              "},{"location":"end-user/baize/jobs/pytorch.html","title":"Pytorch \u4efb\u52a1","text":"

              Pytorch \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7075\u6d3b\u7684\u8bad\u7ec3\u548c\u90e8\u7f72\u73af\u5883\u3002 Pytorch \u4efb\u52a1\u662f\u4e00\u4e2a\u4f7f\u7528 Pytorch \u6846\u67b6\u7684\u4efb\u52a1\u3002

              \u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86 Pytorch \u4efb\u52a1\u652f\u6301\u548c\u9002\u914d\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c \u5feb\u901f\u521b\u5efa Pytorch \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

              "},{"location":"end-user/baize/jobs/pytorch.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
              • \u4efb\u52a1\u7c7b\u578b\u540c\u65f6\u652f\u6301 Pytorch \u5355\u673a \u548c Pytorch \u5206\u5e03\u5f0f \u4e24\u79cd\u6a21\u5f0f\u3002
              • \u8fd0\u884c\u955c\u50cf\u5185\u5df2\u7ecf\u9ed8\u8ba4\u652f\u6301 Pytorch \u6846\u67b6\uff0c\u65e0\u9700\u989d\u5916\u5b89\u88c5\u3002
              "},{"location":"end-user/baize/jobs/pytorch.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

              \u5728\u8fd9\u91cc\u6211\u4eec\u4f7f\u7528 baize-notebook \u57fa\u7840\u955c\u50cf \u548c \u5173\u8054\u73af\u5883 \u7684\u65b9\u5f0f\u6765\u4f5c\u4e3a\u4efb\u52a1\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002

              \u4e86\u89e3\u5982\u4f55\u521b\u5efa\u73af\u5883\uff0c\u8bf7\u53c2\u8003\u73af\u5883\u5217\u8868\u3002

              "},{"location":"end-user/baize/jobs/pytorch.html#_3","title":"\u521b\u5efa\u4efb\u52a1","text":""},{"location":"end-user/baize/jobs/pytorch.html#pytorch_1","title":"Pytorch \u5355\u673a\u4efb\u52a1","text":"
              1. \u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
              2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Pytorch \u5355\u673a\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
              4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
              "},{"location":"end-user/baize/jobs/pytorch.html#_4","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
              • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528
              import torch\nimport torch.nn as nn\nimport torch.optim as optim\n\n# \u5b9a\u4e49\u4e00\u4e2a\u7b80\u5355\u7684\u795e\u7ecf\u7f51\u7edc\nclass SimpleNet(nn.Module):\n    def __init__(self):\n        super(SimpleNet, self).__init__()\n        self.fc = nn.Linear(10, 1)\n\n    def forward(self, x):\n        return self.fc(x)\n\n# \u521b\u5efa\u6a21\u578b\u3001\u635f\u5931\u51fd\u6570\u548c\u4f18\u5316\u5668\nmodel = SimpleNet()\ncriterion = nn.MSELoss()\noptimizer = optim.SGD(model.parameters(), lr=0.01)\n\n# \u751f\u6210\u4e00\u4e9b\u968f\u673a\u6570\u636e\nx = torch.randn(100, 10)\ny = torch.randn(100, 1)\n\n# \u8bad\u7ec3\u6a21\u578b\nfor epoch in range(100):\n    # \u524d\u5411\u4f20\u64ad\n    outputs = model(x)\n    loss = criterion(outputs, y)\n\n    # \u53cd\u5411\u4f20\u64ad\u548c\u4f18\u5316\n    optimizer.zero_grad()\n    loss.backward()\n    optimizer.step()\n\n    if (epoch + 1) % 10 == 0:\n        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')\n\nprint('Training finished.')\n
              "},{"location":"end-user/baize/jobs/pytorch.html#_5","title":"\u8fd0\u884c\u7ed3\u679c","text":"

              \u4efb\u52a1\u63d0\u4ea4\u6210\u529f\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\u67e5\u770b\u5230\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ece\u53f3\u4e0a\u89d2\u53bb\u5f80 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \uff0c\u53ef\u4ee5\u67e5\u770b\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa

              [HAMI-core Warn(1:140244541377408:utils.c:183)]: get default cuda from (null)\n[HAMI-core Msg(1:140244541377408:libvgpu.c:855)]: Initialized\nEpoch [10/100], Loss: 1.1248\nEpoch [20/100], Loss: 1.0486\nEpoch [30/100], Loss: 0.9969\nEpoch [40/100], Loss: 0.9611\nEpoch [50/100], Loss: 0.9360\nEpoch [60/100], Loss: 0.9182\nEpoch [70/100], Loss: 0.9053\nEpoch [80/100], Loss: 0.8960\nEpoch [90/100], Loss: 0.8891\nEpoch [100/100], Loss: 0.8841\nTraining finished.\n[HAMI-core Msg(1:140244541377408:multiprocess_memory_limit.c:468)]: Calling exit handler 1\n
              "},{"location":"end-user/baize/jobs/pytorch.html#pytorch_2","title":"Pytorch \u5206\u5e03\u5f0f\u4efb\u52a1","text":"
              1. \u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u4efb\u52a1\u5217\u8868 \u9875\u9762\u3002
              2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Pytorch \u5206\u5e03\u5f0f\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
              4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
              "},{"location":"end-user/baize/jobs/pytorch.html#_6","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
              • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528
              import os\nimport torch\nimport torch.distributed as dist\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.nn.parallel import DistributedDataParallel as DDP\n\nclass SimpleModel(nn.Module):\n    def __init__(self):\n        super(SimpleModel, self).__init__()\n        self.fc = nn.Linear(10, 1)\n\n    def forward(self, x):\n        return self.fc(x)\n\ndef train():\n    # \u6253\u5370\u73af\u5883\u4fe1\u606f\n    print(f'PyTorch version: {torch.__version__}')\n    print(f'CUDA available: {torch.cuda.is_available()}')\n    if torch.cuda.is_available():\n        print(f'CUDA version: {torch.version.cuda}')\n        print(f'CUDA device count: {torch.cuda.device_count()}')\n\n    rank = int(os.environ.get('RANK', '0'))\n    world_size = int(os.environ.get('WORLD_SIZE', '1'))\n\n    print(f'Rank: {rank}, World Size: {world_size}')\n\n    # \u521d\u59cb\u5316\u5206\u5e03\u5f0f\u73af\u5883\n    try:\n        if world_size > 1:\n            dist.init_process_group('nccl')\n            print('Distributed process group initialized successfully')\n        else:\n            print('Running in non-distributed mode')\n    except Exception as e:\n        print(f'Error initializing process group: {e}')\n        return\n\n    # \u8bbe\u7f6e\u8bbe\u5907\n    try:\n        if torch.cuda.is_available():\n            device = torch.device(f'cuda:{rank % torch.cuda.device_count()}')\n            print(f'Using CUDA device: {device}')\n        else:\n            device = torch.device('cpu')\n            print('CUDA not available, using CPU')\n    except Exception as e:\n        print(f'Error setting device: {e}')\n        device = torch.device('cpu')\n        print('Falling back to CPU')\n\n    try:\n        model = SimpleModel().to(device)\n        print('Model moved to device successfully')\n    except Exception as e:\n        print(f'Error moving model to device: {e}')\n        return\n\n    try:\n        if world_size > 1:\n            ddp_model = DDP(model, device_ids=[rank % torch.cuda.device_count()] if torch.cuda.is_available() else None)\n            print('DDP model created successfully')\n        else:\n            ddp_model = model\n            print('Using non-distributed model')\n    except Exception as e:\n        print(f'Error creating DDP model: {e}')\n        return\n\n    loss_fn = nn.MSELoss()\n    optimizer = optim.SGD(ddp_model.parameters(), lr=0.001)\n\n    # \u751f\u6210\u4e00\u4e9b\u968f\u673a\u6570\u636e\n    try:\n        data = torch.randn(100, 10, device=device)\n        labels = torch.randn(100, 1, device=device)\n        print('Data generated and moved to device successfully')\n    except Exception as e:\n        print(f'Error generating or moving data to device: {e}')\n        return\n\n    for epoch in range(10):\n        try:\n            ddp_model.train()\n            outputs = ddp_model(data)\n            loss = loss_fn(outputs, labels)\n            optimizer.zero_grad()\n            loss.backward()\n            optimizer.step()\n\n            if rank == 0:\n                print(f'Epoch {epoch}, Loss: {loss.item():.4f}')\n        except Exception as e:\n            print(f'Error during training epoch {epoch}: {e}')\n            break\n\n    if world_size > 1:\n        dist.destroy_process_group()\n\nif __name__ == '__main__':\n    train()\n
              "},{"location":"end-user/baize/jobs/pytorch.html#_7","title":"\u4efb\u52a1\u526f\u672c\u6570","text":"

              \u6ce8\u610f Pytorch \u5206\u5e03\u5f0f \u8bad\u7ec3\u4efb\u52a1\u4f1a\u521b\u5efa\u4e00\u7ec4 Master \u548c Worker \u7684\u8bad\u7ec3 Pod\uff0c Master \u8d1f\u8d23\u534f\u8c03\u8bad\u7ec3\u4efb\u52a1\uff0cWorker \u8d1f\u8d23\u5b9e\u9645\u7684\u8bad\u7ec3\u5de5\u4f5c\u3002

              Note

              \u672c\u6b21\u6f14\u793a\u4e2d\uff1aMaster \u526f\u672c\u6570\u4e3a 1\uff0cWorker \u526f\u672c\u6570\u4e3a 2\uff1b \u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728 \u4efb\u52a1\u914d\u7f6e \u4e2d\u8bbe\u7f6e\u526f\u672c\u6570\u4e3a 3\uff0c\u5373 Master \u526f\u672c\u6570 + Worker \u526f\u672c\u6570\u3002 Pytorch \u4f1a\u81ea\u52a8\u8c03\u8c10 Master \u548c Worker \u7684\u89d2\u8272\u3002

              "},{"location":"end-user/baize/jobs/pytorch.html#_8","title":"\u8fd0\u884c\u7ed3\u679c","text":"

              \u540c\u6837\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ee5\u53ca\u6bcf\u4e2a Pod \u7684\u65e5\u5fd7\u8f93\u51fa\u3002

              "},{"location":"end-user/baize/jobs/tensorboard.html","title":"\u4efb\u52a1\u5206\u6790\u4ecb\u7ecd","text":"

              \u5728 AI Lab \u6a21\u5757\u4e2d\uff0c\u63d0\u4f9b\u4e86\u6a21\u578b\u5f00\u53d1\u8fc7\u7a0b\u91cd\u8981\u7684\u53ef\u89c6\u5316\u5206\u6790\u5de5\u5177\uff0c\u7528\u4e8e\u5c55\u793a\u673a\u5668\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u548c\u7ed3\u679c\u3002 \u672c\u6587\u5c06\u4ecb\u7ecd \u4efb\u52a1\u5206\u6790\uff08Tensorboard\uff09\u7684\u57fa\u672c\u6982\u5ff5\u3001\u5728 AI Lab \u7cfb\u7edf\u4e2d\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u4ee5\u53ca\u5982\u4f55\u914d\u7f6e\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u5185\u5bb9\u3002

              Note

              Tensorboard \u662f TensorFlow \u63d0\u4f9b\u7684\u4e00\u4e2a\u53ef\u89c6\u5316\u5de5\u5177\uff0c\u7528\u4e8e\u5c55\u793a\u673a\u5668\u5b66\u4e60\u6a21\u578b\u7684\u8bad\u7ec3\u8fc7\u7a0b\u548c\u7ed3\u679c\u3002 \u5b83\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u8005\u66f4\u76f4\u89c2\u5730\u7406\u89e3\u6a21\u578b\u7684\u8bad\u7ec3\u52a8\u6001\uff0c\u5206\u6790\u6a21\u578b\u6027\u80fd\uff0c\u8c03\u8bd5\u6a21\u578b\u95ee\u9898\u7b49\u3002

              Tensorboard \u5728\u6a21\u578b\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u7684\u4f5c\u7528\u53ca\u4f18\u52bf\uff1a

              • \u53ef\u89c6\u5316\u8bad\u7ec3\u8fc7\u7a0b\uff1a\u901a\u8fc7\u56fe\u8868\u5c55\u793a\u8bad\u7ec3\u548c\u9a8c\u8bc1\u7684\u635f\u5931\u3001\u7cbe\u5ea6\u7b49\u6307\u6807\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u76f4\u89c2\u5730\u89c2\u5bdf\u6a21\u578b\u7684\u8bad\u7ec3\u6548\u679c\u3002
              • \u8c03\u8bd5\u548c\u4f18\u5316\u6a21\u578b\uff1a\u901a\u8fc7\u67e5\u770b\u4e0d\u540c\u5c42\u7684\u6743\u91cd\u3001\u68af\u5ea6\u5206\u5e03\u7b49\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u53d1\u73b0\u548c\u4fee\u6b63\u6a21\u578b\u4e2d\u7684\u95ee\u9898\u3002
              • \u5bf9\u6bd4\u4e0d\u540c\u5b9e\u9a8c\uff1a\u53ef\u4ee5\u540c\u65f6\u5c55\u793a\u591a\u4e2a\u5b9e\u9a8c\u7684\u7ed3\u679c\uff0c\u65b9\u4fbf\u5f00\u53d1\u8005\u5bf9\u6bd4\u4e0d\u540c\u6a21\u578b\u548c\u8d85\u53c2\u6570\u914d\u7f6e\u7684\u6548\u679c\u3002
              • \u8ffd\u8e2a\u8bad\u7ec3\u6570\u636e\uff1a\u8bb0\u5f55\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u4f7f\u7528\u7684\u6570\u636e\u96c6\u548c\u53c2\u6570\uff0c\u786e\u4fdd\u5b9e\u9a8c\u7684\u53ef\u590d\u73b0\u6027\u3002
              "},{"location":"end-user/baize/jobs/tensorboard.html#tensorboard","title":"\u5982\u4f55\u521b\u5efa Tensorboard","text":"

              \u5728 AI Lab \u7cfb\u7edf\u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u4e86\u4fbf\u6377\u7684\u65b9\u5f0f\u6765\u521b\u5efa\u548c\u7ba1\u7406 Tensorboard\u3002\u4ee5\u4e0b\u662f\u5177\u4f53\u6b65\u9aa4\uff1a

              "},{"location":"end-user/baize/jobs/tensorboard.html#notebook-tensorboard","title":"\u5728\u521b\u5efa\u65f6 Notebook \u542f\u7528 Tensorboard","text":"
              1. \u521b\u5efa Notebook\uff1a\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 Notebook\u3002
              2. \u542f\u7528 Tensorboard\uff1a\u5728\u521b\u5efa Notebook \u7684\u9875\u9762\u4e2d\uff0c\u542f\u7528 Tensorboard \u9009\u9879\uff0c\u5e76\u6307\u5b9a\u6570\u636e\u96c6\u548c\u65e5\u5fd7\u8def\u5f84\u3002

              "},{"location":"end-user/baize/jobs/tensorboard.html#tensorboard_1","title":"\u5728\u5206\u5e03\u5f0f\u4efb\u52a1\u521b\u5efa\u53ca\u5b8c\u6210\u540e\u542f\u7528 Tensorboard","text":"
              1. \u521b\u5efa\u5206\u5e03\u5f0f\u4efb\u52a1\uff1a\u5728 AI Lab \u5e73\u53f0\u4e0a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5206\u5e03\u5f0f\u8bad\u7ec3\u4efb\u52a1\u3002
              2. \u914d\u7f6e Tensorboard\uff1a\u5728\u4efb\u52a1\u914d\u7f6e\u9875\u9762\u4e2d\uff0c\u542f\u7528 Tensorboard \u9009\u9879\uff0c\u5e76\u6307\u5b9a\u6570\u636e\u96c6\u548c\u65e5\u5fd7\u8def\u5f84\u3002
              3. \u4efb\u52a1\u5b8c\u6210\u540e\u67e5\u770b Tensorboard\uff1a\u4efb\u52a1\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u5728\u4efb\u52a1\u8be6\u60c5\u9875\u9762\u4e2d\u67e5\u770b Tensorboard \u7684\u94fe\u63a5\uff0c\u70b9\u51fb\u94fe\u63a5\u5373\u53ef\u67e5\u770b\u8bad\u7ec3\u8fc7\u7a0b\u7684\u53ef\u89c6\u5316\u7ed3\u679c\u3002

              "},{"location":"end-user/baize/jobs/tensorboard.html#notebook-tensorboard_1","title":"\u5728 Notebook \u4e2d\u76f4\u63a5\u5f15\u7528 Tensorboard","text":"

              \u5728 Notebook \u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee3\u7801\u76f4\u63a5\u542f\u52a8 Tensorboard\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u4ee3\u7801\uff1a

              # \u5bfc\u5165\u5fc5\u8981\u7684\u5e93\nimport tensorflow as tf\nimport datetime\n\n# \u5b9a\u4e49\u65e5\u5fd7\u76ee\u5f55\nlog_dir = \"logs/fit/\" + datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n\n# \u521b\u5efa Tensorboard \u56de\u8c03\ntensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)\n\n# \u6784\u5efa\u5e76\u7f16\u8bd1\u6a21\u578b\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Flatten(input_shape=(28, 28)),\n    tf.keras.layers.Dense(512, activation='relu'),\n    tf.keras.layers.Dropout(0.2),\n    tf.keras.layers.Dense(10, activation='softmax')\n])\n\nmodel.compile(optimizer='adam',\n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])\n\n# \u8bad\u7ec3\u6a21\u578b\u5e76\u542f\u7528 Tensorboard \u56de\u8c03\nmodel.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), callbacks=[tensorboard_callback])\n
              "},{"location":"end-user/baize/jobs/tensorboard.html#_2","title":"\u5982\u4f55\u914d\u7f6e\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u5185\u5bb9","text":"

              \u5728\u4f7f\u7528 Tensorboard \u65f6\uff0c\u53ef\u4ee5\u8bb0\u5f55\u548c\u914d\u7f6e\u4e0d\u540c\u7684\u6570\u636e\u96c6\u548c\u65e5\u5fd7\u5185\u5bb9\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u5e38\u89c1\u7684\u914d\u7f6e\u65b9\u5f0f\uff1a

              "},{"location":"end-user/baize/jobs/tensorboard.html#_3","title":"\u914d\u7f6e\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6570\u636e\u96c6\u7684\u65e5\u5fd7","text":"

              \u5728\u8bad\u7ec3\u6a21\u578b\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7 TensorFlow \u7684 tf.summary API \u6765\u8bb0\u5f55\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u4ee3\u7801\uff1a

              # \u5bfc\u5165\u5fc5\u8981\u7684\u5e93\nimport tensorflow as tf\n\n# \u521b\u5efa\u65e5\u5fd7\u76ee\u5f55\ntrain_log_dir = 'logs/gradient_tape/train'\nval_log_dir = 'logs/gradient_tape/val'\ntrain_summary_writer = tf.summary.create_file_writer(train_log_dir)\nval_summary_writer = tf.summary.create_file_writer(val_log_dir)\n\n# \u8bad\u7ec3\u6a21\u578b\u5e76\u8bb0\u5f55\u65e5\u5fd7\nfor epoch in range(EPOCHS):\n    for (x_train, y_train) in train_dataset:\n        # \u8bad\u7ec3\u6b65\u9aa4\n        train_step(x_train, y_train)\n        with train_summary_writer.as_default():\n            tf.summary.scalar('loss', train_loss.result(), step=epoch)\n            tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)\n\n    for (x_val, y_val) in val_dataset:\n        # \u9a8c\u8bc1\u6b65\u9aa4\n        val_step(x_val, y_val)\n        with val_summary_writer.as_default():\n            tf.summary.scalar('loss', val_loss.result(), step=epoch)\n            tf.summary.scalar('accuracy', val_accuracy.result(), step=epoch)\n
              "},{"location":"end-user/baize/jobs/tensorboard.html#_4","title":"\u914d\u7f6e\u81ea\u5b9a\u4e49\u65e5\u5fd7","text":"

              \u9664\u4e86\u8bad\u7ec3\u548c\u9a8c\u8bc1\u6570\u636e\u96c6\u7684\u65e5\u5fd7\u5916\uff0c\u8fd8\u53ef\u4ee5\u8bb0\u5f55\u5176\u4ed6\u81ea\u5b9a\u4e49\u7684\u65e5\u5fd7\u5185\u5bb9\uff0c\u4f8b\u5982\u5b66\u4e60\u7387\u3001\u68af\u5ea6\u5206\u5e03\u7b49\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u793a\u4f8b\u4ee3\u7801\uff1a

              # \u8bb0\u5f55\u81ea\u5b9a\u4e49\u65e5\u5fd7\nwith train_summary_writer.as_default():\n    tf.summary.scalar('learning_rate', learning_rate, step=epoch)\n    tf.summary.histogram('gradients', gradients, step=epoch)\n
              "},{"location":"end-user/baize/jobs/tensorboard.html#tensorboard_2","title":"Tensorboard \u7ba1\u7406","text":"

              \u5728 AI Lab \u4e2d\uff0c\u901a\u8fc7\u5404\u79cd\u65b9\u5f0f\u521b\u5efa\u51fa\u6765\u7684 Tensorboard \u4f1a\u7edf\u4e00\u5c55\u793a\u5728\u4efb\u52a1\u5206\u6790\u7684\u9875\u9762\u4e2d\uff0c\u65b9\u4fbf\u7528\u6237\u67e5\u770b\u548c\u7ba1\u7406\u3002

              \u7528\u6237\u53ef\u4ee5\u5728\u4efb\u52a1\u5206\u6790\u9875\u9762\u4e2d\u67e5\u770b Tensorboard \u7684\u94fe\u63a5\u3001\u72b6\u6001\u3001\u521b\u5efa\u65f6\u95f4\u7b49\u4fe1\u606f\uff0c\u5e76\u901a\u8fc7\u94fe\u63a5\u76f4\u63a5\u8bbf\u95ee Tensorboard \u7684\u53ef\u89c6\u5316\u7ed3\u679c\u3002

              "},{"location":"end-user/baize/jobs/tensorflow.html","title":"Tensorflow \u4efb\u52a1","text":"

              Tensorflow \u662f\u9664\u4e86 Pytorch \u53e6\u5916\u4e00\u4e2a\u975e\u5e38\u6d3b\u8dc3\u7684\u5f00\u6e90\u7684\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7075\u6d3b\u7684\u8bad\u7ec3\u548c\u90e8\u7f72\u73af\u5883\u3002

              \u5728 AI Lab \u4e2d\uff0c\u6211\u4eec\u540c\u6837\u63d0\u4f9b\u4e86 Tensorflow \u6846\u67b6\u7684\u652f\u6301\u548c\u9002\u914d\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u754c\u9762\u5316\u64cd\u4f5c\uff0c\u5feb\u901f\u521b\u5efa Tensorflow \u4efb\u52a1\uff0c\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\u3002

              "},{"location":"end-user/baize/jobs/tensorflow.html#_1","title":"\u4efb\u52a1\u914d\u7f6e\u4ecb\u7ecd","text":"
              • \u4efb\u52a1\u7c7b\u578b\u540c\u65f6\u652f\u6301 Tensorflow \u5355\u673a \u548c Tensorflow \u5206\u5e03\u5f0f \u4e24\u79cd\u6a21\u5f0f\u3002
              • \u8fd0\u884c\u955c\u50cf\u5185\u5df2\u7ecf\u9ed8\u8ba4\u652f\u6301 Tensorflow \u6846\u67b6\uff0c\u65e0\u9700\u989d\u5916\u5b89\u88c5\u3002
              "},{"location":"end-user/baize/jobs/tensorflow.html#_2","title":"\u4efb\u52a1\u8fd0\u884c\u73af\u5883","text":"

              \u5728\u8fd9\u91cc\u6211\u4eec\u4f7f\u7528 baize-notebook \u57fa\u7840\u955c\u50cf \u548c \u5173\u8054\u73af\u5883 \u7684\u65b9\u5f0f\u6765\u4f5c\u4e3a\u4efb\u52a1\u57fa\u7840\u8fd0\u884c\u73af\u5883\u3002

              \u4e86\u89e3\u5982\u4f55\u521b\u5efa\u73af\u5883\uff0c\u8bf7\u53c2\u8003\u73af\u5883\u5217\u8868\u3002

              "},{"location":"end-user/baize/jobs/tensorflow.html#_3","title":"\u521b\u5efa\u4efb\u52a1","text":""},{"location":"end-user/baize/jobs/tensorflow.html#tfjob","title":"\u793a\u4f8b TFJob \u5355\u673a\u4efb\u52a1","text":"
              1. \u767b\u5f55 AI Lab \u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u8bad\u7ec3\u4efb\u52a1 \u9875\u9762\u3002
              2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Tensorflow \u5355\u673a\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
              4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
              "},{"location":"end-user/baize/jobs/tensorflow.html#_4","title":"\u63d0\u524d\u9884\u70ed\u4ee3\u7801\u4ed3\u5e93","text":"

              \u4f7f\u7528 AI Lab -> \u6570\u636e\u96c6\u5217\u8868 \uff0c\u521b\u5efa\u4e00\u4e2a\u6570\u636e\u96c6\uff0c\u5e76\u5c06\u8fdc\u7aef Github \u7684\u4ee3\u7801\u62c9\u53d6\u5230\u6570\u636e\u96c6\u4e2d\uff0c \u8fd9\u6837\u5728\u521b\u5efa\u4efb\u52a1\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u9009\u62e9\u6570\u636e\u96c6\uff0c\u5c06\u4ee3\u7801\u6302\u8f7d\u5230\u4efb\u52a1\u4e2d\u3002

              \u6f14\u793a\u4ee3\u7801\u4ed3\u5e93\u5730\u5740\uff1ahttps://github.com/d-run/training-sample-code/

              "},{"location":"end-user/baize/jobs/tensorflow.html#_5","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
              • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528 python /code/tensorflow/tf-single.py
              \"\"\"\n  pip install tensorflow numpy\n\"\"\"\n\nimport tensorflow as tf\nimport numpy as np\n\n# \u521b\u5efa\u4e00\u4e9b\u968f\u673a\u6570\u636e\nx = np.random.rand(100, 1)\ny = 2 * x + 1 + np.random.rand(100, 1) * 0.1\n\n# \u521b\u5efa\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u578b\nmodel = tf.keras.Sequential([\n    tf.keras.layers.Dense(1, input_shape=(1,))\n])\n\n# \u7f16\u8bd1\u6a21\u578b\nmodel.compile(optimizer='adam', loss='mse')\n\n# \u8bad\u7ec3\u6a21\u578b\uff0c\u5c06 epochs \u6539\u4e3a 10\nhistory = model.fit(x, y, epochs=10, verbose=1)\n\n# \u6253\u5370\u6700\u7ec8\u635f\u5931\nprint('Final loss: {' + str(history.history['loss'][-1]) +'}')\n\n# \u4f7f\u7528\u6a21\u578b\u8fdb\u884c\u9884\u6d4b\ntest_x = np.array([[0.5]])\nprediction = model.predict(test_x)\nprint(f'Prediction for x=0.5: {prediction[0][0]}')\n
              "},{"location":"end-user/baize/jobs/tensorflow.html#_6","title":"\u8fd0\u884c\u7ed3\u679c","text":"

              \u4efb\u52a1\u63d0\u4ea4\u6210\u529f\u540e\uff0c\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\u67e5\u770b\u5230\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ece\u53f3\u4e0a\u89d2\u53bb\u5f80 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \uff0c\u53ef\u4ee5\u67e5\u770b\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u7684\u65e5\u5fd7\u8f93\u51fa\u3002

              "},{"location":"end-user/baize/jobs/tensorflow.html#tfjob_1","title":"TFJob \u5206\u5e03\u5f0f\u4efb\u52a1","text":"
              1. \u767b\u5f55 AI Lab \uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u7684 \u4efb\u52a1\u4e2d\u5fc3 \uff0c\u8fdb\u5165 \u4efb\u52a1\u5217\u8868 \u9875\u9762\u3002
              2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa \u6309\u94ae\uff0c\u8fdb\u5165\u4efb\u52a1\u521b\u5efa\u9875\u9762\u3002
              3. \u9009\u62e9\u4efb\u52a1\u7c7b\u578b\u4e3a Tensorflow \u5206\u5e03\u5f0f\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002
              4. \u586b\u5199\u4efb\u52a1\u540d\u79f0\u3001\u63cf\u8ff0\u540e\u70b9\u51fb \u786e\u5b9a \u3002
              "},{"location":"end-user/baize/jobs/tensorflow.html#_7","title":"\u793a\u4f8b\u4efb\u52a1\u4ecb\u7ecd","text":"

              \u672c\u6b21\u5305\u542b\u4e86\u4e09\u79cd\u89d2\u8272\uff1aChief\u3001Worker \u548c Parameter Server (PS)\u3002

              • Chief: \u4e3b\u8981\u8d1f\u8d23\u534f\u8c03\u8bad\u7ec3\u8fc7\u7a0b\u548c\u6a21\u578b\u68c0\u67e5\u70b9\u7684\u4fdd\u5b58\u3002
              • Worker: \u6267\u884c\u5b9e\u9645\u7684\u6a21\u578b\u8bad\u7ec3\u3002
              • PS: \u5728\u5f02\u6b65\u8bad\u7ec3\u4e2d\u7528\u4e8e\u5b58\u50a8\u548c\u66f4\u65b0\u6a21\u578b\u53c2\u6570\u3002

              \u4e3a\u4e0d\u540c\u7684\u89d2\u8272\u5206\u914d\u4e86\u4e0d\u540c\u7684\u8d44\u6e90\u3002Chief \u548c Worker \u4f7f\u7528 GPU\uff0c\u800c PS \u4f7f\u7528 CPU \u548c\u8f83\u5927\u7684\u5185\u5b58\u3002

              "},{"location":"end-user/baize/jobs/tensorflow.html#_8","title":"\u8fd0\u884c\u53c2\u6570","text":"
              • \u542f\u52a8\u547d\u4ee4 \u4f7f\u7528 bash
              • \u547d\u4ee4\u53c2\u6570\u4f7f\u7528 python /code/tensorflow/tensorflow-distributed.py
              import os\nimport json\nimport tensorflow as tf\n\nclass SimpleModel(tf.keras.Model):\n    def __init__(self):\n        super(SimpleModel, self).__init__()\n        self.fc = tf.keras.layers.Dense(1, input_shape=(10,))\n\n    def call(self, x):\n        return self.fc(x)\n\ndef train():\n    # \u6253\u5370\u73af\u5883\u4fe1\u606f\n    print(f\"TensorFlow version: {tf.__version__}\")\n    print(f\"GPU available: {tf.test.is_gpu_available()}\")\n    if tf.test.is_gpu_available():\n        print(f\"GPU device count: {len(tf.config.list_physical_devices('GPU'))}\")\n\n    # \u83b7\u53d6\u5206\u5e03\u5f0f\u8bad\u7ec3\u4fe1\u606f\n    tf_config = json.loads(os.environ.get('TF_CONFIG') or '{}')\n    task_type = tf_config.get('task', {}).get('type')\n    task_id = tf_config.get('task', {}).get('index')\n\n    print(f\"Task type: {task_type}, Task ID: {task_id}\")\n\n    # \u8bbe\u7f6e\u5206\u5e03\u5f0f\u7b56\u7565\n    strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()\n\n    with strategy.scope():\n        model = SimpleModel()\n        loss_fn = tf.keras.losses.MeanSquaredError()\n        optimizer = tf.keras.optimizers.SGD(learning_rate=0.001)\n\n    # \u751f\u6210\u4e00\u4e9b\u968f\u673a\u6570\u636e\n    data = tf.random.normal((100, 10))\n    labels = tf.random.normal((100, 1))\n\n    @tf.function\n    def train_step(inputs, labels):\n        with tf.GradientTape() as tape:\n            predictions = model(inputs)\n            loss = loss_fn(labels, predictions)\n        gradients = tape.gradient(loss, model.trainable_variables)\n        optimizer.apply_gradients(zip(gradients, model.trainable_variables))\n        return loss\n\n    for epoch in range(10):\n        loss = train_step(data, labels)\n        if task_type == 'chief':\n            print(f'Epoch {epoch}, Loss: {loss.numpy():.4f}')\n\nif __name__ == '__main__':\n    train()\n
              "},{"location":"end-user/baize/jobs/tensorflow.html#_9","title":"\u8fd0\u884c\u7ed3\u679c","text":"

              \u540c\u6837\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u5165\u4efb\u52a1\u8be6\u60c5\uff0c\u67e5\u770b\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u4ee5\u53ca\u6bcf\u4e2a Pod \u7684\u65e5\u5fd7\u8f93\u51fa\u3002

              "},{"location":"end-user/baize/jobs/view.html","title":"\u67e5\u770b\u4efb\u52a1\uff08Job\uff09\u5de5\u4f5c\u8d1f\u8f7d","text":"

              \u4efb\u52a1\u521b\u5efa\u597d\u540e\uff0c\u90fd\u4f1a\u663e\u793a\u5728\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u4e2d\u3002

              1. \u5728\u8bad\u7ec3\u8bad\u7ec3\u4efb\u52a1\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u67d0\u4e2a\u4efb\u52a1\u53f3\u4fa7\u7684 \u2507 -> \u4efb\u52a1\u8d1f\u8f7d\u8be6\u60c5 \u3002

              2. \u51fa\u73b0\u4e00\u4e2a\u5f39\u7a97\u9009\u62e9\u8981\u67e5\u770b\u54ea\u4e2a Pod \u540e\uff0c\u70b9\u51fb \u8fdb\u5165 \u3002

              3. \u8df3\u8f6c\u5230\u5bb9\u5668\u7ba1\u7406\u754c\u9762\uff0c\u53ef\u4ee5\u67e5\u770b\u5bb9\u5668\u7684\u5de5\u4f5c\u72b6\u6001\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u4ee5\u53ca\u53d1\u751f\u7684\u4e8b\u4ef6\u3002

              4. \u4f60\u8fd8\u53ef\u4ee5\u67e5\u770b\u5f53\u524d Pod \u6700\u8fd1\u4e00\u6bb5\u65f6\u95f4\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002 \u6b64\u5904\u9ed8\u8ba4\u5c55\u793a 100 \u884c\u65e5\u5fd7\uff0c\u5982\u679c\u8981\u67e5\u770b\u66f4\u8be6\u7ec6\u7684\u65e5\u5fd7\u6d3b\u4e0b\u8f7d\u65e5\u5fd7\uff0c\u8bf7\u70b9\u51fb\u9876\u90e8\u7684\u84dd\u8272 \u53ef\u89c2\u6d4b\u6027 \u6587\u5b57\u3002

              5. \u5f53\u7136\u4f60\u8fd8\u53ef\u4ee5\u901a\u8fc7\u53f3\u4e0a\u89d2\u7684 ... \uff0c\u67e5\u770b\u5f53\u524d Pod \u7684 YAML\u3001\u4e0a\u4f20\u548c\u4e0b\u8f7d\u6587\u4ef6\u3002 \u4ee5\u4e0b\u662f\u4e00\u4e2a Pod \u7684 YAML \u793a\u4f8b\u3002

              kind: Pod\napiVersion: v1\nmetadata:\n  name: neko-tensorboard-job-test-202404181843-skxivllb-worker-0\n  namespace: default\n  uid: ddedb6ff-c278-47eb-ae1e-0de9b7c62f8c\n  resourceVersion: '41092552'\n  creationTimestamp: '2024-04-18T10:43:36Z'\n  labels:\n    training.kubeflow.org/job-name: neko-tensorboard-job-test-202404181843-skxivllb\n    training.kubeflow.org/operator-name: pytorchjob-controller\n    training.kubeflow.org/replica-index: '0'\n    training.kubeflow.org/replica-type: worker\n  annotations:\n    cni.projectcalico.org/containerID: 0cfbb9af257d5e69027c603c6cb2d3890a17c4ae1a145748d5aef73a10d7fbe1\n    cni.projectcalico.org/podIP: ''\n    cni.projectcalico.org/podIPs: ''\n    hami.io/bind-phase: success\n    hami.io/bind-time: '1713437016'\n    hami.io/vgpu-devices-allocated: GPU-29d5fa0d-935b-2966-aff8-483a174d61d1,NVIDIA,1024,20:;\n    hami.io/vgpu-devices-to-allocate: ;\n    hami.io/vgpu-node: worker-a800-1\n    hami.io/vgpu-time: '1713437016'\n    k8s.v1.cni.cncf.io/network-status: |-\n      [{\n          \"name\": \"kube-system/calico\",\n          \"ips\": [\n              \"10.233.97.184\"\n          ],\n          \"default\": true,\n          \"dns\": {}\n      }]\n    k8s.v1.cni.cncf.io/networks-status: |-\n      [{\n          \"name\": \"kube-system/calico\",\n          \"ips\": [\n              \"10.233.97.184\"\n          ],\n          \"default\": true,\n          \"dns\": {}\n      }]\n  ownerReferences:\n    - apiVersion: kubeflow.org/v1\n      kind: PyTorchJob\n      name: neko-tensorboard-job-test-202404181843-skxivllb\n      uid: e5a8b05d-1f03-4717-8e1c-4ec928014b7b\n      controller: true\n      blockOwnerDeletion: true\nspec:\n  volumes:\n    - name: 0-dataset-pytorch-examples\n      persistentVolumeClaim:\n        claimName: pytorch-examples\n    - name: kube-api-access-wh9rh\n      projected:\n        sources:\n          - serviceAccountToken:\n              expirationSeconds: 3607\n              path: token\n          - configMap:\n              name: kube-root-ca.crt\n              items:\n                - key: ca.crt\n                  path: ca.crt\n          - downwardAPI:\n              items:\n                - path: namespace\n                  fieldRef:\n                    apiVersion: v1\n                    fieldPath: metadata.namespace\n        defaultMode: 420\n  containers:\n    - name: pytorch\n      image: m.daocloud.io/docker.io/pytorch/pytorch\n      command:\n        - bash\n      args:\n        - '-c'\n        - >-\n          ls -la /root && which pip && pip install pytorch_lightning tensorboard\n          && python /root/Git/pytorch/examples/mnist/main.py\n      ports:\n        - name: pytorchjob-port\n          containerPort: 23456\n          protocol: TCP\n      env:\n        - name: PYTHONUNBUFFERED\n          value: '1'\n        - name: PET_NNODES\n          value: '1'\n      resources:\n        limits:\n          cpu: '4'\n          memory: 8Gi\n          nvidia.com/gpucores: '20'\n          nvidia.com/gpumem: '1024'\n          nvidia.com/vgpu: '1'\n        requests:\n          cpu: '4'\n          memory: 8Gi\n          nvidia.com/gpucores: '20'\n          nvidia.com/gpumem: '1024'\n          nvidia.com/vgpu: '1'\n      volumeMounts:\n        - name: 0-dataset-pytorch-examples\n          mountPath: /root/Git/pytorch/examples\n        - name: kube-api-access-wh9rh\n          readOnly: true\n          mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n      terminationMessagePath: /dev/termination-log\n      terminationMessagePolicy: File\n      imagePullPolicy: Always\n  restartPolicy: Never\n  terminationGracePeriodSeconds: 30\n  dnsPolicy: ClusterFirst\n  serviceAccountName: default\n  serviceAccount: default\n  nodeName: worker-a800-1\n  securityContext: {}\n  affinity: {}\n  schedulerName: hami-scheduler\n  tolerations:\n    - key: node.kubernetes.io/not-ready\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n    - key: node.kubernetes.io/unreachable\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n  priorityClassName: baize-high-priority\n  priority: 100000\n  enableServiceLinks: true\n  preemptionPolicy: PreemptLowerPriority\nstatus:\n  phase: Succeeded\n  conditions:\n    - type: Initialized\n      status: 'True'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:43:36Z'\n      reason: PodCompleted\n    - type: Ready\n      status: 'False'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:46:34Z'\n      reason: PodCompleted\n    - type: ContainersReady\n      status: 'False'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:46:34Z'\n      reason: PodCompleted\n    - type: PodScheduled\n      status: 'True'\n      lastProbeTime: null\n      lastTransitionTime: '2024-04-18T10:43:36Z'\n  hostIP: 10.20.100.211\n  podIP: 10.233.97.184\n  podIPs:\n    - ip: 10.233.97.184\n  startTime: '2024-04-18T10:43:36Z'\n  containerStatuses:\n    - name: pytorch\n      state:\n        terminated:\n          exitCode: 0\n          reason: Completed\n          startedAt: '2024-04-18T10:43:39Z'\n          finishedAt: '2024-04-18T10:46:34Z'\n          containerID: >-\n            containerd://09010214bcf3315e81d38fba50de3943c9d2b48f50a6cc2e83f8ef0e5c6eeec1\n      lastState: {}\n      ready: false\n      restartCount: 0\n      image: m.daocloud.io/docker.io/pytorch/pytorch:latest\n      imageID: >-\n        m.daocloud.io/docker.io/pytorch/pytorch@sha256:11691e035a3651d25a87116b4f6adc113a27a29d8f5a6a583f8569e0ee5ff897\n      containerID: >-\n        containerd://09010214bcf3315e81d38fba50de3943c9d2b48f50a6cc2e83f8ef0e5c6eeec1\n      started: false\n  qosClass: Guaranteed\n
              "},{"location":"end-user/ghippo/personal-center/accesstoken.html","title":"\u8bbf\u95ee\u5bc6\u94a5","text":"

              \u8bbf\u95ee\u5bc6\u94a5\uff08Access Key\uff09\u53ef\u7528\u4e8e\u8bbf\u95ee\u5f00\u653e API \u548c\u6301\u7eed\u53d1\u5e03\uff0c\u7528\u6237\u53ef\u5728\u4e2a\u4eba\u4e2d\u5fc3\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u83b7\u53d6\u5bc6\u94a5\u5e76\u8bbf\u95ee API\u3002

              "},{"location":"end-user/ghippo/personal-center/accesstoken.html#_2","title":"\u83b7\u53d6\u5bc6\u94a5","text":"

              \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5728\u53f3\u4e0a\u89d2\u7684\u4e0b\u62c9\u83dc\u5355\u4e2d\u627e\u5230 \u4e2a\u4eba\u4e2d\u5fc3 \uff0c\u53ef\u4ee5\u5728 \u8bbf\u95ee\u5bc6\u94a5 \u9875\u9762\u7ba1\u7406\u8d26\u53f7\u7684\u8bbf\u95ee\u5bc6\u94a5\u3002

              Info

              \u8bbf\u95ee\u5bc6\u94a5\u4fe1\u606f\u4ec5\u663e\u793a\u4e00\u6b21\u3002\u5982\u679c\u60a8\u5fd8\u8bb0\u4e86\u8bbf\u95ee\u5bc6\u94a5\u4fe1\u606f\uff0c\u60a8\u9700\u8981\u91cd\u65b0\u521b\u5efa\u65b0\u7684\u8bbf\u95ee\u5bc6\u94a5\u3002

              "},{"location":"end-user/ghippo/personal-center/accesstoken.html#api","title":"\u4f7f\u7528\u5bc6\u94a5\u8bbf\u95ee API","text":"

              \u5728\u8bbf\u95ee\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0openAPI \u65f6\uff0c\u5728\u8bf7\u6c42\u4e2d\u52a0\u4e0a\u8bf7\u6c42\u5934 Authorization:Bearer ${token} \u4ee5\u6807\u8bc6\u8bbf\u95ee\u8005\u7684\u8eab\u4efd\uff0c \u5176\u4e2d ${token} \u662f\u4e0a\u4e00\u6b65\u4e2d\u83b7\u53d6\u5230\u7684\u5bc6\u94a5\uff0c\u5177\u4f53\u63a5\u53e3\u4fe1\u606f\u53c2\u89c1 OpenAPI \u63a5\u53e3\u6587\u6863\u3002

              \u8bf7\u6c42\u793a\u4f8b

              curl -X GET -H 'Authorization:Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkRKVjlBTHRBLXZ4MmtQUC1TQnVGS0dCSWc1cnBfdkxiQVVqM2U3RVByWnMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NjE0MTU5NjksImlhdCI6MTY2MDgxMTE2OSwiaXNzIjoiZ2hpcHBvLmlvIiwic3ViIjoiZjdjOGIxZjUtMTc2MS00NjYwLTg2MWQtOWI3MmI0MzJmNGViIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4iLCJncm91cHMiOltdfQ.RsUcrAYkQQ7C6BxMOrdD3qbBRUt0VVxynIGeq4wyIgye6R8Ma4cjxG5CbU1WyiHKpvIKJDJbeFQHro2euQyVde3ygA672ozkwLTnx3Tu-_mB1BubvWCBsDdUjIhCQfT39rk6EQozMjb-1X1sbLwzkfzKMls-oxkjagI_RFrYlTVPwT3Oaw-qOyulRSw7Dxd7jb0vINPq84vmlQIsI3UuTZSNO5BCgHpubcWwBss-Aon_DmYA-Et_-QtmPBA3k8E2hzDSzc7eqK0I68P25r9rwQ3DeKwD1dbRyndqWORRnz8TLEXSiCFXdZT2oiMrcJtO188Ph4eLGut1-4PzKhwgrQ' https://demo-dev.daocloud.io/apis/ghippo.io/v1alpha1/users?page=1&pageSize=10 -k\n

              \u8bf7\u6c42\u7ed3\u679c

              {\n    \"items\": [\n        {\n            \"id\": \"a7cfd010-ebbe-4601-987f-d098d9ef766e\",\n            \"name\": \"a\",\n            \"email\": \"\",\n            \"description\": \"\",\n            \"firstname\": \"\",\n            \"lastname\": \"\",\n            \"source\": \"locale\",\n            \"enabled\": true,\n            \"createdAt\": \"1660632794800\",\n            \"updatedAt\": \"0\",\n            \"lastLoginAt\": \"\"\n        }\n    ],\n    \"pagination\": {\n        \"page\": 1,\n        \"pageSize\": 10,\n        \"total\": 1\n    }\n}\n
              "},{"location":"end-user/ghippo/personal-center/language.html","title":"\u8bed\u8a00\u8bbe\u7f6e","text":"

              \u672c\u8282\u8bf4\u660e\u5982\u4f55\u8bbe\u7f6e\u754c\u9762\u8bed\u8a00\u3002\u76ee\u524d\u652f\u6301\u4e2d\u6587\u3001English \u4e24\u4e2a\u8bed\u8a00\u3002

              \u8bed\u8a00\u8bbe\u7f6e\u662f\u5e73\u53f0\u63d0\u4f9b\u591a\u8bed\u8a00\u670d\u52a1\u7684\u5165\u53e3\uff0c\u5e73\u53f0\u9ed8\u8ba4\u663e\u793a\u4e3a\u4e2d\u6587\uff0c\u7528\u6237\u53ef\u6839\u636e\u9700\u8981\u9009\u62e9\u82f1\u8bed\u6216\u81ea\u52a8\u68c0\u6d4b\u6d4f\u89c8\u5668\u8bed\u8a00\u9996\u9009\u9879\u7684\u65b9\u5f0f\u6765\u5207\u6362\u5e73\u53f0\u8bed\u8a00\u3002 \u6bcf\u4e2a\u7528\u6237\u7684\u591a\u8bed\u8a00\u670d\u52a1\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u5207\u6362\u540e\u4e0d\u4f1a\u5f71\u54cd\u5176\u4ed6\u7528\u6237\u3002

              \u5e73\u53f0\u63d0\u4f9b\u4e09\u79cd\u5207\u6362\u8bed\u8a00\u65b9\u5f0f\uff1a\u4e2d\u6587\u3001\u82f1\u8bed-English\u3001\u81ea\u52a8\u68c0\u6d4b\u60a8\u7684\u6d4f\u89c8\u5668\u8bed\u8a00\u9996\u9009\u9879\u3002

              \u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\u3002

              1. \u4f7f\u7528\u60a8\u7684\u7528\u6237\u540d/\u5bc6\u7801\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\u3002\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 \u3002

              2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684\u7528\u6237\u540d\u4f4d\u7f6e\uff0c\u9009\u62e9 \u4e2a\u4eba\u4e2d\u5fc3 \u3002

              3. \u70b9\u51fb \u8bed\u8a00\u8bbe\u7f6e \u9875\u7b7e\u3002

              4. \u5207\u6362\u8bed\u8a00\u9009\u9879\u3002

              "},{"location":"end-user/ghippo/personal-center/security-setting.html","title":"\u5b89\u5168\u8bbe\u7f6e","text":"

              \u529f\u80fd\u8bf4\u660e\uff1a\u7528\u4e8e\u586b\u5199\u90ae\u7bb1\u5730\u5740\u548c\u4fee\u6539\u767b\u5f55\u5bc6\u7801\u3002

              • \u90ae\u7bb1\uff1a\u5f53\u7ba1\u7406\u5458\u914d\u7f6e\u90ae\u7bb1\u670d\u52a1\u5668\u5730\u5740\u4e4b\u540e\uff0c\u7528\u6237\u80fd\u591f\u901a\u8fc7\u767b\u5f55\u9875\u7684\u5fd8\u8bb0\u5bc6\u7801\u6309\u94ae\uff0c\u586b\u5199\u8be5\u5904\u7684\u90ae\u7bb1\u5730\u5740\u4ee5\u627e\u56de\u5bc6\u7801\u3002
              • \u5bc6\u7801\uff1a\u7528\u4e8e\u767b\u5f55\u5e73\u53f0\u7684\u5bc6\u7801\uff0c\u5efa\u8bae\u5b9a\u671f\u4fee\u6539\u5bc6\u7801\u3002

              \u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

              1. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684\u7528\u6237\u540d\u4f4d\u7f6e\uff0c\u9009\u62e9 \u4e2a\u4eba\u4e2d\u5fc3 \u3002

              2. \u70b9\u51fb \u5b89\u5168\u8bbe\u7f6e \u9875\u7b7e\u3002\u586b\u5199\u60a8\u7684\u90ae\u7bb1\u5730\u5740\u6216\u4fee\u6539\u767b\u5f55\u5bc6\u7801\u3002

              "},{"location":"end-user/ghippo/personal-center/ssh-key.html","title":"\u914d\u7f6e SSH \u516c\u94a5","text":"

              \u672c\u6587\u8bf4\u660e\u5982\u4f55\u914d\u7f6e SSH \u516c\u94a5\u3002

              "},{"location":"end-user/ghippo/personal-center/ssh-key.html#1-ssh","title":"\u6b65\u9aa4 1\uff1a\u67e5\u770b\u5df2\u5b58\u5728\u7684 SSH \u5bc6\u94a5","text":"

              \u5728\u751f\u6210\u65b0\u7684 SSH \u5bc6\u94a5\u524d\uff0c\u8bf7\u5148\u786e\u8ba4\u662f\u5426\u9700\u8981\u4f7f\u7528\u672c\u5730\u5df2\u751f\u6210\u7684 SSH \u5bc6\u94a5\uff0cSSH \u5bc6\u94a5\u5bf9\u4e00\u822c\u5b58\u653e\u5728\u672c\u5730\u7528\u6237\u7684\u6839\u76ee\u5f55\u4e0b\u3002 Linux\u3001Mac \u8bf7\u76f4\u63a5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u5df2\u5b58\u5728\u7684\u516c\u94a5\uff0cWindows \u7528\u6237\u5728 WSL\uff08\u9700\u8981 Windows 10 \u6216\u4ee5\u4e0a\uff09\u6216 Git Bash \u4e0b\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u5df2\u751f\u6210\u7684\u516c\u94a5\u3002

              • ED25519 \u7b97\u6cd5\uff1a

                cat ~/.ssh/id_ed25519.pub\n
              • RSA \u7b97\u6cd5\uff1a

                cat ~/.ssh/id_rsa.pub\n

              \u5982\u679c\u8fd4\u56de\u4e00\u957f\u4e32\u4ee5 ssh-ed25519 \u6216 ssh-rsa \u5f00\u5934\u7684\u5b57\u7b26\u4e32\uff0c\u8bf4\u660e\u5df2\u5b58\u5728\u672c\u5730\u516c\u94a5\uff0c \u60a8\u53ef\u4ee5\u8df3\u8fc7\u6b65\u9aa4 2 \u751f\u6210 SSH \u5bc6\u94a5\uff0c\u76f4\u63a5\u64cd\u4f5c\u6b65\u9aa4 3\u3002

              "},{"location":"end-user/ghippo/personal-center/ssh-key.html#2-ssh","title":"\u6b65\u9aa4 2\uff1a\u751f\u6210 SSH \u5bc6\u94a5","text":"

              \u82e5\u6b65\u9aa4 1 \u672a\u8fd4\u56de\u6307\u5b9a\u7684\u5185\u5bb9\u5b57\u7b26\u4e32\uff0c\u8868\u793a\u672c\u5730\u6682\u65e0\u53ef\u7528 SSH \u5bc6\u94a5\uff0c\u9700\u8981\u751f\u6210\u65b0\u7684 SSH \u5bc6\u94a5\uff0c\u8bf7\u6309\u5982\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

              1. \u8bbf\u95ee\u7ec8\u7aef\uff08Windows \u8bf7\u4f7f\u7528 WSL \u6216 Git Bash\uff09\uff0c \u8fd0\u884c ssh-keygen -t\u3002

              2. \u8f93\u5165\u5bc6\u94a5\u7b97\u6cd5\u7c7b\u578b\u548c\u53ef\u9009\u7684\u6ce8\u91ca\u3002

                \u6ce8\u91ca\u4f1a\u51fa\u73b0\u5728 .pub \u6587\u4ef6\u4e2d\uff0c\u4e00\u822c\u53ef\u4f7f\u7528\u90ae\u7bb1\u4f5c\u4e3a\u6ce8\u91ca\u5185\u5bb9\u3002

                • \u57fa\u4e8e ED25519 \u7b97\u6cd5\uff0c\u751f\u6210\u5bc6\u94a5\u5bf9\u547d\u4ee4\u5982\u4e0b\uff1a

                  ssh-keygen -t ed25519 -C \"<\u6ce8\u91ca\u5185\u5bb9>\"\n
                • \u57fa\u4e8e RSA \u7b97\u6cd5\uff0c\u751f\u6210\u5bc6\u94a5\u5bf9\u547d\u4ee4\u5982\u4e0b\uff1a

                  ssh-keygen -t rsa -C \"<\u6ce8\u91ca\u5185\u5bb9>\"\n
              3. \u70b9\u51fb\u56de\u8f66\uff0c\u9009\u62e9 SSH \u5bc6\u94a5\u751f\u6210\u8def\u5f84\u3002

                \u4ee5 ED25519 \u7b97\u6cd5\u4e3a\u4f8b\uff0c\u9ed8\u8ba4\u8def\u5f84\u5982\u4e0b\uff1a

                Generating public/private ed25519 key pair.\nEnter file in which to save the key (/home/user/.ssh/id_ed25519):\n

                \u5bc6\u94a5\u9ed8\u8ba4\u751f\u6210\u8def\u5f84\uff1a/home/user/.ssh/id_ed25519\uff0c\u516c\u94a5\u4e0e\u4e4b\u5bf9\u5e94\u4e3a\uff1a/home/user/.ssh/id_ed25519.pub\u3002

              4. \u8bbe\u7f6e\u4e00\u4e2a\u5bc6\u94a5\u53e3\u4ee4\u3002

                Enter passphrase (empty for no passphrase):\nEnter same passphrase again:\n

                \u53e3\u4ee4\u9ed8\u8ba4\u4e3a\u7a7a\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u53e3\u4ee4\u4fdd\u62a4\u79c1\u94a5\u6587\u4ef6\u3002 \u5982\u679c\u60a8\u4e0d\u60f3\u5728\u6bcf\u6b21\u4f7f\u7528 SSH \u534f\u8bae\u8bbf\u95ee\u4ed3\u5e93\u65f6\uff0c\u90fd\u8981\u8f93\u5165\u7528\u4e8e\u4fdd\u62a4\u79c1\u94a5\u6587\u4ef6\u7684\u53e3\u4ee4\uff0c\u53ef\u4ee5\u5728\u521b\u5efa\u5bc6\u94a5\u65f6\uff0c\u8f93\u5165\u7a7a\u53e3\u4ee4\u3002

              5. \u70b9\u51fb\u56de\u8f66\uff0c\u5b8c\u6210\u5bc6\u94a5\u5bf9\u521b\u5efa\u3002

              "},{"location":"end-user/ghippo/personal-center/ssh-key.html#3","title":"\u6b65\u9aa4 3\uff1a\u62f7\u8d1d\u516c\u94a5","text":"

              \u9664\u4e86\u5728\u547d\u4ee4\u884c\u6253\u5370\u51fa\u5df2\u751f\u6210\u7684\u516c\u94a5\u4fe1\u606f\u624b\u52a8\u590d\u5236\u5916\uff0c\u53ef\u4ee5\u4f7f\u7528\u547d\u4ee4\u62f7\u8d1d\u516c\u94a5\u5230\u7c98\u8d34\u677f\u4e0b\uff0c\u8bf7\u53c2\u8003\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u62f7\u8d1d\u3002

              • Windows\uff08\u5728 WSL \u6216 Git Bash \u4e0b\uff09\uff1a

                cat ~/.ssh/id_ed25519.pub | clip\n
              • Mac\uff1a

                tr -d '\\n'< ~/.ssh/id_ed25519.pub | pbcopy\n
              • GNU/Linux (requires xclip):

                xclip -sel clip < ~/.ssh/id_ed25519.pub\n
              "},{"location":"end-user/ghippo/personal-center/ssh-key.html#4-ai","title":"\u6b65\u9aa4 4\uff1a\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0a\u8bbe\u7f6e\u516c\u94a5","text":"
              1. \u767b\u5f55\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0UI \u9875\u9762\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u4e2a\u4eba\u4e2d\u5fc3 -> SSH \u516c\u94a5 \u3002

              2. \u6dfb\u52a0\u751f\u6210\u7684 SSH \u516c\u94a5\u4fe1\u606f\u3002

                1. SSH \u516c\u94a5\u5185\u5bb9\u3002

                2. \u516c\u94a5\u6807\u9898\uff1a\u652f\u6301\u81ea\u5b9a\u4e49\u516c\u94a5\u540d\u79f0\uff0c\u7528\u4e8e\u533a\u5206\u7ba1\u7406\u3002

                3. \u8fc7\u671f\u65f6\u95f4\uff1a\u8bbe\u7f6e\u516c\u94a5\u8fc7\u671f\u65f6\u95f4\uff0c\u5230\u671f\u540e\u516c\u94a5\u5c06\u81ea\u52a8\u5931\u6548\uff0c\u4e0d\u53ef\u4f7f\u7528\uff1b\u5982\u679c\u4e0d\u8bbe\u7f6e\uff0c\u5219\u6c38\u4e45\u6709\u6548\u3002

              "},{"location":"end-user/ghippo/workspace/folder-permission.html","title":"\u6587\u4ef6\u5939\u6743\u9650\u8bf4\u660e","text":"

              \u6587\u4ef6\u5939\u5177\u6709\u6743\u9650\u6620\u5c04\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237/\u7528\u6237\u7ec4\u5728\u672c\u6587\u4ef6\u5939\u7684\u6743\u9650\u6620\u5c04\u5230\u5176\u4e0b\u7684\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u4ee5\u53ca\u8d44\u6e90\u4e0a\u3002

              \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u672c\u6587\u4ef6\u5939\u662f Folder Admin \u89d2\u8272\uff0c\u6620\u5c04\u5230\u5b50\u6587\u4ef6\u5939\u4ecd\u4e3a Folder Admin \u89d2\u8272\uff0c\u6620\u5c04\u5230\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4\u5219\u4e3a Workspace Admin\uff1b \u82e5\u5728 \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 -> \u8d44\u6e90\u7ec4 \u4e2d\u7ed1\u5b9a\u4e86 Namespace\uff0c\u5219\u6620\u5c04\u540e\u8be5\u7528\u6237/\u7528\u6237\u7ec4\u540c\u65f6\u8fd8\u662f Namespace Admin\u3002

              Note

              \u6587\u4ef6\u5939\u7684\u6743\u9650\u6620\u5c04\u80fd\u529b\u4e0d\u4f1a\u4f5c\u7528\u5230\u5171\u4eab\u8d44\u6e90\u4e0a\uff0c\u56e0\u4e3a\u5171\u4eab\u662f\u5c06\u96c6\u7fa4\u7684\u4f7f\u7528\u6743\u9650\u5171\u4eab\u7ed9\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u800c\u4e0d\u662f\u5c06\u7ba1\u7406\u6743\u9650\u53d7\u8ba9\u7ed9\u5de5\u4f5c\u7a7a\u95f4\uff0c\u56e0\u6b64\u4e0d\u4f1a\u5b9e\u73b0\u6743\u9650\u7ee7\u627f\u548c\u89d2\u8272\u6620\u5c04\u3002

              "},{"location":"end-user/ghippo/workspace/folder-permission.html#_2","title":"\u5e94\u7528\u573a\u666f","text":"

              \u6587\u4ef6\u5939\u5177\u6709\u5c42\u7ea7\u80fd\u529b\uff0c\u56e0\u6b64\u5c06\u6587\u4ef6\u5939\u5bf9\u5e94\u4e8e\u4f01\u4e1a\u4e2d\u7684\u90e8\u95e8/\u4f9b\u5e94\u5546/\u9879\u76ee\u7b49\u5c42\u7ea7\u65f6\uff0c

              • \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u4e00\u7ea7\u90e8\u95e8\u5177\u6709\u7ba1\u7406\u6743\u9650\uff08Admin\uff09\uff0c\u5176\u4e0b\u7684\u4e8c\u7ea7\u3001\u4e09\u7ea7\u3001\u56db\u7ea7\u90e8\u95e8\u6216\u9879\u76ee\u540c\u6837\u5177\u6709\u7ba1\u7406\u6743\u9650\uff1b
              • \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u4e00\u7ea7\u90e8\u95e8\u5177\u6709\u4f7f\u7528\u6743\u9650\uff08Editor\uff09\uff0c\u5176\u4e0b\u7684\u4e8c\u7ea7\u3001\u4e09\u7ea7\u3001\u56db\u7ea7\u90e8\u95e8\u6216\u9879\u76ee\u540c\u6837\u5177\u6709\u4f7f\u7528\u6743\u9650\uff1b
              • \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u4e00\u7ea7\u90e8\u95e8\u5177\u6709\u53ea\u8bfb\u6743\u9650\uff08Viewer\uff09\uff0c\u5176\u4e0b\u7684\u4e8c\u7ea7\u3001\u4e09\u7ea7\u3001\u56db\u7ea7\u90e8\u95e8\u6216\u9879\u76ee\u540c\u6837\u5177\u6709\u53ea\u8bfb\u6743\u9650\u3002
              \u5bf9\u8c61 \u64cd\u4f5c Folder Admin Folder Editor Folder Viewer \u5bf9\u6587\u4ef6\u5939\u672c\u8eab \u67e5\u770b \u2713 \u2713 \u2713 \u6388\u6743 \u2713 \u2717 \u2717 \u4fee\u6539\u522b\u540d \u2713 \u2717 \u2717 \u5bf9\u5b50\u6587\u4ef6\u5939 \u521b\u5efa \u2713 \u2717 \u2717 \u67e5\u770b \u2713 \u2713 \u2713 \u6388\u6743 \u2713 \u2717 \u2717 \u4fee\u6539\u522b\u540d \u2713 \u2717 \u2717 \u5bf9\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4 \u521b\u5efa \u2713 \u2717 \u2717 \u67e5\u770b \u2713 \u2713 \u2713 \u6388\u6743 \u2713 \u2717 \u2717 \u4fee\u6539\u522b\u540d \u2713 \u2717 \u2717 \u5bf9\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4 - \u8d44\u6e90\u7ec4 \u67e5\u770b \u2713 \u2713 \u2713 \u8d44\u6e90\u7ed1\u5b9a \u2713 \u2717 \u2717 \u89e3\u9664\u7ed1\u5b9a \u2713 \u2717 \u2717 \u5bf9\u5176\u4e0b\u7684\u5de5\u4f5c\u7a7a\u95f4 - \u5171\u4eab\u8d44\u6e90 \u67e5\u770b \u2713 \u2713 \u2713 \u65b0\u589e\u5171\u4eab \u2713 \u2717 \u2717 \u89e3\u9664\u5171\u4eab \u2713 \u2717 \u2717 \u8d44\u6e90\u9650\u989d \u2713 \u2717 \u2717"},{"location":"end-user/ghippo/workspace/folders.html","title":"\u521b\u5efa/\u5220\u9664\u6587\u4ef6\u5939","text":"

              \u6587\u4ef6\u5939\u5177\u6709\u6743\u9650\u6620\u5c04\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237/\u7528\u6237\u7ec4\u5728\u672c\u6587\u4ef6\u5939\u7684\u6743\u9650\u6620\u5c04\u5230\u5176\u4e0b\u7684\u5b50\u6587\u4ef6\u5939\u3001\u5de5\u4f5c\u7a7a\u95f4\u4ee5\u53ca\u8d44\u6e90\u4e0a\u3002

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\u3002

              1. \u4f7f\u7528 admin/folder admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u3002

              2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa\u6587\u4ef6\u5939 \u6309\u94ae\u3002

              3. \u586b\u5199\u6587\u4ef6\u5939\u540d\u79f0\u3001\u4e0a\u4e00\u7ea7\u6587\u4ef6\u5939\u7b49\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u521b\u5efa\u6587\u4ef6\u5939\u3002

              Tip

              \u521b\u5efa\u6210\u529f\u540e\u6587\u4ef6\u5939\u540d\u79f0\u5c06\u663e\u793a\u5728\u5de6\u4fa7\u7684\u6811\u72b6\u7ed3\u6784\u4e2d\uff0c\u4ee5\u4e0d\u540c\u7684\u56fe\u6807\u8868\u793a\u5de5\u4f5c\u7a7a\u95f4\u548c\u6587\u4ef6\u5939\u3002

              Note

              \u9009\u4e2d\u67d0\u4e00\u4e2a\u6587\u4ef6\u5939\u6216\u6587\u4ef6\u5939\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u53ef\u4ee5\u8fdb\u884c\u7f16\u8f91\u6216\u5220\u9664\u3002

              • \u5f53\u8be5\u6587\u4ef6\u5939\u4e0b\u8d44\u6e90\u7ec4\u3001\u5171\u4eab\u8d44\u6e90\u4e2d\u5b58\u5728\u8d44\u6e90\u65f6\uff0c\u8be5\u6587\u4ef6\u5939\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u8d44\u6e90\u89e3\u7ed1\u540e\u518d\u5220\u9664\u3002

              • \u5f53\u5fae\u670d\u52a1\u5f15\u64ce\u6a21\u5757\u5728\u8be5\u6587\u4ef6\u5939\u4e0b\u5b58\u5728\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u8d44\u6e90\u65f6\uff0c\u8be5\u6587\u4ef6\u5939\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u79fb\u9664\u540e\u518d\u5220\u9664\u6587\u4ef6\u5939\u3002

              "},{"location":"end-user/ghippo/workspace/quota.html","title":"\u8d44\u6e90\u914d\u989d\uff08Quota\uff09","text":"

              \u5171\u4eab\u8d44\u6e90\u5e76\u975e\u610f\u5473\u7740\u88ab\u5171\u4eab\u8005\u53ef\u4ee5\u65e0\u9650\u5236\u5730\u4f7f\u7528\u88ab\u5171\u4eab\u7684\u8d44\u6e90\u3002 Admin\u3001Kpanda Owner \u548c Workspace Admin \u53ef\u4ee5\u901a\u8fc7\u5171\u4eab\u8d44\u6e90\u4e2d\u7684 \u8d44\u6e90\u914d\u989d \u529f\u80fd\u9650\u5236\u67d0\u4e2a\u7528\u6237\u7684\u6700\u5927\u4f7f\u7528\u989d\u5ea6\u3002 \u82e5\u4e0d\u9650\u5236\uff0c\u5219\u8868\u793a\u53ef\u4ee5\u65e0\u9650\u5236\u4f7f\u7528\u3002

              • CPU \u8bf7\u6c42\uff08Core\uff09
              • CPU \u9650\u5236\uff08Core\uff09
              • \u5185\u5b58\u8bf7\u6c42\uff08MB\uff09
              • \u5185\u5b58\u9650\u5236\uff08MB\uff09
              • \u5b58\u50a8\u8bf7\u6c42\u603b\u91cf\uff08GB\uff09
              • \u5b58\u50a8\u5377\u58f0\u660e\uff08\u4e2a\uff09
              • GPU \u7c7b\u578b\u3001\u89c4\u683c\u3001\u6570\u91cf\uff08\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e Nvidia\u3001Ascend\u3001lluvatar\u7b49GPU\u5361\u7c7b\u578b\uff09

              \u4e00\u4e2a\u8d44\u6e90\uff08\u96c6\u7fa4\uff09\u53ef\u4ee5\u88ab\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5171\u4eab\uff0c\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u4e5f\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u591a\u4e2a\u5171\u4eab\u96c6\u7fa4\u4e2d\u7684\u8d44\u6e90\u3002

              "},{"location":"end-user/ghippo/workspace/quota.html#_1","title":"\u8d44\u6e90\u7ec4\u548c\u5171\u4eab\u8d44\u6e90","text":"

              \u5171\u4eab\u8d44\u6e90\u548c\u8d44\u6e90\u7ec4\u4e2d\u7684\u96c6\u7fa4\u8d44\u6e90\u5747\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\uff0c\u4f46\u662f\u96c6\u7fa4\u7ed1\u5b9a\u548c\u5171\u4eab\u7ed9\u540c\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5c06\u4f1a\u4ea7\u751f\u4e24\u79cd\u622a\u7136\u4e0d\u540c\u7684\u6548\u679c\u3002

              1. \u7ed1\u5b9a\u8d44\u6e90

                \u4f7f\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u7528\u6237/\u7528\u6237\u7ec4\u5177\u6709\u8be5\u96c6\u7fa4\u7684\u5168\u90e8\u7ba1\u7406\u548c\u4f7f\u7528\u6743\u9650\uff0cWorkspace Admin \u5c06\u88ab\u6620\u5c04\u4e3a Cluster Admin\u3002 Workspace Admin \u80fd\u591f\u8fdb\u5165\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7ba1\u7406\u8be5\u96c6\u7fa4\u3002

                Note

                \u5f53\u524d\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u6682\u65e0 Cluster Editor \u548c Cluster Viewer \u89d2\u8272\uff0c\u56e0\u6b64 Workspace Editor\u3001Workspace Viewer \u8fd8\u65e0\u6cd5\u6620\u5c04\u3002

              2. \u65b0\u589e\u5171\u4eab\u8d44\u6e90

                \u4f7f\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u7528\u6237/\u7528\u6237\u7ec4\u5177\u6709\u8be5\u96c6\u7fa4\u8d44\u6e90\u7684\u4f7f\u7528\u6743\u9650\uff0c\u8fd9\u4e9b\u8d44\u6e90\u53ef\u4ee5\u5728\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff08Namespace\uff09\u65f6\u4f7f\u7528\u3002

                \u4e0e\u8d44\u6e90\u7ec4\u4e0d\u540c\uff0c\u5c06\u96c6\u7fa4\u5171\u4eab\u5230\u5de5\u4f5c\u7a7a\u95f4\u65f6\uff0c\u7528\u6237\u5728\u5de5\u4f5c\u7a7a\u95f4\u7684\u89d2\u8272\u4e0d\u4f1a\u6620\u5c04\u5230\u8d44\u6e90\u4e0a\uff0c\u56e0\u6b64 Workspace Admin \u4e0d\u4f1a\u88ab\u6620\u5c04\u4e3a Cluster admin\u3002

              \u672c\u8282\u5c55\u793a 3 \u4e2a\u4e0e\u8d44\u6e90\u914d\u989d\u6709\u5173\u7684\u573a\u666f\u3002

              "},{"location":"end-user/ghippo/workspace/quota.html#_2","title":"\u521b\u5efa\u547d\u540d\u7a7a\u95f4","text":"

              \u521b\u5efa\u547d\u540d\u7a7a\u95f4\u65f6\u4f1a\u6d89\u53ca\u5230\u8d44\u6e90\u914d\u989d\u3002

              1. \u5728\u5de5\u4f5c\u7a7a\u95f4 ws01 \u65b0\u589e\u4e00\u4e2a\u5171\u4eab\u96c6\u7fa4\u3002

              2. \u5728\u5e94\u7528\u5de5\u4f5c\u53f0\u9009\u62e9\u5de5\u4f5c\u7a7a\u95f4 ws01 \u548c\u5171\u4eab\u96c6\u7fa4\uff0c\u521b\u5efa\u547d\u540d\u7a7a\u95f4 ns01\u3002

                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u4e2d\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4e0d\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\u3002
                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u4e2d\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff08\u4f8b\u5982 CPU \u8bf7\u6c42 = 100 core\uff09\uff0c\u5219\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u65f6 CPU \u8bf7\u6c42 \u2264 100 core \u3002
              "},{"location":"end-user/ghippo/workspace/quota.html#_3","title":"\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4","text":"

              \u524d\u63d0\uff1a\u5de5\u4f5c\u7a7a\u95f4 ws01 \u5df2\u65b0\u589e\u5171\u4eab\u96c6\u7fa4\uff0c\u64cd\u4f5c\u8005\u4e3a Workspace Admin + Kpanda Owner \u6216 Admin \u89d2\u8272\u3002

              \u4ee5\u4e0b\u4e24\u79cd\u7ed1\u5b9a\u65b9\u5f0f\u7684\u6548\u679c\u76f8\u540c\u3002

              • \u5728\u5bb9\u5668\u7ba1\u7406\u4e2d\u5c06\u521b\u5efa\u7684\u547d\u540d\u7a7a\u95f4 ns01 \u7ed1\u5b9a\u5230 ws01

                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5747\u53ef\u6210\u529f\u7ed1\u5b9a\u3002
                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u5fc5\u987b\u6ee1\u8db3 CPU \u8bf7\u6c42 \u2264 100 core \u624d\u80fd\u7ed1\u5b9a\u6210\u529f\u3002
              • \u5728\u5168\u5c40\u7ba1\u7406\u4e2d\uff0c\u5c06\u547d\u540d\u7a7a\u95f4 ns01 \u7ed1\u5b9a\u5230 ws01

                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5747\u53ef\u6210\u529f\u7ed1\u5b9a\u3002
                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u5fc5\u987b\u6ee1\u8db3 CPU \u8bf7\u6c42 \u2264 100 core \u624d\u80fd\u7ed1\u5b9a\u6210\u529f\u3002
              "},{"location":"end-user/ghippo/workspace/quota.html#_4","title":"\u4ece\u5de5\u4f5c\u7a7a\u95f4\u89e3\u7ed1\u547d\u540d\u7a7a\u95f4","text":"

              \u4ee5\u4e0b\u4e24\u79cd\u89e3\u7ed1\u65b9\u5f0f\u7684\u6548\u679c\u76f8\u540c\u3002

              • \u5728\u5bb9\u5668\u7ba1\u7406\u4e2d\u5c06\u547d\u540d\u7a7a\u95f4 ns01 \u4ece\u5de5\u4f5c\u7a7a\u95f4 ws01 \u89e3\u7ed1

                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u4e2d\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u89e3\u7ed1\u540e\u5747\u4e0d\u4f1a\u5bf9\u8d44\u6e90\u914d\u989d\u4ea7\u751f\u5f71\u54cd\u3002
                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u547d\u540d\u7a7a\u95f4 ns01 \u4e5f\u8bbe\u7f6e\u4e86\u8d44\u6e90\u914d\u989d\uff0c\u5219\u89e3\u7ed1\u540e\u5c06\u91ca\u653e\u76f8\u5e94\u7684\u8d44\u6e90\u989d\u5ea6\u3002
              • \u5728\u5168\u5c40\u7ba1\u7406\u4e2d\u5c06\u547d\u540d\u7a7a\u95f4 ns01 \u4ece\u5de5\u4f5c\u7a7a\u95f4 ws01 \u89e3\u7ed1

                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u672a\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u5219\u547d\u540d\u7a7a\u95f4 ns01 \u65e0\u8bba\u662f\u5426\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d\uff0c\u89e3\u7ed1\u540e\u5747\u4e0d\u4f1a\u5bf9\u8d44\u6e90\u914d\u989d\u4ea7\u751f\u5f71\u54cd\u3002
                • \u82e5\u5728\u5171\u4eab\u96c6\u7fa4\u5df2\u8bbe\u7f6e\u8d44\u6e90\u914d\u989d CPU \u8bf7\u6c42 = 100 core \uff0c\u547d\u540d\u7a7a\u95f4 ns01 \u4e5f\u8bbe\u7f6e\u4e86\u8d44\u6e90\u914d\u989d\uff0c\u5219\u89e3\u7ed1\u540e\u5c06\u91ca\u653e\u76f8\u5e94\u7684\u8d44\u6e90\u989d\u5ea6\u3002
              "},{"location":"end-user/ghippo/workspace/res-gp-and-shared-res.html","title":"\u8d44\u6e90\u7ec4\u4e0e\u5171\u4eab\u8d44\u6e90\u7684\u533a\u522b","text":"

              \u8d44\u6e90\u7ec4\u4e0e\u5171\u4eab\u8d44\u6e90\u5747\u652f\u6301\u7ed1\u5b9a\u96c6\u7fa4\uff0c\u4f46\u4f7f\u7528\u4e0a\u5b58\u5728\u5f88\u5927\u533a\u522b\u3002

              "},{"location":"end-user/ghippo/workspace/res-gp-and-shared-res.html#_2","title":"\u4f7f\u7528\u573a\u666f\u533a\u522b","text":"
              • \u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\uff1a\u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\u901a\u5e38\u88ab\u7528\u6765\u6279\u91cf\u6388\u6743\u3002\u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\u540e\uff0c \u5de5\u4f5c\u7a7a\u95f4\u7ba1\u7406\u5458\u5c06\u88ab\u6620\u5c04\u4e3a\u96c6\u7fa4\u7ba1\u7406\u5458\uff0c\u80fd\u591f\u7ba1\u7406\u5e76\u4f7f\u7528\u96c6\u7fa4\u8d44\u6e90\u3002
              • \u5171\u4eab\u8d44\u6e90\u7ed1\u5b9a\u96c6\u7fa4\uff1a\u8d44\u6e90\u5171\u4eab\u7ed1\u5b9a\u96c6\u7fa4\u901a\u5e38\u88ab\u7528\u6765\u505a\u8d44\u6e90\u9650\u989d\u3002 \u5178\u578b\u7684\u573a\u666f\u662f\u5e73\u53f0\u7ba1\u7406\u5458\u5c06\u96c6\u7fa4\u5206\u914d\u7ed9\u4e00\u7ea7\u4f9b\u5e94\u5546\u540e\uff0c\u518d\u7531\u4e00\u7ea7\u4f9b\u5e94\u5546\u5206\u914d\u7ed9\u4e8c\u7ea7\u4f9b\u5e94\u5546\u5e76\u5bf9\u4e8c\u7ea7\u4f9b\u5e94\u5546\u8fdb\u884c\u8d44\u6e90\u9650\u989d\u3002

              \u8bf4\u660e\uff1a\u5728\u8be5\u573a\u666f\u4e2d\uff0c\u9700\u8981\u5e73\u53f0\u7ba1\u7406\u5458\u5bf9\u4e8c\u7ea7\u4f9b\u5e94\u5546\u8fdb\u884c\u8d44\u6e90\u9650\u5236\uff0c\u6682\u65f6\u8fd8\u4e0d\u652f\u6301\u4e00\u7ea7\u4f9b\u5e94\u5546\u9650\u5236\u4e8c\u7ea7\u4f9b\u5e94\u5546\u7684\u96c6\u7fa4\u989d\u5ea6\u3002

              "},{"location":"end-user/ghippo/workspace/res-gp-and-shared-res.html#_3","title":"\u96c6\u7fa4\u989d\u5ea6\u7684\u4f7f\u7528\u533a\u522b","text":"
              • \u8d44\u6e90\u7ec4\u7ed1\u5b9a\u96c6\u7fa4\uff1a\u5de5\u4f5c\u7a7a\u95f4\u7684\u7ba1\u7406\u5458\u5c06\u88ab\u6620\u5c04\u4e3a\u8be5\u96c6\u7fa4\u7684\u7ba1\u7406\u5458\uff0c\u76f8\u5f53\u4e8e\u5728\u5bb9\u5668\u7ba1\u7406-\u6743\u9650\u7ba1\u7406\u4e2d\u88ab\u6388\u4e88 Cluster Admin \u89d2\u8272\uff0c \u80fd\u591f\u65e0\u9650\u5236\u652f\u914d\u8be5\u96c6\u7fa4\u8d44\u6e90\uff0c\u7ba1\u7406\u8282\u70b9\u7b49\u91cd\u8981\u5185\u5bb9\uff0c\u4e14\u8d44\u6e90\u7ec4\u4e0d\u80fd\u591f\u88ab\u8d44\u6e90\u9650\u989d\u3002
              • \u5171\u4eab\u8d44\u6e90\u7ed1\u5b9a\u8d44\u6e90\uff1a\u5de5\u4f5c\u7a7a\u95f4\u7ba1\u7406\u5458\u4ec5\u80fd\u591f\u4f7f\u7528\u96c6\u7fa4\u4e2d\u7684\u989d\u5ea6\u5728\u5e94\u7528\u5de5\u4f5c\u53f0\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff0c\u4e0d\u5177\u5907\u96c6\u7fa4\u7684\u7ba1\u7406\u6743\u9650\u3002 \u82e5\u5bf9\u8be5\u5de5\u4f5c\u7a7a\u95f4\u9650\u5236\u989d\u5ea6\uff0c\u5219\u5de5\u4f5c\u7a7a\u95f4\u7ba1\u7406\u4ec5\u80fd\u591f\u5728\u989d\u5ea6\u8303\u56f4\u5185\u521b\u5efa\u5e76\u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u3002
              "},{"location":"end-user/ghippo/workspace/res-gp-and-shared-res.html#_4","title":"\u8d44\u6e90\u7c7b\u578b\u7684\u533a\u522b","text":"
              • \u8d44\u6e90\u7ec4\uff1a\u80fd\u591f\u7ed1\u5b9a\u96c6\u7fa4\u3001\u96c6\u7fa4-\u547d\u540d\u7a7a\u95f4\u3001\u591a\u4e91\u3001\u591a\u4e91-\u547d\u540d\u7a7a\u95f4\u3001\u7f51\u683c\u3001\u7f51\u683c-\u547d\u540d\u7a7a\u95f4
              • \u5171\u4eab\u8d44\u6e90\uff1a\u4ec5\u80fd\u591f\u7ed1\u5b9a\u96c6\u7fa4
              "},{"location":"end-user/ghippo/workspace/res-gp-and-shared-res.html#_5","title":"\u8d44\u6e90\u7ec4\u4e0e\u5171\u4eab\u8d44\u6e90\u7684\u76f8\u540c\u70b9","text":"

              \u5728\u8d44\u6e90\u7ec4/\u5171\u4eab\u8d44\u6e90\u7ed1\u5b9a\u96c6\u7fa4\u540e\u90fd\u53ef\u4ee5\u524d\u5f80\u5e94\u7528\u5de5\u4f5c\u53f0\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff0c\u521b\u5efa\u540e\u547d\u540d\u7a7a\u95f4\u5c06\u81ea\u52a8\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\u3002

              "},{"location":"end-user/ghippo/workspace/workspace.html","title":"\u521b\u5efa/\u5220\u9664\u5de5\u4f5c\u7a7a\u95f4","text":"

              \u5de5\u4f5c\u7a7a\u95f4\u662f\u4e00\u79cd\u8d44\u6e90\u8303\u7574\uff0c\u4ee3\u8868\u4e00\u79cd\u8d44\u6e90\u5c42\u7ea7\u5173\u7cfb\u3002 \u5de5\u4f5c\u7a7a\u95f4\u53ef\u4ee5\u5305\u542b\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u6ce8\u518c\u4e2d\u5fc3\u7b49\u8d44\u6e90\u3002 \u901a\u5e38\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5bf9\u5e94\u4e00\u4e2a\u9879\u76ee\uff0c\u53ef\u4ee5\u4e3a\u6bcf\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u4e0d\u540c\u7684\u8d44\u6e90\uff0c\u6307\u6d3e\u4e0d\u540c\u7684\u7528\u6237\u548c\u7528\u6237\u7ec4\u3002

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u3002

              1. \u4f7f\u7528 admin/folder admin \u89d2\u8272\u7684\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u5e95\u90e8\u7684 \u5168\u5c40\u7ba1\u7406 -> \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u3002

              2. \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4 \u6309\u94ae\u3002

              3. \u586b\u5199\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u3001\u6240\u5c5e\u6587\u4ef6\u5939\u7b49\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\u3002

              Tip

              \u521b\u5efa\u6210\u529f\u540e\u5de5\u4f5c\u7a7a\u95f4\u540d\u79f0\u5c06\u663e\u793a\u5728\u5de6\u4fa7\u7684\u6811\u72b6\u7ed3\u6784\u4e2d\uff0c\u4ee5\u4e0d\u540c\u7684\u56fe\u6807\u8868\u793a\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u3002

              Note

              \u9009\u4e2d\u67d0\u4e00\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u6216\u6587\u4ef6\u5939\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 ... \u53ef\u4ee5\u8fdb\u884c\u7f16\u8f91\u6216\u5220\u9664\u3002

              • \u5f53\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u8d44\u6e90\u7ec4\u3001\u5171\u4eab\u8d44\u6e90\u4e2d\u5b58\u5728\u8d44\u6e90\u65f6\uff0c\u8be5\u5de5\u4f5c\u7a7a\u95f4\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u8d44\u6e90\u89e3\u7ed1\u540e\u518d\u5220\u9664\u3002
              • \u5f53\u5fae\u670d\u52a1\u5f15\u64ce\u6a21\u5757\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u5b58\u5728\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u8d44\u6e90\u65f6\uff0c\u8be5\u5de5\u4f5c\u7a7a\u95f4\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u6240\u6709\u63a5\u5165\u6ce8\u518c\u4e2d\u5fc3\u79fb\u9664\u540e\u518d\u5220\u9664\u5de5\u4f5c\u7a7a\u95f4\u3002
              • \u5f53\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u4e0b\u5b58\u5728\u955c\u50cf\u7a7a\u95f4\u6216\u96c6\u6210\u4ed3\u5e93\u65f6\uff0c\u8be5\u5de5\u4f5c\u7a7a\u95f4\u65e0\u6cd5\u88ab\u5220\u9664\uff0c\u9700\u8981\u5c06\u955c\u50cf\u7a7a\u95f4\u89e3\u7ed1\uff0c\u5c06\u4ed3\u5e93\u96c6\u6210\u5220\u9664\u540e\u518d\u5220\u9664\u5de5\u4f5c\u7a7a\u95f4\u3002
              "},{"location":"end-user/ghippo/workspace/ws-folder.html","title":"\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7","text":"

              \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u662f\u4e00\u4e2a\u5177\u6709\u5c42\u7ea7\u7684\u8d44\u6e90\u9694\u79bb\u548c\u8d44\u6e90\u5206\u7ec4\u7279\u6027\uff0c\u4e3b\u8981\u89e3\u51b3\u8d44\u6e90\u7edf\u4e00\u6388\u6743\u3001\u8d44\u6e90\u5206\u7ec4\u4ee5\u53ca\u8d44\u6e90\u9650\u989d\u95ee\u9898\u3002

              \u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7 \u6709\u4e24\u4e2a\u6982\u5ff5\uff1a\u5de5\u4f5c\u7a7a\u95f4\u548c\u6587\u4ef6\u5939\u3002

              "},{"location":"end-user/ghippo/workspace/ws-folder.html#_2","title":"\u5de5\u4f5c\u7a7a\u95f4","text":"

              \u5de5\u4f5c\u7a7a\u95f4\u53ef\u901a\u8fc7 \u6388\u6743 \u3001 \u8d44\u6e90\u7ec4 \u548c \u5171\u4eab\u8d44\u6e90 \u6765\u7ba1\u7406\u8d44\u6e90\uff0c\u4f7f\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u4e4b\u95f4\u80fd\u591f\u5171\u4eab\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u8d44\u6e90\u3002

              • \u8d44\u6e90

                \u8d44\u6e90\u5904\u4e8e\u8d44\u6e90\u7ba1\u7406\u6a21\u5757\u5c42\u7ea7\u7ed3\u6784\u7684\u6700\u4f4e\u5c42\u7ea7\uff0c\u8d44\u6e90\u5305\u62ec Cluster\u3001Namespace\u3001Pipeline\u3001\u7f51\u5173\u7b49\u3002 \u6240\u6709\u8fd9\u4e9b\u8d44\u6e90\u7684\u7236\u7ea7\u53ea\u80fd\u662f\u5de5\u4f5c\u7a7a\u95f4\uff0c\u800c\u5de5\u4f5c\u7a7a\u95f4\u4f5c\u4e3a\u8d44\u6e90\u5bb9\u5668\u662f\u4e00\u79cd\u8d44\u6e90\u5206\u7ec4\u5355\u4f4d\u3002

              • \u5de5\u4f5c\u7a7a\u95f4

                \u5de5\u4f5c\u7a7a\u95f4\u901a\u5e38\u4ee3\u6307\u4e00\u4e2a\u9879\u76ee\u6216\u73af\u5883\uff0c\u6bcf\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u7684\u8d44\u6e90\u76f8\u5bf9\u4e8e\u5176\u4ed6\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u8d44\u6e90\u65f6\u903b\u8f91\u9694\u79bb\u7684\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u6388\u6743\uff0c\u6388\u4e88\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u540c\u4e00\u7ec4\u8d44\u6e90\u7684\u4e0d\u540c\u8bbf\u95ee\u6743\u9650\u3002

                \u4ece\u5c42\u6b21\u7ed3\u6784\u7684\u5e95\u5c42\u7b97\u8d77\uff0c\u5de5\u4f5c\u7a7a\u95f4\u4f4d\u4e8e\u7b2c\u4e00\u5c42\uff0c\u4e14\u5305\u542b\u8d44\u6e90\u3002 \u9664\u5171\u4eab\u8d44\u6e90\u5916\uff0c\u6240\u6709\u8d44\u6e90\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u7236\u9879\u3002\u6240\u6709\u5de5\u4f5c\u7a7a\u95f4\u4e5f\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u7236\u7ea7\u6587\u4ef6\u5939\u3002

                \u8d44\u6e90\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u8fdb\u884c\u5206\u7ec4\uff0c\u800c\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u5b58\u5728\u4e24\u79cd\u5206\u7ec4\u6a21\u5f0f\uff0c\u5206\u522b\u662f \u8d44\u6e90\u7ec4 \u548c \u5171\u4eab\u8d44\u6e90 \u3002

              • \u8d44\u6e90\u7ec4

                \u4e00\u4e2a\u8d44\u6e90\u53ea\u80fd\u52a0\u5165\u4e00\u4e2a\u8d44\u6e90\u7ec4\uff0c\u8d44\u6e90\u7ec4\u4e0e\u5de5\u4f5c\u7a7a\u95f4\u4e00\u4e00\u5bf9\u5e94\u3002 \u8d44\u6e90\u88ab\u52a0\u5165\u5230\u8d44\u6e90\u7ec4\u540e\uff0cWorkspace Admin \u5c06\u83b7\u5f97\u8d44\u6e90\u7684\u7ba1\u7406\u6743\u9650\uff0c\u76f8\u5f53\u4e8e\u8be5\u8d44\u6e90\u7684\u6240\u6709\u8005\u3002

              • \u5171\u4eab\u8d44\u6e90

                \u800c\u5bf9\u4e8e\u5171\u4eab\u8d44\u6e90\u6765\u8bf4\uff0c\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\u53ef\u4ee5\u5171\u4eab\u540c\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u8d44\u6e90\u3002 \u8d44\u6e90\u7684\u6240\u6709\u8005\uff0c\u53ef\u4ee5\u9009\u62e9\u5c06\u81ea\u5df1\u62e5\u6709\u7684\u8d44\u6e90\u5171\u4eab\u7ed9\u5de5\u4f5c\u7a7a\u95f4\u4f7f\u7528\uff0c\u4e00\u822c\u5171\u4eab\u65f6\u8d44\u6e90\u6240\u6709\u8005\u4f1a\u9650\u5236\u88ab\u5171\u4eab\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u4f7f\u7528\u7684\u8d44\u6e90\u989d\u5ea6\u3002 \u8d44\u6e90\u88ab\u5171\u4eab\u540e\uff0cWorkspace Admin \u4ec5\u5177\u6709\u8d44\u6e90\u9650\u989d\u4e0b\u7684\u8d44\u6e90\u4f7f\u7528\u6743\u9650\uff0c\u65e0\u6cd5\u7ba1\u7406\u8d44\u6e90\u6216\u8005\u8c03\u6574\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u4f7f\u7528\u7684\u8d44\u6e90\u91cf\u3002

                \u540c\u65f6\u5171\u4eab\u8d44\u6e90\u5bf9\u4e8e\u8d44\u6e90\u672c\u8eab\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u8981\u6c42\uff0c\u53ea\u6709 Cluster\uff08\u96c6\u7fa4\uff09\u8d44\u6e90\u53ef\u4ee5\u88ab\u5171\u4eab\u3002 Cluster Admin \u80fd\u591f\u5c06 Cluster \u8d44\u6e90\u5206\u4eab\u7ed9\u4e0d\u540c\u7684\u5de5\u4f5c\u7a7a\u95f4\u4f7f\u7528\uff0c\u5e76\u4e14\u9650\u5236\u5de5\u4f5c\u7a7a\u95f4\u5728\u6b64 Cluster \u4e0a\u7684\u4f7f\u7528\u989d\u5ea6\u3002

                Workspace Admin \u5728\u8d44\u6e90\u9650\u989d\u5185\u80fd\u591f\u521b\u5efa\u591a\u4e2a Namespace\uff0c\u4f46\u662f Namespace \u7684\u8d44\u6e90\u989d\u5ea6\u603b\u548c\u4e0d\u80fd\u8d85\u8fc7 Cluster \u5728\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684\u8d44\u6e90\u9650\u989d\u3002 \u5bf9\u4e8e Kubernetes \u8d44\u6e90\uff0c\u5f53\u524d\u80fd\u591f\u5206\u4eab\u7684\u8d44\u6e90\u7c7b\u578b\u4ec5\u6709 Cluster\u3002

              "},{"location":"end-user/ghippo/workspace/ws-folder.html#_3","title":"\u6587\u4ef6\u5939","text":"

              \u6587\u4ef6\u5939\u53ef\u7528\u4e8e\u6784\u5efa\u4f01\u4e1a\u4e1a\u52a1\u5c42\u7ea7\u5173\u7cfb\u3002

              • \u6587\u4ef6\u5939\u662f\u5728\u5de5\u4f5c\u7a7a\u95f4\u57fa\u7840\u4e4b\u4e0a\u7684\u8fdb\u4e00\u6b65\u5206\u7ec4\u673a\u5236\uff0c\u5177\u6709\u5c42\u7ea7\u7ed3\u6784\u3002 \u4e00\u4e2a\u6587\u4ef6\u5939\u53ef\u4ee5\u5305\u542b\u5de5\u4f5c\u7a7a\u95f4\u3001\u5176\u4ed6\u6587\u4ef6\u5939\u6216\u4e24\u8005\u7684\u7ec4\u5408\uff0c\u80fd\u591f\u5f62\u6210\u6811\u72b6\u7684\u7ec4\u7ec7\u5173\u7cfb\u3002

              • \u501f\u52a9\u6587\u4ef6\u5939\u60a8\u53ef\u4ee5\u6620\u5c04\u4f01\u4e1a\u4e1a\u52a1\u5c42\u7ea7\u5173\u7cfb\uff0c\u6309\u7167\u90e8\u95e8\u5bf9\u5de5\u4f5c\u7a7a\u95f4\u8fdb\u884c\u5206\u7ec4\u3002 \u6587\u4ef6\u5939\u4e0d\u76f4\u63a5\u4e0e\u8d44\u6e90\u6302\u94a9\uff0c\u800c\u662f\u901a\u8fc7\u5de5\u4f5c\u7a7a\u95f4\u95f4\u63a5\u5b9e\u73b0\u8d44\u6e90\u5206\u7ec4\u3002

              • \u6587\u4ef6\u5939\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u7236\u7ea7\u6587\u4ef6\u5939\uff0c\u800c\u6839\u6587\u4ef6\u5939\u662f\u5c42\u6b21\u7ed3\u6784\u7684\u6700\u9ad8\u5c42\u7ea7\u3002 \u6839\u6587\u4ef6\u5939\u6ca1\u6709\u7236\u7ea7\uff0c\u6587\u4ef6\u5939\u548c\u5de5\u4f5c\u7a7a\u95f4\u5747\u6302\u9760\u5230\u6839\u6587\u4ef6\u5939\u4e0b\u3002

              \u53e6\u5916\uff0c\u7528\u6237\uff08\u7528\u6237\u7ec4\uff09\u5728\u6587\u4ef6\u5939\u4e2d\u80fd\u591f\u901a\u8fc7\u5c42\u7ea7\u7ed3\u6784\u7ee7\u627f\u6765\u81ea\u7236\u9879\u7684\u6743\u9650\u3002 \u7528\u6237\u5728\u5c42\u6b21\u7ed3\u6784\u4e2d\u7684\u6743\u9650\u6765\u81ea\u5f53\u524d\u5c42\u7ea7\u7684\u6743\u9650\u4ee5\u53ca\u7ee7\u627f\u5176\u7236\u9879\u6743\u9650\u7684\u7ec4\u5408\u7ed3\u679c\uff0c\u6743\u9650\u4e4b\u95f4\u662f\u52a0\u5408\u5173\u7cfb\u4e0d\u5b58\u5728\u4e92\u65a5\u3002

              "},{"location":"end-user/ghippo/workspace/ws-permission.html","title":"\u5de5\u4f5c\u7a7a\u95f4\u6743\u9650\u8bf4\u660e","text":"

              \u5de5\u4f5c\u7a7a\u95f4\u5177\u6709\u6743\u9650\u6620\u5c04\u548c\u8d44\u6e90\u9694\u79bb\u80fd\u529b\uff0c\u80fd\u591f\u5c06\u7528\u6237/\u7528\u6237\u7ec4\u5728\u5de5\u4f5c\u7a7a\u95f4\u7684\u6743\u9650\u6620\u5c04\u5230\u5176\u4e0b\u7684\u8d44\u6e90\u4e0a\u3002 \u82e5\u7528\u6237/\u7528\u6237\u7ec4\u5728\u5de5\u4f5c\u7a7a\u95f4\u662f Workspace Admin \u89d2\u8272\uff0c\u540c\u65f6\u5de5\u4f5c\u7a7a\u95f4-\u8d44\u6e90\u7ec4\u4e2d\u7ed1\u5b9a\u4e86\u8d44\u6e90 Namespace\uff0c\u5219\u6620\u5c04\u540e\u8be5\u7528\u6237/\u7528\u6237\u7ec4\u5c06\u6210\u4e3a Namespace Admin\u3002

              Note

              \u5de5\u4f5c\u7a7a\u95f4\u7684\u6743\u9650\u6620\u5c04\u80fd\u529b\u4e0d\u4f1a\u4f5c\u7528\u5230\u5171\u4eab\u8d44\u6e90\u4e0a\uff0c\u56e0\u4e3a\u5171\u4eab\u662f\u5c06\u96c6\u7fa4\u7684\u4f7f\u7528\u6743\u9650\u5171\u4eab\u7ed9\u591a\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u800c\u4e0d\u662f\u5c06\u7ba1\u7406\u6743\u9650\u53d7\u8ba9\u7ed9\u5de5\u4f5c\u7a7a\u95f4\uff0c\u56e0\u6b64\u4e0d\u4f1a\u5b9e\u73b0\u6743\u9650\u7ee7\u627f\u548c\u89d2\u8272\u6620\u5c04\u3002

              "},{"location":"end-user/ghippo/workspace/ws-permission.html#_2","title":"\u5e94\u7528\u573a\u666f","text":"

              \u901a\u8fc7\u5c06\u8d44\u6e90\u7ed1\u5b9a\u5230\u4e0d\u540c\u7684\u5de5\u4f5c\u7a7a\u95f4\u80fd\u591f\u5b9e\u73b0\u8d44\u6e90\u9694\u79bb\u3002 \u56e0\u6b64\u501f\u52a9\u6743\u9650\u6620\u5c04\u3001\u8d44\u6e90\u9694\u79bb\u548c\u5171\u4eab\u8d44\u6e90\u80fd\u529b\u80fd\u591f\u5c06\u8d44\u6e90\u7075\u6d3b\u5206\u914d\u7ed9\u5404\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff08\u79df\u6237\uff09\u3002

              \u901a\u5e38\u9002\u7528\u4e8e\u4ee5\u4e0b\u4e24\u4e2a\u573a\u666f\uff1a

              • \u96c6\u7fa4\u4e00\u5bf9\u4e00

                \u666e\u901a\u96c6\u7fa4 \u90e8\u95e8/\u79df\u6237\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09 \u7528\u9014 \u96c6\u7fa4 01 A \u7ba1\u7406\u548c\u4f7f\u7528 \u96c6\u7fa4 02 B \u7ba1\u7406\u548c\u4f7f\u7528
              • \u96c6\u7fa4\u4e00\u5bf9\u591a

                \u96c6\u7fa4 \u90e8\u95e8/\u79df\u6237\uff08\u5de5\u4f5c\u7a7a\u95f4\uff09 \u8d44\u6e90\u9650\u989d \u96c6\u7fa4 01 A 100 \u6838 CPU B 50 \u6838 CPU
              "},{"location":"end-user/ghippo/workspace/ws-permission.html#_3","title":"\u6743\u9650\u8bf4\u660e","text":"\u64cd\u4f5c\u5bf9\u8c61 \u64cd\u4f5c Workspace Admin Workspace Editor Workspace Viewer \u672c\u8eab \u67e5\u770b \u2713 \u2713 \u2713 - \u6388\u6743 \u2713 \u2717 \u2717 - \u4fee\u6539\u522b\u540d \u2713 \u2713 \u2717 \u8d44\u6e90\u7ec4 \u67e5\u770b \u2713 \u2713 \u2713 - \u8d44\u6e90\u7ed1\u5b9a \u2713 \u2717 \u2717 - \u89e3\u9664\u7ed1\u5b9a \u2713 \u2717 \u2717 \u5171\u4eab\u8d44\u6e90 \u67e5\u770b \u2713 \u2713 \u2713 - \u65b0\u589e\u5171\u4eab \u2713 \u2717 \u2717 - \u89e3\u9664\u5171\u4eab \u2713 \u2717 \u2717 - \u8d44\u6e90\u9650\u989d \u2713 \u2717 \u2717 - \u4f7f\u7528\u5171\u4eab\u8d44\u6e90 1 \u2713 \u2717 \u2717
              1. \u6388\u6743\u7528\u6237\u53ef\u524d\u5f80\u5e94\u7528\u5de5\u4f5c\u53f0\u3001\u5fae\u670d\u52a1\u5f15\u64ce\u3001\u4e2d\u95f4\u4ef6\u3001\u591a\u4e91\u7f16\u6392\u3001\u670d\u52a1\u7f51\u683c\u7b49\u6a21\u5757\u4f7f\u7528\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u7684\u8d44\u6e90\u3002 \u6709\u5173 Workspace Admin\u3001Workspace Editor\u3001Workspace Viewer \u89d2\u8272\u5728\u5404\u4ea7\u54c1\u6a21\u5757\u7684\u64cd\u4f5c\u8303\u56f4\uff0c\u8bf7\u67e5\u9605\u5404\u6a21\u5757\u7684\u6743\u9650\u8bf4\u660e\uff1a

                • \u5e94\u7528\u5de5\u4f5c\u53f0\u6743\u9650\u8bf4\u660e
                • \u670d\u52a1\u7f51\u683c\u6743\u9650\u8bf4\u660e
                • \u4e2d\u95f4\u4ef6\u6743\u9650\u8bf4\u660e
                • \u5fae\u670d\u52a1\u5f15\u64ce\u6743\u9650\u8bf4\u660e
                • \u5bb9\u5668\u7ba1\u7406\u6743\u9650\u8bf4\u660e

                \u21a9

              "},{"location":"end-user/ghippo/workspace/wsbind-permission.html","title":"\u8d44\u6e90\u7ed1\u5b9a\u6743\u9650\u8bf4\u660e","text":"

              \u5047\u5982\u7528\u6237\u5c0f\u660e\uff08\u201c\u5c0f\u660e\u201d\u4ee3\u8868\u4efb\u4f55\u6709\u8d44\u6e90\u7ed1\u5b9a\u9700\u6c42\u7684\u7528\u6237\uff09\u5df2\u7ecf\u5177\u5907\u4e86 Workspace Admin \u89d2\u8272\u6216\u5df2\u901a\u8fc7\u81ea\u5b9a\u4e49\u89d2\u8272\u6388\u6743\uff0c \u540c\u65f6\u81ea\u5b9a\u4e49\u89d2\u8272\u4e2d\u5305\u542b\u5de5\u4f5c\u7a7a\u95f4\u7684\u201c\u8d44\u6e90\u7ed1\u5b9a\u201d\u6743\u9650\uff0c\u5e0c\u671b\u5c06\u67d0\u4e2a\u96c6\u7fa4\u6216\u8005\u67d0\u4e2a\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u5176\u6240\u5728\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u3002

              \u8981\u5c06\u96c6\u7fa4/\u547d\u540d\u7a7a\u95f4\u8d44\u6e90\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4\uff0c\u4e0d\u4ec5\u9700\u8981\u8be5\u5de5\u4f5c\u7a7a\u95f4\u7684\u201c\u8d44\u6e90\u7ed1\u5b9a\u201d\u6743\u9650\uff0c\u8fd8\u9700\u8981 Cluster Admin \u7684\u8d44\u6e90\u6743\u9650\u3002

              "},{"location":"end-user/ghippo/workspace/wsbind-permission.html#_2","title":"\u7ed9\u5c0f\u660e\u6388\u6743","text":"
              1. \u4f7f\u7528\u5e73\u53f0 Admin \u89d2\u8272\uff0c \u5728 \u5de5\u4f5c\u7a7a\u95f4 -> \u6388\u6743 \u9875\u9762\u7ed9\u5c0f\u660e\u6388\u4e88 Workspace Admin \u89d2\u8272\u3002

              2. \u7136\u540e\u5728 \u5bb9\u5668\u7ba1\u7406 -> \u6743\u9650\u7ba1\u7406 \u9875\u9762\uff0c\u901a\u8fc7 \u6dfb\u52a0\u6388\u6743 \u5c06\u5c0f\u660e\u6388\u6743\u4e3a Cluster Admin\u3002

              "},{"location":"end-user/ghippo/workspace/wsbind-permission.html#_3","title":"\u7ed1\u5b9a\u5230\u5de5\u4f5c\u7a7a\u95f4","text":"

              \u4f7f\u7528\u5c0f\u660e\u7684\u8d26\u53f7\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5728 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \u9875\u9762\uff0c\u901a\u8fc7 \u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4 \u529f\u80fd\uff0c \u5c0f\u660e\u53ef\u4ee5\u5c06\u6307\u5b9a\u96c6\u7fa4\u7ed1\u5b9a\u5230\u81ea\u5df1\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u3002

              Note

              \u5c0f\u660e\u80fd\u4e14\u53ea\u80fd\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5c06\u96c6\u7fa4\u6216\u8005\u8be5\u96c6\u7fa4\u4e0b\u7684\u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5230\u67d0\u4e2a\u5de5\u4f5c\u7a7a\u95f4\uff0c\u65e0\u6cd5\u5728\u5168\u5c40\u7ba1\u7406\u6a21\u5757\u5b8c\u6210\u6b64\u64cd\u4f5c\u3002

              \u7ed1\u5b9a\u547d\u540d\u7a7a\u95f4\u5230\u5de5\u4f5c\u7a7a\u95f4\u4e5f\u81f3\u5c11\u9700\u8981 Workspace Admin + Cluster Admin \u6743\u9650\u3002

              "},{"location":"end-user/host/createhost.html","title":"\u521b\u5efa\u548c\u542f\u52a8\u4e91\u4e3b\u673a","text":"

              \u7528\u6237\u5b8c\u6210\u6ce8\u518c\uff0c\u4e3a\u5176\u5206\u914d\u4e86\u5de5\u4f5c\u7a7a\u95f4\u3001\u547d\u540d\u7a7a\u95f4\u548c\u8d44\u6e90\u540e\uff0c\u5373\u53ef\u4ee5\u521b\u5efa\u5e76\u542f\u52a8\u4e91\u4e3b\u673a\u3002

              "},{"location":"end-user/host/createhost.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u7528\u6237\u5df2\u6210\u529f\u6ce8\u518c
              • \u7ba1\u7406\u5458\u4e3a\u7528\u6237\u7ed1\u5b9a\u4e86\u5de5\u4f5c\u7a7a\u95f4
              • \u7ba1\u7406\u5458\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u4e86\u8d44\u6e90
              "},{"location":"end-user/host/createhost.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u70b9\u51fb \u521b\u5efa\u4e91\u4e3b\u673a -> \u901a\u8fc7\u6a21\u677f\u521b\u5efa

              3. \u5b9a\u4e49\u7684\u4e91\u4e3b\u673a\u5404\u9879\u914d\u7f6e\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65

                \u57fa\u672c\u914d\u7f6e\u6a21\u677f\u914d\u7f6e\u5b58\u50a8\u4e0e\u7f51\u7edc

              4. \u914d\u7f6e root \u5bc6\u7801\u6216 ssh \u5bc6\u94a5\u540e\u70b9\u51fb \u786e\u5b9a

              5. \u8fd4\u56de\u4e3b\u673a\u5217\u8868\uff0c\u7b49\u5f85\u72b6\u6001\u53d8\u4e3a \u8fd0\u884c\u4e2d \u4e4b\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u53f3\u4fa7\u7684 \u2507 \u542f\u52a8\u4e3b\u673a\u3002

              \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528\u4e91\u4e3b\u673a

              "},{"location":"end-user/host/usehost.html","title":"\u4f7f\u7528\u4e91\u4e3b\u673a","text":"

              \u521b\u5efa\u5e76\u542f\u52a8\u4e91\u4e3b\u673a\u4e4b\u540e\uff0c\u7528\u6237\u5c31\u53ef\u4ee5\u5f00\u59cb\u4f7f\u7528\u4e91\u4e3b\u673a\u3002

              "},{"location":"end-user/host/usehost.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u7528\u6237\u5df2\u521b\u5efa\u5e76\u542f\u52a8\u4e91\u4e3b\u673a
              "},{"location":"end-user/host/usehost.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u5bfc\u822a\u5230 \u5bb9\u5668\u7ba1\u7406 -> \u5bb9\u5668\u7f51\u7edc -> \u670d\u52a1 \uff0c\u70b9\u51fb\u670d\u52a1\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u670d\u52a1\u8be6\u60c5\u9875\uff0c\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u66f4\u65b0

              3. \u66f4\u6539\u7aef\u53e3\u8303\u56f4\u4e3a 30900-30999\uff0c\u4f46\u4e0d\u80fd\u51b2\u7a81\u3002

              4. \u4ee5\u7ec8\u7aef\u7528\u6237\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5bfc\u822a\u5230\u5bf9\u5e94\u7684\u670d\u52a1\uff0c\u67e5\u770b\u8bbf\u95ee\u7aef\u53e3\u3002

              5. \u5728\u5916\u7f51\u4f7f\u7528 SSH \u5ba2\u6237\u7aef\u767b\u5f55\u4e91\u4e3b\u673a

              6. \u81f3\u6b64\uff0c\u4f60\u53ef\u4ee5\u5728\u4e91\u4e3b\u673a\u4e0a\u6267\u884c\u5404\u9879\u64cd\u4f5c\u3002

              \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528 Notebook

              "},{"location":"end-user/insight/alert-center/index.html","title":"\u544a\u8b66\u4e2d\u5fc3","text":"

              \u544a\u8b66\u4e2d\u5fc3\u662f AI \u7b97\u529b\u5e73\u53f0 \u63d0\u4f9b\u7684\u4e00\u4e2a\u91cd\u8981\u529f\u80fd\uff0c\u5b83\u8ba9\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u754c\u9762\u65b9\u4fbf\u5730\u6309\u7167\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u67e5\u770b\u6240\u6709\u6d3b\u52a8\u548c\u5386\u53f2\u544a\u8b66\uff0c \u5e76\u6839\u636e\u544a\u8b66\u7ea7\u522b\uff08\u7d27\u6025\u3001\u8b66\u544a\u3001\u63d0\u793a\uff09\u6765\u641c\u7d22\u544a\u8b66\u3002

              \u6240\u6709\u544a\u8b66\u90fd\u662f\u57fa\u4e8e\u9884\u8bbe\u7684\u544a\u8b66\u89c4\u5219\u8bbe\u5b9a\u7684\u9608\u503c\u6761\u4ef6\u89e6\u53d1\u7684\u3002\u5728 AI \u7b97\u529b\u5e73\u53f0\u4e2d\uff0c\u5185\u7f6e\u4e86\u4e00\u4e9b\u5168\u5c40\u544a\u8b66\u7b56\u7565\uff0c\u540c\u65f6\u60a8\u4e5f\u53ef\u4ee5\u968f\u65f6\u521b\u5efa\u3001\u5220\u9664\u544a\u8b66\u7b56\u7565\uff0c\u5bf9\u4ee5\u4e0b\u6307\u6807\u8fdb\u884c\u8bbe\u7f6e\uff1a

              • CPU \u4f7f\u7528\u91cf
              • \u5185\u5b58\u4f7f\u7528\u91cf
              • \u78c1\u76d8\u4f7f\u7528\u91cf
              • \u78c1\u76d8\u6bcf\u79d2\u8bfb\u6b21\u6570
              • \u78c1\u76d8\u6bcf\u79d2\u5199\u6b21\u6570
              • \u96c6\u7fa4\u78c1\u76d8\u8bfb\u53d6\u541e\u5410\u91cf
              • \u96c6\u7fa4\u78c1\u76d8\u5199\u5165\u541e\u5410\u91cf
              • \u7f51\u7edc\u53d1\u9001\u901f\u7387
              • \u7f51\u7edc\u63a5\u6536\u901f\u7387

              \u8fd8\u53ef\u4ee5\u4e3a\u544a\u8b66\u89c4\u5219\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002\u544a\u8b66\u89c4\u5219\u5206\u4e3a\u6d3b\u8dc3\u548c\u8fc7\u671f\u89c4\u5219\uff0c\u652f\u6301\u542f\u7528/\u7981\u7528\u67d0\u4e9b\u89c4\u5219\u6765\u5b9e\u73b0\u544a\u8b66\u9759\u9ed8\u3002

              \u5f53\u8fbe\u5230\u9608\u503c\u6761\u4ef6\u540e\uff0c\u53ef\u4ee5\u914d\u7f6e\u544a\u8b66\u901a\u77e5\u65b9\u5f0f\uff0c\u5305\u62ec\u90ae\u4ef6\u3001\u9489\u9489\u3001\u4f01\u4e1a\u5fae\u4fe1\u3001Webhook \u548c\u77ed\u4fe1\u901a\u77e5\u3002 \u6240\u6709\u901a\u77e5\u7684\u6d88\u606f\u6a21\u677f\u90fd\u53ef\u4ee5\u81ea\u5b9a\u4e49\uff0c\u540c\u65f6\u8fd8\u652f\u6301\u6309\u8bbe\u5b9a\u7684\u95f4\u9694\u65f6\u95f4\u53d1\u9001\u901a\u77e5\u3002

              \u6b64\u5916\uff0c\u544a\u8b66\u4e2d\u5fc3\u8fd8\u652f\u6301\u901a\u8fc7\u963f\u91cc\u4e91\u3001\u817e\u8baf\u4e91\u7b49\u63d0\u4f9b\u7684\u77ed\u4fe1\u670d\u52a1\u5c06\u544a\u8b66\u6d88\u606f\u53d1\u9001\u7ed9\u6307\u5b9a\u7528\u6237\uff0c\u5b9e\u73b0\u591a\u79cd\u65b9\u5f0f\u7684\u544a\u8b66\u901a\u77e5\u3002

              AI \u7b97\u529b\u5e73\u53f0 \u544a\u8b66\u4e2d\u5fc3\u662f\u4e00\u4e2a\u529f\u80fd\u5f3a\u5927\u7684\u544a\u8b66\u7ba1\u7406\u5e73\u53f0\uff0c\u53ef\u5e2e\u52a9\u7528\u6237\u53ca\u65f6\u53d1\u73b0\u548c\u89e3\u51b3\u96c6\u7fa4\u4e2d\u51fa\u73b0\u7684\u95ee\u9898\uff0c \u63d0\u9ad8\u4e1a\u52a1\u7a33\u5b9a\u6027\u548c\u53ef\u7528\u6027\uff0c\u4fbf\u4e8e\u96c6\u7fa4\u5de1\u68c0\u548c\u6545\u969c\u6392\u67e5\u3002

              "},{"location":"end-user/insight/alert-center/alert-policy.html","title":"\u544a\u8b66\u7b56\u7565","text":"

              \u544a\u8b66\u7b56\u7565\u662f\u5728\u53ef\u89c2\u6d4b\u6027\u7cfb\u7edf\u4e2d\u5b9a\u4e49\u7684\u4e00\u7ec4\u89c4\u5219\u548c\u6761\u4ef6\uff0c\u7528\u4e8e\u68c0\u6d4b\u548c\u89e6\u53d1\u8b66\u62a5\uff0c\u4ee5\u4fbf\u5728\u7cfb\u7edf\u51fa\u73b0\u5f02\u5e38\u6216\u8fbe\u5230\u9884\u5b9a\u7684\u9608\u503c\u65f6\u53ca\u65f6\u901a\u77e5\u76f8\u5173\u4eba\u5458\u6216\u7cfb\u7edf\u3002

              \u6bcf\u6761\u544a\u8b66\u7b56\u7565\u662f\u4e00\u7ec4\u544a\u8b66\u89c4\u5219\u7684\u96c6\u5408\uff0c\u652f\u6301\u5bf9\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5de5\u4f5c\u8d1f\u8f7d\u7b49\u8d44\u6e90\u3001\u65e5\u5fd7\u3001\u4e8b\u4ef6\u8bbe\u7f6e\u544a\u8b66\u89c4\u5219\u3002\u5f53\u544a\u8b66\u5bf9\u8c61\u8fbe\u5230\u7b56\u7565\u4e0b\u4efb\u4e00\u89c4\u5219\u8bbe\u5b9a\u7684\u9608\u503c\uff0c\u5219\u4f1a\u81ea\u52a8\u89e6\u53d1\u544a\u8b66\u5e76\u53d1\u9001\u901a\u77e5\u3002

              "},{"location":"end-user/insight/alert-center/alert-policy.html#_2","title":"\u67e5\u770b\u544a\u8b66\u7b56\u7565","text":"
              1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027\u3002
              2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u544a\u8b66\u4e2d\u5fc3 -> \u544a\u8b66\u7b56\u7565\u3002

                • \u96c6\u7fa4\uff1a\u5355\u51fb\u96c6\u7fa4\u4e0b\u62c9\u6846\u53ef\u5207\u6362\u96c6\u7fa4\uff1b
                • \u547d\u540d\u7a7a\u95f4\uff1a\u5355\u51fb\u547d\u540d\u7a7a\u95f4\u5207\u6362\u4e0b\u62c9\u6846\u3002

              3. \u70b9\u51fb\u544a\u8b66\u7b56\u7565\u540d\u79f0\u53ef\u67e5\u770b\u7b56\u7565\u7684\u57fa\u672c\u4fe1\u606f\u3001\u89c4\u5219\u4ee5\u53ca\u901a\u77e5\u914d\u7f6e\u3002

                1. \u5728\u89c4\u5219\u5217\u8868\u4e2d\u53ef\u67e5\u770b\u89c4\u5219\u7c7b\u578b\u3001\u89c4\u5219\u7684\u8868\u8fbe\u5f0f\u3001\u7ea7\u522b\u3001\u72b6\u6001\u7b49\u4fe1\u606f\u3002
                2. \u8fdb\u5165\u7b56\u7565\u8be6\u60c5\uff0c\u53ef\u4ee5\u6dfb\u52a0\u3001\u7f16\u8f91\u3001\u5220\u9664\u5176\u4e0b\u7684\u544a\u8b66\u89c4\u5219\u3002

              "},{"location":"end-user/insight/alert-center/alert-policy.html#_3","title":"\u521b\u5efa\u544a\u8b66\u7b56\u7565","text":"
              1. \u586b\u5199\u57fa\u672c\u4fe1\u606f\uff0c\u9009\u62e9\u4e00\u4e2a\u6216\u591a\u4e2a\u96c6\u7fa4\u3001\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\u4e3a\u544a\u8b66\u5bf9\u8c61\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65\u3002

                Note

                • \u9009\u62e9\u5168\u90e8\u96c6\u7fa4\u3001\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\uff1a\u521b\u5efa\u7684\u544a\u8b66\u89c4\u5219\u5bf9\u6240\u6709\u5df2\u5b89\u88c5 insight-agent \u7684\u96c6\u7fa4\u751f\u6548\u3002
                • \u9009\u62e9\u5355\u4e2a\u6216\u591a\u4e2a\u96c6\u7fa4\u96c6\u7fa4\u3001\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\uff1a\u521b\u5efa\u7684\u544a\u8b66\u89c4\u5219\u4ec5\u5bf9\u6240\u9009\u7684\u8d44\u6e90\u5bf9\u8c61\u751f\u6548\u3002
                • \u540c\u65f6\uff0c\u7528\u6237\u53ea\u80fd\u5bf9\u5df2\u6743\u9650\u7684\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u544a\u8b66\u89c4\u5219\u3002
              "},{"location":"end-user/insight/alert-center/alert-policy.html#_4","title":"\u624b\u52a8\u6dfb\u52a0\u89c4\u5219","text":"
              1. \u5728\u521b\u5efa\u544a\u8b66\u7b56\u7565\u7684\u7b2c\u4e8c\u90e8\u4e2d\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4e0a\u89d2\u7684\u6dfb\u52a0\u89c4\u5219\u3002

              2. \u5728\u5f39\u7a97\u4e2d\u521b\u5efa\u544a\u8b66\u89c4\u5219\uff0c\u586b\u5199\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a\u3002

                • \u6a21\u677f\u89c4\u5219\uff1a\u9884\u5b9a\u4e49\u4e86\u57fa\u7840\u6307\u6807\uff0c\u53ef\u4ee5\u6309 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u3001\u7f51\u7edc\u8bbe\u5b9a\u8981\u76d1\u63a7\u7684\u6307\u6807\u3002
                • PromQL \u89c4\u5219\uff1a\u8f93\u5165\u4e00\u4e2a PromQL \u8868\u8fbe\u5f0f\uff0c\u5177\u4f53\u8bf7\u67e5\u8be2 Prometheus \u8868\u8fbe\u5f0f\u3002
                • \u6301\u7eed\u65f6\u957f\uff1a\u544a\u8b66\u88ab\u89e6\u53d1\u4e14\u6301\u7eed\u65f6\u95f4\u8fbe\u5230\u8be5\u8bbe\u5b9a\u503c\u540e\uff0c\u544a\u8b66\u7b56\u7565\u5c06\u53d8\u4e3a\u89e6\u53d1\u4e2d\u72b6\u6001\u3002
                • \u544a\u8b66\u7ea7\u522b\uff1a\u5305\u542b\u7d27\u6025\u3001\u8b66\u544a\u3001\u4fe1\u606f\u4e09\u79cd\u7ea7\u522b\u3002
                • \u9ad8\u7ea7\u8bbe\u7f6e\uff1a\u53ef\u4ee5\u81ea\u5b9a\u4e49\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                Info

                \u7cfb\u7edf\u5b9a\u4e49\u4e86\u5185\u7f6e\u6807\u7b7e\uff0c\u82e5\u81ea\u5b9a\u4e49\u6807\u7b7e\u4e0e\u5185\u7f6e\u6807\u7b7e\u7684\u952e\u503c\u76f8\u540c\uff0c\u5219\u81ea\u5b9a\u4e49\u6807\u7b7e\u4e0d\u751f\u6548\u3002 \u5185\u7f6e\u6807\u7b7e\u6709\uff1aseverity\u3001rule_id\uff0csource\u3001cluster_name\u3001group_id\u3001 target_type \u548c target\u3002

              "},{"location":"end-user/insight/alert-center/alert-policy.html#_5","title":"\u521b\u5efa\u65e5\u5fd7\u89c4\u5219","text":"

              \u5b8c\u6210\u57fa\u672c\u4fe1\u606f\u7684\u586b\u5199\u540e\uff0c\u70b9\u51fb \u6dfb\u52a0\u89c4\u5219\uff0c\u89c4\u5219\u7c7b\u578b\u9009\u62e9 \u65e5\u5fd7\u89c4\u5219\u3002

              Note

              \u4ec5\u5f53\u8d44\u6e90\u5bf9\u8c61\u9009\u62e9\u8282\u70b9\u6216\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u652f\u6301\u521b\u5efa\u65e5\u5fd7\u89c4\u5219\u3002

              \u5b57\u6bb5\u8bf4\u660e\uff1a

              • \u8fc7\u6ee4\u6761\u4ef6\uff1a\u67e5\u8be2\u65e5\u5fd7\u5185\u5bb9\u7684\u5b57\u6bb5\uff0c\u652f\u6301\u4e0e\u3001\u6216\u3001\u6b63\u5219\u5339\u914d\u3001\u6a21\u7cca\u5339\u914d\u56db\u79cd\u8fc7\u6ee4\u6761\u4ef6\u3002
              • \u5224\u65ad\u6761\u4ef6\uff1a\u6839\u636e \u8fc7\u6ee4\u6761\u4ef6\uff0c\u8f93\u5165\u5173\u952e\u5b57\u6216\u5339\u914d\u6761\u4ef6\u3002
              • \u65f6\u95f4\u8303\u56f4\uff1a\u65e5\u5fd7\u67e5\u8be2\u7684\u65f6\u95f4\u8303\u56f4\u3002
              • \u9608\u503c\u6761\u4ef6\uff1a\u5728\u8f93\u5165\u6846\u4e2d\u8f93\u5165\u544a\u8b66\u9608\u503c\u3002\u5f53\u8fbe\u5230\u8bbe\u7f6e\u7684\u9608\u503c\u65f6\uff0c\u5219\u89e6\u53d1\u544a\u8b66\u3002\u652f\u6301\u7684\u6bd4\u8f83\u8fd0\u7b97\u7b26\u6709\uff1a >\u3001\u2265\u3001=\u3001\u2264\u3001<\u3002
              • \u544a\u8b66\u7ea7\u522b\uff1a\u9009\u62e9\u544a\u8b66\u7ea7\u522b\uff0c\u7528\u4e8e\u8868\u793a\u544a\u8b66\u7684\u4e25\u91cd\u7a0b\u5ea6\u3002
              "},{"location":"end-user/insight/alert-center/alert-policy.html#_6","title":"\u521b\u5efa\u4e8b\u4ef6\u89c4\u5219","text":"

              \u5b8c\u6210\u57fa\u672c\u4fe1\u606f\u7684\u586b\u5199\u540e\uff0c\u70b9\u51fb \u6dfb\u52a0\u89c4\u5219\uff0c\u89c4\u5219\u7c7b\u578b\u9009\u62e9 \u4e8b\u4ef6\u89c4\u5219\u3002

              Note

              \u4ec5\u5f53\u8d44\u6e90\u5bf9\u8c61\u9009\u62e9\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u652f\u6301\u521b\u5efa\u4e8b\u4ef6\u89c4\u5219\u3002

              \u5b57\u6bb5\u8bf4\u660e\uff1a

              • \u4e8b\u4ef6\u89c4\u5219\uff1a\u4ec5\u652f\u6301\u8d44\u6e90\u5bf9\u8c61\u9009\u62e9\u5de5\u4f5c\u8d1f\u8f7d
              • \u4e8b\u4ef6\u539f\u56e0\uff1a\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\u7c7b\u578b\u7684\u4e8b\u4ef6\u539f\u56e0\u4e0d\u540c\uff0c\u4e8b\u4ef6\u539f\u56e0\u4e4b\u95f4\u662f\u201c\u548c\u201d\u7684\u5173\u7cfb\u3002
              • \u65f6\u95f4\u8303\u56f4\uff1a\u68c0\u6d4b\u8be5\u65f6\u95f4\u8303\u56f4\u5185\u4ea7\u751f\u6570\u636e\uff0c\u82e5\u8fbe\u5230\u8bbe\u7f6e\u7684\u9608\u503c\u6761\u4ef6\uff0c\u5219\u89e6\u53d1\u544a\u8b66\u4e8b\u4ef6\u3002
              • \u9608\u503c\u6761\u4ef6\uff1a\u5f53\u4ea7\u751f\u7684\u4e8b\u4ef6\u8fbe\u5230\u8bbe\u7f6e\u7684\u9608\u503c\u65f6\uff0c\u5219\u89e6\u53d1\u544a\u8b66\u4e8b\u4ef6\u3002
              • \u8d8b\u52bf\u56fe\uff1a\u9ed8\u8ba4\u67e5\u8be2 10 \u5206\u949f\u5185\u7684\u4e8b\u4ef6\u53d8\u5316\u8d8b\u52bf\uff0c\u6bcf\u4e2a\u70b9\u7684\u6570\u503c\u7edf\u8ba1\u7684\u662f\u5f53\u524d\u65f6\u95f4\u70b9\u5230\u4e4b\u524d\u7684\u67d0\u6bb5\u65f6\u95f4\uff08\u65f6\u95f4\u8303\u56f4\uff09\u5185\u53d1\u751f\u7684\u603b\u6b21\u6570\u3002
              "},{"location":"end-user/insight/alert-center/alert-policy.html#_7","title":"\u5bfc\u5165\u89c4\u5219\u6a21\u677f","text":"
              1. \u53ef\u70b9\u51fb \u6a21\u677f\u5bfc\u5165\uff0c\u9009\u62e9\u5e73\u53f0\u7ba1\u7406\u5458\u5df2\u521b\u5efa\u597d\u7684\u544a\u8b66\u6a21\u677f\u6279\u91cf\u5bfc\u5165\u544a\u8b66\u89c4\u5219\u3002

              2. \u70b9\u51fb \u4e0b\u4e00\u6b65 \u540e\u914d\u7f6e\u901a\u77e5\u3002

              3. \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u8fd4\u56de\u544a\u8b66\u7b56\u7565\u5217\u8868\u3002

              Tip

              \u65b0\u5efa\u7684\u544a\u8b66\u7b56\u7565\u4e3a \u672a\u89e6\u53d1 \u72b6\u6001\u3002\u4e00\u65e6\u6ee1\u8db3\u89c4\u5219\u4e2d\u7684\u9608\u503c\u6761\u4ef6\u548c\u6301\u7eed\u65f6\u95f4\u540e\uff0c\u5c06\u53d8\u4e3a \u89e6\u53d1\u4e2d \u72b6\u6001\u3002

              Warning

              \u5220\u9664\u540e\u7684\u544a\u8b66\u7b56\u7565\u5c06\u5b8c\u5168\u6d88\u5931\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

              "},{"location":"end-user/insight/alert-center/alert-policy.html#yaml","title":"\u901a\u8fc7 YAML \u5bfc\u5165\u544a\u8b66\u7b56\u7565","text":"
              1. \u8fdb\u5165\u544a\u8b66\u7b56\u7565\u5217\u8868\uff0c\u70b9\u51fb YAML \u521b\u5efa\u3002

              2. \u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u7684\u9009\u62e9\u662f\u4e3a\u4e86\u544a\u8b66\u7b56\u7565\u7684\u7ba1\u7406\u6743\u9650\u3002

              3. YAML \u7f16\u8f91\u5668\u4e2d\u8bf7\u586b\u5199 spec \u53ca\u5176\u4e2d\u7684\u5185\u5bb9\uff0c\u4ec5\u652f\u6301\u5bfc\u5165\u4e00\u4e2a group\u3002
              4. \u544a\u8b66\u89c4\u5219\u540d\u79f0 \u9700\u8981\u7b26\u5408\u89c4\u8303\uff1a\u540d\u79f0\u53ea\u80fd\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u4e0b\u5212\u7ebf\uff08_\uff09\u548c\u8fde\u5b57\u7b26\uff08-\uff09\uff0c\u5fc5\u987b\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002
              5. \u5fc5\u586b severity \u4e14\u7b26\u5408\u89c4\u8303\uff1acritical\u3001warning\u3001info\u3002
              6. \u5fc5\u586b\u8868\u8fbe\u5f0f expr\u3002

              7. \u5bfc\u5165 YAML \u6587\u4ef6\u540e\uff0c\u70b9\u51fb \u9884\u89c8\uff0c\u53ef\u4ee5\u5bf9\u5bfc\u5165\u7684 YAML \u683c\u5f0f\u8fdb\u884c\u9a8c\u8bc1\uff0c\u5e76\u5feb\u901f\u786e\u8ba4\u5bfc\u5165\u7684\u544a\u8b66\u89c4\u5219\u3002

              "},{"location":"end-user/insight/alert-center/alert-template.html","title":"\u544a\u8b66\u6a21\u677f","text":"

              \u544a\u8b66\u6a21\u677f\u53ef\u652f\u6301\u5e73\u53f0\u7ba1\u7406\u5458\u521b\u5efa\u544a\u8b66\u6a21\u677f\u53ca\u89c4\u5219\uff0c\u4e1a\u52a1\u4fa7\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u544a\u8b66\u6a21\u677f\u521b\u5efa\u544a\u8b66\u7b56\u7565\u3002 \u8fd9\u4e2a\u529f\u80fd\u53ef\u4ee5\u51cf\u5c11\u4e1a\u52a1\u4eba\u5458\u5bf9\u544a\u8b66\u89c4\u5219\u7684\u7ba1\u7406\uff0c\u4e14\u53ef\u4ee5\u6839\u636e\u73af\u5883\u5b9e\u9645\u60c5\u51b5\u81ea\u884c\u4fee\u6539\u544a\u8b66\u9608\u503c\u3002

              "},{"location":"end-user/insight/alert-center/alert-template.html#_2","title":"\u521b\u5efa\u544a\u8b66\u6a21\u677f","text":"
              1. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u7b56\u7565\uff0c\u5355\u51fb\u9876\u90e8\u7684 \u544a\u8b66\u6a21\u677f \u3002

              2. \u70b9\u51fb \u521b\u5efa\u544a\u8b66\u6a21\u677f \uff0c\u8bbe\u7f6e\u544a\u8b66\u6a21\u677f\u7684\u540d\u79f0\u3001\u63cf\u8ff0\u7b49\u4fe1\u606f\u3002

                \u53c2\u6570 \u8bf4\u660e \u6a21\u677f\u540d\u79f0 \u540d\u79f0\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u8fde\u5b57\u7b26\uff08-\uff09\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002 \u63cf\u8ff0 \u63cf\u8ff0\u53ef\u5305\u542b\u4efb\u610f\u5b57\u7b26\uff0c\u6700\u957f 256 \u4e2a\u5b57\u7b26\u3002 \u8d44\u6e90\u7c7b\u578b \u7528\u4e8e\u6307\u5b9a\u544a\u8b66\u6a21\u677f\u7684\u5339\u914d\u7c7b\u578b\u3002 \u544a\u8b66\u89c4\u5219 \u652f\u6301\u9884\u5b9a\u4e49\u591a\u4e2a\u544a\u8b66\u89c4\u5219\uff0c\u53ef\u6dfb\u52a0\u6a21\u677f\u89c4\u5219\u3001PromQL \u89c4\u5219\u3002
              3. \u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u540e\u8fd4\u56de\u544a\u8b66\u6a21\u677f\u5217\u8868\uff0c\u70b9\u51fb\u6a21\u677f\u540d\u79f0\u540e\u53ef\u67e5\u770b\u6a21\u677f\u8be6\u60c5\u3002

              "},{"location":"end-user/insight/alert-center/alert-template.html#_3","title":"\u7f16\u8f91\u544a\u8b66\u6a21\u677f","text":"

              \u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540e\u7684 \u2507 \uff0c\u70b9\u51fb \u7f16\u8f91\uff0c\u8fdb\u5165\u6291\u5236\u89c4\u5219\u7684\u7f16\u8f91\u9875\u3002

              "},{"location":"end-user/insight/alert-center/alert-template.html#_4","title":"\u5220\u9664\u544a\u8b66\u6a21\u677f","text":"

              \u70b9\u51fb\u76ee\u6807\u6a21\u677f\u540e\u4fa7\u7684 \u2507 \uff0c\u70b9\u51fb \u5220\u9664\uff0c\u5728\u8f93\u5165\u6846\u4e2d\u8f93\u5165\u544a\u8b66\u6a21\u677f\u7684\u540d\u79f0\u5373\u53ef\u5220\u9664\u3002

              "},{"location":"end-user/insight/alert-center/inhibition.html","title":"\u544a\u8b66\u6291\u5236","text":"

              \u544a\u8b66\u6291\u5236\u4e3b\u8981\u662f\u5bf9\u4e8e\u67d0\u4e9b\u4e0d\u9700\u8981\u7acb\u5373\u5173\u6ce8\u7684\u544a\u8b66\u8fdb\u884c\u4e34\u65f6\u9690\u85cf\u6216\u8005\u964d\u4f4e\u5176\u4f18\u5148\u7ea7\u7684\u4e00\u79cd\u673a\u5236\u3002\u8fd9\u4e2a\u529f\u80fd\u7684\u76ee\u7684\u662f\u4e3a\u4e86\u51cf\u5c11\u4e0d\u5fc5\u8981\u7684\u544a\u8b66\u4fe1\u606f\u5bf9\u8fd0\u7ef4\u4eba\u5458\u7684\u5e72\u6270\uff0c\u4f7f\u4ed6\u4eec\u80fd\u591f\u96c6\u4e2d\u7cbe\u529b\u5904\u7406\u66f4\u91cd\u8981\u7684\u95ee\u9898\u3002

              \u544a\u8b66\u6291\u5236\u901a\u8fc7\u5b9a\u4e49\u4e00\u7ec4\u89c4\u5219\u6765\u8bc6\u522b\u548c\u5ffd\u7565\u67d0\u4e9b\u544a\u8b66\uff0c\u5f53\u5b83\u4eec\u5728\u7279\u5b9a\u6761\u4ef6\u4e0b\u53d1\u751f\u65f6\u3002\u4e3b\u8981\u6709\u4ee5\u4e0b\u51e0\u79cd\u60c5\u51b5\uff1a

              • \u7236\u5b50\u5173\u7cfb\u6291\u5236\uff1a\u5f53\u4e00\u4e2a\u7236\u544a\u8b66\uff08\u4f8b\u5982\u67d0\u4e2a\u8282\u70b9\u7684\u5d29\u6e83\uff09\u89e6\u53d1\u65f6\uff0c\u53ef\u4ee5\u6291\u5236\u6240\u6709\u7531\u6b64\u5f15\u8d77\u7684\u5b50\u544a\u8b66\uff08\u4f8b\u5982\u8be5\u8282\u70b9\u4e0a\u8fd0\u884c\u7684\u5bb9\u5668\u5d29\u6e83\uff09\u3002
              • \u76f8\u4f3c\u544a\u8b66\u6291\u5236\uff1a\u5f53\u591a\u4e2a\u544a\u8b66\u5177\u6709\u76f8\u540c\u7684\u7279\u5f81\uff08\u4f8b\u5982\u540c\u4e00\u5b9e\u4f8b\u4e0a\u7684\u76f8\u540c\u95ee\u9898\uff09\u65f6\uff0c\u53ef\u4ee5\u6291\u5236\u91cd\u590d\u7684\u544a\u8b66\u901a\u77e5\u3002
              "},{"location":"end-user/insight/alert-center/inhibition.html#_2","title":"\u521b\u5efa\u6291\u5236\u89c4\u5219","text":"
              1. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u964d\u566a\uff0c\u5355\u51fb\u9876\u90e8\u7684 \u544a\u8b66\u6291\u5236 \u3002

              2. \u70b9\u51fb \u65b0\u5efa\u6291\u5236\u89c4\u5219 \uff0c\u8bbe\u7f6e\u6291\u5236\u89c4\u5219\u7684\u540d\u79f0\u3001\u89c4\u5219\u7b49\u3002

                Note

                \u901a\u8fc7\u89c4\u5219\u6807\u7b7e\u548c\u544a\u8b66\u6807\u7b7e\u5b9a\u4e49\u4e00\u7ec4\u89c4\u5219\u6765\u8bc6\u522b\u548c\u5ffd\u7565\u67d0\u4e9b\u544a\u8b66\uff0c\u8fbe\u5230\u907f\u514d\u540c\u4e00\u95ee\u9898\u53ef\u80fd\u4f1a\u89e6\u53d1\u591a\u4e2a\u76f8\u4f3c\u6216\u76f8\u5173\u7684\u544a\u8b66\u7684\u95ee\u9898\u3002

                \u53c2\u6570\u65f6\u95f4 \u8bf4\u660e \u6291\u5236\u89c4\u5219\u540d\u79f0 \u6291\u5236\u89c4\u5219\u540d\u79f0\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u8fde\u5b57\u7b26\uff08-\uff09\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002 \u63cf\u8ff0 \u63cf\u8ff0\u53ef\u5305\u542b\u4efb\u610f\u5b57\u7b26\uff0c\u6700\u957f 256 \u4e2a\u5b57\u7b26\u3002 \u96c6\u7fa4 \u8be5\u6291\u5236\u89c4\u5219\u4f5c\u7528\u7684\u96c6\u7fa4\u3002 \u547d\u540d\u7a7a\u95f4 \u8be5\u6291\u5236\u89c4\u5219\u4f5c\u7528\u7684\u547d\u540d\u7a7a\u95f4\u3002 \u6839\u6e90\u544a\u8b66 \u901a\u8fc7\u586b\u5199\u7684\u6807\u7b7e\u6761\u4ef6\u5339\u914d\u544a\u8b66\uff0c\u4f1a\u5c06\u7b26\u5408\u6240\u6709\u6807\u7b7e\u6761\u4ef6\u7684\u544a\u8b66\u4e0e\u7b26\u5408\u6291\u5236\u6761\u4ef6\u7684\u8fdb\u884c\u5bf9\u6bd4\uff0c\u4e0d\u7b26\u5408\u6291\u5236\u6761\u4ef6\u7684\u544a\u8b66\u5c06\u7167\u5e38\u53d1\u9001\u6d88\u606f\u7ed9\u7528\u6237\u3002 \u53d6\u503c\u8303\u56f4\u8bf4\u660e\uff1a - \u544a\u8b66\u7ea7\u522b\uff1a\u6307\u6807\u6216\u4e8b\u4ef6\u544a\u8b66\u7684\u7ea7\u522b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3a\uff1a\u7d27\u6025\u3001\u91cd\u8981\u3001\u63d0\u793a\u3002 - \u8d44\u6e90\u7c7b\u578b\uff1a\u544a\u8b66\u5bf9\u8c61\u6240\u5bf9\u5e94\u7684\u8d44\u6e90\u7c7b\u578b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3a\uff1a\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u65e0\u72b6\u6001\u8d1f\u8f7d\u3001\u6709\u72b6\u5bb9\u8d1f\u8f7d\u3001\u5b88\u62a4\u8fdb\u7a0b\u3001\u5bb9\u5668\u7ec4\u3002 - \u6807\u7b7e\uff1a\u544a\u8b66\u6807\u8bc6\u5c5e\u6027\uff0c\u7531\u6807\u7b7e\u540d\u548c\u6807\u7b7e\u503c\u6784\u6210\uff0c\u652f\u6301\u7528\u6237\u81ea\u5b9a\u4e49\u3002 \u6291\u5236\u544a\u8b66 \u7528\u4e8e\u6307\u5b9a\u76ee\u6807\u8b66\u62a5\uff08\u5c06\u88ab\u6291\u5236\u7684\u8b66\u62a5\uff09\u7684\u5339\u914d\u6761\u4ef6\uff0c\u7b26\u5408\u6240\u6709\u6807\u7b7e\u6761\u4ef6\u7684\u544a\u8b66\u5c06\u4e0d\u4f1a\u518d\u53d1\u9001\u6d88\u606f\u7ed9\u7528\u6237\u3002 \u5339\u914d\u6807\u7b7e \u7528\u4e8e\u6307\u5b9a\u5e94\u8be5\u6bd4\u8f83\u7684\u6807\u7b7e\u5217\u8868\uff0c\u4ee5\u786e\u5b9a\u6e90\u8b66\u62a5\u548c\u76ee\u6807\u8b66\u62a5\u662f\u5426\u5339\u914d\u3002\u53ea\u6709\u5728\u00a0equal\u00a0\u4e2d\u6307\u5b9a\u7684\u6807\u7b7e\u5728\u6e90\u548c\u76ee\u6807\u8b66\u62a5\u4e2d\u7684\u503c\u5b8c\u5168\u76f8\u540c\u7684\u60c5\u51b5\u4e0b\uff0c\u624d\u4f1a\u89e6\u53d1\u6291\u5236\u3002equal\u00a0\u5b57\u6bb5\u662f\u53ef\u9009\u7684\u3002\u5982\u679c\u7701\u7565\u00a0equal\u00a0\u5b57\u6bb5\uff0c\u5219\u4f1a\u5c06\u6240\u6709\u6807\u7b7e\u7528\u4e8e\u5339\u914d
              3. \u70b9\u51fb**\u786e\u5b9a**\u5b8c\u6210\u521b\u5efa\u540e\u8fd4\u56de\u544a\u8b66\u6291\u5236\u5217\u8868\uff0c\u70b9\u51fb\u544a\u8b66\u6291\u5236\u540d\u79f0\u540e\u53ef\u67e5\u770b\u6291\u5236\u89c4\u5219\u8be6\u60c5\u3002

              "},{"location":"end-user/insight/alert-center/inhibition.html#_3","title":"\u67e5\u770b\u89c4\u5219\u6807\u7b7e","text":"
              1. \u70b9\u51fb\u53f3\u4fa7\u5bfc\u822a\u680f\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u7b56\u7565 \uff0c\u70b9\u51fb\u89c4\u5219\u6240\u5728\u7684\u7b56\u7565\u8be6\u60c5\u3002
              2. \u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540d\u79f0\uff0c\u67e5\u770b\u89c4\u5219\u8be6\u60c5\uff0c\u67e5\u770b\u5bf9\u5e94\u544a\u8b66\u89c4\u5219\u7684\u6807\u7b7e\u3002

                Note

                \u5728\u6dfb\u52a0\u89c4\u5219\u65f6\u53ef\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

              "},{"location":"end-user/insight/alert-center/inhibition.html#_4","title":"\u67e5\u770b\u544a\u8b66\u6807\u7b7e","text":"
              1. \u70b9\u51fb\u53f3\u4fa7\u5bfc\u822a\u680f\u9009\u62e9\u00a0\u544a\u8b66\u4e2d\u5fc3\u00a0->\u00a0\u544a\u8b66\u5217\u8868 \uff0c\u70b9\u51fb\u544a\u8b66\u6240\u5728\u884c\u67e5\u770b\u544a\u8b66\u8be6\u60c5\u3002

                Note

                \u544a\u8b66\u6807\u7b7e\u7528\u4e8e\u63cf\u8ff0\u544a\u8b66\u7684\u8be6\u7ec6\u4fe1\u606f\u548c\u5c5e\u6027\uff0c\u53ef\u4ee5\u7528\u6765\u521b\u5efa\u6291\u5236\u89c4\u5219\u3002

              "},{"location":"end-user/insight/alert-center/inhibition.html#_5","title":"\u7f16\u8f91\u6291\u5236\u89c4\u5219","text":"
              1. \u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540e\u4fa7\u7684 \u2507 \uff0c\u70b9\u51fb \u7f16\u8f91\uff0c\u8fdb\u5165\u6291\u5236\u89c4\u5219\u7684\u7f16\u8f91\u9875\u3002

              "},{"location":"end-user/insight/alert-center/inhibition.html#_6","title":"\u5220\u9664\u6291\u5236\u89c4\u5219","text":"

              \u70b9\u51fb\u76ee\u6807\u89c4\u5219\u540e\u4fa7\u7684 \u2507 \uff0c\u70b9\u51fb \u5220\u9664\uff0c\u5728\u8f93\u5165\u6846\u4e2d\u8f93\u5165\u6291\u5236\u89c4\u5219\u7684\u540d\u79f0\u5373\u53ef\u5220\u9664\u3002

              "},{"location":"end-user/insight/alert-center/message.html","title":"\u901a\u77e5\u914d\u7f6e","text":"

              \u5728 \u901a\u77e5\u914d\u7f6e \u9875\u9762\uff0c\u53ef\u4ee5\u914d\u7f6e\u901a\u8fc7\u90ae\u4ef6\u3001\u4f01\u4e1a\u5fae\u4fe1\u3001\u9489\u9489\u3001Webhook \u548c\u77ed\u4fe1\u7b49\u65b9\u5f0f\u5411\u7528\u6237\u53d1\u9001\u6d88\u606f\u3002

              "},{"location":"end-user/insight/alert-center/message.html#_2","title":"\u90ae\u4ef6\u7ec4","text":"
              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u540e\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e\uff0c\u9ed8\u8ba4\u4f4d\u4e8e\u90ae\u4ef6\u901a\u77e5\u5bf9\u8c61\u3002

              2. \u70b9\u51fb \u6dfb\u52a0\u90ae\u7bb1\u7ec4\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u90ae\u4ef6\u5730\u5740\u3002

              3. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u90ae\u7bb1\u7ec4\u3002

              "},{"location":"end-user/insight/alert-center/message.html#_3","title":"\u4f01\u4e1a\u5fae\u4fe1","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u4f01\u4e1a\u5fae\u4fe1\u3002

                \u6709\u5173\u4f01\u4e1a\u5fae\u4fe1\u7fa4\u673a\u5668\u4eba\u7684 URL\uff0c\u8bf7\u53c2\u9605\u4f01\u4e1a\u5fae\u4fe1\u5b98\u65b9\u6587\u6863\uff1a\u5982\u4f55\u4f7f\u7528\u7fa4\u673a\u5668\u4eba\u3002

              2. \u70b9\u51fb \u6dfb\u52a0\u7fa4\u673a\u5668\u4eba\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u7fa4\u673a\u5668\u4eba\u3002

              3. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u7fa4\u673a\u5668\u4eba\u3002

              "},{"location":"end-user/insight/alert-center/message.html#_4","title":"\u9489\u9489","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u9489\u9489\uff0c\u70b9\u51fb \u6dfb\u52a0\u7fa4\u673a\u5668\u4eba\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u7fa4\u673a\u5668\u4eba\u3002

                \u6709\u5173\u9489\u9489\u7fa4\u673a\u5668\u4eba\u7684 URL\uff0c\u8bf7\u53c2\u9605\u9489\u9489\u5b98\u65b9\u6587\u6863\uff1a\u81ea\u5b9a\u4e49\u673a\u5668\u4eba\u63a5\u5165\u3002

                Note

                \u52a0\u7b7e\u7684\u65b9\u5f0f\u662f\u9489\u9489\u673a\u5668\u4eba\u4e0e\u5f00\u53d1\u8005\u53cc\u5411\u8fdb\u884c\u5b89\u5168\u8ba4\u8bc1\uff0c\u82e5\u5728\u521b\u5efa\u9489\u9489\u673a\u5668\u4eba\u65f6\u5f00\u542f\u4e86\u52a0\u7b7e\uff0c\u5219\u9700\u8981\u5728\u6b64\u5904\u8f93\u5165\u9489\u9489\u751f\u6210\u7684\u5bc6\u94a5\u3002 \u53ef\u53c2\u8003\u9489\u9489\u81ea\u5b9a\u4e49\u673a\u5668\u4eba\u5b89\u5168\u8bbe\u7f6e\u3002

              2. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u7fa4\u673a\u5668\u4eba\u3002

              "},{"location":"end-user/insight/alert-center/message.html#_5","title":"\u98de\u4e66","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u98de\u4e66\uff0c\u70b9\u51fb \u6dfb\u52a0\u7fa4\u673a\u5668\u4eba\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u7fa4\u673a\u5668\u4eba\u3002

                Note

                \u5f53\u98de\u4e66\u7684\u7fa4\u673a\u5668\u4eba\u5f00\u542f\u7b7e\u540d\u6821\u9a8c\u65f6\uff0c\u6dfb\u52a0\u98de\u4e66\u901a\u77e5\u65f6\u9700\u8981\u586b\u5199\u5bf9\u5e94\u7684\u7b7e\u540d\u5bc6\u94a5\u3002\u8bf7\u67e5\u9605 \u81ea\u5b9a\u4e49\u673a\u5668\u4eba\u4f7f\u7528\u6307\u5357\u3002

              2. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u7fa4\u673a\u5668\u4eba\u3002

              "},{"location":"end-user/insight/alert-center/message.html#webhook","title":"Webhook","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> Webhook\u3002

                \u6709\u5173 Webhook URL \u53ca\u66f4\u591a\u914d\u7f6e\u65b9\u5f0f\uff0c\u8bf7\u53c2\u9605 webhook \u6587\u6863\u3002

              2. \u70b9\u51fb \u65b0\u5efa Webhook\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a Webhook\u3002

                HTTP Headers\uff1a\u975e\u5fc5\u586b\uff0c\u8bbe\u7f6e\u8bf7\u6c42\u5934\u3002\u53ef\u4ee5\u6dfb\u52a0\u591a\u4e2a Headers\u3002

                Note

                \u6709\u5173 Webhook URL \u53ca\u66f4\u591a\u914d\u7f6e\u65b9\u5f0f\uff0c\u8bf7\u53c2\u9605 webhook \u6587\u6863\u3002

              3. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\uff0c\u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664 Webhook\u3002

              "},{"location":"end-user/insight/alert-center/message.html#_6","title":"\u7ad9\u5185\u4fe1","text":"

              Note

              \u544a\u8b66\u6d88\u606f\u53d1\u9001\u81f3\u7528\u6237\u4e2a\u4eba\u7684\u7ad9\u5185\u4fe1\uff0c\u70b9\u51fb\u9876\u90e8\u7684 \ud83d\udd14 \u7b26\u53f7\u53ef\u4ee5\u67e5\u770b\u901a\u77e5\u6d88\u606f\u3002

              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u7ad9\u5185\u4fe1\uff0c\u70b9\u51fb\u521b\u5efa\u3002

                • \u7ad9\u5185\u4fe1\u901a\u77e5\u5141\u8bb8\u6dfb\u52a0\u591a\u4e2a\u7528\u6237\u3002

              2. \u914d\u7f6e\u5b8c\u6210\u540e\u81ea\u52a8\u8fd4\u56de \u7ad9\u5185\u4fe1\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u9009\u62e9 \u53d1\u9001\u6d4b\u8bd5\u4fe1\u606f\u3002

              "},{"location":"end-user/insight/alert-center/message.html#_7","title":"\u77ed\u4fe1\u7ec4","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\u70b9\u51fb \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u77ed\u4fe1\uff0c\u70b9\u51fb \u6dfb\u52a0\u77ed\u4fe1\u7ec4\uff0c\u6dfb\u52a0\u4e00\u4e2a\u6216\u591a\u4e2a\u77ed\u4fe1\u7ec4\u3002

              2. \u5728\u5f39\u7a97\u4e2d\u8f93\u5165\u540d\u79f0\u3001\u63a5\u6536\u77ed\u4fe1\u7684\u5bf9\u8c61\u3001\u624b\u673a\u53f7\u4ee5\u53ca\u901a\u77e5\u670d\u52a1\u5668\u3002

                \u901a\u77e5\u670d\u52a1\u5668\u9700\u8981\u9884\u5148\u5728 \u901a\u77e5\u914d\u7f6e -> \u901a\u77e5\u670d\u52a1\u5668 \u4e2d\u6dfb\u52a0\u521b\u5efa\u3002\u76ee\u524d\u652f\u6301\u963f\u91cc\u4e91\u3001\u817e\u8baf\u4e91\u4e24\u79cd\u4e91\u670d\u52a1\u5668\uff0c\u5177\u4f53\u914d\u7f6e\u7684\u53c2\u6570\u8bf7\u53c2\u9605\u81ea\u5df1\u7684\u4e91\u670d\u52a1\u5668\u4fe1\u606f\u3002

              3. \u77ed\u4fe1\u7ec4\u6dfb\u52a0\u6210\u529f\u540e\uff0c\u81ea\u52a8\u8fd4\u56de\u901a\u77e5\u5217\u8868\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507\uff0c\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u77ed\u4fe1\u7ec4\u3002

              "},{"location":"end-user/insight/alert-center/msg-template.html","title":"\u6d88\u606f\u6a21\u677f","text":"

              \u53ef\u89c2\u6d4b\u6027\u63d0\u4f9b\u81ea\u5b9a\u4e49\u6d88\u606f\u6a21\u677f\u5185\u5bb9\u7684\u80fd\u529b\uff0c\u652f\u6301\u90ae\u4ef6\u3001\u4f01\u4e1a\u5fae\u4fe1\u3001\u9489\u9489\u3001Webhook\u3001\u98de\u4e66\u3001\u7ad9\u5185\u4fe1\u7b49\u4e0d\u540c\u7684\u901a\u77e5\u5bf9\u8c61\u5b9a\u4e49\u4e0d\u540c\u7684\u6d88\u606f\u901a\u77e5\u5185\u5bb9\u3002

              "},{"location":"end-user/insight/alert-center/msg-template.html#_2","title":"\u521b\u5efa\u6d88\u606f\u6a21\u677f","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u544a\u8b66\u4e2d\u5fc3 -> \u6d88\u606f\u6a21\u677f\u3002

                Insight \u9ed8\u8ba4\u5185\u7f6e\u4e2d\u82f1\u6587\u4e24\u4e2a\u6a21\u677f\uff0c\u4ee5\u4fbf\u7528\u6237\u4f7f\u7528\u3002

              2. \u70b9\u51fb \u65b0\u5efa\u6d88\u606f\u6a21\u677f \u6309\u94ae\uff0c\u586b\u5199\u6a21\u677f\u5185\u5bb9\u3002

              Info

              \u53ef\u89c2\u6d4b\u6027\u9884\u7f6e\u4e86\u6d88\u606f\u6a21\u677f\u3002\u82e5\u9700\u8981\u5b9a\u4e49\u6a21\u677f\u7684\u5185\u5bb9\uff0c\u8bf7\u53c2\u8003\u914d\u7f6e\u901a\u77e5\u6a21\u677f\u3002

              "},{"location":"end-user/insight/alert-center/msg-template.html#_3","title":"\u6d88\u606f\u6a21\u677f\u8be6\u60c5","text":"

              \u70b9\u51fb\u67d0\u4e00\u6d88\u606f\u6a21\u677f\u7684\u540d\u79f0\uff0c\u53f3\u4fa7\u6ed1\u5757\u53ef\u67e5\u770b\u6d88\u606f\u6a21\u677f\u7684\u8be6\u60c5\u3002

              \u53c2\u6570 \u53d8\u91cf \u63cf\u8ff0 \u89c4\u5219\u540d\u79f0 {{ .Labels.alertname }} \u89e6\u53d1\u544a\u8b66\u7684\u89c4\u5219\u540d\u79f0 \u7b56\u7565\u540d\u79f0 {{ .Labels.alertgroup }} \u89e6\u53d1\u544a\u8b66\u89c4\u5219\u6240\u5c5e\u7684\u544a\u8b66\u7b56\u7565\u540d\u79f0 \u544a\u8b66\u7ea7\u522b {{ .Labels.severity }} \u89e6\u53d1\u544a\u8b66\u7684\u7ea7\u522b \u96c6\u7fa4 {{ .Labels.cluster }} \u89e6\u53d1\u544a\u8b66\u7684\u8d44\u6e90\u6240\u5728\u7684\u96c6\u7fa4 \u547d\u540d\u7a7a\u95f4 {{ .Labels.namespace }} \u89e6\u53d1\u544a\u8b66\u7684\u8d44\u6e90\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4 \u8282\u70b9 {{ .Labels.node }} \u89e6\u53d1\u544a\u8b66\u7684\u8d44\u6e90\u6240\u5728\u7684\u8282\u70b9 \u8d44\u6e90\u7c7b\u578b {{ .Labels.target_type }} \u544a\u8b66\u5bf9\u8c61\u7684\u8d44\u6e90\u7c7b\u578b \u8d44\u6e90\u540d\u79f0 {{ .Labels.target }} \u89e6\u53d1\u544a\u8b66\u7684\u5bf9\u8c61\u540d\u79f0 \u89e6\u53d1\u503c {{ .Annotations.value }} \u89e6\u53d1\u544a\u8b66\u901a\u77e5\u65f6\u7684\u6307\u6807\u503c \u53d1\u751f\u65f6\u95f4 {{ .StartsAt }} \u544a\u8b66\u5f00\u59cb\u53d1\u751f\u7684\u65f6\u95f4 \u7ed3\u675f\u65f6\u95f4 {{ .EndsAT }} \u544a\u8b66\u7ed3\u675f\u7684\u65f6\u95f4 \u63cf\u8ff0 {{ .Annotations.description }} \u544a\u8b66\u7684\u8be6\u7ec6\u63cf\u8ff0 \u6807\u7b7e {{ for .labels}} {{end}} \u544a\u8b66\u7684\u6240\u6709\u6807\u7b7e\uff0c\u4f7f\u7528 for \u51fd\u6570\u904d\u5386 labels \u5217\u8868\uff0c\u83b7\u53d6\u544a\u8b66\u7684\u6240\u6709\u6807\u7b7e\u5185\u5bb9\u3002"},{"location":"end-user/insight/alert-center/msg-template.html#_4","title":"\u7f16\u8f91\u6216\u5220\u9664\u6d88\u606f\u6a21\u677f","text":"

              \u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507\uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u7f16\u8f91 \u6216 \u5220\u9664\uff0c\u53ef\u4ee5\u4fee\u6539\u6216\u5220\u9664\u6d88\u606f\u6a21\u677f\u3002

              Warning

              \u8bf7\u6ce8\u610f\uff0c\u5220\u9664\u6a21\u677f\u540e\u65e0\u6cd5\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

              "},{"location":"end-user/insight/alert-center/silent.html","title":"\u544a\u8b66\u9759\u9ed8","text":"

              \u544a\u8b66\u9759\u9ed8\u662f\u6307\u5728\u7279\u5b9a\u7684\u65f6\u95f4\u8303\u56f4\u5185\uff0c\u6839\u636e\u5b9a\u4e49\u597d\u7684\u89c4\u5219\u5bf9\u7b26\u5408\u6761\u4ef6\u7684\u544a\u8b66\u4e0d\u518d\u53d1\u9001\u544a\u8b66\u901a\u77e5\u3002\u8be5\u529f\u80fd\u53ef\u4ee5\u5e2e\u52a9\u8fd0\u7ef4\u4eba\u5458\u907f\u514d\u5728\u67d0\u4e9b\u64cd\u4f5c\u6216\u4e8b\u4ef6\u671f\u95f4\u63a5\u6536\u5230\u8fc7\u591a\u7684\u566a\u58f0\u544a\u8b66\uff0c\u540c\u65f6\u4fbf\u4e8e\u66f4\u52a0\u7cbe\u786e\u5730\u5904\u7406\u771f\u6b63\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u3002

              \u5728\u544a\u8b66\u9759\u9ed8\u9875\u9762\u4e0a\uff0c\u7528\u6237\u53ef\u4ee5\u770b\u5230\u4e24\u4e2a\u9875\u7b7e\uff1a\u6d3b\u8dc3\u89c4\u5219\u548c\u8fc7\u671f\u89c4\u5219\u3002 \u5176\u4e2d\uff0c\u6d3b\u8dc3\u89c4\u5219\u8868\u793a\u76ee\u524d\u6b63\u5728\u751f\u6548\u7684\u89c4\u5219\uff0c\u800c\u8fc7\u671f\u89c4\u5219\u5219\u662f\u4ee5\u524d\u5b9a\u4e49\u8fc7\u4f46\u5df2\u7ecf\u8fc7\u671f\uff08\u6216\u8005\u7528\u6237\u4e3b\u52a8\u5220\u9664\uff09\u7684\u89c4\u5219\u3002

              "},{"location":"end-user/insight/alert-center/silent.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u544a\u8b66\u4e2d\u5fc3 -> \u544a\u8b66\u9759\u9ed8 ,\u70b9\u51fb \u65b0\u5efa\u9759\u9ed8\u89c4\u5219 \u6309\u94ae\u3002

              2. \u586b\u5199\u9759\u9ed8\u89c4\u5219\u7684\u5404\u9879\u53c2\u6570\uff0c\u5982\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u6807\u7b7e\u3001\u65f6\u95f4\u7b49\uff0c\u4ee5\u5b9a\u4e49\u8fd9\u6761\u89c4\u5219\u7684\u4f5c\u7528\u8303\u56f4\u548c\u751f\u6548\u65f6\u95f4\u3002

              3. \u8fd4\u56de\u89c4\u5219\u5217\u8868\uff0c\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u7f16\u8f91\u6216\u5220\u9664\u9759\u9ed8\u89c4\u5219\u3002

              \u901a\u8fc7\u544a\u8b66\u9759\u9ed8\u529f\u80fd\uff0c\u60a8\u53ef\u4ee5\u7075\u6d3b\u5730\u63a7\u5236\u54ea\u4e9b\u544a\u8b66\u9700\u8981\u88ab\u5ffd\u7565\uff0c\u5728\u4ec0\u4e48\u65f6\u95f4\u6bb5\u5185\u751f\u6548\uff0c\u4ece\u800c\u63d0\u9ad8\u8fd0\u7ef4\u6548\u7387\uff0c\u51cf\u5c11\u8bef\u62a5\u7684\u53ef\u80fd\u6027\u3002

              "},{"location":"end-user/insight/alert-center/sms-provider.html","title":"\u914d\u7f6e\u901a\u77e5\u670d\u52a1\u5668","text":"

              \u53ef\u89c2\u6d4b\u6027 Insight \u652f\u6301\u77ed\u4fe1\u901a\u77e5\uff0c\u76ee\u524d\u901a\u8fc7\u96c6\u6210\u963f\u91cc\u4e91\u3001\u817e\u8baf\u4e91\u7684\u77ed\u4fe1\u670d\u52a1\u53d1\u9001\u544a\u8b66\u6d88\u606f\u3002\u672c\u6587\u4ecb\u7ecd\u4e86\u5982\u4f55\u5728 insight \u4e2d\u914d\u7f6e\u77ed\u4fe1\u901a\u77e5\u7684\u670d\u52a1\u5668\u3002\u77ed\u4fe1\u7b7e\u540d\u4e2d\u652f\u6301\u7684\u53d8\u91cf\u4e3a\u6d88\u606f\u6a21\u677f\u4e2d\u7684\u9ed8\u8ba4\u53d8\u91cf\uff0c\u540c\u65f6\u7531\u4e8e\u77ed\u4fe1\u5b57\u6570\u6709\u9650\uff0c\u5efa\u8bae\u9009\u62e9\u8f83\u4e3a\u660e\u786e\u7684\u53d8\u91cf\u3002

              \u5982\u4f55\u914d\u7f6e\u77ed\u4fe1\u63a5\u6536\u4eba\u53ef\u53c2\u8003\u6587\u6863\uff1a\u914d\u7f6e\u77ed\u4fe1\u901a\u77e5\u7ec4\u3002

              "},{"location":"end-user/insight/alert-center/sms-provider.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165 \u544a\u8b66\u4e2d\u5fc3 -> \u901a\u77e5\u914d\u7f6e -> \u901a\u77e5\u670d\u52a1\u5668 \u3002

              2. \u70b9\u51fb \u6dfb\u52a0\u901a\u77e5\u670d\u52a1\u5668 \u3002

                1. \u914d\u7f6e\u963f\u91cc\u4e91\u670d\u52a1\u5668\u3002

                  \u7533\u8bf7\u963f\u91cc\u4e91\u77ed\u4fe1\u670d\u52a1\uff0c\u8bf7\u53c2\u8003\u963f\u91cc\u4e91\u77ed\u4fe1\u670d\u52a1\u3002

                  \u5b57\u6bb5\u8bf4\u660e\uff1a

                  • AccessKey ID \uff1a\u963f\u91cc\u4e91\u7528\u4e8e\u6807\u8bc6\u7528\u6237\u7684\u53c2\u6570\u3002
                  • AccessKey Secret \uff1a\u963f\u91cc\u4e91\u7528\u4e8e\u9a8c\u8bc1\u7528\u6237\u7684\u5bc6\u94a5\u3002AccessKey Secret \u5fc5\u987b\u4fdd\u5bc6\u3002
                  • \u77ed\u4fe1\u7b7e\u540d \uff1a\u77ed\u4fe1\u670d\u52a1\u652f\u6301\u6839\u636e\u7528\u6237\u9700\u6c42\u521b\u5efa\u7b26\u5408\u8981\u6c42\u7684\u7b7e\u540d\u3002\u53d1\u9001\u77ed\u4fe1\u65f6\uff0c\u77ed\u4fe1\u5e73\u53f0\u4f1a\u5c06\u5df2\u5ba1\u6838\u901a\u8fc7\u7684\u77ed\u4fe1\u7b7e\u540d\u6dfb\u52a0\u5230\u77ed\u4fe1\u5185\u5bb9\u4e2d\uff0c\u518d\u53d1\u9001\u7ed9\u77ed\u4fe1\u63a5\u6536\u65b9\u3002
                  • \u6a21\u677f CODE \uff1a\u77ed\u4fe1\u6a21\u677f\u662f\u53d1\u9001\u77ed\u4fe1\u7684\u5177\u4f53\u5185\u5bb9\u3002
                  • \u53c2\u6570\u6a21\u677f \uff1a\u77ed\u4fe1\u6b63\u6587\u6a21\u677f\u53ef\u4ee5\u5305\u542b\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u901a\u8fc7\u53d8\u91cf\u5b9e\u73b0\u81ea\u5b9a\u4e49\u77ed\u4fe1\u5185\u5bb9\u3002

                  \u8bf7\u53c2\u8003\u963f\u91cc\u4e91\u53d8\u91cf\u89c4\u8303\u3002

                  Note

                  \u4e3e\u4f8b\uff1a\u5728\u963f\u91cc\u4e91\u5b9a\u4e49\u7684\u6a21\u677f\u5185\u5bb9\u4e3a\uff1a\\({severity}\uff1a\\) \u88ab\u89e6\u53d1\u3002\u53c2\u6570\u6a21\u677f\u4e2d\u7684\u914d\u7f6e\u53c2\u8003\u4e0a\u56fe\u3002} \u5728 ${startat

                2. \u914d\u7f6e\u817e\u8baf\u4e91\u670d\u52a1\u5668\u3002

                  \u7533\u8bf7\u817e\u8baf\u4e91\u77ed\u4fe1\u670d\u52a1\uff0c\u8bf7\u53c2\u8003\u817e\u8baf\u4e91\u77ed\u4fe1\u3002

                  \u5b57\u6bb5\u8bf4\u660e\uff1a

                  • Secret ID \uff1a\u817e\u8baf\u4e91\u7528\u4e8e\u6807\u8bc6 API \u8c03\u7528\u8005\u8eab\u4efd\u53c2\u6570\u3002
                  • SecretKey \uff1a\u817e\u8baf\u4e91\u7528\u4e8e\u9a8c\u8bc1 API \u8c03\u7528\u8005\u7684\u8eab\u4efd\u7684\u53c2\u6570\u3002
                  • \u77ed\u4fe1\u6a21\u677f ID \uff1a\u77ed\u4fe1\u6a21\u677f ID\uff0c\u7531\u817e\u8baf\u4e91\u7cfb\u7edf\u81ea\u52a8\u751f\u6210\u3002
                  • \u7b7e\u540d\u5185\u5bb9 \uff1a\u77ed\u4fe1\u7b7e\u540d\u5185\u5bb9\uff0c\u5373\u5728\u817e\u8baf\u4e91\u77ed\u4fe1\u7b7e\u540d\u4e2d\u5b9a\u4e49\u7684\u5b9e\u9645\u7f51\u7ad9\u540d\u7684\u5168\u79f0\u6216\u7b80\u79f0\u3002
                  • SdkAppId \uff1a\u77ed\u4fe1 SdkAppId\uff0c\u5728\u817e\u8baf\u4e91\u77ed\u4fe1\u63a7\u5236\u53f0\u6dfb\u52a0\u5e94\u7528\u540e\u751f\u6210\u7684\u5b9e\u9645 SdkAppId\u3002
                  • \u53c2\u6570\u6a21\u677f \uff1a\u77ed\u4fe1\u6b63\u6587\u6a21\u677f\u53ef\u4ee5\u5305\u542b\u53d8\u91cf\uff0c\u7528\u6237\u53ef\u901a\u8fc7\u53d8\u91cf\u5b9e\u73b0\u81ea\u5b9a\u4e49\u77ed\u4fe1\u5185\u5bb9\u3002\u8bf7\u53c2\u8003\uff1a\u817e\u8baf\u4e91\u53d8\u91cf\u89c4\u8303\u3002

                  Note

                  \u4e3e\u4f8b\uff1a\u5728\u817e\u8baf\u4e91\u5b9a\u4e49\u7684\u6a21\u677f\u5185\u5bb9\u4e3a\uff1a{1}\uff1a{2} \u5728 {3} \u88ab\u89e6\u53d1\u3002\u53c2\u6570\u6a21\u677f\u4e2d\u7684\u914d\u7f6e\u53c2\u8003\u4e0a\u56fe\u3002

              "},{"location":"end-user/insight/collection-manag/agent-status.html","title":"insight-agent \u7ec4\u4ef6\u72b6\u6001\u8bf4\u660e","text":"

              \u5728 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u53ef\u89c2\u6d4b\u6027 Insight \u4f5c\u4e3a\u591a\u96c6\u7fa4\u89c2\u6d4b\u4ea7\u54c1\uff0c\u4e3a\u4e86\u5b9e\u73b0\u591a\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u7684\u7edf\u4e00\u91c7\u96c6\uff0c\u9700\u8981\u7528\u6237\u5b89\u88c5 Helm \u5e94\u7528 insight-agent \uff08\u9ed8\u8ba4\u5b89\u88c5\u5728 insight-system \u547d\u540d\u7a7a\u95f4\uff09\u3002\u53c2\u9605\u5982\u4f55\u5b89\u88c5 insight-agent \u3002

              "},{"location":"end-user/insight/collection-manag/agent-status.html#_1","title":"\u72b6\u6001\u8bf4\u660e","text":"

              \u5728 \u53ef\u89c2\u6d4b\u6027 -> \u91c7\u96c6\u7ba1\u7406 \u90e8\u5206\u53ef\u67e5\u770b\u5404\u96c6\u7fa4\u5b89\u88c5 insight-agent \u7684\u60c5\u51b5\u3002

              • \u672a\u5b89\u88c5 \uff1a\u8be5\u96c6\u7fa4\u4e2d\u672a\u5728 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u5b89\u88c5 insight-agent
              • \u8fd0\u884c\u4e2d \uff1a\u8be5\u96c6\u7fa4\u4e2d\u6210\u529f\u5b89\u88c5 insight-agent \uff0c\u4e14\u90e8\u7f72\u7684\u6240\u6709\u7ec4\u4ef6\u5747\u5904\u4e8e\u8fd0\u884c\u4e2d\u72b6\u6001
              • \u5f02\u5e38 \uff1a\u82e5 insight-agent \u5904\u4e8e\u6b64\u72b6\u6001\uff0c\u8bf4\u660e helm \u90e8\u7f72\u5931\u8d25\u6216\u5b58\u5728\u90e8\u7f72\u7684\u7ec4\u4ef6\u5904\u4e8e\u975e\u8fd0\u884c\u4e2d\u72b6\u6001

              \u53ef\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u6392\u67e5\uff1a

              1. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u82e5\u72b6\u6001\u4e3a deployed \uff0c\u5219\u6267\u884c\u4e0b\u4e00\u6b65\u3002\u82e5\u4e3a failed \uff0c\u7531\u4e8e\u4f1a\u5f71\u54cd\u5e94\u7528\u7684\u5347\u7ea7\uff0c\u5efa\u8bae\u5728 \u5bb9\u5668\u7ba1\u7406 -> helm \u5e94\u7528 \u5378\u8f7d\u540e\u91cd\u65b0\u5b89\u88c5 :

                helm list -n insight-system\n
              2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6216\u5728 \u53ef\u89c2\u6d4b\u6027 -> \u91c7\u96c6\u7ba1\u7406 \u4e2d\u67e5\u770b\u8be5\u96c6\u7fa4\u90e8\u7f72\u7684\u7ec4\u4ef6\u7684\u72b6\u6001\uff0c\u82e5\u5b58\u5728\u975e \u8fd0\u884c\u4e2d \u72b6\u6001\u7684\u5bb9\u5668\u7ec4\uff0c\u8bf7\u91cd\u542f\u5f02\u5e38\u7684\u5bb9\u5668\u7ec4\u3002

                kubectl get pods -n insight-system\n
              "},{"location":"end-user/insight/collection-manag/agent-status.html#_2","title":"\u8865\u5145\u8bf4\u660e","text":"
              1. insight-agent \u4e2d\u6307\u6807\u91c7\u96c6\u7ec4\u4ef6 Prometheus \u7684\u8d44\u6e90\u6d88\u8017\u4e0e\u96c6\u7fa4\u4e2d\u8fd0\u884c\u7684\u5bb9\u5668\u7ec4\u6570\u91cf\u5b58\u5728\u6b63\u6bd4\u5173\u7cfb\uff0c \u8bf7\u6839\u636e\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 Prometheus \u7684\u8d44\u6e90\uff0c\u8bf7\u53c2\u8003\uff1aPrometheus \u8d44\u6e90\u89c4\u5212

              2. \u7531\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u6307\u6807\u5b58\u50a8\u7ec4\u4ef6 vmstorage \u7684\u5b58\u50a8\u5bb9\u91cf\u4e0e\u5404\u4e2a\u96c6\u7fa4\u5bb9\u5668\u7ec4\u6570\u91cf\u603b\u548c\u5b58\u5728\u6b63\u6bd4\u5173\u7cfb\u3002

                • \u8bf7\u8054\u7cfb\u5e73\u53f0\u7ba1\u7406\u5458\u6839\u636e\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\u5bb9\u91cf\uff0c\u53c2\u9605 vmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212
                • \u6839\u636e\u591a\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 vmstorage \u78c1\u76d8\uff0c\u53c2\u9605 vmstorge \u78c1\u76d8\u6269\u5bb9
              "},{"location":"end-user/insight/collection-manag/collection-manag.html","title":"\u91c7\u96c6\u7ba1\u7406","text":"

              \u91c7\u96c6\u7ba1\u7406 \u4e3b\u8981\u662f\u96c6\u4e2d\u7ba1\u7406\u3001\u5c55\u793a\u96c6\u7fa4\u5b89\u88c5\u91c7\u96c6\u63d2\u4ef6 insight-agent \u7684\u5165\u53e3\uff0c\u5e2e\u52a9\u7528\u6237\u5feb\u901f\u7684\u67e5\u770b\u96c6\u7fa4\u91c7\u96c6\u63d2\u4ef6\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u5e76\u63d0\u4f9b\u4e86\u5feb\u6377\u5165\u53e3\u914d\u7f6e\u91c7\u96c6\u89c4\u5219\u3002

              \u5177\u4f53\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a

              1. \u70b9\u51fb\u5de6\u4e0a\u89d2\u7684\uff0c\u9009\u62e9 \u53ef\u89c2\u6d4b\u6027 \u3002

              2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u91c7\u96c6\u7ba1\u7406 \uff0c\u67e5\u770b\u5168\u90e8\u96c6\u7fa4\u91c7\u96c6\u63d2\u4ef6\u7684\u72b6\u6001\u3002

              3. \u96c6\u7fa4\u63a5\u5165 insight-agent \u4e14\u5904\u4e8e\u8fd0\u884c\u4e2d\u72b6\u6001\u65f6\uff0c\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u540d\u79f0\u8fdb\u5165\u8be6\u60c5\u3002

              4. \u5728 \u670d\u52a1\u76d1\u63a7 \u9875\u7b7e\u4e2d\uff0c\u70b9\u51fb\u5feb\u6377\u94fe\u63a5\u8df3\u8f6c\u5230 \u5bb9\u5668\u7ba1\u7406 -> \u81ea\u5b9a\u4e49\u8d44\u6e90 \u6dfb\u52a0\u670d\u52a1\u53d1\u73b0\u89c4\u5219\u3002

              "},{"location":"end-user/insight/collection-manag/metric-collect.html","title":"\u6307\u6807\u6293\u53d6\u65b9\u5f0f","text":"

              Prometheus \u4e3b\u8981\u901a\u8fc7 Pull \u7684\u65b9\u5f0f\u6765\u6293\u53d6\u76ee\u6807\u670d\u52a1\u66b4\u9732\u51fa\u6765\u7684\u76d1\u63a7\u63a5\u53e3\uff0c\u56e0\u6b64\u9700\u8981\u914d\u7f6e\u5bf9\u5e94\u7684\u6293\u53d6\u4efb\u52a1\u6765\u8bf7\u6c42\u76d1\u63a7\u6570\u636e\u5e76\u5199\u5165\u5230 Prometheus \u63d0\u4f9b\u7684\u5b58\u50a8\u4e2d\uff0c\u76ee\u524d Prometheus \u670d\u52a1\u63d0\u4f9b\u4e86\u5982\u4e0b\u51e0\u4e2a\u4efb\u52a1\u7684\u914d\u7f6e\uff1a

              • \u539f\u751f Job \u914d\u7f6e\uff1a\u63d0\u4f9b Prometheus \u539f\u751f\u6293\u53d6 Job \u7684\u914d\u7f6e\u3002
              • Pod Monitor\uff1a\u5728 K8S \u751f\u6001\u4e0b\uff0c\u57fa\u4e8e Prometheus Operator \u6765\u6293\u53d6 Pod \u4e0a\u5bf9\u5e94\u7684\u76d1\u63a7\u6570\u636e\u3002
              • Service Monitor\uff1a\u5728 K8S \u751f\u6001\u4e0b\uff0c\u57fa\u4e8e Prometheus Operator \u6765\u6293\u53d6 Service \u5bf9\u5e94 Endpoints \u4e0a\u7684\u76d1\u63a7\u6570\u636e\u3002

              Note

              [ ] \u4e2d\u7684\u914d\u7f6e\u9879\u4e3a\u53ef\u9009\u3002

              "},{"location":"end-user/insight/collection-manag/metric-collect.html#job","title":"\u539f\u751f Job \u914d\u7f6e","text":"

              \u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

              # \u6293\u53d6\u4efb\u52a1\u540d\u79f0\uff0c\u540c\u65f6\u4f1a\u5728\u5bf9\u5e94\u6293\u53d6\u7684\u6307\u6807\u4e2d\u52a0\u4e86\u4e00\u4e2a label(job=job_name)\njob_name: <job_name>\n\n# \u6293\u53d6\u4efb\u52a1\u65f6\u95f4\u95f4\u9694\n[ scrape_interval: <duration> | default = <global_config.scrape_interval> ]\n\n# \u6293\u53d6\u8bf7\u6c42\u8d85\u65f6\u65f6\u95f4\n[ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ]\n\n# \u6293\u53d6\u4efb\u52a1\u8bf7\u6c42 URI \u8def\u5f84\n[ metrics_path: <path> | default = /metrics ]\n\n# \u89e3\u51b3\u5f53\u6293\u53d6\u7684 label \u4e0e\u540e\u7aef Prometheus \u6dfb\u52a0 label \u51b2\u7a81\u65f6\u7684\u5904\u7406\u3002\n# true: \u4fdd\u7559\u6293\u53d6\u5230\u7684 label\uff0c\u5ffd\u7565\u4e0e\u540e\u7aef Prometheus \u51b2\u7a81\u7684 label\uff1b\n# false: \u5bf9\u51b2\u7a81\u7684 label\uff0c\u628a\u6293\u53d6\u7684 label \u524d\u52a0\u4e0a exported_<original-label>\uff0c\u6dfb\u52a0\u540e\u7aef Prometheus \u589e\u52a0\u7684 label\uff1b\n[ honor_labels: <boolean> | default = false ]\n\n# \u662f\u5426\u4f7f\u7528\u6293\u53d6\u5230 target \u4e0a\u4ea7\u751f\u7684\u65f6\u95f4\u3002\n# true: \u5982\u679c target \u4e2d\u6709\u65f6\u95f4\uff0c\u4f7f\u7528 target \u4e0a\u7684\u65f6\u95f4\uff1b\n# false: \u76f4\u63a5\u5ffd\u7565 target \u4e0a\u7684\u65f6\u95f4\uff1b\n[ honor_timestamps: <boolean> | default = true ]\n\n# \u6293\u53d6\u534f\u8bae: http \u6216\u8005 https\n[ scheme: <scheme> | default = http ]\n\n# \u6293\u53d6\u8bf7\u6c42\u5bf9\u5e94 URL \u53c2\u6570\nparams:\n  [ <string>: [<string>, ...] ]\n\n# \u901a\u8fc7 basic auth \u8bbe\u7f6e\u6293\u53d6\u8bf7\u6c42\u5934\u4e2d `Authorization` \u7684\u503c\uff0cpassword/password_file \u4e92\u65a5\uff0c\u4f18\u5148\u53d6 password_file \u91cc\u9762\u7684\u503c\u3002\nbasic_auth:\n  [ username: <string> ]\n  [ password: <secret> ]\n  [ password_file: <string> ]\n\n# \u901a\u8fc7 bearer token \u8bbe\u7f6e\u6293\u53d6\u8bf7\u6c42\u5934\u4e2d `Authorization` bearer_token/bearer_token_file \u4e92\u65a5\uff0c\u4f18\u5148\u53d6 bearer_token \u91cc\u9762\u7684\u503c\u3002\n[ bearer_token: <secret> ]\n\n# \u901a\u8fc7 bearer token \u8bbe\u7f6e\u6293\u53d6\u8bf7\u6c42\u5934\u4e2d `Authorization` bearer_token/bearer_token_file \u4e92\u65a5\uff0c\u4f18\u5148\u53d6 bearer_token \u91cc\u9762\u7684\u503c\u3002\n[ bearer_token_file: <filename> ]\n\n# \u6293\u53d6\u8fde\u63a5\u662f\u5426\u901a\u8fc7 TLS \u5b89\u5168\u901a\u9053\uff0c\u914d\u7f6e\u5bf9\u5e94\u7684 TLS \u53c2\u6570\ntls_config:\n  [ <tls_config> ]\n\n# \u901a\u8fc7\u4ee3\u7406\u670d\u52a1\u6765\u6293\u53d6 target \u4e0a\u7684\u6307\u6807\uff0c\u586b\u5199\u5bf9\u5e94\u7684\u4ee3\u7406\u670d\u52a1\u5730\u5740\u3002\n[ proxy_url: <string> ]\n\n# \u901a\u8fc7\u9759\u6001\u914d\u7f6e\u6765\u6307\u5b9a target\uff0c\u8be6\u89c1\u4e0b\u9762\u7684\u8bf4\u660e\u3002\nstatic_configs:\n  [ - <static_config> ... ]\n\n# CVM \u670d\u52a1\u53d1\u73b0\u914d\u7f6e\uff0c\u8be6\u89c1\u4e0b\u9762\u7684\u8bf4\u660e\u3002\ncvm_sd_configs:\n  [ - <cvm_sd_config> ... ]\n\n# \u5728\u6293\u53d6\u6570\u636e\u4e4b\u540e\uff0c\u628a target \u4e0a\u5bf9\u5e94\u7684 label \u901a\u8fc7 relabel \u7684\u673a\u5236\u8fdb\u884c\u6539\u5199\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\u3002\nrelabel_configs:\n  [ - <relabel_config> ... ]\n\n# \u6570\u636e\u6293\u53d6\u5b8c\u6210\u5199\u5165\u4e4b\u524d\uff0c\u901a\u8fc7 relabel \u673a\u5236\u8fdb\u884c\u6539\u5199 label \u5bf9\u5e94\u7684\u503c\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\u3002\nmetric_relabel_configs:\n  [ - <relabel_config> ... ]\n\n# \u4e00\u6b21\u6293\u53d6\u6570\u636e\u70b9\u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n[ sample_limit: <int> | default = 0 ]\n\n# \u4e00\u6b21\u6293\u53d6 Target \u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n[ target_limit: <int> | default = 0 ]\n
              "},{"location":"end-user/insight/collection-manag/metric-collect.html#pod-monitor","title":"Pod Monitor","text":"

              \u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

              # Prometheus Operator CRD \u7248\u672c\napiVersion: monitoring.coreos.com/v1\n# \u5bf9\u5e94 K8S \u7684\u8d44\u6e90\u7c7b\u578b\uff0c\u8fd9\u91cc\u9762 Pod Monitor\nkind: PodMonitor\n# \u5bf9\u5e94 K8S \u7684 Metadata\uff0c\u8fd9\u91cc\u53ea\u7528\u5173\u5fc3 name\uff0c\u5982\u679c\u6ca1\u6709\u6307\u5b9a jobLabel\uff0c\u5bf9\u5e94\u6293\u53d6\u6307\u6807 label \u4e2d job \u7684\u503c\u4e3a <namespace>/<name>\nmetadata:\n  name: redis-exporter # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus  # namespace \u56fa\u5b9a\uff0c\u4e0d\u9700\u8981\u4fee\u6539\n# \u63cf\u8ff0\u6293\u53d6\u76ee\u6807 Pod \u7684\u9009\u53d6\u53ca\u6293\u53d6\u4efb\u52a1\u7684\u914d\u7f6e\n  label:\n    operator.insight.io/managed-by: insight # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\nspec:\n  # \u586b\u5199\u5bf9\u5e94 Pod \u7684 label\uff0cpod monitor \u4f1a\u53d6\u5bf9\u5e94\u7684\u503c\u4f5c\u4e3a job label \u7684\u503c\u3002\n  # \u5982\u679c\u67e5\u770b\u7684\u662f Pod Yaml\uff0c\u53d6 pod.metadata.labels \u4e2d\u7684\u503c\u3002\n  # \u5982\u679c\u67e5\u770b\u7684\u662f Deployment/Daemonset/Statefulset\uff0c\u53d6 spec.template.metadata.labels\u3002\n  [ jobLabel: string ]\n  # \u628a\u5bf9\u5e94 Pod \u4e0a\u7684 Label \u6dfb\u52a0\u5230 Target \u7684 Label \u4e2d\n  [ podTargetLabels: []string ]\n  # \u4e00\u6b21\u6293\u53d6\u6570\u636e\u70b9\u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ sampleLimit: uint64 ]\n  # \u4e00\u6b21\u6293\u53d6 Target \u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ targetLimit: uint64 ]\n  # \u914d\u7f6e\u9700\u8981\u6293\u53d6\u66b4\u9732\u7684 Prometheus HTTP \u63a5\u53e3\uff0c\u53ef\u4ee5\u914d\u7f6e\u591a\u4e2a Endpoint\n  podMetricsEndpoints:\n  [ - <endpoint_config> ... ] # \u8be6\u89c1\u4e0b\u9762 endpoint \u8bf4\u660e\n  # \u9009\u62e9\u8981\u76d1\u63a7 Pod \u6240\u5728\u7684 namespace\uff0c\u4e0d\u586b\u4e3a\u9009\u53d6\u6240\u6709 namespace\n  [ namespaceSelector: ]\n    # \u662f\u5426\u9009\u53d6\u6240\u6709 namespace\n    [ any: bool ]\n    # \u9700\u8981\u9009\u53d6 namespace \u5217\u8868\n    [ matchNames: []string ]\n  # \u586b\u5199\u8981\u76d1\u63a7 Pod \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 Pod [K8S metav1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#labelselector-v1-meta)\n  selector:\n    [ matchExpressions: array ]\n      [ example: - {key: tier, operator: In, values: [cache]} ]\n    [ matchLabels: object ]\n      [ example: k8s-app: redis-exporter ]\n
              "},{"location":"end-user/insight/collection-manag/metric-collect.html#1","title":"\u4e3e\u4f8b 1","text":"
              apiVersion: monitoring.coreos.com/v1\nkind: PodMonitor\nmetadata:\n  name: redis-exporter # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus # namespace \u56fa\u5b9a\uff0c\u4e0d\u8981\u4fee\u6539\n  label:\n    operator.insight.io/managed-by: insight  # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\uff0c\u5fc5\u586b\u3002\nspec:\n  podMetricsEndpoints:\n    - interval: 30s\n      port: metric-port # \u586b\u5199 pod yaml \u4e2d Prometheus Exporter \u5bf9\u5e94\u7684 Port \u7684 Name\n      path: /metrics # \u586b\u5199 Prometheus Exporter \u5bf9\u5e94\u7684 Path \u7684\u503c\uff0c\u4e0d\u586b\u9ed8\u8ba4 /metrics\n      relabelings:\n        - action: replace\n          sourceLabels:\n            - instance\n          regex: (.*)\n          targetLabel: instance\n          replacement: \"crs-xxxxxx\" # \u8c03\u6574\u6210\u5bf9\u5e94\u7684 Redis \u5b9e\u4f8b ID\n        - action: replace\n          sourceLabels:\n            - instance\n          regex: (.*)\n          targetLabel: ip\n          replacement: \"1.x.x.x\" # \u8c03\u6574\u6210\u5bf9\u5e94\u7684 Redis \u5b9e\u4f8b IP\n  namespaceSelector: # \u9009\u62e9\u8981\u76d1\u63a7 Pod \u6240\u5728\u7684 namespace\n    matchNames:\n      - redis-test\n  selector: # \u586b\u5199\u8981\u76d1\u63a7 Pod \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 pod\n    matchLabels:\n      k8s-app: redis-exporter\n
              "},{"location":"end-user/insight/collection-manag/metric-collect.html#2","title":"\u4e3e\u4f8b 2","text":"
              job_name: prometheus\nscrape_interval: 30s\nstatic_configs:\n- targets:\n  - 127.0.0.1:9090\n
              "},{"location":"end-user/insight/collection-manag/metric-collect.html#service-monitor","title":"Service Monitor","text":"

              \u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

              # Prometheus Operator CRD \u7248\u672c\napiVersion: monitoring.coreos.com/v1\n# \u5bf9\u5e94 K8S \u7684\u8d44\u6e90\u7c7b\u578b\uff0c\u8fd9\u91cc\u9762 Service Monitor\nkind: ServiceMonitor\n# \u5bf9\u5e94 K8S \u7684 Metadata\uff0c\u8fd9\u91cc\u53ea\u7528\u5173\u5fc3 name\uff0c\u5982\u679c\u6ca1\u6709\u6307\u5b9a jobLabel\uff0c\u5bf9\u5e94\u6293\u53d6\u6307\u6807 label \u4e2d job \u7684\u503c\u4e3a Service \u7684\u540d\u79f0\u3002\nmetadata:\n  name: redis-exporter # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus  # namespace \u56fa\u5b9a\uff0c\u4e0d\u9700\u8981\u4fee\u6539\n# \u63cf\u8ff0\u6293\u53d6\u76ee\u6807 Pod \u7684\u9009\u53d6\u53ca\u6293\u53d6\u4efb\u52a1\u7684\u914d\u7f6e\n  label:\n    operator.insight.io/managed-by: insight  # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\uff0c\u5fc5\u586b\u3002\nspec:\n  # \u586b\u5199\u5bf9\u5e94 Pod \u7684 label(metadata/labels)\uff0cservice monitor \u4f1a\u53d6\u5bf9\u5e94\u7684\u503c\u4f5c\u4e3a job label \u7684\u503c\n  [ jobLabel: string ]\n  # \u628a\u5bf9\u5e94 service \u4e0a\u7684 Label \u6dfb\u52a0\u5230 Target \u7684 Label \u4e2d\n  [ targetLabels: []string ]\n  # \u628a\u5bf9\u5e94 Pod \u4e0a\u7684 Label \u6dfb\u52a0\u5230 Target \u7684 Label \u4e2d\n  [ podTargetLabels: []string ]\n  # \u4e00\u6b21\u6293\u53d6\u6570\u636e\u70b9\u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ sampleLimit: uint64 ]\n  # \u4e00\u6b21\u6293\u53d6 Target \u9650\u5236\uff0c0\uff1a\u4e0d\u4f5c\u9650\u5236\uff0c\u9ed8\u8ba4\u4e3a 0\n  [ targetLimit: uint64 ]\n  # \u914d\u7f6e\u9700\u8981\u6293\u53d6\u66b4\u9732\u7684 Prometheus HTTP \u63a5\u53e3\uff0c\u53ef\u4ee5\u914d\u7f6e\u591a\u4e2a Endpoint\n  endpoints:\n  [ - <endpoint_config> ... ] # \u8be6\u89c1\u4e0b\u9762 endpoint \u8bf4\u660e\n  # \u9009\u62e9\u8981\u76d1\u63a7 Pod \u6240\u5728\u7684 namespace\uff0c\u4e0d\u586b\u4e3a\u9009\u53d6\u6240\u6709 namespace\n  [ namespaceSelector: ]\n    # \u662f\u5426\u9009\u53d6\u6240\u6709 namespace\n    [ any: bool ]\n    # \u9700\u8981\u9009\u53d6 namespace \u5217\u8868\n    [ matchNames: []string ]\n  # \u586b\u5199\u8981\u76d1\u63a7 Pod \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 Pod [K8S metav1.LabelSelector](https://v1-17.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#labelselector-v1-meta)\n  selector:\n    [ matchExpressions: array ]\n      [ example: - {key: tier, operator: In, values: [cache]} ]\n    [ matchLabels: object ]\n      [ example: k8s-app: redis-exporter ]\n
              "},{"location":"end-user/insight/collection-manag/metric-collect.html#_2","title":"\u4e3e\u4f8b","text":"
              apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: go-demo # \u586b\u5199\u4e00\u4e2a\u552f\u4e00\u540d\u79f0\n  namespace: cm-prometheus # namespace \u56fa\u5b9a\uff0c\u4e0d\u8981\u4fee\u6539\n  label:\n    operator.insight.io/managed-by: insight  # Insight \u7ba1\u7406\u7684\u6807\u7b7e\u6807\u8bc6\uff0c\u5fc5\u586b\u3002\nspec:\n  endpoints:\n    - interval: 30s\n      # \u586b\u5199 service yaml \u4e2d Prometheus Exporter \u5bf9\u5e94\u7684 Port \u7684 Name\n      port: 8080-8080-tcp\n      # \u586b\u5199 Prometheus Exporter \u5bf9\u5e94\u7684 Path \u7684\u503c\uff0c\u4e0d\u586b\u9ed8\u8ba4 /metrics\n      path: /metrics\n      relabelings:\n        # ** \u5fc5\u987b\u8981\u6709\u4e00\u4e2a label \u4e3a application\uff0c\u8fd9\u91cc\u5047\u8bbe k8s \u6709\u4e00\u4e2a label \u4e3a app\uff0c\n        # \u6211\u4eec\u901a\u8fc7 relabel \u7684 replace \u52a8\u4f5c\u628a\u5b83\u66ff\u6362\u6210\u4e86 application\n        - action: replace\n          sourceLabels: [__meta_kubernetes_pod_label_app]\n          targetLabel: application\n  # \u9009\u62e9\u8981\u76d1\u63a7 service \u6240\u5728\u7684 namespace\n  namespaceSelector:\n    matchNames:\n      - golang-demo\n  # \u586b\u5199\u8981\u76d1\u63a7 service \u7684 Label \u503c\uff0c\u4ee5\u5b9a\u4f4d\u76ee\u6807 service\n  selector:\n    matchLabels:\n      app: golang-app-demo\n
              "},{"location":"end-user/insight/collection-manag/metric-collect.html#endpoint_config","title":"endpoint_config","text":"

              \u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

              # \u5bf9\u5e94 port \u7684\u540d\u79f0\uff0c\u8fd9\u91cc\u9700\u8981\u6ce8\u610f\u4e0d\u662f\u5bf9\u5e94\u7684\u7aef\u53e3\uff0c\u9ed8\u8ba4\uff1a80\uff0c\u5bf9\u5e94\u7684\u53d6\u503c\u5982\u4e0b\uff1a\n# ServiceMonitor: \u5bf9\u5e94 Service>spec/ports/name;\n# PodMonitor: \u8bf4\u660e\u5982\u4e0b\uff1a\n#   \u5982\u679c\u67e5\u770b\u7684\u662f Pod Yaml\uff0c\u53d6 pod.spec.containers.ports.name \u4e2d\u7684\u503c\u3002\n#   \u5982\u679c\u67e5\u770b\u7684\u662f Deployment/Daemonset/Statefulset\uff0c\u53d6\u503c spec.template.spec.containers.ports.name\n[ port: string | default = 80]\n# \u6293\u53d6\u4efb\u52a1\u8bf7\u6c42 URI \u8def\u5f84\n[ path: string | default = /metrics ]\n# \u6293\u53d6\u534f\u8bae: http \u6216\u8005 https\n[ scheme: string | default = http]\n# \u6293\u53d6\u8bf7\u6c42\u5bf9\u5e94 URL \u53c2\u6570\n[ params: map[string][]string]\n# \u6293\u53d6\u4efb\u52a1\u95f4\u9694\u7684\u65f6\u95f4\n[ interval: string | default = 30s ]\n# \u6293\u53d6\u4efb\u52a1\u8d85\u65f6\n[ scrapeTimeout: string | default = 30s]\n# \u6293\u53d6\u8fde\u63a5\u662f\u5426\u901a\u8fc7 TLS \u5b89\u5168\u901a\u9053\uff0c\u914d\u7f6e\u5bf9\u5e94\u7684 TLS \u53c2\u6570\n[ tlsConfig: TLSConfig ]\n# \u901a\u8fc7\u5bf9\u5e94\u7684\u6587\u4ef6\u8bfb\u53d6 bearer token \u5bf9\u5e94\u7684\u503c\uff0c\u653e\u5230\u6293\u53d6\u4efb\u52a1\u7684 header \u4e2d\n[ bearerTokenFile: string ]\n# \u901a\u8fc7\u5bf9\u5e94\u7684 K8S secret key \u8bfb\u53d6\u5bf9\u5e94\u7684 bearer token\uff0c\u6ce8\u610f secret namespace \u9700\u8981\u548c PodMonitor/ServiceMonitor \u76f8\u540c\n[ bearerTokenSecret: string ]\n# \u89e3\u51b3\u5f53\u6293\u53d6\u7684 label \u4e0e\u540e\u7aef Prometheus \u6dfb\u52a0 label \u51b2\u7a81\u65f6\u7684\u5904\u7406\u3002\n# true: \u4fdd\u7559\u6293\u53d6\u5230\u7684 label\uff0c\u5ffd\u7565\u4e0e\u540e\u7aef Prometheus \u51b2\u7a81\u7684 label\uff1b\n# false: \u5bf9\u51b2\u7a81\u7684 label\uff0c\u628a\u6293\u53d6\u7684 label \u524d\u52a0\u4e0a exported_<original-label>\uff0c\u6dfb\u52a0\u540e\u7aef Prometheus \u589e\u52a0\u7684 label\uff1b\n[ honorLabels: bool | default = false ]\n# \u662f\u5426\u4f7f\u7528\u6293\u53d6\u5230 target \u4e0a\u4ea7\u751f\u7684\u65f6\u95f4\u3002\n# true: \u5982\u679c target \u4e2d\u6709\u65f6\u95f4\uff0c\u4f7f\u7528 target \u4e0a\u7684\u65f6\u95f4\uff1b\n# false: \u76f4\u63a5\u5ffd\u7565 target \u4e0a\u7684\u65f6\u95f4\uff1b\n[ honorTimestamps: bool | default = true ]\n# basic auth \u7684\u8ba4\u8bc1\u4fe1\u606f\uff0cusername/password \u586b\u5199\u5bf9\u5e94 K8S secret key \u7684\u503c\uff0c\u6ce8\u610f secret namespace \u9700\u8981\u548c PodMonitor/ServiceMonitor \u76f8\u540c\u3002\n[ basicAuth: BasicAuth ]\n# \u901a\u8fc7\u4ee3\u7406\u670d\u52a1\u6765\u6293\u53d6 target \u4e0a\u7684\u6307\u6807\uff0c\u586b\u5199\u5bf9\u5e94\u7684\u4ee3\u7406\u670d\u52a1\u5730\u5740\n[ proxyUrl: string ]\n# \u5728\u6293\u53d6\u6570\u636e\u4e4b\u540e\uff0c\u628a target \u4e0a\u5bf9\u5e94\u7684 label \u901a\u8fc7 relabel \u7684\u673a\u5236\u8fdb\u884c\u6539\u5199\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\nrelabelings:\n[ - <relabel_config> ...]\n# \u6570\u636e\u6293\u53d6\u5b8c\u6210\u5199\u5165\u4e4b\u524d\uff0c\u901a\u8fc7 relabel \u673a\u5236\u8fdb\u884c\u6539\u5199 label \u5bf9\u5e94\u7684\u503c\uff0c\u6309\u987a\u5e8f\u6267\u884c\u591a\u4e2a relabel \u89c4\u5219\u3002\n# relabel_config \u8be6\u89c1\u4e0b\u6587\u8bf4\u660e\nmetricRelabelings:\n[ - <relabel_config> ...]\n
              "},{"location":"end-user/insight/collection-manag/metric-collect.html#relabel_config","title":"relabel_config","text":"

              \u76f8\u5e94\u914d\u7f6e\u9879\u8bf4\u660e\u5982\u4e0b\uff1a

              # \u4ece\u539f\u59cb labels \u4e2d\u53d6\u54ea\u4e9b label \u7684\u503c\u8fdb\u884c relabel\uff0c\u53d6\u51fa\u6765\u7684\u503c\u901a\u8fc7 separator \u4e2d\u7684\u5b9a\u4e49\u8fdb\u884c\u5b57\u7b26\u62fc\u63a5\u3002\n# \u5982\u679c\u662f PodMonitor/ServiceMonitor \u5bf9\u5e94\u7684\u914d\u7f6e\u9879\u4e3a sourceLabels\n[ source_labels: '[' <labelname> [, ...] ']' ]\n# \u5b9a\u4e49\u9700\u8981 relabel \u7684 label \u503c\u62fc\u63a5\u7684\u5b57\u7b26\uff0c\u9ed8\u8ba4\u4e3a ';'\n[ separator: <string> | default = ; ]\n\n# action \u4e3a replace/hashmod \u65f6\uff0c\u901a\u8fc7 target_label \u6765\u6307\u5b9a\u5bf9\u5e94 label name\u3002\n# \u5982\u679c\u662f PodMonitor/ServiceMonitor \u5bf9\u5e94\u7684\u914d\u7f6e\u9879\u4e3a targetLabel\n[ target_label: <labelname> ]\n\n# \u9700\u8981\u5bf9 source labels \u5bf9\u5e94\u503c\u8fdb\u884c\u6b63\u5219\u5339\u914d\u7684\u8868\u8fbe\u5f0f\n[ regex: <regex> | default = (.*) ]\n\n# action \u4e3a hashmod \u65f6\u7528\u5230\uff0c\u6839\u636e source label \u5bf9\u5e94\u503c md5 \u53d6\u6a21\u503c\n[ modulus: <int> ]\n\n# action \u4e3a replace \u7684\u65f6\u5019\uff0c\u901a\u8fc7 replacement \u6765\u5b9a\u4e49\u5f53 regex \u5339\u914d\u4e4b\u540e\u9700\u8981\u66ff\u6362\u7684\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u7ed3\u5408 regex \u6b63\u89c4\u5219\u8868\u8fbe\u5f0f\u66ff\u6362\n[ replacement: <string> | default = $1 ]\n\n# \u57fa\u4e8e regex \u5339\u914d\u5230\u7684\u503c\u8fdb\u884c\u76f8\u5173\u7684\u64cd\u4f5c\uff0c\u5bf9\u5e94\u7684 action \u5982\u4e0b\uff0c\u9ed8\u8ba4\u4e3a replace\uff1a\n# replace: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u901a\u8fc7 replacement \u4e2d\u5b9a\u4e49\u7684\u503c\u66ff\u6362\u76f8\u5e94\u7684\u503c\uff0c\u5e76\u901a\u8fc7 target_label \u8bbe\u503c\u5e76\u6dfb\u52a0\u76f8\u5e94\u7684 label\n# keep: \u5982\u679c regex \u6ca1\u6709\u5339\u914d\u5230\uff0c\u4e22\u5f03\n# drop: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u4e22\u5f03\n# hashmod: \u901a\u8fc7 moduels \u6307\u5b9a\u7684\u503c\u628a source label \u5bf9\u5e94\u7684 md5 \u503c\u53d6\u6a21\n# \u5e76\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684 label\uff0clabel name \u901a\u8fc7 target_label \u6307\u5b9a\n# labelmap: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u4f7f\u7528 replacement \u66ff\u6362\u5bf9\u5c31\u7684 label name\n# labeldrop: \u5982\u679c regex \u5339\u914d\u5230\uff0c\u5220\u9664\u5bf9\u5e94\u7684 label\n# labelkeep: \u5982\u679c regex \u6ca1\u6709\u5339\u914d\u5230\uff0c\u5220\u9664\u5bf9\u5e94\u7684 label\n[ action: <relabel_action> | default = replace ]\n
              "},{"location":"end-user/insight/collection-manag/probe-module.html","title":"\u81ea\u5b9a\u4e49\u63a2\u6d4b\u65b9\u5f0f","text":"

              Insight \u4f7f\u7528 Prometheus \u5b98\u65b9\u63d0\u4f9b\u7684 Blackbox Exporter \u4f5c\u4e3a\u9ed1\u76d2\u76d1\u63a7\u89e3\u51b3\u65b9\u6848\uff0c\u53ef\u4ee5\u901a\u8fc7 HTTP\u3001HTTPS\u3001DNS\u3001ICMP\u3001TCP \u548c gRPC \u65b9\u5f0f\u5bf9\u76ee\u6807\u5b9e\u4f8b\u8fdb\u884c\u68c0\u6d4b\u3002\u53ef\u7528\u4e8e\u4ee5\u4e0b\u4f7f\u7528\u573a\u666f\uff1a

              • HTTP/HTTPS\uff1aURL/API\u53ef\u7528\u6027\u68c0\u6d4b
              • ICMP\uff1a\u4e3b\u673a\u5b58\u6d3b\u68c0\u6d4b
              • TCP\uff1a\u7aef\u53e3\u5b58\u6d3b\u68c0\u6d4b
              • DNS\uff1a\u57df\u540d\u89e3\u6790

              \u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u5df2\u6709\u7684 Blackbox ConfigMap \u4e2d\u914d\u7f6e\u81ea\u5b9a\u4e49\u7684\u63a2\u6d4b\u65b9\u5f0f\u3002

              Insight \u9ed8\u8ba4\u672a\u5f00\u542f ICMP \u63a2\u6d4b\u65b9\u5f0f\uff0c\u56e0\u4e3a ICMP \u9700\u8981\u66f4\u9ad8\u6743\u9650\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u4ee5 ICMP \u548c HTTP \u63a2\u6d4b\u65b9\u5f0f\u4f5c\u4e3a\u793a\u4f8b\uff0c\u5c55\u793a\u5982\u4f55\u4fee\u6539 ConfigMap \u4ee5\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684 ICMP \u548c HTTP \u63a2\u6d4b\u3002

              "},{"location":"end-user/insight/collection-manag/probe-module.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u8fdb\u5165\u76ee\u6807\u96c6\u7fa4\u7684\u8be6\u60c5\uff1b
              2. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\uff0c\u9009\u62e9 \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u914d\u7f6e\u9879 \uff1b
              3. \u627e\u5230\u540d\u4e3a insight-agent-prometheus-blackbox-exporter \u7684\u914d\u7f6e\u9879\uff0c\u70b9\u51fb \u7f16\u8f91 YAML\uff1b

                \u5728 modules \u4e0b\u6dfb\u52a0\u81ea\u5b9a\u4e49\u63a2\u6d4b\u65b9\u5f0f\uff1a

              HTTP \u63a2\u6d4bICMP \u63a2\u6d4b
              module:\n  http_2xx:\n    prober: http\n    timeout: 5s\n    http:\n      valid_http_versions: [HTTP/1.1, HTTP/2]\n      valid_status_codes: []  # Defaults to 2xx\n      method: GET\n

              module:\n  ICMP: # ICMP \u63a2\u6d4b\u914d\u7f6e\u7684\u793a\u4f8b\n    prober: icmp\n    timeout: 5s\n    icmp:\n      preferred_ip_protocol: ip4\nicmp_example: # ICMP \u63a2\u6d4b\u914d\u7f6e\u7684\u793a\u4f8b 2\n  prober: icmp\n  timeout: 5s\n  icmp:\n    preferred_ip_protocol: \"ip4\"\n    source_ip_address: \"127.0.0.1\"\n
              \u7531\u4e8e ICMP \u9700\u8981\u66f4\u9ad8\u6743\u9650\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u63d0\u5347 Pod \u6743\u9650\uff0c\u5426\u5219\u4f1a\u51fa\u73b0 operation not permitted \u7684\u9519\u8bef\u3002\u6709\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u63d0\u5347\u6743\u9650\uff1a

              • \u65b9\u5f0f\u4e00\uff1a \u76f4\u63a5\u7f16\u8f91 BlackBox Exporter \u90e8\u7f72\u6587\u4ef6\u5f00\u542f

                apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: insight-agent-prometheus-blackbox-exporter\n  namespace: insight-system\nspec:\n  template:\n    spec:\n      containers:\n        - name: blackbox-exporter\n          image: # ... (image, args, ports \u7b49\u4fdd\u6301\u4e0d\u53d8)\n          imagePullPolicy: IfNotPresent\n          securityContext:\n            allowPrivilegeEscalation: false\n            capabilities:\n              add:\n              - NET_RAW\n              drop:\n              - ALL\n            readOnlyRootFilesystem: true\n            runAsGroup: 0\n            runAsNonRoot: false\n            runAsUser: 0\n
              • \u65b9\u5f0f\u4e8c\uff1a \u901a\u8fc7 Helm Upgrade \u65b9\u5f0f\u63d0\u6743

                prometheus-blackbox-exporter:\n  enabled: true\n  securityContext:\n    runAsUser: 0\n    runAsGroup: 0\n    readOnlyRootFilesystem: true\n    runAsNonRoot: false\n    allowPrivilegeEscalation: false\n    capabilities:\n      add: [\"NET_RAW\"]\n

              Info

              \u66f4\u591a\u63a2\u6d4b\u65b9\u5f0f\u53ef\u53c2\u8003 blackbox_exporter Configuration\u3002

              "},{"location":"end-user/insight/collection-manag/probe-module.html#_3","title":"\u5176\u4ed6\u53c2\u8003","text":"

              \u4ee5\u4e0b YAML \u6587\u4ef6\u4e2d\u5305\u542b\u4e86 HTTP\u3001TCP\u3001SMTP\u3001ICMP\u3001DNS \u7b49\u591a\u79cd\u63a2\u6d4b\u65b9\u5f0f\uff0c\u53ef\u6839\u636e\u9700\u6c42\u81ea\u884c\u4fee\u6539 insight-agent-prometheus-blackbox-exporter \u7684\u914d\u7f6e\u6587\u4ef6\u3002

              \u70b9\u51fb\u67e5\u770b\u5b8c\u6574\u7684 YAML \u6587\u4ef6
              kind: ConfigMap\napiVersion: v1\nmetadata:\n  name: insight-agent-prometheus-blackbox-exporter\n  namespace: insight-system\n  labels:\n    app.kubernetes.io/instance: insight-agent\n    app.kubernetes.io/managed-by: Helm\n    app.kubernetes.io/name: prometheus-blackbox-exporter\n    app.kubernetes.io/version: v0.24.0\n    helm.sh/chart: prometheus-blackbox-exporter-8.8.0\n  annotations:\n    meta.helm.sh/release-name: insight-agent\n    meta.helm.sh/release-namespace: insight-system\ndata:\n  blackbox.yaml: |\n    modules:\n      HTTP_GET:\n        prober: http\n        timeout: 5s\n        http:\n          method: GET\n          valid_http_versions: [\"HTTP/1.1\", \"HTTP/2.0\"]\n          follow_redirects: true\n          preferred_ip_protocol: \"ip4\"\n      HTTP_POST:\n        prober: http\n        timeout: 5s\n        http:\n          method: POST\n          body_size_limit: 1MB\n      TCP:\n        prober: tcp\n        timeout: 5s\n      # \u9ed8\u8ba4\u672a\u5f00\u542f\uff1a\n      # ICMP:\n      #   prober: icmp\n      #   timeout: 5s\n      #   icmp:\n      #     preferred_ip_protocol: ip4\n      SSH:\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n          - expect: \"^SSH-2.0-\"\n      POP3S:\n        prober: tcp\n        tcp:\n          query_response:\n          - expect: \"^+OK\"\n          tls: true\n          tls_config:\n            insecure_skip_verify: false\n      http_2xx_example:               # http \u63a2\u6d4b\u793a\u4f8b\n        prober: http\n        timeout: 5s                   # \u63a2\u6d4b\u7684\u8d85\u65f6\u65f6\u95f4\n        http:\n          valid_http_versions: [\"HTTP/1.1\", \"HTTP/2.0\"]                   # \u8fd4\u56de\u4fe1\u606f\u4e2d\u7684 Version\uff0c\u4e00\u822c\u9ed8\u8ba4\u5373\u53ef\n          valid_status_codes: []  # Defaults to 2xx                       # \u6709\u6548\u7684\u8fd4\u56de\u7801\u8303\u56f4\uff0c\u5982\u679c\u8bf7\u6c42\u7684\u8fd4\u56de\u7801\u5728\u8be5\u8303\u56f4\u5185\uff0c\u89c6\u4e3a\u63a2\u6d4b\u6210\u529f\n          method: GET                 # \u8bf7\u6c42\u65b9\u6cd5\n          headers:                    # \u8bf7\u6c42\u7684\u5934\u90e8\n            Host: vhost.example.com\n            Accept-Language: en-US\n            Origin: example.com\n          no_follow_redirects: false  # \u662f\u5426\u5141\u8bb8\u91cd\u5b9a\u5411\n          fail_if_ssl: false   \n          fail_if_not_ssl: false\n          fail_if_body_matches_regexp:\n            - \"Could not connect to database\"\n          fail_if_body_not_matches_regexp:\n            - \"Download the latest version here\"\n          fail_if_header_matches: # Verifies that no cookies are set\n            - header: Set-Cookie\n              allow_missing: true\n              regexp: '.*'\n          fail_if_header_not_matches:\n            - header: Access-Control-Allow-Origin\n              regexp: '(\\*|example\\.com)'\n          tls_config:                  # \u9488\u5bf9 https \u8bf7\u6c42\u7684 tls \u7684\u914d\u7f6e\n            insecure_skip_verify: false\n          preferred_ip_protocol: \"ip4\" # defaults to \"ip6\"                 # \u9996\u9009\u7684 IP \u534f\u8bae\u7248\u672c\n          ip_protocol_fallback: false  # no fallback to \"ip6\"            \n      http_post_2xx:                   # \u5e26 Body \u7684 http \u63a2\u6d4b\u7684\u793a\u4f8b\n        prober: http\n        timeout: 5s\n        http:\n          method: POST                 # \u63a2\u6d4b\u7684\u8bf7\u6c42\u65b9\u6cd5\n          headers:\n            Content-Type: application/json\n          body: '{\"username\":\"admin\",\"password\":\"123456\"}'                   # \u63a2\u6d4b\u65f6\u643a\u5e26\u7684 body\n      http_basic_auth_example:         # \u5e26\u7528\u6237\u540d\u5bc6\u7801\u7684\u63a2\u6d4b\u7684\u793a\u4f8b\n        prober: http\n        timeout: 5s\n        http:\n          method: POST\n          headers:\n            Host: \"login.example.com\"\n          basic_auth:                  # \u63a2\u6d4b\u65f6\u8981\u52a0\u7684\u7528\u6237\u540d\u5bc6\u7801\n            username: \"username\"\n            password: \"mysecret\"\n      http_custom_ca_example:\n        prober: http\n        http:\n          method: GET\n          tls_config:                  # \u6307\u5b9a\u63a2\u6d4b\u65f6\u4f7f\u7528\u7684\u6839\u8bc1\u4e66\n            ca_file: \"/certs/my_cert.crt\"\n      http_gzip:\n        prober: http\n        http:\n          method: GET\n          compression: gzip            # \u63a2\u6d4b\u65f6\u4f7f\u7528\u7684\u538b\u7f29\u65b9\u6cd5\n      http_gzip_with_accept_encoding:\n        prober: http\n        http:\n          method: GET\n          compression: gzip\n          headers:\n            Accept-Encoding: gzip\n      tls_connect:                     # TCP \u63a2\u6d4b\u7684\u793a\u4f8b\n        prober: tcp\n        timeout: 5s\n        tcp:\n          tls: true                    # \u662f\u5426\u4f7f\u7528 TLS\n      tcp_connect_example:\n        prober: tcp\n        timeout: 5s\n      imap_starttls:                   # \u63a2\u6d4b IMAP \u90ae\u7bb1\u670d\u52a1\u5668\u7684\u914d\u7f6e\u793a\u4f8b\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n            - expect: \"OK.*STARTTLS\"\n            - send: \". STARTTLS\"\n            - expect: \"OK\"\n            - starttls: true\n            - send: \". capability\"\n            - expect: \"CAPABILITY IMAP4rev1\"\n      smtp_starttls:                   # \u63a2\u6d4b SMTP \u90ae\u7bb1\u670d\u52a1\u5668\u7684\u914d\u7f6e\u793a\u4f8b\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n            - expect: \"^220 ([^ ]+) ESMTP (.+)$\"\n            - send: \"EHLO prober\\r\"\n            - expect: \"^250-STARTTLS\"\n            - send: \"STARTTLS\\r\"\n            - expect: \"^220\"\n            - starttls: true\n            - send: \"EHLO prober\\r\"\n            - expect: \"^250-AUTH\"\n            - send: \"QUIT\\r\"\n      irc_banner_example:\n        prober: tcp\n        timeout: 5s\n        tcp:\n          query_response:\n            - send: \"NICK prober\"\n            - send: \"USER prober prober prober :prober\"\n            - expect: \"PING :([^ ]+)\"\n              send: \"PONG ${1}\"\n            - expect: \"^:[^ ]+ 001\"\n      # icmp_example:                    # ICMP \u63a2\u6d4b\u914d\u7f6e\u7684\u793a\u4f8b\n      #   prober: icmp\n      #   timeout: 5s\n      #   icmp:\n      #     preferred_ip_protocol: \"ip4\"\n      #     source_ip_address: \"127.0.0.1\"\n      dns_udp_example:                 # \u4f7f\u7528 UDP \u8fdb\u884c DNS \u67e5\u8be2\u7684\u793a\u4f8b\n        prober: dns\n        timeout: 5s\n        dns:\n          query_name: \"www.prometheus.io\"                 # \u8981\u89e3\u6790\u7684\u57df\u540d\n          query_type: \"A\"              # \u8be5\u57df\u540d\u5bf9\u5e94\u7684\u7c7b\u578b\n          valid_rcodes:\n          - NOERROR\n          validate_answer_rrs:\n            fail_if_matches_regexp:\n            - \".*127.0.0.1\"\n            fail_if_all_match_regexp:\n            - \".*127.0.0.1\"\n            fail_if_not_matches_regexp:\n            - \"www.prometheus.io.\\t300\\tIN\\tA\\t127.0.0.1\"\n            fail_if_none_matches_regexp:\n            - \"127.0.0.1\"\n          validate_authority_rrs:\n            fail_if_matches_regexp:\n            - \".*127.0.0.1\"\n          validate_additional_rrs:\n            fail_if_matches_regexp:\n            - \".*127.0.0.1\"\n      dns_soa:\n        prober: dns\n        dns:\n          query_name: \"prometheus.io\"\n          query_type: \"SOA\"\n      dns_tcp_example:               # \u4f7f\u7528 TCP \u8fdb\u884c DNS \u67e5\u8be2\u7684\u793a\u4f8b\n        prober: dns\n        dns:\n          transport_protocol: \"tcp\" # defaults to \"udp\"\n          preferred_ip_protocol: \"ip4\" # defaults to \"ip6\"\n          query_name: \"www.prometheus.io\"\n
              "},{"location":"end-user/insight/collection-manag/service-monitor.html","title":"\u914d\u7f6e\u670d\u52a1\u53d1\u73b0\u89c4\u5219","text":"

              \u53ef\u89c2\u6d4b Insight \u652f\u6301\u901a\u8fc7 \u5bb9\u5668\u7ba1\u7406 \u521b\u5efa CRD ServiceMonitor \u7684\u65b9\u5f0f\u6765\u6ee1\u8db3\u60a8\u81ea\u5b9a\u4e49\u670d\u52a1\u53d1\u73b0\u7684\u91c7\u96c6\u9700\u6c42\u3002 \u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528 ServiceMonitor \u81ea\u884c\u5b9a\u4e49 Pod \u53d1\u73b0\u7684 Namespace \u8303\u56f4\u4ee5\u53ca\u901a\u8fc7 matchLabel \u6765\u9009\u62e9\u76d1\u542c\u7684 Service\u3002

              "},{"location":"end-user/insight/collection-manag/service-monitor.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u96c6\u7fa4\u5df2\u5b89\u88c5 Helm \u5e94\u7528 insight-agent \u4e14\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

              "},{"location":"end-user/insight/collection-manag/service-monitor.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u91c7\u96c6\u7ba1\u7406 \uff0c\u67e5\u770b\u5168\u90e8\u96c6\u7fa4\u91c7\u96c6\u63d2\u4ef6\u7684\u72b6\u6001\u3002

              2. \u70b9\u51fb\u5217\u8868\u4e2d\u7684\u67d0\u4e2a\u96c6\u7fa4\u540d\u79f0\u8fdb\u5165\u91c7\u96c6\u914d\u7f6e\u8be6\u60c5\u3002

              3. \u70b9\u51fb\u94fe\u63a5\u8df3\u8f6c\u5230 \u5bb9\u5668\u7ba1\u7406 \u4e2d\u521b\u5efa Service Monitor\u3002

                apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: micrometer-demo # (1)\n  namespace: insight-system # (2)\n    labels: \n      operator.insight.io/managed-by: insight\nspec:\n  endpoints: # (3)\n    - honorLabels: true\n        interval: 15s\n        path: /actuator/prometheus\n        port: http\n  namespaceSelector: # (4)\n    matchNames:\n      - insight-system  # (5)\n  selector: # (6)\n    matchLabels:\n          micrometer-prometheus-discovery: \"true\"\n
                1. \u6307\u5b9a ServiceMonitor \u7684\u540d\u79f0
                2. \u6307\u5b9a ServiceMonitor \u7684\u547d\u540d\u7a7a\u95f4
                3. \u8fd9\u662f\u670d\u52a1\u7aef\u70b9\uff0c\u4ee3\u8868 Prometheus \u6240\u9700\u7684\u91c7\u96c6 Metrics \u7684\u5730\u5740\u3002 endpoints \u4e3a\u4e00\u4e2a\u6570\u7ec4\uff0c \u540c\u65f6\u53ef\u4ee5\u521b\u5efa\u591a\u4e2a endpoints \u3002\u6bcf\u4e2a endpoints \u5305\u542b\u4e09\u4e2a\u5b57\u6bb5\uff0c\u6bcf\u4e2a\u5b57\u6bb5\u7684\u542b\u4e49\u5982\u4e0b\uff1a

                  • interval \uff1a\u6307\u5b9a Prometheus \u5bf9\u5f53\u524d endpoints \u91c7\u96c6\u7684\u5468\u671f\u3002\u5355\u4f4d\u4e3a\u79d2\uff0c\u5728\u672c\u6b21\u793a\u4f8b\u4e2d\u8bbe\u5b9a\u4e3a 15s \u3002
                  • path \uff1a\u6307\u5b9a Prometheus \u7684\u91c7\u96c6\u8def\u5f84\u3002\u5728\u672c\u6b21\u793a\u4f8b\u4e2d\uff0c\u6307\u5b9a\u4e3a /actuator/prometheus \u3002
                  • port \uff1a\u6307\u5b9a\u91c7\u96c6\u6570\u636e\u9700\u8981\u901a\u8fc7\u7684\u7aef\u53e3\uff0c\u8bbe\u7f6e\u7684\u7aef\u53e3\u4e3a\u91c7\u96c6\u7684 Service \u7aef\u53e3\u6240\u8bbe\u7f6e\u7684 name \u3002
                4. \u8fd9\u662f\u9700\u8981\u53d1\u73b0\u7684 Service \u7684\u8303\u56f4\u3002 namespaceSelector \u5305\u542b\u4e24\u4e2a\u4e92\u65a5\u5b57\u6bb5\uff0c\u5b57\u6bb5\u7684\u542b\u4e49\u5982\u4e0b\uff1a

                  • any \uff1a\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u503c true \uff0c\u5f53\u8be5\u5b57\u6bb5\u88ab\u8bbe\u7f6e\u65f6\uff0c\u5c06\u76d1\u542c\u6240\u6709\u7b26\u5408 Selector \u8fc7\u6ee4\u6761\u4ef6\u7684 Service \u7684\u53d8\u52a8\u3002
                  • matchNames \uff1a\u6570\u7ec4\u503c\uff0c\u6307\u5b9a\u9700\u8981\u76d1\u542c\u7684 namespace \u7684\u8303\u56f4\u3002\u4f8b\u5982\uff0c\u53ea\u60f3\u76d1\u542c default \u548c insight-system \u4e24\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\u7684 Service\uff0c\u90a3\u4e48 matchNames \u8bbe\u7f6e\u5982\u4e0b\uff1a

                    namespaceSelector:\n  matchNames:\n    - default\n    - insight-system\n
                5. \u6b64\u5904\u5339\u914d\u7684\u547d\u540d\u7a7a\u95f4\u4e3a\u9700\u8981\u66b4\u9732\u6307\u6807\u7684\u5e94\u7528\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4

                6. \u7528\u4e8e\u9009\u62e9 Service
              "},{"location":"end-user/insight/dashboard/dashboard.html","title":"\u4eea\u8868\u76d8","text":"

              Grafana \u662f\u4e00\u79cd\u5f00\u6e90\u7684\u6570\u636e\u53ef\u89c6\u5316\u548c\u76d1\u63a7\u5e73\u53f0\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u56fe\u8868\u548c\u9762\u677f\uff0c\u7528\u4e8e\u5b9e\u65f6\u76d1\u63a7\u3001\u5206\u6790\u548c\u53ef\u89c6\u5316\u5404\u79cd\u6570\u636e\u6e90\u7684\u6307\u6807\u548c\u65e5\u5fd7\u3002\u53ef\u89c2\u6d4b\u6027 Insight \u4f7f\u7528\u5f00\u6e90 Grafana \u63d0\u4f9b\u76d1\u63a7\u670d\u52a1\uff0c\u652f\u6301\u4ece\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u547d\u540d\u7a7a\u95f4\u7b49\u591a\u7ef4\u5ea6\u67e5\u770b\u8d44\u6e90\u6d88\u8017\u60c5\u51b5\uff0c

              \u5173\u4e8e\u5f00\u6e90 Grafana \u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 Grafana \u5b98\u65b9\u6587\u6863\u3002

              "},{"location":"end-user/insight/dashboard/dashboard.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 \u4eea\u8868\u76d8 \u3002

                • \u5728 Insight /\u6982\u89c8 \u4eea\u8868\u76d8\u4e2d\uff0c\u53ef\u67e5\u770b\u591a\u9009\u96c6\u7fa4\u7684\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\uff0c\u5e76\u4ee5\u547d\u540d\u7a7a\u95f4\u3001\u5bb9\u5668\u7ec4\u7b49\u591a\u4e2a\u7ef4\u5ea6\u5206\u6790\u4e86\u8d44\u6e90\u4f7f\u7528\u3001\u7f51\u7edc\u3001\u5b58\u50a8\u7b49\u60c5\u51b5\u3002

                • \u70b9\u51fb\u4eea\u8868\u76d8\u5de6\u4e0a\u4fa7\u7684\u4e0b\u62c9\u6846\u53ef\u5207\u6362\u96c6\u7fa4\u3002

                • \u70b9\u51fb\u4eea\u8868\u76d8\u53f3\u4e0b\u4fa7\u53ef\u5207\u6362\u67e5\u8be2\u7684\u65f6\u95f4\u8303\u56f4\u3002

              2. Insight \u7cbe\u9009\u591a\u4e2a\u793e\u533a\u63a8\u8350\u4eea\u8868\u76d8\uff0c\u53ef\u4ece\u8282\u70b9\u3001\u547d\u540d\u7a7a\u95f4\u3001\u5de5\u4f5c\u8d1f\u8f7d\u7b49\u591a\u4e2a\u7ef4\u5ea6\u8fdb\u884c\u76d1\u63a7\u3002\u70b9\u51fb insight-system / Insight /\u6982\u89c8 \u533a\u57df\u5207\u6362\u4eea\u8868\u76d8\u3002

              Note

              1. \u8bbf\u95ee Grafana UI \u8bf7\u53c2\u8003\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u767b\u5f55 Grafana\u3002

              2. \u5bfc\u5165\u81ea\u5b9a\u4e49\u4eea\u8868\u76d8\u8bf7\u53c2\u8003\u5bfc\u5165\u81ea\u5b9a\u4e49\u4eea\u8868\u76d8\u3002

              "},{"location":"end-user/insight/dashboard/import-dashboard.html","title":"\u5bfc\u5165\u81ea\u5b9a\u4e49\u4eea\u8868\u76d8","text":"

              \u901a\u8fc7\u4f7f\u7528 Grafana CRD\uff0c\u53ef\u4ee5\u5c06\u4eea\u8868\u677f\u7684\u7ba1\u7406\u548c\u90e8\u7f72\u7eb3\u5165\u5230 Kubernetes \u7684\u751f\u547d\u5468\u671f\u7ba1\u7406\u4e2d\uff0c\u5b9e\u73b0\u4eea\u8868\u677f\u7684\u7248\u672c\u63a7\u5236\u3001\u81ea\u52a8\u5316\u90e8\u7f72\u548c\u96c6\u7fa4\u7ea7\u7684\u7ba1\u7406\u3002\u672c\u9875\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7 CRD \u548c UI \u754c\u9762\u5bfc\u5165\u81ea\u5b9a\u4e49\u7684\u4eea\u8868\u76d8\u3002

              "},{"location":"end-user/insight/dashboard/import-dashboard.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0 \u5e73\u53f0\uff0c\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \uff0c\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u9009\u62e9 kpanda-global-cluster \u3002

              2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u5728\u5217\u8868\u4e2d\u67e5\u627e grafanadashboards.integreatly.org \u6587\u4ef6\uff0c\u8fdb\u5165\u8be6\u60c5\u3002

              3. \u70b9\u51fb Yaml \u521b\u5efa \uff0c\u4f7f\u7528\u4ee5\u4e0b\u6a21\u677f\uff0c\u5728 Json \u5b57\u6bb5\u4e2d\u66ff\u6362\u4eea\u8868\u76d8 JSON\u3002

                • namespace \uff1a\u586b\u5199\u76ee\u6807\u547d\u540d\u7a7a\u95f4\uff1b
                • name \uff1a\u586b\u5199\u4eea\u8868\u76d8\u7684\u540d\u79f0\u3002
                • label \uff1a\u5fc5\u586b\uff0c operator.insight.io/managed-by: insight \u3002
                apiVersion: integreatly.org/v1alpha1\nkind: GrafanaDashboard\nmetadata:\n  labels:\n    app: insight-grafana-operator\n    operator.insight.io/managed-by: insight\n  name: sample-dashboard\n  namespace: insight-system\nspec:\n  json: >\n    {\n      \"id\": null,\n      \"title\": \"Simple Dashboard\",\n      \"tags\": [],\n      \"style\": \"dark\",\n      \"timezone\": \"browser\",\n      \"editable\": true,\n      \"hideControls\": false,\n      \"graphTooltip\": 1,\n      \"panels\": [],\n      \"time\": {\n        \"from\": \"now-6h\",\n        \"to\": \"now\"\n      },\n      \"timepicker\": {\n        \"time_options\": [],\n        \"refresh_intervals\": []\n      },\n      \"templating\": {\n        \"list\": []\n      },\n      \"annotations\": {\n        \"list\": []\n      },\n      \"refresh\": \"5s\",\n      \"schemaVersion\": 17,\n      \"version\": 0,\n      \"links\": []\n    }\n
              4. \u70b9\u51fb \u786e\u8ba4 \u540e\uff0c\u7a0d\u7b49\u7247\u523b\u5373\u53ef\u5728 \u4eea\u8868\u76d8 \u4e2d\u67e5\u770b\u521a\u521a\u5bfc\u5165\u7684\u4eea\u8868\u76d8\u3002

              Info

              \u81ea\u5b9a\u4e49\u8bbe\u8ba1\u4eea\u8868\u76d8\uff0c\u8bf7\u53c2\u8003\u6dfb\u52a0\u4eea\u8868\u76d8\u9762\u677f\u3002

              "},{"location":"end-user/insight/dashboard/login-grafana.html","title":"\u8bbf\u95ee\u539f\u751f Grafana","text":"

              Insight \u501f\u52a9 Grafana \u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684\u53ef\u89c6\u5316\u80fd\u529b\uff0c\u540c\u65f6\u4fdd\u7559\u4e86\u8bbf\u95ee\u539f\u751f Grafana \u7684\u5165\u53e3\u3002

              "},{"location":"end-user/insight/dashboard/login-grafana.html#_1","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u767b\u5f55\u6d4f\u89c8\u5668\uff0c\u5728\u6d4f\u89c8\u5668\u4e2d\u8f93\u5165 Grafana \u5730\u5740\u3002

                \u8bbf\u95ee\u5730\u5740\uff1a http://ip:\u8bbf\u95ee\u7aef\u53e3/ui/insight-grafana/login

                \u4f8b\u5982\uff1a http://10.6.10.233:30209/ui/insight-grafana/login

              2. \u70b9\u51fb\u53f3\u4e0b\u89d2\u7684\u767b\u5f55\uff0c\u4f7f\u7528\u9ed8\u8ba4\u7528\u6237\u540d\u3001\u5bc6\u7801\uff08admin/admin\uff09\u8fdb\u884c\u767b\u5f55\u3002

              3. \u70b9\u51fb Log in \u5b8c\u6210\u767b\u5f55\u3002

              "},{"location":"end-user/insight/dashboard/overview.html","title":"\u6982\u89c8","text":"

              \u6982\u7387 \u4ec5\u7edf\u8ba1\u5df2\u5b89\u88c5 insight-agent \u4e14\u5176\u8fd0\u884c\u72b6\u6001\u4e3a\u6b63\u5e38\u7684\u96c6\u7fa4\u6570\u636e\u3002\u53ef\u5728\u6982\u89c8\u4e2d\u591a\u96c6\u7fa4\u7684\u8d44\u6e90\u6982\u51b5\uff1a

              • \u544a\u8b66\u7edf\u8ba1\uff1a\u53ef\u67e5\u770b\u6240\u6709\u96c6\u7fa4\u7684\u6b63\u5728\u544a\u8b66\u7684\u7edf\u8ba1\u6570\u636e\u3002
              • \u8d44\u6e90\u6d88\u8017\uff1a\u53ef\u6309 CPU \u4f7f\u7528\u7387\u3001\u5185\u5b58\u4f7f\u7528\u7387\u548c\u78c1\u76d8\u4f7f\u7528\u7387\u5206\u522b\u67e5\u770b\u8fd1\u4e00\u5c0f\u65f6 TOP5 \u96c6\u7fa4\u3001\u8282\u70b9\u7684\u8d44\u6e90\u53d8\u5316\u8d8b\u52bf\u3002
              • \u9ed8\u8ba4\u6309\u7167\u6839\u636e CPU \u4f7f\u7528\u7387\u6392\u5e8f\u3002\u60a8\u53ef\u5207\u6362\u6307\u6807\u5207\u6362\u96c6\u7fa4\u3001\u8282\u70b9\u7684\u6392\u5e8f\u65b9\u5f0f\u3002
              • \u8d44\u6e90\u53d8\u5316\u8d8b\u52bf\uff1a\u53ef\u67e5\u770b\u8fd1 15 \u5929\u7684\u8282\u70b9\u4e2a\u6570\u8d8b\u52bf\u4ee5\u53ca\u4e00\u5c0f\u65f6 Pod \u7684\u8fd0\u884c\u8d8b\u52bf\u3002
              • \u670d\u52a1\u8bf7\u6c42\u6392\u884c\uff1a\u53ef\u67e5\u770b\u591a\u96c6\u7fa4\u4e2d\u8bf7\u6c42\u5ef6\u65f6\u3001\u9519\u8bef\u7387\u6392\u884c TOP5 \u7684\u670d\u52a1\u53ca\u6240\u5728\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u3002
              "},{"location":"end-user/insight/dashboard/overview.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u6982\u89c8 \u3002

              "},{"location":"end-user/insight/data-query/log.html","title":"\u65e5\u5fd7\u67e5\u8be2","text":"

              Insight \u9ed8\u8ba4\u91c7\u96c6\u8282\u70b9\u65e5\u5fd7\u3001\u5bb9\u5668\u65e5\u5fd7\u4ee5\u53ca kubernetes \u5ba1\u8ba1\u65e5\u5fd7\u3002\u5728\u65e5\u5fd7\u67e5\u8be2\u9875\u9762\u4e2d\uff0c\u53ef\u67e5\u8be2\u767b\u5f55\u8d26\u53f7\u6743\u9650\u5185\u7684\u6807\u51c6\u8f93\u51fa (stdout) \u65e5\u5fd7\uff0c\u5305\u62ec\u8282\u70b9\u65e5\u5fd7\u3001\u4ea7\u54c1\u65e5\u5fd7\u3001Kubenetes \u5ba1\u8ba1\u65e5\u5fd7\u7b49\uff0c\u5feb\u901f\u5728\u5927\u91cf\u65e5\u5fd7\u4e2d\u67e5\u8be2\u5230\u6240\u9700\u7684\u65e5\u5fd7\uff0c\u540c\u65f6\u7ed3\u5408\u65e5\u5fd7\u7684\u6765\u6e90\u4fe1\u606f\u548c\u4e0a\u4e0b\u6587\u539f\u59cb\u6570\u636e\u8f85\u52a9\u5b9a\u4f4d\u95ee\u9898\u3002

              "},{"location":"end-user/insight/data-query/log.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u3002
              2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u65e5\u5fd7 \u3002

                • \u9ed8\u8ba4\u67e5\u8be2\u6700\u8fd1 24 \u5c0f\u65f6\uff1b
                • \u7b2c\u4e00\u6b21\u8fdb\u5165\u65f6\uff0c\u9ed8\u8ba4\u6839\u636e\u767b\u5f55\u8d26\u53f7\u6743\u9650\u67e5\u8be2\u6709\u6743\u9650\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u7684\u5bb9\u5668\u65e5\u5fd7\uff1b

              3. \u9876\u90e8 Tab \u9ed8\u8ba4\u8fdb\u5165 \u666e\u901a\u67e5\u8be2 \u3002

                1. \u70b9\u51fb \u7b5b\u9009 \u5c55\u5f00\u8fc7\u6ee4\u9762\u677f\uff0c\u53ef\u5207\u6362\u65e5\u5fd7\u641c\u7d22\u6761\u4ef6\u548c\u7c7b\u578b\u3002
                2. \u65e5\u5fd7\u7c7b\u578b\uff1a

                  • \u5bb9\u5668\u65e5\u5fd7 \uff1a\u8bb0\u5f55\u96c6\u7fa4\u4e2d\u5bb9\u5668\u5185\u90e8\u7684\u6d3b\u52a8\u548c\u4e8b\u4ef6\uff0c\u5305\u62ec\u5e94\u7528\u7a0b\u5e8f\u7684\u8f93\u51fa\u3001\u9519\u8bef\u6d88\u606f\u3001\u8b66\u544a\u548c\u8c03\u8bd5\u4fe1\u606f\u7b49\u3002\u652f\u6301\u901a\u8fc7\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u3001\u5bb9\u5668\u7ec4\u3001\u5bb9\u5668\u8fc7\u6ee4\u65e5\u5fd7\u3002
                  • \u8282\u70b9\u65e5\u5fd7 \uff1a\u8bb0\u5f55\u96c6\u7fa4\u4e2d\u6bcf\u4e2a\u8282\u70b9\u7684\u7cfb\u7edf\u7ea7\u522b\u65e5\u5fd7\u3002\u8fd9\u4e9b\u65e5\u5fd7\u5305\u542b\u8282\u70b9\u7684\u64cd\u4f5c\u7cfb\u7edf\u3001\u5185\u6838\u3001\u670d\u52a1\u548c\u7ec4\u4ef6\u7684\u76f8\u5173\u4fe1\u606f\u3002\u652f\u6301\u901a\u8fc7\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u6587\u4ef6\u8def\u5f84\u8fc7\u6ee4\u65e5\u5fd7\u3002
                3. \u652f\u6301\u5bf9\u5355\u4e2a\u5173\u952e\u5b57\u8fdb\u884c\u6a21\u7cca\u641c\u7d22\u3002

              4. \u9876\u90e8\u5207\u6362 Tab \u9009\u62e9 Lucene \u8bed\u6cd5\u67e5\u8be2 \u3002

                \u7b2c\u4e00\u6b21\u8fdb\u5165\u65f6\uff0c\u9ed8\u8ba4\u9009\u62e9\u767b\u5f55\u8d26\u53f7\u6743\u9650\u67e5\u8be2\u6709\u6743\u9650\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u7684\u5bb9\u5668\u65e5\u5fd7\u3002

                Lucene \u8bed\u6cd5\u8bf4\u660e\uff1a

                1. \u4f7f\u7528 \u903b\u8f91\u64cd\u4f5c\u7b26\uff08AND\u3001OR\u3001NOT\u3001\"\" \uff09\u7b26\u67e5\u8be2\u591a\u4e2a\u5173\u952e\u5b57\uff0c\u4f8b\u5982\uff1akeyword1 AND (keyword2 OR keyword3) NOT keyword4\u3002
                2. \u4f7f\u7528\u6ce2\u6d6a\u53f7 (~) \u5b9e\u73b0\u6a21\u7cca\u67e5\u8be2\uff0c\u5728 \"~\" \u540e\u53ef\u6307\u5b9a\u53ef\u9009\u7684\u53c2\u6570\uff0c\u7528\u4e8e\u63a7\u5236\u6a21\u7cca\u67e5\u8be2\u7684\u76f8\u4f3c\u5ea6\uff0c\u4e0d\u6307\u5b9a\u5219\u9ed8\u8ba4\u4f7f\u7528 0.5\u3002\u4f8b\u5982\uff1aerror~\u3002
                3. \u4f7f\u7528\u901a\u914d\u7b26 (*\u3001?) \u7528\u4f5c\u5355\u5b57\u7b26\u901a\u914d\u7b26\uff0c\u8868\u793a\u5339\u914d\u4efb\u610f\u4e00\u4e2a\u5b57\u7b26\u3002
                4. \u4f7f\u7528\u65b9\u62ec\u53f7 [ ] \u6216\u82b1\u62ec\u53f7 { } \u6765\u67e5\u8be2\u8303\u56f4\uff0c\u65b9\u62ec\u53f7\u00a0[ ]\u00a0\u8868\u793a\u95ed\u533a\u95f4\uff0c\u5305\u542b\u8fb9\u754c\u503c\u3002\u82b1\u62ec\u53f7\u00a0{ }\u00a0\u8868\u793a\u5f00\u533a\u95f4\uff0c\u6392\u9664\u8fb9\u754c\u503c\u3002\u8303\u56f4\u67e5\u8be2\u53ea\u9002\u7528\u4e8e\u80fd\u591f\u8fdb\u884c\u6392\u5e8f\u7684\u5b57\u6bb5\u7c7b\u578b\uff0c\u5982\u6570\u5b57\u3001\u65e5\u671f\u7b49\u3002\u4f8b\u5982\uff1atimestamp:[2022-01-01 TO 2022-01-31]\u3002
                5. \u66f4\u591a\u7528\u6cd5\u8bf7\u67e5\u770b\uff1aLucene \u8bed\u6cd5\u8bf4\u660e\u3002
              "},{"location":"end-user/insight/data-query/log.html#_3","title":"\u5176\u4ed6\u64cd\u4f5c","text":""},{"location":"end-user/insight/data-query/log.html#_4","title":"\u67e5\u770b\u65e5\u5fd7\u4e0a\u4e0b\u6587","text":"

              \u70b9\u51fb\u65e5\u5fd7\u540e\u7684\u6309\u94ae\uff0c\u5728\u53f3\u4fa7\u5212\u51fa\u9762\u677f\u4e2d\u53ef\u67e5\u770b\u8be5\u6761\u65e5\u5fd7\u7684\u9ed8\u8ba4 100 \u6761\u4e0a\u4e0b\u6587\u3002\u53ef\u5207\u6362 \u663e\u793a\u884c\u6570 \u67e5\u770b\u66f4\u591a\u4e0a\u4e0b\u6587\u5185\u5bb9\u3002

              "},{"location":"end-user/insight/data-query/log.html#_5","title":"\u5bfc\u51fa\u65e5\u5fd7\u6570\u636e","text":"

              \u70b9\u51fb\u5217\u8868\u53f3\u4e0a\u4fa7\u7684\u4e0b\u8f7d\u6309\u94ae\u3002

              • \u652f\u6301\u914d\u7f6e\u5bfc\u51fa\u7684\u65e5\u5fd7\u5b57\u6bb5\uff0c\u6839\u636e\u65e5\u5fd7\u7c7b\u578b\u53ef\u914d\u7f6e\u7684\u5b57\u6bb5\u4e0d\u540c\uff0c\u5176\u4e2d \u65e5\u5fd7\u5185\u5bb9 \u5b57\u6bb5\u4e3a\u5fc5\u9009\u3002
              • \u652f\u6301\u5c06\u65e5\u5fd7\u67e5\u8be2\u7ed3\u679c\u5bfc\u51fa\u4e3a .txt \u6216 .csv \u683c\u5f0f\u3002

              Note

              \u82e5\u9700\u6307\u5b9a\u4e0d\u91c7\u96c6\u67d0\u4e00\u4e9b\u5bb9\u5668\u7ec4\u7684\u65e5\u5fd7\uff0c\u53ef\u53c2\u8003\uff1a\u5bb9\u5668\u65e5\u5fd7\u9ed1\u540d\u5355\u3002

              "},{"location":"end-user/insight/data-query/metric.html","title":"\u6307\u6807\u67e5\u8be2","text":"

              \u6307\u6807\u67e5\u8be2\u652f\u6301\u67e5\u8be2\u5bb9\u5668\u5404\u8d44\u6e90\u7684\u6307\u6807\u6570\u636e\uff0c\u53ef\u67e5\u770b\u76d1\u63a7\u6307\u6807\u7684\u8d8b\u52bf\u53d8\u5316\u3002\u540c\u65f6\uff0c\u9ad8\u7ea7\u67e5\u8be2\u652f\u6301\u539f\u751f PromQL \u8bed\u53e5\u8fdb\u884c\u6307\u6807\u67e5\u8be2\u3002

              "},{"location":"end-user/insight/data-query/metric.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002
              "},{"location":"end-user/insight/data-query/metric.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u3002

              2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u6307\u6807 \u3002

              3. \u9009\u62e9\u96c6\u7fa4\u3001\u7c7b\u578b\u3001\u8282\u70b9\u3001\u6307\u6807\u540d\u79f0\u67e5\u8be2\u6761\u4ef6\u540e\uff0c\u70b9\u51fb \u641c\u7d22 \uff0c\u5c4f\u5e55\u53f3\u4fa7\u5c06\u663e\u793a\u5bf9\u5e94\u6307\u6807\u56fe\u8868\u53ca\u6570\u636e\u8be6\u60c5\u3002

              4. \u652f\u6301\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u3002\u53ef\u624b\u52a8\u70b9\u51fb \u5237\u65b0 \u56fe\u6807\u6216\u9009\u62e9\u9ed8\u8ba4\u65f6\u95f4\u95f4\u9694\u8fdb\u884c\u5237\u65b0\u3002

              5. \u70b9\u51fb \u9ad8\u7ea7\u67e5\u8be2 \u9875\u7b7e\u901a\u8fc7\u539f\u751f\u7684 PromQL \u67e5\u8be2\u3002

              Note

              \u53c2\u9605 PromQL \u8bed\u6cd5\u3002

              "},{"location":"end-user/insight/infra/cluster.html","title":"\u96c6\u7fa4\u76d1\u63a7","text":"

              \u901a\u8fc7\u96c6\u7fa4\u76d1\u63a7\uff0c\u4f60\u53ef\u4ee5\u67e5\u770b\u96c6\u7fa4\u7684\u57fa\u672c\u4fe1\u606f\u3001\u8be5\u96c6\u7fa4\u4e2d\u7684\u8d44\u6e90\u6d88\u8017\u4ee5\u53ca\u4e00\u6bb5\u65f6\u95f4\u7684\u8d44\u6e90\u6d88\u8017\u53d8\u5316\u8d8b\u52bf\u7b49\u3002

              "},{"location":"end-user/insight/infra/cluster.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

              "},{"location":"end-user/insight/infra/cluster.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u96c6\u7fa4 \u3002\u5728\u8be5\u9875\u9762\u53ef\u67e5\u770b\u4ee5\u4e0b\u4fe1\u606f\uff1a

                • \u8d44\u6e90\u6982\u89c8 \uff1a\u591a\u9009\u96c6\u7fa4\u4e2d\u7684\u8282\u70b9\u3001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6b63\u5e38\u548c\u5168\u90e8\u7684\u6570\u91cf\u7edf\u8ba1\uff1b
                • \u6545\u969c \uff1a\u7edf\u8ba1\u5f53\u524d\u96c6\u7fa4\u4ea7\u751f\u7684\u544a\u8b66\u6570\u91cf\uff1b
                • \u8d44\u6e90\u6d88\u8017 \uff1a\u6240\u9009\u96c6\u7fa4\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u7684\u5b9e\u9645\u4f7f\u7528\u91cf\u548c\u603b\u91cf\uff1b
                • \u6307\u6807\u8bf4\u660e \uff1a\u6240\u9009\u96c6\u7fa4\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u8bfb\u5199\u3001\u7f51\u7edc\u63a5\u6536\u53d1\u9001\u7684\u53d8\u5316\u8d8b\u52bf\u3002

              3. \u5207\u6362\u5230 \u8d44\u6e90\u6c34\u4f4d\u7ebf\u76d1\u63a7 \u9875\u7b7e\uff0c\u53ef\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u66f4\u591a\u76d1\u63a7\u6570\u636e\u3002

              "},{"location":"end-user/insight/infra/cluster.html#_4","title":"\u53c2\u8003\u6307\u6807\u8bf4\u660e","text":"\u6307\u6807\u540d \u8bf4\u660e CPU \u4f7f\u7528\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u8d44\u6e90\u7684\u5b9e\u9645 CPU \u7528\u91cf\u4e0e\u6240\u6709\u8282\u70b9\u7684 CPU \u603b\u91cf\u7684\u6bd4\u7387\u3002 CPU \u5206\u914d\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u7684 CPU \u8bf7\u6c42\u91cf\u7684\u603b\u548c\u4e0e\u6240\u6709\u8282\u70b9\u7684 CPU \u603b\u91cf\u7684\u6bd4\u7387\u3002 \u5185\u5b58\u4f7f\u7528\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u8d44\u6e90\u7684\u5b9e\u9645\u5185\u5b58\u7528\u91cf\u4e0e\u6240\u6709\u8282\u70b9\u7684\u5185\u5b58\u603b\u91cf\u7684\u6bd4\u7387\u3002 \u5185\u5b58\u5206\u914d\u7387 \u8be5\u6307\u6807\u662f\u6307\u96c6\u7fa4\u4e2d\u6240\u6709 Pod \u7684\u5185\u5b58\u8bf7\u6c42\u91cf\u7684\u603b\u548c\u4e0e\u6240\u6709\u8282\u70b9\u7684\u5185\u5b58\u603b\u91cf\u7684\u6bd4\u7387\u3002"},{"location":"end-user/insight/infra/container.html","title":"\u5bb9\u5668\u76d1\u63a7","text":"

              \u5bb9\u5668\u76d1\u63a7\u662f\u5bf9\u96c6\u7fa4\u7ba1\u7406\u4e2d\u5de5\u4f5c\u8d1f\u8f7d\u7684\u76d1\u63a7\uff0c\u5728\u5217\u8868\u4e2d\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u57fa\u672c\u4fe1\u606f\u548c\u72b6\u6001\u3002\u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\uff0c\u53ef\u67e5\u770b\u6b63\u5728\u544a\u8b66\u7684\u6570\u91cf\u4ee5\u53ca CPU\u3001\u5185\u5b58\u7b49\u8d44\u6e90\u6d88\u8017\u7684\u53d8\u5316\u8d8b\u52bf\u3002

              "},{"location":"end-user/insight/infra/container.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u96c6\u7fa4\u5df2\u5b89\u88c5 insight-agent\uff0c\u4e14\u6240\u6709\u7684\u5bb9\u5668\u7ec4\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

              • \u5b89\u88c5 insight-agent\uff0c\u8bf7\u53c2\u8003\u5728\u7ebf\u5b89\u88c5 insight-agent \u6216\u79bb\u7ebf\u5347\u7ea7 insight-agent\u3002
              "},{"location":"end-user/insight/infra/container.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u67e5\u770b\u670d\u52a1\u76d1\u63a7\u6307\u6807\uff1a

              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u5de5\u4f5c\u8d1f\u8f7d \u3002

              3. \u5207\u6362\u9876\u90e8 Tab\uff0c\u67e5\u770b\u4e0d\u540c\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\u3002

              4. \u70b9\u51fb\u76ee\u6807\u5de5\u4f5c\u8d1f\u8f7d\u540d\u79f0\u67e5\u770b\u8be6\u60c5\u3002

                1. \u6545\u969c\uff1a\u5728\u6545\u969c\u5361\u7247\u4e2d\u7edf\u8ba1\u8be5\u5de5\u4f5c\u8d1f\u8f7d\u5f53\u524d\u6b63\u5728\u544a\u8b66\u7684\u603b\u6570\u3002
                2. \u8d44\u6e90\u6d88\u8017\uff1a\u5728\u8be5\u5361\u7247\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684 CPU\u3001\u5185\u5b58\u3001\u7f51\u7edc\u7684\u4f7f\u7528\u60c5\u51b5\u3002
                3. \u76d1\u63a7\u6307\u6807\uff1a\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u9ed8\u8ba4 1 \u5c0f\u65f6\u7684 CPU\u3001\u5185\u5b58\u3001\u7f51\u7edc\u548c\u78c1\u76d8\u7684\u53d8\u5316\u8d8b\u52bf\u3002

              5. \u5207\u6362 Tab \u5230 \u5bb9\u5668\u7ec4\u5217\u8868 \uff0c\u53ef\u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u5404\u4e2a\u5bb9\u5668\u7ec4\u72b6\u6001\u3001\u6240\u5728\u8282\u70b9\u3001\u91cd\u542f\u6b21\u6570\u7b49\u4fe1\u606f\u3002

              6. \u5207\u6362 Tab \u5230 JVM \u76d1\u63a7 \uff0c\u53ef\u67e5\u770b\u5404\u4e2a\u5bb9\u5668\u7ec4\u7684 JVM \u6307\u6807\u3002

                Note

                1. JVM \u76d1\u63a7\u529f\u80fd\u4ec5\u652f\u6301 Java \u8bed\u8a00\u3002
                2. \u5f00\u542f JVM \u76d1\u63a7\u529f\u80fd\uff0c\u8bf7\u53c2\u8003\u5f00\u59cb\u76d1\u63a7 Java \u5e94\u7528\u3002
              "},{"location":"end-user/insight/infra/container.html#_4","title":"\u6307\u6807\u53c2\u8003\u8bf4\u660e","text":"\u6307\u6807\u540d\u79f0 \u8bf4\u660e CPU \u4f7f\u7528\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684 CPU \u4f7f\u7528\u91cf\u4e4b\u548c\u3002 CPU \u8bf7\u6c42\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684 CPU \u8bf7\u6c42\u91cf\u4e4b\u548c\u3002 CPU \u9650\u5236\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684 CPU \u9650\u5236\u91cf\u4e4b\u548c\u3002 \u5185\u5b58\u4f7f\u7528\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c\u3002 \u5185\u5b58\u8bf7\u6c42\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c\u3002 \u5185\u5b58\u9650\u5236\u91cf \u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u9650\u5236\u91cf\u4e4b\u548c\u3002 \u78c1\u76d8\u8bfb\u5199\u901f\u7387 \u6307\u5b9a\u65f6\u95f4\u8303\u56f4\u5185\u78c1\u76d8\u6bcf\u79d2\u8fde\u7eed\u8bfb\u53d6\u548c\u5199\u5165\u7684\u603b\u548c\uff0c\u8868\u793a\u78c1\u76d8\u6bcf\u79d2\u8bfb\u53d6\u548c\u5199\u5165\u64cd\u4f5c\u6570\u7684\u6027\u80fd\u5ea6\u91cf\u3002 \u7f51\u7edc\u53d1\u9001\u63a5\u6536\u901f\u7387 \u6307\u5b9a\u65f6\u95f4\u8303\u56f4\u5185\uff0c\u6309\u5de5\u4f5c\u8d1f\u8f7d\u7edf\u8ba1\u7684\u7f51\u7edc\u6d41\u91cf\u7684\u6d41\u5165\u3001\u6d41\u51fa\u901f\u7387\u3002"},{"location":"end-user/insight/infra/event.html","title":"\u4e8b\u4ef6\u67e5\u8be2","text":"

              AI \u7b97\u529b\u5e73\u53f0 Insight \u652f\u6301\u6309\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u67e5\u8be2\u4e8b\u4ef6\uff0c\u5e76\u63d0\u4f9b\u4e86\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03\u56fe\uff0c\u5bf9\u91cd\u8981\u4e8b\u4ef6\u8fdb\u884c\u7edf\u8ba1\u3002

              "},{"location":"end-user/insight/infra/event.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u70b9\u51fb\u4e00\u7ea7\u5bfc\u822a\u680f\u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u3002
              2. \u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u9009\u62e9 \u57fa\u7840\u8bbe\u7f6e > \u4e8b\u4ef6 \u3002

              "},{"location":"end-user/insight/infra/event.html#_3","title":"\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03","text":"

              \u9ed8\u8ba4\u663e\u793a\u6700\u8fd1 12 \u5c0f\u65f6\u5185\u53d1\u751f\u7684\u4e8b\u4ef6\uff0c\u60a8\u53ef\u4ee5\u5728\u53f3\u4e0a\u89d2\u9009\u62e9\u4e0d\u540c\u7684\u65f6\u95f4\u8303\u56f4\u6765\u67e5\u770b\u8f83\u957f\u6216\u8f83\u77ed\u7684\u65f6\u95f4\u6bb5\u3002 \u60a8\u8fd8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u91c7\u6837\u95f4\u9694\u4e3a 1 \u5206\u949f\u81f3 5 \u5c0f\u65f6\u3002

              \u901a\u8fc7\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03\u56fe\uff0c\u60a8\u53ef\u4ee5\u76f4\u89c2\u5730\u4e86\u89e3\u4e8b\u4ef6\u7684\u5bc6\u96c6\u7a0b\u5ea6\u548c\u5206\u6563\u60c5\u51b5\u3002 \u8fd9\u6709\u52a9\u4e8e\u5bf9\u540e\u7eed\u7684\u96c6\u7fa4\u8fd0\u7ef4\u8fdb\u884c\u8bc4\u4f30\uff0c\u5e76\u505a\u597d\u51c6\u5907\u548c\u5b89\u6392\u5de5\u4f5c\u3002 \u5982\u679c\u4e8b\u4ef6\u5bc6\u96c6\u53d1\u751f\u5728\u7279\u5b9a\u65f6\u6bb5\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u8c03\u914d\u66f4\u591a\u7684\u8d44\u6e90\u6216\u91c7\u53d6\u76f8\u5e94\u63aa\u65bd\u6765\u786e\u4fdd\u96c6\u7fa4\u7a33\u5b9a\u6027\u548c\u9ad8\u53ef\u7528\u6027\u3002 \u800c\u5982\u679c\u4e8b\u4ef6\u8f83\u4e3a\u5206\u6563\uff0c\u5728\u6b64\u671f\u95f4\u60a8\u53ef\u4ee5\u5408\u7406\u5b89\u6392\u5176\u4ed6\u8fd0\u7ef4\u5de5\u4f5c\uff0c\u4f8b\u5982\u7cfb\u7edf\u4f18\u5316\u3001\u5347\u7ea7\u6216\u5904\u7406\u5176\u4ed6\u4efb\u52a1\u3002

              \u901a\u8fc7\u7efc\u5408\u8003\u8651\u4e8b\u4ef6\u72b6\u6001\u5206\u5e03\u56fe\u548c\u65f6\u95f4\u8303\u56f4\uff0c\u60a8\u80fd\u66f4\u597d\u5730\u89c4\u5212\u548c\u7ba1\u7406\u96c6\u7fa4\u7684\u8fd0\u7ef4\u5de5\u4f5c\uff0c\u786e\u4fdd\u7cfb\u7edf\u7a33\u5b9a\u6027\u548c\u53ef\u9760\u6027\u3002

              "},{"location":"end-user/insight/infra/event.html#_4","title":"\u4e8b\u4ef6\u603b\u6570\u548c\u7edf\u8ba1","text":"

              \u901a\u8fc7\u91cd\u8981\u4e8b\u4ef6\u7edf\u8ba1\uff0c\u60a8\u53ef\u4ee5\u65b9\u4fbf\u5730\u4e86\u89e3\u955c\u50cf\u62c9\u53d6\u5931\u8d25\u6b21\u6570\u3001\u5065\u5eb7\u68c0\u67e5\u5931\u8d25\u6b21\u6570\u3001\u5bb9\u5668\u7ec4\uff08Pod\uff09\u8fd0\u884c\u5931\u8d25\u6b21\u6570\u3001 Pod \u8c03\u5ea6\u5931\u8d25\u6b21\u6570\u3001\u5bb9\u5668 OOM \u5185\u5b58\u8017\u5c3d\u6b21\u6570\u3001\u5b58\u50a8\u5377\u6302\u8f7d\u5931\u8d25\u6b21\u6570\u4ee5\u53ca\u6240\u6709\u4e8b\u4ef6\u7684\u603b\u6570\u3002\u8fd9\u4e9b\u4e8b\u4ef6\u901a\u5e38\u5206\u4e3a\u300cWarning\u300d\u548c\u300cNormal\u300d\u4e24\u7c7b\u3002

              "},{"location":"end-user/insight/infra/event.html#_5","title":"\u4e8b\u4ef6\u5217\u8868","text":"

              \u4e8b\u4ef6\u5217\u8868\u4ee5\u65f6\u95f4\u4e3a\u8f74\uff0c\u4ee5\u6d41\u6c34\u7684\u5f62\u5f0f\u5c55\u793a\u53d1\u751f\u7684\u4e8b\u4ef6\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u300c\u6700\u8fd1\u53d1\u751f\u65f6\u95f4\u300d\u548c\u300c\u7ea7\u522b\u300d\u8fdb\u884c\u6392\u5e8f\u3002

              \u70b9\u51fb\u53f3\u4fa7\u7684 \u2699\ufe0f \u56fe\u6807\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u559c\u597d\u548c\u9700\u6c42\u6765\u81ea\u5b9a\u4e49\u663e\u793a\u7684\u5217\u3002

              \u5728\u9700\u8981\u7684\u65f6\u5019\uff0c\u60a8\u8fd8\u53ef\u4ee5\u70b9\u51fb\u5237\u65b0\u56fe\u6807\u6765\u66f4\u65b0\u5f53\u524d\u7684\u4e8b\u4ef6\u5217\u8868\u3002

              "},{"location":"end-user/insight/infra/event.html#_6","title":"\u5176\u4ed6\u64cd\u4f5c","text":"
              1. \u5728\u4e8b\u4ef6\u5217\u8868\u4e2d\u64cd\u4f5c\u5217\u7684\u56fe\u6807\uff0c\u53ef\u67e5\u770b\u67d0\u4e00\u4e8b\u4ef6\u7684\u5143\u6570\u636e\u4fe1\u606f\u3002

              2. \u70b9\u51fb\u9876\u90e8\u9875\u7b7e\u7684 \u4e0a\u4e0b\u6587 \u53ef\u67e5\u770b\u8be5\u4e8b\u4ef6\u5bf9\u5e94\u8d44\u6e90\u7684\u5386\u53f2\u4e8b\u4ef6\u8bb0\u5f55\u3002

              "},{"location":"end-user/insight/infra/event.html#_7","title":"\u53c2\u8003","text":"

              \u6709\u5173\u7cfb\u7edf\u81ea\u5e26\u7684 Event \u4e8b\u4ef6\u7684\u8be6\u7ec6\u542b\u4e49\uff0c\u8bf7\u53c2\u9605 Kubenetest API \u4e8b\u4ef6\u5217\u8868\u3002

              "},{"location":"end-user/insight/infra/namespace.html","title":"\u547d\u540d\u7a7a\u95f4\u76d1\u63a7","text":"

              \u4ee5\u547d\u540d\u7a7a\u95f4\u4e3a\u7ef4\u5ea6\uff0c\u5feb\u901f\u67e5\u8be2\u547d\u540d\u7a7a\u95f4\u5185\u7684\u8d44\u6e90\u6d88\u8017\u548c\u53d8\u5316\u8d8b\u52bf\u3002

              "},{"location":"end-user/insight/infra/namespace.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

              "},{"location":"end-user/insight/infra/namespace.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd > \u547d\u540d\u7a7a\u95f4 \u3002\u5728\u8be5\u9875\u9762\u53ef\u67e5\u770b\u4ee5\u4e0b\u4fe1\u606f\uff1a

                1. \u5207\u6362\u547d\u540d\u7a7a\u95f4\uff1a\u5728\u9876\u90e8\u5207\u6362\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\uff1b
                2. \u8d44\u6e90\u6982\u89c8\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6b63\u5e38\u548c\u5168\u90e8\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u91cf\uff1b
                3. \u6545\u969c\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b\u4ea7\u751f\u7684\u544a\u8b66\u6570\u91cf\uff1b
                4. \u4e8b\u4ef6\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b 24 \u5c0f\u65f6\u5185 Warning \u7ea7\u522b\u7684\u4e8b\u4ef6\u6570\u91cf\uff1b
                5. \u8d44\u6e90\u6d88\u8017\uff1a\u7edf\u8ba1\u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e0b\u5bb9\u5668\u7ec4\u7684 CPU\u3001\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c \u53ca CPU\u3001\u5185\u5b58\u914d\u989d\u60c5\u51b5\u3002

              "},{"location":"end-user/insight/infra/namespace.html#_4","title":"\u6307\u6807\u8bf4\u660e","text":"\u6307\u6807\u540d \u8bf4\u660e CPU \u4f7f\u7528\u91cf \u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e2d\u5bb9\u5668\u7ec4\u7684 CPU \u4f7f\u7528\u91cf\u4e4b\u548c \u5185\u5b58\u4f7f\u7528\u91cf \u6240\u9009\u547d\u540d\u7a7a\u95f4\u4e2d\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf\u4e4b\u548c \u5bb9\u5668\u7ec4 CPU \u4f7f\u7528\u91cf \u547d\u540d\u7a7a\u95f4\u4e2d\u5404\u5bb9\u5668\u7ec4\u7684 CPU \u4f7f\u7528\u91cf \u5bb9\u5668\u7ec4\u5185\u5b58\u4f7f\u7528\u91cf \u547d\u540d\u7a7a\u95f4\u4e2d\u5404\u5bb9\u5668\u7ec4\u7684\u5185\u5b58\u4f7f\u7528\u91cf"},{"location":"end-user/insight/infra/node.html","title":"\u8282\u70b9\u76d1\u63a7","text":"

              \u901a\u8fc7\u8282\u70b9\u76d1\u63a7\uff0c\u4f60\u53ef\u4ee5\u6982\u89c8\u6240\u9009\u96c6\u7fa4\u4e0b\u8282\u70b9\u7684\u5f53\u524d\u5065\u5eb7\u72b6\u6001\u3001\u5bf9\u5e94\u5bb9\u5668\u7ec4\u7684\u5f02\u5e38\u6570\u91cf\uff1b \u5728\u5f53\u524d\u8282\u70b9\u8be6\u60c5\u9875\uff0c\u4f60\u53ef\u4ee5\u67e5\u770b\u6b63\u5728\u544a\u8b66\u7684\u6570\u91cf\u4ee5\u53ca CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u7b49\u8d44\u6e90\u6d88\u8017\u7684\u53d8\u5316\u8d8b\u52bf\u56fe\u3002

              "},{"location":"end-user/insight/infra/node.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

              "},{"location":"end-user/insight/infra/node.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u8282\u70b9 \u3002\u5728\u8be5\u9875\u9762\u53ef\u67e5\u770b\u4ee5\u4e0b\u4fe1\u606f\uff1a

                • \u96c6\u7fa4\u5207\u6362 \uff1a\u5207\u6362\u9876\u90e8\u7684\u4e0b\u62c9\u6846\u53ef\u5207\u6362\u96c6\u7fa4\uff1b
                • \u8282\u70b9\u5217\u8868 \uff1a\u6240\u9009\u96c6\u7fa4\u4e2d\u7684\u8282\u70b9\u5217\u8868\uff0c\u5355\u51fb\u5207\u6362\u8282\u70b9\u3002
                • \u6545\u969c \uff1a\u7edf\u8ba1\u5f53\u524d\u96c6\u7fa4\u4ea7\u751f\u7684\u544a\u8b66\u6570\u91cf\uff1b
                • \u8d44\u6e90\u6d88\u8017 \uff1a\u6240\u9009\u8282\u70b9\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u7684\u5b9e\u9645\u4f7f\u7528\u91cf\u548c\u603b\u91cf\uff1b
                • \u6307\u6807\u8bf4\u660e \uff1a\u6240\u9009\u8282\u70b9\u7684 CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u8bfb\u5199\u3001\u7f51\u7edc\u63a5\u6536\u53d1\u9001\u7684\u53d8\u5316\u8d8b\u52bf\u3002

              3. \u5207\u6362\u5230 \u8d44\u6e90\u6c34\u4f4d\u7ebf\u76d1\u63a7 \u9875\u7b7e\uff0c\u53ef\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684\u66f4\u591a\u76d1\u63a7\u6570\u636e\u3002

              "},{"location":"end-user/insight/infra/probe.html","title":"\u62e8\u6d4b","text":"

              \u62e8\u6d4b\uff08Probe\uff09\u6307\u7684\u662f\u57fa\u4e8e\u9ed1\u76d2\u76d1\u63a7\uff0c\u5b9a\u671f\u901a\u8fc7 HTTP\u3001TCP \u7b49\u65b9\u5f0f\u5bf9\u76ee\u6807\u8fdb\u884c\u8fde\u901a\u6027\u6d4b\u8bd5\uff0c\u5feb\u901f\u53d1\u73b0\u6b63\u5728\u53d1\u751f\u7684\u6545\u969c\u3002

              Insight \u57fa\u4e8e Prometheus Blackbox Exporter \u5de5\u5177\u901a\u8fc7 HTTP\u3001HTTPS\u3001DNS\u3001TCP \u548c ICMP \u7b49\u534f\u8bae\uff0c\u5bf9\u7f51\u7edc\u8fdb\u884c\u63a2\u6d4b\u5e76\u8fd4\u56de\u63a2\u6d4b\u7ed3\u679c\u4ee5\u4fbf\u4e86\u89e3\u7f51\u7edc\u72b6\u6001\u3002

              "},{"location":"end-user/insight/infra/probe.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u76ee\u6807\u96c6\u7fa4\u4e2d\u5df2\u6210\u529f\u90e8\u7f72 insight-agent\uff0c\u4e14\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

              "},{"location":"end-user/insight/infra/probe.html#_3","title":"\u67e5\u770b\u62e8\u6d4b\u4efb\u52a1","text":"
              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\uff1b
              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u57fa\u7840\u8bbe\u65bd -> \u62e8\u6d4b\u3002

                • \u70b9\u51fb\u8868\u683c\u4e2d\u7684\u96c6\u7fa4\u6216\u547d\u540d\u7a7a\u95f4\u4e0b\u62c9\u6846\uff0c\u53ef\u5207\u6362\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4
                • \u4f60\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u2699\ufe0f \u4fee\u6539\u663e\u793a\u7684\u5217\uff0c\u9ed8\u8ba4\u4e3a\u62e8\u6d4b\u540d\u79f0\u3001\u63a2\u6d4b\u65b9\u5f0f\u3001\u63a2\u6d4b\u76ee\u6807\u3001\u8fde\u901a\u72b6\u6001\u3001\u521b\u5efa\u65f6\u95f4
                • \u8fde\u901a\u72b6\u6001\u6709 3 \u79cd\uff1a
                  • \u6b63\u5e38\uff1aProbe \u6210\u529f\u8fde\u63a5\u5230\u4e86\u76ee\u6807\uff0c\u76ee\u6807\u8fd4\u56de\u4e86\u9884\u671f\u7684\u54cd\u5e94
                  • \u5f02\u5e38\uff1aProbe \u65e0\u6cd5\u8fde\u63a5\u5230\u76ee\u6807\uff0c\u6216\u76ee\u6807\u6ca1\u6709\u8fd4\u56de\u9884\u671f\u7684\u54cd\u5e94
                  • Pending\uff1aProbe \u6b63\u5728\u5c1d\u8bd5\u8fde\u63a5\u76ee\u6807
                • \u4f60\u53ef\u4ee5\u5728 \ud83d\udd0d \u641c\u7d22\u6846\u4e2d\u952e\u5165\u540d\u79f0\uff0c\u6a21\u7cca\u641c\u7d22\u67d0\u4e9b\u62e8\u6d4b\u4efb\u52a1

              "},{"location":"end-user/insight/infra/probe.html#_4","title":"\u521b\u5efa\u62e8\u6d4b\u4efb\u52a1","text":"
              1. \u70b9\u51fb \u521b\u5efa\u62e8\u6d4b\u4efb\u52a1\u3002
              2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65

                • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u62e8\u6d4b\u7684\u96c6\u7fa4
                • \u547d\u540d\u7a7a\u95f4\uff1a\u62e8\u6d4b\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4

              3. \u914d\u7f6e\u63a2\u6d4b\u53c2\u6570\u3002

                • Blackbox \u5b9e\u4f8b\uff1a\u9009\u62e9\u8d1f\u8d23\u63a2\u6d4b\u7684 blackbox \u5b9e\u4f8b
                • \u63a2\u6d4b\u65b9\u5f0f\uff1a
                  • HTTP\uff1a\u901a\u8fc7\u53d1\u9001 HTTP \u6216 HTTPS \u8bf7\u6c42\u5230\u76ee\u6807 URL\uff0c\u68c0\u6d4b\u5176\u8fde\u901a\u6027\u548c\u54cd\u5e94\u65f6\u95f4\uff0c\u8fd9\u53ef\u4ee5\u7528\u4e8e\u76d1\u6d4b\u7f51\u7ad9\u6216 Web \u5e94\u7528\u7684\u53ef\u7528\u6027\u548c\u6027\u80fd
                  • TCP\uff1a\u901a\u8fc7\u5efa\u7acb\u5230\u76ee\u6807\u4e3b\u673a\u548c\u7aef\u53e3\u7684 TCP \u8fde\u63a5\uff0c\u68c0\u6d4b\u5176\u8fde\u901a\u6027\u548c\u54cd\u5e94\u65f6\u95f4\u3002\u8fd9\u53ef\u4ee5\u7528\u4e8e\u76d1\u6d4b\u57fa\u4e8e TCP \u7684\u670d\u52a1\uff0c\u5982 Web \u670d\u52a1\u5668\u3001\u6570\u636e\u5e93\u670d\u52a1\u5668\u7b49
                  • \u5176\u4ed6\uff1a\u652f\u6301\u901a\u8fc7\u914d\u7f6e ConfigMap \u81ea\u5b9a\u4e49\u63a2\u6d4b\u65b9\u5f0f\uff0c\u53ef\u53c2\u8003\u81ea\u5b9a\u4e49\u62e8\u6d4b\u65b9\u5f0f
                • \u63a2\u6d4b\u76ee\u6807\uff1a\u63a2\u6d4b\u7684\u76ee\u6807\u5730\u5740\uff0c\u652f\u6301\u57df\u540d\u6216 IP \u5730\u5740\u7b49
                • \u6807\u7b7e\uff1a\u81ea\u5b9a\u4e49\u6807\u7b7e\uff0c\u8be5\u6807\u7b7e\u4f1a\u81ea\u52a8\u6dfb\u52a0\u5230 Prometheus \u7684 Label \u4e2d
                • \u63a2\u6d4b\u95f4\u9694\uff1a\u63a2\u6d4b\u95f4\u9694\u65f6\u95f4
                • \u63a2\u6d4b\u8d85\u65f6\uff1a\u63a2\u6d4b\u76ee\u6807\u65f6\u7684\u6700\u957f\u7b49\u5f85\u65f6\u95f4

              4. \u914d\u7f6e\u5b8c\u6210\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

              Warning

              \u62e8\u6d4b\u4efb\u52a1\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u9700\u8981\u5927\u6982 3 \u5206\u949f\u7684\u65f6\u95f4\u6765\u540c\u6b65\u914d\u7f6e\u3002\u5728\u6b64\u671f\u95f4\uff0c\u4e0d\u4f1a\u8fdb\u884c\u63a2\u6d4b\uff0c\u65e0\u6cd5\u67e5\u770b\u63a2\u6d4b\u7ed3\u679c\u3002

              "},{"location":"end-user/insight/infra/probe.html#_5","title":"\u7f16\u8f91\u62e8\u6d4b\u4efb\u52a1","text":"

              \u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 -> \u7f16\u8f91\uff0c\u5b8c\u6210\u7f16\u8f91\u540e\u70b9\u51fb \u786e\u5b9a\u3002

              "},{"location":"end-user/insight/infra/probe.html#_6","title":"\u67e5\u770b\u76d1\u63a7\u9762\u677f","text":"

              \u70b9\u51fb\u62e8\u6d4b\u540d\u79f0 \u67e5\u770b\u62e8\u6d4b\u4efb\u52a1\u4e2d\u6bcf\u4e2a\u76ee\u6807\u7684\u76d1\u63a7\u72b6\u6001\uff0c\u4ee5\u56fe\u8868\u65b9\u5f0f\u663e\u793a\u9488\u5bf9\u7f51\u7edc\u72b6\u51b5\u7684\u63a2\u6d4b\u7ed3\u679c\u3002

              \u6307\u6807\u540d\u79f0 \u63cf\u8ff0 Current Status Response \u8868\u793a HTTP \u63a2\u6d4b\u8bf7\u6c42\u7684\u54cd\u5e94\u72b6\u6001\u7801\u3002 Ping Status \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u662f\u5426\u6210\u529f\u30021 \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u6210\u529f\uff0c0 \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u5931\u8d25\u3002 IP Protocol \u8868\u793a\u63a2\u6d4b\u8bf7\u6c42\u4f7f\u7528\u7684 IP \u534f\u8bae\u7248\u672c\u3002 SSL Expiry \u8868\u793a SSL/TLS \u8bc1\u4e66\u7684\u6700\u65e9\u5230\u671f\u65f6\u95f4\u3002 DNS Response (Latency) \u8868\u793a\u6574\u4e2a\u63a2\u6d4b\u8fc7\u7a0b\u7684\u6301\u7eed\u65f6\u95f4\uff0c\u5355\u4f4d\u662f\u79d2\u3002 HTTP Duration \u8868\u793a\u4ece\u53d1\u9001\u8bf7\u6c42\u5230\u63a5\u6536\u5230\u5b8c\u6574\u54cd\u5e94\u7684\u6574\u4e2a\u8fc7\u7a0b\u7684\u65f6\u95f4\u3002"},{"location":"end-user/insight/infra/probe.html#_7","title":"\u5220\u9664\u62e8\u6d4b\u4efb\u52a1","text":"

              \u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 -> \u5220\u9664\uff0c\u786e\u8ba4\u65e0\u8bef\u540e\u70b9\u51fb \u786e\u5b9a\u3002

              Caution

              \u5220\u9664\u64cd\u4f5c\u4e0d\u53ef\u6062\u590d\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

              "},{"location":"end-user/insight/quickstart/install/index.html","title":"\u5f00\u59cb\u89c2\u6d4b","text":"

              AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u5b9e\u73b0\u4e86\u5bf9\u591a\u4e91\u591a\u96c6\u7fa4\u7684\u7eb3\u7ba1\uff0c\u5e76\u652f\u6301\u521b\u5efa\u96c6\u7fa4\u3002\u5728\u6b64\u57fa\u7840\u4e0a\uff0c\u53ef\u89c2\u6d4b\u6027 Insight \u4f5c\u4e3a\u591a\u96c6\u7fa4\u7edf\u4e00\u89c2\u6d4b\u65b9\u6848\uff0c\u901a\u8fc7\u90e8\u7f72 insight-agent \u63d2\u4ef6\u5b9e\u73b0\u5bf9\u591a\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u7684\u91c7\u96c6\uff0c\u5e76\u652f\u6301\u901a\u8fc7 AI \u7b97\u529b\u4e2d\u5fc3 \u53ef\u89c2\u6d4b\u6027\u4ea7\u54c1\u5b9e\u73b0\u5bf9\u6307\u6807\u3001\u65e5\u5fd7\u3001\u94fe\u8def\u6570\u636e\u7684\u67e5\u8be2\u3002

              insight-agent \u662f\u53ef\u89c2\u6d4b\u6027\u5b9e\u73b0\u5bf9\u591a\u96c6\u7fa4\u6570\u636e\u91c7\u96c6\u7684\u5de5\u5177\uff0c\u5b89\u88c5\u540e\u65e0\u9700\u4efb\u4f55\u4fee\u6539\uff0c\u5373\u53ef\u5b9e\u73b0\u5bf9\u6307\u6807\u3001\u65e5\u5fd7\u4ee5\u53ca\u94fe\u8def\u6570\u636e\u7684\u81ea\u52a8\u5316\u91c7\u96c6\u3002

              \u901a\u8fc7 \u5bb9\u5668\u7ba1\u7406 \u521b\u5efa\u7684\u96c6\u7fa4\u9ed8\u8ba4\u4f1a\u5b89\u88c5 insight-agent\uff0c\u6545\u5728\u6b64\u4ec5\u9488\u5bf9\u63a5\u5165\u7684\u96c6\u7fa4\u5982\u4f55\u5f00\u542f\u89c2\u6d4b\u80fd\u529b\u63d0\u4f9b\u6307\u5bfc\u3002

              • \u5728\u7ebf\u5b89\u88c5 insight-agent

              \u53ef\u89c2\u6d4b\u6027 Insight \u4f5c\u4e3a\u591a\u96c6\u7fa4\u7684\u7edf\u4e00\u89c2\u6d4b\u5e73\u53f0\uff0c\u5176\u90e8\u5206\u7ec4\u4ef6\u7684\u8d44\u6e90\u6d88\u8017\u4e0e\u521b\u5efa\u96c6\u7fa4\u7684\u6570\u636e\u3001\u63a5\u5165\u96c6\u7fa4\u7684\u6570\u91cf\u606f\u606f\u76f8\u5173\uff0c\u5728\u5b89\u88c5 insight-agent \u65f6\uff0c\u9700\u8981\u6839\u636e\u96c6\u7fa4\u89c4\u6a21\u5bf9\u76f8\u5e94\u7ec4\u4ef6\u7684\u8d44\u6e90\u8fdb\u884c\u8c03\u6574\u3002

              1. \u6839\u636e\u521b\u5efa\u96c6\u7fa4\u7684\u89c4\u6a21\u6216\u63a5\u5165\u96c6\u7fa4\u7684\u89c4\u6a21\uff0c\u8c03\u6574 insight-agent \u4e2d\u91c7\u96c6\u7ec4\u4ef6 Prometheus \u7684 CPU \u548c\u5185\u5b58\uff0c\u8bf7\u53c2\u8003: Prometheus \u8d44\u6e90\u89c4\u5212

              2. \u7531\u4e8e\u591a\u96c6\u7fa4\u7684\u6307\u6807\u6570\u636e\u4f1a\u7edf\u4e00\u5b58\u50a8\uff0c\u5219\u9700\u8981 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u7ba1\u7406\u5458\u6839\u636e\u521b\u5efa\u96c6\u7fa4\u7684\u89c4\u6a21\u3001\u63a5\u5165\u96c6\u7fa4\u7684\u89c4\u6a21\u5bf9\u5e94\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\uff0c\u8bf7\u53c2\u8003\uff1avmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212\u3002

              3. \u5982\u4f55\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\uff0c\u8bf7\u53c2\u8003\uff1avmstorge \u78c1\u76d8\u6269\u5bb9\u3002

              \u7531\u4e8e AI \u7b97\u529b\u4e2d\u5fc3 \u652f\u6301\u5bf9\u591a\u4e91\u591a\u96c6\u7fa4\u7684\u7eb3\u7ba1\uff0cinsight-agent \u76ee\u524d\u4e5f\u5b8c\u6210\u4e86\u90e8\u5206\u9a8c\u8bc1\uff0c\u7531\u4e8e\u76d1\u63a7\u7ec4\u4ef6\u51b2\u7a81\u95ee\u9898\u5bfc\u81f4\u5728 AI \u7b97\u529b\u4e2d\u5fc34.0 \u96c6\u7fa4\u548c Openshift 4.x \u96c6\u7fa4\u4e2d\u5b89\u88c5 insight-agent \u4f1a\u51fa\u73b0\u95ee\u9898\uff0c\u82e5\u60a8\u9047\u5230\u540c\u6837\u95ee\u9898\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6587\u6863\uff1a

              • \u5728 Openshift 4.x \u5b89\u88c5 insight-agent
              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html","title":"\u5f00\u542f\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f","text":"

              \u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u4e3a\u4e86\u63d0\u9ad8\u5927\u89c4\u6a21\u73af\u5883\u4e0b\u7684\u6570\u636e\u5199\u5165\u80fd\u529b\uff0c\u652f\u6301\u5c06\u65e5\u5fd7\u5207\u6362\u4e3a \u5927\u65e5\u5fd7 \u6a21\u5f0f\u3001\u5c06\u94fe\u8def\u5207\u6362\u4e3a \u5927\u94fe\u8def \u6a21\u5f0f\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u4ee5\u4e0b\u51e0\u79cd\u5f00\u542f\u65b9\u5f0f\uff1a

              • \u901a\u8fc7\u5b89\u88c5\u5668\u5f00\u542f\u6216\u5347\u7ea7\u81f3\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f\uff08\u901a\u8fc7 manifest.yaml \u4e2d\u540c\u4e00\u4e2a\u53c2\u6570\u503c\u63a7\u5236\uff09
              • \u901a\u8fc7 Helm \u547d\u4ee4\u624b\u52a8\u5f00\u542f\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f
              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_2","title":"\u65e5\u5fd7","text":"

              \u672c\u8282\u8bf4\u660e\u666e\u901a\u65e5\u5fd7\u6a21\u5f0f\u548c\u5927\u65e5\u5fd7\u6a21\u5f0f\u7684\u533a\u522b\u3002

              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_3","title":"\u65e5\u5fd7\u6a21\u5f0f","text":"

              \u7ec4\u4ef6\uff1aFluentbit + Elasticsearch

              \u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a ES \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_4","title":"\u5927\u65e5\u5fd7\u6a21\u5f0f","text":"

              \u7ec4\u4ef6\uff1aFluentbit + Kafka + Vector + Elasticsearch

              \u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a Kafka \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_5","title":"\u94fe\u8def","text":"

              \u672c\u8282\u8bf4\u660e\u666e\u901a\u94fe\u8def\u6a21\u5f0f\u548c\u5927\u94fe\u8def\u6a21\u5f0f\u7684\u533a\u522b\u3002

              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_6","title":"\u94fe\u8def\u6a21\u5f0f","text":"

              \u7ec4\u4ef6\uff1aAgent opentelemetry-collector + Global opentelemetry-collector + Jaeger-collector + Elasticsearch

              \u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a OTlp \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_7","title":"\u5927\u94fe\u8def\u6a21\u5f0f","text":"

              \u7ec4\u4ef6\uff1aAgent opentelemetry-collector + Kafka + Global opentelemetry-collector + Jaeger-collector + Elasticsearch

              \u8be5\u6a21\u5f0f\u7b80\u79f0\u4e3a Kafka \u6a21\u5f0f\uff0c\u6570\u636e\u6d41\u56fe\u5982\u4e0b\u6240\u793a\uff1a

              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_8","title":"\u901a\u8fc7\u5b89\u88c5\u5668\u5f00\u542f","text":"

              \u901a\u8fc7\u5b89\u88c5\u5668\u90e8\u7f72/\u5347\u7ea7 AI \u7b97\u529b\u4e2d\u5fc3 \u65f6\u4f7f\u7528\u7684 manifest.yaml \u4e2d\u5b58\u5728 infrastructures.kafka \u5b57\u6bb5\uff0c \u5982\u679c\u60f3\u5f00\u542f\u53ef\u89c2\u6d4b\u7684\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f\uff0c\u5219\u9700\u8981\u542f\u7528 kafka\uff1a

              manifest.yaml
              apiVersion: manifest.daocloud.io/v1alpha1\nkind: DCEManifest\n...\ninfrastructures:\n  ...\n  kafka:\n    enable: true # \u9ed8\u8ba4\u4e3a false\n    cpuLimit: 1\n    memLimit: 2Gi\n    pvcSize: 15Gi\n
              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_9","title":"\u5f00\u542f","text":"

              \u5b89\u88c5\u65f6\u4f7f\u7528\u542f\u7528 kafka \u7684 manifest.yaml\uff0c\u5219\u4f1a\u9ed8\u8ba4\u5b89\u88c5 kafka \u4e2d\u95f4\u4ef6\uff0c \u5e76\u5728\u5b89\u88c5 Insight \u65f6\u9ed8\u8ba4\u5f00\u542f\u5927\u65e5\u5fd7\u548c\u5927\u94fe\u8def\u6a21\u5f0f\u3002\u5b89\u88c5\u547d\u4ee4\u4e3a\uff1a

              ./dce5-installer cluster-create -c clusterConfig.yaml -m manifest.yaml\n
              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_10","title":"\u5347\u7ea7","text":"

              \u5347\u7ea7\u540c\u6837\u662f\u4fee\u6539 kafka \u5b57\u6bb5\u3002\u4f46\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u56e0\u4e3a\u8001\u73af\u5883\u5b89\u88c5\u65f6\u4f7f\u7528\u7684\u662f kafka: false\uff0c \u6240\u4ee5\u73af\u5883\u4e2d\u65e0 kafka\u3002\u6b64\u65f6\u5347\u7ea7\u9700\u8981\u6307\u5b9a\u5347\u7ea7 middleware\uff0c\u624d\u4f1a\u540c\u65f6\u5b89\u88c5 kafka \u4e2d\u95f4\u4ef6\u3002\u5347\u7ea7\u547d\u4ee4\u4e3a\uff1a

              ./dce5-installer cluster-create -c clusterConfig.yaml -m manifest.yaml -u gproduct,middleware\n

              Note

              \u5728\u5347\u7ea7\u5b8c\u6210\u540e\uff0c\u9700\u8981\u624b\u52a8\u91cd\u542f\u4ee5\u4e0b\u7ec4\u4ef6\uff1a

              • insight-agent-fluent-bit
              • insight-agent-opentelemetry-collector
              • insight-opentelemetry-collector
              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#helm","title":"\u901a\u8fc7 Helm \u547d\u4ee4\u5f00\u542f","text":"

              \u524d\u63d0\u6761\u4ef6\uff1a\u9700\u8981\u4fdd\u8bc1\u5b58\u5728 \u53ef\u7528\u7684 kafka \u4e14\u5730\u5740\u53ef\u6b63\u5e38\u8bbf\u95ee\u3002

              \u6839\u636e\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6\u8001\u7248\u672c insight \u548c insight-agent \u7684 values\uff08\u5efa\u8bae\u505a\u597d\u5907\u4efd\uff09\uff1a

              helm get values insight -n insight-system -o yaml > insight.yaml\nhelm get values insight-agent -n insight-system -o yaml > insight-agent.yaml\n
              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_11","title":"\u5f00\u542f\u5927\u65e5\u5fd7","text":"

              \u6709\u4ee5\u4e0b\u51e0\u79cd\u65b9\u5f0f\u5f00\u542f\u6216\u5347\u7ea7\u81f3\u5927\u65e5\u5fd7\u6a21\u5f0f\uff1a

              \u5728 helm upgrade \u547d\u4ee4\u4e2d\u4f7f\u7528 --set\u4fee\u6539 YAML \u540e\u8fd0\u884c helm upgrade\u5bb9\u5668\u7ba1\u7406 UI \u5347\u7ea7

              \u5148\u8fd0\u884c\u4ee5\u4e0b insight \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

              helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --set global.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.kafka.enabled=true \\\n  --set vector.enabled=true \\\n  --version 0.30.1\n

              \u7136\u540e\u8fd0\u884c\u4ee5\u4e0b insight-agent \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

              helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --set global.exporters.logging.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.exporters.logging.output=kafka \\\n  --version 0.30.1\n

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539 YAMl \u540e\u8fd0\u884c helm upgrade \u547d\u4ee4\uff1a

              1. \u4fee\u6539 insight.yaml

                insight.yaml
                global:\n  ...\n  kafka:\n    brokers: 10.6.216.111:30592\n    enabled: true\n...\nvector:\n  enabled: true\n
              2. \u5347\u7ea7 insight \u7ec4\u4ef6\uff1a

                helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --version 0.30.1\n
              3. \u4fee\u6539 insight-agent.yaml

                insight-agent.yaml
                global:\n  ...\n  exporters:\n    ...\n    logging:\n      ...\n      kafka:\n        brokers: 10.6.216.111:30592\n      output: kafka\n
              4. \u5347\u7ea7 insight-agent\uff1a

                helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --version 0.30.1\n

              \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\uff0c\u627e\u5230\u5bf9\u5e94\u7684\u96c6\u7fa4\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 Helm \u5e94\u7528 \uff0c\u627e\u5230\u5e76\u66f4\u65b0 insight-agent\u3002

              \u5728 Logging Settings \u4e2d\uff0c\u4e3a output \u9009\u62e9 kafka\uff0c\u5e76\u586b\u5199\u6b63\u786e\u7684 brokers \u5730\u5740\u3002

              \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u5347\u7ea7\u5b8c\u6210\u540e\uff0c\u9700\u624b\u52a8\u91cd\u542f insight-agent-fluent-bit \u7ec4\u4ef6\u3002

              "},{"location":"end-user/insight/quickstart/install/big-log-and-trace.html#_12","title":"\u5f00\u542f\u5927\u94fe\u8def","text":"

              \u6709\u4ee5\u4e0b\u51e0\u79cd\u65b9\u5f0f\u5f00\u542f\u6216\u5347\u7ea7\u81f3\u5927\u94fe\u8def\u6a21\u5f0f\uff1a

              \u5728 helm upgrade \u547d\u4ee4\u4e2d\u4f7f\u7528 --set\u4fee\u6539 YAML \u540e\u8fd0\u884c helm upgrade\u5bb9\u5668\u7ba1\u7406 UI \u5347\u7ea7

              \u5148\u8fd0\u884c\u4ee5\u4e0b insight \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

              helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --set global.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.kafka.enabled=true \\\n  --set global.tracing.kafkaReceiver.enabled=true \\\n  --version 0.30.1\n

              \u7136\u540e\u8fd0\u884c\u4ee5\u4e0b insight-agent \u5347\u7ea7\u547d\u4ee4\uff0c\u6ce8\u610f kafka brokers \u5730\u5740\u9700\u6b63\u786e\uff1a

              helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --set global.exporters.trace.kafka.brokers=\"10.6.216.111:30592\" \\\n  --set global.exporters.trace.output=kafka \\\n  --version 0.30.1\n

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539 YAMl \u540e\u8fd0\u884c helm upgrade \u547d\u4ee4\uff1a

              1. \u4fee\u6539 insight.yaml

                insight.yaml
                global:\n  ...\n  kafka:\n    brokers: 10.6.216.111:30592\n    enabled: true\n...\ntracing:\n  ...\n  kafkaReceiver:\n    enabled: true\n
              2. \u5347\u7ea7 insight \u7ec4\u4ef6\uff1a

                helm upgrade insight insight-release/insight \\\n  -n insight-system \\\n  -f ./insight.yaml \\\n  --version 0.30.1\n
              3. \u4fee\u6539 insight-agent.yaml

                insight-agent.yaml
                global:\n  ...\n  exporters:\n    ...\n    trace:\n      ...\n      kafka:\n        brokers: 10.6.216.111:30592\n      output: kafka\n
              4. \u5347\u7ea7 insight-agent\uff1a

                helm upgrade insight-agent insight-release/insight-agent \\\n  -n insight-system \\\n  -f ./insight-agent.yaml \\\n  --version 0.30.1\n

              \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\uff0c\u627e\u5230\u5bf9\u5e94\u7684\u96c6\u7fa4\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 Helm \u5e94\u7528 \uff0c\u627e\u5230\u5e76\u66f4\u65b0 insight-agent\u3002

              \u5728 Trace Settings \u4e2d\uff0c\u4e3a output \u9009\u62e9 kafka\uff0c\u5e76\u586b\u5199\u6b63\u786e\u7684 brokers \u5730\u5740\u3002

              \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u5347\u7ea7\u5b8c\u6210\u540e\uff0c\u9700\u624b\u52a8 \u91cd\u542f insight-agent-opentelemetry-collector \u548c insight-opentelemetry-collector \u7ec4\u4ef6\u3002

              "},{"location":"end-user/insight/quickstart/install/component-scheduling.html","title":"\u81ea\u5b9a\u4e49 Insight \u7ec4\u4ef6\u8c03\u5ea6\u7b56\u7565","text":"

              \u5f53\u90e8\u7f72\u53ef\u89c2\u6d4b\u5e73\u53f0 Insight \u5230 Kubernetes \u73af\u5883\u65f6\uff0c\u6b63\u786e\u7684\u8d44\u6e90\u7ba1\u7406\u548c\u4f18\u5316\u81f3\u5173\u91cd\u8981\u3002 Insight \u5305\u542b\u591a\u4e2a\u6838\u5fc3\u7ec4\u4ef6\uff0c\u5982 Prometheus\u3001OpenTelemetry\u3001FluentBit\u3001Vector\u3001Elasticsearch \u7b49\uff0c \u8fd9\u4e9b\u7ec4\u4ef6\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u56e0\u4e3a\u8d44\u6e90\u5360\u7528\u95ee\u9898\u5bf9\u96c6\u7fa4\u5185\u5176\u4ed6 Pod \u7684\u6027\u80fd\u4ea7\u751f\u8d1f\u9762\u5f71\u54cd\u3002 \u4e3a\u4e86\u6709\u6548\u5730\u7ba1\u7406\u8d44\u6e90\u5e76\u4f18\u5316\u96c6\u7fa4\u7684\u8fd0\u884c\uff0c\u8282\u70b9\u4eb2\u548c\u6027\u6210\u4e3a\u4e00\u9879\u91cd\u8981\u7684\u914d\u7f6e\u9009\u9879\u3002

              \u672c\u6587\u5c06\u91cd\u70b9\u63a2\u8ba8\u5982\u4f55\u901a\u8fc7\u6c61\u70b9\u548c\u8282\u70b9\u4eb2\u548c\u6027\u7684\u914d\u7f6e\u7b56\u7565\uff0c\u4f7f\u5f97\u6bcf\u4e2a\u7ec4\u4ef6\u80fd\u591f\u5728\u9002\u5f53\u7684\u8282\u70b9\u4e0a\u8fd0\u884c\uff0c \u5e76\u907f\u514d\u8d44\u6e90\u7ade\u4e89\u6216\u4e89\u7528\uff0c\u4ece\u800c\u786e\u4fdd\u6574\u4e2a Kubernetes \u96c6\u7fa4\u7684\u7a33\u5b9a\u6027\u548c\u9ad8\u6548\u6027\u3002

              "},{"location":"end-user/insight/quickstart/install/component-scheduling.html#insight_1","title":"\u901a\u8fc7\u6c61\u70b9\u4e3a Insight \u914d\u7f6e\u4e13\u6709\u8282\u70b9","text":"

              \u7531\u4e8e Insight Agent \u5305\u542b\u4e86 DaemonSet \u7ec4\u4ef6\uff0c\u6240\u4ee5\u672c\u8282\u6240\u8ff0\u7684\u914d\u7f6e\u65b9\u5f0f\u662f\u8ba9\u9664\u4e86 Insight DameonSet \u4e4b\u5916\u7684\u5176\u4f59\u7ec4\u4ef6\u5747\u8fd0\u884c\u5728\u4e13\u6709\u8282\u70b9\u4e0a\u3002

              \u8be5\u65b9\u5f0f\u662f\u901a\u8fc7\u4e3a\u4e13\u6709\u8282\u70b9\u6dfb\u52a0\u6c61\u70b9\uff08taint\uff09\uff0c\u5e76\u914d\u5408\u6c61\u70b9\u5bb9\u5fcd\u5ea6\uff08tolerations\uff09\u6765\u5b9e\u73b0\u7684\u3002 \u66f4\u591a\u7ec6\u8282\u53ef\u4ee5\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u3002

              \u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u547d\u4ee4\u4e3a\u8282\u70b9\u6dfb\u52a0\u53ca\u79fb\u9664\u6c61\u70b9\uff1a

              # \u6dfb\u52a0\u6c61\u70b9\nkubectl taint nodes worker1 node.daocloud.io=insight-only:NoSchedule\n\n# \u79fb\u9664\u6c61\u70b9\nkubectl taint nodes worker1 node.daocloud.io:NoSchedule-\n

              \u6709\u4ee5\u4e0b\u4e24\u79cd\u9014\u5f84\u8ba9 Insight \u7ec4\u4ef6\u8c03\u5ea6\u81f3\u4e13\u6709\u8282\u70b9\uff1a

              "},{"location":"end-user/insight/quickstart/install/component-scheduling.html#1","title":"1. \u4e3a\u6bcf\u4e2a\u7ec4\u4ef6\u6dfb\u52a0\u6c61\u70b9\u5bb9\u5fcd\u5ea6","text":"

              \u9488\u5bf9 insight-server \u548c insight-agent \u4e24\u4e2a Chart \u5206\u522b\u8fdb\u884c\u914d\u7f6e\uff1a

              insight-server Chart \u914d\u7f6einsight-agent Chart \u914d\u7f6e
              server:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nui:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nrunbook:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\n# mysql:\nvictoria-metrics-k8s-stack:\n  victoria-metrics-operator:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n  vmcluster:\n    spec:\n      vmstorage:\n        tolerations:\n          - key: \"node.daocloud.io\"\n            operator: \"Equal\"\n            value: \"insight-only\"\n            effect: \"NoSchedule\"\n      vmselect:\n        tolerations:\n          - key: \"node.daocloud.io\"\n            operator: \"Equal\"\n            value: \"insight-only\"\n            effect: \"NoSchedule\"\n      vminsert:\n        tolerations:\n          - key: \"node.daocloud.io\"\n            operator: \"Equal\"\n            value: \"insight-only\"\n            effect: \"NoSchedule\"\n  vmalert:\n    spec:\n      tolerations:\n        - key: \"node.daocloud.io\"\n          operator: \"Equal\"\n          value: \"insight-only\"\n          effect: \"NoSchedule\"\n  alertmanager:\n    spec:\n      tolerations:\n        - key: \"node.daocloud.io\"\n          operator: \"Equal\"\n          value: \"insight-only\"\n          effect: \"NoSchedule\"\n\njaeger:\n  collector:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n  query:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n\nopentelemetry-collector-aggregator:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nopentelemetry-collector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\ngrafana-operator:\n  operator:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n  grafana:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\nkibana:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nelastic-alert:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n\nvector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\n
              kube-prometheus-stack:\n  prometheus:\n    prometheusSpec:\n      tolerations:\n        - key: \"node.daocloud.io\"\n          operator: \"Equal\"\n          value: \"insight-only\"\n          effect: \"NoSchedule\"\n  prometheus-node-exporter:\n    tolerations:\n      - effect: NoSchedule\n        operator: Exists\n  prometheusOperator:\n    tolerations:\n      - key: \"node.daocloud.io\"\n        operator: \"Equal\"\n        value: \"insight-only\"\n        effect: \"NoSchedule\"\n\nkube-state-metrics:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nopentelemetry-operator:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nopentelemetry-collector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\ntailing-sidecar-operator:\n  operator:\n    tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nopentelemetry-kubernetes-collector:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\nprometheus-blackbox-exporter:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\"\netcd-exporter:\n  tolerations:\n    - key: \"node.daocloud.io\"\n      operator: \"Equal\"\n      value: \"insight-only\"\n      effect: \"NoSchedule\" \n
              "},{"location":"end-user/insight/quickstart/install/component-scheduling.html#2","title":"2. \u901a\u8fc7\u547d\u540d\u7a7a\u95f4\u7ea7\u522b\u914d\u7f6e","text":"

              \u8ba9 insight-system \u547d\u540d\u7a7a\u95f4\u7684 Pod \u90fd\u5bb9\u5fcd node.daocloud.io=insight-only \u6c61\u70b9\u3002

              1. \u8c03\u6574 apiserver \u7684\u914d\u7f6e\u6587\u4ef6 /etc/kubernetes/manifests/kube-apiserver.yaml\uff0c\u653e\u5f00 PodTolerationRestriction,PodNodeSelector, \u53c2\u8003\u4e0b\u56fe\uff1a

              2. \u7ed9 insight-system \u547d\u540d\u7a7a\u95f4\u589e\u52a0\u6ce8\u89e3\uff1a

                apiVersion: v1\nkind: Namespace\nmetadata:\n  name: insight-system\n  annotations:\n    scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Equal\", \"effect\": \"NoSchedule\", \"key\": \"node.daocloud.io\", \"value\": \"insight-only\"}]'\n

              \u91cd\u542f insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u9762\u7684\u7ec4\u4ef6\u5373\u53ef\u6b63\u5e38\u5bb9\u5fcd insight-system \u4e0b\u7684 Pod \u8c03\u5ea6\u3002

              "},{"location":"end-user/insight/quickstart/install/component-scheduling.html#label","title":"\u4e3a\u8282\u70b9\u6dfb\u52a0 Label \u548c\u8282\u70b9\u4eb2\u548c\u6027\u6765\u7ba1\u7406\u7ec4\u4ef6\u8c03\u5ea6","text":"

              Info

              \u8282\u70b9\u4eb2\u548c\u6027\u6982\u5ff5\u4e0a\u7c7b\u4f3c\u4e8e nodeSelector\uff0c\u5b83\u4f7f\u4f60\u53ef\u4ee5\u6839\u636e\u8282\u70b9\u4e0a\u7684 \u6807\u7b7e(label) \u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002 \u8282\u70b9\u4eb2\u548c\u6027\u6709\u4e24\u79cd\uff1a

              1. requiredDuringSchedulingIgnoredDuringExecution\uff1a\u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector\uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002
              2. preferredDuringSchedulingIgnoredDuringExecution\uff1a\u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002

              \u66f4\u8fc7\u7ec6\u8282\u8bf7\u53c2\u8003 kubernetes \u5b98\u65b9\u6587\u6863\u3002

              \u4e3a\u4e86\u5b9e\u73b0\u4e0d\u540c\u7528\u6237\u5bf9 Insight \u7ec4\u4ef6\u8c03\u5ea6\u7684\u7075\u6d3b\u9700\u6c42\uff0cInsight \u5206\u522b\u63d0\u4f9b\u4e86\u8f83\u4e3a\u7ec6\u7c92\u5ea6\u7684 Label \u6765\u5b9e\u73b0\u4e0d\u540c\u7ec4\u4ef6\u7684\u8c03\u5ea6\u7b56\u7565\uff0c\u4ee5\u4e0b\u662f\u6807\u7b7e\u4e0e\u7ec4\u4ef6\u7684\u5173\u7cfb\u8bf4\u660e\uff1a

              \u6807\u7b7e Key \u6807\u7b7e Value \u8bf4\u660e node.daocloud.io/insight-any \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u4ee3\u8868 Insight \u6240\u6709\u7ec4\u4ef6\u4f18\u5148\u8003\u8651\u5e26\u4e86\u8be5\u6807\u7b7e\u7684\u8282\u70b9 node.daocloud.io/insight-prometheus \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 Prometheus \u7ec4\u4ef6 node.daocloud.io/insight-vmstorage \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 VictoriaMetrics vmstorage \u7ec4\u4ef6 node.daocloud.io/insight-vector \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 Vector \u7ec4\u4ef6 node.daocloud.io/insight-otel-col \u4efb\u610f\u503c\uff0c\u63a8\u8350\u7528 true \u7279\u6307 OpenTelemetry \u7ec4\u4ef6

              \u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u547d\u4ee4\u4e3a\u8282\u70b9\u6dfb\u52a0\u53ca\u79fb\u9664\u6807\u7b7e\uff1a

              # \u4e3a node8 \u6dfb\u52a0\u6807\u7b7e\uff0c\u5148\u5c06 insight-prometheus \u8c03\u5ea6\u5230 node8 \nkubectl label nodes node8 node.daocloud.io/insight-prometheus=true\n\n# \u79fb\u9664 node8 \u7684 node.daocloud.io/insight-prometheus \u6807\u7b7e\nkubectl label nodes node8 node.daocloud.io/insight-prometheus-\n

              \u4ee5\u4e0b\u662f insight-prometheus \u7ec4\u4ef6\u5728\u90e8\u7f72\u65f6\u9ed8\u8ba4\u7684\u4eb2\u548c\u6027\u504f\u597d\uff1a

              affinity:\n  nodeAffinity:\n    preferredDuringSchedulingIgnoredDuringExecution:\n    - preference:\n        matchExpressions:\n        - key: node-role.kubernetes.io/control-plane\n          operator: DoesNotExist\n      weight: 1\n    - preference:\n        matchExpressions:\n        - key: node.daocloud.io/insight-prometheus # (1)!\n          operator: Exists\n      weight: 2\n    - preference:\n        matchExpressions:\n        - key: node.daocloud.io/insight-any\n          operator: Exists\n      weight: 3\n    podAntiAffinity:\n      preferredDuringSchedulingIgnoredDuringExecution:\n        - weight: 1\n          podAffinityTerm:\n            topologyKey: kubernetes.io/hostname\n            labelSelector:\n              matchExpressions:\n                - key: app.kubernetes.io/instance\n                  operator: In\n                  values:\n                    - insight-agent-kube-prometh-prometheus\n
              1. \u5148\u5c06 insight-prometheus \u8c03\u5ea6\u5230\u5e26\u6709 node.daocloud.io/insight-prometheus \u6807\u7b7e\u7684\u8282\u70b9
              "},{"location":"end-user/insight/quickstart/install/gethosturl.html","title":"\u83b7\u53d6\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u6570\u636e\u5b58\u50a8\u5730\u5740","text":"

              \u53ef\u89c2\u6d4b\u6027\u662f\u591a\u96c6\u7fa4\u7edf\u4e00\u89c2\u6d4b\u7684\u4ea7\u54c1\uff0c\u4e3a\u5b9e\u73b0\u5bf9\u591a\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u7684\u7edf\u4e00\u5b58\u50a8\u3001\u67e5\u8be2\uff0c \u5b50\u96c6\u7fa4\u9700\u8981\u5c06\u91c7\u96c6\u7684\u89c2\u6d4b\u6570\u636e\u4e0a\u62a5\u7ed9\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u8fdb\u884c\u7edf\u4e00\u5b58\u50a8\u3002 \u672c\u6587\u63d0\u4f9b\u4e86\u5728\u5b89\u88c5\u91c7\u96c6\u7ec4\u4ef6 insight-agent \u65f6\u5fc5\u586b\u7684\u5b58\u50a8\u7ec4\u4ef6\u7684\u5730\u5740\u3002

              "},{"location":"end-user/insight/quickstart/install/gethosturl.html#insight-agent","title":"\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5b89\u88c5 insight-agent","text":"

              \u5982\u679c\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5b89\u88c5 insight-agent\uff0c\u63a8\u8350\u901a\u8fc7\u57df\u540d\u6765\u8bbf\u95ee\u96c6\u7fa4\uff1a

              export vminsert_host=\"vminsert-insight-victoria-metrics-k8s-stack.insight-system.svc.cluster.local\" # (1)!\nexport es_host=\"insight-es-master.insight-system.svc.cluster.local\" # (2)!\nexport otel_col_host=\"insight-opentelemetry-collector.insight-system.svc.cluster.local\" # (3)!\n
              "},{"location":"end-user/insight/quickstart/install/gethosturl.html#insight-agent_1","title":"\u5728\u5176\u4ed6\u96c6\u7fa4\u5b89\u88c5 insight-agent","text":""},{"location":"end-user/insight/quickstart/install/gethosturl.html#insight-server","title":"\u901a\u8fc7 Insight Server \u63d0\u4f9b\u7684\u63a5\u53e3\u83b7\u53d6\u5730\u5740","text":"
              1. \u7ba1\u7406\u96c6\u7fa4\u4f7f\u7528\u9ed8\u8ba4\u7684 LoadBalancer \u65b9\u5f0f\u66b4\u9732

                \u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

                export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})\ncurl --location --request POST 'http://'\"${INSIGHT_SERVER_IP}\"'/apis/insight.io/v1alpha1/agentinstallparam'\n

                Note

                \u8bf7\u66ff\u6362\u547d\u4ee4\u4e2d\u7684 ${INSIGHT_SERVER_IP} \u53c2\u6570\u3002

                \u83b7\u5f97\u5982\u4e0b\u8fd4\u56de\u503c\uff1a

                {\n  \"values\": {\n    \"global\": {\n      \"exporters\": {\n        \"logging\": {\n          \"host\": \"10.6.182.32\"\n        },\n        \"metric\": {\n          \"host\": \"10.6.182.32\"\n        },\n        \"auditLog\": {\n          \"host\": \"10.6.182.32\"\n        },\n        \"trace\": {\n          \"host\": \"10.6.182.32\"\n        }\n      }\n    },\n    \"opentelemetry-operator\": {\n      \"enabled\": true\n    },\n    \"opentelemetry-collector\": {\n      \"enabled\": true\n    }\n  }\n}\n
                • global.exporters.logging.host \u662f\u65e5\u5fd7\u670d\u52a1\u5730\u5740\uff0c\u4e0d\u9700\u8981\u518d\u8bbe\u7f6e\u5bf9\u5e94\u670d\u52a1\u7684\u7aef\u53e3\uff0c\u90fd\u4f1a\u4f7f\u7528\u76f8\u5e94\u9ed8\u8ba4\u503c
                • global.exporters.metric.host \u662f\u6307\u6807\u670d\u52a1\u5730\u5740
                • global.exporters.trace.host \u662f\u94fe\u8def\u670d\u52a1\u5730\u5740
                • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u5730\u5740\uff08\u548c\u94fe\u8def\u4f7f\u7528\u7684\u540c\u4e00\u4e2a\u670d\u52a1\u4e0d\u540c\u7aef\u53e3\uff09
              2. \u7ba1\u7406\u96c6\u7fa4\u7981\u7528 LoadBalancer

                \u8c03\u7528\u63a5\u53e3\u65f6\u9700\u8981\u989d\u5916\u4f20\u9012\u96c6\u7fa4\u4e2d\u4efb\u610f\u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u8282\u70b9 IP\uff0c\u4f1a\u4f7f\u7528\u8be5 IP \u62fc\u63a5\u51fa\u5bf9\u5e94\u670d\u52a1\u7684\u5b8c\u6574\u8bbf\u95ee\u5730\u5740\u3002

                export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})\ncurl --location --request POST 'http://'\"${INSIGHT_SERVER_IP}\"'/apis/insight.io/v1alpha1/agentinstallparam' --data '{\"extra\": {\"EXPORTER_EXTERNAL_IP\": \"10.5.14.51\"}}'\n

                \u5c06\u83b7\u5f97\u5982\u4e0b\u7684\u8fd4\u56de\u503c\uff1a

                {\n  \"values\": {\n    \"global\": {\n      \"exporters\": {\n        \"logging\": {\n          \"scheme\": \"https\",\n          \"host\": \"10.5.14.51\",\n          \"port\": 32007,\n          \"user\": \"elastic\",\n          \"password\": \"j8V1oVoM1184HvQ1F3C8Pom2\"\n        },\n        \"metric\": {\n          \"host\": \"10.5.14.51\",\n          \"port\": 30683\n        },\n        \"auditLog\": {\n          \"host\": \"10.5.14.51\",\n          \"port\": 30884\n        },\n        \"trace\": {\n          \"host\": \"10.5.14.51\",\n          \"port\": 30274\n        }\n      }\n    },\n    \"opentelemetry-operator\": {\n      \"enabled\": true\n    },\n    \"opentelemetry-collector\": {\n      \"enabled\": true\n    }\n  }\n}\n
                • global.exporters.logging.host \u662f\u65e5\u5fd7\u670d\u52a1\u5730\u5740
                • global.exporters.logging.port \u662f\u65e5\u5fd7\u670d\u52a1\u66b4\u9732\u7684 NodePort
                • global.exporters.metric.host \u662f\u6307\u6807\u670d\u52a1\u5730\u5740
                • global.exporters.metric.port \u662f\u6307\u6807\u670d\u52a1\u66b4\u9732\u7684 NodePort
                • global.exporters.trace.host \u662f\u94fe\u8def\u670d\u52a1\u5730\u5740
                • global.exporters.trace.port \u662f\u94fe\u8def\u670d\u52a1\u66b4\u9732\u7684 NodePort
                • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u5730\u5740\uff08\u548c\u94fe\u8def\u4f7f\u7528\u7684\u540c\u4e00\u4e2a\u670d\u52a1\u4e0d\u540c\u7aef\u53e3\uff09
                • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u66b4\u9732\u7684 NodePort
              "},{"location":"end-user/insight/quickstart/install/gethosturl.html#loadbalancer","title":"\u901a\u8fc7 LoadBalancer \u8fde\u63a5","text":"
              1. \u82e5\u96c6\u7fa4\u4e2d\u5f00\u542f LoadBalancer \u4e14\u4e3a Insight \u8bbe\u7f6e\u4e86 VIP \u65f6\uff0c\u60a8\u4e5f\u53ef\u4ee5\u624b\u52a8\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6 vminsert \u4ee5\u53ca opentelemetry-collector \u7684\u5730\u5740\u4fe1\u606f\uff1a

                $ kubectl get service -n insight-system | grep lb\nlb-insight-opentelemetry-collector               LoadBalancer   10.233.23.12    <pending>     4317:31286/TCP,8006:31351/TCP  24d\nlb-vminsert-insight-victoria-metrics-k8s-stack   LoadBalancer   10.233.63.67    <pending>     8480:31629/TCP                 24d\n
                • lb-vminsert-insight-victoria-metrics-k8s-stack \u662f\u6307\u6807\u670d\u52a1\u7684\u5730\u5740
                • lb-insight-opentelemetry-collector \u662f\u94fe\u8def\u670d\u52a1\u7684\u5730\u5740
              2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6 elasticsearch \u5730\u5740\u4fe1\u606f\uff1a

                $ kubectl get service -n mcamel-system | grep es\nmcamel-common-es-cluster-masters-es-http               NodePort    10.233.16.120   <none>        9200:30465/TCP               47d\n

                mcamel-common-es-cluster-masters-es-http \u662f\u65e5\u5fd7\u670d\u52a1\u7684\u5730\u5740

              "},{"location":"end-user/insight/quickstart/install/gethosturl.html#nodeport","title":"\u901a\u8fc7 NodePort \u8fde\u63a5","text":"

              \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7981\u7528 LB \u7279\u6027

              \u5728\u8be5\u60c5\u51b5\u4e0b\uff0c\u9ed8\u8ba4\u4e0d\u4f1a\u521b\u5efa\u4e0a\u8ff0\u7684 LoadBalancer \u8d44\u6e90\uff0c\u5bf9\u5e94\u670d\u52a1\u540d\u4e3a\uff1a

              • vminsert-insight-victoria-metrics-k8s-stack\uff08\u6307\u6807\u670d\u52a1\uff09
              • common-es\uff08\u65e5\u5fd7\u670d\u52a1\uff09
              • insight-opentelemetry-collector\uff08\u94fe\u8def\u670d\u52a1\uff09

              \u4e0a\u9762\u4e24\u79cd\u60c5\u51b5\u83b7\u53d6\u5230\u5bf9\u5e94\u670d\u52a1\u7684\u5bf9\u5e94\u7aef\u53e3\u4fe1\u606f\u540e\uff0c\u8fdb\u884c\u5982\u4e0b\u8bbe\u7f6e\uff1a

              --set global.exporters.logging.host=  # (1)!\n--set global.exporters.logging.port=  # (2)!\n--set global.exporters.metric.host=   # (3)!\n--set global.exporters.metric.port=   # (4)!\n--set global.exporters.trace.host=    # (5)!\n--set global.exporters.trace.port=    # (6)!\n--set global.exporters.auditLog.host= # (7)!\n
              1. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
              2. \u65e5\u5fd7\u670d\u52a1 9200 \u7aef\u53e3\u5bf9\u5e94\u7684 NodePort
              3. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
              4. \u6307\u6807\u670d\u52a1 8480 \u7aef\u53e3\u5bf9\u5e94\u7684 NodePort
              5. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
              6. \u94fe\u8def\u670d\u52a1 4317 \u7aef\u53e3\u5bf9\u5e94\u7684 NodePort
              7. \u5916\u90e8\u53ef\u8bbf\u95ee\u7684\u7ba1\u7406\u96c6\u7fa4 NodeIP
              "},{"location":"end-user/insight/quickstart/install/helm-installagent.html","title":"\u901a\u8fc7 Helm \u90e8\u7f72 Insight Agent","text":"

              \u672c\u6587\u63cf\u8ff0\u4e86\u5728\u547d\u4ee4\u884c\u4e2d\u901a\u8fc7 Helm \u547d\u4ee4\u5b89\u88c5 Insight Agent \u793e\u533a\u7248\u7684\u64cd\u4f5c\u6b65\u9aa4\u3002

              "},{"location":"end-user/insight/quickstart/install/helm-installagent.html#insight-agent","title":"\u5b89\u88c5 Insight Agent","text":"
              1. \u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u6dfb\u52a0\u955c\u50cf\u4ed3\u5e93\u7684\u5730\u5740

                helm repo add insight https://release.daocloud.io/chartrepo/insight\nhelm repo upgrade\nhelm search repo  insight/insight-agent --versions\n
              2. \u5b89\u88c5 Insight Agent \u9700\u8981\u786e\u4fdd\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u7684 Insight Server \u6b63\u5e38\u8fd0\u884c\uff0c\u6267\u884c\u4ee5\u4e0b\u5b89\u88c5\u547d\u4ee4\u5b89\u88c5 Insight Agent \u793e\u533a\u7248\uff0c\u8be5\u914d\u7f6e\u4e0d\u542f\u7528 Tracing \u529f\u80fd\uff1a

                helm upgrade --install --create-namespace --cleanup-on-fail \\\n    --version ${version} \\      # \u8bf7\u6307\u5b9a\u90e8\u7f72\u7248\u672c\n    insight-agent  insight/insight-agent \\\n    --set global.exporters.logging.elasticsearch.host=10.10.10.x \\    # \u8bf7\u66ff\u6362\u201c10.10.10.x\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u7684\u5730\u5740\n    --set global.exporters.logging.elasticsearch.port=32517 \\     # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u66b4\u9732\u7684\u7aef\u53e3\n    --set global.exporters.logging.elasticsearch.user=elastic \\     # \u8bf7\u66ff\u6362\u201celastic\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u7684\u7528\u6237\u540d\n    --set global.exporters.logging.elasticsearch.password=dangerous \\  # \u8bf7\u66ff\u6362\u201cdangerous\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u6216\u5916\u7f6e\u7684 Elasticsearch \u7684\u5bc6\u7801\n    --set global.exporters.metric.host=${vminsert_address} \\    # \u8bf7\u66ff\u6362\u201c10.10.10.x\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d vminsert \u7684\u5730\u5740\n    --set global.exporters.metric.port=${vminsert_port} \\    # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d vminsert \u7684\u5730\u5740\n    --set global.exporters.auditLog.host=${opentelemetry-collector address} \\     # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d opentelemetry-collector \u7684\u7aef\u53e3\n    --set global.exporters.auditLog.port=${otel_col_auditlog_port}\\   # \u8bf7\u66ff\u6362\u201c32517\" \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d opentelemetry-collector \u5bb9\u5668\u7aef\u53e3\u4e3a 8006 \u7684 service \u5bf9\u5916\u8bbf\u95ee\u7684\u5730\u5740\n    -n insight-system\n

                Info

                \u53ef\u53c2\u8003 \u5982\u4f55\u83b7\u53d6\u8fde\u63a5\u5730\u5740 \u83b7\u53d6\u5730\u5740\u4fe1\u606f\u3002

              3. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u5b89\u88c5\u72b6\u6001\uff1a

                helm list -A\nkubectl get pods -n insight-system\n
              "},{"location":"end-user/insight/quickstart/install/helm-installagent.html#_1","title":"\u5982\u4f55\u83b7\u53d6\u8fde\u63a5\u5730\u5740","text":""},{"location":"end-user/insight/quickstart/install/helm-installagent.html#insight-agent_1","title":"\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5b89\u88c5 Insight Agent","text":"

              \u5982\u679c Agent \u662f\u5b89\u88c5\u5728\u7ba1\u7406\u96c6\u7fa4\uff0c\u63a8\u8350\u901a\u8fc7\u57df\u540d\u6765\u8bbf\u95ee\u96c6\u7fa4\uff1a

              export vminsert_host=\"vminsert-insight-victoria-metrics-k8s-stack.insight-system.svc.cluster.local\" # \u6307\u6807\nexport es_host=\"insight-es-master.insight-system.svc.cluster.local\" # \u65e5\u5fd7\nexport otel_col_host=\"insight-opentelemetry-collector.insight-system.svc.cluster.local\" # \u94fe\u8def\n
              "},{"location":"end-user/insight/quickstart/install/helm-installagent.html#insight-agent_2","title":"\u5728\u5de5\u4f5c\u96c6\u7fa4\u5b89\u88c5 Insight Agent","text":"\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528\u9ed8\u8ba4\u7684 LoadBalancer\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\u64cd\u4f5c\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528 Nodeport

              \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528\u9ed8\u8ba4\u7684 LoadBalancer \u65b9\u5f0f\u66b4\u9732\u670d\u52a1\u65f6\uff0c\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

              export INSIGHT_SERVER_IP=$(kubectl get service insight-server -n insight-system --output=jsonpath={.spec.clusterIP})\ncurl --location --request POST 'http://'\"${INSIGHT_SERVER_IP}\"'/apis/insight.io/v1alpha1/agentinstallparam'\n

              \u5c06\u83b7\u5f97\u5982\u4e0b\u7684\u8fd4\u56de\u503c\uff1a

              {\"global\":{\"exporters\":{\"logging\":{\"output\":\"elasticsearch\",\"elasticsearch\":{\"host\":\"10.6.182.32\"},\"kafka\":{},\"host\":\"10.6.182.32\"},\"metric\":{\"host\":\"10.6.182.32\"},\"auditLog\":    {\"host\":\"10.6.182.32\"}}},\"opentelemetry-operator\":{\"enabled\":true},\"opentelemetry-collector\":{\"enabled\":true}}\n

              \u5176\u4e2d\uff1a

              • global.exporters.logging.elasticsearch.host \u662f\u65e5\u5fd7\u670d\u52a1\u5730\u5740\u3010\u4e0d\u9700\u8981\u518d\u8bbe\u7f6e\u5bf9\u5e94\u670d\u52a1\u7684\u7aef\u53e3\uff0c\u90fd\u4f1a\u4f7f\u7528\u76f8\u5e94\u9ed8\u8ba4\u503c\u3011\uff1b
              • global.exporters.metric.host \u662f\u6307\u6807\u670d\u52a1\u5730\u5740\uff1b
              • global.exporters.trace.host \u662f\u94fe\u8def\u670d\u52a1\u5730\u5740\uff1b
              • global.exporters.auditLog.host \u662f\u5ba1\u8ba1\u65e5\u5fd7\u670d\u52a1\u5730\u5740 (\u548c\u94fe\u8def\u4f7f\u7528\u7684\u540c\u4e00\u4e2a\u670d\u52a1\u4e0d\u540c\u7aef\u53e3)\uff1b

              \u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

              kubectl get service -n insight-system | grep lb\nkubectl get service -n mcamel-system | grep es\n

              \u5176\u4e2d\uff1a

              • lb-vminsert-insight-victoria-metrics-k8s-stack \u662f\u6307\u6807\u670d\u52a1\u7684\u5730\u5740\uff1b
              • lb-insight-opentelemetry-collector \u662f\u94fe\u8def\u670d\u52a1\u7684\u5730\u5740;
              • mcamel-common-es-cluster-masters-es-http \u662f\u65e5\u5fd7\u670d\u52a1\u7684\u5730\u5740;

              \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4f7f\u7528 Nodeport \u65b9\u5f0f\u66b4\u9732\u670d\u52a1\u65f6\uff0c\u767b\u5f55\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

              kubectl get service -n insight-system\nkubectl get service -n mcamel-system\n

              \u5176\u4e2d\uff1a

              • vminsert-insight-victoria-metrics-k8s-stack \u662f\u6307\u6807\u670d\u52a1\u7684\u5730\u5740\uff1b
              • insight-opentelemetry-collector \u662f\u94fe\u8def\u670d\u52a1\u7684\u5730\u5740;
              • mcamel-common-es-cluster-masters-es-http \u662f\u65e5\u5fd7\u670d\u52a1\u7684\u5730\u5740;
              "},{"location":"end-user/insight/quickstart/install/helm-installagent.html#insight-agent_3","title":"\u5347\u7ea7 Insight Agent","text":"
              1. \u767b\u5f55\u76ee\u6807\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u5907\u4efd --set \u53c2\u6570\u3002

                helm get values insight-agent -n insight-system -o yaml > insight-agent.yaml\n
              2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u66f4\u65b0\u4ed3\u5e93\u3002

                helm repo upgrade\n
              3. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5347\u7ea7\u3002

                helm upgrade insight-agent insight/insight-agent \\\n-n insight-system \\\n-f ./insight-agent.yaml \\\n--version ${version}   # \u6307\u5b9a\u5347\u7ea7\u7248\u672c\n
              4. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u5b89\u88c5\u72b6\u6001\uff1a

                kubectl get pods -n insight-system\n
              "},{"location":"end-user/insight/quickstart/install/helm-installagent.html#insight-agent_4","title":"\u5378\u8f7d Insight Agent","text":"
              helm uninstall insight-agent -n insight-system --timeout 10m\n
              "},{"location":"end-user/insight/quickstart/install/install-agent.html","title":"\u5728\u7ebf\u5b89\u88c5 insight-agent","text":"

              insight-agent \u662f\u96c6\u7fa4\u89c2\u6d4b\u6570\u636e\u91c7\u96c6\u7684\u63d2\u4ef6\uff0c\u652f\u6301\u5bf9\u6307\u6807\u3001\u94fe\u8def\u3001\u65e5\u5fd7\u6570\u636e\u7684\u7edf\u4e00\u89c2\u6d4b\u3002\u672c\u6587\u63cf\u8ff0\u4e86\u5982\u4f55\u5728\u5728\u7ebf\u73af\u5883\u4e2d\u4e3a\u63a5\u5165\u96c6\u7fa4\u5b89\u88c5 insight-agent\u3002

              "},{"location":"end-user/insight/quickstart/install/install-agent.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u96c6\u7fa4\u5df2\u6210\u529f\u63a5\u5165 \u5bb9\u5668\u7ba1\u7406 \u6a21\u5757\u3002\u5982\u4f55\u63a5\u5165\u96c6\u7fa4\uff0c\u8bf7\u53c2\u8003\uff1a\u63a5\u5165\u96c6\u7fa4
              "},{"location":"end-user/insight/quickstart/install/install-agent.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \u6a21\u5757\uff0c\u5728 \u96c6\u7fa4\u5217\u8868 \u4e2d\u627e\u5230\u8981\u5b89\u88c5 insight-agent \u7684\u96c6\u7fa4\u540d\u79f0\u3002

              2. \u9009\u62e9 \u7acb\u5373\u5b89\u88c5 \u8df3\u8f6c\uff0c\u6216\u70b9\u51fb\u96c6\u7fa4\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u5185\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u641c\u7d22\u6846\u67e5\u8be2 insight-agent \uff0c\u70b9\u51fb\u8be5\u5361\u7247\u8fdb\u5165\u8be6\u60c5\u3002

              3. \u67e5\u770b insight-agent \u7684\u5b89\u88c5\u9875\u9762\uff0c\u70b9\u51fb \u5b89\u88c5 \u8fdb\u5165\u4e0b\u4e00\u6b65\u3002

              4. \u9009\u62e9\u5b89\u88c5\u7684\u7248\u672c\u5e76\u5728\u4e0b\u65b9\u8868\u5355\u5206\u522b\u586b\u5199\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u5bf9\u5e94\u6570\u636e\u5b58\u50a8\u7ec4\u4ef6\u7684\u5730\u5740\uff0c\u786e\u8ba4\u586b\u5199\u7684\u4fe1\u606f\u65e0\u8bef\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                • insight-agent \u9ed8\u8ba4\u90e8\u7f72\u5728\u96c6\u7fa4\u7684 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u3002
                • \u5efa\u8bae\u5b89\u88c5\u6700\u65b0\u7248\u672c\u7684 insight-agent\u3002
                • \u7cfb\u7edf\u9ed8\u8ba4\u5df2\u586b\u5199\u6570\u636e\u4e0a\u62a5\u7684\u7ec4\u4ef6\u7684\u5730\u5740\uff0c\u4ecd\u8bf7\u60a8\u68c0\u67e5\u65e0\u8bef\u540e\u518d\u70b9\u51fb \u786e\u5b9a \u8fdb\u884c\u5b89\u88c5\u3002 \u5982\u9700\u4fee\u6539\u6570\u636e\u4e0a\u62a5\u5730\u5740\uff0c\u8bf7\u53c2\u8003\uff1a\u83b7\u53d6\u6570\u636e\u4e0a\u62a5\u5730\u5740\u3002

              5. \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de\u00a0 Helm \u5e94\u7528 \u5217\u8868\uff0c\u5f53\u5e94\u7528 insight-agent \u7684\u72b6\u6001\u4ece\u00a0 \u672a\u5c31\u7eea \u53d8\u4e3a \u5df2\u90e8\u7f72 \uff0c\u4e14\u6240\u6709\u7684\u7ec4\u4ef6\u72b6\u6001\u4e3a \u8fd0\u884c\u4e2d \u65f6\uff0c\u5219\u5b89\u88c5\u6210\u529f\u3002\u7b49\u5f85\u4e00\u6bb5\u65f6\u95f4\u540e\uff0c\u53ef\u5728 \u53ef\u89c2\u6d4b\u6027 \u6a21\u5757\u67e5\u770b\u8be5\u96c6\u7fa4\u7684\u6570\u636e\u3002

              Note

              • \u70b9\u51fb\u6700\u53f3\u4fa7\u7684 \u2507 \uff0c\u60a8\u53ef\u4ee5\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u6267\u884c\u66f4\u591a\u64cd\u4f5c\uff0c\u5982 \u66f4\u65b0 \u3001 \u67e5\u770b YAML \u548c \u5220\u9664 \u3002
              "},{"location":"end-user/insight/quickstart/install/knownissues.html","title":"\u5df2\u77e5\u95ee\u9898","text":"

              \u672c\u9875\u5217\u51fa\u4e00\u4e9b Insight Agent \u5b89\u88c5\u548c\u5378\u8f7d\u6709\u5173\u7684\u95ee\u9898\u53ca\u5176\u89e3\u51b3\u529e\u6cd5\u3002

              "},{"location":"end-user/insight/quickstart/install/knownissues.html#v0230","title":"v0.23.0","text":""},{"location":"end-user/insight/quickstart/install/knownissues.html#insight-agent","title":"Insight Agent","text":""},{"location":"end-user/insight/quickstart/install/knownissues.html#insight-agent_1","title":"Insight Agent \u5378\u8f7d\u5931\u8d25","text":"

              \u5f53\u4f60\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u5378\u8f7d Insight Agent \u65f6\u3002

              helm uninstall insight-agent -n insight-system\n

              otel-oprator \u6240\u4f7f\u7528\u7684 tls secret \u672a\u88ab\u5378\u8f7d\u6389\u3002

              otel-operator \u5b9a\u4e49\u7684\u201c\u91cd\u590d\u5229\u7528 tls secret\u201d\u7684\u903b\u8f91\u4e2d\uff0c\u4f1a\u53bb\u5224\u65ad otel-oprator \u7684 MutationConfiguration \u662f\u5426\u5b58\u5728\u5e76\u91cd\u590d\u5229\u7528 MutationConfiguration \u4e2d\u7ed1\u5b9a\u7684 CA cert\u3002\u4f46\u662f\u7531\u4e8e helm uninstall \u5df2\u5378\u8f7d MutationConfiguration\uff0c\u5bfc\u81f4\u51fa\u73b0\u7a7a\u503c\u3002

              \u7efc\u4e0a\u8bf7\u624b\u52a8\u5220\u9664\u5bf9\u5e94\u7684 secret\uff0c\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u4efb\u9009\u4e00\u79cd\u5373\u53ef\uff1a

              • \u901a\u8fc7\u547d\u4ee4\u884c\u5220\u9664\uff1a\u767b\u5f55\u76ee\u6807\u96c6\u7fa4\u7684\u63a7\u5236\u53f0\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

                kubectl -n insight-system delete secret insight-agent-opentelemetry-operator-controller-manager-service-cert\n
              • \u901a\u8fc7 UI \u5220\u9664\uff1a\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5bb9\u5668\u7ba1\u7406\uff0c\u9009\u62e9\u76ee\u6807\u96c6\u7fa4\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u8fdb\u5165\u5bc6\u94a5\uff0c\u8f93\u5165 insight-agent-opentelemetry-operator-controller-manager-service-cert\uff0c\u9009\u62e9\u5220\u9664\u3002

              "},{"location":"end-user/insight/quickstart/install/knownissues.html#v0220","title":"v0.22.0","text":""},{"location":"end-user/insight/quickstart/install/knownissues.html#insight-agent_2","title":"Insight Agent","text":""},{"location":"end-user/insight/quickstart/install/knownissues.html#insight-agent_3","title":"\u5347\u7ea7 Insight Agent \u65f6\u66f4\u65b0\u65e5\u5fd7\u6536\u96c6\u7aef\uff0c\u672a\u751f\u6548","text":"

              \u66f4\u65b0 insight-agent \u65e5\u5fd7\u914d\u7f6e\u4ece elasticsearch \u6539\u4e3a kafka \u6216\u8005\u4ece kafka \u6539\u4e3a elasticsearch\uff0c\u5b9e\u9645\u4e0a\u90fd\u672a\u751f\u6548\uff0c\u8fd8\u662f\u4f7f\u7528\u66f4\u65b0\u524d\u914d\u7f6e\u3002

              \u89e3\u51b3\u65b9\u6848 \uff1a

              \u624b\u52a8\u91cd\u542f\u96c6\u7fa4\u4e2d\u7684 fluentbit\u3002

              "},{"location":"end-user/insight/quickstart/install/knownissues.html#v0210","title":"v0.21.0","text":""},{"location":"end-user/insight/quickstart/install/knownissues.html#insight-agent_4","title":"Insight Agent","text":""},{"location":"end-user/insight/quickstart/install/knownissues.html#podmonitor-jvm","title":"PodMonitor \u91c7\u96c6\u591a\u4efd JVM \u6307\u6807\u6570\u636e","text":"
              1. \u8fd9\u4e2a\u7248\u672c\u7684 PodMonitor/insight-kubernetes-pod \u5b58\u5728\u7f3a\u9677\uff1a\u4f1a\u9519\u8bef\u5730\u521b\u5efa Job \u53bb\u91c7\u96c6\u6807\u8bb0\u4e86 insight.opentelemetry.io/metric-scrape=true \u7684 Pod \u7684\u6240\u6709 container\uff1b\u800c\u5b9e\u9645\u4e0a\u53ea\u9700\u91c7\u96c6 insight.opentelemetry.io/metric-port \u6240\u5bf9\u5e94 container \u7684\u7aef\u53e3\u3002

              2. \u56e0\u4e3a PodMonitor \u58f0\u660e\u4e4b\u540e\uff0cPromethuesOperator \u4f1a\u9884\u8bbe\u7f6e\u4e00\u4e9b\u670d\u52a1\u53d1\u73b0\u914d\u7f6e\u3002 \u518d\u8003\u8651\u5230 CRD \u7684\u517c\u5bb9\u6027\u7684\u95ee\u9898\u3002\u56e0\u6b64\uff0c\u653e\u5f03\u901a\u8fc7 PodMonitor \u6765\u914d\u7f6e\u901a\u8fc7 annotation \u521b\u5efa\u91c7\u96c6\u4efb\u52a1\u7684\u673a\u5236\u3002

              3. \u901a\u8fc7 Prometheus \u81ea\u5e26\u7684 additional scrape config \u673a\u5236\uff0c\u5c06\u670d\u52a1\u53d1\u73b0\u89c4\u5219\u914d\u7f6e\u5728 secret \u4e2d\uff0c\u5728\u5f15\u5165 Prometheus \u91cc\u3002

              \u7efc\u4e0a\uff1a

              1. \u5220\u9664\u8fd9\u4e2a PodMonitor \u7684\u5f53\u524d insight-kubernetes-pod
              2. \u4f7f\u7528\u65b0\u7684\u89c4\u5219

              \u65b0\u7684\u89c4\u5219\u91cc\u901a\u8fc7 action: keepequal \u6765\u6bd4\u8f83 source_labels \u548c target_label \u7684\u4e00\u81f4\u6027\uff0c \u6765\u5224\u65ad\u662f\u5426\u8981\u7ed9\u67d0\u4e2a container \u7684 port \u521b\u5efa\u91c7\u96c6\u4efb\u52a1\u3002\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u4e2a\u662f Prometheus 2.41.0\uff082022-12-20\uff09\u548c\u66f4\u9ad8\u7248\u672c\u624d\u5177\u5907\u7684\u529f\u80fd\u3002

              +    - source_labels: [__meta_kubernetes_pod_annotation_insight_opentelemetry_io_metric_port]\n+      separator: ;\n+      target_label: __meta_kubernetes_pod_container_port_number\n+      action: keepequal\n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html","title":"\u5347\u7ea7\u6ce8\u610f\u4e8b\u9879","text":"

              \u672c\u9875\u4ecb\u7ecd\u4e00\u4e9b\u5347\u7ea7 insight-server \u548c insight-agent \u7684\u6ce8\u610f\u4e8b\u9879\u3002

              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#insight-agent","title":"insight-agent","text":""},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v028x-v029x","title":"\u4ece v0.28.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.29.x","text":"

              \u7531\u4e8e v0.29.0 \u5347\u7ea7\u4e86 Opentelemetry \u793e\u533a\u7684 operator chart \u7248\u672c\uff0cvalues \u4e2d\u7684 featureGates \u7684\u652f\u6301\u7684\u503c\u6709\u6240\u53d8\u5316\uff0c\u56e0\u6b64\uff0c\u5728 upgrade \u4e4b\u524d\uff0c\u9700\u8981\u5c06 featureGates \u7684\u503c\u8bbe\u7f6e\u4e3a\u7a7a, \u5373\uff1a

              -  --set opentelemetry-operator.manager.featureGates=\"+operator.autoinstrumentation.go,+operator.autoinstrumentation.multi-instrumentation,+operator.autoinstrumentation.nginx\" \\\n+  --set opentelemetry-operator.manager.featureGates=\"\"\n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#insight-server","title":"insight-server","text":""},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v026x-v027x","title":"\u4ece v0.26.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.27.x \u6216\u66f4\u9ad8\u7248\u672c","text":"

              \u5728 v0.27.x \u7248\u672c\u4e2d\u5c06 vector \u7ec4\u4ef6\u7684\u5f00\u5173\u5355\u72ec\u62bd\u51fa\u3002\u6545\u539f\u6709\u73af\u5883\u5f00\u542f\u4e86 vector\uff0c\u90a3\u5728\u5347\u7ea7 insight-server \u65f6\uff0c\u9700\u8981\u6307\u5b9a --set vector.enabled=true \u3002

              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v019x-020x","title":"\u4ece v0.19.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 0.20.x","text":"

              \u5728\u5347\u7ea7 Insight \u4e4b\u524d\uff0c\u60a8\u9700\u8981\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u624b\u52a8\u5220\u9664 jaeger-collector \u548c jaeger-query \u90e8\u7f72\uff1a

              kubectl -n insight-system delete deployment insight-jaeger-collector\nkubectl -n insight-system delete deployment insight-jaeger-query\n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v017x-v018x","title":"\u4ece v0.17.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.18.x","text":"

              \u7531\u4e8e 0.18.x \u4e2d\u66f4\u65b0\u4e86 Jaeger \u76f8\u5173\u90e8\u7f72\u6587\u4ef6\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-server \u524d\u624b\u52a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

              kubectl -n insight-system delete deployment insight-jaeger-collector\nkubectl -n insight-system delete deployment insight-jaeger-query\n

              \u7531\u4e8e 0.18.x \u4e2d\u6307\u6807\u540d\u4ea7\u751f\u4e86\u53d8\u52a8\uff0c\u56e0\u6b64\uff0c\u9700\u8981\u5728\u5347\u7ea7 insight-server \u4e4b\u540e\uff0cinsight-agent \u4e5f\u5e94\u8be5\u505a\u5347\u7ea7\u3002

              \u6b64\u5916\uff0c\u8c03\u6574\u4e86\u5f00\u542f\u94fe\u8def\u6a21\u5757\u7684\u53c2\u6570\uff0c\u4ee5\u53ca ElasticSearch \u8fde\u63a5\u8c03\u6574\u3002\u5177\u4f53\u53c2\u8003\u4ee5\u4e0b\u53c2\u6570\uff1a

              +  --set global.tracing.enable=true \\\n-  --set jaeger.collector.enabled=true \\\n-  --set jaeger.query.enabled=true \\\n+  --set global.elasticsearch.scheme=${your-external-elasticsearch-scheme} \\\n+  --set global.elasticsearch.host=${your-external-elasticsearch-host} \\\n+  --set global.elasticsearch.port=${your-external-elasticsearch-port} \\\n+  --set global.elasticsearch.user=${your-external-elasticsearch-username} \\\n+  --set global.elasticsearch.password=${your-external-elasticsearch-password} \\\n-  --set jaeger.storage.elasticsearch.scheme=${your-external-elasticsearch-scheme} \\\n-  --set jaeger.storage.elasticsearch.host=${your-external-elasticsearch-host} \\\n-  --set jaeger.storage.elasticsearch.port=${your-external-elasticsearch-port} \\\n-  --set jaeger.storage.elasticsearch.user=${your-external-elasticsearch-username} \\\n-  --set jaeger.storage.elasticsearch.password=${your-external-elasticsearch-password} \\\n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v015x-v016x","title":"\u4ece v0.15.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.16.x","text":"

              \u7531\u4e8e 0.16.x \u4e2d\u4f7f\u7528\u4e86 vmalertmanagers CRD \u7684\u65b0\u7279\u6027\u53c2\u6570 disableRouteContinueEnforce\uff0c \u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-server \u524d\u624b\u52a8\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u3002

              kubectl apply --server-side -f https://raw.githubusercontent.com/VictoriaMetrics/operator/v0.33.0/config/crd/bases/operator.victoriametrics.com_vmalertmanagers.yaml --force-conflicts\n

              Note

              \u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b Insight \u79bb\u7ebf\u5305\u540e\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u66f4\u65b0 CRD\u3002

              kubectl apply --server-side -f insight/dependency-crds --force-conflicts \n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#insight-agent_1","title":"insight-agent","text":""},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v023x-v024x","title":"\u4ece v0.23.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.24.x","text":"

              \u7531\u4e8e 0.24.x \u7248\u672c\u4e2d OTEL operator chart \u4e2d\u65b0\u589e\u4e86 CRD\uff0c\u4f46\u7531\u4e8e Helm Upgrade \u65f6\u5e76\u4e0d\u4f1a\u66f4\u65b0 CRD\uff0c\u56e0\u6b64\uff0c\u9700\u8981\u624b\u52a8\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

              kubectl apply -f https://raw.githubusercontent.com/open-telemetry/opentelemetry-helm-charts/main/charts/opentelemetry-operator/crds/crd-opentelemetry.io_opampbridges.yaml\n

              \u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b insight-agent \u79bb\u7ebf\u5305\u540e\u53ef\u627e\u5230\u4e0a\u8ff0 CRD \u7684 yaml\uff0c\u89e3\u538b Insight-Agent Chart \u4e4b\u540e\u624b\u52a8\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

              kubectl apply -f charts/agent/crds/crd-opentelemetry.io_opampbridges.yaml\n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v019x-v020x","title":"\u4ece v0.19.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.20.x","text":"

              \u7531\u4e8e 0.20.x \u4e2d\u589e\u52a0\u4e86 Kafka \u65e5\u5fd7\u5bfc\u51fa\u914d\u7f6e\uff0c\u65e5\u5fd7\u5bfc\u51fa\u914d\u7f6e\u505a\u4e86\u4e00\u4e9b\u8c03\u6574\u3002\u5347\u7ea7 insight-agent \u4e4b\u524d\u9700\u8981\u6ce8\u610f\u53c2\u6570\u53d8\u5316\uff0c \u5373\u539f\u6765 logging \u7684\u914d\u7f6e\u5df2\u7ecf\u79fb\u5230\u4e86\u914d\u7f6e\u4e2d logging.elasticsearch\uff1a

              -  --set global.exporters.logging.host \\\n-  --set global.exporters.logging.port \\\n+  --set global.exporters.logging.elasticsearch.host \\\n+  --set global.exporters.logging.elasticsearch.port \\\n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v017x-v018x_1","title":"\u4ece v0.17.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.18.x","text":"

              \u7531\u4e8e 0.18.x \u4e2d\u66f4\u65b0\u4e86 Jaeger \u76f8\u5173\u90e8\u7f72\u6587\u4ef6\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-agent \u524d\u9700\u8981\u6ce8\u610f\u53c2\u6570\u7684\u6539\u52a8\u3002

              +  --set global.exporters.trace.enable=true \\\n-  --set opentelemetry-collector.enabled=true \\\n-  --set opentelemetry-operator.enabled=true \\\n
              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v016x-v017x","title":"\u4ece v0.16.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.17.x","text":"

              \u5728 v0.17.x \u7248\u672c\u4e2d\u5c06 kube-prometheus-stack chart \u7248\u672c\u4ece 41.9.1 \u5347\u7ea7\u81f3 45.28.1, \u5176\u4e2d\u4f7f\u7528\u7684 CRD \u4e5f\u5b58\u5728\u4e00\u4e9b\u5b57\u6bb5\u7684\u5347\u7ea7\uff0c\u5982 servicemonitor \u7684 attachMetadata \u5b57\u6bb5\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-agent \u524d\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

              kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.65.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --force-conflicts\n

              \u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b insight-agent \u79bb\u7ebf\u5305\u540e\uff0c\u5728 insight-agent/dependency-crds \u4e2d\u627e\u5230\u4e0a\u8ff0 CRD \u7684 yaml\u3002

              "},{"location":"end-user/insight/quickstart/install/upgrade-note.html#v011x-v012x","title":"\u4ece v0.11.x\uff08\u6216\u66f4\u4f4e\u7248\u672c\uff09\u5347\u7ea7\u5230 v0.12.x","text":"

              \u5728 v0.12.x \u5c06 kube-prometheus-stack chart \u4ece 39.6.0 \u5347\u7ea7\u5230 41.9.1\uff0c\u5176\u4e2d\u5305\u62ec prometheus-operator \u5347\u7ea7\u5230 v0.60.1, prometheus-node-exporter chart \u5347\u7ea7\u5230 4.3.0 \u7b49\u3002 prometheus-node-exporter \u5347\u7ea7\u540e\u4f7f\u7528\u4e86 Kubernetes \u63a8\u8350 label\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7\u524d\u5220\u9664 node-exporter \u7684 DaemonSet\u3002 prometheus-operator \u66f4\u65b0\u4e86 CRD\uff0c\u56e0\u6b64\u9700\u8981\u5728\u5347\u7ea7 insight-agent \u524d\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

              kubectl delete daemonset insight-agent-prometheus-node-exporter -n insight-system\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml --force-conflicts\nkubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.60.1/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml --force-conflicts\n

              Note

              \u5982\u60a8\u662f\u79bb\u7ebf\u5b89\u88c5\uff0c\u53ef\u4ee5\u5728\u89e3\u538b insight-agent \u79bb\u7ebf\u5305\u540e\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u66f4\u65b0 CRD\u3002

              kubectl apply --server-side -f insight-agent/dependency-crds --force-conflicts\n
              "},{"location":"end-user/insight/quickstart/otel/operator.html","title":"\u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a","text":"

              \u76ee\u524d\u53ea\u6709 Java\u3001NodeJs\u3001Python\u3001.Net\u3001Golang \u652f\u6301 Operator \u7684\u65b9\u5f0f\u65e0\u4fb5\u5165\u63a5\u5165\u3002

              "},{"location":"end-user/insight/quickstart/otel/operator.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u8bf7\u786e\u4fdd insight-agent \u5df2\u7ecf\u5c31\u7eea\u3002\u5982\u82e5\u6ca1\u6709\uff0c\u8bf7\u53c2\u8003\u5b89\u88c5 insight-agent \u91c7\u96c6\u6570\u636e\u5e76\u786e\u4fdd\u4ee5\u4e0b\u4e09\u9879\u5c31\u7eea\uff1a

              • \u4e3a insight-agent \u5f00\u542f trace \u529f\u80fd
              • trace \u6570\u636e\u7684\u5730\u5740\u4ee5\u53ca\u7aef\u53e3\u662f\u5426\u586b\u5199\u6b63\u786e
              • deployment/insight-agent-opentelemetry-operator \u548c deployment/insight-agent-opentelemetry-collector \u5bf9\u5e94\u7684 Pod \u5df2\u7ecf\u51c6\u5907\u5c31\u7eea
              "},{"location":"end-user/insight/quickstart/otel/operator.html#instrumentation-cr","title":"\u5b89\u88c5 Instrumentation CR","text":"

              Tip

              \u4ece Insight v0.22.0 \u5f00\u59cb\uff0c\u4e0d\u518d\u9700\u8981\u624b\u52a8\u5b89\u88c5 Instrumentation CR\u3002

              \u5728 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\u5b89\u88c5\uff0c\u4e0d\u540c\u7248\u672c\u4e4b\u95f4\u6709\u4e00\u4e9b\u7ec6\u5c0f\u7684\u5dee\u522b\u3002

              Insight v0.21.xInsight v0.20.xInsight v0.18.xInsight v0.17.xInsight v0.16.x
              K8S_CLUSTER_UID=$(kubectl get namespace kube-system -o jsonpath='{.metadata.uid}')\nkubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/openinsight-proj/autoinstrumentation-java:1.31.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n      - name: OTEL_K8S_CLUSTER_UID\n        value: $K8S_CLUSTER_UID\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0\n  dotnet:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha\nEOF\n
              kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.29.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0\n  dotnet:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0-rc.2\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha\nEOF\n
              kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.25.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.37.0\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.38b0\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.1-alpha\nEOF\n
              kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.23.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.34.0\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.33b0\nEOF\n
              kubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.23.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.34.0\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.33b0\nEOF\n
              "},{"location":"end-user/insight/quickstart/otel/operator.html#_2","title":"\u4e0e\u670d\u52a1\u7f51\u683c\u94fe\u8def\u4e32\u8054\u573a\u666f","text":"

              \u5982\u679c\u60a8\u5f00\u542f\u4e86\u670d\u52a1\u7f51\u683c\u7684\u94fe\u8def\u8ffd\u8e2a\u80fd\u529b\uff0c\u9700\u8981\u989d\u5916\u589e\u52a0\u4e00\u4e2a\u73af\u5883\u53d8\u91cf\u6ce8\u5165\u7684\u914d\u7f6e\uff1a

              "},{"location":"end-user/insight/quickstart/otel/operator.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b","text":"
              1. \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3.0\uff0c\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 \u540e\u9009\u62e9\u8fdb\u5165\u76ee\u6807\u96c6\u7fa4\uff0c
              2. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u9009\u62e9 \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u627e\u5230 instrumentations.opentelemetry.io \u540e\u8fdb\u5165\u8be6\u60c5\u9875\u3002
              3. \u9009\u62e9 insight-system \u547d\u540d\u7a7a\u95f4\u540e\uff0c\u7f16\u8f91 insight-opentelemetry-autoinstrumentation \uff0c\u5728 spec:env: \u4e0b\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a

                    - name: OTEL_SERVICE_NAME\n      valueFrom:\n        fieldRef:\n          fieldPath: metadata.labels['app'] \n

                \u5b8c\u6574\u7684\u547d\u4ee4\u5982\u4e0b\uff08For Insight v0.21.x\uff09\uff1a

                K8S_CLUSTER_UID=$(kubectl get namespace kube-system -o jsonpath='{.metadata.uid}')\nkubectl apply -f - <<EOF\napiVersion: opentelemetry.io/v1alpha1\nkind: Instrumentation\nmetadata:\n  name: insight-opentelemetry-autoinstrumentation\n  namespace: insight-system\nspec:\n  # https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#instrumentationspecresource\n  resource:\n    addK8sUIDAttributes: true\n  env:\n    - name: OTEL_EXPORTER_OTLP_ENDPOINT\n      value: http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\n    - name: OTEL_SERVICE_NAME\n      valueFrom:\n        fieldRef:\n          fieldPath: metadata.labels['app'] \n  sampler:\n    # Enum: always_on, always_off, traceidratio, parentbased_always_on, parentbased_always_off, parentbased_traceidratio, jaeger_remote, xray\n    type: always_on\n  java:\n    image: ghcr.m.daocloud.io/openinsight-proj/autoinstrumentation-java:1.31.0\n    env:\n      - name: OTEL_JAVAAGENT_DEBUG\n        value: \"false\"\n      - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n        value: \"true\"\n      - name: SPLUNK_PROFILER_ENABLED\n        value: \"false\"\n      - name: OTEL_METRICS_EXPORTER\n        value: \"prometheus\"\n      - name: OTEL_METRICS_EXPORTER_PORT\n        value: \"9464\"\n      - name: OTEL_K8S_CLUSTER_UID\n        value: $K8S_CLUSTER_UID\n  nodejs:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.41.1\n  python:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.40b0\n  dotnet:\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:1.0.0\n  go:\n    # Must set the default value manually for now.\n    # See https://github.com/open-telemetry/opentelemetry-operator/issues/1756 for details.\n    image: ghcr.m.daocloud.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.2-alpha\nEOF\n
              "},{"location":"end-user/insight/quickstart/otel/operator.html#_4","title":"\u6dfb\u52a0\u6ce8\u89e3\uff0c\u81ea\u52a8\u63a5\u5165\u94fe\u8def","text":"

              \u4ee5\u4e0a\u5c31\u7eea\u4e4b\u540e\uff0c\u60a8\u5c31\u53ef\u4ee5\u901a\u8fc7\u6ce8\u89e3\uff08Annotation\uff09\u65b9\u5f0f\u4e3a\u5e94\u7528\u7a0b\u5e8f\u63a5\u5165\u94fe\u8def\u8ffd\u8e2a\u4e86\uff0cOTel \u76ee\u524d\u652f\u6301\u901a\u8fc7\u6ce8\u89e3\u7684\u65b9\u5f0f\u63a5\u5165\u94fe\u8def\u3002 \u6839\u636e\u670d\u52a1\u8bed\u8a00\uff0c\u9700\u8981\u6dfb\u52a0\u4e0a\u4e0d\u540c\u7684 pod annotations\u3002\u6bcf\u4e2a\u670d\u52a1\u53ef\u6dfb\u52a0\u4e24\u7c7b\u6ce8\u89e3\u4e4b\u4e00\uff1a

              • \u53ea\u6ce8\u5165\u73af\u5883\u53d8\u91cf\u6ce8\u89e3

                \u8fd9\u7c7b\u6ce8\u89e3\u53ea\u6709\u4e00\u4e2a\uff0c\u7528\u4e8e\u6dfb\u52a0 otel \u76f8\u5173\u7684\u73af\u5883\u53d8\u91cf\uff0c\u6bd4\u5982\u94fe\u8def\u4e0a\u62a5\u5730\u5740\u3001\u5bb9\u5668\u6240\u5728\u7684\u96c6\u7fa4 id\u3001\u547d\u540d\u7a7a\u95f4\u7b49\uff08\u8fd9\u4e2a\u6ce8\u89e3\u5728\u5e94\u7528\u4e0d\u652f\u6301\u81ea\u52a8\u63a2\u9488\u8bed\u8a00\u65f6\u5341\u5206\u6709\u7528\uff09

                instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

                \u5176\u4e2d value \u88ab / \u5206\u6210\u4e24\u90e8\u5206\uff0c\u7b2c\u4e00\u4e2a\u503c (insight-system) \u662f\u4e0a\u4e00\u6b65\u5b89\u88c5\u7684 CR \u7684\u547d\u540d\u7a7a\u95f4\uff0c \u7b2c\u4e8c\u4e2a\u503c (insight-opentelemetry-autoinstrumentation) \u662f\u8fd9\u4e2a CR \u7684\u540d\u5b57\u3002

              • \u81ea\u52a8\u63a2\u9488\u6ce8\u5165\u4ee5\u53ca\u73af\u5883\u53d8\u91cf\u6ce8\u5165\u6ce8\u89e3

                \u8fd9\u7c7b\u6ce8\u89e3\u76ee\u524d\u6709 4 \u4e2a\uff0c\u5206\u522b\u5bf9\u5e94 4 \u79cd\u4e0d\u540c\u7684\u7f16\u7a0b\u8bed\u8a00\uff1ajava\u3001nodejs\u3001python\u3001dotnet\uff0c \u4f7f\u7528\u5b83\u540e\u5c31\u4f1a\u5bf9 spec.pod \u4e0b\u7684\u7b2c\u4e00\u4e2a\u5bb9\u5668\u6ce8\u5165\u81ea\u52a8\u63a2\u9488\u4ee5\u53ca otel \u9ed8\u8ba4\u73af\u5883\u53d8\u91cf\uff1a

                Java \u5e94\u7528NodeJs \u5e94\u7528Python \u5e94\u7528Dotnet \u5e94\u7528Golang \u5e94\u7528
                instrumentation.opentelemetry.io/inject-java: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
                instrumentation.opentelemetry.io/inject-nodejs: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
                instrumentation.opentelemetry.io/inject-python: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
                instrumentation.opentelemetry.io/inject-dotnet: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

                \u7531\u4e8e Go \u81ea\u52a8\u68c0\u6d4b\u9700\u8981\u8bbe\u7f6e OTEL_GO_AUTO_TARGET_EXE\uff0c \u56e0\u6b64\u60a8\u5fc5\u987b\u901a\u8fc7\u6ce8\u89e3\u6216 Instrumentation \u8d44\u6e90\u63d0\u4f9b\u6709\u6548\u7684\u53ef\u6267\u884c\u8def\u5f84\u3002\u672a\u8bbe\u7f6e\u6b64\u503c\u4f1a\u5bfc\u81f4 Go \u81ea\u52a8\u68c0\u6d4b\u6ce8\u5165\u4e2d\u6b62\uff0c\u4ece\u800c\u5bfc\u81f4\u63a5\u5165\u94fe\u8def\u5931\u8d25\u3002

                instrumentation.opentelemetry.io/inject-go: \"insight-system/insight-opentelemetry-autoinstrumentation\"\ninstrumentation.opentelemetry.io/otel-go-auto-target-exe: \"/path/to/container/executable\"\n

                Go \u81ea\u52a8\u68c0\u6d4b\u4e5f\u9700\u8981\u63d0\u5347\u6743\u9650\u3002\u4ee5\u4e0b\u6743\u9650\u662f\u81ea\u52a8\u8bbe\u7f6e\u7684\u5e76\u4e14\u662f\u5fc5\u9700\u7684\u3002

                securityContext:\n  privileged: true\n  runAsUser: 0\n

              Tip

              OpenTelemetry Operator \u5728\u6ce8\u5165\u63a2\u9488\u65f6\u4f1a\u81ea\u52a8\u6dfb\u52a0\u4e00\u4e9b OTel \u76f8\u5173\u73af\u5883\u53d8\u91cf\uff0c\u540c\u65f6\u4e5f\u652f\u6301\u8fd9\u4e9b\u73af\u5883\u53d8\u91cf\u7684\u8986\u76d6\u3002\u8fd9\u4e9b\u73af\u5883\u53d8\u91cf\u7684\u8986\u76d6\u4f18\u5148\u7ea7\uff1a

              original container env vars -> language specific env vars -> common env vars -> instrument spec configs' vars\n

              \u4f46\u662f\u9700\u8981\u907f\u514d\u624b\u52a8\u8986\u76d6 OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\uff0c\u5b83\u5728 Operator \u5185\u90e8\u4f5c\u4e3a\u4e00\u4e2a Pod \u662f\u5426\u5df2\u7ecf\u6ce8\u5165\u63a2\u9488\u7684\u6807\u8bc6\uff0c\u5982\u679c\u624b\u52a8\u6dfb\u52a0\u4e86\uff0c\u63a2\u9488\u53ef\u80fd\u65e0\u6cd5\u6ce8\u5165\u3002

              "},{"location":"end-user/insight/quickstart/otel/operator.html#demo","title":"\u81ea\u52a8\u6ce8\u5165\u793a\u4f8b Demo","text":"

              \u6ce8\u610f\u8fd9\u4e2a annotations \u662f\u52a0\u5728 spec.annotations \u4e0b\u7684\u3002

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-app\n  labels:\n    app: my-app\nspec:\n  selector:\n    matchLabels:\n      app: my-app\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: my-app\n      annotations:\n        instrumentation.opentelemetry.io/inject-java: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n    spec:\n      containers:\n      - name: myapp\n        image: jaegertracing/vertx-create-span:operator-e2e-tests\n        ports:\n          - containerPort: 8080\n            protocol: TCP\n

              \u6700\u7ec8\u751f\u6210\u7684 YAML \u5185\u5bb9\u5982\u4e0b\uff1a

              apiVersion: v1\nkind: Pod\nmetadata:\n  name: my-deployment-with-sidecar-565bd877dd-nqkk6\n  generateName: my-deployment-with-sidecar-565bd877dd-\n  namespace: default\n  uid: aa89ca0d-620c-4d20-8bc1-37d67bad4ea4\n  resourceVersion: '2668986'\n  creationTimestamp: '2022-04-08T05:58:48Z'\n  labels:\n    app: my-pod-with-sidecar\n    pod-template-hash: 565bd877dd\n  annotations:\n    cni.projectcalico.org/containerID: 234eae5e55ea53db2a4bc2c0384b9a1021ed3908f82a675e4a92a49a7e80dd61\n    cni.projectcalico.org/podIP: 192.168.134.133/32\n    cni.projectcalico.org/podIPs: 192.168.134.133/32\n    instrumentation.opentelemetry.io/inject-java: \"insight-system/insight-opentelemetry-autoinstrumentation\"\nspec:\n  volumes:\n    - name: kube-api-access-sp2mz\n      projected:\n        sources:\n          - serviceAccountToken:\n              expirationSeconds: 3607\n              path: token\n          - configMap:\n              name: kube-root-ca.crt\n              items:\n                - key: ca.crt\n                  path: ca.crt\n          - downwardAPI:\n              items:\n                - path: namespace\n                  fieldRef:\n                    apiVersion: v1\n                    fieldPath: metadata.namespace\n        defaultMode: 420\n    - name: opentelemetry-auto-instrumentation\n      emptyDir: {}\n  initContainers:\n    - name: opentelemetry-auto-instrumentation\n      image: >-\n        ghcr.m.daocloud.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java\n      command:\n        - cp\n        - /javaagent.jar\n        - /otel-auto-instrumentation/javaagent.jar\n      resources: {}\n      volumeMounts:\n        - name: opentelemetry-auto-instrumentation\n          mountPath: /otel-auto-instrumentation\n        - name: kube-api-access-sp2mz\n          readOnly: true\n          mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n      terminationMessagePath: /dev/termination-log\n      terminationMessagePolicy: File\n      imagePullPolicy: Always\n  containers:\n    - name: myapp\n      image: ghcr.io/pavolloffay/spring-petclinic:latest\n      env:\n        - name: OTEL_JAVAAGENT_DEBUG\n          value: 'true'\n        - name: OTEL_INSTRUMENTATION_JDBC_ENABLED\n          value: 'true'\n        - name: SPLUNK_PROFILER_ENABLED\n          value: 'false'\n        - name: JAVA_TOOL_OPTIONS\n          value: ' -javaagent:/otel-auto-instrumentation/javaagent.jar'\n        - name: OTEL_TRACES_EXPORTER\n          value: otlp\n        - name: OTEL_EXPORTER_OTLP_ENDPOINT\n          value: http://insight-agent-opentelemetry-collector.svc.cluster.local:4317\n        - name: OTEL_EXPORTER_OTLP_TIMEOUT\n          value: '20'\n        - name: OTEL_TRACES_SAMPLER\n          value: parentbased_traceidratio\n        - name: OTEL_TRACES_SAMPLER_ARG\n          value: '0.85'\n        - name: SPLUNK_TRACE_RESPONSE_HEADER_ENABLED\n          value: 'true'\n        - name: OTEL_SERVICE_NAME\n          value: my-deployment-with-sidecar\n        - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: metadata.name\n        - name: OTEL_RESOURCE_ATTRIBUTES_POD_UID\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: metadata.uid\n        - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: spec.nodeName\n        - name: OTEL_RESOURCE_ATTRIBUTES\n          value: >-\n            k8s.container.name=myapp,k8s.deployment.name=my-deployment-with-sidecar,k8s.deployment.uid=8de6929d-dda0-436c-bca1-604e9ca7ea4e,k8s.namespace.name=default,k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME),k8s.pod.uid=$(OTEL_RESOURCE_ATTRIBUTES_POD_UID),k8s.replicaset.name=my-deployment-with-sidecar-565bd877dd,k8s.replicaset.uid=190d5f6e-ba7f-4794-b2e6-390b5879a6c4\n        - name: OTEL_PROPAGATORS\n          value: jaeger,b3\n      resources: {}\n      volumeMounts:\n        - name: kube-api-access-sp2mz\n          readOnly: true\n          mountPath: /var/run/secrets/kubernetes.io/serviceaccount\n        - name: opentelemetry-auto-instrumentation\n          mountPath: /otel-auto-instrumentation\n      terminationMessagePath: /dev/termination-log\n      terminationMessagePolicy: File\n      imagePullPolicy: Always\n  restartPolicy: Always\n  terminationGracePeriodSeconds: 30\n  dnsPolicy: ClusterFirst\n  serviceAccountName: default\n  serviceAccount: default\n  nodeName: k8s-master3\n  securityContext:\n    runAsUser: 1000\n    runAsGroup: 3000\n    fsGroup: 2000\n  schedulerName: default-scheduler\n  tolerations:\n    - key: node.kubernetes.io/not-ready\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n    - key: node.kubernetes.io/unreachable\n      operator: Exists\n      effect: NoExecute\n      tolerationSeconds: 300\n  priority: 0\n  enableServiceLinks: true\n  preemptionPolicy: PreemptLowerPriority\n
              "},{"location":"end-user/insight/quickstart/otel/operator.html#_5","title":"\u94fe\u8def\u67e5\u8be2","text":"

              \u5982\u4f55\u67e5\u8be2\u5df2\u7ecf\u63a5\u5165\u7684\u670d\u52a1\uff0c\u53c2\u8003\u94fe\u8def\u67e5\u8be2\u3002

              "},{"location":"end-user/insight/quickstart/otel/otel.html","title":"\u4f7f\u7528 OTel \u8d4b\u4e88\u5e94\u7528\u53ef\u89c2\u6d4b\u6027","text":"

              \u589e\u5f3a\u662f\u4f7f\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u80fd\u591f\u751f\u6210\u9065\u6d4b\u6570\u636e\u7684\u8fc7\u7a0b\u3002\u5373\u4e00\u4e9b\u53ef\u4ee5\u5e2e\u52a9\u60a8\u76d1\u89c6\u6216\u6d4b\u91cf\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u72b6\u6001\u7684\u4e1c\u897f\u3002

              OpenTelemetry \u662f\u9886\u5148\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u4e3a\u4e3b\u8981\u7f16\u7a0b\u8bed\u8a00\u548c\u6d41\u884c\u6846\u67b6\u63d0\u4f9b\u68c0\u6d4b\u5e93\u3002\u5b83\u662f\u4e91\u539f\u751f\u8ba1\u7b97\u57fa\u91d1\u4f1a\u4e0b\u7684\u4e00\u4e2a\u9879\u76ee\uff0c\u5f97\u5230\u4e86\u793e\u533a\u5e9e\u5927\u8d44\u6e90\u7684\u652f\u6301\u3002 \u5b83\u4e3a\u91c7\u96c6\u7684\u6570\u636e\u63d0\u4f9b\u6807\u51c6\u5316\u7684\u6570\u636e\u683c\u5f0f\uff0c\u65e0\u9700\u96c6\u6210\u7279\u5b9a\u7684\u4f9b\u5e94\u5546\u3002

              Insight \u652f\u6301\u7528\u4e8e\u68c0\u6d4b\u5e94\u7528\u7a0b\u5e8f\u7684 OpenTelemetry \u6765\u589e\u5f3a\u60a8\u7684\u5e94\u7528\u7a0b\u5e8f\u3002

              \u672c\u6307\u5357\u4ecb\u7ecd\u4e86\u4f7f\u7528 OpenTelemetry \u8fdb\u884c\u9065\u6d4b\u589e\u5f3a\u7684\u57fa\u672c\u6982\u5ff5\u3002 OpenTelemetry \u8fd8\u6709\u4e00\u4e2a\u7531\u5e93\u3001\u63d2\u4ef6\u3001\u96c6\u6210\u548c\u5176\u4ed6\u6709\u7528\u5de5\u5177\u7ec4\u6210\u7684\u751f\u6001\u7cfb\u7edf\u6765\u6269\u5c55\u5b83\u3002 \u60a8\u53ef\u4ee5\u5728 Otel Registry \u4e2d\u627e\u5230\u8fd9\u4e9b\u8d44\u6e90\u3002

              \u60a8\u53ef\u4ee5\u4f7f\u7528\u4efb\u4f55\u5f00\u653e\u6807\u51c6\u5e93\u8fdb\u884c\u9065\u6d4b\u589e\u5f3a\uff0c\u5e76\u4f7f\u7528 Insight \u4f5c\u4e3a\u53ef\u89c2\u5bdf\u6027\u540e\u7aef\u6765\u6444\u53d6\u3001\u5206\u6790\u548c\u53ef\u89c6\u5316\u6570\u636e\u3002

              \u4e3a\u4e86\u589e\u5f3a\u60a8\u7684\u4ee3\u7801\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 OpenTelemetry \u4e3a\u7279\u5b9a\u8bed\u8a00\u63d0\u4f9b\u7684\u589e\u5f3a\u64cd\u4f5c\uff1a

              Insight \u76ee\u524d\u63d0\u4f9b\u4e86\u4f7f\u7528 OpenTelemetry \u589e\u5f3a .Net NodeJS\u3001Java\u3001Python \u548c Golang \u5e94\u7528\u7a0b\u5e8f\u7684\u7b80\u5355\u65b9\u6cd5\u3002\u8bf7\u9075\u5faa\u4ee5\u4e0b\u6307\u5357\u3002

              "},{"location":"end-user/insight/quickstart/otel/otel.html#_1","title":"\u94fe\u8def\u589e\u5f3a","text":"
              • \u94fe\u8def\u63a5\u5165\u7684\u6700\u4f73\u5b9e\u8df5\uff1a\u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a
              • \u4ee5 Go \u8bed\u8a00\u4e3a\u4f8b\u7684\u624b\u52a8\u57cb\u70b9\u63a5\u5165\uff1a\u4f7f\u7528 OpenTelemetry SDK \u589e\u5f3a Go \u5e94\u7528\u7a0b\u5e8f
              • \u5229\u7528 ebpf \u5b9e\u73b0 Go \u8bed\u8a00\u65e0\u4fb5\u5165\u63a2\u9488\uff08\u5b9e\u9a8c\u6027\u529f\u80fd\uff09
              "},{"location":"end-user/insight/quickstart/otel/send_tracing_to_insight.html","title":"\u5411 Insight \u53d1\u9001\u94fe\u8def\u6570\u636e","text":"

              \u6b64\u6587\u6863\u4e3b\u8981\u63cf\u8ff0\u5ba2\u6237\u5e94\u7528\u5982\u4f55\u81ea\u884c\u5c06\u94fe\u8def\u6570\u636e\u4e0a\u62a5\u7ed9 Insight\u3002\u4e3b\u8981\u5305\u542b\u5982\u4e0b\u4e24\u79cd\u573a\u666f\uff1a

              1. \u5ba2\u6237\u5e94\u7528\u901a\u8fc7 OTEL Agent/SDK \u4e0a\u62a5\u94fe\u8def\u7ed9 Insight
              2. \u901a\u8fc7 Opentelemtry Collector(\u7b80\u79f0 OTEL COL) \u5c06\u94fe\u8def\u8f6c\u53d1\u7ed9 Insight

              \u5728\u6bcf\u4e2a\u5df2\u5b89\u88c5 Insight Agent \u7684\u96c6\u7fa4\u4e2d\u90fd\u6709 insight-agent-otel-col \u7ec4\u4ef6\u7528\u4e8e\u7edf\u4e00\u63a5\u6536\u8be5\u96c6\u7fa4\u7684\u94fe\u8def\u6570\u636e\u3002 \u56e0\u6b64\uff0c\u8be5\u7ec4\u4ef6\u4f5c\u4e3a\u7528\u6237\u63a5\u5165\u4fa7\u7684\u5165\u53e3\uff0c\u9700\u8981\u5148\u83b7\u53d6\u8be5\u5730\u5740\u3002\u53ef\u4ee5\u901a\u8fc7 AI \u7b97\u529b\u4e2d\u5fc3 \u754c\u9762\u83b7\u53d6\u8be5\u96c6\u7fa4 Opentelemtry Collector \u7684\u5730\u5740\uff0c \u6bd4\u5982 insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317 \uff1a

              \u9664\u6b64\u4e4b\u5916\uff0c\u9488\u5bf9\u4e0d\u540c\u4e0a\u62a5\u65b9\u5f0f\uff0c\u6709\u4e00\u4e9b\u7ec6\u5fae\u5dee\u522b\uff1a

              "},{"location":"end-user/insight/quickstart/otel/send_tracing_to_insight.html#otel-agentsdk-insight-agent-opentelemtry-collector","title":"\u5ba2\u6237\u5e94\u7528\u901a\u8fc7 OTel Agent/SDK \u4e0a\u62a5\u94fe\u8def\u7ed9 Insight Agent Opentelemtry Collector","text":"

              \u4e3a\u4e86\u80fd\u591f\u5c06\u94fe\u8def\u6570\u636e\u6b63\u5e38\u4e0a\u62a5\u81f3 Insight \u5e76\u80fd\u591f\u5728 Insight \u6b63\u5e38\u5c55\u793a\uff0c\u9700\u8981\u5e76\u5efa\u8bae\u901a\u8fc7\u5982\u4e0b\u73af\u5883\u53d8\u91cf\u63d0\u4f9b OTLP \u6240\u9700\u7684\u5143\u6570\u636e (Resource Attribute)\uff0c\u6709\u4e24\u79cd\u65b9\u5f0f\u53ef\u5b9e\u73b0\uff1a

              • \u5728\u90e8\u7f72\u6587\u4ef6 YAML \u4e2d\u624b\u52a8\u6dfb\u52a0\uff0c\u4f8b\u5982\uff1a

                ...\n- name: OTEL_EXPORTER_OTLP_ENDPOINT\n  value: \"http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317\"\n- name: \"OTEL_SERVICE_NAME\"\n  value: my-java-app-name\n- name: \"OTEL_K8S_NAMESPACE\"\n  valueFrom:\n    fieldRef:\n      apiVersion: v1\n      fieldPath: metadata.namespace\n- name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\n  valueFrom:\n    fieldRef:\n      apiVersion: v1\n      fieldPath: spec.nodeName\n- name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME\n  valueFrom:\n    fieldRef:\n      apiVersion: v1\n      fieldPath: metadata.name\n- name: OTEL_RESOURCE_ATTRIBUTES\n  value: \"k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)\"\n
              • \u5229\u7528 Insight Agent \u81ea\u52a8\u6ce8\u5165\u5982\u4e0a\u5143\u6570\u636e (Resource Attribute) \u80fd\u529b

                \u786e\u4fdd Insight Agent \u6b63\u5e38\u5de5\u4f5c\u5e76 \u5b89\u88c5 Instrumentation CR \u4e4b\u540e\uff0c \u53ea\u9700\u8981\u4e3a Pod \u6dfb\u52a0\u5982\u4e0b Annotation \u5373\u53ef\uff1a

                instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

                \u4e3e\u4f8b\uff1a

                apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-deployment-with-aotu-instrumentation\nspec:\n  selector:\n    matchLabels:\n      app.kubernetes.io/name: my-deployment-with-aotu-instrumentation-kuberntes\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io/name: my-deployment-with-aotu-instrumentation-kuberntes\n      annotations:\n        sidecar.opentelemetry.io/inject: \"false\"\n        instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n
              "},{"location":"end-user/insight/quickstart/otel/send_tracing_to_insight.html#opentelemtry-collector-insight-agent-opentelemtry-collector","title":"\u901a\u8fc7 Opentelemtry Collector \u5c06\u94fe\u8def\u8f6c\u53d1\u7ed9 Insight Agent Opentelemtry Collector","text":"

              \u5728\u4fdd\u8bc1\u5e94\u7528\u6dfb\u52a0\u4e86\u5982\u4e0a\u5143\u6570\u636e\u4e4b\u540e\uff0c\u53ea\u9700\u5728\u5ba2\u6237 Opentelemtry Collector \u91cc\u9762\u65b0\u589e\u4e00\u4e2a OTLP Exporter \u5c06\u94fe\u8def\u6570\u636e\u8f6c\u53d1\u7ed9 Insight Agent Opentelemtry Collector \u5373\u53ef\uff0c\u5982\u4e0b Opentelemtry Collector \u914d\u7f6e\u6587\u4ef6\u6240\u793a\uff1a

              ...\nexporters:\n  otlp/insight:\n    endpoint: insight-opentelemetry-collector.insight-system.svc.cluster.local:4317\nservice:\n...\npipelines:\n...\ntraces:\n  exporters:\n    - otlp/insight\n
              "},{"location":"end-user/insight/quickstart/otel/send_tracing_to_insight.html#_1","title":"\u53c2\u8003","text":"
              • \u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a
              • \u4f7f\u7528 OTel \u8d4b\u4e88\u5e94\u7528\u53ef\u89c2\u6d4b\u6027
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html","title":"\u4f7f\u7528 OTel SDK \u589e\u5f3a Go \u5e94\u7528\u7a0b\u5e8f","text":"

              Golang \u65e0\u4fb5\u5165\u5f0f\u63a5\u5165\u94fe\u8def\u8bf7\u53c2\u8003 \u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a \u6587\u6863\uff0c\u901a\u8fc7\u6ce8\u89e3\u5b9e\u73b0\u81ea\u52a8\u63a5\u5165\u94fe\u8def\u3002

              OpenTelemetry \u4e5f\u7b80\u79f0\u4e3a OTel\uff0c\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u53ef\u89c2\u6d4b\u6027\u6846\u67b6\uff0c\u53ef\u4ee5\u5e2e\u52a9\u5728 Go \u5e94\u7528\u7a0b\u5e8f\u4e2d\u751f\u6210\u548c\u6536\u96c6\u9065\u6d4b\u6570\u636e\uff1a\u94fe\u8def\u3001\u6307\u6807\u548c\u65e5\u5fd7\u3002

              \u672c\u6587\u4e3b\u8981\u8bb2\u89e3\u5982\u4f55\u5728 Go \u5e94\u7528\u7a0b\u5e8f\u4e2d\u901a\u8fc7 OpenTelemetry Go SDK \u589e\u5f3a\u5e76\u63a5\u5165\u94fe\u8def\u76d1\u63a7\u3002

              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#otel-sdk-go_1","title":"\u4f7f\u7528 OTel SDK \u589e\u5f3a Go \u5e94\u7528","text":""},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_1","title":"\u5b89\u88c5\u76f8\u5173\u4f9d\u8d56","text":"

              \u5fc5\u987b\u5148\u5b89\u88c5\u4e0e OpenTelemetry exporter \u548c SDK \u76f8\u5173\u7684\u4f9d\u8d56\u9879\u3002\u5982\u679c\u60a8\u6b63\u5728\u4f7f\u7528\u5176\u4ed6\u8bf7\u6c42\u8def\u7531\u5668\uff0c\u8bf7\u53c2\u8003\u8bf7\u6c42\u8def\u7531\u3002 \u5207\u6362/\u8fdb\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u6e90\u6587\u4ef6\u5939\u540e\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

              go get go.opentelemetry.io/otel@v1.19.0 \\\n  go.opentelemetry.io/otel/trace@v1.19.0 \\\n  go.opentelemetry.io/otel/sdk@v1.19.0 \\\n  go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin@v0.46.1 \\\n  go.opentelemetry.io/otel/exporters/otlp/otlptrace@v1.19.0 \\\n  go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@v1.19.0\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#otel-sdk","title":"\u4f7f\u7528 OTel SDK \u521b\u5efa\u521d\u59cb\u5316\u51fd\u6570","text":"

              \u4e3a\u4e86\u8ba9\u5e94\u7528\u7a0b\u5e8f\u80fd\u591f\u53d1\u9001\u6570\u636e\uff0c\u9700\u8981\u4e00\u4e2a\u51fd\u6570\u6765\u521d\u59cb\u5316 OpenTelemetry\u3002\u5728 main.go \u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u4ee3\u7801\u7247\u6bb5:

              import (\n    \"context\"\n    \"os\"\n    \"time\"\n\n    \"go.opentelemetry.io/otel\"\n    \"go.opentelemetry.io/otel/exporters/otlp/otlptrace\"\n    \"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\"\n    \"go.opentelemetry.io/otel/propagation\"\n    \"go.opentelemetry.io/otel/sdk/resource\"\n    sdktrace \"go.opentelemetry.io/otel/sdk/trace\"\n    semconv \"go.opentelemetry.io/otel/semconv/v1.7.0\"\n    \"go.uber.org/zap\"\n    \"google.golang.org/grpc\"\n)\n\nvar tracerExp *otlptrace.Exporter\n\nfunc retryInitTracer() func() {\n    var shutdown func()\n    go func() {\n        for {\n            // otel will reconnected and re-send spans when otel col recover. so, we don't need to re-init tracer exporter.\n            if tracerExp == nil {\n                shutdown = initTracer()\n            } else {\n                break\n            }\n            time.Sleep(time.Minute * 5)\n        }\n    }()\n    return shutdown\n}\n\nfunc initTracer() func() {\n    // temporarily set timeout to 10s\n    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)\n    defer cancel()\n\n    serviceName, ok := os.LookupEnv(\"OTEL_SERVICE_NAME\")\n    if !ok {\n        serviceName = \"server_name\"\n        os.Setenv(\"OTEL_SERVICE_NAME\", serviceName)\n    }\n    otelAgentAddr, ok := os.LookupEnv(\"OTEL_EXPORTER_OTLP_ENDPOINT\")\n    if !ok {\n        otelAgentAddr = \"http://localhost:4317\"\n        os.Setenv(\"OTEL_EXPORTER_OTLP_ENDPOINT\", otelAgentAddr)\n    }\n    zap.S().Infof(\"OTLP Trace connect to: %s with service name: %s\", otelAgentAddr, serviceName)\n\n    traceExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithInsecure(), otlptracegrpc.WithDialOption(grpc.WithBlock()))\n    if err != nil {\n        handleErr(err, \"OTLP Trace gRPC Creation\")\n        return nil\n    }\n\n    tracerProvider := sdktrace.NewTracerProvider(\n        sdktrace.WithBatcher(traceExporter),\n        sdktrace.WithSampler(sdktrace.AlwaysSample()),\n    sdktrace.WithResource(resource.NewWithAttributes(semconv.SchemaURL)))\n\n    otel.SetTracerProvider(tracerProvider)\n    otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))\n\n    tracerExp = traceExporter\n    return func() {\n        // Shutdown will flush any remaining spans and shut down the exporter.\n        handleErr(tracerProvider.Shutdown(ctx), \"failed to shutdown TracerProvider\")\n    }\n}\n\nfunc handleErr(err error, message string) {\n    if err != nil {\n        zap.S().Errorf(\"%s: %v\", message, err)\n    }\n}\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#maingo","title":"\u5728 main.go \u4e2d\u521d\u59cb\u5316\u8ddf\u8e2a\u5668","text":"

              \u4fee\u6539 main \u51fd\u6570\u4ee5\u5728 main.go \u4e2d\u521d\u59cb\u5316\u8ddf\u8e2a\u5668\u3002\u53e6\u5916\u5f53\u60a8\u7684\u670d\u52a1\u5173\u95ed\u65f6\uff0c\u5e94\u8be5\u8c03\u7528 TracerProvider.Shutdown() \u786e\u4fdd\u5bfc\u51fa\u6240\u6709 Span\u3002\u8be5\u670d\u52a1\u5c06\u8be5\u8c03\u7528\u4f5c\u4e3a\u4e3b\u51fd\u6570\u4e2d\u7684\u5ef6\u8fdf\u51fd\u6570\uff1a

              func main() {\n    // start otel tracing\n    if shutdown := retryInitTracer(); shutdown != nil {\n            defer shutdown()\n        }\n    ......\n}\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#otel-gin","title":"\u4e3a\u5e94\u7528\u6dfb\u52a0 OTel Gin \u4e2d\u95f4\u4ef6","text":"

              \u901a\u8fc7\u5728 main.go \u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u884c\u6765\u914d\u7f6e Gin \u4ee5\u4f7f\u7528\u4e2d\u95f4\u4ef6:

              import (\n    ....\n  \"go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin\"\n)\n\nfunc main() {\n    ......\n    r := gin.Default()\n    r.Use(otelgin.Middleware(\"my-app\"))\n    ......\n}\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_2","title":"\u8fd0\u884c\u5e94\u7528\u7a0b\u5e8f","text":"
              • \u672c\u5730\u8c03\u8bd5\u8fd0\u884c

                \u6ce8\u610f: \u6b64\u6b65\u9aa4\u4ec5\u7528\u4e8e\u672c\u5730\u5f00\u53d1\u8c03\u8bd5\uff0c\u751f\u4ea7\u73af\u5883\u4e2d Operator \u4f1a\u81ea\u52a8\u5b8c\u6210\u4ee5\u4e0b\u73af\u5883\u53d8\u91cf\u7684\u6ce8\u5165\u3002

                \u4ee5\u4e0a\u6b65\u9aa4\u5df2\u7ecf\u5b8c\u6210\u4e86\u521d\u59cb\u5316 SDK \u7684\u5de5\u4f5c\uff0c\u73b0\u5728\u5982\u679c\u9700\u8981\u5728\u672c\u5730\u5f00\u53d1\u8fdb\u884c\u8c03\u8bd5\uff0c\u9700\u8981\u63d0\u524d\u83b7\u53d6\u5230 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b insight-agent-opentelemerty-collector \u7684\u5730\u5740\uff0c\u5047\u8bbe\u4e3a\uff1a insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317 \u3002

                \u56e0\u6b64\uff0c\u53ef\u4ee5\u5728\u4f60\u672c\u5730\u542f\u52a8\u5e94\u7528\u7a0b\u5e8f\u7684\u65f6\u5019\u6dfb\u52a0\u5982\u4e0b\u73af\u5883\u53d8\u91cf\uff1a

                OTEL_SERVICE_NAME=my-golang-app OTEL_EXPORTER_OTLP_ENDPOINT=http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317 go run main.go...\n
              • \u751f\u4ea7\u73af\u5883\u8fd0\u884c

                \u8bf7\u53c2\u8003\u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a \u4e2d \u53ea\u6ce8\u5165\u73af\u5883\u53d8\u91cf\u6ce8\u89e3 \u76f8\u5173\u4ecb\u7ecd\uff0c\u4e3a deployment yaml \u6dfb\u52a0\u6ce8\u89e3\uff1a

                instrumentation.opentelemetry.io/inject-sdk: \"insight-system/insight-opentelemetry-autoinstrumentation\"\n

                \u5982\u679c\u65e0\u6cd5\u4f7f\u7528\u6ce8\u89e3\u7684\u65b9\u5f0f\uff0c\u60a8\u53ef\u4ee5\u624b\u52a8\u5728 deployment yaml \u6dfb\u52a0\u5982\u4e0b\u73af\u5883\u53d8\u91cf\uff1a

              \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\nenv:\n  - name: OTEL_EXPORTER_OTLP_ENDPOINT\n    value: 'http://insight-agent-opentelemetry-collector.insight-system.svc.cluster.local:4317'\n  - name: OTEL_SERVICE_NAME\n    value: \"your depolyment name\" # (1)!\n  - name: OTEL_K8S_NAMESPACE\n    valueFrom:\n      fieldRef:\n        apiVersion: v1\n        fieldPath: metadata.namespace\n  - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME\n    valueFrom:\n      fieldRef:\n        apiVersion: v1\n        fieldPath: spec.nodeName\n  - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME\n    valueFrom:\n      fieldRef:\n        apiVersion: v1\n        fieldPath: metadata.name\n  - name: OTEL_RESOURCE_ATTRIBUTES\n    value: 'k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)'\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n
              1. \u4fee\u6539\u6b64\u503c
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_3","title":"\u8bf7\u6c42\u8def\u7531","text":""},{"location":"end-user/insight/quickstart/otel/golang/golang.html#opentelemetry-gingonic","title":"OpenTelemetry gin/gonic \u589e\u5f3a","text":"
              # Add one line to your import() stanza depending upon your request router:\nmiddleware \"go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin\"\n

              \u7136\u540e\u6ce8\u5165 OpenTelemetry \u4e2d\u95f4\u4ef6\uff1a

              router.Use(middleware.Middleware(\"my-app\"))\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#opentelemetry-gorillamux","title":"OpenTelemetry gorillamux \u589e\u5f3a","text":"
              # Add one line to your import() stanza depending upon your request router:\nmiddleware \"go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux\"\n

              \u7136\u540e\u6ce8\u5165 OpenTelemetry \u4e2d\u95f4\u4ef6\uff1a

              router.Use(middleware.Middleware(\"my-app\"))\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#grpc","title":"gRPC \u589e\u5f3a","text":"

              \u540c\u6837\uff0cOpenTelemetry \u4e5f\u53ef\u4ee5\u5e2e\u52a9\u60a8\u81ea\u52a8\u68c0\u6d4b gRPC \u8bf7\u6c42\u3002\u8981\u68c0\u6d4b\u60a8\u62e5\u6709\u7684\u4efb\u4f55 gRPC \u670d\u52a1\u5668\uff0c\u8bf7\u5c06\u62e6\u622a\u5668\u6dfb\u52a0\u5230\u670d\u52a1\u5668\u7684\u5b9e\u4f8b\u5316\u4e2d\u3002

              import (\n  grpcotel \"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc\"\n)\nfunc main() {\n  [...]\n\n    s := grpc.NewServer(\n        grpc.UnaryInterceptor(grpcotel.UnaryServerInterceptor()),\n        grpc.StreamInterceptor(grpcotel.StreamServerInterceptor()),\n    )\n}\n

              \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u679c\u4f60\u7684\u7a0b\u5e8f\u91cc\u9762\u4f7f\u7528\u5230\u4e86 Grpc Client \u8c03\u7528\u7b2c\u4e09\u65b9\u670d\u52a1\uff0c\u4f60\u8fd8\u9700\u8981\u5bf9 Grpc Client \u6dfb\u52a0\u62e6\u622a\u5668\uff1a

                  [...]\n\n    conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()),\n        grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor()),\n        grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor()),\n    )\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_4","title":"\u5982\u679c\u4e0d\u4f7f\u7528\u8bf7\u6c42\u8def\u7531","text":"
              import (\n  \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n)\n

              \u5728\u5c06 http.Handler \u4f20\u9012\u7ed9 ServeMux \u7684\u6bcf\u4e2a\u5730\u65b9\uff0c\u60a8\u90fd\u5c06\u5305\u88c5\u5904\u7406\u7a0b\u5e8f\u51fd\u6570\u3002\u4f8b\u5982\uff0c\u5c06\u8fdb\u884c\u4ee5\u4e0b\u66ff\u6362\uff1a

              - mux.Handle(\"/path\", h)\n+ mux.Handle(\"/path\", otelhttp.NewHandler(h, \"description of path\"))\n---\n- mux.Handle(\"/path\", http.HandlerFunc(f))\n+ mux.Handle(\"/path\", otelhttp.NewHandler(http.HandlerFunc(f), \"description of path\"))\n

              \u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u60a8\u53ef\u4ee5\u786e\u4fdd\u4f7f\u7528 othttp \u5305\u88c5\u7684\u6bcf\u4e2a\u51fd\u6570\u90fd\u4f1a\u81ea\u52a8\u6536\u96c6\u5176\u5143\u6570\u636e\u5e76\u542f\u52a8\u76f8\u5e94\u7684\u8ddf\u8e2a\u3002

              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_5","title":"\u6570\u636e\u5e93\u8bbf\u95ee\u589e\u5f3a","text":""},{"location":"end-user/insight/quickstart/otel/golang/golang.html#golang-gorm","title":"Golang Gorm","text":"

              OpenTelemetry \u793e\u533a\u4e5f\u5f00\u53d1\u4e86\u6570\u636e\u5e93\u8bbf\u95ee\u5e93\u7684\u4e2d\u95f4\u4ef6\uff0c\u6bd4\u5982 Gorm:

              import (\n    \"github.com/uptrace/opentelemetry-go-extra/otelgorm\"\n    \"gorm.io/driver/sqlite\"\n    \"gorm.io/gorm\"\n)\n\ndb, err := gorm.Open(sqlite.Open(\"file::memory:?cache=shared\"), &gorm.Config{})\nif err != nil {\n    panic(err)\n}\n\notelPlugin := otelgorm.NewPlugin(otelgorm.WithDBName(\"mydb\"), # \u7f3a\u5931\u4f1a\u5bfc\u81f4\u6570\u636e\u5e93\u76f8\u5173\u62d3\u6251\u5c55\u793a\u4e0d\u5b8c\u6574\n    otelgorm.WithAttributes(semconv.ServerAddress(\"memory\"))) # \u7f3a\u5931\u4f1a\u5bfc\u81f4\u6570\u636e\u5e93\u76f8\u5173\u62d3\u6251\u5c55\u793a\u4e0d\u5b8c\u6574\nif err := db.Use(otelPlugin); err != nil {\n    panic(err)\n}\n

              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#span","title":"\u81ea\u5b9a\u4e49 Span","text":"

              \u5f88\u591a\u65f6\u5019\uff0cOpenTelemetry \u63d0\u4f9b\u7684\u4e2d\u95f4\u4ef6\u4e0d\u80fd\u5e2e\u52a9\u6211\u4eec\u8bb0\u5f55\u66f4\u591a\u5185\u90e8\u8c03\u7528\u7684\u51fd\u6570\uff0c\u9700\u8981\u6211\u4eec\u81ea\u5b9a\u4e49 Span \u6765\u8bb0\u5f55

               \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n    _, span := otel.Tracer(\"GetServiceDetail\").Start(ctx,\n        \"spanMetricDao.GetServiceDetail\",\n        trace.WithSpanKind(trace.SpanKindInternal))\n    defer span.End()\n  \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#span_1","title":"\u5411 span \u6dfb\u52a0\u81ea\u5b9a\u4e49\u5c5e\u6027\u548c\u4e8b\u4ef6","text":"

              \u4e5f\u53ef\u4ee5\u5c06\u81ea\u5b9a\u4e49\u5c5e\u6027\u6216\u6807\u7b7e\u8bbe\u7f6e\u4e3a Span\u3002\u8981\u6dfb\u52a0\u81ea\u5b9a\u4e49\u5c5e\u6027\u548c\u4e8b\u4ef6\uff0c\u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_6","title":"\u5bfc\u5165\u8ddf\u8e2a\u548c\u5c5e\u6027\u5e93","text":"
              import (\n    ...\n    \"go.opentelemetry.io/otel/attribute\"\n    \"go.opentelemetry.io/otel/trace\"\n)\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#span_2","title":"\u4ece\u4e0a\u4e0b\u6587\u4e2d\u83b7\u53d6\u5f53\u524d Span","text":"
              span := trace.SpanFromContext(c.Request.Context())\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#span_3","title":"\u5728\u5f53\u524d Span \u4e2d\u8bbe\u7f6e\u5c5e\u6027","text":"
              span.SetAttributes(attribute.String(\"controller\", \"books\"))\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#span-event","title":"\u4e3a\u5f53\u524d Span \u6dfb\u52a0 Event","text":"

              \u6dfb\u52a0 span \u4e8b\u4ef6\u662f\u4f7f\u7528 span \u5bf9\u8c61\u4e0a\u7684 AddEvent \u5b8c\u6210\u7684\u3002

              span.AddEvent(msg)\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_7","title":"\u8bb0\u5f55\u9519\u8bef\u548c\u5f02\u5e38","text":"
              import \"go.opentelemetry.io/otel/codes\"\n\n// \u83b7\u53d6\u5f53\u524d span\nspan := trace.SpanFromContext(ctx)\n\n// RecordError \u4f1a\u81ea\u52a8\u5c06\u4e00\u4e2a\u9519\u8bef\u8f6c\u6362\u6210 span even\nspan.RecordError(err)\n\n// \u6807\u8bb0\u8fd9\u4e2a span \u9519\u8bef\nspan.SetStatus(codes.Error, \"internal error\")\n
              "},{"location":"end-user/insight/quickstart/otel/golang/golang.html#_8","title":"\u53c2\u8003","text":"

              \u6709\u5173 Demo \u6f14\u793a\u8bf7\u53c2\u8003\uff1a - opentelemetry-demo/productcatalogservice - opentelemetry-collector-contrib/demo

              "},{"location":"end-user/insight/quickstart/otel/golang/meter.html","title":"\u4f7f\u7528 OTel SDK \u4e3a\u5e94\u7528\u7a0b\u5e8f\u66b4\u9732\u6307\u6807","text":"

              \u672c\u6587\u4ec5\u4f9b\u5e0c\u671b\u8bc4\u4f30\u6216\u63a2\u7d22\u6b63\u5728\u5f00\u53d1\u7684 OTLP \u6307\u6807\u7684\u7528\u6237\u53c2\u8003\u3002

              OpenTelemetry \u9879\u76ee\u8981\u6c42\u4ee5\u5fc5\u987b\u5728 OpenTelemetry \u534f\u8bae (OTLP) \u4e2d\u53d1\u51fa\u6570\u636e\u7684\u8bed\u8a00\u63d0\u4f9b API \u548c SDK\u3002

              "},{"location":"end-user/insight/quickstart/otel/golang/meter.html#golang","title":"\u9488\u5bf9 Golang \u5e94\u7528\u7a0b\u5e8f","text":"

              Golang \u53ef\u4ee5\u901a\u8fc7 sdk \u66b4\u9732 runtime \u6307\u6807\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5728\u5e94\u7528\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u65b9\u6cd5\u5f00\u542f metrics \u66b4\u9732\u5668\uff1a

              "},{"location":"end-user/insight/quickstart/otel/golang/meter.html#_1","title":"\u5b89\u88c5\u76f8\u5173\u4f9d\u8d56","text":"

              \u5207\u6362/\u8fdb\u5165\u5230\u5e94\u7528\u7a0b\u5e8f\u6e90\u6587\u4ef6\u5939\u540e\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

              go get go.opentelemetry.io/otel \\\n  go.opentelemetry.io/otel/attribute \\\n  go.opentelemetry.io/otel/exporters/prometheus \\\n  go.opentelemetry.io/otel/metric/global \\\n  go.opentelemetry.io/otel/metric/instrument \\\n  go.opentelemetry.io/otel/sdk/metric\n
              "},{"location":"end-user/insight/quickstart/otel/golang/meter.html#otel-sdk_1","title":"\u4f7f\u7528 OTel SDK \u521b\u5efa\u521d\u59cb\u5316\u51fd\u6570","text":"
              import (\n    .....\n\n    \"go.opentelemetry.io/otel/attribute\"\n    otelPrometheus \"go.opentelemetry.io/otel/exporters/prometheus\"\n    \"go.opentelemetry.io/otel/metric/global\"\n    \"go.opentelemetry.io/otel/metric/instrument\"\n    \"go.opentelemetry.io/otel/sdk/metric/aggregator/histogram\"\n    controller \"go.opentelemetry.io/otel/sdk/metric/controller/basic\"\n    \"go.opentelemetry.io/otel/sdk/metric/export/aggregation\"\n    processor \"go.opentelemetry.io/otel/sdk/metric/processor/basic\"\n    selector \"go.opentelemetry.io/otel/sdk/metric/selector/simple\"\n)\nfunc (s *insightServer) initMeter() *otelPrometheus.Exporter {\n    s.meter = global.Meter(\"xxx\")\n\n    config := otelPrometheus.Config{\n        DefaultHistogramBoundaries: []float64{1, 2, 5, 10, 20, 50},\n        Gatherer:                   prometheus.DefaultGatherer,\n        Registry:                   prometheus.NewRegistry(),\n        Registerer:                 prometheus.DefaultRegisterer,\n    }\n\n    c := controller.New(\n        processor.NewFactory(\n            selector.NewWithHistogramDistribution(\n                histogram.WithExplicitBoundaries(config.DefaultHistogramBoundaries),\n            ),\n            aggregation.CumulativeTemporalitySelector(),\n            processor.WithMemory(true),\n        ),\n    )\n\n    exporter, err := otelPrometheus.New(config, c)\n    if err != nil {\n        zap.S().Panicf(\"failed to initialize prometheus exporter %v\", err)\n    }\n\n    global.SetMeterProvider(exporter.MeterProvider())\n\n    http.HandleFunc(\"/metrics\", exporter.ServeHTTP)\n\n    go func() {\n        _ = http.ListenAndServe(fmt.Sprintf(\":%d\", 8888), nil)\n    }()\n\n    zap.S().Info(\"Prometheus server running on \", fmt.Sprintf(\":%d\", port))\n    return exporter\n}\n

              \u4ee5\u4e0a\u65b9\u6cd5\u4f1a\u4e3a\u60a8\u7684\u5e94\u7528\u66b4\u9732\u4e00\u4e2a\u6307\u6807\u63a5\u53e3: http://localhost:8888/metrics

              \u968f\u540e\uff0c\u5728 main.go \u4e2d\u5bf9\u5176\u8fdb\u884c\u521d\u59cb\u5316\uff1a

              func main() {\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n    tp := initMeter()\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n}\n

              \u6b64\u5916\uff0c\u5982\u679c\u60f3\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6307\u6807\uff0c\u53ef\u4ee5\u53c2\u8003\uff1a

              // exposeClusterMetric expose metric like \"insight_logging_count{} 1\"\nfunc (s *insightServer) exposeLoggingMetric(lserver *log.LogService) {\n    s.meter = global.Meter(\"insight.io/basic\")\n\n    var lock sync.Mutex\n    logCounter, err := s.meter.AsyncFloat64().Counter(\"insight_log_total\")\n    if err != nil {\n        zap.S().Panicf(\"failed to initialize instrument: %v\", err)\n    }\n\n    _ = s.meter.RegisterCallback([]instrument.Asynchronous{logCounter}, func(ctx context.Context) {\n        lock.Lock()\n        defer lock.Unlock()\n        count, err := lserver.Count(ctx)\n        if err == nil || count != -1 {\n            logCounter.Observe(ctx, float64(count))\n        }\n    })\n}\n

              \u968f\u540e\uff0c\u5728 main.go \u8c03\u7528\u8be5\u65b9\u6cd5\uff1a

              \u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\ns.exposeLoggingMetric(lservice)\n\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n

              \u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee http://localhost:8888/metrics \u6765\u68c0\u67e5\u60a8\u7684\u6307\u6807\u662f\u5426\u6b63\u5e38\u5de5\u4f5c\u3002

              "},{"location":"end-user/insight/quickstart/otel/golang/meter.html#java","title":"\u9488\u5bf9 Java \u5e94\u7528\u7a0b\u5e8f","text":"

              Java \u5728\u4f7f\u7528 otel agent \u5728\u5b8c\u6210\u94fe\u8def\u7684\u81ea\u52a8\u63a5\u5165\u7684\u57fa\u7840\u4e0a\uff0c\u901a\u8fc7\u6dfb\u52a0\u73af\u5883\u53d8\u91cf\uff1a

              OTEL_METRICS_EXPORTER=prometheus\n

              \u5c31\u53ef\u4ee5\u76f4\u63a5\u66b4\u9732 JVM \u76f8\u5173\u6307\u6807\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee http://localhost:8888/metrics \u6765\u68c0\u67e5\u60a8\u7684\u6307\u6807\u662f\u5426\u6b63\u5e38\u5de5\u4f5c\u3002

              \u968f\u540e\uff0c\u518d\u914d\u5408 prometheus serviceMonitor \u5373\u53ef\u5b8c\u6210\u6307\u6807\u7684\u63a5\u5165\u3002 \u5982\u679c\u60f3\u66b4\u9732\u81ea\u5b9a\u4e49\u6307\u6807\u8bf7\u53c2\u9605 opentelemetry-java-docs/prometheus\u3002

              \u4e3b\u8981\u5206\u4ee5\u4e0b\u4e24\u6b65\uff1a

              • \u521b\u5efa meter provider\uff0c\u5e76\u6307\u5b9a prometheus \u4f5c\u4e3a exporter\u3002

                /*\n* Copyright The OpenTelemetry Authors\n* SPDX-License-Identifier: Apache-2.0\n*/\n\npackage io.opentelemetry.example.prometheus;\n\nimport io.opentelemetry.api.metrics.MeterProvider;\nimport io.opentelemetry.exporter.prometheus.PrometheusHttpServer;\nimport io.opentelemetry.sdk.metrics.SdkMeterProvider;\nimport io.opentelemetry.sdk.metrics.export.MetricReader;\n\npublic final class ExampleConfiguration {\n\n  /**\n  * Initializes the Meter SDK and configures the prometheus collector with all default settings.\n  *\n  * @param prometheusPort the port to open up for scraping.\n  * @return A MeterProvider for use in instrumentation.\n  */\n  static MeterProvider initializeOpenTelemetry(int prometheusPort) {\n    MetricReader prometheusReader = PrometheusHttpServer.builder().setPort(prometheusPort).build();\n\n    return SdkMeterProvider.builder().registerMetricReader(prometheusReader).build();\n  }\n}\n
              • \u81ea\u5b9a\u4e49 meter \u5e76\u5f00\u542f http server

                package io.opentelemetry.example.prometheus;\n\nimport io.opentelemetry.api.common.Attributes;\nimport io.opentelemetry.api.metrics.Meter;\nimport io.opentelemetry.api.metrics.MeterProvider;\nimport java.util.concurrent.ThreadLocalRandom;\n\n/**\n* Example of using the PrometheusHttpServer to convert OTel metrics to Prometheus format and expose\n* these to a Prometheus instance via a HttpServer exporter.\n*\n* <p>A Gauge is used to periodically measure how many incoming messages are awaiting processing.\n* The Gauge callback gets executed every collection interval.\n*/\npublic final class PrometheusExample {\n  private long incomingMessageCount;\n\n  public PrometheusExample(MeterProvider meterProvider) {\n    Meter meter = meterProvider.get(\"PrometheusExample\");\n    meter\n        .gaugeBuilder(\"incoming.messages\")\n        .setDescription(\"No of incoming messages awaiting processing\")\n        .setUnit(\"message\")\n        .buildWithCallback(result -> result.record(incomingMessageCount, Attributes.empty()));\n  }\n\n  void simulate() {\n    for (int i = 500; i > 0; i--) {\n      try {\n        System.out.println(\n            i + \" Iterations to go, current incomingMessageCount is:  \" + incomingMessageCount);\n        incomingMessageCount = ThreadLocalRandom.current().nextLong(100);\n        Thread.sleep(1000);\n      } catch (InterruptedException e) {\n        // ignored here\n      }\n    }\n  }\n\n  public static void main(String[] args) {\n    int prometheusPort = 8888;\n\n    // it is important to initialize the OpenTelemetry SDK as early as possible in your process.\n    MeterProvider meterProvider = ExampleConfiguration.initializeOpenTelemetry(prometheusPort);\n\n    PrometheusExample prometheusExample = new PrometheusExample(meterProvider);\n\n    prometheusExample.simulate();\n\n    System.out.println(\"Exiting\");\n  }\n}\n

              \u968f\u540e\uff0c\u5f85 java \u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u4e4b\u540e\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee http://localhost:8888/metrics \u6765\u68c0\u67e5\u60a8\u7684\u6307\u6807\u662f\u5426\u6b63\u5e38\u5de5\u4f5c\u3002

              "},{"location":"end-user/insight/quickstart/otel/golang/meter.html#insight","title":"Insight \u91c7\u96c6\u6307\u6807","text":"

              \u6700\u540e\u91cd\u8981\u7684\u662f\uff0c\u60a8\u5df2\u7ecf\u5728\u5e94\u7528\u7a0b\u5e8f\u4e2d\u66b4\u9732\u51fa\u4e86\u6307\u6807\uff0c\u73b0\u5728\u9700\u8981 Insight \u6765\u91c7\u96c6\u6307\u6807\u3002

              \u63a8\u8350\u7684\u6307\u6807\u66b4\u9732\u65b9\u5f0f\u662f\u901a\u8fc7 servicemonitor \u6216\u8005 podmonitor\u3002

              "},{"location":"end-user/insight/quickstart/otel/golang/meter.html#servicemonitorpodmonitor","title":"\u521b\u5efa servicemonitor/podmonitor","text":"

              \u6dfb\u52a0\u7684 servicemonitor/podmonitor \u9700\u8981\u6253\u4e0a label\uff1a\"operator.insight.io/managed-by\": \"insight\" \u624d\u4f1a\u88ab Operator \u8bc6\u522b\uff1a

              apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: example-app\n  labels:\n    operator.insight.io/managed-by: insight\nspec:\n  selector:\n    matchLabels:\n      app: example-app\n  endpoints:\n  - port: web\n  namespaceSelector:\n    any: true\n
              "},{"location":"end-user/insight/quickstart/otel/java/index.html","title":"\u5f00\u59cb\u76d1\u63a7 Java \u5e94\u7528","text":"
              1. Java \u5e94\u7528\u94fe\u8def\u63a5\u5165\u4e0e\u76d1\u63a7\u8bf7\u53c2\u8003\u901a\u8fc7 Operator \u5b9e\u73b0\u5e94\u7528\u7a0b\u5e8f\u65e0\u4fb5\u5165\u589e\u5f3a \u6587\u6863\uff0c\u901a\u8fc7\u6ce8\u89e3\u5b9e\u73b0\u81ea\u52a8\u63a5\u5165\u94fe\u8def\u3002

              2. Java \u5e94\u7528\u7684 JVM \u8fdb\u884c\u76d1\u63a7\uff1a\u5df2\u7ecf\u66b4\u9732 JVM \u6307\u6807\u548c\u4ecd\u672a\u66b4\u9732 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5982\u4f55\u4e0e\u53ef\u89c2\u6d4b\u6027 Insight \u5bf9\u63a5\u3002

                • \u5982\u679c\u60a8\u7684 Java \u5e94\u7528\u672a\u5f00\u59cb\u66b4\u9732 JVM \u6307\u6807\uff0c\u60a8\u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u6587\u6863\uff1a

                  • \u4f7f\u7528 JMX Exporter \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807
                  • \u4f7f\u7528 OpenTelemetry Java Agent \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807
                • \u5982\u679c\u60a8\u7684 Java \u5e94\u7528\u5df2\u7ecf\u66b4\u9732 JVM \u6307\u6807\uff0c\u60a8\u53ef\u4ee5\u53c2\u8003\u5982\u4e0b\u6587\u6863\uff1a

                  • \u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027
              3. \u5c06 TraceId \u548c SpanId \u5199\u5165 Java \u5e94\u7528\u65e5\u5fd7, \u5b9e\u73b0\u94fe\u8def\u6570\u636e\u4e0e\u65e5\u5fd7\u6570\u636e\u5173\u8054

              "},{"location":"end-user/insight/quickstart/otel/java/mdc.html","title":"\u5c06 TraceId \u548c SpanId \u5199\u5165 Java \u5e94\u7528\u65e5\u5fd7","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 OpenTelemetry \u5c06 TraceId \u548c SpanId \u81ea\u52a8\u5199\u5165 Java \u5e94\u7528\u65e5\u5fd7\u3002 TraceId \u4e0e SpanId \u5199\u5165\u65e5\u5fd7\u540e\uff0c\u60a8\u53ef\u4ee5\u5c06\u5206\u5e03\u5f0f\u94fe\u8def\u6570\u636e\u4e0e\u65e5\u5fd7\u6570\u636e\u5173\u8054\u8d77\u6765\uff0c\u5b9e\u73b0\u66f4\u9ad8\u6548\u7684\u6545\u969c\u8bca\u65ad\u548c\u6027\u80fd\u5206\u6790\u3002

              "},{"location":"end-user/insight/quickstart/otel/java/mdc.html#_1","title":"\u652f\u6301\u7684\u65e5\u5fd7\u5e93","text":"

              \u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 Logger MDC auto-instrumentation\u3002

              \u65e5\u5fd7\u6846\u67b6 \u652f\u6301\u81ea\u52a8\u57cb\u70b9\u7684\u7248\u672c \u624b\u52a8\u57cb\u70b9\u9700\u8981\u5f15\u5165\u7684\u4f9d\u8d56 Log4j 1 1.2+ \u65e0 Log4j 2 2.7+ opentelemetry-log4j-context-data-2.17-autoconfigure Logback 1.0+ opentelemetry-logback-mdc-1.0"},{"location":"end-user/insight/quickstart/otel/java/mdc.html#logbackspringboot","title":"\u4f7f\u7528 Logback\uff08SpringBoot \u9879\u76ee\uff09","text":"

              Spring Boot \u9879\u76ee\u5185\u7f6e\u4e86\u65e5\u5fd7\u6846\u67b6\uff0c\u5e76\u4e14\u9ed8\u8ba4\u4f7f\u7528 Logback \u4f5c\u4e3a\u5176\u65e5\u5fd7\u5b9e\u73b0\u3002\u5982\u679c\u60a8\u7684 Java \u9879\u76ee\u4e3a SpringBoot \u9879\u76ee\uff0c\u53ea\u9700\u5c11\u91cf\u914d\u7f6e\u5373\u53ef\u5c06 TraceId \u5199\u5165\u65e5\u5fd7\u3002

              \u5728 application.properties \u4e2d\u8bbe\u7f6e logging.pattern.level\uff0c\u6dfb\u52a0 %mdc{trace_id} \u4e0e %mdc{span_id} \u5230\u65e5\u5fd7\u4e2d\u3002

              logging.pattern.level=trace_id=%mdc{trace_id} span_id=%mdc{span_id} %5p ....\u7701\u7565...\n

              \u4ee5\u4e0b\u4e3a\u65e5\u5fd7\u793a\u4f8b\uff1a

              2024-06-26 10:56:31.200 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'\n2024-06-26 10:56:31.201 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'\n2024-06-26 10:56:31.209 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=1b08f18b8858bb9a  INFO 53724 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms\n2024-06-26 10:56:31.296 trace_id=8f7ebd8a73f9a8f50e6a00a87a20952a span_id=5743699405074f4e  INFO 53724 --- [nio-8081-exec-1] com.example.httpserver.ot.OTServer       : hello world\n
              "},{"location":"end-user/insight/quickstart/otel/java/mdc.html#log4j2","title":"\u4f7f\u7528 Log4j2","text":"
              1. \u5728 pom.xml \u4e2d\u6dfb\u52a0 OpenTelemetry Log4j2 \u4f9d\u8d56:

                Tip

                \u8bf7\u5c06 OPENTELEMETRY_VERSION \u66ff\u6362\u4e3a\u6700\u65b0\u7248\u672c

                <dependencies>\n  <dependency>\n    <groupId>io.opentelemetry.instrumentation</groupId>\n    <artifactId>opentelemetry-log4j-context-data-2.17-autoconfigure</artifactId>\n    <version>OPENTELEMETRY_VERSION</version>\n    <scope>runtime</scope>\n  </dependency>\n</dependencies>\n
              2. \u4fee\u6539 log4j2.xml \u914d\u7f6e\uff0c\u5728 pattern \u4e2d\u6dfb\u52a0 %X{trace_id} \u4e0e %X{span_id}\uff0c\u53ef\u4ee5\u5c06 TraceId \u4e0e SpanId \u81ea\u52a8\u5199\u5165\u65e5\u5fd7:

                <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Configuration>\n  <Appenders>\n    <Console name=\"Console\" target=\"SYSTEM_OUT\">\n      <PatternLayout\n          pattern=\"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} - %msg%n\"/>\n    </Console>\n  </Appenders>\n  <Loggers>\n    <Root>\n      <AppenderRef ref=\"Console\" level=\"All\"/>\n    </Root>\n  </Loggers>\n</Configuration>\n
              3. \u4f7f\u7528 Logback \u5728 pom.xml \u4e2d\u6dfb\u52a0 OpenTelemetry Logback \u4f9d\u8d56\u3002

                Tip

                \u8bf7\u5c06 OPENTELEMETRY_VERSION \u66ff\u6362\u4e3a\u6700\u65b0\u7248\u672c

                <dependencies>\n  <dependency>\n    <groupId>io.opentelemetry.instrumentation</groupId>\n    <artifactId>opentelemetry-logback-mdc-1.0</artifactId>\n    <version>OPENTELEMETRY_VERSION</version>\n  </dependency>\n</dependencies>\n
              4. \u4fee\u6539 log4j2.xml \u914d\u7f6e\uff0c\u5728 pattern \u4e2d\u6dfb\u52a0 %X{trace_id} \u4e0e %X{span_id}\uff0c\u53ef\u4ee5\u5c06 TraceId \u4e0e SpanId \u81ea\u52a8\u5199\u5165\u65e5\u5fd7:

                <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n  <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">\n    <encoder>\n      <pattern>%d{HH:mm:ss.SSS} trace_id=%X{trace_id} span_id=%X{span_id} trace_flags=%X{trace_flags} %msg%n</pattern>\n    </encoder>\n  </appender>\n\n  <!-- Just wrap your logging appender, for example ConsoleAppender, with OpenTelemetryAppender -->\n  <appender name=\"OTEL\" class=\"io.opentelemetry.instrumentation.logback.mdc.v1_0.OpenTelemetryAppender\">\n    <appender-ref ref=\"CONSOLE\"/>\n  </appender>\n\n  <!-- Use the wrapped \"OTEL\" appender instead of the original \"CONSOLE\" one -->\n  <root level=\"INFO\">\n    <appender-ref ref=\"OTEL\"/>\n  </root>\n\n</configuration>\n
              "},{"location":"end-user/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html","title":"\u4f7f\u7528 JMX Exporter \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807","text":"

              JMX-Exporter \u63d0\u4f9b\u4e86\u4e24\u79cd\u7528\u6cd5:

              1. \u542f\u52a8\u72ec\u7acb\u8fdb\u7a0b\u3002JVM \u542f\u52a8\u65f6\u6307\u5b9a\u53c2\u6570\uff0c\u66b4\u9732 JMX \u7684 RMI \u63a5\u53e3\uff0cJMX Exporter \u8c03\u7528 RMI \u83b7\u53d6 JVM \u8fd0\u884c\u65f6\u72b6\u6001\u6570\u636e\uff0c \u8f6c\u6362\u4e3a Prometheus metrics \u683c\u5f0f\uff0c\u5e76\u66b4\u9732\u7aef\u53e3\u8ba9 Prometheus \u91c7\u96c6\u3002
              2. JVM \u8fdb\u7a0b\u5185\u542f\u52a8(in-process)\u3002JVM \u542f\u52a8\u65f6\u6307\u5b9a\u53c2\u6570\uff0c\u901a\u8fc7 javaagent \u7684\u5f62\u5f0f\u8fd0\u884c JMX-Exporter \u7684 jar \u5305\uff0c \u8fdb\u7a0b\u5185\u8bfb\u53d6 JVM \u8fd0\u884c\u65f6\u72b6\u6001\u6570\u636e\uff0c\u8f6c\u6362\u4e3a Prometheus metrics \u683c\u5f0f\uff0c\u5e76\u66b4\u9732\u7aef\u53e3\u8ba9 Prometheus \u91c7\u96c6\u3002

              Note

              \u5b98\u65b9\u4e0d\u63a8\u8350\u4f7f\u7528\u7b2c\u4e00\u79cd\u65b9\u5f0f\uff0c\u4e00\u65b9\u9762\u914d\u7f6e\u590d\u6742\uff0c\u53e6\u4e00\u65b9\u9762\u56e0\u4e3a\u5b83\u9700\u8981\u4e00\u4e2a\u5355\u72ec\u7684\u8fdb\u7a0b\uff0c\u800c\u8fd9\u4e2a\u8fdb\u7a0b\u672c\u8eab\u7684\u76d1\u63a7\u53c8\u6210\u4e86\u65b0\u7684\u95ee\u9898\uff0c \u6240\u4ee5\u672c\u6587\u91cd\u70b9\u56f4\u7ed5\u7b2c\u4e8c\u79cd\u7528\u6cd5\u8bb2\u5982\u4f55\u5728 Kubernetes \u73af\u5883\u4e0b\u4f7f\u7528 JMX Exporter \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807\u3002

              \u8fd9\u91cc\u4f7f\u7528\u7b2c\u4e8c\u79cd\u7528\u6cd5\uff0c\u542f\u52a8 JVM \u65f6\u9700\u8981\u6307\u5b9a JMX Exporter \u7684 jar \u5305\u6587\u4ef6\u548c\u914d\u7f6e\u6587\u4ef6\u3002 jar \u5305\u662f\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u4e0d\u597d\u901a\u8fc7 configmap \u6302\u8f7d\uff0c\u914d\u7f6e\u6587\u4ef6\u6211\u4eec\u51e0\u4e4e\u4e0d\u9700\u8981\u4fee\u6539\uff0c \u6240\u4ee5\u5efa\u8bae\u662f\u76f4\u63a5\u5c06 JMX Exporter \u7684 jar \u5305\u548c\u914d\u7f6e\u6587\u4ef6\u90fd\u6253\u5305\u5230\u4e1a\u52a1\u5bb9\u5668\u955c\u50cf\u4e2d\u3002

              \u5176\u4e2d\uff0c\u7b2c\u4e8c\u79cd\u65b9\u5f0f\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u5c06 JMX Exporter \u7684 jar \u6587\u4ef6\u653e\u5728\u4e1a\u52a1\u5e94\u7528\u955c\u50cf\u4e2d\uff0c \u4e5f\u53ef\u4ee5\u9009\u62e9\u5728\u90e8\u7f72\u7684\u65f6\u5019\u6302\u8f7d\u8fdb\u53bb\u3002\u8fd9\u91cc\u5206\u522b\u5bf9\u4e24\u79cd\u65b9\u5f0f\u505a\u4e00\u4e2a\u4ecb\u7ecd\uff1a

              "},{"location":"end-user/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html#jmx-exporter-jar","title":"\u65b9\u5f0f\u4e00\uff1a\u5c06 JMX Exporter JAR \u6587\u4ef6\u6784\u5efa\u81f3\u4e1a\u52a1\u955c\u50cf\u4e2d","text":"

              prometheus-jmx-config.yaml \u5185\u5bb9\u5982\u4e0b\uff1a

              prometheus-jmx-config.yaml
              ...\nssl: false\nlowercaseOutputName: false\nlowercaseOutputLabelNames: false\nrules:\n- pattern: \".*\"\n

              Note

              \u66f4\u591a\u914d\u7f6e\u9879\u8bf7\u53c2\u8003\u5e95\u90e8\u4ecb\u7ecd\u6216Prometheus \u5b98\u65b9\u6587\u6863\u3002

              \u7136\u540e\u51c6\u5907 jar \u5305\u6587\u4ef6\uff0c\u53ef\u4ee5\u5728 jmx_exporter \u7684 Github \u9875\u9762\u627e\u5230\u6700\u65b0\u7684 jar \u5305\u4e0b\u8f7d\u5730\u5740\u5e76\u53c2\u8003\u5982\u4e0b Dockerfile:

              FROM openjdk:11.0.15-jre\nWORKDIR /app/\nCOPY target/my-app.jar ./\nCOPY prometheus-jmx-config.yaml ./\nRUN set -ex; \\\n    curl -L -O https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar;\nENV JAVA_TOOL_OPTIONS=-javaagent:/app/jmx_prometheus_javaagent-0.17.2.jar=8088:/app/prometheus-jmx-config.yaml\nEXPOSE 8081 8999 8080 8888\nENTRYPOINT java $JAVA_OPTS -jar my-app.jar\n

              \u6ce8\u610f\uff1a

              • \u542f\u52a8\u53c2\u6570\u683c\u5f0f\uff1a-javaagent:=:
              • \u8fd9\u91cc\u4f7f\u7528\u4e86 8088 \u7aef\u53e3\u66b4\u9732 JVM \u7684\u76d1\u63a7\u6307\u6807\uff0c\u5982\u679c\u548c Java \u5e94\u7528\u51b2\u7a81\uff0c\u53ef\u81ea\u884c\u66f4\u6539
              "},{"location":"end-user/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html#init-container","title":"\u65b9\u5f0f\u4e8c\uff1a\u901a\u8fc7 init container \u5bb9\u5668\u6302\u8f7d","text":"

              \u6211\u4eec\u9700\u8981\u5148\u5c06 JMX exporter \u505a\u6210 Docker \u955c\u50cf, \u4ee5\u4e0b Dockerfile \u4ec5\u4f9b\u53c2\u8003\uff1a

              FROM alpine/curl:3.14\nWORKDIR /app/\n# \u5c06\u524d\u9762\u521b\u5efa\u7684 config \u6587\u4ef6\u62f7\u8d1d\u81f3\u955c\u50cf\nCOPY prometheus-jmx-config.yaml ./\n# \u5728\u7ebf\u4e0b\u8f7d jmx prometheus javaagent jar\nRUN set -ex; \\\n    curl -L -O https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar;\n

              \u6839\u636e\u4e0a\u9762 Dockerfile \u6784\u5efa\u955c\u50cf\uff1a docker build -t my-jmx-exporter .

              \u5728 Java \u5e94\u7528\u90e8\u7f72 Yaml \u4e2d\u52a0\u5165\u5982\u4e0b init container\uff1a

              \u70b9\u51fb\u5c55\u5f00 YAML \u6587\u4ef6
              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-demo-app\n  labels:\n    app: my-demo-app\nspec:\n  selector:\n    matchLabels:\n      app: my-demo-app\n  template:\n    metadata:\n      labels:\n        app: my-demo-app\n    spec:\n      imagePullSecrets:\n      - name: registry-pull\n      initContainers:\n      - name: jmx-sidecar\n        image: my-jmx-exporter\n        command: [\"cp\", \"-r\", \"/app/jmx_prometheus_javaagent-0.17.2.jar\", \"/target/jmx_prometheus_javaagent-0.17.2.jar\"]  \u278a\n        volumeMounts:\n        - name: sidecar\n          mountPath: /target\n      containers:\n      - image: my-demo-app-image\n        name: my-demo-app\n        resources:\n          requests:\n            memory: \"1000Mi\"\n            cpu: \"500m\"\n          limits:\n            memory: \"1000Mi\"\n            cpu: \"500m\"\n        ports:\n        - containerPort: 18083\n        env:\n        - name: JAVA_TOOL_OPTIONS\n          value: \"-javaagent:/app/jmx_prometheus_javaagent-0.17.2.jar=8088:/app/prometheus-jmx-config.yaml\" \u278b\n        volumeMounts:\n        - name: host-time\n          mountPath: /etc/localtime\n          readOnly: true\n        - name: sidecar\n          mountPath: /sidecar\n      volumes:\n      - name: host-time\n        hostPath:\n          path: /etc/localtime\n      - name: sidecar  #\u5171\u4eab agent \u6587\u4ef6\u5939\n        emptyDir: {}\n      restartPolicy: Always\n

              \u7ecf\u8fc7\u5982\u4e0a\u7684\u6539\u9020\u4e4b\u540e\uff0c\u793a\u4f8b\u5e94\u7528 my-demo-app \u5177\u5907\u4e86\u66b4\u9732 JVM \u6307\u6807\u7684\u80fd\u529b\u3002 \u8fd0\u884c\u670d\u52a1\u4e4b\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 http://lcoalhost:8088 \u8bbf\u95ee\u670d\u52a1\u66b4\u9732\u51fa\u6765\u7684 prometheus \u683c\u5f0f\u7684\u6307\u6807\u3002

              \u63a5\u7740\uff0c\u60a8\u53ef\u4ee5\u53c2\u8003 \u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027\u3002

              "},{"location":"end-user/insight/quickstart/otel/java/jvm-monitor/legacy-jvm.html","title":"\u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027","text":"

              \u5982\u679c\u60a8\u7684 Java \u5e94\u7528\u901a\u8fc7\u5176\u4ed6\u65b9\u5f0f\uff08\u6bd4\u5982 Spring Boot Actuator\uff09\u66b4\u9732\u4e86 JVM \u7684\u76d1\u63a7\u6307\u6807\uff0c \u6211\u4eec\u9700\u8981\u8ba9\u76d1\u63a7\u6570\u636e\u88ab\u91c7\u96c6\u5230\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u6dfb\u52a0\u6ce8\u89e3\uff08Kubernetes Annotations\uff09\u7684\u65b9\u5f0f\u8ba9 Insight \u6765\u91c7\u96c6\u5df2\u6709\u7684 JVM \u6307\u6807\uff1a

              annatation: \n  insight.opentelemetry.io/metric-scrape: \"true\" # \u662f\u5426\u91c7\u96c6\n  insight.opentelemetry.io/metric-path: \"/\"      # \u91c7\u96c6\u6307\u6807\u7684\u8def\u5f84\n  insight.opentelemetry.io/metric-port: \"9464\"   # \u91c7\u96c6\u6307\u6807\u7684\u7aef\u53e3\n

              \u4f8b\u5982\u4e3a my-deployment-app \u6dfb\u52a0\u6ce8\u89e3\uff1a

              apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-deployment-app\nspec:\n  selector:\n    matchLabels:\n      app: my-deployment-app\n      app.kubernetes.io/name: my-deployment-app\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: my-deployment-app\n        app.kubernetes.io/name: my-deployment-app\n      annotations:\n        insight.opentelemetry.io/metric-scrape: \"true\" # \u662f\u5426\u91c7\u96c6\n        insight.opentelemetry.io/metric-path: \"/\"      # \u91c7\u96c6\u6307\u6807\u7684\u8def\u5f84\n        insight.opentelemetry.io/metric-port: \"9464\"   # \u91c7\u96c6\u6307\u6807\u7684\u7aef\u53e3\n

              \u4ee5\u4e0b\u662f\u5b8c\u6574\u793a\u4f8b\uff1a

              ---\napiVersion: v1\nkind: Service\nmetadata:\n  name: spring-boot-actuator-prometheus-metrics-demo\nspec:\n  type: NodePort\n  selector:\n    #app: my-deployment-with-aotu-instrumentation-app\n    app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo\n  ports:\n    - name: http\n      port: 8080\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: spring-boot-actuator-prometheus-metrics-demo\nspec:\n  selector:\n    matchLabels:\n      #app: my-deployment-with-aotu-instrumentation-app\n      app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io/name: spring-boot-actuator-prometheus-metrics-demo\n      annotations:\n        insight.opentelemetry.io/metric-scrape: \"true\" # \u662f\u5426\u91c7\u96c6\n        insight.opentelemetry.io/metric-path: \"/actuator/prometheus\"      # \u91c7\u96c6\u6307\u6807\u7684\u8def\u5f84\n        insight.opentelemetry.io/metric-port: \"8080\"   # \u91c7\u96c6\u6307\u6807\u7684\u7aef\u53e3\n    spec:\n      containers:\n        - name: myapp\n          image: docker.m.daocloud.io/wutang/spring-boot-actuator-prometheus-metrics-demo\n          ports:\n            - name: http\n              containerPort: 8080\n          resources:\n            limits:\n              cpu: 500m\n              memory: 800Mi\n            requests:\n              cpu: 200m\n              memory: 400Mi\n

              \u4ee5\u4e0a\u793a\u4f8b\u4e2d\uff0cInsight \u4f1a\u901a\u8fc7 :8080//actuator/prometheus \u6293\u53d6\u901a\u8fc7 Spring Boot Actuator \u66b4\u9732\u51fa\u6765\u7684 Prometheus \u6307\u6807\u3002

              "},{"location":"end-user/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html","title":"\u4f7f\u7528 OpenTelemetry Java Agent \u66b4\u9732 JVM \u76d1\u63a7\u6307\u6807","text":"

              \u5728 Opentelemetry Agent v1.20.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\uff0cOpentelemetry Agent \u65b0\u589e\u4e86 JMX Metric Insight \u6a21\u5757\uff0c\u5982\u679c\u4f60\u7684\u5e94\u7528\u5df2\u7ecf\u96c6\u6210\u4e86 Opentelemetry Agent \u53bb\u91c7\u96c6\u5e94\u7528\u94fe\u8def\uff0c\u90a3\u4e48\u4f60\u4e0d\u518d\u9700\u8981\u53e6\u5916\u5f15\u5165\u5176\u4ed6 Agent \u53bb\u4e3a\u6211\u4eec\u7684\u5e94\u7528\u66b4\u9732 JMX \u6307\u6807\u3002Opentelemetry Agent \u4e5f\u662f\u901a\u8fc7\u68c0\u6d4b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u672c\u5730\u53ef\u7528\u7684 MBean \u516c\u5f00\u7684\u6307\u6807\uff0c\u5bf9\u5176\u8fdb\u884c\u6536\u96c6\u5e76\u66b4\u9732\u6307\u6807\u3002

              Opentelemetry Agent \u4e5f\u9488\u5bf9\u5e38\u89c1\u7684 Java Server \u6216\u6846\u67b6\u5185\u7f6e\u4e86\u4e00\u4e9b\u76d1\u63a7\u7684\u6837\u4f8b\uff0c\u8bf7\u53c2\u8003\u9884\u5b9a\u4e49\u7684\u6307\u6807\u3002

              \u4f7f\u7528 OpenTelemetry Java Agent \u540c\u6837\u9700\u8981\u8003\u8651\u5982\u4f55\u5c06 JAR \u6302\u8f7d\u8fdb\u5bb9\u5668\uff0c\u9664\u4e86\u53ef\u4ee5\u53c2\u8003\u4e0a\u9762 JMX Exporter \u6302\u8f7d JAR \u6587\u4ef6\u7684\u65b9\u5f0f\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u501f\u52a9 Opentelemetry \u63d0\u4f9b\u7684 Operator \u7684\u80fd\u529b\u6765\u5b9e\u73b0\u81ea\u52a8\u4e3a\u6211\u4eec\u7684\u5e94\u7528\u5f00\u542f JVM \u6307\u6807\u66b4\u9732\uff1a

              \u5982\u679c\u4f60\u7684\u5e94\u7528\u5df2\u7ecf\u96c6\u6210\u4e86 Opentelemetry Agent \u53bb\u91c7\u96c6\u5e94\u7528\u94fe\u8def\uff0c\u90a3\u4e48\u4f60\u4e0d\u518d\u9700\u8981\u53e6\u5916\u5f15\u5165\u5176\u4ed6 Agent \u53bb\u4e3a\u6211\u4eec\u7684\u5e94\u7528\u66b4\u9732 JMX \u6307\u6807\u3002Opentelemetry Agent \u901a\u8fc7\u68c0\u6d4b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u672c\u5730\u53ef\u7528\u7684 MBean \u516c\u5f00\u7684\u6307\u6807\uff0c\u73b0\u5728\u53ef\u4ee5\u672c\u5730\u6536\u96c6\u5e76\u66b4\u9732\u6307\u6807\u63a5\u53e3\u3002

              \u4f46\u662f\uff0c\u622a\u81f3\u76ee\u524d\u7248\u672c\uff0c\u4f60\u4ecd\u7136\u9700\u8981\u624b\u52a8\u4e3a\u5e94\u7528\u52a0\u4e0a\u76f8\u5e94\u6ce8\u89e3\u4e4b\u540e\uff0cJVM \u6570\u636e\u624d\u4f1a\u88ab Insight \u91c7\u96c6\u5230\uff0c\u5177\u4f53\u6ce8\u89e3\u5185\u5bb9\u8bf7\u53c2\u8003 \u5df2\u6709 JVM \u6307\u6807\u7684 Java \u5e94\u7528\u5bf9\u63a5\u53ef\u89c2\u6d4b\u6027\u3002

              "},{"location":"end-user/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html#java","title":"\u4e3a Java \u4e2d\u95f4\u4ef6\u66b4\u9732\u6307\u6807","text":"

              Opentelemetry Agent \u4e5f\u5185\u7f6e\u4e86\u4e00\u4e9b\u4e2d\u95f4\u4ef6\u76d1\u63a7\u7684\u6837\u4f8b\uff0c\u8bf7\u53c2\u8003 \u9884\u5b9a\u4e49\u6307\u6807\u3002

              \u9ed8\u8ba4\u6ca1\u6709\u6307\u5b9a\u4efb\u4f55\u7c7b\u578b\uff0c\u9700\u8981\u901a\u8fc7 -Dotel.jmx.target.system JVM Options \u6307\u5b9a,\u6bd4\u5982 -Dotel.jmx.target.system=jetty,kafka-broker \u3002

              "},{"location":"end-user/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html#_1","title":"\u53c2\u8003","text":"
              • Gaining JMX Metric Insights with the OpenTelemetry Java Agent

              • Otel jmx metrics

              "},{"location":"end-user/insight/quickstart/other/install-agent-on-ocp.html","title":"OpenShift \u5b89\u88c5 Insight Agent","text":"

              \u867d\u7136 OpenShift \u7cfb\u7edf\u81ea\u5e26\u4e86\u4e00\u5957\u76d1\u63a7\u7cfb\u7edf\uff0c\u56e0\u4e3a\u6570\u636e\u91c7\u96c6\u7ea6\u5b9a\u7684\u4e00\u4e9b\u89c4\u5219\uff0c\u6211\u4eec\u8fd8\u662f\u4f1a\u5b89\u88c5 Insight Agent\u3002

              \u5176\u4e2d\uff0c\u5b89\u9664\u4e86\u57fa\u7840\u7684\u5b89\u88c5\u914d\u7f6e\u4e4b\u5916\uff0chelm install \u7684\u65f6\u5019\u8fd8\u9700\u8981\u589e\u52a0\u5982\u4e0b\u7684\u53c2\u6570\uff1a

              ## \u9488\u5bf9 fluentbit \u76f8\u5173\u7684\u53c2\u6570\uff1b\n--set fluent-bit.ocp.enabled=true \\\n--set fluent-bit.serviceAccount.create=false \\\n--set fluent-bit.securityContext.runAsUser=0 \\\n--set fluent-bit.securityContext.seLinuxOptions.type=spc_t \\\n--set fluent-bit.securityContext.readOnlyRootFilesystem=false \\\n--set fluent-bit.securityContext.allowPrivilegeEscalation=false \\\n\n## \u542f\u7528\u9002\u914d OpenShift4.x \u7684 Prometheus(CR)\n--set compatibility.openshift.prometheus.enabled=true \\\n\n## \u5173\u95ed\u9ad8\u7248\u672c\u7684 Prometheus \u5b9e\u4f8b\n--set kube-prometheus-stack.prometheus.enabled=false \\\n--set kube-prometheus-stack.kubeApiServer.enabled=false \\\n--set kube-prometheus-stack.kubelet.enabled=false \\\n--set kube-prometheus-stack.kubeControllerManager.enabled=false \\\n--set kube-prometheus-stack.coreDns.enabled=false \\\n--set kube-prometheus-stack.kubeDns.enabled=false \\\n--set kube-prometheus-stack.kubeEtcd.enabled=false \\\n--set kube-prometheus-stack.kubeEtcd.enabled=false \\\n--set kube-prometheus-stack.kubeScheduler.enabled=false \\\n--set kube-prometheus-stack.kubeStateMetrics.enabled=false \\\n--set kube-prometheus-stack.nodeExporter.enabled=false \\\n\n## \u9650\u5236 PrometheusOperator \u5904\u7406\u7684 namespace\uff0c\u907f\u514d\u4e0e OpenShift \u81ea\u5e26\u7684 PrometheusOperator \u76f8\u4e92\u7ade\u4e89\n--set kube-prometheus-stack.prometheusOperator.kubeletService.namespace=\"insight-system\" \\\n--set kube-prometheus-stack.prometheusOperator.prometheusInstanceNamespaces=\"insight-system\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[0]=\"openshift-monitoring\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[1]=\"openshift-user-workload-monitoring\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[2]=\"openshift-customer-monitoring\" \\\n--set kube-prometheus-stack.prometheusOperator.denyNamespaces[3]=\"openshift-route-monitor-operator\" \\\n
              "},{"location":"end-user/insight/quickstart/other/install-agent-on-ocp.html#openshift-prometheus","title":"\u901a\u8fc7 OpenShift \u81ea\u8eab\u673a\u5236\uff0c\u5c06\u7cfb\u7edf\u76d1\u63a7\u6570\u636e\u5199\u5165 Prometheus \u4e2d","text":"
              apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: cluster-monitoring-config\n  namespace: openshift-monitoring\ndata:\n  config.yaml: |\n    prometheusK8s:\n      remoteWrite:\n        - queueConfig:\n            batchSendDeadline: 60s\n            maxBackoff: 5s\n            minBackoff: 30ms\n            minShards: 1\n            capacity: 5000\n            maxSamplesPerSend: 1000\n            maxShards: 100\n          remoteTimeout: 30s\n          url: http://insight-agent-prometheus.insight-system.svc.cluster.local:9090/api/v1/write\n          writeRelabelConfigs:\n            - action: keep\n              regex: etcd|kubelet|node-exporter|apiserver|kube-state-metrics\n              sourceLabels:\n                - job\n
              "},{"location":"end-user/insight/quickstart/res-plan/index.html","title":"\u90e8\u7f72\u5bb9\u91cf\u89c4\u5212","text":"

              \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u4e3a\u4e86\u907f\u514d\u6d88\u8017\u8fc7\u591a\u8d44\u6e90\uff0c\u5df2\u7ecf\u8bbe\u7f6e\u4e86\u8d44\u6e90\u4e0a\u7ebf\uff08resource limit\uff09\uff0c\u53ef\u89c2\u6d4b\u7cfb\u7edf\u9700\u8981\u5904\u7406\u5927\u91cf\u7684\u6570\u636e\uff0c\u5982\u679c\u5bb9\u91cf\u89c4\u5212\u4e0d\u5408\u7406\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8d1f\u8f7d\u8fc7\u9ad8\uff0c\u5f71\u54cd\u7a33\u5b9a\u6027\u548c\u53ef\u9760\u6027\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/index.html#_2","title":"\u89c2\u6d4b\u7ec4\u4ef6\u7684\u8d44\u6e90\u89c4\u5212","text":"

              \u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u5305\u542b Insight \u548c Insight Agent\u3002\u5176\u4e2d\uff0cInsight \u4e3b\u8981\u8d1f\u8d23\u89c2\u6d4b\u6570\u636e\u7684\u5b58\u50a8\uff0c\u5206\u6790\u4e0e\u5c55\u793a\u3002\u800c Insight Agent \u5305\u542b\u4e86\u6570\u636e\u91c7\u96c6\u3001\u6570\u636e\u5904\u7406\u3001\u6570\u636e\u4e0a\u4f20\u7b49\u529f\u80fd\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/index.html#_3","title":"\u5b58\u50a8\u7ec4\u4ef6\u7684\u5bb9\u91cf\u89c4\u5212","text":"

              Insight \u7684\u5b58\u50a8\u7ec4\u4ef6\u4e3b\u8981\u5305\u62ec ElasticSearch \u548c VictoriaMetrics. \u5176\u4e2d\uff0cElasticSearch \u4e3b\u8981\u8d1f\u8d23\u5b58\u50a8\u548c\u67e5\u8be2\u65e5\u5fd7\u4e0e\u94fe\u8def\u6570\u636e\uff0cVictoriaMetrics \u4e3b\u8981\u8d1f\u8d23\u5b58\u50a8\u548c\u67e5\u8be2\u6307\u6807\u6570\u636e\u3002

              • VictoriaMetircs: \u5176\u78c1\u76d8\u7528\u91cf\u4e0e\u5b58\u50a8\u7684\u6307\u6807\u6709\u5173\uff0c\u6839\u636e vmstorage \u7684\u78c1\u76d8\u89c4\u5212 \u9884\u4f30\u5bb9\u91cf\u540e \u8c03\u6574 vmstorage \u78c1\u76d8\u3002
              "},{"location":"end-user/insight/quickstart/res-plan/index.html#_4","title":"\u91c7\u96c6\u5668\u7684\u8d44\u6e90\u89c4\u5212","text":"

              Insight Agent \u7684\u91c7\u96c6\u5668\u4e2d\u5305\u542b Proemtheus\uff0c\u867d\u7136 Prometheus \u672c\u8eab\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u7ec4\u4ef6\uff0c\u4f46\u662f\u5728 Insight Agent \u4e2d\uff0cPrometheus \u4f1a\u88ab\u7528\u4e8e\u91c7\u96c6\u6570\u636e\uff0c\u56e0\u6b64\u9700\u8981\u5bf9 Prometheus \u7684\u8d44\u6e90\u8fdb\u884c\u89c4\u5212\u3002

              • Prometheus\uff1a\u5176\u8d44\u6e90\u7528\u91cf\u4e0e\u91c7\u96c6\u7684\u6307\u6807\u91cf\u6709\u5173\uff0c\u53ef\u4ee5\u53c2\u8003 Prometheus \u8d44\u6e90\u89c4\u5212 \u8fdb\u884c\u8c03\u6574\u3002
              "},{"location":"end-user/insight/quickstart/res-plan/modify-vms-disk.html","title":"vmstorge \u78c1\u76d8\u6269\u5bb9","text":"

              \u672c\u6587\u63cf\u8ff0\u4e86 vmstorge \u78c1\u76d8\u6269\u5bb9\u7684\u65b9\u6cd5\uff0c vmstorge \u78c1\u76d8\u89c4\u8303\u8bf7\u53c2\u8003 vmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/modify-vms-disk.html#_1","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"end-user/insight/quickstart/res-plan/modify-vms-disk.html#_2","title":"\u5f00\u542f\u5b58\u50a8\u6c60\u6269\u5bb9","text":"
              1. \u4ee5\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7ba1\u7406\u5458\u6743\u9650\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\uff0c\u70b9\u51fb \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb kpanda-global-cluster \u96c6\u7fa4\u3002

              2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \uff0c\u627e\u5230 vmstorage \u7ed1\u5b9a\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

              3. \u70b9\u51fb\u67d0\u4e2a vmstorage PVC\uff0c\u8fdb\u5165 vmstorage \u7684\u6570\u636e\u5377\u58f0\u660e\u8be6\u60c5\uff0c\u786e\u8ba4\u8be5 PVC \u7ed1\u5b9a\u7684\u5b58\u50a8\u6c60\u3002

              4. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u5b58\u50a8\u6c60(SC) \uff0c\u627e\u5230 local-path \uff0c\u70b9\u51fb\u76ee\u6807\u53f3\u4fa7\u7684 \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u7f16\u8f91 \u3002

              5. \u5f00\u542f \u6269\u5bb9 \u540e\u70b9\u51fb \u786e\u5b9a \u3002

              "},{"location":"end-user/insight/quickstart/res-plan/modify-vms-disk.html#vmstorage","title":"\u66f4\u6539 vmstorage \u7684\u78c1\u76d8\u5bb9\u91cf","text":"
              1. \u4ee5\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7ba1\u7406\u5458\u6743\u9650\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\uff0c\u8fdb\u5165 kpanda-global-cluster \u96c6\u7fa4\u8be6\u60c5\u3002

              2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u627e\u5230 vmcluster \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\u3002

              3. \u70b9\u51fb\u8be5 vmcluster \u81ea\u5b9a\u4e49\u8d44\u6e90\u8fdb\u5165\u8be6\u60c5\u9875\uff0c\u5207\u6362\u5230 insight-system \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u4ece insight-victoria-metrics-k8s-stack \u53f3\u4fa7\u83dc\u5355\u9009\u62e9 \u7f16\u8f91 YAML \u3002

              4. \u6839\u636e\u56fe\u4f8b\u4fee\u6539\u540e\u70b9\u51fb \u786e\u5b9a \u3002

              5. \u518d\u6b21\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \uff0c\u627e\u5230 vmstorage \u7ed1\u5b9a\u7684\u6570\u636e\u5377\u58f0\u660e\u786e\u8ba4\u4fee\u6539\u5df2\u751f\u6548\u3002\u5728\u67d0\u4e2a PVC \u8be6\u60c5\u9875\uff0c\u70b9\u51fb\u5173\u8054\u5b58\u50a8\u6e90 (PV)\u3002

              6. \u6253\u5f00\u6570\u636e\u5377\u8be6\u60c5\u9875\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u66f4\u65b0 \u6309\u94ae\u3002

              7. \u4fee\u6539 \u5bb9\u91cf \u540e\u70b9\u51fb \u786e\u5b9a \uff0c\u7a0d\u7b49\u7247\u523b\u7b49\u5230\u6269\u5bb9\u6210\u529f\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/modify-vms-disk.html#_3","title":"\u514b\u9686\u5b58\u50a8\u5377","text":"

              \u82e5\u5b58\u50a8\u5377\u6269\u5bb9\u5931\u8d25\uff0c\u53ef\u53c2\u8003\u4ee5\u4e0b\u65b9\u6cd5\u514b\u9686\u5b58\u50a8\u5377\u3002

              1. \u4ee5\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7ba1\u7406\u5458\u6743\u9650\u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\uff0c\u8fdb\u5165 kpanda-global-cluster \u96c6\u7fa4\u8be6\u60c5\u3002

              2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5de5\u4f5c\u8d1f\u8f7d -> \u6709\u72b6\u6001\u8d1f\u8f7d \uff0c\u627e\u5230 vmstorage \u7684\u6709\u72b6\u6001\u8d1f\u8f7d\uff0c\u70b9\u51fb\u76ee\u6807\u53f3\u4fa7\u7684 \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u72b6\u6001 -> \u505c\u6b62 -> \u786e\u5b9a \u3002

              3. \u5728\u547d\u4ee4\u884c\u4e2d\u767b\u5f55 kpanda-global-cluster \u96c6\u7fa4\u7684 master \u8282\u70b9\u540e\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u590d\u5236 vmstorage \u5bb9\u5668\u4e2d\u7684 vm-data \u76ee\u5f55\u5c06\u6307\u6807\u4fe1\u606f\u5b58\u50a8\u5728\u672c\u5730\uff1a

                kubectl cp -n insight-system vmstorage-insight-victoria-metrics-k8s-stack-1:vm-data ./vm-data\n
              4. \u767b\u5f55 AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u8fdb\u5165 kpanda-global-cluster \u96c6\u7fa4\u8be6\u60c5\uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u514b\u9686 \uff0c\u5e76\u4fee\u6539\u6570\u636e\u5377\u7684\u5bb9\u91cf\u3002

              5. \u5220\u9664\u4e4b\u524d vmstorage \u7684\u6570\u636e\u5377\u3002

              6. \u7a0d\u7b49\u7247\u523b\uff0c\u5f85\u5b58\u50a8\u5377\u58f0\u660e\u8ddf\u514b\u9686\u7684\u6570\u636e\u5377\u7ed1\u5b9a\u540e\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u5c06\u7b2c 3 \u6b65\u4e2d\u5bfc\u51fa\u7684\u6570\u636e\u5bfc\u5165\u5230\u5bf9\u5e94\u7684\u5bb9\u5668\u4e2d\uff0c\u7136\u540e\u5f00\u542f\u4e4b\u524d\u6682\u505c\u7684 vmstorage \u3002

                kubectl cp -n insight-system ./vm-data vmstorage-insight-victoria-metrics-k8s-stack-1:vm-data\n
              "},{"location":"end-user/insight/quickstart/res-plan/prometheus-res.html","title":"Prometheus \u8d44\u6e90\u89c4\u5212","text":"

              Prometheus \u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u53d7\u5230\u96c6\u7fa4\u5bb9\u5668\u6570\u91cf\u4ee5\u53ca\u5f00\u542f Istio \u7684\u5f71\u54cd\uff0c\u4f1a\u5bfc\u81f4 Prometheus \u7684 CPU\u3001\u5185\u5b58\u7b49\u8d44\u6e90\u4f7f\u7528\u91cf\u8d85\u51fa\u8bbe\u5b9a\u7684\u8d44\u6e90\u3002

              \u4e3a\u4e86\u4fdd\u8bc1\u4e0d\u540c\u89c4\u6a21\u96c6\u7fa4\u4e0b Prometheus \u7684\u6b63\u5e38\u8fd0\u884c\uff0c\u9700\u8981\u6839\u636e\u96c6\u7fa4\u7684\u5b9e\u9645\u89c4\u6a21\u5bf9 Prometheus \u8fdb\u884c\u8d44\u6e90\u8c03\u6574\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/prometheus-res.html#_1","title":"\u53c2\u8003\u8d44\u6e90\u89c4\u5212","text":"

              \u5728\u672a\u5f00\u542f\u7f51\u683c\u60c5\u51b5\u4e0b\uff0c\u6d4b\u8bd5\u60c5\u51b5\u7edf\u8ba1\u51fa\u7cfb\u7edf Job \u6307\u6807\u91cf\u4e0e Pod \u7684\u5173\u7cfb\u4e3a Series \u6570\u91cf = 800 * Pod \u6570\u91cf

              \u5728\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6\uff0c\u5f00\u542f\u529f\u80fd\u540e Pod \u4ea7\u751f\u7684 Istio \u76f8\u5173\u6307\u6807\u6570\u91cf\u7ea7\u4e3a Series \u6570\u91cf = 768 * Pod \u6570\u91cf

              "},{"location":"end-user/insight/quickstart/res-plan/prometheus-res.html#_2","title":"\u5f53\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6","text":"

              \u4ee5\u4e0b\u8d44\u6e90\u89c4\u5212\u4e3a \u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c \u573a\u666f\u4e0b\uff0cPrometheus \u7684\u8d44\u6e90\u89c4\u5212\u63a8\u8350\uff1a

              \u96c6\u7fa4\u89c4\u6a21(Pod \u6570) \u6307\u6807\u91cf(\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c) CPU(core) \u5185\u5b58(GB) 100 8w Request: 0.5Limit\uff1a1 Request\uff1a2GBLimit\uff1a4GB 200 16w Request\uff1a1Limit\uff1a1.5 Request\uff1a3GBLimit\uff1a6GB 300 24w Request\uff1a1Limit\uff1a2 Request\uff1a3GBLimit\uff1a6GB 400 32w Request\uff1a1Limit\uff1a2 Request\uff1a4GBLimit\uff1a8GB 500 40w Request\uff1a1.5Limit\uff1a3 Request\uff1a5GBLimit\uff1a10GB 800 64w Request\uff1a2Limit\uff1a4 Request\uff1a8GBLimit\uff1a16GB 1000 80w Request\uff1a2.5Limit\uff1a5 Request\uff1a9GBLimit\uff1a18GB 2000 160w Request\uff1a3.5Limit\uff1a7 Request\uff1a20GBLimit\uff1a40GB 3000 240w Request\uff1a4Limit\uff1a8 Request\uff1a33GBLimit\uff1a66GB"},{"location":"end-user/insight/quickstart/res-plan/prometheus-res.html#_3","title":"\u5f53\u5f00\u542f\u670d\u52a1\u7f51\u683c\u529f\u80fd\u65f6","text":"

              \u4ee5\u4e0b\u8d44\u6e90\u89c4\u5212\u4e3a \u5f00\u542f\u670d\u52a1\u7f51\u683c \u573a\u666f\u4e0b\uff0cPrometheus \u7684\u8d44\u6e90\u89c4\u5212\u63a8\u8350\uff1a

              \u96c6\u7fa4\u89c4\u6a21(Pod \u6570) \u6307\u6807\u91cf(\u5df2\u5f00\u542f\u670d\u52a1\u7f51\u683c) CPU(core) \u5185\u5b58(GB) 100 15w Request: 1Limit\uff1a2 Request\uff1a3GBLimit\uff1a6GB 200 31w Request\uff1a2Limit\uff1a3 Request\uff1a5GBLimit\uff1a10GB 300 46w Request\uff1a2Limit\uff1a4 Request\uff1a6GBLimit\uff1a12GB 400 62w Request\uff1a2Limit\uff1a4 Request\uff1a8GBLimit\uff1a16GB 500 78w Request\uff1a3Limit\uff1a6 Request\uff1a10GBLimit\uff1a20GB 800 125w Request\uff1a4Limit\uff1a8 Request\uff1a15GBLimit\uff1a30GB 1000 156w Request\uff1a5Limit\uff1a10 Request\uff1a18GBLimit\uff1a36GB 2000 312w Request\uff1a7Limit\uff1a14 Request\uff1a40GBLimit\uff1a80GB 3000 468w Request\uff1a8Limit\uff1a16 Request\uff1a65GBLimit\uff1a130GB

              Note

              1. \u8868\u683c\u4e2d\u7684 Pod \u6570\u91cf \u6307\u96c6\u7fa4\u4e2d\u57fa\u672c\u7a33\u5b9a\u8fd0\u884c\u7684 Pod \u6570\u91cf\uff0c\u5982\u51fa\u73b0\u5927\u91cf\u7684 Pod \u91cd\u542f\uff0c\u5219\u4f1a\u9020\u6210\u77ed\u65f6\u95f4\u5185\u6307\u6807\u91cf\u7684\u9661\u589e\uff0c\u6b64\u65f6\u8d44\u6e90\u9700\u8981\u8fdb\u884c\u76f8\u5e94\u4e0a\u8c03\u3002
              2. Prometheus \u5185\u5b58\u4e2d\u9ed8\u8ba4\u4fdd\u5b58\u4e24\u5c0f\u65f6\u6570\u636e\uff0c\u4e14\u96c6\u7fa4\u4e2d\u5f00\u542f\u4e86 Remote Write \u529f\u80fd\u65f6\uff0c\u4f1a\u5360\u7528\u4e00\u5b9a\u5185\u5b58\uff0c\u8d44\u6e90\u8d85\u914d\u6bd4\u5efa\u8bae\u914d\u7f6e\u4e3a 2\u3002
              3. \u8868\u683c\u4e2d\u6570\u636e\u4e3a\u63a8\u8350\u503c\uff0c\u9002\u7528\u4e8e\u901a\u7528\u60c5\u51b5\u3002\u5982\u73af\u5883\u6709\u7cbe\u786e\u7684\u8d44\u6e90\u8981\u6c42\uff0c\u5efa\u8bae\u5728\u96c6\u7fa4\u8fd0\u884c\u4e00\u6bb5\u65f6\u95f4\u540e\uff0c\u67e5\u770b\u5bf9\u5e94 Prometheus \u7684\u8d44\u6e90\u5360\u7528\u91cf\u8fdb\u884c\u7cbe\u786e\u914d\u7f6e\u3002
              "},{"location":"end-user/insight/quickstart/res-plan/vms-res-plan.html","title":"vmstorage \u78c1\u76d8\u5bb9\u91cf\u89c4\u5212","text":"

              vmstorage \u662f\u8d1f\u8d23\u5b58\u50a8\u53ef\u89c2\u6d4b\u6027\u591a\u96c6\u7fa4\u6307\u6807\u3002 \u4e3a\u4fdd\u8bc1 vmstorage \u7684\u7a33\u5b9a\u6027\uff0c\u9700\u8981\u6839\u636e\u96c6\u7fa4\u6570\u91cf\u53ca\u96c6\u7fa4\u89c4\u6a21\u8c03\u6574 vmstorage \u7684\u78c1\u76d8\u5bb9\u91cf\u3002 \u66f4\u591a\u8d44\u6599\u8bf7\u53c2\u8003 vmstorage \u4fdd\u7559\u671f\u4e0e\u78c1\u76d8\u7a7a\u95f4\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/vms-res-plan.html#_1","title":"\u6d4b\u8bd5\u7ed3\u679c","text":"

              \u7ecf\u8fc7 14 \u5929\u5bf9\u4e0d\u540c\u89c4\u6a21\u7684\u96c6\u7fa4\u7684 vmstorage \u7684\u78c1\u76d8\u89c2\u6d4b\uff0c \u6211\u4eec\u53d1\u73b0 vmstorage \u7684\u78c1\u76d8\u7528\u91cf\u4e0e\u5176\u5b58\u50a8\u7684\u6307\u6807\u91cf\u548c\u5355\u4e2a\u6570\u636e\u70b9\u5360\u7528\u78c1\u76d8\u6b63\u76f8\u5173\u3002

              1. \u77ac\u65f6\u5b58\u50a8\u7684\u6307\u6807\u91cf increase(vm_rows{ type != \"indexdb\"}[30s]) \u4ee5\u83b7\u53d6 30s \u5185\u589e\u52a0\u7684\u6307\u6807\u91cf
              2. \u5355\u4e2a\u6570\u636e\u70b9 (datapoint) \u7684\u5360\u7528\u78c1\u76d8\uff1a sum(vm_data_size_bytes{type!=\"indexdb\"}) /\u00a0sum(vm_rows{type\u00a0!=\u00a0\"indexdb\"})
              "},{"location":"end-user/insight/quickstart/res-plan/vms-res-plan.html#_2","title":"\u8ba1\u7b97\u65b9\u6cd5","text":"

              \u78c1\u76d8\u7528\u91cf = \u77ac\u65f6\u6307\u6807\u91cf x 2 x \u5355\u4e2a\u6570\u636e\u70b9\u7684\u5360\u7528\u78c1\u76d8 x 60 x 24 x \u5b58\u50a8\u65f6\u95f4 (\u5929)

              \u53c2\u6570\u8bf4\u660e\uff1a

              1. \u78c1\u76d8\u7528\u91cf\u5355\u4f4d\u4e3a Byte \u3002
              2. \u5b58\u50a8\u65f6\u957f(\u5929) x 60 x 24 \u5c06\u65f6\u95f4(\u5929)\u6362\u7b97\u6210\u5206\u949f\u4ee5\u4fbf\u8ba1\u7b97\u78c1\u76d8\u7528\u91cf\u3002
              3. Insight Agent \u4e2d Prometheus \u9ed8\u8ba4\u91c7\u96c6\u65f6\u95f4\u4e3a 30s \uff0c\u6545\u5728 1 \u5206\u949f\u5185\u4ea7\u751f\u4e24\u500d\u7684\u6307\u6807\u91cf\u3002
              4. vmstorage \u4e2d\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 1 \u4e2a\u6708\uff0c\u4fee\u6539\u914d\u7f6e\u8bf7\u53c2\u8003\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e\u3002

              Warning

              \u8be5\u516c\u5f0f\u4e3a\u901a\u7528\u65b9\u6848\uff0c\u5efa\u8bae\u5728\u8ba1\u7b97\u7ed3\u679c\u4e0a\u9884\u7559\u5197\u4f59\u78c1\u76d8\u5bb9\u91cf\u4ee5\u4fdd\u8bc1 vmstorage \u7684\u6b63\u5e38\u8fd0\u884c\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/vms-res-plan.html#_3","title":"\u53c2\u8003\u5bb9\u91cf","text":"

              \u8868\u683c\u4e2d\u6570\u636e\u662f\u6839\u636e\u9ed8\u8ba4\u5b58\u50a8\u65f6\u95f4\u4e3a\u4e00\u4e2a\u6708 (30 \u5929)\uff0c\u5355\u4e2a\u6570\u636e\u70b9 (datapoint) \u7684\u5360\u7528\u78c1\u76d8\u53d6 0.9 \u8ba1\u7b97\u6240\u5f97\u7ed3\u679c\u3002 \u591a\u96c6\u7fa4\u573a\u666f\u4e0b\uff0cPod \u6570\u91cf\u8868\u793a\u591a\u96c6\u7fa4 Pod \u6570\u91cf\u7684\u603b\u548c\u3002

              "},{"location":"end-user/insight/quickstart/res-plan/vms-res-plan.html#_4","title":"\u5f53\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6","text":"\u96c6\u7fa4\u89c4\u6a21 (Pod \u6570) \u6307\u6807\u91cf \u78c1\u76d8\u5bb9\u91cf 100 8w 6 GiB 200 16w 12 GiB 300 24w 18 GiB 400 32w 24 GiB 500 40w 30 GiB 800 64w 48 GiB 1000 80w 60 GiB 2000 160w 120 GiB 3000 240w 180 GiB"},{"location":"end-user/insight/quickstart/res-plan/vms-res-plan.html#_5","title":"\u5f53\u5f00\u542f\u670d\u52a1\u7f51\u683c\u65f6","text":"\u96c6\u7fa4\u89c4\u6a21 (Pod \u6570) \u6307\u6807\u91cf \u78c1\u76d8\u5bb9\u91cf 100 15w 12 GiB 200 31w 24 GiB 300 46w 36 GiB 400 62w 48 GiB 500 78w 60 GiB 800 125w 94 GiB 1000 156w 120 GiB 2000 312w 235 GiB 3000 468w 350 GiB"},{"location":"end-user/insight/quickstart/res-plan/vms-res-plan.html#_6","title":"\u4e3e\u4f8b\u8bf4\u660e","text":"

              AI \u7b97\u529b\u4e2d\u5fc3 \u5e73\u53f0\u4e2d\u6709\u4e24\u4e2a\u96c6\u7fa4\uff0c\u5176\u4e2d\u5168\u5c40\u670d\u52a1\u96c6\u7fa4(\u5f00\u542f\u670d\u52a1\u7f51\u683c)\u4e2d\u8fd0\u884c 500 \u4e2a Pod\uff0c\u5de5\u4f5c\u96c6\u7fa4(\u672a\u5f00\u542f\u670d\u52a1\u7f51\u683c)\u8fd0\u884c\u4e86 1000 \u4e2a Pod\uff0c\u9884\u671f\u6307\u6807\u5b58 30 \u5929\u3002

              • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u6307\u6807\u91cf\u4e3a 800x500 + 768x500 = 784000
              • \u5de5\u4f5c\u96c6\u7fa4\u6307\u6807\u91cf\u4e3a 800x1000 = 800000

              \u5219\u5f53\u524d vmstorage \u78c1\u76d8\u7528\u91cf\u5e94\u8bbe\u7f6e\u4e3a (784000+80000)x2x0.9x60x24x31 = 124384896000 byte = 116 GiB

              Note

              \u96c6\u7fa4\u4e2d\u6307\u6807\u91cf\u4e0e Pod \u6570\u91cf\u7684\u5173\u7cfb\u53ef\u53c2\u8003 Prometheus \u8d44\u6e90\u89c4\u5212\u3002

              "},{"location":"end-user/insight/system-config/modify-config.html","title":"\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e","text":"

              \u53ef\u89c2\u6d4b\u6027\u4f1a\u9ed8\u8ba4\u6301\u4e45\u5316\u4fdd\u5b58\u6307\u6807\u3001\u65e5\u5fd7\u3001\u94fe\u8def\u7684\u6570\u636e\uff0c\u60a8\u53ef\u53c2\u9605\u672c\u6587\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e\u3002\u8be5\u6587\u6863\u4ec5\u9002\u7528\u4e8e\u5185\u7f6e\u90e8\u7f72\u7684 Elasticsearch\uff0c\u82e5\u4f7f\u7528\u5916\u90e8 Elasticsearch \u53ef\u81ea\u884c\u8c03\u6574\u3002

              "},{"location":"end-user/insight/system-config/modify-config.html#_2","title":"\u5982\u4f55\u4fee\u6539\u6307\u6807\u6570\u636e\u4fdd\u7559\u671f\u9650","text":"

              \u5148 ssh \u767b\u5f55\u5230\u5bf9\u5e94\u7684\u8282\u70b9\uff0c\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u6307\u6807\u6570\u636e\u4fdd\u7559\u671f\u9650\u3002

              1. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

                kubectl edit vmcluster insight-victoria-metrics-k8s-stack -n insight-system\n
              2. \u5728 Yaml \u6587\u4ef6\u4e2d\uff0c retentionPeriod \u7684\u9ed8\u8ba4\u503c\u4e3a 14 \uff0c\u5355\u4f4d\u4e3a \u5929 \u3002\u60a8\u53ef\u6839\u636e\u9700\u6c42\u4fee\u6539\u53c2\u6570\u3002

                apiVersion: operator.victoriametrics.com/v1beta1\nkind: VMCluster\nmetadata:\n  annotations:\n    meta.helm.sh/release-name: insight\n    meta.helm.sh/release-namespace: insight-system\n  creationTimestamp: \"2022-08-25T04:31:02Z\"\n  finalizers:\n  - apps.victoriametrics.com/finalizer\n  generation: 2\n  labels:\n    app.kubernetes.io/instance: insight\n    app.kubernetes.io/managed-by: Helm\n    app.kubernetes.io/name: victoria-metrics-k8s-stack\n    app.kubernetes.io/version: 1.77.2\n    helm.sh/chart: victoria-metrics-k8s-stack-0.9.3\n  name: insight-victoria-metrics-k8s-stack\n  namespace: insight-system\n  resourceVersion: \"123007381\"\n  uid: 55cee8d6-c651-404b-b2c9-50603b405b54\nspec:\n  replicationFactor: 1\n  retentionPeriod: \"14\"\n  vminsert:\n    extraArgs:\n      maxLabelsPerTimeseries: \"45\"\n    image:\n      repository: docker.m.daocloud.io/victoriametrics/vminsert\n      tag: v1.80.0-cluster\n      replicaCount: 1\n
              3. \u4fdd\u5b58\u4fee\u6539\u540e\uff0c\u8d1f\u8d23\u5b58\u50a8\u6307\u6807\u7684\u7ec4\u4ef6\u7684\u5bb9\u5668\u7ec4\u4f1a\u81ea\u52a8\u91cd\u542f\uff0c\u7a0d\u7b49\u7247\u523b\u5373\u53ef\u3002

              "},{"location":"end-user/insight/system-config/modify-config.html#_3","title":"\u5982\u4f55\u4fee\u6539\u65e5\u5fd7\u6570\u636e\u5b58\u50a8\u65f6\u957f","text":"

              \u5148 ssh \u767b\u5f55\u5230\u5bf9\u5e94\u7684\u8282\u70b9\uff0c\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u65e5\u5fd7\u6570\u636e\u4fdd\u7559\u671f\u9650\uff1a

              "},{"location":"end-user/insight/system-config/modify-config.html#json","title":"\u65b9\u6cd5\u4e00\uff1a\u4fee\u6539 Json \u6587\u4ef6","text":"
              1. \u4fee\u6539\u4ee5\u4e0b\u6587\u4ef6\u4e2d rollover \u5b57\u6bb5\u4e2d\u7684 max_age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002\u6ce8\u610f\u9700\u8981\u4fee\u6539\u7b2c\u4e00\u884c\u4e2d\u7684 Elastic \u7528\u6237\u540d\u548c\u5bc6\u7801\u3001IP \u5730\u5740\u548c\u7d22\u5f15\u3002

                curl  --insecure --location -u\"elastic:amyVt4o826e322TUVi13Ezw6\" -X PUT \"https://172.30.47.112:30468/_ilm/policy/insight-es-k8s-logs-policy?pretty\" -H 'Content-Type: application/json' -d'\n{\n    \"policy\": {\n        \"phases\": {\n            \"hot\": {\n                \"min_age\": \"0ms\",\n                \"actions\": {\n                    \"set_priority\": {\n                        \"priority\": 100\n                    },\n                    \"rollover\": {\n                        \"max_age\": \"8d\",\n                        \"max_size\": \"10gb\"\n                    }\n                }\n            },\n            \"warm\": {\n                \"min_age\": \"10d\",\n                \"actions\": {\n                    \"forcemerge\": {\n                        \"max_num_segments\": 1\n                    }\n                }\n            },\n            \"delete\": {\n                \"min_age\": \"30d\",\n                \"actions\": {\n                    \"delete\": {}\n                }\n            }\n        }\n    }\n}'\n
              2. \u4fee\u6539\u5b8c\u540e\uff0c\u6267\u884c\u4ee5\u4e0a\u547d\u4ee4\u3002\u5b83\u4f1a\u6253\u5370\u51fa\u5982\u4e0b\u6240\u793a\u5185\u5bb9\uff0c\u5219\u4fee\u6539\u6210\u529f\u3002

                {\n\"acknowledged\" : true\n}\n
              "},{"location":"end-user/insight/system-config/modify-config.html#ui","title":"\u65b9\u6cd5\u4e8c\uff1a\u4ece UI \u4fee\u6539","text":"
              1. \u767b\u5f55 kibana \uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f Stack Management \u3002

              2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a Index Lifecycle Polices \uff0c\u5e76\u627e\u5230\u7d22\u5f15 insight-es-k8s-logs-policy \uff0c\u70b9\u51fb\u8fdb\u5165\u8be6\u60c5\u3002

              3. \u5c55\u5f00 Hot phase \u914d\u7f6e\u9762\u677f\uff0c\u4fee\u6539 Maximum age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002

              4. \u4fee\u6539\u5b8c\u540e\uff0c\u70b9\u51fb\u9875\u9762\u5e95\u90e8\u7684 Save policy \u5373\u4fee\u6539\u6210\u529f\u3002

              "},{"location":"end-user/insight/system-config/modify-config.html#_4","title":"\u5982\u4f55\u4fee\u6539\u94fe\u8def\u6570\u636e\u5b58\u50a8\u65f6\u957f","text":"

              \u5148 ssh \u767b\u5f55\u5230\u5bf9\u5e94\u7684\u8282\u70b9\uff0c\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u94fe\u8def\u6570\u636e\u4fdd\u7559\u671f\u9650\uff1a

              "},{"location":"end-user/insight/system-config/modify-config.html#json_1","title":"\u65b9\u6cd5\u4e00\uff1a\u4fee\u6539 Json \u6587\u4ef6","text":"
              1. \u4fee\u6539\u4ee5\u4e0b\u6587\u4ef6\u4e2d rollover \u5b57\u6bb5\u4e2d\u7684 max_age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002\u6ce8\u610f\u9700\u8981\u4fee\u6539\u7b2c\u4e00\u884c\u4e2d\u7684 Elastic \u7528\u6237\u540d\u548c\u5bc6\u7801\u3001IP \u5730\u5740\u548c\u7d22\u5f15\u3002

                curl --insecure --location -u\"elastic:amyVt4o826e322TUVi13Ezw6\" -X PUT \"https://172.30.47.112:30468/_ilm/policy/jaeger-ilm-policy?pretty\" -H 'Content-Type: application/json' -d'\n{\n    \"policy\": {\n        \"phases\": {\n            \"hot\": {\n                \"min_age\": \"0ms\",\n                \"actions\": {\n                    \"set_priority\": {\n                        \"priority\": 100\n                    },\n                    \"rollover\": {\n                        \"max_age\": \"6d\",\n                        \"max_size\": \"10gb\"\n                    }\n                }\n            },\n            \"warm\": {\n                \"min_age\": \"10d\",\n                \"actions\": {\n                    \"forcemerge\": {\n                        \"max_num_segments\": 1\n                    }\n                }\n            },\n            \"delete\": {\n                \"min_age\": \"30d\",\n                \"actions\": {\n                    \"delete\": {}\n                }\n            }\n        }\n    }\n}'\n
              2. \u4fee\u6539\u5b8c\u540e\uff0c\u5728\u63a7\u5236\u53f0\u6267\u884c\u4ee5\u4e0a\u547d\u4ee4\u3002\u5b83\u4f1a\u6253\u5370\u51fa\u5982\u4e0b\u6240\u793a\u5185\u5bb9\uff0c\u5219\u4fee\u6539\u6210\u529f\u3002

                {\n\"acknowledged\" : true\n}\n
              "},{"location":"end-user/insight/system-config/modify-config.html#ui_1","title":"\u65b9\u6cd5\u4e8c\uff1a\u4ece UI \u4fee\u6539","text":"
              1. \u767b\u5f55 kibana \uff0c\u9009\u62e9\u5de6\u4fa7\u5bfc\u822a\u680f Stack Management \u3002

              2. \u9009\u62e9\u5de6\u4fa7\u5bfc\u822a Index Lifecycle Polices \uff0c\u5e76\u627e\u5230\u7d22\u5f15 jaeger-ilm-policy \uff0c\u70b9\u51fb\u8fdb\u5165\u8be6\u60c5\u3002

              3. \u5c55\u5f00 Hot phase \u914d\u7f6e\u9762\u677f\uff0c\u4fee\u6539 Maximum age \u53c2\u6570\uff0c\u5e76\u8bbe\u7f6e\u4fdd\u7559\u671f\u9650\uff0c\u9ed8\u8ba4\u5b58\u50a8\u65f6\u957f\u4e3a 7d \u3002

              4. \u4fee\u6539\u5b8c\u540e\uff0c\u70b9\u51fb\u9875\u9762\u5e95\u90e8\u7684 Save policy \u5373\u4fee\u6539\u6210\u529f\u3002

              "},{"location":"end-user/insight/system-config/system-component.html","title":"\u7cfb\u7edf\u7ec4\u4ef6","text":"

              \u5728\u7cfb\u7edf\u7ec4\u4ef6\u9875\u9762\u53ef\u5feb\u901f\u7684\u67e5\u770b\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u4e2d\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u72b6\u6001\uff0c\u5f53\u7cfb\u7528\u7ec4\u4ef6\u53d1\u751f\u6545\u969c\u65f6\uff0c\u4f1a\u5bfc\u81f4\u53ef\u89c2\u6d4b\u6a21\u5757\u4e2d\u7684\u90e8\u5206\u529f\u80fd\u4e0d\u53ef\u7528\u3002

              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\uff0c
              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u7cfb\u7edf\u7ba1\u7406 -> \u7cfb\u7edf\u7ec4\u4ef6 \u3002

              "},{"location":"end-user/insight/system-config/system-component.html#_2","title":"\u7ec4\u4ef6\u8bf4\u660e","text":"\u6a21\u5757 \u7ec4\u4ef6\u540d\u79f0 \u8bf4\u660e \u6307\u6807 vminsert-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u5c06\u5404\u96c6\u7fa4\u4e2d Prometheus \u91c7\u96c6\u5230\u7684\u6307\u6807\u6570\u636e\u5199\u5165\u5b58\u50a8\u7ec4\u4ef6\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u5199\u5165\u5de5\u4f5c\u96c6\u7fa4\u7684\u6307\u6807\u6570\u636e\u3002 \u6307\u6807 vmalert-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u751f\u6548 VM Rule \u4e2d\u914d\u7f6e\u7684 recording \u548c Alert \u89c4\u5219\uff0c\u5e76\u5c06\u89e6\u53d1\u7684\u544a\u8b66\u89c4\u5219\u53d1\u9001\u7ed9 alertmanager\u3002 \u6307\u6807 vmalertmanager-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u5728\u544a\u8b66\u89e6\u65f6\u53d1\u9001\u6d88\u606f\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u53d1\u9001\u544a\u8b66\u4fe1\u606f\u3002 \u6307\u6807 vmselect-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u67e5\u8be2\u6307\u6807\u6570\u636e\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u67e5\u8be2\u6307\u6807\u3002 \u6307\u6807 vmstorage-insight-victoria-metrics-k8s-stack \u8d1f\u8d23\u5b58\u50a8\u591a\u96c6\u7fa4\u7684\u6307\u6807\u6570\u636e\u3002 \u4eea\u8868\u76d8 grafana-deployment \u63d0\u4f9b\u76d1\u63a7\u9762\u677f\u80fd\u529b\u3002\u8be5\u7ec4\u4ef6\u5f02\u5e38\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u67e5\u770b\u5185\u7f6e\u7684\u4eea\u8868\u76d8\u3002 \u94fe\u8def insight-jaeger-collector \u8d1f\u8d23\u63a5\u6536\u00a0opentelemetry-collector\u00a0\u4e2d\u94fe\u8def\u6570\u636e\u5e76\u5c06\u5176\u8fdb\u884c\u5b58\u50a8\u3002 \u94fe\u8def insight-jaeger-query \u8d1f\u8d23\u67e5\u8be2\u5404\u96c6\u7fa4\u4e2d\u91c7\u96c6\u5230\u7684\u94fe\u8def\u6570\u636e\u3002 \u94fe\u8def insight-opentelemetry-collector \u8d1f\u8d23\u63a5\u6536\u5404\u5b50\u96c6\u7fa4\u8f6c\u53d1\u7684\u94fe\u8def\u6570\u636e \u65e5\u5fd7 elasticsearch \u8d1f\u8d23\u5b58\u50a8\u5404\u96c6\u7fa4\u7684\u65e5\u5fd7\u6570\u636e\u3002

              Note

              \u82e5\u4f7f\u7528\u5916\u90e8 Elasticsearch \u53ef\u80fd\u65e0\u6cd5\u83b7\u53d6\u90e8\u5206\u6570\u636e\u4ee5\u81f4\u4e8e Elasticsearch \u7684\u4fe1\u606f\u4e3a\u7a7a\u3002

              "},{"location":"end-user/insight/system-config/system-config.html","title":"\u7cfb\u7edf\u914d\u7f6e","text":"

              \u7cfb\u7edf\u914d\u7f6e \u5c55\u793a\u6307\u6807\u3001\u65e5\u5fd7\u3001\u94fe\u8def\u9ed8\u8ba4\u7684\u4fdd\u5b58\u65f6\u957f\u4ee5\u53ca\u9ed8\u8ba4\u7684 Apdex \u9608\u503c\u3002

              1. \u70b9\u51fb\u53f3\u4fa7\u5bfc\u822a\u680f\uff0c\u9009\u62e9 \u7cfb\u7edf\u914d\u7f6e\u3002

              2. \u4fee\u6539\u5386\u53f2\u544a\u8b66\u5b58\u50a8\u65f6\u957f\uff0c\u70b9\u51fb \u7f16\u8f91 \u8f93\u5165\u76ee\u6807\u65f6\u957f\u3002

                \u5f53\u5b58\u50a8\u65f6\u957f\u8bbe\u7f6e\u4e3a \"0\" \u5c06\u4e0d\u6e05\u9664\u5386\u53f2\u544a\u8b66\u3002

              3. \u4fee\u6539\u62d3\u6251\u56fe\u6e32\u67d3\u9ed8\u8ba4\u914d\u7f6e\uff0c\u70b9\u51fb \u7f16\u8f91 \u6839\u636e\u9700\u6c42\u5b9a\u4e49\u7cfb\u7edf\u4e2d\u62d3\u6251\u56fe\u9608\u503c\u3002

                \u9608\u503c\u8bbe\u7f6e\u5fc5\u987b\u5927\u4e8e 0\uff0c\u524d\u9762\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5c0f\u4e8e\u540e\u9762\u586b\u5199\u7684\u3002\u4e14\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u8303\u56f4\u4e4b\u95f4\u3002

              Note

              \u4fee\u6539\u5176\u4ed6\u914d\u7f6e\uff0c\u8bf7\u70b9\u51fb\u67e5\u770b\u5982\u4f55\u4fee\u6539\u7cfb\u7edf\u914d\u7f6e\uff1f

              "},{"location":"end-user/insight/trace/service.html","title":"\u670d\u52a1\u76d1\u63a7","text":"

              \u5728 \u53ef\u89c2\u6d4b\u6027 Insight \u4e2d\u670d\u52a1\u662f\u6307\u4f7f\u7528 Opentelemtry SDK \u63a5\u5165\u94fe\u8def\u6570\u636e\uff0c\u670d\u52a1\u76d1\u63a7\u80fd\u591f\u8f85\u52a9\u8fd0\u7ef4\u8fc7\u7a0b\u4e2d\u89c2\u5bdf\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u72b6\u6001\u3002

              \u5982\u4f55\u4f7f\u7528 OpenTelemetry \u8bf7\u53c2\u8003\u4f7f\u7528 OTel \u8d4b\u4e88\u5e94\u7528\u53ef\u89c2\u6d4b\u6027\u3002

              "},{"location":"end-user/insight/trace/service.html#_2","title":"\u540d\u8bcd\u89e3\u91ca","text":"
              • \u670d\u52a1 \uff1a\u670d\u52a1\u8868\u793a\u4e3a\u4f20\u5165\u8bf7\u6c42\u63d0\u4f9b\u76f8\u540c\u884c\u4e3a\u7684\u4e00\u7ec4\u5de5\u4f5c\u8d1f\u8f7d\u3002\u60a8\u53ef\u4ee5\u5728\u4f7f\u7528 OpenTelemetry SDK \u65f6\u5b9a\u4e49\u670d\u52a1\u540d\u79f0\u6216\u4f7f\u7528 Istio \u4e2d\u5b9a\u4e49\u7684\u540d\u79f0\u3002
              • \u64cd\u4f5c \uff1a\u64cd\u4f5c\u662f\u6307\u4e00\u4e2a\u670d\u52a1\u5904\u7406\u7684\u7279\u5b9a\u8bf7\u6c42\u6216\u64cd\u4f5c\uff0c\u6bcf\u4e2a Span \u90fd\u6709\u4e00\u4e2a\u64cd\u4f5c\u540d\u79f0\u3002
              • \u51fa\u53e3\u6d41\u91cf \uff1a\u51fa\u53e3\u6d41\u91cf\u662f\u6307\u5f53\u524d\u670d\u52a1\u53d1\u8d77\u8bf7\u6c42\u7684\u6240\u6709\u6d41\u91cf\u3002
              • \u5165\u53e3\u6d41\u91cf \uff1a\u5165\u53e3\u6d41\u91cf\u662f\u6307\u4e0a\u6e38\u670d\u52a1\u5bf9\u5f53\u524d\u670d\u52a1\u53d1\u8d77\u8bf7\u6c42\u7684\u6240\u6709\u6d41\u91cf\u3002
              "},{"location":"end-user/insight/trace/service.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u670d\u52a1\u5217\u8868\u9875\u9762\u5c55\u793a\u4e86\u96c6\u7fa4\u4e2d\u6240\u6709\u5df2\u63a5\u5165\u94fe\u8def\u6570\u636e\u7684\u670d\u52a1\u7684\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u3001\u8bf7\u6c42\u5ef6\u65f6\u7b49\u5173\u952e\u6307\u6807\u3002 \u60a8\u53ef\u4ee5\u6839\u636e\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\u5bf9\u670d\u52a1\u8fdb\u884c\u8fc7\u6ee4\uff0c\u4e5f\u53ef\u4ee5\u6309\u7167\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u3001\u8bf7\u6c42\u5ef6\u65f6\u5bf9\u8be5\u5217\u8868\u8fdb\u884c\u6392\u5e8f\u3002\u5217\u8868\u4e2d\u7684\u6307\u6807\u6570\u636e\u9ed8\u8ba4\u65f6\u95f4\u4e3a 1 \u5c0f\u65f6\uff0c\u60a8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u3002

              \u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u67e5\u770b\u670d\u52a1\u76d1\u63a7\u6307\u6807\uff1a

              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\u3002

              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u94fe\u8def\u8ffd\u8e2a -> \u670d\u52a1 \u3002

                Attention

                1. \u82e5\u5217\u8868\u4e2d\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u4e3a unknown \u65f6\uff0c\u5219\u8868\u793a\u8be5\u670d\u52a1\u672a\u89c4\u8303\u63a5\u5165\uff0c\u5efa\u8bae\u91cd\u65b0\u63a5\u5165\u3002
                2. \u82e5\u63a5\u5165\u7684\u670d\u52a1\u5b58\u5728\u540c\u540d\u4e14\u5747\u672a\u6b63\u786e\u586b\u5199\u73af\u5883\u53d8\u91cf\u4e2d\u7684 \u547d\u540d\u7a7a\u95f4 \u65f6\uff0c\u5217\u8868\u53ca\u670d\u52a1\u8be6\u60c5\u9875\u4e2d\u5c55\u793a\u7684\u76d1\u63a7\u6570\u636e\u4e3a\u591a\u4e2a\u670d\u52a1\u7684\u6c47\u603b\u6570\u636e\u3002
              3. \u70b9\u51fb\u670d\u52a1\u540d (\u4ee5 insight-server \u4e3a\u4f8b)\uff0c\u70b9\u51fb\u8fdb\u5165\u670d\u52a1\u8be6\u60c5\u9875\uff0c\u67e5\u770b\u670d\u52a1\u7684\u8be6\u7ec6\u6307\u6807\u548c\u8be5\u670d\u52a1\u7684\u64cd\u4f5c\u6307\u6807\u3002

                1. \u5728\u670d\u52a1\u62d3\u6251\u6a21\u5757\u4e2d\uff0c\u60a8\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u6240\u9009\u670d\u52a1\u7684\u4e0a\u4e0b\u5404\u4e00\u5c42\u7684\u670d\u52a1\u62d3\u6251\uff0c\u9f20\u6807\u60ac\u6d6e\u5728\u8282\u70b9\u4e0a\u65f6\u53ef\u4ee5\u67e5\u770b\u8282\u70b9\u7684\u4fe1\u606f\u3002
                2. \u5728\u6d41\u91cf\u6307\u6807\u6a21\u5757\uff0c\u60a8\u53ef\u67e5\u770b\u5230\u8be5\u670d\u52a1\u9ed8\u8ba4\u4e00\u5c0f\u65f6\u5185\u5168\u90e8\u8bf7\u6c42\uff08\u5305\u542b\u5165\u53e3\u6d41\u91cf\u548c\u51fa\u53e3\u6d41\u91cf\uff09\u7684\u76d1\u63a7\u6307\u6807\u3002
                3. \u652f\u6301\u901a\u8fc7\u53f3\u4e0a\u89d2\u7684\u65f6\u95f4\u9009\u62e9\u5668\u5feb\u901f\u9009\u62e9\u65f6\u95f4\u8303\u56f4\uff0c\u6216\u81ea\u5b9a\u4e49\u65f6\u95f4\u8303\u56f4\u3002
                4. \u5728 \u5173\u8054\u5bb9\u5668 \u6a21\u5757\u70b9\u51fb\u5bb9\u5668\u7ec4\u540d\u79f0\uff0c\u53ef\u8df3\u8f6c\u81f3\u5bb9\u5668\u7ec4\u8be6\u60c5\u9875\u3002

              4. \u70b9\u51fb Tab \u5207\u6362\u5230 \u64cd\u4f5c\u6307\u6807 \uff0c\u53ef\u67e5\u8be2\u591a\u9009\u670d\u52a1\u76f8\u540c\u64cd\u4f5c\u7684\u805a\u5408\u8d77\u6765\u7684\u6d41\u91cf\u6307\u6807\u3002

                1. \u652f\u6301\u5bf9\u64cd\u4f5c\u6307\u6807\u4e2d\u7684\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u3001\u8bf7\u6c42\u5ef6\u65f6\u7b49\u6307\u6807\u8fdb\u884c\u6392\u5e8f\u3002
                2. \u70b9\u51fb\u5355\u4e2a\u64cd\u4f5c\u540e\u7684\u56fe\u6807\uff0c\u53ef\u8df3\u8f6c\u81f3 \u8c03\u7528\u94fe \u5feb\u901f\u67e5\u8be2\u76f8\u5173\u94fe\u8def\u3002

              "},{"location":"end-user/insight/trace/service.html#_4","title":"\u670d\u52a1\u6307\u6807\u8bf4\u660e","text":"\u53c2\u6570 \u8bf4\u660e \u541e\u5410\u7387 \u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u8bf7\u6c42\u7684\u6570\u91cf\u3002 \u9519\u8bef\u7387 \u67e5\u8be2\u65f6\u95f4\u8303\u56f4\u5185\u9519\u8bef\u8bf7\u6c42\u4e0e\u8bf7\u6c42\u603b\u6570\u7684\u6bd4\u503c\u3002 P50 \u8bf7\u6c42\u5ef6\u65f6 \u5728\u6240\u6709\u7684\u8bf7\u6c42\u4e2d\uff0c\u6709 50% \u7684\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u5c0f\u4e8e\u6216\u7b49\u4e8e\u8be5\u503c\u3002 P95 \u8bf7\u6c42\u5ef6\u65f6 \u5728\u6240\u6709\u7684\u8bf7\u6c42\u4e2d\uff0c\u6709 95% \u7684\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u5c0f\u4e8e\u6216\u7b49\u4e8e\u8be5\u503c\u3002 P99 \u8bf7\u6c42\u5ef6\u65f6 \u5728\u6240\u6709\u7684\u8bf7\u6c42\u4e2d\uff0c\u6709 95% \u7684\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u5c0f\u4e8e\u6216\u7b49\u4e8e\u8be5\u503c\u3002"},{"location":"end-user/insight/trace/topology.html","title":"\u670d\u52a1\u62d3\u6251","text":"

              \u670d\u52a1\u62d3\u6251\u56fe\u662f\u5bf9\u670d\u52a1\u4e4b\u95f4\u8fde\u63a5\u3001\u901a\u4fe1\u548c\u4f9d\u8d56\u5173\u7cfb\u7684\u53ef\u89c6\u5316\u8868\u793a\u3002\u901a\u8fc7\u53ef\u89c6\u5316\u62d3\u6251\u4e86\u89e3\u670d\u52a1\u95f4\u7684\u8c03\u7528\u5173\u7cfb\uff0c \u67e5\u770b\u670d\u52a1\u5728\u6307\u5b9a\u65f6\u95f4\u5185\u7684\u8c03\u7528\u53ca\u5176\u6027\u80fd\u72b6\u51b5\u3002\u62d3\u6251\u56fe\u7684\u8282\u70b9\u4e4b\u95f4\u7684\u8054\u7cfb\u4ee3\u8868\u4e24\u4e2a\u670d\u52a1\u5728\u67e5\u8be2\u65f6\u95f4\u8303\u56f4\u5185\u670d\u52a1\u4e4b\u95f4\u7684\u5b58\u5728\u8c03\u7528\u5173\u7cfb\u3002

              "},{"location":"end-user/insight/trace/topology.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
              1. \u96c6\u7fa4\u4e2d\u5df2\u5b89\u88c5 insight-agent \u4e14\u5e94\u7528\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u3002
              2. \u670d\u52a1\u5df2\u901a\u8fc7 Operator \u6216 Opentelemetry SDK \u7684\u65b9\u5f0f\u63a5\u5165\u94fe\u8def\u3002
              "},{"location":"end-user/insight/trace/topology.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u6a21\u5757
              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u94fe\u8def\u8ffd\u8e2a -> \u670d\u52a1\u62d3\u6251
              3. \u5728\u62d3\u6251\u56fe\u4e2d\uff0c\u60a8\u53ef\u6309\u9700\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a

                • \u5355\u51fb \u8282\u70b9\uff0c\u4ece\u53f3\u4fa7\u5212\u51fa\u670d\u52a1\u7684\u8be6\u60c5\uff0c\u53ef\u67e5\u770b\u670d\u52a1\u7684\u8bf7\u6c42\u5ef6\u65f6\u3001\u541e\u5410\u7387\u3001\u9519\u8bef\u7387\u7684\u6307\u6807\u3002\u70b9\u51fb\u670d\u52a1\u540d\u79f0\u53ef\u8df3\u8f6c\u81f3\u5bf9\u5e94\u670d\u52a1\u7684\u8be6\u60c5\u9875\u3002
                • \u9f20\u6807\u60ac\u6d6e\u5728\u8fde\u7ebf\u4e0a\u65f6\uff0c\u53ef\u67e5\u770b\u4e24\u4e2a\u670d\u52a1\u4e4b\u95f4\u8bf7\u6c42\u7684\u6d41\u91cf\u6307\u6807\u3002
                • \u5728 \u663e\u793a\u8bbe\u7f6e \u6a21\u5757\uff0c\u53ef\u914d\u7f6e\u62d3\u6251\u56fe\u4e2d\u7684\u663e\u793a\u5143\u7d20\u3002

              4. \u70b9\u51fb\u53f3\u4e0b\u89d2 \u56fe\u4f8b \uff0c\u53ef\u901a\u8fc7 \u4e34\u65f6\u914d\u7f6e \u4fee\u6539\u5f53\u524d\u7684\u62d3\u6251\u56fe\u5b9a\u4e49\u7684\u6e32\u67d3\u9608\u503c\uff0c\u8df3\u51fa\u6216\u5173\u95ed\u8be5\u9875\u9762\u5373\u4f1a\u4e22\u5931\u8be5\u914d\u7f6e\u3002

                \u9608\u503c\u8bbe\u7f6e\u5fc5\u987b\u5927\u4e8e 0\uff0c\u524d\u9762\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5c0f\u4e8e\u540e\u9762\u586b\u5199\u7684\u3002\u4e14\u586b\u5199\u7684\u9608\u503c\u5fc5\u987b\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u8303\u56f4\u4e4b\u95f4\u3002

              "},{"location":"end-user/insight/trace/topology.html#_4","title":"\u5176\u4ed6\u8282\u70b9","text":"

              \u5728\u670d\u52a1\u62d3\u6251\u4e2d\u4f1a\u5b58\u5728\u6e38\u79bb\u5728\u96c6\u7fa4\u4e4b\u5916\u7684\u8282\u70b9\uff0c\u8fd9\u4e9b\u6e38\u79bb\u5728\u5916\u7684\u8282\u70b9\u53ef\u5206\u6210\u4e09\u7c7b\uff1a

              • \u6570\u636e\u5e93
              • \u6d88\u606f\u961f\u5217
              • \u865a\u62df\u8282\u70b9

              • \u82e5\u670d\u52a1\u53d1\u8d77\u8bf7\u6c42\u5230\u6570\u636e\u5e93\u6216\u6d88\u606f\u961f\u5217\u65f6\uff0c\u62d3\u6251\u56fe\u4e2d\u4f1a\u9ed8\u8ba4\u5c55\u793a\u8fd9\u4e24\u7c7b\u8282\u70b9\u3002 \u800c\u865a\u62df\u670d\u52a1\u8868\u793a\u96c6\u7fa4\u5185\u670d\u52a1\u8bf7\u6c42\u4e86\u96c6\u7fa4\u5916\u7684\u8282\u70b9\u6216\u8005\u672a\u63a5\u5165\u94fe\u8def\u7684\u670d\u52a1\uff0c\u62d3\u6251\u56fe\u4e2d\u9ed8\u8ba4\u4e0d\u4f1a\u5c55\u793a \u865a\u62df\u670d\u52a1\u3002

              • \u5f53\u670d\u52a1\u8bf7\u6c42\u5230 MySQL\u3001PostgreSQL\u3001Oracle Database \u8fd9\u4e09\u79cd\u6570\u636e\u5e93\u65f6\uff0c\u5728\u62d3\u6251\u56fe\u4e2d\u53ef\u4ee5\u770b\u5230\u8bf7\u6c42\u7684\u8be6\u7ec6\u6570\u636e\u5e93\u7c7b\u578b\u3002

              "},{"location":"end-user/insight/trace/topology.html#_5","title":"\u5f00\u542f\u865a\u62df\u8282\u70b9","text":"
              1. \u66f4\u65b0 insight-server chart \u7684 values\uff0c\u627e\u5230\u4e0b\u56fe\u6240\u793a\u53c2\u6570\uff0c\u5c06 false \u6539\u4e3a true\u3002

              2. \u5728\u670d\u52a1\u62d3\u6251\u7684\u663e\u793a\u8bbe\u7f6e\u4e2d\u52fe\u9009 \u865a\u62df\u670d\u52a1 \u3002

              "},{"location":"end-user/insight/trace/trace.html","title":"\u94fe\u8def\u67e5\u8be2","text":"

              \u5728\u94fe\u8def\u67e5\u8be2\u9875\u9762\uff0c\u60a8\u53ef\u4ee5\u8fc7 TraceID \u6216\u7cbe\u786e\u67e5\u8be2\u8c03\u7528\u94fe\u8def\u8be6\u7ec6\u60c5\u51b5\u6216\u7ed3\u5408\u591a\u79cd\u6761\u4ef6\u7b5b\u9009\u67e5\u8be2\u8c03\u7528\u94fe\u8def\u3002

              "},{"location":"end-user/insight/trace/trace.html#_2","title":"\u540d\u8bcd\u89e3\u91ca","text":"
              • TraceID\uff1a\u7528\u4e8e\u6807\u8bc6\u4e00\u4e2a\u5b8c\u6574\u7684\u8bf7\u6c42\u8c03\u7528\u94fe\u8def\u3002
              • \u64cd\u4f5c\uff1a\u63cf\u8ff0 Span \u6240\u4ee3\u8868\u7684\u5177\u4f53\u64cd\u4f5c\u6216\u4e8b\u4ef6\u3002
              • \u5165\u53e3 Span\uff1a\u5165\u53e3 Span \u4ee3\u8868\u4e86\u6574\u4e2a\u8bf7\u6c42\u7684\u7b2c\u4e00\u4e2a\u8bf7\u6c42\u3002
              • \u5ef6\u65f6\uff1a\u6574\u4e2a\u8c03\u7528\u94fe\u4ece\u5f00\u59cb\u63a5\u6536\u8bf7\u6c42\u5230\u5b8c\u6210\u54cd\u5e94\u7684\u6301\u7eed\u65f6\u95f4\u3002
              • Span\uff1a\u6574\u4e2a\u94fe\u8def\u4e2d\u5305\u542b\u7684 Span \u4e2a\u6570\u3002
              • \u53d1\u751f\u65f6\u95f4\uff1a\u5f53\u524d\u94fe\u8def\u5f00\u59cb\u7684\u65f6\u95f4\u3002
              • Tag\uff1a\u4e00\u7ec4\u952e\u503c\u5bf9\u6784\u6210\u7684 Span \u6807\u7b7e\u96c6\u5408\uff0cTag \u662f\u7528\u6765\u5bf9 Span \u8fdb\u884c\u7b80\u5355\u7684\u6ce8\u89e3\u548c\u8865\u5145\uff0c\u6bcf\u4e2a Span \u53ef\u4ee5\u6709\u591a\u4e2a\u7b80\u76f4\u5bf9\u5f62\u5f0f\u7684 Tag\u3002
              "},{"location":"end-user/insight/trace/trace.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u8bf7\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u67e5\u8be2\u94fe\u8def\uff1a

              1. \u8fdb\u5165 \u53ef\u89c2\u6d4b\u6027 \u4ea7\u54c1\u6a21\u5757\uff0c
              2. \u5728\u5de6\u8fb9\u5bfc\u822a\u680f\u9009\u62e9 \u94fe\u8def\u8ffd\u8e2a -> \u8c03\u7528\u94fe\u3002

                Note

                \u5217\u8868\u4e2d\u652f\u6301\u5bf9 Span \u6570\u3001\u5ef6\u65f6\u3001\u53d1\u751f\u65f6\u95f4\u8fdb\u884c\u6392\u5e8f\u3002

              3. \u70b9\u51fb\u7b5b\u9009\u680f\u4e2d\u7684 TraceID \u641c\u7d22 \u5207\u6362\u4f7f\u7528 TraceID \u641c\u7d22\u94fe\u8def\u3002

              4. \u4f7f\u7528 TraceID \u641c\u7d22\u8bf7\u8f93\u5165\u5b8c\u6574\u7684 TraceID\u3002

              "},{"location":"end-user/insight/trace/trace.html#_4","title":"\u5176\u4ed6\u64cd\u4f5c","text":""},{"location":"end-user/insight/trace/trace.html#_5","title":"\u67e5\u770b\u94fe\u8def\u8be6\u60c5","text":"
              1. \u70b9\u51fb\u94fe\u8def\u5217\u8868\u4e2d\u7684\u67d0\u4e00\u94fe\u8def\u7684 TraceID\uff0c\u53ef\u67e5\u770b\u8be5\u94fe\u8def\u7684\u8be6\u60c5\u8c03\u7528\u60c5\u51b5\u3002

              "},{"location":"end-user/insight/trace/trace.html#_6","title":"\u67e5\u770b\u5173\u8054\u65e5\u5fd7","text":"
              1. \u70b9\u51fb\u94fe\u8def\u6570\u636e\u53f3\u4fa7\u7684\u56fe\u6807\uff0c\u53ef\u67e5\u8be2\u8be5\u94fe\u8def\u7684\u5173\u8054\u65e5\u5fd7\u3002

                • \u9ed8\u8ba4\u67e5\u8be2\u8be5\u94fe\u8def\u7684\u6301\u7eed\u65f6\u95f4\u53ca\u5176\u7ed3\u675f\u4e4b\u540e\u4e00\u5206\u949f\u5185\u7684\u65e5\u5fd7\u6570\u636e\u3002
                • \u67e5\u8be2\u7684\u65e5\u5fd7\u5185\u5bb9\u4e3a\u65e5\u5fd7\u6587\u672c\u4e2d\u5305\u542b\u8be5\u94fe\u8def\u7684 TraceID \u7684\u65e5\u5fd7\u548c\u94fe\u8def\u8c03\u7528\u8fc7\u7a0b\u4e2d\u76f8\u5173\u7684\u5bb9\u5668\u65e5\u5fd7\u3002
              2. \u70b9\u51fb \u67e5\u770b\u66f4\u591a \u540e\u53ef\u5e26\u6761\u4ef6\u8df3\u8f6c\u5230 \u65e5\u5fd7\u67e5\u8be2 \u7684\u9875\u9762\u3002

              3. \u9ed8\u8ba4\u641c\u7d22\u5168\u90e8\u65e5\u5fd7\uff0c\u4f46\u53ef\u4e0b\u62c9\u6839\u636e\u94fe\u8def\u7684 TraceID \u6216\u94fe\u8def\u8c03\u7528\u8fc7\u7a0b\u4e2d\u76f8\u5173\u7684\u5bb9\u5668\u65e5\u5fd7\u8fdb\u884c\u8fc7\u6ee4\u3002

                Note

                \u7531\u4e8e\u94fe\u8def\u4f1a\u8de8\u96c6\u7fa4\u6216\u8de8\u547d\u540d\u7a7a\u95f4\uff0c\u82e5\u7528\u6237\u6743\u9650\u4e0d\u8db3\uff0c\u5219\u65e0\u6cd5\u67e5\u8be2\u8be5\u94fe\u8def\u7684\u5173\u8054\u65e5\u5fd7\u3002

              "},{"location":"end-user/k8s/add-node.html","title":"\u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9","text":"

              \u5982\u679c\u8282\u70b9\u4e0d\u591f\u7528\u4e86\uff0c\u53ef\u4ee5\u6dfb\u52a0\u66f4\u591a\u8282\u70b9\u5230\u96c6\u7fa4\u4e2d\u3002

              "},{"location":"end-user/k8s/add-node.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u6709\u4e00\u4e2a\u7ba1\u7406\u5458\u5e10\u53f7
              • \u5df2\u521b\u5efa\u5e26 GPU \u8282\u70b9\u7684\u96c6\u7fa4
              • \u51c6\u5907\u4e00\u53f0\u4e91\u4e3b\u673a
              "},{"location":"end-user/k8s/add-node.html#_3","title":"\u6dfb\u52a0\u6b65\u9aa4","text":"
              1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0

              3. \u8fdb\u5165\u96c6\u7fa4\u6982\u89c8\u9875\uff0c\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u63a5\u5165\u8282\u70b9 \u6309\u94ae

              4. \u6309\u7167\u5411\u5bfc\uff0c\u586b\u5199\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a

                \u57fa\u672c\u4fe1\u606f\u53c2\u6570\u914d\u7f6e

              5. \u5728\u5f39\u7a97\u4e2d\u70b9\u51fb \u786e\u5b9a

              6. \u8fd4\u56de\u8282\u70b9\u5217\u8868\uff0c\u65b0\u63a5\u5165\u7684\u8282\u70b9\u72b6\u6001\u4e3a \u63a5\u5165\u4e2d \uff0c\u7b49\u5f85\u51e0\u5206\u949f\u540e\u72b6\u6001\u53d8\u4e3a \u5065\u5eb7 \u5219\u8868\u793a\u63a5\u5165\u6210\u529f\u3002

              Tip

              \u5bf9\u4e8e\u521a\u63a5\u5165\u6210\u529f\u7684\u8282\u70b9\uff0c\u53ef\u80fd\u8fd8\u8981\u7b49 2-3 \u5206\u949f\u624d\u80fd\u8bc6\u522b\u51fa GPU\u3002

              "},{"location":"end-user/k8s/create-k8s.html","title":"\u521b\u5efa\u4e91\u4e0a Kubernetes \u96c6\u7fa4","text":"

              \u90e8\u7f72 Kubernetes \u96c6\u7fa4\u662f\u4e3a\u4e86\u652f\u6301\u9ad8\u6548\u7684 AI \u7b97\u529b\u8c03\u5ea6\u548c\u7ba1\u7406\uff0c\u5b9e\u73b0\u5f39\u6027\u4f38\u7f29\uff0c\u63d0\u4f9b\u9ad8\u53ef\u7528\u6027\uff0c\u4ece\u800c\u4f18\u5316\u6a21\u578b\u8bad\u7ec3\u548c\u63a8\u7406\u8fc7\u7a0b\u3002

              "},{"location":"end-user/k8s/create-k8s.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0\u5df2
              • \u6709\u4e00\u4e2a\u7ba1\u7406\u5458\u6743\u9650\u7684\u8d26\u53f7
              • \u51c6\u5907\u4e00\u53f0\u5e26 GPU \u7684\u7269\u7406\u673a
              • \u5206\u914d\u4e24\u6bb5 IP \u5730\u5740\uff08Pod CIDR 18 \u4f4d\u3001SVC CIDR 18 \u4f4d\uff0c\u4e0d\u80fd\u4e0e\u73b0\u6709\u7f51\u6bb5\u51b2\u7a81\uff09
              "},{"location":"end-user/k8s/create-k8s.html#_2","title":"\u521b\u5efa\u6b65\u9aa4","text":"
              1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u521b\u5efa\u5e76\u542f\u52a8 3 \u53f0\u4e0d\u5e26 GPU \u7684\u4e91\u4e3b\u673a\u7528\u4f5c\u96c6\u7fa4\u7684 Master \u8282\u70b9

                • \u914d\u7f6e\u8d44\u6e90\uff0cCPU 16 \u6838\uff0c\u5185\u5b58 32 GB\uff0c\u7cfb\u7edf\u76d8 200 GB\uff08ReadWriteOnce\uff09
                • \u7f51\u7edc\u6a21\u5f0f\u9009\u62e9 Bridge\uff08\u6865\u63a5\uff09
                • \u8bbe\u7f6e root \u5bc6\u7801\u6216\u6dfb\u52a0 SSH \u516c\u94a5\uff0c\u65b9\u4fbf\u4ee5 SSH \u8fde\u63a5
                • \u8bb0\u5f55\u597d 3 \u53f0\u4e3b\u673a\u7684 IP
              3. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa\u96c6\u7fa4 \u6309\u94ae

              4. \u6309\u7167\u5411\u5bfc\uff0c\u914d\u7f6e\u96c6\u7fa4\u7684\u5404\u9879\u53c2\u6570

                \u57fa\u672c\u4fe1\u606f\u8282\u70b9\u914d\u7f6e\u7f51\u7edc\u914d\u7f6eAddon \u914d\u7f6e\u9ad8\u7ea7\u914d\u7f6e

                \u914d\u7f6e\u5b8c\u8282\u70b9\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u5f00\u59cb\u68c0\u67e5 \uff0c

                \u6bcf\u4e2a\u8282\u70b9\u9ed8\u8ba4\u53ef\u8fd0\u884c 110 \u4e2a Pod\uff08\u5bb9\u5668\u7ec4\uff09\uff0c\u5982\u679c\u8282\u70b9\u914d\u7f6e\u6bd4\u8f83\u9ad8\uff0c\u53ef\u4ee5\u8c03\u6574\u5230 200 \u6216 300 \u4e2a Pod\u3002

              5. \u7b49\u5f85\u96c6\u7fa4\u521b\u5efa\u5b8c\u6210\u3002

              6. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\uff0c\u627e\u5230\u521a\u521b\u5efa\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u5bfc\u822a\u5230 Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u5728\u641c\u7d22\u6846\u5185\u641c\u7d22 metax-gpu-extensions\uff0c\u70b9\u51fb\u5361\u7247

              7. \u70b9\u51fb\u53f3\u4fa7\u7684 \u5b89\u88c5 \u6309\u94ae\uff0c\u5f00\u59cb\u5b89\u88c5 GPU \u63d2\u4ef6

                \u5e94\u7528\u8bbe\u7f6eKubernetes \u7f16\u6392\u786e\u8ba4

                \u8f93\u5165\u540d\u79f0\uff0c\u9009\u62e9\u547d\u540d\u7a7a\u95f4\uff0c\u5728 YAMl \u4e2d\u4fee\u6539\u955c\u50cf\u5730\u5740\uff1a

              8. \u81ea\u52a8\u8fd4\u56de Helm \u5e94\u7528\u5217\u8868\uff0c\u7b49\u5f85 metax-gpu-extensions \u72b6\u6001\u53d8\u4e3a \u5df2\u90e8\u7f72

              9. \u5230\u6b64\u96c6\u7fa4\u521b\u5efa\u6210\u529f\uff0c\u53ef\u4ee5\u53bb\u67e5\u770b\u96c6\u7fa4\u6240\u5305\u542b\u7684\u8282\u70b9\u3002\u4f60\u53ef\u4ee5\u53bb\u521b\u5efa AI \u5de5\u4f5c\u8d1f\u8f7d\u5e76\u4f7f\u7528 GPU \u4e86\u3002

              \u4e0b\u4e00\u6b65\uff1a\u521b\u5efa AI \u5de5\u4f5c\u8d1f\u8f7d

              "},{"location":"end-user/k8s/remove-node.html","title":"\u79fb\u9664 GPU \u5de5\u4f5c\u8282\u70b9","text":"

              GPU \u8d44\u6e90\u7684\u6210\u672c\u76f8\u5bf9\u8f83\u9ad8\uff0c\u5982\u679c\u6682\u65f6\u7528\u4e0d\u5230 GPU\uff0c\u53ef\u4ee5\u5c06\u5e26 GPU \u7684\u5de5\u4f5c\u8282\u70b9\u79fb\u9664\u3002 \u4ee5\u4e0b\u6b65\u9aa4\u4e5f\u540c\u6837\u9002\u7528\u4e8e\u79fb\u9664\u666e\u901a\u5de5\u4f5c\u8282\u70b9\u3002

              "},{"location":"end-user/k8s/remove-node.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
              • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
              • \u6709\u4e00\u4e2a\u7ba1\u7406\u5458\u5e10\u53f7
              • \u5df2\u521b\u5efa\u5e26 GPU \u8282\u70b9\u7684\u96c6\u7fa4
              "},{"location":"end-user/k8s/remove-node.html#_2","title":"\u79fb\u9664\u6b65\u9aa4","text":"
              1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
              2. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u5217\u8868 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0

              3. \u8fdb\u5165\u96c6\u7fa4\u6982\u89c8\u9875\uff0c\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u627e\u5230\u8981\u79fb\u9664\u7684\u8282\u70b9\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u79fb\u9664\u8282\u70b9

              4. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u8282\u70b9\u540d\u79f0\uff0c\u786e\u8ba4\u65e0\u8bef\u540e\u70b9\u51fb \u5220\u9664

              5. \u81ea\u52a8\u8fd4\u56de\u8282\u70b9\u5217\u8868\uff0c\u72b6\u6001\u4e3a \u79fb\u9664\u4e2d \uff0c\u51e0\u5206\u949f\u540e\u5237\u65b0\u9875\u9762\uff0c\u8282\u70b9\u4e0d\u5728\u4e86\uff0c\u8bf4\u660e\u8282\u70b9\u88ab\u6210\u529f\u79fb\u9664

              6. \u4ece UI \u5217\u8868\u79fb\u9664\u8282\u70b9\u540e\uff0c\u901a\u8fc7 SSH \u767b\u5f55\u5230\u5df2\u79fb\u9664\u7684\u8282\u70b9\u4e3b\u673a\uff0c\u6267\u884c\u5173\u673a\u547d\u4ee4\u3002

              Tip

              \u5728 UI \u4e0a\u79fb\u9664\u8282\u70b9\u5e76\u5c06\u5176\u5173\u673a\u540e\uff0c\u8282\u70b9\u4e0a\u7684\u6570\u636e\u5e76\u672a\u88ab\u7acb\u5373\u5220\u9664\uff0c\u8282\u70b9\u6570\u636e\u4f1a\u88ab\u4fdd\u7559\u4e00\u6bb5\u65f6\u95f4\u3002

              "},{"location":"end-user/kpanda/backup/index.html","title":"\u5907\u4efd\u6062\u590d","text":"

              \u5907\u4efd\u6062\u590d\u5206\u4e3a\u5907\u4efd\u548c\u6062\u590d\u4e24\u65b9\u9762\uff0c\u5b9e\u9645\u5e94\u7528\u65f6\u9700\u8981\u5148\u5907\u4efd\u7cfb\u7edf\u5728\u67d0\u4e00\u65f6\u70b9\u7684\u6570\u636e\uff0c\u7136\u540e\u5b89\u5168\u5b58\u50a8\u5730\u5907\u4efd\u6570\u636e\u3002\u540e\u7eed\u5982\u679c\u51fa\u73b0\u6570\u636e\u635f\u574f\u3001\u4e22\u5931\u3001\u8bef\u5220\u7b49\u4e8b\u6545\uff0c\u5c31\u53ef\u4ee5\u57fa\u4e8e\u4e4b\u524d\u7684\u6570\u636e\u5907\u4efd\u5feb\u901f\u8fd8\u539f\u7cfb\u7edf\uff0c\u7f29\u77ed\u6545\u969c\u65f6\u95f4\uff0c\u51cf\u5c11\u635f\u5931\u3002

              • \u5728\u771f\u5b9e\u7684\u751f\u4ea7\u73af\u5883\u4e2d\uff0c\u670d\u52a1\u53ef\u80fd\u5206\u5e03\u5f0f\u5730\u90e8\u7f72\u5728\u4e0d\u540c\u7684\u4e91\u3001\u4e0d\u540c\u533a\u57df\u6216\u53ef\u7528\u533a\uff0c\u5982\u679c\u67d0\u4e00\u4e2a\u57fa\u7840\u8bbe\u65bd\u81ea\u8eab\u51fa\u73b0\u6545\u969c\uff0c\u4f01\u4e1a\u9700\u8981\u5728\u5176\u4ed6\u53ef\u7528\u73af\u5883\u4e2d\u5feb\u901f\u6062\u590d\u5e94\u7528\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8de8\u4e91/\u8de8\u96c6\u7fa4\u7684\u5907\u4efd\u6062\u590d\u663e\u5f97\u975e\u5e38\u91cd\u8981\u3002
              • \u5728\u5927\u89c4\u6a21\u7cfb\u7edf\u4e2d\u5f80\u5f80\u6709\u5f88\u591a\u89d2\u8272\u548c\u7528\u6237\uff0c\u6743\u9650\u7ba1\u7406\u4f53\u7cfb\u590d\u6742\uff0c\u64cd\u4f5c\u8005\u4f17\u591a\uff0c\u96be\u514d\u6709\u4eba\u8bef\u64cd\u4f5c\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4e5f\u9700\u8981\u80fd\u591f\u901a\u8fc7\u4e4b\u524d\u5907\u4efd\u7684\u6570\u636e\u5feb\u901f\u56de\u6eda\u7cfb\u7edf\uff0c\u5426\u5219\u5982\u679c\u4f9d\u8d56\u4eba\u4e3a\u6392\u67e5\u6545\u969c\u3001\u4fee\u590d\u6545\u969c\u3001\u6062\u590d\u7cfb\u7edf\u5c31\u4f1a\u8017\u8d39\u5927\u91cf\u65f6\u95f4\uff0c\u7cfb\u7edf\u4e0d\u53ef\u7528\u65f6\u95f4\u8d8a\u957f\uff0c\u4f01\u4e1a\u7684\u635f\u5931\u8d8a\u5927\u3002
              • \u6b64\u5916\uff0c\u8fd8\u6709\u7f51\u7edc\u653b\u51fb\u3001\u81ea\u7136\u707e\u5bb3\u3001\u8bbe\u5907\u6545\u969c\u7b49\u5404\u79cd\u56e0\u7d20\u4e5f\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u4e8b\u6545

              \u56e0\u6b64\uff0c\u5907\u4efd\u6062\u590d\u975e\u5e38\u91cd\u8981\uff0c\u53ef\u4ee5\u89c6\u4e4b\u4e3a\u7ef4\u62a4\u7cfb\u7edf\u7a33\u5b9a\u548c\u6570\u636e\u5b89\u5168\u7684\u6700\u540e\u4e00\u9053\u4fdd\u9669\u3002

              \u5907\u4efd\u901a\u5e38\u5206\u4e3a\u5168\u91cf\u5907\u4efd\u3001\u589e\u91cf\u5907\u4efd\u3001\u5dee\u5f02\u5907\u4efd\u4e09\u79cd\u3002\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u76ee\u524d\u652f\u6301\u5168\u91cf\u5907\u4efd\u548c\u589e\u91cf\u5907\u4efd\u3002

              \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u7684\u5907\u4efd\u6062\u590d\u53ef\u4ee5\u5206\u4e3a \u5e94\u7528\u5907\u4efd \u548c ETCD \u5907\u4efd \u4e24\u79cd\uff0c\u652f\u6301\u624b\u52a8\u5907\u4efd\uff0c\u6216\u57fa\u4e8e CronJob \u5b9a\u65f6\u81ea\u52a8\u5907\u4efd\u3002

              • \u5e94\u7528\u5907\u4efd

                \u5e94\u7528\u5907\u4efd\u6307\uff0c\u5907\u4efd\u96c6\u7fa4\u4e2d\u7684\u67d0\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\uff0c\u7136\u540e\u5c06\u8be5\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\u6062\u590d\u5230\u672c\u96c6\u7fa4\u6216\u8005\u5176\u4ed6\u96c6\u7fa4\u3002\u652f\u6301\u5907\u4efd\u6574\u4e2a\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u8d44\u6e90\uff0c\u4e5f\u652f\u6301\u901a\u8fc7\u6807\u7b7e\u9009\u62e9\u5668\u8fc7\u6ee4\uff0c\u4ec5\u5907\u4efd\u5e26\u6709\u7279\u5b9a\u6807\u7b7e\u7684\u8d44\u6e90\u3002

                \u5e94\u7528\u5907\u4efd\u652f\u6301\u8de8\u96c6\u7fa4\u5907\u4efd\u6709\u72b6\u6001\u5e94\u7528\uff0c\u5177\u4f53\u6b65\u9aa4\u53ef\u53c2\u8003MySQL \u5e94\u7528\u53ca\u6570\u636e\u7684\u8de8\u96c6\u7fa4\u5907\u4efd\u6062\u590d\u3002

              • ETCD \u5907\u4efd

                etcd \u662f Kubernetes \u7684\u6570\u636e\u5b58\u50a8\u7ec4\u4ef6\uff0cKubernetes \u5c06\u81ea\u8eab\u7684\u7ec4\u4ef6\u6570\u636e\u548c\u5176\u4e2d\u7684\u5e94\u7528\u6570\u636e\u90fd\u5b58\u50a8\u5728 etcd \u4e2d\u3002\u56e0\u6b64\uff0c\u5907\u4efd etcd \u5c31\u76f8\u5f53\u4e8e\u5907\u4efd\u6574\u4e2a\u96c6\u7fa4\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u5728\u6545\u969c\u65f6\u5feb\u901f\u5c06\u96c6\u7fa4\u6062\u590d\u5230\u4e4b\u524d\u67d0\u4e00\u65f6\u70b9\u7684\u72b6\u6001\u3002

                \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u76ee\u524d\u4ec5\u652f\u6301\u5c06 etcd \u5907\u4efd\u6570\u636e\u6062\u590d\u5230\u540c\u4e00\u96c6\u7fa4\uff08\u539f\u96c6\u7fa4\uff09\u3002

              "},{"location":"end-user/kpanda/backup/deployment.html","title":"\u5e94\u7528\u5907\u4efd","text":"

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4e3a\u5e94\u7528\u505a\u5907\u4efd\uff0c\u672c\u6559\u7a0b\u4e2d\u4f7f\u7528\u7684\u6f14\u793a\u5e94\u7528\u540d\u4e3a dao-2048 \uff0c\u5c5e\u4e8e\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u3002

              "},{"location":"end-user/kpanda/backup/deployment.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5728\u5bf9\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u8fdb\u884c\u5907\u4efd\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u5b89\u88c5 velero \u7ec4\u4ef6\uff0c\u4e14 velero \u7ec4\u4ef6\u8fd0\u884c\u6b63\u5e38\u3002

              • \u521b\u5efa\u4e00\u4e2a\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\uff08\u672c\u6559\u7a0b\u4e2d\u7684\u8d1f\u8f7d\u540d\u4e3a dao-2048 \uff09\uff0c\u5e76\u4e3a\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u6253\u4e0a app: dao-2048 \u7684\u6807\u7b7e\u3002

              "},{"location":"end-user/kpanda/backup/deployment.html#_3","title":"\u5907\u4efd\u5de5\u4f5c\u8d1f\u8f7d","text":"

              \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u5907\u4efd\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d dao-2048 \u3002

              1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c \u70b9\u51fb \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d \u3002

              2. \u8fdb\u5165 \u5e94\u7528\u5907\u4efd \u5217\u8868\u9875\u9762\uff0c\u4ece\u96c6\u7fa4\u4e0b\u62c9\u5217\u8868\u4e2d\u9009\u62e9\u5df2\u5b89\u88c5\u4e86 velero \u548c dao-2048 \u7684\u96c6\u7fa4\u3002 \u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa\u5907\u4efd\u8ba1\u5212 \u6309\u94ae\u3002

              3. \u53c2\u8003\u4e0b\u65b9\u8bf4\u660e\u586b\u5199\u5907\u4efd\u914d\u7f6e\u3002

              4. \u53c2\u8003\u4e0b\u65b9\u8bf4\u660e\u8bbe\u7f6e\u5907\u4efd\u6267\u884c\u9891\u7387\uff0c\u7136\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                • \u5907\u4efd\u9891\u7387\uff1a\u57fa\u4e8e\u5206\u949f\u3001\u5c0f\u65f6\u3001\u5929\u3001\u5468\u3001\u6708\u8bbe\u7f6e\u4efb\u52a1\u6267\u884c\u7684\u65f6\u95f4\u5468\u671f\u3002\u652f\u6301\u7528\u6570\u5b57\u548c * \u81ea\u5b9a\u4e49 Cron \u8868\u8fbe\u5f0f\uff0c\u8f93\u5165\u8868\u8fbe\u5f0f\u540e\u4e0b\u65b9\u4f1a\u63d0\u793a\u5f53\u524d\u8868\u8fbe\u5f0f\u7684\u542b\u4e49 \u3002\u6709\u5173\u8be6\u7ec6\u7684\u8868\u8fbe\u5f0f\u8bed\u6cd5\u89c4\u5219\uff0c\u53ef\u53c2\u8003 Cron \u65f6\u95f4\u8868\u8bed\u6cd5\u3002
                • \u7559\u5b58\u65f6\u957f\uff08\u5929\uff09\uff1a\u8bbe\u7f6e\u5907\u4efd\u8d44\u6e90\u4fdd\u5b58\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 30 \u5929\uff0c\u8fc7\u671f\u540e\u5c06\u4f1a\u88ab\u5220\u9664\u3002
                • \u5907\u4efd\u6570\u636e\u5377\uff08PV\uff09\uff1a\u662f\u5426\u5907\u4efd\u6570\u636e\u5377\uff08PV\uff09\u4e2d\u7684\u6570\u636e\uff0c\u652f\u6301\u76f4\u63a5\u590d\u5236\u548c\u4f7f\u7528 CSI \u5feb\u7167\u4e24\u79cd\u65b9\u5f0f\u3002
                  • \u76f4\u63a5\u590d\u5236\uff1a\u76f4\u63a5\u590d\u5236\u6570\u636e\u5377\uff08PV\uff09\u4e2d\u7684\u6570\u636e\u7528\u4e8e\u5907\u4efd\uff1b
                  • \u4f7f\u7528 CSI \u5feb\u7167\uff1a\u4f7f\u7528 CSI \u5feb\u7167\u6765\u5907\u4efd\u6570\u636e\u5377\uff08PV\uff09\u3002\u9700\u8981\u96c6\u7fa4\u4e2d\u6709\u53ef\u7528\u4e8e\u5907\u4efd\u7684 CSI \u5feb\u7167\u7c7b\u578b\u3002

              5. \u70b9\u51fb \u786e\u5b9a \uff0c\u9875\u9762\u4f1a\u81ea\u52a8\u8fd4\u56de\u5e94\u7528\u5907\u4efd\u8ba1\u5212\u5217\u8868\u3002\u60a8\u53ef\u4ee5\u627e\u5230\u65b0\u5efa\u7684 dao-2048 \u5907\u4efd\u8ba1\u5212\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u9009\u62e9 \u7acb\u5373\u6267\u884c \u5f00\u59cb\u5907\u4efd\u3002

              6. \u6b64\u65f6\u96c6\u7fa4\u7684 \u4e0a\u4e00\u6b21\u6267\u884c\u72b6\u6001 \u5c06\u8f6c\u53d8\u4e3a \u5907\u4efd\u4e2d \u3002\u7b49\u5f85\u5907\u4efd\u5b8c\u6210\u540e\u53ef\u4ee5\u70b9\u51fb\u5907\u4efd\u8ba1\u5212\u7684\u540d\u79f0\uff0c\u67e5\u770b\u5907\u4efd\u8ba1\u5212\u8be6\u60c5\u3002

              Note

              \u5982\u679c Job \u7c7b\u578b\u7684\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u4e3a \u6267\u884c\u5b8c\u6210 \uff0c\u5219\u4e0d\u652f\u6301\u5907\u4efd\u3002

              "},{"location":"end-user/kpanda/backup/etcd-backup.html","title":"etcd \u5907\u4efd","text":"

              etcd \u5907\u4efd\u662f\u4ee5\u96c6\u7fa4\u6570\u636e\u4e3a\u6838\u5fc3\u7684\u5907\u4efd\u3002\u5728\u786c\u4ef6\u8bbe\u5907\u635f\u574f\uff0c\u5f00\u53d1\u6d4b\u8bd5\u914d\u7f6e\u9519\u8bef\u7b49\u573a\u666f\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7 etcd \u5907\u4efd\u6062\u590d\u96c6\u7fa4\u6570\u636e\u3002

              \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4e3a\u96c6\u7fa4\u5236\u4f5c etcd \u5907\u4efd\u3002

              "},{"location":"end-user/kpanda/backup/etcd-backup.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
              • \u63a5\u5165\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              • \u51c6\u5907\u4e00\u4e2a MinIO \u5b9e\u4f8b\u3002

              "},{"location":"end-user/kpanda/backup/etcd-backup.html#etcd_1","title":"\u521b\u5efa etcd \u5907\u4efd","text":"

              \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u521b\u5efa etcd \u5907\u4efd\u3002

              1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d -> etcd \u5907\u4efd \uff0c\u70b9\u51fb \u5907\u4efd\u7b56\u7565 \u9875\u7b7e\uff0c\u7136\u540e\u5728\u53f3\u4fa7\u70b9\u51fb \u521b\u5efa\u5907\u4efd\u7b56\u7565 \u3002

              2. \u53c2\u8003\u4ee5\u4e0b\u8bf4\u660e\u586b\u5199 \u57fa\u672c\u4fe1\u606f \u3002\u586b\u5199\u5b8c\u6bd5\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \uff0c\u7cfb\u7edf\u5c06\u81ea\u52a8\u6821\u9a8c etcd \u7684\u8054\u901a\u6027\uff0c\u6821\u9a8c\u901a\u8fc7\u4e4b\u540e\u53ef\u4ee5\u8fdb\u884c\u4e0b\u4e00\u6b65\u3002

                • \u5907\u4efd\u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u5907\u4efd\u54ea\u4e2a\u96c6\u7fa4\u7684 etcd \u6570\u636e\uff0c\u5e76\u5728\u7ec8\u7aef\u767b\u5f55
                • etcd \u5730\u5740\uff1a\u683c\u5f0f\u4e3a https://${\u8282\u70b9IP}:${\u7aef\u53e3\u53f7}

                  • \u5728\u6807\u51c6 Kubernetes \u96c6\u7fa4\u4e2d\uff0cetcd \u7684\u9ed8\u8ba4\u7aef\u53e3\u53f7\u4e3a 2379
                  • \u5728\u516c\u6709\u4e91\u6258\u7ba1\u96c6\u7fa4\u4e2d\uff0c\u9700\u8981\u8054\u7cfb\u76f8\u5173\u5f00\u53d1\u4eba\u5458\u83b7\u53d6 etcd \u7684\u7aef\u53e3\u53f7\u3002 \u8fd9\u662f\u56e0\u4e3a\u516c\u6709\u4e91\u96c6\u7fa4\u7684\u63a7\u5236\u9762\u7ec4\u4ef6\u7531\u4e91\u670d\u52a1\u63d0\u4f9b\u5546\u7ef4\u62a4\u548c\u7ba1\u7406\uff0c\u7528\u6237\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee\u6216\u67e5\u770b\u8fd9\u4e9b\u7ec4\u4ef6\uff0c \u4e5f\u65e0\u6cd5\u901a\u8fc7\u5e38\u89c4\u547d\u4ee4\uff08\u5982 kubectl\uff09\u65e0\u6cd5\u83b7\u53d6\u5230\u63a7\u5236\u9762\u7684\u7aef\u53e3\u7b49\u4fe1\u606f\u3002
                  \u83b7\u53d6\u7aef\u53e3\u53f7\u7684\u65b9\u5f0f
                  1. \u5728 kube-system \u547d\u540d\u7a7a\u95f4\u4e0b\u67e5\u627e etcd Pod

                    kubectl get po -n kube-system | grep etcd\n
                  2. \u83b7\u53d6 etcd Pod \u7684 listen-client-urls \u4e2d\u7684\u7aef\u53e3\u53f7

                    kubectl get po -n kube-system ${etcd_pod_name} -oyaml | grep listen-client-urls # (1)!\n
                    1. \u5c06 etcd_pod_name \u66ff\u6362\u4e3a\u5b9e\u9645\u7684 Pod \u540d\u79f0

                    \u9884\u671f\u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\uff0c\u8282\u70b9 IP \u540e\u7684\u6570\u5b57\u5373\u4e3a\u7aef\u53e3\u53f7:

                    - --listen-client-urls=https://127.0.0.1:2379,https://10.6.229.191:2379\n
                • CA \u8bc1\u4e66\uff1a\u53ef\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\uff0c\u7136\u540e\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u7c98\u8d34\u5230\u5bf9\u5e94\u4f4d\u7f6e\uff1a

                  cat /etc/kubernetes/ssl/etcd/ca.crt\n
                • Cert \u8bc1\u4e66\uff1a\u53ef\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\uff0c\u7136\u540e\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u7c98\u8d34\u5230\u5bf9\u5e94\u4f4d\u7f6e\uff1a

                  cat /etc/kubernetes/ssl/apiserver-etcd-client.crt\n
                • Key\uff1a\u53ef\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\uff0c\u7136\u540e\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u7c98\u8d34\u5230\u5bf9\u5e94\u4f4d\u7f6e\uff1a

                  cat /etc/kubernetes/ssl/apiserver-etcd-client.key\n

                Note

                \u70b9\u51fb\u8f93\u5165\u6846\u4e0b\u65b9\u7684 \u5982\u4f55\u83b7\u53d6 \u53ef\u4ee5\u5728 UI \u9875\u9762\u67e5\u770b\u83b7\u53d6\u5bf9\u5e94\u4fe1\u606f\u7684\u65b9\u5f0f\u3002

              3. \u53c2\u8003\u4ee5\u4e0b\u4fe1\u606f\u586b\u5199 \u5907\u4efd\u7b56\u7565 \u3002

                • \u5907\u4efd\u65b9\u5f0f\uff1a\u9009\u62e9\u624b\u52a8\u5907\u4efd\u6216\u5b9a\u65f6\u5907\u4efd

                  • \u624b\u52a8\u5907\u4efd\uff1a\u57fa\u4e8e\u5907\u4efd\u914d\u7f6e\u7acb\u5373\u6267\u884c\u4e00\u6b21 etcd \u5168\u91cf\u6570\u636e\u7684\u5907\u4efd\u3002
                  • \u5b9a\u65f6\u5907\u4efd\uff1a\u6309\u7167\u8bbe\u7f6e\u7684\u5907\u4efd\u9891\u7387\u5bf9 etcd \u6570\u636e\u8fdb\u884c\u5468\u671f\u6027\u5168\u91cf\u5907\u4efd\u3002
                • \u5907\u4efd\u94fe\u957f\u5ea6\uff1a\u6700\u591a\u4fdd\u7559\u591a\u5c11\u6761\u5907\u4efd\u6570\u636e\u3002\u9ed8\u8ba4\u4e3a 30 \u6761\u3002

                • \u5907\u4efd\u9891\u7387\uff1a\u652f\u6301\u5c0f\u65f6\u3001\u65e5\u3001\u5468\u3001\u6708\u7ea7\u522b\u548c\u81ea\u5b9a\u4e49\u65b9\u5f0f\u3002

              4. \u53c2\u8003\u4ee5\u4e0b\u4fe1\u606f\u586b\u5199 \u5b58\u50a8\u4f4d\u7f6e \u3002

                • \u5b58\u50a8\u4f9b\u5e94\u5546\uff1a\u9ed8\u8ba4\u9009\u62e9 S3 \u5b58\u50a8
                • \u5bf9\u8c61\u5b58\u50a8\u8bbf\u95ee\u5730\u5740\uff1aMinIO \u7684\u8bbf\u95ee\u5730\u5740
                • \u5b58\u50a8\u6876\uff1a\u5728 MinIO \u4e2d\u521b\u5efa\u4e00\u4e2a Bucket\uff0c\u586b\u5199 Bucket \u7684\u540d\u79f0
                • \u7528\u6237\u540d\uff1aMinIO \u7684\u767b\u5f55\u7528\u6237\u540d
                • \u5bc6\u7801\uff1aMinIO \u7684\u767b\u5f55\u5bc6\u7801

              5. \u70b9\u51fb \u786e\u5b9a \u540e\u9875\u9762\u81ea\u52a8\u8df3\u8f6c\u5230\u5907\u4efd\u7b56\u7565\u5217\u8868\uff0c\u53ef\u4ee5\u67e5\u770b\u76ee\u524d\u521b\u5efa\u597d\u7684\u6240\u6709\u7b56\u7565\u3002

                • \u5728\u7b56\u7565\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u6309\u94ae\u53ef\u4ee5\u67e5\u770b\u65e5\u5fd7\u3001\u67e5\u770b YAML\u3001\u66f4\u65b0\u7b56\u7565\u3001\u505c\u6b62\u7b56\u7565\u3001\u7acb\u5373\u6267\u884c\u7b56\u7565\u7b49\u3002
                • \u5f53\u5907\u4efd\u65b9\u5f0f\u4e3a\u624b\u52a8\u65f6\uff0c\u53ef\u4ee5\u70b9\u51fb \u7acb\u5373\u6267\u884c \u8fdb\u884c\u5907\u4efd\u3002
                • \u5f53\u5907\u4efd\u65b9\u5f0f\u4e3a\u5b9a\u65f6\u5907\u4efd\u65f6\uff0c\u5219\u4f1a\u6839\u636e\u914d\u7f6e\u7684\u65f6\u95f4\u8fdb\u884c\u5907\u4efd\u3002

              "},{"location":"end-user/kpanda/backup/etcd-backup.html#_2","title":"\u67e5\u770b\u5907\u4efd\u7b56\u7565\u65e5\u5fd7","text":"

              \u70b9\u51fb \u65e5\u5fd7 \u53ef\u4ee5\u67e5\u770b\u65e5\u5fd7\u5185\u5bb9\uff0c\u9ed8\u8ba4\u5c55\u793a 100 \u884c\u3002\u82e5\u60f3\u67e5\u770b\u66f4\u591a\u65e5\u5fd7\u4fe1\u606f\u6216\u8005\u4e0b\u8f7d\u65e5\u5fd7\uff0c\u53ef\u5728\u65e5\u5fd7\u4e0a\u65b9\u6839\u636e\u63d0\u793a\u524d\u5f80\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u3002

              "},{"location":"end-user/kpanda/backup/etcd-backup.html#_3","title":"\u67e5\u770b\u5907\u4efd\u7b56\u7565\u8be6\u60c5","text":"

              \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d -> etcd \u5907\u4efd \uff0c\u70b9\u51fb \u5907\u4efd\u7b56\u7565 \u9875\u7b7e\uff0c\u63a5\u7740\u70b9\u51fb\u7b56\u7565\u540d\u79f0\u53ef\u4ee5\u67e5\u770b\u7b56\u7565\u8be6\u60c5\u3002

              "},{"location":"end-user/kpanda/backup/etcd-backup.html#_4","title":"\u67e5\u770b\u5907\u4efd\u70b9","text":"
              1. \u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5907\u4efd\u6062\u590d -> etcd \u5907\u4efd \uff0c\u70b9\u51fb \u5907\u4efd\u70b9 \u9875\u7b7e\u3002
              2. \u9009\u62e9\u76ee\u6807\u96c6\u7fa4\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u96c6\u7fa4\u4e0b\u6240\u6709\u5907\u4efd\u4fe1\u606f\u3002

                \u6bcf\u6267\u884c\u4e00\u6b21\u5907\u4efd\uff0c\u5bf9\u5e94\u751f\u6210\u4e00\u4e2a\u5907\u4efd\u70b9\uff0c\u53ef\u901a\u8fc7\u6210\u529f\u72b6\u6001\u7684\u5907\u4efd\u70b9\u5feb\u901f\u6062\u590d\u5e94\u7528\u3002

              "},{"location":"end-user/kpanda/backup/install-velero.html","title":"\u5b89\u88c5 velero \u63d2\u4ef6","text":"

              velero \u662f\u4e00\u4e2a\u5907\u4efd\u548c\u6062\u590d Kubernetes \u96c6\u7fa4\u8d44\u6e90\u7684\u5f00\u6e90\u5de5\u5177\u3002\u5b83\u53ef\u4ee5\u5c06 Kubernetes \u96c6\u7fa4\u4e2d\u7684\u8d44\u6e90\u5907\u4efd\u5230\u4e91\u5b58\u50a8\u670d\u52a1\u3001\u672c\u5730\u5b58\u50a8\u6216\u5176\u4ed6\u4f4d\u7f6e\uff0c\u5e76\u4e14\u53ef\u4ee5\u5728\u9700\u8981\u65f6\u5c06\u8fd9\u4e9b\u8d44\u6e90\u6062\u590d\u5230\u540c\u4e00\u6216\u4e0d\u540c\u7684\u96c6\u7fa4\u4e2d\u3002

              \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528 Helm \u5e94\u7528 \u90e8\u7f72 velero \u63d2\u4ef6\u3002

              "},{"location":"end-user/kpanda/backup/install-velero.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

              \u5b89\u88c5 velero \u63d2\u4ef6\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

              • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

              • \u521b\u5efa velero \u547d\u540d\u7a7a\u95f4\u3002

              • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

              "},{"location":"end-user/kpanda/backup/install-velero.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

              \u8bf7\u6267\u884c\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 velero \u63d2\u4ef6\u3002

              1. \u5728\u96c6\u7fa4\u5217\u8868\u9875\u9762\u627e\u5230\u9700\u8981\u5b89\u88c5 velero \u63d2\u4ef6\u7684\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u5728\u641c\u7d22\u680f\u8f93\u5165 velero \u8fdb\u884c\u641c\u7d22\u3002

              2. \u9605\u8bfb velero \u63d2\u4ef6\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u672c\u6587\u5c06\u4ee5 4.0.2 \u7248\u672c\u4e3a\u4f8b\u8fdb\u884c\u5b89\u88c5\uff0c\u63a8\u8350\u5b89\u88c5 4.0.2 \u6216\u66f4\u9ad8\u7248\u672c\u3002

              3. \u586b\u5199\u548c\u914d\u7f6e\u53c2\u6570\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65

                \u57fa\u672c\u53c2\u6570\u53c2\u6570\u914d\u7f6e

                • \u540d\u79f0\uff1a\u5fc5\u586b\u53c2\u6570\uff0c\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09,\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 metrics-server-01\u3002
                • \u547d\u540d\u7a7a\u95f4\uff1a\u63d2\u4ef6\u5b89\u88c5\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4e3a velero \u547d\u540d\u7a7a\u95f4\u3002
                • \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 4.0.2 \u7248\u672c\u4e3a\u4f8b\u3002
                • \u5c31\u7eea\u7b49\u5f85\uff1a\u53ef\u9009\u53c2\u6570\uff0c\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u6240\u6709\u5173\u8054\u8d44\u6e90\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
                • \u5931\u8d25\u5220\u9664\uff1a\u53ef\u9009\u53c2\u6570\uff0c\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f\u5c31\u7eea\u7b49\u5f85\u3002\u5982\u679c\u5b89\u88c5\u5931\u8d25\uff0c\u5c06\u5220\u9664\u5b89\u88c5\u76f8\u5173\u8d44\u6e90\u3002
                • \u8be6\u60c5\u65e5\u5fd7\uff1a\u53ef\u9009\u53c2\u6570\uff0c\u5f00\u542f\u540e\u5c06\u8f93\u51fa\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

                Note

                \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u7ecf\u8fc7\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

                • S3 Credentials\uff1a

                  • Use secret \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e true \u3002
                  • Secret name \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e velero-s3-credential \u3002
                  • SecretContents.aws_access_key_id = \uff1a\u914d\u7f6e\u8bbf\u95ee\u5bf9\u8c61\u5b58\u50a8\u7684\u7528\u6237\u540d\uff0c\u66ff\u6362 \u4e3a\u771f\u5b9e\u53c2\u6570\u3002
                  • SecretContents.aws_secret_access_key = \uff1a\u914d\u7f6e\u8bbf\u95ee\u5bf9\u8c61\u5b58\u50a8\u7684\u5bc6\u7801\uff0c\u66ff\u6362 \u4e3a\u771f\u5b9e\u53c2\u6570\u3002

                    config \"SecretContents \u6837\u4f8b\" [default] aws_access_key_id = minio aws_secret_access_key = minio123

                  • Velero Configuration\uff1a

                    • Backupstoragelocation \uff1avelero \u5907\u4efd\u6570\u636e\u5b58\u50a8\u7684\u4f4d\u7f6e
                    • S3 bucket \uff1a\u7528\u4e8e\u4fdd\u5b58\u5907\u4efd\u6570\u636e\u7684\u5b58\u50a8\u6876\u540d\u79f0(\u9700\u4e3a minio \u5df2\u7ecf\u5b58\u5728\u7684\u771f\u5b9e\u5b58\u50a8\u6876)
                    • Is default BackupStorage \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e true
                    • S3 access mode \uff1avelero \u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u6a21\u5f0f\uff0c\u53ef\u4ee5\u9009\u62e9
                      • ReadWrite \uff1a\u5141\u8bb8 velero \u8bfb\u5199\u5907\u4efd\u6570\u636e
                      • ReadOnly \uff1a\u5141\u8bb8 velero \u8bfb\u53d6\u5907\u4efd\u6570\u636e\uff0c\u4e0d\u80fd\u4fee\u6539\u5907\u4efd\u6570\u636e
                      • WriteOnly \uff1a\u53ea\u5141\u8bb8 velero \u5199\u5165\u5907\u4efd\u6570\u636e\uff0c\u4e0d\u80fd\u8bfb\u53d6\u5907\u4efd\u6570\u636e
                    • S3 Configs \uff1aS3 \u5b58\u50a8\uff08minio\uff09\u7684\u8be6\u7ec6\u914d\u7f6e
                    • S3 region \uff1a\u4e91\u5b58\u50a8\u7684\u5730\u7406\u533a\u57df\u3002\u9ed8\u8ba4\u4f7f\u7528 us-east-1 \u53c2\u6570\uff0c\u7531\u7cfb\u7edf\u7ba1\u7406\u5458\u63d0\u4f9b
                    • S3 force path style \uff1a\u4fdd\u6301\u9ed8\u8ba4\u914d\u7f6e true
                    • S3 server URL \uff1a\u5bf9\u8c61\u5b58\u50a8\uff08minio\uff09\u7684\u63a7\u5236\u53f0\u8bbf\u95ee\u5730\u5740\uff0cminio \u4e00\u822c\u63d0\u4f9b\u4e86 UI \u8bbf\u95ee\u548c\u63a7\u5236\u53f0\u8bbf\u95ee\u4e24\u4e2a\u670d\u52a1\uff0c\u6b64\u5904\u8bf7\u4f7f\u7528\u63a7\u5236\u53f0\u8bbf\u95ee\u7684\u5730\u5740

                    Note

                    \u8bf7\u786e\u4fdd s3 \u5b58\u50a8\u670d\u52a1\u65f6\u95f4\u8ddf\u5907\u4efd\u8fd8\u539f\u96c6\u7fa4\u65f6\u95f4\u5dee\u572810\u5206\u949f\u4ee5\u5185\uff0c\u6700\u597d\u662f\u65f6\u95f4\u4fdd\u6301\u540c\u6b65\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u6267\u884c\u5907\u4efd\u64cd\u4f5c\u3002

                  • migration plugin configuration\uff1a\u542f\u7528\u4e4b\u540e\uff0c\u5c06\u5728\u4e0b\u4e00\u6b65\u7684 YAML \u4ee3\u7801\u6bb5\u4e2d\u65b0\u589e\uff1a

                    ...\ninitContainers:\n  - image: 'release.daocloud.io/kcoral/velero-plugin-for-migration:v0.3.0'\n    imagePullPolicy: IfNotPresent\n    name: velero-plugin-for-migration\n    volumeMounts:\n      - mountPath: /target\n        name: plugins\n  - image: 'docker.m.daocloud.io/velero/velero-plugin-for-csi:v0.7.0'\n    imagePullPolicy: IfNotPresent\n    name: velero-plugin-for-csi\n    volumeMounts:\n      - mountPath: /target\n        name: plugins\n  - image: 'docker.m.daocloud.io/velero/velero-plugin-for-aws:v1.9.0'\n    imagePullPolicy: IfNotPresent\n    name: velero-plugin-for-aws\n    volumeMounts:\n      - mountPath: /target\n        name: plugins\n...\n
                  • \u786e\u8ba4 YAML \u65e0\u8bef\u540e\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210 velero \u63d2\u4ef6\u7684\u5b89\u88c5\u3002 \u4e4b\u540e\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\uff0c\u7a0d\u7b49\u51e0\u5206\u949f\u540e\uff0c\u4e3a\u9875\u9762\u6267\u884c\u5237\u65b0\u64cd\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

                  • "},{"location":"end-user/kpanda/clusterops/cluster-oversold.html","title":"\u96c6\u7fa4\u52a8\u6001\u8d44\u6e90\u8d85\u5356","text":"

                    \u76ee\u524d\uff0c\u8bb8\u591a\u4e1a\u52a1\u5b58\u5728\u5cf0\u503c\u548c\u4f4e\u8c37\u7684\u73b0\u8c61\u3002\u4e3a\u4e86\u786e\u4fdd\u670d\u52a1\u7684\u6027\u80fd\u548c\u7a33\u5b9a\u6027\uff0c\u5728\u90e8\u7f72\u670d\u52a1\u65f6\uff0c\u901a\u5e38\u4f1a\u6839\u636e\u5cf0\u503c\u9700\u6c42\u6765\u7533\u8bf7\u8d44\u6e90\u3002 \u7136\u800c\uff0c\u5cf0\u503c\u671f\u53ef\u80fd\u975e\u5e38\u77ed\u6682\uff0c\u5bfc\u81f4\u5728\u975e\u5cf0\u503c\u671f\u65f6\u8d44\u6e90\u88ab\u6d6a\u8d39\u3002 \u96c6\u7fa4\u8d44\u6e90\u8d85\u5356 \u5c31\u662f\u5c06\u8fd9\u4e9b\u7533\u8bf7\u4e86\u800c\u672a\u4f7f\u7528\u7684\u8d44\u6e90\uff08\u5373\u7533\u8bf7\u91cf\u4e0e\u4f7f\u7528\u91cf\u7684\u5dee\u503c\uff09\u5229\u7528\u8d77\u6765\uff0c\u4ece\u800c\u63d0\u5347\u96c6\u7fa4\u8d44\u6e90\u5229\u7528\u7387\uff0c\u51cf\u5c11\u8d44\u6e90\u6d6a\u8d39\u3002

                    \u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528\u96c6\u7fa4\u52a8\u6001\u8d44\u6e90\u8d85\u5356\u529f\u80fd\u3002

                    "},{"location":"end-user/kpanda/clusterops/cluster-oversold.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
                    • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 Cluster Admin \uff0c \u8be6\u60c5\u53ef\u53c2\u8003\u96c6\u7fa4\u6388\u6743\u3002
                    "},{"location":"end-user/kpanda/clusterops/cluster-oversold.html#_3","title":"\u5f00\u542f\u96c6\u7fa4\u8d85\u5356","text":"
                    1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762

                    2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u8bbe\u7f6e \uff0c\u7136\u540e\u9009\u62e9 \u9ad8\u7ea7\u914d\u7f6e \u9875\u7b7e

                    3. \u6253\u5f00\u96c6\u7fa4\u8d85\u5356\uff0c\u8bbe\u7f6e\u8d85\u5356\u6bd4

                      • \u82e5\u672a\u5b89\u88c5 cro-operator \u63d2\u4ef6\uff0c\u70b9\u51fb \u7acb\u5373\u5b89\u88c5 \u6309\u94ae\uff0c\u5b89\u88c5\u6d41\u7a0b\u53c2\u8003\u7ba1\u7406 Helm \u5e94\u7528
                      • \u82e5\u5df2\u5b89\u88c5 cro-operator \u63d2\u4ef6\uff0c\u6253\u5f00\u96c6\u7fa4\u8d85\u5356\u5f00\u5173\uff0c\u5219\u53ef\u4ee5\u5f00\u59cb\u4f7f\u7528\u96c6\u7fa4\u8d85\u5356\u529f\u80fd\u3002

                      Note

                      \u9700\u8981\u5728\u96c6\u7fa4\u4e0b\u5bf9\u5e94\u7684 namespace \u6253\u4e0a\u5982\u4e0b\u6807\u7b7e\uff0c\u96c6\u7fa4\u8d85\u5356\u7b56\u7565\u624d\u80fd\u751f\u6548\u3002

                      clusterresourceoverrides.admission.autoscaling.openshift.io/enabled: \"true\"\n

                    "},{"location":"end-user/kpanda/clusterops/cluster-oversold.html#_4","title":"\u4f7f\u7528\u96c6\u7fa4\u8d85\u5356","text":"

                    \u8bbe\u7f6e\u597d\u96c6\u7fa4\u52a8\u6001\u8d44\u6e90\u8d85\u5356\u6bd4\u540e\uff0c\u4f1a\u5728\u5de5\u4f5c\u8d1f\u8f7d\u8fd0\u884c\u65f6\u751f\u6548\u3002\u4e0b\u6587\u4ee5 niginx \u4e3a\u4f8b\uff0c\u9a8c\u8bc1\u4f7f\u7528\u8d44\u6e90\u8d85\u5356\u80fd\u529b\u3002

                    1. \u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d nginx \u5e76\u8bbe\u7f6e\u5bf9\u5e94\u7684\u8d44\u6e90\u9650\u5236\u503c\uff0c\u521b\u5efa\u6d41\u7a0b\u53c2\u8003\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09

                    2. \u67e5\u770b\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u8d44\u6e90\u7533\u8bf7\u503c\u4e0e\u9650\u5236\u503c\u7684\u6bd4\u503c\u662f\u5426\u7b26\u5408\u8d85\u552e\u6bd4

                    "},{"location":"end-user/kpanda/clusterops/cluster-settings.html","title":"\u96c6\u7fa4\u8bbe\u7f6e","text":"

                    \u96c6\u7fa4\u8bbe\u7f6e\u7528\u4e8e\u4e3a\u60a8\u7684\u96c6\u7fa4\u81ea\u5b9a\u4e49\u9ad8\u7ea7\u7279\u6027\u8bbe\u7f6e\uff0c\u5305\u62ec\u662f\u5426\u542f\u7528 GPU\u3001Helm \u4ed3\u5e93\u5237\u65b0\u5468\u671f\u3001Helm \u64cd\u4f5c\u8bb0\u5f55\u4fdd\u7559\u7b49\u3002

                    • \u542f\u7528 GPU\uff1a\u9700\u8981\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU \u5361\u53ca\u5bf9\u5e94\u9a71\u52a8\u63d2\u4ef6\u3002

                      \u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6700\u8fd1\u64cd\u4f5c -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \u3002

                    • Helm \u64cd\u4f5c\u57fa\u7840\u955c\u50cf\u3001\u4ed3\u5e93\u5237\u65b0\u5468\u671f\u3001\u64cd\u4f5c\u8bb0\u5f55\u4fdd\u7559\u6761\u6570\u3001\u662f\u5426\u5f00\u542f\u96c6\u7fa4\u5220\u9664\u4fdd\u62a4\uff08\u5f00\u542f\u540e\u96c6\u7fa4\u5c06\u4e0d\u80fd\u76f4\u63a5\u5378\u8f7d\uff09

                    "},{"location":"end-user/kpanda/clusterops/latest-operations.html","title":"\u6700\u8fd1\u64cd\u4f5c","text":"

                    \u5728\u8be5\u9875\u9762\u53ef\u4ee5\u67e5\u770b\u6700\u8fd1\u7684\u96c6\u7fa4\u64cd\u4f5c\u8bb0\u5f55\u548c Helm \u64cd\u4f5c\u8bb0\u5f55\uff0c\u4ee5\u53ca\u5404\u9879\u64cd\u4f5c\u7684 YAML \u6587\u4ef6\u548c\u65e5\u5fd7\uff0c\u4e5f\u53ef\u4ee5\u5220\u9664\u67d0\u4e00\u6761\u8bb0\u5f55\u3002

                    \u8bbe\u7f6e Helm \u64cd\u4f5c\u7684\u4fdd\u7559\u6761\u6570\uff1a

                    \u7cfb\u7edf\u9ed8\u8ba4\u4fdd\u7559\u6700\u8fd1 100 \u6761 Helm \u64cd\u4f5c\u8bb0\u5f55\u3002\u82e5\u4fdd\u7559\u6761\u6570\u592a\u591a\uff0c\u53ef\u80fd\u4f1a\u9020\u6210\u6570\u636e\u5197\u4f59\uff0c\u4fdd\u7559\u6761\u6570\u592a\u5c11\u53ef\u80fd\u4f1a\u9020\u6210\u60a8\u6240\u9700\u8981\u7684\u5173\u952e\u64cd\u4f5c\u8bb0\u5f55\u7684\u7f3a\u5931\u3002\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8bbe\u7f6e\u5408\u7406\u7684\u4fdd\u7559\u6570\u91cf\u3002\u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff1a

                    1. \u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6700\u8fd1\u64cd\u4f5c -> Helm \u64cd\u4f5c -> \u8bbe\u7f6e\u4fdd\u7559\u6761\u6570 \u3002

                    2. \u8bbe\u7f6e\u9700\u8981\u4fdd\u7559\u591a\u5c11\u6761 Helm \u64cd\u4f5c\u8bb0\u5f55\uff0c\u5e76\u70b9\u51fb \u786e\u5b9a \u3002

                    "},{"location":"end-user/kpanda/clusters/access-cluster.html","title":"\u8bbf\u95ee\u96c6\u7fa4","text":"

                    \u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\uff0c\u4e0d\u4ec5\u53ef\u4ee5\u901a\u8fc7 UI \u754c\u9762\u76f4\u63a5\u8bbf\u95ee\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5176\u4ed6\u4e24\u79cd\u65b9\u5f0f\u8fdb\u884c\u8bbf\u95ee\u63a7\u5236\uff1a

                    • \u901a\u8fc7 CloudShell \u5728\u7ebf\u8bbf\u95ee
                    • \u4e0b\u8f7d\u96c6\u7fa4\u8bc1\u4e66\u540e\u901a\u8fc7 kubectl \u8fdb\u884c\u8bbf\u95ee

                    Note

                    \u8bbf\u95ee\u96c6\u7fa4\u65f6\uff0c\u7528\u6237\u5e94\u5177\u6709 Cluster Admin \u6743\u9650\u6216\u66f4\u9ad8\u6743\u9650\u3002

                    "},{"location":"end-user/kpanda/clusters/access-cluster.html#cloudshell","title":"\u901a\u8fc7 CloudShell \u8bbf\u95ee","text":"
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9009\u62e9\u9700\u8981\u901a\u8fc7 CloudShell \u8bbf\u95ee\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u56fe\u6807\u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb \u63a7\u5236\u53f0 \u3002

                    2. \u5728 CloudShell \u63a7\u5236\u53f0\u6267\u884c kubectl get node \u547d\u4ee4\uff0c\u9a8c\u8bc1 CloudShell \u4e0e\u96c6\u7fa4\u7684\u8fde\u901a\u6027\u3002\u5982\u56fe\uff0c\u63a7\u5236\u53f0\u5c06\u8fd4\u56de\u96c6\u7fa4\u4e0b\u7684\u8282\u70b9\u4fe1\u606f\u3002

                    \u73b0\u5728\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 CloudShell \u6765\u8bbf\u95ee\u5e76\u7ba1\u7406\u8be5\u96c6\u7fa4\u4e86\u3002

                    "},{"location":"end-user/kpanda/clusters/access-cluster.html#kubectl","title":"\u901a\u8fc7 kubectl \u8bbf\u95ee","text":"

                    \u901a\u8fc7\u672c\u5730\u8282\u70b9\u8bbf\u95ee\u5e76\u7ba1\u7406\u4e91\u7aef\u96c6\u7fa4\u65f6\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\uff1a

                    • \u672c\u5730\u8282\u70b9\u548c\u4e91\u7aef\u96c6\u7fa4\u7684\u7f51\u7edc\u4e92\u8054\u4e92\u901a\u3002
                    • \u5df2\u7ecf\u5c06\u96c6\u7fa4\u8bc1\u4e66\u4e0b\u8f7d\u5230\u4e86\u672c\u5730\u8282\u70b9\u3002
                    • \u672c\u5730\u8282\u70b9\u5df2\u7ecf\u5b89\u88c5\u4e86 kubectl \u5de5\u5177\u3002\u5173\u4e8e\u8be6\u7ec6\u7684\u5b89\u88c5\u65b9\u5f0f\uff0c\u8bf7\u53c2\u9605\u5b89\u88c5 kubectl\u3002

                    \u6ee1\u8db3\u4e0a\u8ff0\u6761\u4ef6\u540e\uff0c\u6309\u7167\u4e0b\u65b9\u6b65\u9aa4\u4ece\u672c\u5730\u8bbf\u95ee\u4e91\u7aef\u96c6\u7fa4\uff1a

                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9009\u62e9\u9700\u8981\u4e0b\u8f7d\u8bc1\u4e66\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \uff0c\u5e76\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u70b9\u51fb \u8bc1\u4e66\u83b7\u53d6 \u3002

                    2. \u9009\u62e9\u8bc1\u4e66\u6709\u6548\u671f\u5e76\u70b9\u51fb \u4e0b\u8f7d\u8bc1\u4e66 \u3002

                    3. \u6253\u5f00\u4e0b\u8f7d\u597d\u7684\u96c6\u7fa4\u8bc1\u4e66\uff0c\u5c06\u8bc1\u4e66\u5185\u5bb9\u590d\u5236\u81f3\u672c\u5730\u8282\u70b9\u7684 config \u6587\u4ef6\u3002

                      kubectl \u5de5\u5177\u9ed8\u8ba4\u4f1a\u4ece\u672c\u5730\u8282\u70b9\u7684 $HOME/.kube \u76ee\u5f55\u4e0b\u67e5\u627e\u540d\u4e3a config \u7684\u6587\u4ef6\u3002\u8be5\u6587\u4ef6\u5b58\u50a8\u4e86\u76f8\u5173\u96c6\u7fa4\u7684\u8bbf\u95ee\u51ed\u8bc1\uff0ckubectl \u53ef\u4ee5\u51ed\u8be5\u914d\u7f6e\u6587\u4ef6\u8fde\u63a5\u81f3\u96c6\u7fa4\u3002

                    4. \u5728\u672c\u5730\u8282\u70b9\u4e0a\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u9a8c\u8bc1\u96c6\u7fa4\u7684\u8fde\u901a\u6027\uff1a

                      kubectl get pod -n default\n

                      \u9884\u671f\u7684\u8f93\u51fa\u7c7b\u4f3c\u4e8e:

                      NAME                            READY   STATUS      RESTARTS    AGE\ndao-2048-2048-58c7f7fc5-mq7h4   1/1     Running     0           30h\n

                    \u73b0\u5728\u60a8\u53ef\u4ee5\u5728\u672c\u5730\u901a\u8fc7 kubectl \u8bbf\u95ee\u5e76\u7ba1\u7406\u8be5\u96c6\u7fa4\u4e86\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-role.html","title":"\u96c6\u7fa4\u89d2\u8272","text":"

                    \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u57fa\u4e8e\u96c6\u7fa4\u7684\u4e0d\u540c\u529f\u80fd\u5b9a\u4f4d\u5bf9\u96c6\u7fa4\u8fdb\u884c\u4e86\u89d2\u8272\u5206\u7c7b\uff0c\u5e2e\u52a9\u7528\u6237\u66f4\u597d\u5730\u7ba1\u7406 IT \u57fa\u7840\u8bbe\u65bd\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-role.html#_2","title":"\u5168\u5c40\u670d\u52a1\u96c6\u7fa4","text":"

                    \u6b64\u96c6\u7fa4\u7528\u4e8e\u8fd0\u884c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7ec4\u4ef6\uff0c\u4f8b\u5982\u5bb9\u5668\u7ba1\u7406\u3001\u5168\u5c40\u7ba1\u7406\u3001\u53ef\u89c2\u6d4b\u6027\u3001\u955c\u50cf\u4ed3\u5e93\u7b49\u3002 \u4e00\u822c\u4e0d\u627f\u8f7d\u4e1a\u52a1\u8d1f\u8f7d\u3002

                    \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c 1.22+ \u64cd\u4f5c\u7cfb\u7edf RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86\uff1bUbuntu 18.04 x86, Ubuntu 20.04 x86\uff1bCentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc Calico\u3001Cillium\u3001Multus \u548c\u5176\u5b83 CNI \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565"},{"location":"end-user/kpanda/clusters/cluster-role.html#_3","title":"\u7ba1\u7406\u96c6\u7fa4","text":"

                    \u6b64\u96c6\u7fa4\u7528\u4e8e\u7ba1\u7406\u5de5\u4f5c\u96c6\u7fa4\uff0c\u4e00\u822c\u4e0d\u627f\u8f7d\u4e1a\u52a1\u8d1f\u8f7d\u3002

                    • \u7ecf\u5178\u6a21\u5f0f\u5c06\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u548c\u7ba1\u7406\u96c6\u7fa4\u90e8\u7f72\u5728\u4e0d\u540c\u7684\u96c6\u7fa4\uff0c\u9002\u7528\u4e8e\u4f01\u4e1a\u591a\u6570\u636e\u4e2d\u5fc3\u3001\u591a\u67b6\u6784\u7684\u573a\u666f\u3002
                    • \u7b80\u7ea6\u6a21\u5f0f\u5c06\u7ba1\u7406\u96c6\u7fa4\u548c\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u90e8\u7f72\u5728\u540c\u4e00\u4e2a\u96c6\u7fa4\u5185\u3002
                    \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c 1.22+ \u64cd\u4f5c\u7cfb\u7edf RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86\uff1bUbuntu 18.04 x86, Ubuntu 20.04 x86\uff1bCentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc Calico\u3001Cillium\u3001Multus \u548c\u5176\u5b83 CNI \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565"},{"location":"end-user/kpanda/clusters/cluster-role.html#_4","title":"\u5de5\u4f5c\u96c6\u7fa4","text":"

                    \u8fd9\u662f\u4f7f\u7528\u5bb9\u5668\u7ba1\u7406\u521b\u5efa\u7684\u96c6\u7fa4\uff0c\u4e3b\u8981\u7528\u4e8e\u627f\u8f7d\u4e1a\u52a1\u8d1f\u8f7d\u3002\u8be5\u96c6\u7fa4\u7531\u7ba1\u7406\u96c6\u7fa4\u8fdb\u884c\u7ba1\u7406\u3002

                    \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c \u652f\u6301 K8s 1.22 \u53ca\u4ee5\u4e0a\u7248\u672c \u64cd\u4f5c\u7cfb\u7edf RedHat 7.6 x86/ARM, RedHat 7.9 x86, RedHat 8.4 x86/ARM, RedHat 8.6 x86\uff1bUbuntu 18.04 x86, Ubuntu 20.04 x86\uff1bCentOS 7.6 x86/AMD, CentOS 7.9 x86/AMD \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc Calico\u3001Cillium\u3001Multus \u548c\u5176\u5b83 CNI \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565"},{"location":"end-user/kpanda/clusters/cluster-role.html#_5","title":"\u63a5\u5165\u96c6\u7fa4","text":"

                    \u6b64\u96c6\u7fa4\u7528\u4e8e\u63a5\u5165\u5df2\u6709\u7684\u6807\u51c6 K8s \u96c6\u7fa4\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\u672c\u5730\u6570\u636e\u4e2d\u5fc3\u81ea\u5efa\u96c6\u7fa4\u3001\u516c\u6709\u4e91\u5382\u5546\u63d0\u4f9b\u7684\u96c6\u7fa4\u3001\u79c1\u6709\u4e91\u5382\u5546\u63d0\u4f9b\u7684\u96c6\u7fa4\u3001\u8fb9\u7f18\u96c6\u7fa4\u3001\u4fe1\u521b\u96c6\u7fa4\u3001\u5f02\u6784\u96c6\u7fa4\u3002\u4e3b\u8981\u7528\u4e8e\u627f\u62c5\u4e1a\u52a1\u8d1f\u8f7d\u3002

                    \u652f\u6301\u7684\u529f\u80fd \u63cf\u8ff0 K8s \u7248\u672c 1.18+ \u652f\u6301\u53cb\u5546 Vmware Tanzu\u3001Amazon EKS\u3001Redhat Openshift\u3001SUSE Rancher\u3001\u963f\u91cc ACK\u3001\u534e\u4e3a CCE\u3001\u817e\u8baf TKE\u3001\u6807\u51c6 K8s \u96c6\u7fa4\u3001\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u96c6\u7fa4\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406 \u4e0d\u652f\u6301 K8s \u8d44\u6e90\u7ba1\u7406 \u652f\u6301 \u4e91\u539f\u751f\u5b58\u50a8 \u652f\u6301 \u4e91\u539f\u751f\u7f51\u7edc \u4f9d\u8d56\u4e8e\u63a5\u5165\u96c6\u7fa4\u53d1\u884c\u7248\u7f51\u7edc\u6a21\u5f0f \u7b56\u7565\u7ba1\u7406 \u652f\u6301\u7f51\u7edc\u7b56\u7565\u3001\u914d\u989d\u7b56\u7565\u3001\u8d44\u6e90\u9650\u5236\u3001\u707e\u5907\u7b56\u7565\u3001\u5b89\u5168\u7b56\u7565

                    Note

                    \u4e00\u4e2a\u96c6\u7fa4\u53ef\u4ee5\u6709\u591a\u4e2a\u96c6\u7fa4\u89d2\u8272\uff0c\u4f8b\u5982\u4e00\u4e2a\u96c6\u7fa4\u65e2\u53ef\u4ee5\u662f\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\uff0c\u4e5f\u53ef\u4ee5\u662f\u7ba1\u7406\u96c6\u7fa4\u6216\u5de5\u4f5c\u96c6\u7fa4\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-scheduler-plugin.html","title":"\u5982\u4f55\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u7b2c\u4e8c\u8c03\u5ea6\u5668 scheduler-plugins","text":"

                    \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u7b2c\u4e8c\u4e2a\u8c03\u5ea6\u5668 scheduler-plugins\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-scheduler-plugin.html#scheduler-plugins_1","title":"\u4e3a\u4ec0\u4e48\u9700\u8981 scheduler-plugins\uff1f","text":"

                    \u901a\u8fc7\u5e73\u53f0\u521b\u5efa\u7684\u96c6\u7fa4\u4e2d\u4f1a\u5b89\u88c5 K8s \u539f\u751f\u7684\u8c03\u5ea6\u5668\uff0c\u4f46\u662f\u539f\u751f\u7684\u8c03\u5ea6\u5668\u5b58\u5728\u5f88\u591a\u7684\u5c40\u9650\u6027\uff1a

                    • \u539f\u751f\u7684\u8c03\u5ea6\u5668\u65e0\u6cd5\u6ee1\u8db3\u8c03\u5ea6\u9700\u6c42\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528 CoScheduling\u3001 CapacityScheduling \u7b49 scheduler-plugins \u63d2\u4ef6\u3002
                    • \u5728\u7279\u6b8a\u7684\u573a\u666f\uff0c\u9700\u8981\u65b0\u7684\u8c03\u5ea6\u5668\u6765\u5b8c\u6210\u8c03\u5ea6\u4efb\u52a1\u800c\u4e0d\u5f71\u54cd\u539f\u751f\u8c03\u5ea6\u5668\u7684\u6d41\u7a0b\u3002
                    • \u533a\u5206\u4e0d\u540c\u529f\u80fd\u7684\u8c03\u5ea6\u5668\uff0c\u901a\u8fc7\u5207\u6362\u8c03\u5ea6\u5668\u540d\u79f0\u6765\u5b9e\u73b0\u4e0d\u540c\u7684\u8c03\u5ea6\u573a\u666f\u3002

                    \u672c\u6587\u4ee5\u4f7f\u7528 vgpu \u8c03\u5ea6\u5668\u7684\u540c\u65f6\uff0c\u60f3\u7ed3\u5408 scheduler-plugins \u7684 coscheduling \u63d2\u4ef6\u80fd\u529b\u7684\u573a\u666f\u4e3a\u793a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5\u5e76\u4f7f\u7528 scheduler-plugins\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-scheduler-plugin.html#scheduler-plugins_2","title":"\u5b89\u88c5 scheduler-plugins","text":""},{"location":"end-user/kpanda/clusters/cluster-scheduler-plugin.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
                    • kubean \u662f\u5728 v0.13.0 \u7248\u672c\u63a8\u51fa\u7684\u65b0\u529f\u80fd\uff0c\u9009\u62e9\u7ba1\u7406\u96c6\u7fa4\u65f6\u8bf7\u786e\u4fdd\u7248\u672c\u4e0d\u4f4e\u4e8e\u6b64\u7248\u672c\u3002
                    • \u5b89\u88c5 scheduler-plugins \u7248\u672c\u4e3a v0.27.8\uff0c\u8bf7\u786e\u4fdd\u96c6\u7fa4\u7248\u672c\u662f\u5426\u4e0e\u5b83\u517c\u5bb9\u3002 \u53c2\u8003\u6587\u6863 Compatibility Matrix\u3002
                    "},{"location":"end-user/kpanda/clusters/cluster-scheduler-plugin.html#_2","title":"\u5b89\u88c5\u6d41\u7a0b","text":"
                    1. \u5728 \u521b\u5efa\u96c6\u7fa4 -> \u9ad8\u7ea7\u914d\u7f6e -> \u81ea\u5b9a\u4e49\u53c2\u6570 \u4e2d\u6dfb\u52a0 scheduler-plugins \u53c2\u6570

                      scheduler_plugins_enabled:true\nscheduler_plugins_plugin_config:\n  - name: Coscheduling\n    args:\n      permitWaitingTimeSeconds: 10 # default is 60\n

                      \u53c2\u6570\u8bf4\u660e\uff1a

                      • scheduler_plugins_enabled \u8bbe\u7f6e\u4e3a true \u65f6\uff0c\u5f00\u542f scheduler-plugins \u63d2\u4ef6\u80fd\u529b\u3002
                      • \u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e scheduler_plugins_enabled_plugins \u6216 scheduler_plugins_disabled_plugins \u9009\u9879\u6765\u542f\u7528\u6216\u7981\u7528\u67d0\u4e9b\u63d2\u4ef6\u3002 \u53c2\u9605 K8s \u5b98\u65b9\u63d2\u4ef6\u540d\u79f0\u3002
                      • \u5982\u679c\u9700\u8981\u8bbe\u7f6e\u81ea\u5b9a\u4e49\u63d2\u4ef6\u7684\u53c2\u6570\u8bf7\u914d\u7f6e scheduler_plugins_plugin_config\uff0c\u4f8b\u5982\uff1a\u8bbe\u7f6e coscheduling \u7684 permitWaitingTimeoutSeconds \u53c2\u6570\u3002 \u53c2\u9605 K8s \u5b98\u65b9\u63d2\u4ef6\u914d\u7f6e\u9879
                    2. \u96c6\u7fa4\u521b\u5efa\u6210\u529f\u540e\u7cfb\u7edf\u4f1a\u81ea\u52a8\u5b89\u88c5 scheduler-plugins \u548c controller \u7ec4\u4ef6\u8d1f\u8f7d\uff0c\u53ef\u4ee5\u5728\u5bf9\u5e94\u96c6\u7fa4\u7684\u65e0\u72b6\u6001\u8d1f\u8f7d\u4e2d\u67e5\u770b\u8d1f\u8f7d\u72b6\u6001\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-scheduler-plugin.html#scheduler-plugins_3","title":"\u4f7f\u7528 scheduler-plugins","text":"

                    \u4ee5\u4e0b\u4ee5\u4f7f\u7528 vgpu \u8c03\u5ea6\u5668\u7684\u540c\u65f6\uff0c\u60f3\u7ed3\u5408 scheduler-plugins \u7684 coscheduling \u63d2\u4ef6\u80fd\u529b\u573a\u666f\u4e3a\u793a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 scheduler-plugins\u3002

                    1. \u5728 Helm \u6a21\u677f\u4e2d\u5b89\u88c5 vgpu\uff0c\u8bbe\u7f6e values.yaml \u53c2\u6570\u3002

                      • schedulerName: scheduler-plugins-scheduler\uff0c\u8fd9\u662f kubean \u9ed8\u8ba4\u5b89\u88c5\u7684 scheduler-plugins \u7684 scheduler \u540d\u79f0\uff0c\u76ee\u524d\u4e0d\u80fd\u4fee\u6539\u3002
                      • scheduler.kubeScheduler.enabled: false\uff0c\u4e0d\u5b89\u88c5 kube-scheduler\uff0c\u5c06 vgpu-scheduler \u4f5c\u4e3a\u5355\u72ec\u7684 extender\u3002
                    2. \u5728 scheduler-plugins \u4e0a\u6269\u5c55 vgpu-scheduler\u3002

                      [root@master01 charts]# kubectl get cm -n scheduler-plugins scheduler-config -ojsonpath=\"{.data.scheduler-config\\.yaml}\"\n
                      apiVersion: kubescheduler.config.k8s.io/v1\nkind: KubeSchedulerConfiguration\nleaderElection:\n  leaderElect: false\nprofiles:\n  # Compose all plugins in one profile\n  - schedulerName: scheduler-plugins-scheduler\n    plugins:\n      multiPoint:\n        enabled:\n          - name: Coscheduling\n          - name: CapacityScheduling\n          - name: NodeResourceTopologyMatch\n          - name: NodeResourcesAllocatable\n        disabled:\n          - name: PrioritySort\npluginConfig:\n  - args:\n      permitWaitingTimeSeconds: 10\n    name: Coscheduling\n

                      \u4fee\u6539 scheduler-plugins \u7684 scheduler-config \u7684 configmap \u53c2\u6570\uff0c\u5982\u4e0b\uff1a

                      [root@master01 charts]# kubectl get cm -n scheduler-plugins scheduler-config -ojsonpath=\"{.data.scheduler-config\\.yaml}\"\n
                      apiVersion: kubescheduler.config.k8s.io/v1\nkind: KubeSchedulerConfiguration\nleaderElection:\n  leaderElect: false\nprofiles:\n  # Compose all plugins in one profile\n  - schedulerName: scheduler-plugins-scheduler\n    plugins:\n      multiPoint:\n        enabled:\n          - name: Coscheduling\n          - name: CapacityScheduling\n          - name: NodeResourceTopologyMatch\n          - name: NodeResourcesAllocatable\n        disabled:\n          - name: PrioritySort\npluginConfig:\n  - args:\n      permitWaitingTimeSeconds: 10\n    name: Coscheduling\nextenders:\n  - urlPrefix: \"${urlPrefix}\"\n    filterVerb: filter\n    bindVerb: bind\n    nodeCacheCapable: true\n    ignorable: true\n    httpTimeout: 30s\n    weight: 1\n    enableHTTPS: true\n    tlsConfig:\n      insecure: true\n    managedResources:\n      - name: nvidia.com/vgpu\n        ignoredByScheduler: true\n      - name: nvidia.com/gpumem\n        ignoredByScheduler: true\n      - name: nvidia.com/gpucores\n        ignoredByScheduler: true\n      - name: nvidia.com/gpumem-percentage\n        ignoredByScheduler: true\n      - name: nvidia.com/priority\n        ignoredByScheduler: true\n      - name: cambricon.com/mlunum\n        ignoredByScheduler: true\n
                    3. \u5b89\u88c5\u5b8c vgpu-scheduler \u540e\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u521b\u5efa svc\uff0curlPrefix \u6307\u5b9a svc \u7684 URL\u3002

                      Note

                      • svc \u6307 pod \u670d\u52a1\u8d1f\u8f7d\uff0c\u60a8\u53ef\u4ee5\u5230\u5b89\u88c5\u4e86 nvidia-vgpu \u63d2\u4ef6\u7684\u547d\u540d\u7a7a\u95f4\u4e0b\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u62ff\u5230 443 \u7aef\u53e3\u5bf9\u5e94\u7684\u5916\u90e8\u8bbf\u95ee\u4fe1\u606f\u3002

                        kubectl get svc -n ${namespace} \n
                      • urlprifix \u683c\u5f0f\u4e3a https://${ip \u5730\u5740}:${\u7aef\u53e3}

                    4. \u5c06 scheduler-plugins \u7684 scheduler Pod \u91cd\u542f\uff0c\u52a0\u8f7d\u65b0\u7684\u914d\u7f6e\u6587\u4ef6\u3002

                      Note

                      \u5728\u521b\u5efa vgpu \u5e94\u7528\u65f6\u4e0d\u9700\u8981\u6307\u5b9a\u8c03\u5ea6\u5668\u540d\u79f0\uff0cvgpu-scheduler \u7684 Webhook \u4f1a\u81ea\u52a8\u5c06 Scheduler \u7684\u540d\u79f0\u4fee\u6539\u4e3a scheduler-plugins-scheduler\uff0c\u4e0d\u7528\u624b\u52a8\u6307\u5b9a\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-status.html","title":"\u96c6\u7fa4\u72b6\u6001","text":"

                    \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u7eb3\u7ba1\u4e24\u79cd\u7c7b\u578b\u7684\u96c6\u7fa4\uff1a\u63a5\u5165\u96c6\u7fa4\u548c\u81ea\u5efa\u96c6\u7fa4\u3002 \u5173\u4e8e\u96c6\u7fa4\u7eb3\u7ba1\u7c7b\u578b\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1\u96c6\u7fa4\u89d2\u8272\u3002

                    \u8fd9\u4e24\u79cd\u96c6\u7fa4\u7684\u72b6\u6001\u5982\u4e0b\u6240\u8ff0\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-status.html#_2","title":"\u63a5\u5165\u96c6\u7fa4","text":"\u72b6\u6001 \u63cf\u8ff0 \u63a5\u5165\u4e2d\uff08Joining\uff09 \u96c6\u7fa4\u6b63\u5728\u63a5\u5165 \u89e3\u9664\u63a5\u5165\u4e2d\uff08Removing\uff09 \u96c6\u7fa4\u6b63\u5728\u89e3\u9664\u63a5\u5165 \u8fd0\u884c\u4e2d\uff08Running\uff09 \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c \u672a\u77e5\uff08Unknown\uff09 \u96c6\u7fa4\u5df2\u5931\u8054\uff0c\u7cfb\u7edf\u5c55\u793a\u6570\u636e\u4e3a\u5931\u8054\u524d\u7f13\u5b58\u6570\u636e\uff0c\u4e0d\u4ee3\u8868\u771f\u5b9e\u6570\u636e\uff0c\u540c\u65f6\u5931\u8054\u72b6\u6001\u4e0b\u6267\u884c\u7684\u4efb\u4f55\u64cd\u4f5c\u90fd\u5c06\u4e0d\u751f\u6548\uff0c\u8bf7\u68c0\u67e5\u96c6\u7fa4\u7f51\u7edc\u8fde\u901a\u6027\u6216\u4e3b\u673a\u72b6\u6001\u3002"},{"location":"end-user/kpanda/clusters/cluster-status.html#_3","title":"\u81ea\u5efa\u96c6\u7fa4","text":"\u72b6\u6001 \u63cf\u8ff0 \u521b\u5efa\u4e2d\uff08Creating\uff09 \u96c6\u7fa4\u6b63\u5728\u521b\u5efa \u66f4\u65b0\u4e2d\uff08Updating\uff09 \u66f4\u65b0\u96c6\u7fa4 Kubernetes \u7248\u672c \u5220\u9664\u4e2d\uff08Deleting\uff09 \u96c6\u7fa4\u6b63\u5728\u5220\u9664 \u8fd0\u884c\u4e2d\uff08Running\uff09 \u96c6\u7fa4\u6b63\u5e38\u8fd0\u884c \u672a\u77e5\uff08Unknown\uff09 \u96c6\u7fa4\u5df2\u5931\u8054\uff0c\u7cfb\u7edf\u5c55\u793a\u6570\u636e\u4e3a\u5931\u8054\u524d\u7f13\u5b58\u6570\u636e\uff0c\u4e0d\u4ee3\u8868\u771f\u5b9e\u6570\u636e\uff0c\u540c\u65f6\u5931\u8054\u72b6\u6001\u4e0b\u6267\u884c\u7684\u4efb\u4f55\u64cd\u4f5c\u90fd\u5c06\u4e0d\u751f\u6548\uff0c\u8bf7\u68c0\u67e5\u96c6\u7fa4\u7f51\u7edc\u8fde\u901a\u6027\u6216\u4e3b\u673a\u72b6\u6001\u3002 \u521b\u5efa\u5931\u8d25\uff08Failed\uff09 \u96c6\u7fa4\u521b\u5efa\u5931\u8d25\uff0c\u8bf7\u67e5\u770b\u65e5\u5fd7\u4ee5\u83b7\u53d6\u8be6\u7ec6\u5931\u8d25\u539f\u56e0"},{"location":"end-user/kpanda/clusters/cluster-version.html","title":"\u96c6\u7fa4\u7248\u672c\u652f\u6301\u8303\u56f4","text":"

                    \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\uff0c\u63a5\u5165\u578b\u96c6\u7fa4\u548c\u81ea\u5efa\u96c6\u7fa4\u91c7\u53d6\u4e0d\u540c\u7684\u7248\u672c\u652f\u6301\u673a\u5236\u3002

                    \u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u81ea\u5efa\u96c6\u7fa4\u7684\u7248\u672c\u652f\u6301\u673a\u5236\u3002

                    Kubernetes \u793e\u533a\u652f\u6301 3 \u4e2a\u7248\u672c\u8303\u56f4\uff0c\u5982 1.26\u30011.27\u30011.28\u3002\u5f53\u793e\u533a\u65b0\u7248\u672c\u53d1\u5e03\u4e4b\u540e\uff0c\u652f\u6301\u7684\u7248\u672c\u8303\u56f4\u5c06\u4f1a\u8fdb\u884c\u9012\u589e\u3002 \u5982\u793e\u533a\u6700\u65b0\u7684 1.29 \u7248\u672c\u5df2\u7ecf\u53d1\u5e03\uff0c\u6b64\u65f6\u793e\u533a\u652f\u6301\u7684\u7248\u672c\u8303\u56f4\u662f 1.27\u30011.28\u30011.29\u3002

                    \u4f8b\u5982\uff0c\u793e\u533a\u652f\u6301\u7684\u7248\u672c\u8303\u56f4\u662f 1.25\u30011.26\u30011.27\uff0c\u5219\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u754c\u9762\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u7248\u672c\u8303\u56f4\u662f 1.24\u30011.25\u30011.26\uff0c\u5e76\u4e14\u4f1a\u4e3a\u7528\u6237\u63a8\u8350\u4e00\u4e2a\u7a33\u5b9a\u7684\u7248\u672c\uff0c\u5982 1.24.7\u3002

                    \u9664\u6b64\u4e4b\u5916\uff0c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u754c\u9762\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u7248\u672c\u8303\u56f4\u4e0e\u793e\u533a\u4fdd\u6301\u9ad8\u5ea6\u540c\u6b65\uff0c\u5f53\u793e\u533a\u7248\u672c\u8fdb\u884c\u9012\u589e\u540e\uff0c\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u754c\u9762\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u7248\u672c\u8303\u56f4\u4e5f\u4f1a\u540c\u6b65\u9012\u589e\u4e00\u4e2a\u7248\u672c\u3002

                    "},{"location":"end-user/kpanda/clusters/cluster-version.html#kubernetes","title":"Kubernetes \u7248\u672c\u652f\u6301\u8303\u56f4","text":"Kubernetes \u793e\u533a\u7248\u672c\u8303\u56f4 \u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7248\u672c\u8303\u56f4 \u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u63a8\u8350\u7248\u672c \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5b89\u88c5\u5668 \u53d1\u5e03\u65f6\u95f4
                    • 1.26
                    • 1.27
                    • 1.28
                    • 1.25
                    • 1.26
                    • 1.27
                    1.27.5 v0.13.0 2023.11.30"},{"location":"end-user/kpanda/clusters/create-cluster.html","title":"\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4","text":"

                    \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\uff0c\u96c6\u7fa4\u89d2\u8272\u5206\u56db\u7c7b\uff1a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u3001\u7ba1\u7406\u96c6\u7fa4\u3001\u5de5\u4f5c\u96c6\u7fa4\u3001\u63a5\u5165\u96c6\u7fa4\u3002 \u5176\u4e2d\uff0c\u63a5\u5165\u96c6\u7fa4\u53ea\u80fd\u4ece\u7b2c\u4e09\u65b9\u5382\u5546\u63a5\u5165\uff0c\u53c2\u89c1\u63a5\u5165\u96c6\u7fa4\u3002

                    \u672c\u9875\u4ecb\u7ecd\u5982\u4f55\u521b\u5efa\u5de5\u4f5c\u96c6\u7fa4\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u65b0\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7684\u5de5\u4f5c\u8282\u70b9 OS \u7c7b\u578b\u548c CPU \u67b6\u6784\u9700\u8981\u4e0e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4fdd\u6301\u4e00\u81f4\u3002 \u5982\u9700\u4f7f\u7528\u533a\u522b\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4 OS \u6216\u67b6\u6784\u7684\u8282\u70b9\u521b\u5efa\u96c6\u7fa4\uff0c\u53c2\u9605\u5728 centos \u7ba1\u7406\u5e73\u53f0\u4e0a\u521b\u5efa ubuntu \u5de5\u4f5c\u96c6\u7fa4\u8fdb\u884c\u521b\u5efa\u3002

                    \u63a8\u8350\u4f7f\u7528 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u7684\u64cd\u4f5c\u7cfb\u7edf\u6765\u521b\u5efa\u96c6\u7fa4\u3002 \u5982\u60a8\u672c\u5730\u8282\u70b9\u4e0d\u5728\u4e0a\u8ff0\u652f\u6301\u8303\u56f4\uff0c\u53ef\u53c2\u8003\u5728\u975e\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u521b\u5efa\u96c6\u7fa4\u8fdb\u884c\u521b\u5efa\u3002

                    "},{"location":"end-user/kpanda/clusters/create-cluster.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

                    \u521b\u5efa\u96c6\u7fa4\u4e4b\u524d\u9700\u8981\u6ee1\u8db3\u4e00\u5b9a\u7684\u524d\u63d0\u6761\u4ef6\uff1a

                    • \u6839\u636e\u4e1a\u52a1\u9700\u6c42\u51c6\u5907\u4e00\u5b9a\u6570\u91cf\u7684\u8282\u70b9\uff0c\u4e14\u8282\u70b9 OS \u7c7b\u578b\u548c CPU \u67b6\u6784\u4e00\u81f4\u3002
                    • \u63a8\u8350 Kubernetes \u7248\u672c 1.29.5\uff0c\u5177\u4f53\u7248\u672c\u8303\u56f4\uff0c\u53c2\u9605 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u96c6\u7fa4\u7248\u672c\u652f\u6301\u4f53\u7cfb\uff0c \u76ee\u524d\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u81ea\u5efa\u5de5\u4f5c\u96c6\u7fa4\u7248\u672c\u8303\u56f4\u5728 v1.28.0-v1.30.2\u3002\u5982\u9700\u521b\u5efa\u4f4e\u7248\u672c\u7684\u96c6\u7fa4\uff0c\u8bf7\u53c2\u8003\u96c6\u7fa4\u7248\u672c\u652f\u6301\u8303\u56f4\u3001\u90e8\u7f72\u4e0e\u5347\u7ea7 Kubean \u5411\u4e0b\u517c\u5bb9\u7248\u672c\u3002
                    • \u76ee\u6807\u4e3b\u673a\u9700\u8981\u5141\u8bb8 IPv4 \u8f6c\u53d1\u3002\u5982\u679c Pod \u548c Service \u4f7f\u7528\u7684\u662f IPv6\uff0c\u5219\u76ee\u6807\u670d\u52a1\u5668\u9700\u8981\u5141\u8bb8 IPv6 \u8f6c\u53d1\u3002
                    • \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u6682\u4e0d\u63d0\u4f9b\u5bf9\u9632\u706b\u5899\u7684\u7ba1\u7406\u529f\u80fd\uff0c\u60a8\u9700\u8981\u9884\u5148\u81ea\u884c\u5b9a\u4e49\u76ee\u6807\u4e3b\u673a\u9632\u706b\u5899\u89c4\u5219\u3002\u4e3a\u4e86\u907f\u514d\u521b\u5efa\u96c6\u7fa4\u7684\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u95ee\u9898\uff0c\u5efa\u8bae\u7981\u7528\u76ee\u6807\u4e3b\u673a\u7684\u9632\u706b\u5899\u3002
                    • \u53c2\u9605\u8282\u70b9\u53ef\u7528\u6027\u68c0\u67e5\u3002
                    "},{"location":"end-user/kpanda/clusters/create-cluster.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u4e2d\uff0c\u70b9\u51fb \u521b\u5efa\u96c6\u7fa4 \u6309\u94ae\u3002

                    2. \u53c2\u8003\u4e0b\u5217\u8981\u6c42\u586b\u5199\u96c6\u7fa4\u57fa\u672c\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                      • \u96c6\u7fa4\u540d\u79f0\uff1a\u540d\u79f0\u53ea\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u8fde\u5b57\u7b26\uff08\"-\"\uff09\uff0c\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u8005\u6570\u5b57\u5f00\u5934\u548c\u7ed3\u5c3e\uff0c\u6700\u957f 63 \u4e2a\u5b57\u7b26\u3002
                      • \u88ab\u7eb3\u7ba1\uff1a\u9009\u62e9\u7531\u54ea\u4e2a\u96c6\u7fa4\u6765\u7ba1\u7406\u6b64\u96c6\u7fa4\uff0c\u4f8b\u5982\u5728\u96c6\u7fa4\u751f\u547d\u5468\u671f\u4e2d\u521b\u5efa\u3001\u5347\u7ea7\u3001\u8282\u70b9\u6269\u7f29\u5bb9\u3001\u5220\u9664\u96c6\u7fa4\u7b49\u3002
                      • \u8fd0\u884c\u65f6\uff1a\u9009\u62e9\u96c6\u7fa4\u7684\u8fd0\u884c\u65f6\u73af\u5883\uff0c\u76ee\u524d\u652f\u6301 containerd \u548c docker\uff0c\u5982\u4f55\u9009\u62e9\u5bb9\u5668\u8fd0\u884c\u65f6\u3002
                      • Kubernetes \u7248\u672c\uff1a\u652f\u6301 3 \u4e2a\u7248\u672c\u8de8\u5ea6\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u88ab\u7eb3\u7ba1\u96c6\u7fa4\u6240\u652f\u6301\u7684\u7248\u672c\u3002

                    3. \u586b\u5199\u8282\u70b9\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                      • \u9ad8\u53ef\u7528\uff1a\u5f00\u542f\u540e\u9700\u8981\u63d0\u4f9b\u81f3\u5c11 3 \u4e2a\u63a7\u5236\u5668\u8282\u70b9\u3002\u5173\u95ed\u540e\uff0c\u53ea\u63d0\u4f9b 1 \u4e2a\u63a7\u5236\u5668\u8282\u70b9\u5373\u53ef\u3002

                        \u751f\u4ea7\u73af\u5883\u4e2d\u5efa\u8bae\u4f7f\u7528\u9ad8\u53ef\u7528\u6a21\u5f0f\u3002

                      • \u8ba4\u8bc1\u65b9\u5f0f\uff1a\u9009\u62e9\u901a\u8fc7\u7528\u6237\u540d/\u5bc6\u7801\u8fd8\u662f\u516c\u79c1\u94a5\u8bbf\u95ee\u8282\u70b9\u3002

                        \u5982\u679c\u4f7f\u7528\u516c\u79c1\u94a5\u65b9\u5f0f\u8bbf\u95ee\u8282\u70b9\uff0c\u9700\u8981\u9884\u5148\u914d\u7f6e\u8282\u70b9\u7684 SSH \u5bc6\u94a5\u3002\u53c2\u9605\u4f7f\u7528 SSH \u5bc6\u94a5\u8ba4\u8bc1\u8282\u70b9\u3002

                      • \u4f7f\u7528\u7edf\u4e00\u7684\u5bc6\u7801\uff1a\u5f00\u542f\u540e\u96c6\u7fa4\u4e2d\u6240\u6709\u8282\u70b9\u7684\u8bbf\u95ee\u5bc6\u7801\u90fd\u76f8\u540c\uff0c\u9700\u8981\u5728\u4e0b\u65b9\u8f93\u5165\u8bbf\u95ee\u6240\u6709\u8282\u70b9\u7684\u7edf\u4e00\u5bc6\u7801\u3002\u5982\u679c\u5173\u95ed\uff0c\u5219\u53ef\u4ee5\u4e3a\u6bcf\u4e2a\u8282\u70b9\u8bbe\u7f6e\u5355\u72ec\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002

                      • \u8282\u70b9\u4fe1\u606f\uff1a\u586b\u5199\u8282\u70b9\u540d\u79f0\u548c IP \u5730\u5740\u3002

                      • \u81ea\u5b9a\u4e49\u53c2\u6570\uff1a\u8bbe\u7f6e\u53d8\u91cf\u63a7\u5236 Ansible \u4e0e\u8fdc\u7a0b\u4e3b\u673a\u4ea4\u4e92\u3002\u53ef\u8bbe\u7f6e\u53d8\u91cf\u53c2\u8003\u8fde\u63a5\u5230\u4e3b\u673a\uff1a\u884c\u4e3a\u6e05\u5355\u53c2\u6570
                      • NTP \u65f6\u95f4\u540c\u6b65\uff1a\u5f00\u542f\u540e\u4f1a\u81ea\u52a8\u540c\u6b65\u5404\u4e2a\u8282\u70b9\u4e0a\u7684\u65f6\u95f4\uff0c\u9700\u8981\u63d0\u4f9b NTP \u670d\u52a1\u5668\u5730\u5740\u3002

                    4. \u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb\u8282\u70b9\u68c0\u67e5\u3002\u5982\u679c\u68c0\u67e5\u901a\u8fc7\u5219\u7ee7\u7eed\u4e0b\u4e00\u6b65\u64cd\u4f5c\u3002\u5982\u679c\u68c0\u67e5\u672a\u901a\u8fc7\uff0c\u5219\u66f4\u65b0 \u8282\u70b9\u4fe1\u606f \u5e76\u518d\u6b21\u6267\u884c\u68c0\u67e5\u3002

                    5. \u586b\u5199\u7f51\u7edc\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                      • \u7f51\u7edc\u63d2\u4ef6\uff1a\u8d1f\u8d23\u4e3a\u96c6\u7fa4\u5185\u7684 Pod \u63d0\u4f9b\u7f51\u7edc\u670d\u52a1\uff0c\u521b\u5efa\u96c6\u7fa4\u540e\u4e0d\u53ef\u66f4\u6539\u7f51\u7edc\u63d2\u4ef6\u3002\u652f\u6301 cilium \u548c calico\u3002\u9009\u62e9 none \u8868\u793a\u6682\u4e0d\u5b89\u88c5\u7f51\u7edc\u63d2\u4ef6\u3002

                      • \u5bb9\u5668\u7f51\u6bb5\uff1a\u96c6\u7fa4\u4e0b\u5bb9\u5668\u4f7f\u7528\u7684\u7f51\u6bb5\uff0c\u51b3\u5b9a\u96c6\u7fa4\u4e0b\u5bb9\u5668\u7684\u6570\u91cf\u4e0a\u9650\u3002\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002

                      • \u670d\u52a1\u7f51\u6bb5\uff1a\u540c\u4e00\u96c6\u7fa4\u4e0b\u5bb9\u5668\u4e92\u76f8\u8bbf\u95ee\u65f6\u4f7f\u7528\u7684 Service \u8d44\u6e90\u7684\u7f51\u6bb5\uff0c\u51b3\u5b9a Service \u8d44\u6e90\u7684\u4e0a\u9650\u3002\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002

                    6. \u586b\u5199\u63d2\u4ef6\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                    7. \u586b\u5199\u9ad8\u7ea7\u914d\u7f6e\u4fe1\u606f\uff0c\u5e76\u70b9\u51fb \u786e\u5b9a \u3002

                      • kubelet_max_pods \uff1a\u8bbe\u7f6e\u6bcf\u4e2a\u8282\u70b9\u7684\u6700\u5927 Pod \u6570\u91cf\uff0c\u9ed8\u8ba4\u4e3a 110 \u4e2a\u3002
                      • hostname_overide \uff1a\u91cd\u7f6e\u4e3b\u673a\u540d\uff0c\u5efa\u8bae\u4f7f\u7528\u9ed8\u8ba4\u503c\uff0c\u91c7\u7528\u7cfb\u7edf\u9ed8\u8ba4\u751f\u6210\u7684\u540d\u79f0\u4f5c\u4e3a\u4e3b\u673a\u540d\u79f0\u3002
                      • kubernetes_audit \uff1aKubernetes \u7684\u5ba1\u8ba1\u65e5\u5fd7\uff0c\u9ed8\u8ba4\u5f00\u542f\u3002
                      • auto_renew_certificate \uff1a\u5728\u6bcf\u6708\u7b2c\u4e00\u4e2a\u661f\u671f\u4e00\u81ea\u52a8\u66f4\u65b0 Kubernetes \u63a7\u5236\u5e73\u9762\u8bc1\u4e66\uff0c\u9ed8\u8ba4\u5f00\u542f\u3002
                      • disable_firewalld&ufw \uff1a\u7981\u7528\u9632\u706b\u5899\uff0c\u907f\u514d\u8282\u70b9\u5728\u5b89\u88c5\u8fc7\u7a0b\u4e2d\u65e0\u6cd5\u88ab\u8bbf\u95ee\u3002
                      • Insecure_registries \uff1a\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u914d\u7f6e\u3002\u4f7f\u7528\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u521b\u5efa\u96c6\u7fa4\u65f6\uff0c\u4e3a\u4e86\u907f\u514d\u8bc1\u4e66\u95ee\u9898\u5bfc\u81f4\u5bb9\u5668\u5f15\u64ce\u62d2\u7edd\u8bbf\u95ee\uff0c\u9700\u8981\u5728\u8fd9\u91cc\u586b\u5199\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u5730\u5740\uff0c\u4ee5\u7ed5\u8fc7\u5bb9\u5668\u5f15\u64ce\u7684\u8bc1\u4e66\u8ba4\u8bc1\u800c\u83b7\u53d6\u955c\u50cf\u3002
                      • yum_repos \uff1a\u586b\u5199 Yum \u6e90\u4ed3\u5e93\u5730\u5740\u3002\u79bb\u7ebf\u73af\u5883\u4e0b\uff0c\u9ed8\u8ba4\u7ed9\u51fa\u7684\u5730\u5740\u9009\u9879\u4ec5\u4f9b\u53c2\u8003\uff0c\u8bf7\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u586b\u5199\u3002

                    Success

                    • \u586b\u5199\u6b63\u786e\u4fe1\u606f\u5e76\u5b8c\u6210\u4e0a\u8ff0\u6b65\u9aa4\u540e\uff0c\u9875\u9762\u4f1a\u63d0\u793a\u96c6\u7fa4\u6b63\u5728\u521b\u5efa\u4e2d\u3002
                    • \u521b\u5efa\u96c6\u7fa4\u8017\u65f6\u8f83\u957f\uff0c\u9700\u8981\u8010\u5fc3\u7b49\u5f85\u3002\u5176\u95f4\uff0c\u53ef\u4ee5\u70b9\u51fb \u8fd4\u56de\u96c6\u7fa4\u5217\u8868 \u6309\u94ae\u8ba9\u5b89\u88c5\u8fc7\u7a0b\u540e\u53f0\u8fd0\u884c\u3002
                    • \u5982\u9700\u67e5\u770b\u5f53\u524d\u72b6\u6001\uff0c\u53ef\u70b9\u51fb \u5b9e\u65f6\u65e5\u5fd7 \u3002

                    Note

                    • \u5f53\u96c6\u7fa4\u51fa\u73b0\u672a\u77e5\u72b6\u6001\u65f6\uff0c\u8868\u793a\u5f53\u524d\u96c6\u7fa4\u5df2\u5931\u8054\u3002
                    • \u7cfb\u7edf\u5c55\u793a\u6570\u636e\u4e3a\u5931\u8054\u524d\u7f13\u5b58\u6570\u636e\uff0c\u4e0d\u4ee3\u8868\u771f\u5b9e\u6570\u636e\u3002
                    • \u540c\u65f6\u5931\u8054\u72b6\u6001\u4e0b\u6267\u884c\u7684\u4efb\u4f55\u64cd\u4f5c\u90fd\u5c06\u4e0d\u751f\u6548\uff0c\u8bf7\u68c0\u67e5\u96c6\u7fa4\u7f51\u7edc\u8fde\u901a\u6027\u6216\u4e3b\u673a\u72b6\u6001\u3002

                    "},{"location":"end-user/kpanda/clusters/delete-cluster.html","title":"\u5378\u8f7d/\u89e3\u9664\u63a5\u5165\u96c6\u7fa4","text":"

                    \u901a\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0 \u521b\u5efa\u7684\u96c6\u7fa4 \u652f\u6301 \u5378\u8f7d\u96c6\u7fa4 \u6216 \u89e3\u9664\u63a5\u5165 \u64cd\u4f5c\uff0c\u4ece\u5176\u4ed6\u73af\u5883\u76f4\u63a5 \u63a5\u5165\u7684\u96c6\u7fa4 \u4ec5\u652f\u6301 \u89e3\u9664\u63a5\u5165 \u64cd\u4f5c\u3002

                    Info

                    \u5982\u679c\u60f3\u5f7b\u5e95\u5220\u9664\u4e00\u4e2a\u63a5\u5165\u7684\u96c6\u7fa4\uff0c\u9700\u8981\u524d\u5f80\u521b\u5efa\u8be5\u96c6\u7fa4\u7684\u539f\u59cb\u5e73\u53f0\u64cd\u4f5c\u3002\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0d\u652f\u6301\u5220\u9664\u63a5\u5165\u7684\u96c6\u7fa4\u3002

                    \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\uff0c \u5378\u8f7d\u96c6\u7fa4 \u548c \u89e3\u9664\u63a5\u5165 \u7684\u533a\u522b\u5728\u4e8e\uff1a

                    • \u5378\u8f7d\u96c6\u7fa4 \u64cd\u4f5c\u4f1a\u9500\u6bc1\u8be5\u96c6\u7fa4\uff0c\u5e76\u91cd\u7f6e\u96c6\u7fa4\u4e0b\u6240\u6709\u8282\u70b9\u7684\u6570\u636e\u3002\u6240\u6709\u6570\u636e\u90fd\u5c06\u88ab\u9500\u6bc1\uff0c\u5efa\u8bae\u505a\u597d\u5907\u4efd\u3002\u540e\u671f\u9700\u8981\u65f6\u5fc5\u987b\u91cd\u65b0\u521b\u5efa\u4e00\u4e2a\u96c6\u7fa4\u3002
                    • \u89e3\u9664\u63a5\u5165 \u64cd\u4f5c\u4f1a\u5c06\u5f53\u524d\u96c6\u7fa4\u4ece\u5e73\u53f0\u4e2d\u79fb\u9664\uff0c\u4e0d\u4f1a\u6467\u6bc1\u96c6\u7fa4\uff0c\u4e5f\u4e0d\u4f1a\u9500\u6bc1\u6570\u636e\u3002
                    "},{"location":"end-user/kpanda/clusters/delete-cluster.html#_2","title":"\u5378\u8f7d\u96c6\u7fa4","text":"

                    Note

                    • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u5907 Admin \u6216 Kpanda Owner \u6743\u9650\u624d\u80fd\u6267\u884c\u5378\u8f7d\u96c6\u7fa4\u7684\u64cd\u4f5c\u3002
                    • \u5378\u8f7d\u96c6\u7fa4\u4e4b\u524d\uff0c\u5e94\u8be5\u5148\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u5728 \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u8bbe\u7f6e -> \u9ad8\u7ea7\u914d\u7f6e \u4e2d\u5173\u95ed \u96c6\u7fa4\u5220\u9664\u4fdd\u62a4 \uff0c \u5426\u5219\u4e0d\u663e\u793a \u5378\u8f7d\u96c6\u7fa4 \u7684\u9009\u9879\u3002
                    • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u4e0d\u652f\u6301\u5378\u8f7d\u6216\u79fb\u9664\u64cd\u4f5c\u3002
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u627e\u5230\u9700\u8981\u5378\u8f7d\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb \u5378\u8f7d\u96c6\u7fa4 \u3002

                    2. \u8f93\u5165\u96c6\u7fa4\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u7136\u540e\u70b9\u51fb \u5220\u9664 \u3002

                      \u5982\u679c\u63d0\u793a\u96c6\u7fa4\u4e2d\u8fd8\u6709\u4e00\u4e9b\u6b8b\u7559\u7684\u8d44\u6e90\uff0c\u5219\u9700\u8981\u6309\u63d0\u793a\u5220\u9664\u76f8\u5173\u8d44\u6e90\u540e\u624d\u80fd\u6267\u884c\u5378\u8f7d\u64cd\u4f5c\u3002

                    3. \u8fd4\u56de \u96c6\u7fa4\u5217\u8868 \u9875\u53ef\u4ee5\u770b\u5230\u8be5\u96c6\u7fa4\u7684\u72b6\u6001\u5df2\u7ecf\u53d8\u6210 \u5220\u9664\u4e2d \u3002\u5378\u8f7d\u96c6\u7fa4\u53ef\u80fd\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\uff0c\u8bf7\u60a8\u8010\u5fc3\u7b49\u5019\u3002

                    "},{"location":"end-user/kpanda/clusters/delete-cluster.html#_3","title":"\u89e3\u9664\u63a5\u5165\u96c6\u7fa4","text":"

                    Note

                    • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u5907 Admin \u6216 Kpanda Owner \u6743\u9650\u624d\u80fd\u6267\u884c\u89e3\u9664\u63a5\u5165\u7684\u64cd\u4f5c\u3002
                    • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4 \u4e0d\u652f\u6301\u89e3\u9664\u63a5\u5165\u3002
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u627e\u5230\u9700\u8981\u5378\u8f7d\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb \u89e3\u9664\u63a5\u5165 \u3002

                    2. \u8f93\u5165\u96c6\u7fa4\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u7136\u540e\u70b9\u51fb \u89e3\u9664\u63a5\u5165 \u3002

                      \u5982\u679c\u63d0\u793a\u96c6\u7fa4\u4e2d\u8fd8\u6709\u4e00\u4e9b\u6b8b\u7559\u7684\u8d44\u6e90\uff0c\u5219\u9700\u8981\u6309\u63d0\u793a\u5220\u9664\u76f8\u5173\u8d44\u6e90\u540e\u624d\u80fd\u89e3\u9664\u63a5\u5165\u3002

                    "},{"location":"end-user/kpanda/clusters/delete-cluster.html#_4","title":"\u6e05\u7406\u89e3\u9664\u63a5\u5165\u96c6\u7fa4\u914d\u7f6e\u6570\u636e","text":"

                    \u96c6\u7fa4\u88ab\u79fb\u9664\u540e\uff0c\u96c6\u7fa4\u4e2d\u539f\u6709\u7684\u7ba1\u7406\u5e73\u53f0\u6570\u636e\u4e0d\u4f1a\u88ab\u81ea\u52a8\u6e05\u9664\uff0c\u5982\u9700\u5c06\u96c6\u7fa4\u63a5\u5165\u81f3\u65b0\u7ba1\u7406\u5e73\u53f0\u5219\u9700\u8981\u624b\u52a8\u6267\u884c\u5982\u4e0b\u64cd\u4f5c\uff1a

                    \u5220\u9664 kpanda-system\u3001insight-system \u547d\u540d\u7a7a\u95f4

                    kubectl delete ns kpanda-system insight-system\n
                    "},{"location":"end-user/kpanda/clusters/integrate-cluster.html","title":"\u63a5\u5165\u96c6\u7fa4","text":"

                    \u901a\u8fc7\u63a5\u5165\u96c6\u7fa4\u64cd\u4f5c\uff0c\u80fd\u591f\u5bf9\u4f17\u591a\u4e91\u670d\u52a1\u5e73\u53f0\u96c6\u7fa4\u548c\u672c\u5730\u79c1\u6709\u7269\u7406\u96c6\u7fa4\u8fdb\u884c\u7edf\u4e00\u7eb3\u7ba1\uff0c\u5f62\u6210\u7edf\u4e00\u6cbb\u7406\u5e73\u53f0\uff0c\u6709\u6548\u907f\u514d\u4e86\u88ab\u5382\u5546\u9501\u5b9a\u98ce\u9669\uff0c\u52a9\u529b\u4f01\u4e1a\u4e1a\u52a1\u5b89\u5168\u4e0a\u4e91\u3002

                    \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u63a5\u5165\u591a\u79cd\u4e3b\u6d41\u7684\u5bb9\u5668\u96c6\u7fa4\uff0c\u4f8b\u5982 Redhat Openshift, SUSE Rancher, VMware Tanzu, Amazon EKS, Aliyun ACK, Huawei CCE, Tencent TKE, \u6807\u51c6 Kubernetes \u96c6\u7fa4\u3002

                    "},{"location":"end-user/kpanda/clusters/integrate-cluster.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u51c6\u5907\u4e00\u4e2a\u5f85\u63a5\u5165\u7684\u96c6\u7fa4\uff0c\u786e\u4fdd\u5bb9\u5668\u7ba1\u7406\u96c6\u7fa4\u548c\u5f85\u63a5\u5165\u96c6\u7fa4\u4e4b\u95f4\u7f51\u7edc\u901a\u7545\uff0c\u5e76\u4e14\u96c6\u7fa4\u7684 Kubernetes \u7248\u672c 1.22+\u3002
                    • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 Kpanda Owner \u6216\u66f4\u9ad8\u6743\u9650\u3002
                    "},{"location":"end-user/kpanda/clusters/integrate-cluster.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                    1. \u8fdb\u5165 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u63a5\u5165\u96c6\u7fa4 \u6309\u94ae\u3002

                    2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

                      • \u96c6\u7fa4\u540d\u79f0\uff1a\u540d\u79f0\u5e94\u5177\u6709\u552f\u4e00\u6027\uff0c\u8bbe\u7f6e\u540e\u4e0d\u53ef\u66f4\u6539\u3002\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26(\"-\")\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002
                      • \u96c6\u7fa4\u522b\u540d\uff1a\u53ef\u8f93\u5165\u4efb\u610f\u5b57\u7b26\uff0c\u4e0d\u8d85\u8fc7 60 \u4e2a\u5b57\u7b26\u3002
                      • \u53d1\u884c\u7248\uff1a\u96c6\u7fa4\u7684\u53d1\u884c\u5382\u5546\uff0c\u5305\u62ec\u5e02\u573a\u4e3b\u6d41\u4e91\u5382\u5546\u548c\u672c\u5730\u79c1\u6709\u7269\u7406\u96c6\u7fa4\u3002
                    3. \u586b\u5199\u76ee\u6807\u96c6\u7fa4\u7684 KubeConfig\uff0c\u70b9\u51fb \u9a8c\u8bc1 Config \uff0c\u9a8c\u8bc1\u901a\u8fc7\u540e\u624d\u80fd\u6210\u529f\u63a5\u5165\u96c6\u7fa4\u3002

                      \u5982\u679c\u4e0d\u77e5\u9053\u5982\u4f55\u83b7\u53d6\u96c6\u7fa4\u7684 KubeConfig \u6587\u4ef6\uff0c\u53ef\u4ee5\u5728\u8f93\u5165\u6846\u53f3\u4e0a\u89d2\u70b9\u51fb \u5982\u4f55\u83b7\u53d6 kubeConfig \u67e5\u770b\u5bf9\u5e94\u6b65\u9aa4\u3002

                    4. \u786e\u8ba4\u6240\u6709\u53c2\u6570\u586b\u5199\u6b63\u786e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u3002

                    Note

                    • \u65b0\u63a5\u5165\u7684\u96c6\u7fa4\u72b6\u6001\u4e3a \u63a5\u5165\u4e2d \uff0c\u63a5\u5165\u6210\u529f\u540e\u53d8\u4e3a \u8fd0\u884c\u4e2d \u3002
                    • \u5982\u679c\u96c6\u7fa4\u72b6\u6001\u4e00\u76f4\u5904\u4e8e \u63a5\u5165\u4e2d \uff0c\u8bf7\u786e\u8ba4\u63a5\u5165\u811a\u672c\u662f\u5426\u5728\u5bf9\u5e94\u96c6\u7fa4\u4e0a\u6267\u884c\u6210\u529f\u3002\u6709\u5173\u96c6\u7fa4\u72b6\u6001\u7684\u66f4\u591a\u8be6\u60c5\uff0c\u8bf7\u53c2\u8003\u96c6\u7fa4\u72b6\u6001\u3002
                    "},{"location":"end-user/kpanda/clusters/integrate-rancher-cluster.html","title":"\u63a5\u5165 rancher \u96c6\u7fa4","text":"

                    \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u63a5\u5165 rancher \u96c6\u7fa4\u3002

                    "},{"location":"end-user/kpanda/clusters/integrate-rancher-cluster.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u51c6\u5907\u4e00\u4e2a\u5177\u6709\u7ba1\u7406\u5458\u6743\u9650\u7684\u5f85\u63a5\u5165 ranhcer \u96c6\u7fa4\uff0c\u786e\u4fdd\u5bb9\u5668\u7ba1\u7406\u96c6\u7fa4\u548c\u5f85\u63a5\u5165\u96c6\u7fa4\u4e4b\u95f4\u7f51\u7edc\u901a\u7545\u3002
                    • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 Kpanda Owner \u6216\u66f4\u9ad8\u6743\u9650\u3002
                    "},{"location":"end-user/kpanda/clusters/integrate-rancher-cluster.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"end-user/kpanda/clusters/integrate-rancher-cluster.html#rancher-serviceaccount","title":"\u6b65\u9aa4\u4e00\uff1a\u5728 rancher \u96c6\u7fa4\u521b\u5efa\u5177\u6709\u7ba1\u7406\u5458\u6743\u9650\u7684 ServiceAccount \u7528\u6237","text":"
                    1. \u4f7f\u7528\u5177\u6709\u7ba1\u7406\u5458\u6743\u9650\u7684\u89d2\u8272\u8fdb\u5165 rancher \u96c6\u7fa4\uff0c\u5e76\u4f7f\u7528\u7ec8\u7aef\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a sa.yaml \u7684\u6587\u4ef6\u3002

                      vi sa.yaml\n

                      \u7136\u540e\u6309\u4e0b i \u952e\u8fdb\u5165\u63d2\u5165\u6a21\u5f0f\uff0c\u8f93\u5165\u4ee5\u4e0b\u5185\u5bb9\uff1a

                      sa.yaml
                      apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: rancher-rke\nrules:\n  - apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n  - nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: rancher-rke\nroleRef:\n    apiGroup: rbac.authorization.k8s.io\n    kind: ClusterRole\n    name: rancher-rke\n  subjects:\n  - kind: ServiceAccount\n    name: rancher-rke\n    namespace: kube-system\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: rancher-rke\n  namespace: kube-system\n

                      \u6309\u4e0b esc \u952e\u9000\u51fa\u63d2\u5165\u6a21\u5f0f\uff0c\u7136\u540e\u8f93\u5165 __ :wq__ \u4fdd\u5b58\u5e76\u9000\u51fa\u3002

                    2. \u5728\u5f53\u524d\u8def\u5f84\u4e0b\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u65b0\u5efa\u540d\u4e3a rancher-rke \u7684 ServiceAccount\uff08\u4ee5\u4e0b\u7b80\u79f0\u4e3a SA \uff09\uff1a

                      kubectl apply -f sa.yaml\n

                      \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                      clusterrole.rbac.authorization.k8s.io/rancher-rke created\nclusterrolebinding.rbac.authorization.k8s.io/rancher-rke created\nserviceaccount/rancher-rke created\n
                    3. \u521b\u5efa\u540d\u4e3a rancher-rke-secret \u7684\u5bc6\u94a5\uff0c\u5e76\u5c06\u5bc6\u94a5\u548c rancher-rke SA \u7ed1\u5b9a\u3002

                      kubectl apply -f - <<EOF\napiVersion: v1\nkind: Secret\nmetadata:\n  name: rancher-rke-secret\n  namespace: kube-system\n  annotations:\n    kubernetes.io/service-account.name: rancher-rke\n  type: kubernetes.io/service-account-token\nEOF\n

                      \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                      secret/rancher-rke-secret created\n

                      Note

                      \u5982\u679c\u60a8\u7684\u96c6\u7fa4\u7248\u672c\u4f4e\u4e8e 1.24\uff0c\u8bf7\u5ffd\u7565\u6b64\u6b65\u9aa4\uff0c\u76f4\u63a5\u524d\u5f80\u4e0b\u4e00\u6b65\u3002

                    4. \u67e5\u627e rancher-rke SA \u7684\u5bc6\u94a5\uff1a

                      kubectl -n kube-system get secret | grep rancher-rke | awk '{print $1}'\n

                      \u9884\u671f\u8f93\u51fa\uff1a

                      rancher-rke-secret\n

                      \u67e5\u770b\u5bc6\u94a5 rancher-rke-secret \u7684\u8be6\u60c5\uff1a

                      kubectl -n kube-system describe secret rancher-rke-secret\n

                      \u9884\u671f\u8f93\u51fa\uff1a

                      Name:         rancher-rke-secret\nNamespace:    kube-system\nLabels:       <none>\nAnnotations:  kubernetes.io/service-account.name: rancher-rke\n            kubernetes.io/service-account.uid: d83df5d9-bd7d-488d-a046-b740618a0174\n\nType:  kubernetes.io/service-account-token\n\nData\n====\nca.crt:     570 bytes\nnamespace:  11 bytes\ntoken:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjUtNE9nUWZLRzVpbEJORkZaNmtCQXhqVzRsZHU4MHhHcDBfb0VCaUo0V1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyYW5jaGVyLXJrZS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmFuY2hlci1ya2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkODNkZjVkOS1iZDdkLTQ4OGQtYTA0Ni1iNzQwNjE4YTAxNzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cmFuY2hlci1ya2UifQ.VNsMtPEFOdDDeGt_8VHblcMRvjOwPXMM-79o9UooHx6q-VkHOcIOp3FOT2hnEdNnIsyODZVKCpEdCgyozX-3y5x2cZSZpocnkMcBbQm-qfTyUcUhAY7N5gcYUtHUhvRAsNWJcsDCn6d96gT_qo-ddo_cT8Ri39Lc123FDYOnYG-YGFKSgRQVy7Vyv34HIajZCCjZzy7i--eE_7o4DXeTjNqAFMFstUxxHBOXI3Rdn1zKQKqh5Jhg4ES7X-edSviSUfJUX-QV_LlAw5DuAyGPH7bDH4QaQ5k-p6cIctmpWZE-9wRDlKA4LYRblKE7MJcI6OmM4ldlMM0Jc8N-gCtl4w\n
                    "},{"location":"end-user/kpanda/clusters/integrate-rancher-cluster.html#rancher-rke-sa-kubeconfig","title":"\u6b65\u9aa4\u4e8c\uff1a\u5728\u672c\u5730\u4f7f\u7528 rancher-rke SA \u7684\u8ba4\u8bc1\u4fe1\u606f\u66f4\u65b0 kubeconfig \u6587\u4ef6","text":"

                    \u5728\u4efb\u610f\u4e00\u53f0\u5b89\u88c5\u4e86 kubelet \u7684\u672c\u5730\u8282\u70b9\u6267\u884c\u5982\u4e0b\u64cd\u4f5c\uff1a

                    1. \u914d\u7f6e kubelet token\uff1a

                      kubectl config set-credentials rancher-rke --token=`rancher-rke-secret` \u91cc\u9762\u7684 token \u4fe1\u606f\n

                      \u4f8b\u5982\uff1a

                      kubectl config set-credentials eks-admin --token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjUtNE9nUWZLRzVpbEJORkZaNmtCQXhqVzRsZHU4MHhHcDBfb0VCaUo0V1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyYW5jaGVyLXJrZS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmFuY2hlci1ya2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkODNkZjVkOS1iZDdkLTQ4OGQtYTA0Ni1iNzQwNjE4YTAxNzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cmFuY2hlci1ya2UifQ.VNsMtPEFOdDDeGt_8VHblcMRvjOwPXMM-79o9UooHx6q-VkHOcIOp3FOT2hnEdNnIsyODZVKCpEdCgyozX-3y5x2cZSZpocnkMcBbQm-qfTyUcUhAY7N5gcYUtHUhvRAsNWJcsDCn6d96gT_qo-ddo_cT8Ri39Lc123FDYOnYG-YGFKSgRQVy7Vyv34HIajZCCjZzy7i--eE_7o4DXeTjNqAFMFstUxxHBOXI3Rdn1zKQKqh5Jhg4ES7X-edSviSUfJUX-QV_LlAw5DuAyGPH7bDH4QaQ5k-p6cIctmpWZE-9wRDlKA4LYRblKE7MJcI6OmM4ldlMM0Jc8N-gCtl4w\n
                    2. \u914d\u7f6e kubelet APIServer \u4fe1\u606f\uff1a

                      kubectl config set-cluster {\u96c6\u7fa4\u540d} --insecure-skip-tls-verify=true --server={APIServer}\n
                      • {\u96c6\u7fa4\u540d} \uff1a\u6307 rancher \u96c6\u7fa4\u7684\u540d\u79f0\u3002
                      • {APIServer} \uff1a\u6307\u96c6\u7fa4\u7684\u8bbf\u95ee\u5730\u5740\uff0c\u4e00\u822c\u4e3a\u96c6\u7fa4\u63a7\u5236\u8282\u70b9 IP + 6443 \u7aef\u53e3\uff0c\u5982 https://10.X.X.X:6443

                      \u4f8b\u5982\uff1a

                      kubectl config set-cluster rancher-rke --insecure-skip-tls-verify=true --server=https://10.X.X.X:6443\n
                    3. \u914d\u7f6e kubelet \u4e0a\u4e0b\u6587\u4fe1\u606f\uff1a

                      kubectl config set-context {\u4e0a\u4e0b\u6587\u540d\u79f0} --cluster={\u96c6\u7fa4\u540d} --user={SA \u7528\u6237\u540d}\n

                      \u4f8b\u5982\uff1a

                      kubectl config set-context rancher-rke-context --cluster=rancher-rke --user=rancher-rke\n
                    4. \u5728 kubelet \u4e2d\u6307\u5b9a\u6211\u4eec\u521a\u521a\u65b0\u5efa\u7684\u4e0a\u4e0b\u6587 rancher-rke-context \uff1a

                      kubectl config use-context rancher-rke-context\n
                    5. \u83b7\u53d6\u4e0a\u4e0b\u6587 rancher-rke-context \u4e2d\u7684 kubeconfig \u4fe1\u606f\u3002

                      kubectl config view --minify --flatten --raw\n

                      \u9884\u671f\u8f93\u51fa\uff1a

                      apiVersion: v1\n  clusters:\n  - cluster:\n    insecure-skip-tls-verify: true\n    server: https://77C321BCF072682C70C8665ED4BFA10D.gr7.ap-southeast-1.eks.amazonaws.com\n  name: joincluster\n  contexts:\n  - context:\n    cluster: joincluster\n    user: eks-admin\n  name: ekscontext\n  current-context: ekscontext\n  kind: Config\n  preferences: {}\n  users:\n  - name: eks-admin\n  user:\n    token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImcxTjJwNkktWm5IbmRJU1RFRExvdWY1TGFWVUtGQ3VIejFtNlFQcUNFalEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2V\n
                    "},{"location":"end-user/kpanda/clusters/integrate-rancher-cluster.html#ai","title":"\u6b65\u9aa4\u4e09\uff1a\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u754c\u9762\u63a5\u5165\u96c6\u7fa4","text":"

                    \u4f7f\u7528\u521a\u521a\u83b7\u53d6\u7684 kubeconfig \u6587\u4ef6\uff0c\u53c2\u8003\u63a5\u5165\u96c6\u7fa4\u6587\u6863\uff0c\u5c06 rancher \u96c6\u7fa4\u63a5\u5165\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u3002

                    "},{"location":"end-user/kpanda/clusters/k8s-cert.html","title":"Kubernetes \u96c6\u7fa4\u8bc1\u4e66\u66f4\u65b0","text":"

                    \u4e3a\u4fdd\u8bc1 Kubernetes \u5404\u7ec4\u4ef6\u4e4b\u95f4\u7684\u901a\u4fe1\u5b89\u5168\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u7684\u8c03\u7528\u4f1a\u8fdb\u884c TLS \u8eab\u4efd\u9a8c\u8bc1\uff0c\u6267\u884c\u9a8c\u8bc1\u64cd\u4f5c\u9700\u8981\u914d\u7f6e\u96c6\u7fa4 PKI \u8bc1\u4e66\u3002

                    \u96c6\u7fa4\u8bc1\u4e66\u6709\u6548\u671f\u4e3a1\u5e74\uff0c\u4e3a\u907f\u514d\u8bc1\u4e66\u8fc7\u671f\u5bfc\u81f4\u4e1a\u52a1\u65e0\u6cd5\u4f7f\u7528\uff0c\u8bf7\u53ca\u65f6\u66f4\u65b0\u8bc1\u4e66\u3002

                    \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u624b\u52a8\u8fdb\u884c\u8bc1\u4e66\u66f4\u65b0\u3002

                    "},{"location":"end-user/kpanda/clusters/k8s-cert.html#_1","title":"\u68c0\u67e5\u8bc1\u4e66\u662f\u5426\u8fc7\u671f","text":"

                    \u60a8\u53ef\u4ee5\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u8bc1\u4e66\u662f\u5426\u8fc7\u671f\uff1a

                    kubeadm certs check-expiration\n

                    \u8f93\u51fa\u7c7b\u4f3c\u4e8e\u4ee5\u4e0b\u5185\u5bb9\uff1a

                    CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED\nadmin.conf                 Dec 14, 2024 07:26 UTC   204d                                    no      \napiserver                  Dec 14, 2024 07:26 UTC   204d            ca                      no      \napiserver-etcd-client      Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \napiserver-kubelet-client   Dec 14, 2024 07:26 UTC   204d            ca                      no      \ncontroller-manager.conf    Dec 14, 2024 07:26 UTC   204d                                    no      \netcd-healthcheck-client    Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \netcd-peer                  Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \netcd-server                Dec 14, 2024 07:26 UTC   204d            etcd-ca                 no      \nfront-proxy-client         Dec 14, 2024 07:26 UTC   204d            front-proxy-ca          no      \nscheduler.conf             Dec 14, 2024 07:26 UTC   204d                                    no      \n\nCERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED\nca                      Dec 12, 2033 07:26 UTC   9y              no      \netcd-ca                 Dec 12, 2033 07:26 UTC   9y              no      \nfront-proxy-ca          Dec 12, 2033 07:26 UTC   9y              no      \n
                    "},{"location":"end-user/kpanda/clusters/k8s-cert.html#_2","title":"\u624b\u52a8\u66f4\u65b0\u8bc1\u4e66","text":"

                    \u60a8\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u624b\u52a8\u66f4\u65b0\u8bc1\u4e66\uff0c\u53ea\u9700\u5e26\u4e0a\u5408\u9002\u7684\u547d\u4ee4\u884c\u9009\u9879\u3002\u66f4\u65b0\u8bc1\u4e66\u524d\u8bf7\u5148\u5907\u4efd\u5f53\u524d\u8bc1\u4e66\u3002

                    \u66f4\u65b0\u6307\u5b9a\u8bc1\u4e66\uff1a

                    kubeadm certs renew\n

                    \u66f4\u65b0\u5168\u90e8\u8bc1\u4e66\uff1a

                    kubeadm certs renew all\n

                    \u66f4\u65b0\u540e\u7684\u8bc1\u4e66\u53ef\u4ee5\u5728 /etc/kubernetes/pki \u76ee\u5f55\u4e0b\u67e5\u770b\uff0c\u6709\u6548\u671f\u5ef6\u7eed 1 \u5e74\u3002 \u4ee5\u4e0b\u5bf9\u5e94\u7684\u51e0\u4e2a\u914d\u7f6e\u6587\u4ef6\u4e5f\u4f1a\u540c\u6b65\u66f4\u65b0\uff1a

                    • /etc/kubernetes/admin.conf
                    • /etc/kubernetes/controller-manager.conf
                    • /etc/kubernetes/scheduler.conf

                    Note

                    • \u5982\u679c\u60a8\u90e8\u7f72\u7684\u662f\u4e00\u4e2a\u9ad8\u53ef\u7528\u96c6\u7fa4\uff0c\u8fd9\u4e2a\u547d\u4ee4\u9700\u8981\u5728\u6240\u6709\u63a7\u5236\u8282\u70b9\u4e0a\u6267\u884c\u3002
                    • \u6b64\u547d\u4ee4\u7528 CA\uff08\u6216\u8005 front-proxy-CA \uff09\u8bc1\u4e66\u548c\u5b58\u50a8\u5728 /etc/kubernetes/pki \u4e2d\u7684\u5bc6\u94a5\u6267\u884c\u66f4\u65b0\u3002
                    "},{"location":"end-user/kpanda/clusters/k8s-cert.html#_3","title":"\u91cd\u542f\u670d\u52a1","text":"

                    \u6267\u884c\u66f4\u65b0\u64cd\u4f5c\u4e4b\u540e\uff0c\u4f60\u9700\u8981\u91cd\u542f\u63a7\u5236\u9762 Pod\u3002\u56e0\u4e3a\u52a8\u6001\u8bc1\u4e66\u91cd\u8f7d\u76ee\u524d\u8fd8\u4e0d\u88ab\u6240\u6709\u7ec4\u4ef6\u548c\u8bc1\u4e66\u652f\u6301\uff0c\u6240\u6709\u8fd9\u9879\u64cd\u4f5c\u662f\u5fc5\u987b\u7684\u3002

                    \u9759\u6001 Pod \u662f\u88ab\u672c\u5730 kubelet \u800c\u4e0d\u662f API \u670d\u52a1\u5668\u7ba1\u7406\uff0c\u6240\u4ee5 kubectl \u4e0d\u80fd\u7528\u6765\u5220\u9664\u6216\u91cd\u542f\u4ed6\u4eec\u3002

                    \u8981\u91cd\u542f\u9759\u6001 Pod\uff0c\u4f60\u53ef\u4ee5\u4e34\u65f6\u5c06\u6e05\u5355\u6587\u4ef6\u4ece /etc/kubernetes/manifests/ \u79fb\u9664\u5e76\u7b49\u5f85 20 \u79d2\u3002 \u53c2\u8003 KubeletConfiguration \u7ed3\u6784\u4e2d\u7684 fileCheckFrequency \u503c\u3002

                    \u5982\u679c Pod \u4e0d\u5728\u6e05\u5355\u76ee\u5f55\u91cc\uff0ckubelet \u5c06\u4f1a\u7ec8\u6b62\u5b83\u3002 \u5728\u53e6\u4e00\u4e2a fileCheckFrequency \u5468\u671f\u4e4b\u540e\u4f60\u53ef\u4ee5\u5c06\u6587\u4ef6\u79fb\u56de\u53bb\uff0ckubelet \u53ef\u4ee5\u5b8c\u6210 Pod \u7684\u91cd\u5efa\uff0c\u800c\u7ec4\u4ef6\u7684\u8bc1\u4e66\u66f4\u65b0\u64cd\u4f5c\u4e5f\u5f97\u4ee5\u5b8c\u6210\u3002

                    mv ./manifests/* ./temp/\nmv ./temp/* ./manifests/\n

                    Note

                    \u5982\u679c\u5bb9\u5668\u670d\u52a1\u4f7f\u7528\u7684\u662f Docker\uff0c\u4e3a\u4e86\u8ba9\u8bc1\u4e66\u751f\u6548\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5bf9\u6d89\u53ca\u5230\u8bc1\u4e66\u4f7f\u7528\u7684\u51e0\u4e2a\u670d\u52a1\u8fdb\u884c\u91cd\u542f\uff1a

                    docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' | xargs docker restart\n
                    "},{"location":"end-user/kpanda/clusters/k8s-cert.html#kubeconfig","title":"\u66f4\u65b0 KubeConfig","text":"

                    \u6784\u5efa\u96c6\u7fa4\u65f6\u901a\u5e38\u4f1a\u5c06 admin.conf \u8bc1\u4e66\u590d\u5236\u5230 $HOME/.kube/config \u4e2d\uff0c\u4e3a\u4e86\u5728\u66f4\u65b0 admin.conf \u540e\u66f4\u65b0 $HOME/.kube/config \u7684\u5185\u5bb9\uff0c \u5fc5\u987b\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a

                    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\nsudo chown $(id -u):$(id -g) $HOME/.kube/config\n
                    "},{"location":"end-user/kpanda/clusters/k8s-cert.html#kubelet","title":"\u4e3a kubelet \u914d\u7f6e\u8bc1\u4e66\u8f6e\u6362","text":"

                    \u5b8c\u6210\u4ee5\u4e0a\u64cd\u4f5c\u540e\uff0c\u57fa\u672c\u5b8c\u6210\u4e86\u96c6\u7fa4\u6240\u6709\u8bc1\u4e66\u7684\u66f4\u65b0\uff0c\u4f46\u4e0d\u5305\u62ec kubelet\u3002

                    \u56e0\u4e3a kubernetes \u5305\u542b\u7279\u6027 kubelet \u8bc1\u4e66\u8f6e\u6362\uff0c \u5728\u5f53\u524d\u8bc1\u4e66\u5373\u5c06\u8fc7\u671f\u65f6\uff0c \u5c06\u81ea\u52a8\u751f\u6210\u65b0\u7684\u79d8\u94a5\uff0c\u5e76\u4ece Kubernetes API \u7533\u8bf7\u65b0\u7684\u8bc1\u4e66\u3002 \u4e00\u65e6\u65b0\u7684\u8bc1\u4e66\u53ef\u7528\uff0c\u5b83\u5c06\u88ab\u7528\u4e8e\u4e0e Kubernetes API \u95f4\u7684\u8fde\u63a5\u8ba4\u8bc1\u3002

                    Note

                    \u6b64\u7279\u6027\u9002\u7528\u4e8e Kubernetes 1.8.0 \u6216\u66f4\u9ad8\u7684\u7248\u672c\u3002

                    \u542f\u7528\u5ba2\u6237\u7aef\u8bc1\u4e66\u8f6e\u6362\uff0c\u914d\u7f6e\u53c2\u6570\u5982\u4e0b\uff1a

                    • kubelet \u8fdb\u7a0b\u63a5\u6536 --rotate-certificates \u53c2\u6570\uff0c\u8be5\u53c2\u6570\u51b3\u5b9a kubelet \u5728\u5f53\u524d\u4f7f\u7528\u7684 \u8bc1\u4e66\u5373\u5c06\u5230\u671f\u65f6\uff0c\u662f\u5426\u4f1a\u81ea\u52a8\u7533\u8bf7\u65b0\u7684\u8bc1\u4e66\u3002

                    • kube-controller-manager \u8fdb\u7a0b\u63a5\u6536 --cluster-signing-duration \u53c2\u6570 \uff08\u5728 1.19 \u7248\u672c\u4e4b\u524d\u4e3a --experimental-cluster-signing-duration\uff09\uff0c\u7528\u6765\u63a7\u5236\u7b7e\u53d1\u8bc1\u4e66\u7684\u6709\u6548\u671f\u9650\u3002

                    \u66f4\u591a\u8be6\u60c5\u53c2\u8003\u4e3a kubelet \u914d\u7f6e\u8bc1\u4e66\u8f6e\u6362\u3002

                    "},{"location":"end-user/kpanda/clusters/k8s-cert.html#_4","title":"\u81ea\u52a8\u66f4\u65b0\u8bc1\u4e66","text":"

                    \u4e3a\u4e86\u66f4\u9ad8\u6548\u4fbf\u6377\u5904\u7406\u5df2\u8fc7\u671f\u6216\u8005\u5373\u5c06\u8fc7\u671f\u7684 kubernetes \u96c6\u7fa4\u8bc1\u4e66\uff0c\u53ef\u53c2\u8003 k8s \u7248\u672c\u96c6\u7fa4\u8bc1\u4e66\u66f4\u65b0\u3002

                    "},{"location":"end-user/kpanda/clusters/runtime.html","title":"\u5982\u4f55\u9009\u62e9\u5bb9\u5668\u8fd0\u884c\u65f6","text":"

                    \u5bb9\u5668\u8fd0\u884c\u65f6\u662f kubernetes \u4e2d\u5bf9\u5bb9\u5668\u548c\u5bb9\u5668\u955c\u50cf\u751f\u547d\u5468\u671f\u8fdb\u884c\u7ba1\u7406\u7684\u91cd\u8981\u7ec4\u4ef6\u3002 kubernetes \u5728 1.19 \u7248\u672c\u4e2d\u5c06 containerd \u8bbe\u4e3a\u9ed8\u8ba4\u7684\u5bb9\u5668\u8fd0\u884c\u65f6\uff0c\u5e76\u5728 1.24 \u7248\u672c\u4e2d\u79fb\u9664\u4e86 Dockershim \u7ec4\u4ef6\u7684\u652f\u6301\u3002

                    \u56e0\u6b64\u76f8\u8f83\u4e8e Docker \u8fd0\u884c\u65f6\uff0c\u6211\u4eec\u66f4\u52a0 \u63a8\u8350\u60a8\u4f7f\u7528\u8f7b\u91cf\u7684 containerd \u4f5c\u4e3a\u60a8\u7684\u5bb9\u5668\u8fd0\u884c\u65f6\uff0c\u56e0\u4e3a\u8fd9\u5df2\u7ecf\u6210\u4e3a\u5f53\u524d\u4e3b\u6d41\u7684\u8fd0\u884c\u65f6\u9009\u62e9\u3002

                    \u9664\u6b64\u4e4b\u5916\uff0c\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u53d1\u884c\u5382\u5546\u5bf9 Docker \u8fd0\u884c\u65f6\u7684\u517c\u5bb9\u4e5f\u4e0d\u591f\u53cb\u597d\uff0c\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u8fd0\u884c\u65f6\u7684\u652f\u6301\u5982\u4e0b\u8868\uff1a

                    "},{"location":"end-user/kpanda/clusters/runtime.html#_2","title":"\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u548c\u63a8\u8350\u7684\u8fd0\u884c\u65f6\u7248\u672c\u5bf9\u5e94\u5173\u7cfb","text":"\u64cd\u4f5c\u7cfb\u7edf \u63a8\u8350\u7684 containerd \u7248\u672c \u63a8\u8350\u7684 Docker \u7248\u672c CentOS 1.7.5 20.10 RedHatOS 1.7.5 20.10 KylinOS 1.7.5 19.03\uff08\u4ec5 ARM \u67b6\u6784\u652f\u6301 \uff0c\u5728 x86 \u67b6\u6784\u4e0b\u4e0d\u652f\u6301\u4f7f\u7528 Docker \u4f5c\u4e3a\u8fd0\u884c\u65f6\uff09

                    \u66f4\u591a\u652f\u6301\u7684\u8fd0\u884c\u65f6\u7248\u672c\u4fe1\u606f\uff0c\u8bf7\u53c2\u8003 RedHatOS \u652f\u6301\u7684\u8fd0\u884c\u65f6\u7248\u672c \u548c KylinOS \u652f\u6301\u7684\u8fd0\u884c\u65f6\u7248\u672c

                    Note

                    \u5728\u79bb\u7ebf\u5b89\u88c5\u6a21\u5f0f\u4e0b\uff0c\u9700\u8981\u63d0\u524d\u51c6\u5907\u76f8\u5173\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u65f6\u79bb\u7ebf\u5305\u3002

                    "},{"location":"end-user/kpanda/clusters/upgrade-cluster.html","title":"\u96c6\u7fa4\u5347\u7ea7","text":"

                    Kubernetes \u793e\u533a\u6bcf\u4e2a\u5b63\u5ea6\u90fd\u4f1a\u53d1\u5e03\u4e00\u6b21\u5c0f\u7248\u672c\uff0c\u6bcf\u4e2a\u7248\u672c\u7684\u7ef4\u62a4\u5468\u671f\u5927\u6982\u53ea\u6709 9 \u4e2a\u6708\u3002 \u7248\u672c\u505c\u6b62\u7ef4\u62a4\u540e\u5c31\u4e0d\u4f1a\u518d\u66f4\u65b0\u4e00\u4e9b\u91cd\u5927\u6f0f\u6d1e\u6216\u5b89\u5168\u6f0f\u6d1e\u3002\u624b\u52a8\u5347\u7ea7\u96c6\u7fa4\u64cd\u4f5c\u8f83\u4e3a\u7e41\u7410\uff0c\u7ed9\u7ba1\u7406\u4eba\u5458\u5e26\u6765\u4e86\u6781\u5927\u7684\u5de5\u4f5c\u8d1f\u62c5\u3002

                    \u672c\u8282\u5c06\u4ecb\u7ecd\u5982\u4f55\u5728\u901a\u8fc7 Web UI \u754c\u9762\u4e00\u952e\u5f0f\u5728\u7ebf\u5347\u7ea7\u5de5\u4f5c\u96c6\u7fa4 Kubernetes \u7248\u672c\uff0c \u5982\u9700\u79bb\u7ebf\u5347\u7ea7\u5de5\u4f5c\u96c6\u7fa4\u7684 kubernetes \u7248\u672c\uff0c\u8bf7\u53c2\u9605\u5de5\u4f5c\u96c6\u7fa4\u79bb\u7ebf\u5347\u7ea7\u6307\u5357\u8fdb\u884c\u5347\u7ea7\u3002

                    Danger

                    \u7248\u672c\u5347\u7ea7\u540e\u5c06\u65e0\u6cd5\u56de\u9000\u5230\u4e4b\u524d\u7684\u7248\u672c\uff0c\u8bf7\u8c28\u614e\u64cd\u4f5c\u3002

                    Note

                    • Kubernetes \u7248\u672c\u4ee5 x.y.z \u8868\u793a\uff0c\u5176\u4e2d x \u662f\u4e3b\u8981\u7248\u672c\uff0c y \u662f\u6b21\u8981\u7248\u672c\uff0c z \u662f\u8865\u4e01\u7248\u672c\u3002
                    • \u4e0d\u5141\u8bb8\u8de8\u6b21\u8981\u7248\u672c\u5bf9\u96c6\u7fa4\u8fdb\u884c\u5347\u7ea7\uff0c\u4f8b\u5982\u4e0d\u80fd\u4ece 1.23 \u76f4\u63a5\u5347\u7ea7\u5230 1.25\u3002
                    • \u63a5\u5165\u96c6\u7fa4 \u4e0d\u652f\u6301\u7248\u672c\u5347\u7ea7\u3002\u5982\u679c\u5de6\u4fa7\u5bfc\u822a\u680f\u6ca1\u6709 \u96c6\u7fa4\u5347\u7ea7 \uff0c\u8bf7\u68c0\u67e5\u8be5\u96c6\u7fa4\u662f\u5426\u4e3a \u63a5\u5165\u96c6\u7fa4 \u3002
                    • \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u53ea\u80fd\u901a\u8fc7\u7ec8\u7aef\u8fdb\u884c\u5347\u7ea7\u3002
                    • \u5347\u7ea7\u5de5\u4f5c\u96c6\u7fa4\u65f6\uff0c\u8be5\u5de5\u4f5c\u96c6\u7fa4\u7684\u7ba1\u7406\u96c6\u7fa4\u5e94\u8be5\u5df2\u7ecf\u63a5\u5165\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\uff0c\u5e76\u4e14\u5904\u4e8e\u6b63\u5e38\u8fd0\u884c\u4e2d\u3002
                    • \u5982\u679c\u9700\u8981\u4fee\u6539\u96c6\u7fa4\u53c2\u6570\uff0c\u53ef\u4ee5\u901a\u8fc7\u5347\u7ea7\u76f8\u540c\u7248\u672c\u7684\u65b9\u5f0f\u5b9e\u73b0\uff0c\u5177\u4f53\u64cd\u4f5c\u53c2\u8003\u4e0b\u6587\u3002
                    1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                    2. \u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u5347\u7ea7 \uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u70b9\u51fb \u7248\u672c\u5347\u7ea7 \u3002

                    3. \u9009\u62e9\u53ef\u5347\u7ea7\u7684\u7248\u672c\uff0c\u8f93\u5165\u96c6\u7fa4\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\u3002

                      Note

                      \u5982\u679c\u60a8\u662f\u60f3\u901a\u8fc7\u5347\u7ea7\u65b9\u5f0f\u6765\u4fee\u6539\u96c6\u7fa4\u53c2\u6570\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff1a

                      1. \u627e\u5230\u96c6\u7fa4\u5bf9\u5e94\u7684 ConfigMap\uff0c\u60a8\u53ef\u4ee5\u767b\u5f55\u63a7\u5236\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u627e\u5230 varsConfRef \u4e2d\u7684 ConfigMap \u540d\u79f0\u3002

                        kubectl get cluster.kubean.io <clustername> -o yaml\n
                      2. \u6839\u636e\u9700\u8981\uff0c\u4fee\u6539 ConfigMap \u4e2d\u7684\u53c2\u6570\u4fe1\u606f\u3002

                      3. \u5728\u6b64\u5904\u9009\u62e9\u76f8\u540c\u7248\u672c\u8fdb\u884c\u5347\u7ea7\u64cd\u4f5c\uff0c\u5347\u7ea7\u5b8c\u6210\u5373\u53ef\u6210\u529f\u66f4\u65b0\u5bf9\u5e94\u7684\u96c6\u7fa4\u53c2\u6570\u3002

                    4. \u70b9\u51fb \u786e\u5b9a \u540e\uff0c\u53ef\u4ee5\u770b\u5230\u96c6\u7fa4\u7684\u5347\u7ea7\u8fdb\u5ea6\u3002

                    5. \u96c6\u7fa4\u5347\u7ea7\u9884\u8ba1\u9700\u8981 30 \u5206\u949f\uff0c\u53ef\u4ee5\u70b9\u51fb \u5b9e\u65f6\u65e5\u5fd7 \u6309\u94ae\u67e5\u770b\u96c6\u7fa4\u5347\u7ea7\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/configmap-hot-loading.html","title":"configmap/secret \u70ed\u52a0\u8f7d","text":"

                    configmap/secret \u70ed\u52a0\u8f7d\u662f\u6307\u5c06 configmap/secret \u4f5c\u4e3a\u6570\u636e\u5377\u6302\u8f7d\u5728\u5bb9\u5668\u4e2d\u6302\u8f7d\u65f6\uff0c\u5f53\u914d\u7f6e\u53d1\u751f\u6539\u53d8\u65f6\uff0c\u5bb9\u5668\u5c06\u81ea\u52a8\u8bfb\u53d6 configmap/secret \u66f4\u65b0\u540e\u7684\u914d\u7f6e\uff0c\u800c\u65e0\u9700\u91cd\u542f Pod\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/configmap-hot-loading.html#_1","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                    1. \u53c2\u8003\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d - \u5bb9\u5668\u914d\u7f6e\uff0c\u914d\u7f6e\u5bb9\u5668\u6570\u636e\u5b58\u50a8\uff0c\u9009\u62e9 Configmap \u3001 Configmap Key \u3001 Secret \u3001 Secret Key \u4f5c\u4e3a\u6570\u636e\u5377\u6302\u8f7d\u81f3\u5bb9\u5668\u3002

                      Note

                      \u4f7f\u7528\u5b50\u8def\u5f84\uff08SubPath\uff09\u65b9\u5f0f\u6302\u8f7d\u7684\u914d\u7f6e\u6587\u4ef6\u4e0d\u652f\u6301\u70ed\u52a0\u8f7d\u3002

                    2. \u8fdb\u5165\u3010\u914d\u7f6e\u4e0e\u5bc6\u94a5\u3011\u9875\u9762\uff0c\u8fdb\u5165\u914d\u7f6e\u9879\u8be6\u60c5\u9875\u9762\uff0c\u5728\u3010\u5173\u8054\u8d44\u6e90\u3011\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 container \u8d44\u6e90\uff0c\u70b9\u51fb \u7acb\u5373\u52a0\u8f7d \u6309\u94ae\uff0c\u8fdb\u5165\u914d\u7f6e\u70ed\u52a0\u8f7d\u9875\u9762\u3002

                      Note

                      \u5982\u679c\u60a8\u7684\u5e94\u7528\u652f\u6301\u81ea\u52a8\u8bfb\u53d6 configmap/secret \u66f4\u65b0\u540e\u7684\u914d\u7f6e\uff0c\u5219\u65e0\u9700\u624b\u52a8\u6267\u884c\u70ed\u52a0\u8f7d\u64cd\u4f5c\u3002

                    3. \u5728\u70ed\u52a0\u8f7d\u914d\u7f6e\u5f39\u7a97\u4e2d\uff0c\u8f93\u5165\u8fdb\u5165\u5bb9\u5668\u5185\u7684 \u6267\u884c\u547d\u4ee4 \u5e76\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u4ee5\u91cd\u8f7d\u914d\u7f6e\u3002\u4f8b\u5982\uff0c\u5728 nginx \u5bb9\u5668\u4e2d\uff0c\u4ee5 root \u7528\u6237\u6743\u9650\uff0c\u6267\u884c nginx -s reload \u547d\u4ee4\u6765\u91cd\u8f7d\u914d\u7f6e\u3002

                    4. \u5728\u754c\u9762\u5f39\u51fa\u7684 web \u7ec8\u7aef\u4e2d\u67e5\u770b\u5e94\u7528\u91cd\u8f7d\u60c5\u51b5\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/create-configmap.html","title":"\u521b\u5efa\u914d\u7f6e\u9879","text":"

                    \u914d\u7f6e\u9879\uff08ConfigMap\uff09\u4ee5\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u5b58\u50a8\u975e\u673a\u5bc6\u6027\u6570\u636e\uff0c\u5b9e\u73b0\u914d\u7f6e\u6570\u636e\u548c\u5e94\u7528\u4ee3\u7801\u76f8\u4e92\u89e3\u8026\u7684\u6548\u679c\u3002\u914d\u7f6e\u9879\u53ef\u7528\u4f5c\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3001\u547d\u4ee4\u884c\u53c2\u6570\u6216\u8005\u5b58\u50a8\u5377\u4e2d\u7684\u914d\u7f6e\u6587\u4ef6\u3002

                    Note

                    • \u5728\u914d\u7f6e\u9879\u4e2d\u4fdd\u5b58\u7684\u6570\u636e\u4e0d\u53ef\u8d85\u8fc7 1 MiB\u3002\u5982\u679c\u9700\u8981\u5b58\u50a8\u4f53\u79ef\u66f4\u5927\u7684\u6570\u636e\uff0c\u5efa\u8bae\u6302\u8f7d\u5b58\u50a8\u5377\u6216\u8005\u4f7f\u7528\u72ec\u7acb\u7684\u6570\u636e\u5e93\u6216\u8005\u6587\u4ef6\u670d\u52a1\u3002

                    • \u914d\u7f6e\u9879\u4e0d\u63d0\u4f9b\u4fdd\u5bc6\u6216\u8005\u52a0\u5bc6\u529f\u80fd\u3002\u5982\u679c\u8981\u5b58\u50a8\u52a0\u5bc6\u6570\u636e\uff0c\u5efa\u8bae\u4f7f\u7528\u5bc6\u94a5\uff0c\u6216\u8005\u5176\u4ed6\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u4fdd\u8bc1\u6570\u636e\u7684\u79c1\u5bc6\u6027\u3002

                    \u652f\u6301\u4e24\u79cd\u521b\u5efa\u65b9\u5f0f\uff1a

                    • \u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa
                    • YAML \u521b\u5efa
                    "},{"location":"end-user/kpanda/configmaps-secrets/create-configmap.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

                    • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/create-configmap.html#_3","title":"\u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa","text":"
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                    2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u914d\u7f6e\u9879 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u914d\u7f6e\u9879 \u6309\u94ae\u3002

                    3. \u5728 \u521b\u5efa\u914d\u7f6e\u9879 \u9875\u9762\u4e2d\u586b\u5199\u914d\u7f6e\u4fe1\u606f\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                      Note

                      \u70b9\u51fb \u4e0a\u4f20\u6587\u4ef6 \u53ef\u4ee5\u4ece\u672c\u5730\u5bfc\u5165\u5df2\u6709\u7684\u6587\u4ef6\uff0c\u5feb\u901f\u521b\u5efa\u914d\u7f6e\u9879\u3002

                    4. \u521b\u5efa\u5b8c\u6210\u540e\u5728\u914d\u7f6e\u9879\u53f3\u4fa7\u70b9\u51fb\u66f4\u591a\u53ef\u4ee5\uff0c\u53ef\u4ee5\u7f16\u8f91 YAML\u3001\u66f4\u65b0\u3001\u5bfc\u51fa\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/create-configmap.html#yaml","title":"YAML \u521b\u5efa","text":"
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                    2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u914d\u7f6e\u9879 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

                    3. \u586b\u5199\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u3002

                      Note

                      • \u70b9\u51fb \u5bfc\u5165 \u53ef\u4ee5\u4ece\u672c\u5730\u5bfc\u5165\u5df2\u6709\u7684\u6587\u4ef6\uff0c\u5feb\u901f\u521b\u5efa\u914d\u7f6e\u9879\u3002
                      • \u586b\u5199\u6570\u636e\u4e4b\u540e\u70b9\u51fb \u4e0b\u8f7d \u53ef\u4ee5\u5c06\u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u5728\u672c\u5730\u3002

                    4. \u521b\u5efa\u5b8c\u6210\u540e\u5728\u914d\u7f6e\u9879\u53f3\u4fa7\u70b9\u51fb\u66f4\u591a\u53ef\u4ee5\uff0c\u53ef\u4ee5\u7f16\u8f91 YAML\u3001\u66f4\u65b0\u3001\u5bfc\u51fa\u3001\u5220\u9664\u7b49\u64cd\u4f5c\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/create-configmap.html#yaml_1","title":"\u914d\u7f6e\u9879 YAML \u793a\u4f8b","text":"
                    ```yaml\nkind: ConfigMap\napiVersion: v1\nmetadata:\n  name: kube-root-ca.crt\n  namespace: default\n  annotations:\ndata:\n  version: '1.0'\n```\n

                    \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528\u914d\u7f6e\u9879

                    "},{"location":"end-user/kpanda/configmaps-secrets/create-secret.html","title":"\u521b\u5efa\u5bc6\u94a5","text":"

                    \u5bc6\u94a5\u662f\u4e00\u79cd\u7528\u4e8e\u5b58\u50a8\u548c\u7ba1\u7406\u5bc6\u7801\u3001OAuth \u4ee4\u724c\u3001SSH\u3001TLS \u51ed\u636e\u7b49\u654f\u611f\u4fe1\u606f\u7684\u8d44\u6e90\u5bf9\u8c61\u3002\u4f7f\u7528\u5bc6\u94a5\u610f\u5473\u7740\u60a8\u4e0d\u9700\u8981\u5728\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5305\u542b\u654f\u611f\u7684\u673a\u5bc6\u6570\u636e\u3002

                    \u5bc6\u94a5\u4f7f\u7528\u573a\u666f\uff1a

                    • \u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u4f7f\u7528\uff0c\u63d0\u4f9b\u5bb9\u5668\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u7684\u4e00\u4e9b\u5fc5\u8981\u4fe1\u606f\u3002
                    • \u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a Pod \u7684\u6570\u636e\u5377\u3002
                    • \u5728 kubelet \u62c9\u53d6\u5bb9\u5668\u955c\u50cf\u65f6\u4f5c\u4e3a\u955c\u50cf\u4ed3\u5e93\u7684\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1\u3002

                    \u652f\u6301\u4e24\u79cd\u521b\u5efa\u65b9\u5f0f\uff1a

                    • \u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa
                    • YAML \u521b\u5efa
                    "},{"location":"end-user/kpanda/configmaps-secrets/create-secret.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

                    • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/create-secret.html#_3","title":"\u56fe\u5f62\u5316\u8868\u5355\u521b\u5efa","text":"
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                    2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u5bc6\u94a5 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u5bc6\u94a5 \u6309\u94ae\u3002

                    3. \u5728 \u521b\u5efa\u5bc6\u94a5 \u9875\u9762\u4e2d\u586b\u5199\u914d\u7f6e\u4fe1\u606f\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                      \u586b\u5199\u914d\u7f6e\u65f6\u9700\u8981\u6ce8\u610f\uff1a

                      • \u5bc6\u94a5\u7684\u540d\u79f0\u5728\u540c\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\u5fc5\u987b\u5177\u6709\u552f\u4e00\u6027
                      • \u5bc6\u94a5\u7c7b\u578b\uff1a
                        • \u9ed8\u8ba4\uff08Opaque\uff09\uff1aKubernetes \u9ed8\u8ba4\u7684\u5bc6\u94a5\u7c7b\u578b\uff0c\u652f\u6301\u7528\u6237\u5b9a\u4e49\u7684\u4efb\u610f\u6570\u636e\u3002
                        • TLS (kubernetes.io/tls)\uff1a\u7528\u4e8e TLS \u5ba2\u6237\u7aef\u6216\u8005\u670d\u52a1\u5668\u7aef\u6570\u636e\u8bbf\u95ee\u7684\u51ed\u8bc1\u3002
                        • \u955c\u50cf\u4ed3\u5e93\u4fe1\u606f (kubernetes.io/dockerconfigjson)\uff1a\u7528\u4e8e\u955c\u50cf\u4ed3\u5e93\u8bbf\u95ee\u7684\u51ed\u8bc1\u3002
                        • \u7528\u6237\u540d\u548c\u5bc6\u7801\uff08kubernetes.io/basic-auth\uff09\uff1a\u7528\u4e8e\u57fa\u672c\u8eab\u4efd\u8ba4\u8bc1\u7684\u51ed\u8bc1\u3002
                        • \u81ea\u5b9a\u4e49\uff1a\u7528\u6237\u6839\u636e\u4e1a\u52a1\u9700\u8981\u81ea\u5b9a\u4e49\u7684\u7c7b\u578b\u3002
                      • \u5bc6\u94a5\u6570\u636e\uff1a\u5bc6\u94a5\u6240\u5b58\u50a8\u7684\u6570\u636e\uff0c\u4e0d\u540c\u6570\u636e\u9700\u8981\u586b\u5199\u7684\u53c2\u6570\u6709\u6240\u4e0d\u540c
                        • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a\u9ed8\u8ba4\uff08Opaque\uff09/\u81ea\u5b9a\u4e49\uff1a\u53ef\u4ee5\u586b\u5165\u591a\u4e2a\u952e\u503c\u5bf9\u6570\u636e\u3002
                        • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a TLS (kubernetes.io/tls)\uff1a\u9700\u8981\u586b\u5165\u8bc1\u4e66\u51ed\u8bc1\u548c\u79c1\u94a5\u6570\u636e\u3002\u8bc1\u4e66\u662f\u81ea\u7b7e\u540d\u6216 CA \u7b7e\u540d\u8fc7\u7684\u51ed\u636e\uff0c\u7528\u6765\u8fdb\u884c\u8eab\u4efd\u8ba4\u8bc1\u3002\u8bc1\u4e66\u8bf7\u6c42\u662f\u5bf9\u7b7e\u540d\u7684\u8bf7\u6c42\uff0c\u9700\u8981\u4f7f\u7528\u79c1\u94a5\u8fdb\u884c\u7b7e\u540d\u3002
                        • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a\u955c\u50cf\u4ed3\u5e93\u4fe1\u606f (kubernetes.io/dockerconfigjson)\uff1a\u9700\u8981\u586b\u5165\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u7684\u8d26\u53f7\u548c\u5bc6\u7801\u3002
                        • \u5f53\u5bc6\u94a5\u7c7b\u578b\u4e3a\u7528\u6237\u540d\u548c\u5bc6\u7801\uff08kubernetes.io/basic-auth\uff09\uff1a\u9700\u8981\u6307\u5b9a\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002
                    "},{"location":"end-user/kpanda/configmaps-secrets/create-secret.html#yaml","title":"YAML \u521b\u5efa","text":"
                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u67d0\u4e2a\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                    2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u914d\u7f6e\u4e0e\u5bc6\u94a5 -> \u5bc6\u94a5 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

                    3. \u5728 YAML \u521b\u5efa \u9875\u9762\u4e2d\u586b\u5199 YAML \u914d\u7f6e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                      \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/create-secret.html#yaml_1","title":"\u5bc6\u94a5 YAML \u793a\u4f8b","text":"
                    ```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: secretdemo\ntype: Opaque\ndata:\n  username: ******\n  password: ******\n```\n

                    \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528\u5bc6\u94a5

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html","title":"\u4f7f\u7528\u914d\u7f6e\u9879","text":"

                    \u914d\u7f6e\u9879\uff08ConfigMap\uff09\u662f Kubernetes \u7684\u4e00\u79cd API \u5bf9\u8c61\uff0c\u7528\u6765\u5c06\u975e\u673a\u5bc6\u6027\u7684\u6570\u636e\u4fdd\u5b58\u5230\u952e\u503c\u5bf9\u4e2d\uff0c\u53ef\u4ee5\u5b58\u50a8\u5176\u4ed6\u5bf9\u8c61\u6240\u9700\u8981\u4f7f\u7528\u7684\u914d\u7f6e\u3002 \u4f7f\u7528\u65f6\uff0c \u5bb9\u5668\u53ef\u4ee5\u5c06\u5176\u7528\u4f5c\u73af\u5883\u53d8\u91cf\u3001\u547d\u4ee4\u884c\u53c2\u6570\u6216\u8005\u5b58\u50a8\u5377\u4e2d\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u901a\u8fc7\u4f7f\u7528\u914d\u7f6e\u9879\uff0c\u80fd\u591f\u5c06\u914d\u7f6e\u6570\u636e\u548c\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u5206\u5f00\uff0c\u4e3a\u5e94\u7528\u914d\u7f6e\u7684\u4fee\u6539\u63d0\u4f9b\u66f4\u52a0\u7075\u6d3b\u7684\u9014\u5f84\u3002

                    Note

                    \u914d\u7f6e\u9879\u5e76\u4e0d\u63d0\u4f9b\u4fdd\u5bc6\u6216\u8005\u52a0\u5bc6\u529f\u80fd\u3002\u5982\u679c\u8981\u5b58\u50a8\u7684\u6570\u636e\u662f\u673a\u5bc6\u7684\uff0c\u8bf7\u4f7f\u7528\u5bc6\u94a5\uff0c\u6216\u8005\u4f7f\u7528\u5176\u4ed6\u7b2c\u4e09\u65b9\u5de5\u5177\u6765\u4fdd\u8bc1\u6570\u636e\u7684\u79c1\u5bc6\u6027\uff0c\u800c\u4e0d\u662f\u7528\u914d\u7f6e\u9879\u3002 \u6b64\u5916\u5728\u5bb9\u5668\u91cc\u4f7f\u7528\u914d\u7f6e\u9879\u65f6\uff0c\u5bb9\u5668\u548c\u914d\u7f6e\u9879\u5fc5\u987b\u5904\u4e8e\u540c\u4e00\u96c6\u7fa4\u7684\u547d\u540d\u7a7a\u95f4\u4e2d\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_2","title":"\u4f7f\u7528\u573a\u666f","text":"

                    \u60a8\u53ef\u4ee5\u5728 Pod \u4e2d\u4f7f\u7528\u914d\u7f6e\u9879\uff0c\u6709\u591a\u79cd\u4f7f\u7528\u573a\u666f\uff0c\u4e3b\u8981\u5305\u62ec\uff1a

                    • \u4f7f\u7528\u914d\u7f6e\u9879\u8bbe\u7f6e\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf

                    • \u4f7f\u7528\u914d\u7f6e\u9879\u8bbe\u7f6e\u5bb9\u5668\u7684\u547d\u4ee4\u884c\u53c2\u6570

                    • \u4f7f\u7528\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_3","title":"\u8bbe\u7f6e\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf","text":"

                    \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3002

                    Note

                    \u914d\u7f6e\u9879\u5bfc\u5165\u662f\u5c06\u914d\u7f6e\u9879\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff1b\u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165\u662f\u5c06\u914d\u7f6e\u9879\u4e2d\u67d0\u4e00\u53c2\u6570\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_4","title":"\u56fe\u5f62\u5316\u754c\u9762\u64cd\u4f5c","text":"

                    \u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u53ef\u4ee5\u5728 \u73af\u5883\u53d8\u91cf \u754c\u9762\u901a\u8fc7\u9009\u62e9 \u914d\u7f6e\u9879\u5bfc\u5165 \u6216 \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165 \u4e3a\u5bb9\u5668\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u3002

                    1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u4e2d\uff0c\u5728 \u5bb9\u5668\u914d\u7f6e \u8fd9\u4e00\u6b65\u4e2d\uff0c\u9009\u62e9 \u73af\u5883\u53d8\u91cf \u914d\u7f6e\uff0c\u70b9\u51fb \u6dfb\u52a0\u73af\u5883\u53d8\u91cf \u6309\u94ae\u3002

                    2. \u5728\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u5904\u9009\u62e9 \u914d\u7f6e\u9879\u5bfc\u5165 \u6216 \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165 \u3002

                      • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u914d\u7f6e\u9879\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u524d\u7f00 \u540d\u79f0\u3001 \u914d\u7f6e\u9879 \u7684\u540d\u79f0\u3002

                      • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u914d\u7f6e\u9879 \u540d\u79f0\u3001 \u952e \u7684\u540d\u79f0\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_5","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

                    \u60a8\u53ef\u4ee5\u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\u5c06\u914d\u7f6e\u9879\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\uff0c\u4f7f\u7528 valueFrom \u53c2\u6570\u5f15\u7528 ConfigMap \u4e2d\u7684 Key/Value\u3002

                    apiVersion: v1\nkind: Pod\nmetadata:\n  name: configmap-pod-1\nspec:\n  containers:\n    - name: test-container\n      image: busybox\n      command: [ \"/bin/sh\", \"-c\", \"env\" ]\n      env:\n        - name: SPECIAL_LEVEL_KEY\n          valueFrom:                  # (1)!\n            configMapKeyRef:\n              name: kpanda-configmap  # (2)!\n              key: SPECIAL_LEVEL      # (3)!\n  restartPolicy: Never\n
                    1. \u4f7f\u7528 valueFrom \u6765\u6307\u5b9a env \u5f15\u7528\u914d\u7f6e\u9879\u7684 value \u503c
                    2. \u5f15\u7528\u7684\u914d\u7f6e\u6587\u4ef6\u540d\u79f0
                    3. \u5f15\u7528\u7684\u914d\u7f6e\u9879 key
                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_6","title":"\u8bbe\u7f6e\u5bb9\u5668\u7684\u547d\u4ee4\u884c\u53c2\u6570","text":"

                    \u60a8\u53ef\u4ee5\u4f7f\u7528\u914d\u7f6e\u9879\u8bbe\u7f6e\u5bb9\u5668\u4e2d\u7684\u547d\u4ee4\u6216\u8005\u53c2\u6570\u503c\uff0c\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u66ff\u6362\u8bed\u6cd5 $(VAR_NAME) \u6765\u8fdb\u884c\u3002\u5982\u4e0b\u6240\u793a\u3002

                    apiVersion: v1\nkind: Pod\nmetadata:\n  name: configmap-pod-3\nspec:\n  containers:\n    - name: test-container\n      image: busybox\n      command: [ \"/bin/sh\", \"-c\", \"echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)\" ]\n      env:\n        - name: SPECIAL_LEVEL_KEY\n          valueFrom:\n            configMapKeyRef:\n              name: kpanda-configmap\n              key: SPECIAL_LEVEL\n        - name: SPECIAL_TYPE_KEY\n          valueFrom:\n            configMapKeyRef:\n              name: kpanda-configmap\n              key: SPECIAL_TYPE\n  restartPolicy: Never\n

                    \u8fd9\u4e2a Pod \u8fd0\u884c\u540e\uff0c\u8f93\u51fa\u5982\u4e0b\u5185\u5bb9\u3002

                    Hello Kpanda\n
                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_7","title":"\u7528\u4f5c\u5bb9\u5668\u6570\u636e\u5377","text":"

                    \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_8","title":"\u56fe\u5f62\u5316\u64cd\u4f5c","text":"

                    \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 \u6570\u636e\u5b58\u50a8 \u754c\u9762\u9009\u62e9\u5b58\u50a8\u7c7b\u578b\u4e3a \u914d\u7f6e\u9879 \uff0c\u5c06\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377\u3002

                    1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u4e2d\uff0c\u5728 \u5bb9\u5668\u914d\u7f6e \u8fd9\u4e00\u6b65\u4e2d\uff0c\u9009\u62e9 \u6570\u636e\u5b58\u50a8 \u914d\u7f6e\uff0c\u5728 \u8282\u70b9\u8def\u5f84\u6620\u5c04 \u5217\u8868\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u3002

                    2. \u5728\u5b58\u50a8\u7c7b\u578b\u5904\u9009\u62e9 \u914d\u7f6e\u9879 \uff0c\u5e76\u4f9d\u6b21\u8f93\u5165 \u5bb9\u5668\u8def\u5f84 \u3001 \u5b50\u8def\u5f84 \u7b49\u4fe1\u606f\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-configmap.html#_9","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

                    \u8981\u5728\u4e00\u4e2a Pod \u7684\u5b58\u50a8\u5377\u4e2d\u4f7f\u7528 ConfigMap\u3002

                    \u4e0b\u9762\u662f\u4e00\u4e2a\u5c06 ConfigMap \u4ee5\u5377\u7684\u5f62\u5f0f\u8fdb\u884c\u6302\u8f7d\u7684 Pod \u793a\u4f8b\uff1a

                    apiVersion: v1\nkind: Pod\nmetadata:\n  name: mypod\nspec:\n  containers:\n  - name: mypod\n    image: redis\n    volumeMounts:\n    - name: foo\n      mountPath: \"/etc/foo\"\n      readOnly: true\n  volumes:\n  - name: foo\n    configMap:\n      name: myconfigmap\n

                    \u5982\u679c Pod \u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\uff0c\u5219\u6bcf\u4e2a\u5bb9\u5668\u90fd\u9700\u8981\u81ea\u5df1\u7684 volumeMounts \u5757\uff0c\u4f46\u9488\u5bf9\u6bcf\u4e2a ConfigMap\uff0c\u60a8\u53ea\u9700\u8981\u8bbe\u7f6e\u4e00\u4e2a spec.volumes \u5757\u3002

                    Note

                    \u5c06\u914d\u7f6e\u9879\u4f5c\u4e3a\u5bb9\u5668\u6302\u8f7d\u7684\u6570\u636e\u5377\u65f6\uff0c\u914d\u7f6e\u9879\u53ea\u80fd\u4f5c\u4e3a\u53ea\u8bfb\u6587\u4ef6\u8fdb\u884c\u8bfb\u53d6\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html","title":"\u4f7f\u7528\u5bc6\u94a5","text":"

                    \u5bc6\u94a5\u662f\u4e00\u79cd\u7528\u4e8e\u5b58\u50a8\u548c\u7ba1\u7406\u5bc6\u7801\u3001OAuth \u4ee4\u724c\u3001SSH\u3001TLS \u51ed\u636e\u7b49\u654f\u611f\u4fe1\u606f\u7684\u8d44\u6e90\u5bf9\u8c61\u3002\u4f7f\u7528\u5bc6\u94a5\u610f\u5473\u7740\u60a8\u4e0d\u9700\u8981\u5728\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u4e2d\u5305\u542b\u654f\u611f\u7684\u673a\u5bc6\u6570\u636e\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#_2","title":"\u4f7f\u7528\u573a\u666f","text":"

                    \u60a8\u53ef\u4ee5\u5728 Pod \u4e2d\u4f7f\u7528\u5bc6\u94a5\uff0c\u6709\u591a\u79cd\u4f7f\u7528\u573a\u666f\uff0c\u4e3b\u8981\u5305\u62ec\uff1a

                    • \u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u4f7f\u7528\uff0c\u63d0\u4f9b\u5bb9\u5668\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u7684\u4e00\u4e9b\u5fc5\u8981\u4fe1\u606f\u3002
                    • \u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a Pod \u7684\u6570\u636e\u5377\u3002
                    • \u5728 kubelet \u62c9\u53d6\u5bb9\u5668\u955c\u50cf\u65f6\u7528\u4f5c\u955c\u50cf\u4ed3\u5e93\u7684\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1\u4f7f\u7528\u3002
                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#_3","title":"\u4f7f\u7528\u5bc6\u94a5\u8bbe\u7f6e\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf","text":"

                    \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf\u3002

                    Note

                    \u5bc6\u94a5\u5bfc\u5165\u662f\u5c06\u5bc6\u94a5\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff1b\u5bc6\u94a5\u952e\u503c\u5bfc\u5165\u662f\u5c06\u5bc6\u94a5\u4e2d\u67d0\u4e00\u53c2\u6570\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#_4","title":"\u56fe\u5f62\u754c\u9762\u64cd\u4f5c","text":"

                    \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u5728 \u73af\u5883\u53d8\u91cf \u754c\u9762\u901a\u8fc7\u9009\u62e9 \u5bc6\u94a5\u5bfc\u5165 \u6216 \u5bc6\u94a5\u952e\u503c\u5bfc\u5165 \u4e3a\u5bb9\u5668\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u3002

                    1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u3002

                    2. \u5728 \u5bb9\u5668\u914d\u7f6e \u9009\u62e9 \u73af\u5883\u53d8\u91cf \u914d\u7f6e\uff0c\u70b9\u51fb \u6dfb\u52a0\u73af\u5883\u53d8\u91cf \u6309\u94ae\u3002

                    3. \u5728\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u5904\u9009\u62e9 \u5bc6\u94a5\u5bfc\u5165 \u6216 \u5bc6\u94a5\u952e\u503c\u5bfc\u5165 \u3002

                      • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u5bc6\u94a5\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u524d\u7f00 \u3001 \u5bc6\u94a5 \u7684\u540d\u79f0\u3002

                      • \u5f53\u73af\u5883\u53d8\u91cf\u7c7b\u578b\u9009\u62e9\u4e3a \u5bc6\u94a5\u952e\u503c\u5bfc\u5165 \u65f6\uff0c\u4f9d\u6b21\u8f93\u5165 \u53d8\u91cf\u540d \u3001 \u5bc6\u94a5 \u3001 \u952e \u7684\u540d\u79f0\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#_5","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

                    \u5982\u4e0b\u4f8b\u6240\u793a\uff0c\u60a8\u53ef\u4ee5\u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\u5c06\u5bc6\u94a5\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\uff0c\u4f7f\u7528 valueFrom \u53c2\u6570\u5f15\u7528 Secret \u4e2d\u7684 Key/Value\u3002

                    apiVersion: v1\nkind: Pod\nmetadata:\n  name: secret-env-pod\nspec:\n  containers:\n  - name: mycontainer\n    image: redis\n    env:\n      - name: SECRET_USERNAME\n        valueFrom:\n          secretKeyRef:\n            name: mysecret\n            key: username\n            optional: false # (1)!\n      - name: SECRET_PASSWORD\n        valueFrom:\n          secretKeyRef:\n            name: mysecret\n            key: password\n            optional: false # (2)!\n
                    1. \u6b64\u503c\u4e3a\u9ed8\u8ba4\u503c\uff1b\u610f\u5473\u7740 \"mysecret\"\uff0c\u5fc5\u987b\u5b58\u5728\u4e14\u5305\u542b\u540d\u4e3a \"username\" \u7684\u4e3b\u952e
                    2. \u6b64\u503c\u4e3a\u9ed8\u8ba4\u503c\uff1b\u610f\u5473\u7740 \"mysecret\"\uff0c\u5fc5\u987b\u5b58\u5728\u4e14\u5305\u542b\u540d\u4e3a \"password\" \u7684\u4e3b\u952e
                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#pod","title":"\u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a Pod \u7684\u6570\u636e\u5377","text":""},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#_6","title":"\u56fe\u5f62\u754c\u9762\u64cd\u4f5c","text":"

                    \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 \u6570\u636e\u5b58\u50a8 \u754c\u9762\u9009\u62e9\u5b58\u50a8\u7c7b\u578b\u4e3a \u5bc6\u94a5 \uff0c\u5c06\u5bc6\u94a5\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377\u3002

                    1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u3002

                    2. \u5728 \u5bb9\u5668\u914d\u7f6e \u9009\u62e9 \u6570\u636e\u5b58\u50a8 \u914d\u7f6e\uff0c\u5728 \u8282\u70b9\u8def\u5f84\u6620\u5c04 \u5217\u8868\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u3002

                    3. \u5728\u5b58\u50a8\u7c7b\u578b\u5904\u9009\u62e9 \u5bc6\u94a5 \uff0c\u5e76\u4f9d\u6b21\u8f93\u5165 \u5bb9\u5668\u8def\u5f84 \u3001 \u5b50\u8def\u5f84 \u7b49\u4fe1\u606f\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#_7","title":"\u547d\u4ee4\u884c\u64cd\u4f5c","text":"

                    \u4e0b\u9762\u662f\u4e00\u4e2a\u901a\u8fc7\u6570\u636e\u5377\u6765\u6302\u8f7d\u540d\u4e3a mysecret \u7684 Secret \u7684 Pod \u793a\u4f8b\uff1a

                    apiVersion: v1\nkind: Pod\nmetadata:\n  name: mypod\nspec:\n  containers:\n  - name: mypod\n    image: redis\n    volumeMounts:\n    - name: foo\n      mountPath: \"/etc/foo\"\n      readOnly: true\n  volumes:\n  - name: foo\n    secret:\n      secretName: mysecret\n      optional: false # (1)!\n
                    1. \u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u610f\u5473\u7740 \"mysecret\" \u5fc5\u987b\u5df2\u7ecf\u5b58\u5728

                    \u5982\u679c Pod \u4e2d\u5305\u542b\u591a\u4e2a\u5bb9\u5668\uff0c\u5219\u6bcf\u4e2a\u5bb9\u5668\u9700\u8981\u81ea\u5df1\u7684 volumeMounts \u5757\uff0c\u4e0d\u8fc7\u9488\u5bf9\u6bcf\u4e2a Secret \u800c\u8a00\uff0c\u53ea\u9700\u8981\u4e00\u4efd .spec.volumes \u8bbe\u7f6e\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#kubelet","title":"\u5728 kubelet \u62c9\u53d6\u5bb9\u5668\u955c\u50cf\u65f6\u7528\u4f5c\u955c\u50cf\u4ed3\u5e93\u7684\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1","text":"

                    \u60a8\u53ef\u4ee5\u901a\u8fc7\u56fe\u5f62\u5316\u754c\u9762\u6216\u8005\u7ec8\u7aef\u547d\u4ee4\u884c\u6765\u4f7f\u7528\u5bc6\u94a5\u4f5c\u4e3a\u955c\u50cf\u4ed3\u5e93\u8eab\u4efd\u8ba4\u8bc1\u51ed\u8bc1\u3002

                    "},{"location":"end-user/kpanda/configmaps-secrets/use-secret.html#_8","title":"\u56fe\u5f62\u5316\u64cd\u4f5c","text":"

                    \u5728\u901a\u8fc7\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 \u6570\u636e\u5b58\u50a8 \u754c\u9762\u9009\u62e9\u5b58\u50a8\u7c7b\u578b\u4e3a \u5bc6\u94a5 \uff0c\u5c06\u5bc6\u94a5\u4f5c\u4e3a\u5bb9\u5668\u7684\u6570\u636e\u5377\u3002

                    1. \u8fdb\u5165\u955c\u50cf\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u3002

                    2. \u5728\u7b2c\u4e8c\u6b65 \u5bb9\u5668\u914d\u7f6e \u65f6\u9009\u62e9 \u57fa\u672c\u4fe1\u606f \u914d\u7f6e\uff0c\u70b9\u51fb \u9009\u62e9\u955c\u50cf \u6309\u94ae\u3002

                    3. \u5728\u5f39\u6846\u7684 \u955c\u50cf\u4ed3\u5e93 \u4e0b\u62c9\u9009\u62e9\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\u540d\u79f0\u3002\u5173\u4e8e\u79c1\u6709\u955c\u50cf\u5bc6\u94a5\u521b\u5efa\u8bf7\u67e5\u770b\u521b\u5efa\u5bc6\u94a5\u4e86\u89e3\u8be6\u60c5\u3002

                    4. \u8f93\u5165\u79c1\u6709\u4ed3\u5e93\u5185\u7684\u955c\u50cf\u540d\u79f0\uff0c\u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u955c\u50cf\u9009\u62e9\u3002

                    Note

                    \u521b\u5efa\u5bc6\u94a5\u65f6\uff0c\u9700\u8981\u786e\u4fdd\u8f93\u5165\u6b63\u786e\u7684\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u3001\u7528\u6237\u540d\u79f0\u3001\u5bc6\u7801\u5e76\u9009\u62e9\u6b63\u786e\u7684\u955c\u50cf\u540d\u79f0\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u83b7\u53d6\u955c\u50cf\u4ed3\u5e93\u4e2d\u7684\u955c\u50cf\u3002

                    "},{"location":"end-user/kpanda/custom-resources/create.html","title":"\u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90 (CRD)","text":"

                    \u5728 Kubernetes \u4e2d\u4e00\u5207\u5bf9\u8c61\u90fd\u88ab\u62bd\u8c61\u4e3a\u8d44\u6e90\uff0c\u5982 Pod\u3001Deployment\u3001Service\u3001Volume \u7b49\u662f Kubernetes \u63d0\u4f9b\u7684\u9ed8\u8ba4\u8d44\u6e90\uff0c \u8fd9\u4e3a\u6211\u4eec\u7684\u65e5\u5e38\u8fd0\u7ef4\u548c\u7ba1\u7406\u5de5\u4f5c\u63d0\u4f9b\u4e86\u91cd\u8981\u652f\u6491\uff0c\u4f46\u662f\u5728\u4e00\u4e9b\u7279\u6b8a\u7684\u573a\u666f\u4e2d\uff0c\u73b0\u6709\u7684\u9884\u7f6e\u8d44\u6e90\u5e76\u4e0d\u80fd\u6ee1\u8db3\u4e1a\u52a1\u7684\u9700\u8981\uff0c \u56e0\u6b64\u6211\u4eec\u5e0c\u671b\u53bb\u6269\u5c55 Kubernetes API \u7684\u80fd\u529b\uff0c\u81ea\u5b9a\u4e49\u8d44\u6e90\uff08CustomResourceDefinition, CRD\uff09\u6b63\u662f\u57fa\u4e8e\u8fd9\u6837\u7684\u9700\u6c42\u5e94\u8fd0\u800c\u751f\u3002

                    \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u5bf9\u81ea\u5b9a\u4e49\u8d44\u6e90\u7684\u754c\u9762\u5316\u7ba1\u7406\uff0c\u4e3b\u8981\u529f\u80fd\u5982\u4e0b\uff1a

                    • \u83b7\u53d6\u96c6\u7fa4\u4e0b\u81ea\u5b9a\u4e49\u8d44\u6e90\u5217\u8868\u548c\u8be6\u7ec6\u4fe1\u606f
                    • \u57fa\u4e8e YAML \u521b\u5efa\u81ea\u5b9a\u8d44\u6e90
                    • \u57fa\u4e8e YAML \u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90\u793a\u4f8b CR\uff08Custom Resource\uff09
                    • \u5220\u9664\u81ea\u5b9a\u4e49\u8d44\u6e90
                    "},{"location":"end-user/kpanda/custom-resources/create.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

                    • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a Cluster Admin \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u6388\u6743

                    "},{"location":"end-user/kpanda/custom-resources/create.html#yaml","title":"\u901a\u8fc7 YAML \u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90","text":"
                    1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                    2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

                    3. \u5728 YAML \u521b\u5efa \u9875\u9762\u4e2d\uff0c\u586b\u5199 YAML \u8bed\u53e5\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                    4. \u8fd4\u56de\u81ea\u5b9a\u4e49\u8d44\u6e90\u5217\u8868\u9875\uff0c\u5373\u53ef\u67e5\u770b\u521a\u521a\u521b\u5efa\u7684\u540d\u4e3a crontabs.stable.example.com \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\u3002

                    \u81ea\u5b9a\u4e49\u8d44\u6e90\u793a\u4f8b\uff1a

                    CRD example
                    apiVersion: apiextensions.k8s.io/v1\nkind: CustomResourceDefinition\nmetadata:\n  name: crontabs.stable.example.com\nspec:\n  group: stable.example.com\n  versions:\n    - name: v1\n      served: true\n      storage: true\n      schema:\n        openAPIV3Schema:\n          type: object\n          properties:\n            spec:\n              type: object\n              properties:\n                cronSpec:\n                  type: string\n                image:\n                  type: string\n                replicas:\n                  type: integer\n  scope: Namespaced\n  names:\n    plural: crontabs\n    singular: crontab\n    kind: CronTab\n    shortNames:\n    - ct\n
                    "},{"location":"end-user/kpanda/custom-resources/create.html#yaml_1","title":"\u901a\u8fc7 YAML \u521b\u5efa\u81ea\u5b9a\u4e49\u8d44\u6e90\u793a\u4f8b","text":"
                    1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                    2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u81ea\u5b9a\u4e49\u8d44\u6e90 \uff0c\u8fdb\u5165\u81ea\u5b9a\u4e49\u8d44\u6e90\u5217\u8868\u9875\u9762\u3002

                    3. \u70b9\u51fb\u540d\u4e3a crontabs.stable.example.com \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\uff0c\u8fdb\u5165\u8be6\u60c5\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 YAML \u521b\u5efa \u6309\u94ae\u3002

                    4. \u5728 YAML \u521b\u5efa \u9875\u9762\u4e2d\uff0c\u586b\u5199 YAML \u8bed\u53e5\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                    5. \u8fd4\u56de crontabs.stable.example.com \u7684\u8be6\u60c5\u9875\u9762\uff0c\u5373\u53ef\u67e5\u770b\u521a\u521a\u521b\u5efa\u7684\u540d\u4e3a my-new-cron-object \u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\u3002

                    CR \u793a\u4f8b\uff1a

                    CR example
                    apiVersion: \"stable.example.com/v1\"\nkind: CronTab\nmetadata:\n  name: my-new-cron-object\nspec:\n  cronSpec: \"* * * * */5\"\n  image: my-awesome-cron-image\n
                    "},{"location":"end-user/kpanda/gpu/index.html","title":"GPU \u7ba1\u7406\u6982\u8ff0","text":"

                    \u672c\u6587\u4ecb\u7ecd \u7b97\u4e30 AI \u7b97\u529b\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u5bf9 GPU\u4e3a\u4ee3\u8868\u7684\u5f02\u6784\u8d44\u6e90\u7edf\u4e00\u8fd0\u7ef4\u7ba1\u7406\u80fd\u529b\u3002

                    "},{"location":"end-user/kpanda/gpu/index.html#_1","title":"\u80cc\u666f","text":"

                    \u968f\u7740 AI \u5e94\u7528\u3001\u5927\u6a21\u578b\u3001\u4eba\u5de5\u667a\u80fd\u3001\u81ea\u52a8\u9a7e\u9a76\u7b49\u65b0\u5174\u6280\u672f\u7684\u5feb\u901f\u53d1\u5c55\uff0c\u4f01\u4e1a\u9762\u4e34\u7740\u8d8a\u6765\u8d8a\u591a\u7684\u8ba1\u7b97\u5bc6\u96c6\u578b\u4efb\u52a1\u548c\u6570\u636e\u5904\u7406\u9700\u6c42\u3002 \u4ee5 CPU \u4e3a\u4ee3\u8868\u7684\u4f20\u7edf\u8ba1\u7b97\u67b6\u6784\u5df2\u65e0\u6cd5\u6ee1\u8db3\u4f01\u4e1a\u65e5\u76ca\u589e\u957f\u7684\u8ba1\u7b97\u9700\u6c42\u3002\u6b64\u65f6\uff0c\u4ee5 GPU \u4e3a\u4ee3\u8868\u7684\u5f02\u6784\u8ba1\u7b97\u56e0\u5728\u5904\u7406\u5927\u89c4\u6a21\u6570\u636e\u3001\u8fdb\u884c\u590d\u6742\u8ba1\u7b97\u548c\u5b9e\u65f6\u56fe\u5f62\u6e32\u67d3\u65b9\u9762\u5177\u6709\u72ec\u7279\u7684\u4f18\u52bf\u88ab\u5e7f\u6cdb\u5e94\u7528\u3002

                    \u4e0e\u6b64\u540c\u65f6\uff0c\u7531\u4e8e\u7f3a\u4e4f\u5f02\u6784\u8d44\u6e90\u8c03\u5ea6\u7ba1\u7406\u7b49\u65b9\u9762\u7684\u7ecf\u9a8c\u548c\u4e13\u4e1a\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5bfc\u81f4\u4e86 GPU \u8bbe\u5907\u7684\u8d44\u6e90\u5229\u7528\u7387\u6781\u4f4e\uff0c\u7ed9\u4f01\u4e1a\u5e26\u6765\u4e86\u9ad8\u6602\u7684 AI \u751f\u4ea7\u6210\u672c\u3002 \u5982\u4f55\u964d\u672c\u589e\u6548\uff0c\u63d0\u9ad8 GPU \u7b49\u5f02\u6784\u8d44\u6e90\u7684\u5229\u7528\u6548\u7387\uff0c\u6210\u4e3a\u4e86\u5f53\u524d\u4f17\u591a\u4f01\u4e1a\u4e9f\u9700\u8de8\u8d8a\u7684\u4e00\u9053\u96be\u9898\u3002

                    "},{"location":"end-user/kpanda/gpu/index.html#gpu_1","title":"GPU \u80fd\u529b\u4ecb\u7ecd","text":"

                    \u7b97\u4e30 AI \u7b97\u529b\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u652f\u6301\u5bf9 GPU\u3001NPU \u7b49\u5f02\u6784\u8d44\u6e90\u8fdb\u884c\u7edf\u4e00\u8c03\u5ea6\u548c\u8fd0\u7ef4\u7ba1\u7406\uff0c\u5145\u5206\u91ca\u653e GPU \u8d44\u6e90\u7b97\u529b\uff0c\u52a0\u901f\u4f01\u4e1a AI \u7b49\u65b0\u5174\u5e94\u7528\u53d1\u5c55\u3002GPU \u7ba1\u7406\u80fd\u529b\u5982\u4e0b\uff1a

                    • \u652f\u6301\u7edf\u4e00\u7eb3\u7ba1 NVIDIA\u3001\u534e\u4e3a\u6607\u817e\u3001\u5929\u6570\u7b49\u56fd\u5185\u5916\u5382\u5546\u7684\u5f02\u6784\u8ba1\u7b97\u8d44\u6e90\u3002
                    • \u652f\u6301\u540c\u4e00\u96c6\u7fa4\u591a\u5361\u5f02\u6784\u8c03\u5ea6\uff0c\u5e76\u652f\u6301\u96c6\u7fa4 GPU \u5361\u81ea\u52a8\u8bc6\u522b\u3002
                    • \u652f\u6301 NVIDIA GPU\u3001vGPU\u3001MIG \u7b49 GPU \u539f\u751f\u7ba1\u7406\u65b9\u6848\uff0c\u5e76\u63d0\u4f9b\u4e91\u539f\u751f\u80fd\u529b\u3002
                    • \u652f\u6301\u5355\u5757\u7269\u7406\u5361\u5207\u5206\u7ed9\u4e0d\u540c\u7684\u79df\u6237\u4f7f\u7528\uff0c\u5e76\u652f\u6301\u5bf9\u79df\u6237\u548c\u5bb9\u5668\u4f7f\u7528 GPU \u8d44\u6e90\u6309\u7167\u7b97\u529b\u3001\u663e\u5b58\u8fdb\u884c GPU \u8d44\u6e90\u914d\u989d\u3002
                    • \u652f\u6301\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5e94\u7528\u7b49\u591a\u7ef4\u5ea6 GPU \u8d44\u6e90\u76d1\u63a7\uff0c\u5e2e\u52a9\u8fd0\u7ef4\u4eba\u5458\u7ba1\u7406 GPU \u8d44\u6e90\u3002
                    • \u517c\u5bb9 TensorFlow\u3001pytorch \u7b49\u591a\u79cd\u8bad\u7ec3\u6846\u67b6\u3002
                    "},{"location":"end-user/kpanda/gpu/index.html#gpu-operator","title":"GPU Operator \u4ecb\u7ecd","text":"

                    \u540c\u666e\u901a\u8ba1\u7b97\u673a\u786c\u4ef6\u4e00\u6837\uff0cNVIDIA GPU \u5361\u4f5c\u4e3a\u7269\u7406\u786c\u4ef6\uff0c\u5fc5\u987b\u5b89\u88c5 NVIDIA GPU \u9a71\u52a8\u540e\u624d\u80fd\u4f7f\u7528\u3002 \u4e3a\u4e86\u964d\u4f4e\u7528\u6237\u5728 kuberneets \u4e0a\u4f7f\u7528 GPU \u7684\u6210\u672c\uff0cNVIDIA \u5b98\u65b9\u63d0\u4f9b\u4e86 NVIDIA GPU Operator \u7ec4\u4ef6\u6765\u7ba1\u7406\u4f7f\u7528 NVIDIA GPU \u6240\u4f9d\u8d56\u7684\u5404\u79cd\u7ec4\u4ef6\u3002 \u8fd9\u4e9b\u7ec4\u4ef6\u5305\u62ec NVIDIA \u9a71\u52a8\u7a0b\u5e8f\uff08\u7528\u4e8e\u542f\u7528 CUDA\uff09\u3001NVIDIA \u5bb9\u5668\u8fd0\u884c\u65f6\u3001GPU \u8282\u70b9\u6807\u8bb0\u3001\u57fa\u4e8e DCGM \u7684\u76d1\u63a7\u7b49\u3002 \u7406\u8bba\u4e0a\u6765\u8bf4\u7528\u6237\u53ea\u9700\u8981\u5c06 GPU \u5361\u63d2\u5728\u5df2\u7ecf\u88ab kubernetes \u6240\u7eb3\u7ba1\u7684\u8ba1\u7b97\u8bbe\u5907\u4e0a\uff0c\u7136\u540e\u901a\u8fc7 GPU Operator \u5c31\u80fd\u4f7f\u7528 NVIDIA GPU \u7684\u6240\u6709\u80fd\u529b\u4e86\u3002 \u4e86\u89e3\u66f4\u591a NVIDIA GPU Operator \u76f8\u5173\u4fe1\u606f\uff0c\u8bf7\u53c2\u8003 NVIDIA \u5b98\u65b9\u6587\u6863\u3002 \u5982\u4f55\u90e8\u7f72\u8bf7\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5

                    NVIDIA GPU Operator \u67b6\u6784\u56fe\uff1a

                    "},{"location":"end-user/kpanda/gpu/FAQ.html","title":"GPU \u76f8\u5173 FAQ","text":""},{"location":"end-user/kpanda/gpu/FAQ.html#pod-nvidia-smi-gpu","title":"Pod \u5185 nvidia-smi \u770b\u4e0d\u5230 GPU \u8fdb\u7a0b","text":"

                    Q: \u5728\u4f7f\u7528 GPU \u7684 Pod \u5185\u6267\u884c nvidia-smi \u547d\u4ee4\u770b\u4e0d\u5230\u4f7f\u7528 GPU \u7684\u8fdb\u7a0b\u4fe1\u606f\uff0c\u5305\u62ec\u6574\u5361\u6a21\u5f0f\u3001vGPU \u6a21\u5f0f\u7b49\u3002

                    A: \u56e0\u4e3a\u6709 PID namespace \u9694\u79bb\uff0c\u5bfc\u81f4\u5728 Pod \u5185\u67e5\u770b\u4e0d\u5230 GPU \u8fdb\u7a0b\uff0c\u5982\u679c\u8981\u67e5\u770b GPU \u8fdb\u7a0b\u6709\u5982\u4e0b\u51e0\u79cd\u65b9\u6cd5\uff1a

                    • \u5728\u4f7f\u7528 GPU \u7684\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e hostPID: true\uff0c\u4f7f\u5176\u53ef\u4ee5\u67e5\u770b\u5230\u5bbf\u4e3b\u673a\u4e0a\u7684 PID
                    • \u5728 gpu-operator \u7684 driver Pod \u4e2d\u6267\u884c nvidia-smi \u547d\u4ee4\u67e5\u770b\u8fdb\u7a0b
                    • \u5728\u5bbf\u4e3b\u673a\u4e0a\u6267\u884c chroot /run/nvidia/driver nvidia-smi \u547d\u4ee4\u67e5\u770b\u8fdb\u7a0b
                    "},{"location":"end-user/kpanda/gpu/Iluvatar_usage.html","title":"App \u4f7f\u7528\u5929\u6570\u667a\u82af\uff08Iluvatar\uff09GPU","text":"

                    \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528\u5929\u6570\u667a\u82af\u865a\u62df GPU\u3002

                    "},{"location":"end-user/kpanda/gpu/Iluvatar_usage.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
                    • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
                    • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5\u5929\u6570\u667a\u82af GPU \u9a71\u52a8\uff0c\u9a71\u52a8\u5b89\u88c5\u8bf7\u53c2\u8003\u5929\u6570\u667a\u82af\u5b98\u65b9\u6587\u6863\u3002
                    • \u5f53\u524d\u96c6\u7fa4\u5185 GPU \u5361\u672a\u8fdb\u884c\u4efb\u4f55\u865a\u62df\u5316\u64cd\u4f5c\u4e14\u672a\u88ab\u5176\u5b83 App \u5360\u7528\u3002
                    "},{"location":"end-user/kpanda/gpu/Iluvatar_usage.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"end-user/kpanda/gpu/Iluvatar_usage.html#_3","title":"\u4f7f\u7528\u754c\u9762\u914d\u7f6e","text":"
                    1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Iluvatar \u3002

                    2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Iluvatar\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e App \u4f7f\u7528\u7684 GPU \u8d44\u6e90\uff1a

                      • \u7269\u7406\u5361\u6570\u91cf\uff08iluvatar.ai/vcuda-core\uff09\uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002
                      • \u663e\u5b58\u4f7f\u7528\u6570\u91cf\uff08iluvatar.ai/vcuda-memory\uff09\uff1a\u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u663e\u5b58\uff0c\u503c\u5355\u4f4d\u4e3a MB\uff0c\u6700\u5c0f\u503c\u4e3a 1\uff0c\u6700\u5927\u503c\u4e3a\u6574\u5361\u7684\u663e\u5b58\u503c\u3002

                      \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

                    "},{"location":"end-user/kpanda/gpu/Iluvatar_usage.html#yaml","title":"\u4f7f\u7528 YAML \u914d\u7f6e","text":"

                    \u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u7533\u8bf7 GPU \u8d44\u6e90\uff0c\u5728\u8d44\u6e90\u7533\u8bf7\u548c\u9650\u5236\u914d\u7f6e\u4e2d\u589e\u52a0iluvatar.ai/vcuda-core: 1\u3001iluvatar.ai/vcuda-memory: 200 \u53c2\u6570\uff0c\u914d\u7f6e App \u4f7f\u7528\u7269\u7406\u5361\u7684\u8d44\u6e90\u3002

                    apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: full-iluvatar-gpu-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: full-iluvatar-gpu-demo\n  template:\n    metadata:\n      labels:\n        app: full-iluvatar-gpu-demo\n    spec:\n      containers:\n      - image: nginx:perl\n        name: container-0\n        resources:\n          limits:\n            cpu: 250m\n            iluvatar.ai/vcuda-core: '1'\n            iluvatar.ai/vcuda-memory: '200'\n            memory: 512Mi\n          requests:\n            cpu: 250m\n            memory: 512Mi\n      imagePullSecrets:\n      - name: default-secret\n
                    "},{"location":"end-user/kpanda/gpu/dynamic-regulation.html","title":"GPU \u8d44\u6e90\u52a8\u6001\u8c03\u8282","text":"

                    \u63d0\u4f9b GPU \u8d44\u6e90\u52a8\u6001\u8c03\u6574\u529f\u80fd\uff0c\u5141\u8bb8\u60a8\u5728\u65e0\u9700\u91cd\u65b0\u52a0\u8f7d\u3001\u91cd\u7f6e\u6216\u91cd\u542f\u6574\u4e2a\u8fd0\u884c\u73af\u5883\u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u5df2\u7ecf\u5206\u914d\u7684 vGPU \u8d44\u6e90\u8fdb\u884c\u5b9e\u65f6\u3001\u52a8\u6001\u7684\u8c03\u6574\u3002 \u8fd9\u4e00\u529f\u80fd\u65e8\u5728\u6700\u5927\u7a0b\u5ea6\u5730\u51cf\u5c11\u5bf9\u4e1a\u52a1\u8fd0\u884c\u7684\u5f71\u54cd\uff0c\u786e\u4fdd\u60a8\u7684\u4e1a\u52a1\u80fd\u591f\u6301\u7eed\u7a33\u5b9a\u5730\u8fd0\u884c\uff0c\u540c\u65f6\u6839\u636e\u5b9e\u9645\u9700\u6c42\u7075\u6d3b\u8c03\u6574 GPU \u8d44\u6e90\u3002

                    "},{"location":"end-user/kpanda/gpu/dynamic-regulation.html#_1","title":"\u4f7f\u7528\u573a\u666f","text":"
                    • \u5f39\u6027\u8d44\u6e90\u5206\u914d \uff1a\u5f53\u4e1a\u52a1\u9700\u6c42\u6216\u5de5\u4f5c\u8d1f\u8f7d\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u53ef\u4ee5\u5feb\u901f\u8c03\u6574 GPU \u8d44\u6e90\u4ee5\u6ee1\u8db3\u65b0\u7684\u6027\u80fd\u8981\u6c42\u3002
                    • \u5373\u65f6\u54cd\u5e94 \uff1a\u5728\u9762\u5bf9\u7a81\u53d1\u7684\u9ad8\u8d1f\u8f7d\u6216\u4e1a\u52a1\u9700\u6c42\u65f6\uff0c\u53ef\u4ee5\u8fc5\u901f\u589e\u52a0 GPU \u8d44\u6e90\u800c\u65e0\u9700\u4e2d\u65ad\u4e1a\u52a1\u8fd0\u884c\uff0c\u4ee5\u786e\u4fdd\u670d\u52a1\u7684\u7a33\u5b9a\u6027\u548c\u6027\u80fd\u3002
                    "},{"location":"end-user/kpanda/gpu/dynamic-regulation.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                    \u4ee5\u4e0b\u662f\u4e00\u4e2a\u5177\u4f53\u7684\u64cd\u4f5c\u793a\u4f8b\uff0c\u5c55\u793a\u5982\u4f55\u5728\u4e0d\u91cd\u542f vGPU Pod \u7684\u60c5\u51b5\u4e0b\u52a8\u6001\u8c03\u6574 vGPU \u7684\u7b97\u529b\u548c\u663e\u5b58\u8d44\u6e90\uff1a

                    "},{"location":"end-user/kpanda/gpu/dynamic-regulation.html#vgpu-pod","title":"\u521b\u5efa\u4e00\u4e2a vGPU Pod","text":"

                    \u9996\u5148\uff0c\u6211\u4eec\u4f7f\u7528\u4ee5\u4e0b YAML \u521b\u5efa\u4e00\u4e2a vGPU Pod\uff0c\u5176\u7b97\u529b\u521d\u59cb\u4e0d\u9650\u5236\uff0c\u663e\u5b58\u9650\u5236\u4e3a 200Mb\u3002

                    kind: Deployment\napiVersion: apps/v1\nmetadata:\n  name: gpu-burn-test\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: gpu-burn-test\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: gpu-burn-test\n    spec:\n      containers:\n        - name: container-1\n          image: docker.io/chrstnhntschl/gpu_burn:latest\n          command:\n            - sleep\n            - '100000'\n          resources:\n            limits:\n              cpu: 1m\n              memory: 1Gi\n              nvidia.com/gpucores: '0'\n              nvidia.com/gpumem: '200'\n              nvidia.com/vgpu: '1'\n

                    \u8c03\u6574\u524d\u67e5\u770b Pod \u4e2d\u7684\u8d44\u6e90 GPU \u5206\u914d\u8d44\u6e90\uff1a

                    "},{"location":"end-user/kpanda/gpu/dynamic-regulation.html#_3","title":"\u52a8\u6001\u8c03\u6574\u7b97\u529b","text":"

                    \u5982\u679c\u9700\u8981\u4fee\u6539\u7b97\u529b\u4e3a 10%\uff0c\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

                    1. \u8fdb\u5165\u5bb9\u5668\uff1a

                      kubectl exec -it <pod-name> -- /bin/bash\n
                    2. \u6267\u884c\uff1a

                      export CUDA_DEVICE_SM_LIMIT=10\n
                    3. \u5728\u5f53\u524d\u7ec8\u7aef\u76f4\u63a5\u8fd0\u884c\uff1a

                      ./gpu_burn 60\n

                      \u7a0b\u5e8f\u5373\u53ef\u751f\u6548\u3002\u6ce8\u610f\uff0c\u4e0d\u80fd\u9000\u51fa\u5f53\u524d Bash \u7ec8\u7aef\u3002

                    "},{"location":"end-user/kpanda/gpu/dynamic-regulation.html#_4","title":"\u52a8\u6001\u8c03\u6574\u663e\u5b58","text":"

                    \u5982\u679c\u9700\u8981\u4fee\u6539\u663e\u5b58\u4e3a 300 MB\uff0c\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a

                    1. \u8fdb\u5165\u5bb9\u5668\uff1a

                      kubectl exec -it <pod-name> -- /bin/bash\n
                    2. \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u8bbe\u7f6e\u663e\u5b58\u9650\u5236\uff1a

                      export CUDA_DEVICE_MEMORY_LIMIT_0=300m\nexport CUDA_DEVICE_MEMORY_SHARED_CACHE=/usr/local/vgpu/d.cache\n

                      Note

                      \u6bcf\u6b21\u4fee\u6539\u663e\u5b58\u5927\u5c0f\u65f6\uff0cd.cache \u8fd9\u4e2a\u6587\u4ef6\u540d\u5b57\u90fd\u9700\u8981\u4fee\u6539\uff0c\u6bd4\u5982\u6539\u4e3a a.cache\u30011.cache \u7b49\uff0c\u4ee5\u907f\u514d\u7f13\u5b58\u51b2\u7a81\u3002

                    3. \u5728\u5f53\u524d\u7ec8\u7aef\u76f4\u63a5\u8fd0\u884c\uff1a

                      ./gpu_burn 60\n

                      \u7a0b\u5e8f\u5373\u53ef\u751f\u6548\u3002\u540c\u6837\u5730\uff0c\u4e0d\u80fd\u9000\u51fa\u5f53\u524d Bash \u7ec8\u7aef\u3002

                    \u8c03\u6574\u540e\u67e5\u770b Pod \u4e2d\u7684\u8d44\u6e90 GPU \u5206\u914d\u8d44\u6e90\uff1a

                    \u901a\u8fc7\u4e0a\u8ff0\u6b65\u9aa4\uff0c\u60a8\u53ef\u4ee5\u5728\u4e0d\u91cd\u542f vGPU Pod \u7684\u60c5\u51b5\u4e0b\u52a8\u6001\u5730\u8c03\u6574\u5176\u7b97\u529b\u548c\u663e\u5b58\u8d44\u6e90\uff0c\u4ece\u800c\u66f4\u7075\u6d3b\u5730\u6ee1\u8db3\u4e1a\u52a1\u9700\u6c42\u5e76\u4f18\u5316\u8d44\u6e90\u5229\u7528\u3002

                    "},{"location":"end-user/kpanda/gpu/gpu_matrix.html","title":"GPU \u652f\u6301\u77e9\u9635","text":"

                    \u672c\u9875\u8bf4\u660e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u7684 GPU \u53ca\u64cd\u4f5c\u7cfb\u7edf\u6240\u5bf9\u5e94\u7684\u77e9\u9635\u3002

                    "},{"location":"end-user/kpanda/gpu/gpu_matrix.html#nvidia-gpu","title":"NVIDIA GPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301 GPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 NVIDIA GPU\uff08\u6574\u5361/vGPU\uff09 NVIDIA Fermi (2.1) \u67b6\u6784 CentOS 7 Kernel 3.10.0-123 ~ 3.10.0-1160\u5185\u6838\u53c2\u8003\u6587\u6863\u5efa\u8bae\u4f7f\u7528\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u5e94 Kernel \u7248\u672c \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a 3.10.0-1160 GPU Operator \u79bb\u7ebf\u5b89\u88c5 NVIDIA GeForce 400 \u7cfb\u5217 CentOS 8 Kernel 4.18.0-80 ~ 4.18.0-348 NVIDIA Quadro 4000 \u7cfb\u5217 Ubuntu 20.04 Kernel 5.4 NVIDIA Tesla 20 \u7cfb\u5217 Ubuntu 22.04 Kernel 5.19 NVIDIA Ampere \u67b6\u6784\u7cfb\u5217(A100;A800;H100) RHEL 7 Kernel 3.10.0-123 ~ 3.10.0-1160 RHEL 8 Kernel 4.18.0-80 ~ 4.18.0-348 NVIDIA MIG NVIDIA Ampere \u67b6\u6784\u7cfb\u5217\uff08A100\u3001A800\u3001H100\uff09 CentOS 7 Kernel 3.10.0-123 ~ 3.10.0-1160 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a3.10.0-1160 GPU Operator \u79bb\u7ebf\u5b89\u88c5 CentOS 8 Kernel 4.18.0-80 ~ 4.18.0-348 Ubuntu 20.04 Kernel 5.4 Ubuntu 22.04 Kernel 5.19 RHEL 7 Kernel 3.10.0-123 ~ 3.10.0-1160 RHEL 8 Kernel 4.18.0-80 ~ 4.18.0-348"},{"location":"end-user/kpanda/gpu/gpu_matrix.html#ascendnpu","title":"\u6607\u817e\uff08Ascend\uff09NPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301 NPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 \u6607\u817e\uff08Ascend 310\uff09 Ascend 310 Ubuntu 20.04 \u8be6\u60c5\u53c2\u8003\uff1a\u5185\u6838\u7248\u672c\u8981\u6c42 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a3.10.0-1160 300 \u548c 310P \u9a71\u52a8\u6587\u6863 Ascend 310P\uff1b CentOS 7.6 CentOS 8.2 KylinV10SP1 \u64cd\u4f5c\u7cfb\u7edf openEuler \u64cd\u4f5c\u7cfb\u7edf \u6607\u817e\uff08Ascend 910\uff09 Ascend 910B Ubuntu 20.04 \u8be6\u60c5\u53c2\u8003\u5185\u6838\u7248\u672c\u8981\u6c42 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a3.10.0-1160 910 \u9a71\u52a8\u6587\u6863 CentOS 7.6 CentOS 8.2 KylinV10SP1 \u64cd\u4f5c\u7cfb\u7edf openEuler \u64cd\u4f5c\u7cfb\u7edf"},{"location":"end-user/kpanda/gpu/gpu_matrix.html#iluvatargpu","title":"\u5929\u6570\u667a\u82af\uff08Iluvatar\uff09GPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301\u7684 GPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 \u5929\u6570\u667a\u82af(Iluvatar vGPU) BI100 CentOS 7 Kernel 3.10.0-957.el7.x86_64 ~ 3.10.0-1160.42.2.el7.x86_64 \u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS 7.9\uff1b\u5185\u6838\u7248\u672c\uff1a 3.10.0-1160 \u8865\u5145\u4e2d MR100\uff1b CentOS 8 Kernel 4.18.0-80.el8.x86_64 ~ 4.18.0-305.19.1.el8_4.x86_64 Ubuntu 20.04 Kernel 4.15.0-20-generic ~ 4.15.0-160-generic Kernel 5.4.0-26-generic ~ 5.4.0-89-generic Kernel 5.8.0-23-generic ~ 5.8.0-63-generic Ubuntu 21.04 Kernel 4.15.0-20-generic ~ 4.15.0-160-generic Kernel 5.4.0-26-generic ~ 5.4.0-89-generic Kernel 5.8.0-23-generic ~ 5.8.0-63-generic openEuler 22.03 LTS Kernel \u7248\u672c\u5927\u4e8e\u7b49\u4e8e 5.1 \u4e14\u5c0f\u4e8e\u7b49\u4e8e 5.10"},{"location":"end-user/kpanda/gpu/gpu_matrix.html#metaxgpu","title":"\u6c90\u66e6\uff08Metax\uff09GPU","text":"GPU \u5382\u5546\u53ca\u7c7b\u578b \u652f\u6301\u7684 GPU \u578b\u53f7 \u9002\u914d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff08\u5728\u7ebf\uff09 \u63a8\u8350\u5185\u6838 \u63a8\u8350\u7684\u64cd\u4f5c\u7cfb\u7edf\u53ca\u5185\u6838 \u5b89\u88c5\u6587\u6863 \u6c90\u66e6Metax\uff08\u6574\u5361/vGPU\uff09 \u66e6\u4e91 C500 \u6c90\u66e6 GPU \u5b89\u88c5\u4f7f\u7528"},{"location":"end-user/kpanda/gpu/gpu_scheduler_config.html","title":"GPU \u8c03\u5ea6\u914d\u7f6e\uff08Binpack \u548c Spread \uff09","text":"

                    \u672c\u6587\u4ecb\u7ecd\u4f7f\u7528 NVIDIA vGPU \u65f6\uff0c\u5982\u4f55\u901a\u8fc7 Binpack \u548c Spread \u7684 GPU \u8c03\u5ea6\u914d\u7f6e\u51cf\u5c11 GPU \u8d44\u6e90\u788e\u7247\u3001\u9632\u6b62\u5355\u70b9\u6545\u969c\u7b49\uff0c\u5b9e\u73b0 vGPU \u7684\u9ad8\u7ea7\u8c03\u5ea6\u3002 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u4e86\u96c6\u7fa4\u548c\u5de5\u4f5c\u8d1f\u8f7d\u4e24\u79cd\u7ef4\u5ea6\u7684 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\uff0c\u5206\u522b\u6ee1\u8db3\u4e0d\u540c\u573a\u666f\u4e0b\u7684\u4f7f\u7528\u9700\u6c42\u3002

                    "},{"location":"end-user/kpanda/gpu/gpu_scheduler_config.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
                    • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5df2\u6b63\u786e\u5b89\u88c5 GPU \u8bbe\u5907\u3002
                    • \u96c6\u7fa4\u4e2d\u5df2\u6b63\u786e\u5b89\u88c5 gpu-operator \u7ec4\u4ef6 \u548c Nvidia-vgpu \u7ec4\u4ef6\u3002
                    • \u96c6\u7fa4\u8282\u70b9\u5217\u8868\u4e2d\uff0cGPU \u6a21\u5f0f\u4e0b\u5b58\u5728 NVIDIA-vGPU \u7c7b\u578b\u3002
                    "},{"location":"end-user/kpanda/gpu/gpu_scheduler_config.html#_2","title":"\u4f7f\u7528\u573a\u666f","text":"
                    • \u57fa\u4e8e GPU \u5361\u7ef4\u5ea6\u8c03\u5ea6\u7b56\u7565

                      • Binpack\uff1a\u4f18\u5148\u9009\u62e9\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\uff0c\u9002\u7528\u4e8e\u63d0\u9ad8 GPU \u5229\u7528\u7387\uff0c\u51cf\u5c11\u8d44\u6e90\u788e\u7247\u3002
                      • Spread\uff1a\u591a\u4e2a Pod \u4f1a\u5206\u6563\u5728\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u9ad8\u53ef\u7528\u573a\u666f\uff0c\u907f\u514d\u5355\u5361\u6545\u969c\u3002
                    • \u57fa\u4e8e\u8282\u70b9\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565

                      • Binpack\uff1a \u591a\u4e2a Pod \u4f1a\u4f18\u5148\u9009\u62e9\u540c\u4e00\u4e2a\u8282\u70b9\uff0c\u9002\u7528\u4e8e\u63d0\u9ad8 GPU \u5229\u7528\u7387\uff0c\u51cf\u5c11\u8d44\u6e90\u788e\u7247\u3002
                      • Spread\uff1a\u591a\u4e2a Pod \u4f1a\u5206\u6563\u5728\u4e0d\u540c\u8282\u70b9\u4e0a\uff0c\u9002\u7528\u4e8e\u9ad8\u53ef\u7528\u573a\u666f\uff0c\u907f\u514d\u5355\u8282\u70b9\u6545\u969c\u3002
                    "},{"location":"end-user/kpanda/gpu/gpu_scheduler_config.html#binpack-spread","title":"\u96c6\u7fa4\u7ef4\u5ea6\u4f7f\u7528 Binpack \u548c Spread \u8c03\u5ea6\u914d\u7f6e","text":"

                    Note

                    \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u4f1a\u9075\u5faa\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack \u548c Spread \u8c03\u5ea6\u914d\u7f6e\u3002 \u82e5\u5de5\u4f5c\u8d1f\u8f7d\u5355\u72ec\u8bbe\u7f6e\u4e86\u4e0e\u96c6\u7fa4\u4e0d\u4e00\u81f4\u7684 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\uff0c\u5219\u8be5\u5de5\u4f5c\u8d1f\u8f7d\u4f18\u5148\u9075\u5faa\u5176\u672c\u8eab\u7684\u8c03\u5ea6\u7b56\u7565\u3002

                    1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9009\u62e9\u9700\u8981\u8c03\u6574 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u56fe\u6807\u5e76\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u70b9\u51fb GPU \u8c03\u5ea6\u914d\u7f6e \u3002

                    2. \u6839\u636e\u4e1a\u52a1\u573a\u666f\u8c03\u6574 GPU \u8c03\u5ea6\u914d\u7f6e\uff0c\u5e76\u70b9\u51fb \u786e\u5b9a \u540e\u4fdd\u5b58\u3002

                    "},{"location":"end-user/kpanda/gpu/gpu_scheduler_config.html#binpack-spread_1","title":"\u5de5\u4f5c\u8d1f\u8f7d\u7ef4\u5ea6\u4f7f\u7528 Binpack \u548c Spread \u8c03\u5ea6\u914d\u7f6e","text":"

                    Note

                    \u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ef4\u5ea6\u7684 Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684\u914d\u7f6e\u51b2\u7a81\u65f6\uff0c\u4f18\u5148\u9075\u5faa\u5de5\u4f5c\u8d1f\u8f7d\u7ef4\u5ea6\u7684\u914d\u7f6e\u3002

                    \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u65e0\u72b6\u6001\u8d1f\u8f7d\uff0c\u5e76\u5728\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u914d\u7f6e Binpack \u548c Spread \u8c03\u5ea6\u7b56\u7565 \u3002

                    1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                    2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

                    3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\uff0c\u5e76\u5728 \u5bb9\u5668\u914d\u7f6e \u4e2d\u542f\u7528 GPU \u914d\u7f6e\uff0c\u9009\u62e9 GPU \u7c7b\u578b\u4e3a NVIDIA vGPU\uff0c \u70b9\u51fb \u9ad8\u7ea7\u8bbe\u7f6e \uff0c\u542f\u7528 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\uff0c\u6839\u636e\u4e1a\u52a1\u573a\u666f\u8c03\u6574 GPU \u8c03\u5ea6\u914d\u7f6e\u3002\u914d\u7f6e\u5b8c\u6210\u540e\u70b9\u51fb \u4e0b\u4e00\u6b65 \uff0c \u8fdb\u5165 \u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                    "},{"location":"end-user/kpanda/gpu/vgpu_quota.html","title":"GPU \u914d\u989d\u7ba1\u7406","text":"

                    \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528 vGPU \u80fd\u529b\u3002

                    "},{"location":"end-user/kpanda/gpu/vgpu_quota.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                    \u5f53\u524d\u96c6\u7fa4\u5df2\u901a\u8fc7 Operator \u6216\u624b\u52a8\u65b9\u5f0f\u90e8\u7f72\u5bf9\u5e94\u7c7b\u578b GPU \u9a71\u52a8\uff08NVIDIA GPU\u3001NVIDIA MIG\u3001\u5929\u6570\u3001\u6607\u817e\uff09

                    "},{"location":"end-user/kpanda/gpu/vgpu_quota.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                    1. \u8fdb\u5165 Namespaces \u4e2d\uff0c\u70b9\u51fb \u914d\u989d\u7ba1\u7406 \u53ef\u4ee5\u914d\u7f6e\u5f53\u524d Namespace \u53ef\u4ee5\u4f7f\u7528\u7684 GPU \u8d44\u6e90\u3002

                    2. \u5f53\u524d\u547d\u540d\u7a7a\u95f4\u914d\u989d\u7ba1\u7406\u8986\u76d6\u7684\u5361\u7c7b\u578b\u4e3a\uff1aNVIDIA vGPU\u3001NVIDIA MIG\u3001\u5929\u6570\u3001\u6607\u817e\u3002

                      NVIDIA vGPU \u914d\u989d\u7ba1\u7406 \uff1a\u914d\u7f6e\u5177\u4f53\u53ef\u4ee5\u4f7f\u7528\u7684\u914d\u989d\uff0c\u4f1a\u521b\u5efa ResourcesQuota CR\uff1a

                      • \u7269\u7406\u5361\u6570\u91cf\uff08nvidia.com/vgpu\uff09\uff1a\u8868\u793a\u5f53\u524d POD \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u5e76\u4e14\u8981 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002
                      • GPU \u7b97\u529b\uff08nvidia.com/gpucores\uff09\uff1a\u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u7b97\u529b\uff0c\u503c\u8303\u56f4\u4e3a 0-100\uff1b\u5982\u679c\u914d\u7f6e\u4e3a 0\uff0c\u5219\u8ba4\u4e3a\u4e0d\u5f3a\u5236\u9694\u79bb\uff1b\u914d\u7f6e\u4e3a 100\uff0c\u5219\u8ba4\u4e3a\u72ec\u5360\u6574\u5f20\u5361\u3002
                      • GPU \u663e\u5b58\uff08nvidia.com/gpumem\uff09\uff1a\u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u663e\u5b58\uff0c\u503c\u5355\u4f4d\u4e3a MB\uff0c\u6700\u5c0f\u503c\u4e3a 1\uff0c\u6700\u5927\u503c\u4e3a\u6574\u5361\u7684\u663e\u5b58\u503c\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html","title":"\u6607\u817e NPU \u7ec4\u4ef6\u5b89\u88c5","text":"

                    \u672c\u7ae0\u8282\u63d0\u4f9b\u6607\u817e NPU \u9a71\u52a8\u3001Device Plugin\u3001NPU-Exporter \u7b49\u7ec4\u4ef6\u7684\u5b89\u88c5\u6307\u5bfc\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    1. \u5b89\u88c5\u524d\u8bf7\u786e\u8ba4\u652f\u6301\u7684 NPU \u578b\u53f7\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\u6607\u817e NPU \u77e9\u9635
                    2. \u8bf7\u786e\u8ba4 \u5bf9\u5e94 NPU \u578b\u53f7\u6240\u8981\u6c42\u7684\u5185\u6838\u7248\u672c\u662f\u5426\u5339\u914d\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\u6607\u817e NPU \u77e9\u9635
                    3. \u51c6\u5907 Kubernetes \u57fa\u7840\u73af\u5883
                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#_2","title":"\u5b89\u88c5\u6b65\u9aa4","text":"

                    \u4f7f\u7528 NPU \u8d44\u6e90\u4e4b\u524d\uff0c\u9700\u8981\u5b8c\u6210\u56fa\u4ef6\u5b89\u88c5\u3001NPU \u9a71\u52a8\u5b89\u88c5\u3001 Docker Runtime \u5b89\u88c5\u3001\u7528\u6237\u521b\u5efa\u3001\u65e5\u5fd7\u76ee\u5f55\u521b\u5efa\u4ee5\u53ca NPU Device Plugin \u5b89\u88c5\uff0c\u8be6\u60c5\u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#_3","title":"\u5b89\u88c5\u56fa\u4ef6","text":"
                    1. \u5b89\u88c5\u524d\u8bf7\u786e\u8ba4\u5185\u6838\u7248\u672c\u5728\u201c\u4e8c\u8fdb\u5236\u5b89\u88c5\u201d\u5b89\u88c5\u65b9\u5f0f\u5bf9\u5e94\u7684\u7248\u672c\u8303\u56f4\u5185\uff0c\u5219\u53ef\u4ee5\u76f4\u63a5\u5b89\u88c5NPU\u9a71\u52a8\u56fa\u4ef6\u3002
                    2. \u56fa\u4ef6\u4e0e\u9a71\u52a8\u4e0b\u8f7d\u8bf7\u53c2\u8003\u56fa\u4ef6\u4e0b\u8f7d\u5730\u5740
                    3. \u56fa\u4ef6\u5b89\u88c5\u8bf7\u53c2\u8003\u5b89\u88c5 NPU \u9a71\u52a8\u56fa\u4ef6
                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#npu_1","title":"\u5b89\u88c5 NPU \u9a71\u52a8","text":"
                    1. \u5982\u9a71\u52a8\u672a\u5b89\u88c5\uff0c\u8bf7\u53c2\u8003\u6607\u817e\u5b98\u65b9\u6587\u6863\u8fdb\u884c\u5b89\u88c5\u3002\u4f8b\u5982 Ascend910\uff0c\u53c2\u8003 910 \u9a71\u52a8\u5b89\u88c5\u6587\u6863\u3002
                    2. \u8fd0\u884c npu-smi info \u547d\u4ee4\uff0c\u5e76\u4e14\u80fd\u591f\u6b63\u5e38\u8fd4\u56de NPU \u4fe1\u606f\uff0c\u8868\u793a NPU \u9a71\u52a8\u4e0e\u56fa\u4ef6\u5df2\u5c31\u7eea\u3002
                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#docker-runtime","title":"\u5b89\u88c5 Docker Runtime","text":"
                    1. \u4e0b\u8f7d Ascend Docker Runtime

                      \u793e\u533a\u7248\u4e0b\u8f7d\u5730\u5740\uff1ahttps://www.hiascend.com/zh/software/mindx-dl/community

                      wget -c https://mindx.obs.cn-south-1.myhuaweicloud.com/OpenSource/MindX/MindX%205.0.RC2/MindX%20DL%205.0.RC2/Ascend-docker-runtime_5.0.RC2_linux-x86_64.run\n

                      \u5b89\u88c5\u5230\u6307\u5b9a\u8def\u5f84\u4e0b\uff0c\u4f9d\u6b21\u6267\u884c\u4ee5\u4e0b\u4e24\u6761\u547d\u4ee4\uff0c\u53c2\u6570\u4e3a\u6307\u5b9a\u7684\u5b89\u88c5\u8def\u5f84:

                      chmod u+x Ascend-docker-runtime_5.0.RC2_linux-x86_64.run \n./Ascend-docker-runtime_{version}_linux-{arch}.run --install --install-path=<path>\n
                    2. \u4fee\u6539 containerd \u914d\u7f6e\u6587\u4ef6

                      containerd \u65e0\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\u65f6\uff0c\u4f9d\u6b21\u6267\u884c\u4ee5\u4e0b3\u6761\u547d\u4ee4\uff0c\u521b\u5efa\u914d\u7f6e\u6587\u4ef6\uff1a

                      mkdir /etc/containerd \ncontainerd config default > /etc/containerd/config.toml \nvim /etc/containerd/config.toml\n

                      containerd \u6709\u914d\u7f6e\u6587\u4ef6\u65f6\uff1a

                      vim /etc/containerd/config.toml\n

                      \u6839\u636e\u5b9e\u9645\u60c5\u51b5\u4fee\u6539 runtime \u7684\u5b89\u88c5\u8def\u5f84\uff0c\u4e3b\u8981\u4fee\u6539 runtime \u5b57\u6bb5\uff1a

                      ... \n[plugins.\"io.containerd.monitor.v1.cgroups\"]\n   no_prometheus = false  \n[plugins.\"io.containerd.runtime.v1.linux\"]\n   shim = \"containerd-shim\"\n   runtime = \"/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime\"\n   runtime_root = \"\"\n   no_shim = false\n   shim_debug = false\n [plugins.\"io.containerd.runtime.v2.task\"]\n   platforms = [\"linux/amd64\"]\n...\n

                      \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u91cd\u542f containerd\uff1a

                      systemctl restart containerd\n
                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#_4","title":"\u7528\u6237\u521b\u5efa","text":"

                    \u5728\u5bf9\u5e94\u7ec4\u4ef6\u5b89\u88c5\u7684\u8282\u70b9\u4e0a\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa\u7528\u6237\u3002

                    # Ubuntu \u64cd\u4f5c\u7cfb\u7edf\nuseradd -d /home/hwMindX -u 9000 -m -s /usr/sbin/nologin hwMindX\nusermod -a -G HwHiAiUser hwMindX\n# Centos \u64cd\u4f5c\u7cfb\u7edf\nuseradd -d /home/hwMindX -u 9000 -m -s /sbin/nologin hwMindX\nusermod -a -G HwHiAiUser hwMindX\n
                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#_5","title":"\u65e5\u5fd7\u76ee\u5f55\u521b\u5efa","text":"

                    \u5728\u5bf9\u5e94\u8282\u70b9\u521b\u5efa\u7ec4\u4ef6\u65e5\u5fd7\u7236\u76ee\u5f55\u548c\u5404\u7ec4\u4ef6\u7684\u65e5\u5fd7\u76ee\u5f55\uff0c\u5e76\u8bbe\u7f6e\u76ee\u5f55\u5bf9\u5e94\u5c5e\u4e3b\u548c\u6743\u9650\u3002\u6267\u884c\u4e0b\u8ff0\u547d\u4ee4\uff0c\u521b\u5efa\u7ec4\u4ef6\u65e5\u5fd7\u7236\u76ee\u5f55\u3002

                    mkdir -m 755 /var/log/mindx-dl\nchown root:root /var/log/mindx-dl\n

                    \u6267\u884c\u4e0b\u8ff0\u547d\u4ee4\uff0c\u521b\u5efa Device Plugin \u7ec4\u4ef6\u65e5\u5fd7\u76ee\u5f55\u3002

                    mkdir -m 750 /var/log/mindx-dl/devicePlugin\nchown root:root /var/log/mindx-dl/devicePlugin\n

                    Note

                    \u8bf7\u5206\u522b\u4e3a\u6240\u9700\u7ec4\u4ef6\u521b\u5efa\u5bf9\u5e94\u7684\u65e5\u5fd7\u76ee\u5f55\uff0c\u5f53\u524d\u6848\u4f8b\u4e2d\u53ea\u9700\u8981 Device Plugin \u7ec4\u4ef6\u3002 \u5982\u679c\u6709\u5176\u4ed6\u7ec4\u4ef6\u9700\u6c42\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#label","title":"\u521b\u5efa\u8282\u70b9 Label","text":"

                    \u53c2\u8003\u4e0b\u8ff0\u547d\u4ee4\u5728\u5bf9\u5e94\u8282\u70b9\u4e0a\u521b\u5efa Label\uff1a

                    # \u5728\u5b89\u88c5\u4e86\u9a71\u52a8\u7684\u8ba1\u7b97\u8282\u70b9\u521b\u5efa\u6b64\u6807\u7b7e\nkubectl label node {nodename} huawei.com.ascend/Driver=installed\nkubectl label node {nodename} node-role.kubernetes.io/worker=worker\nkubectl label node {nodename} workerselector=dls-worker-node\nkubectl label node {nodename} host-arch=huawei-arm //\u6216\u8005host-arch=huawei-x86 \uff0c\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u9009\u62e9\nkubectl label node {nodename} accelerator=huawei-Ascend910 //\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u9009\u62e9\n# \u5728\u63a7\u5236\u8282\u70b9\u521b\u5efa\u6b64\u6807\u7b7e\nkubectl label node {nodename} masterselector=dls-master-node\n
                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_driver_install.html#device-plugin-npuexporter","title":"\u5b89\u88c5 Device Plugin \u548c NpuExporter","text":"

                    \u529f\u80fd\u6a21\u5757\u8def\u5f84\uff1a \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u7ba1\u7406 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f -> \u641c\u7d22 ascend-mindxdl \u3002

                    • DevicePlugin \uff1a\u901a\u8fc7\u63d0\u4f9b\u901a\u7528\u8bbe\u5907\u63d2\u4ef6\u673a\u5236\u548c\u6807\u51c6\u7684\u8bbe\u5907API\u63a5\u53e3\uff0c\u4f9bKubernetes\u4f7f\u7528\u8bbe\u5907\u3002\u5efa\u8bae\u4f7f\u7528\u9ed8\u8ba4\u7684\u955c\u50cf\u53ca\u7248\u672c\u3002
                    • NpuExporter \uff1a\u57fa\u4e8ePrometheus/Telegraf\u751f\u6001\uff0c\u8be5\u7ec4\u4ef6\u63d0\u4f9b\u63a5\u53e3\uff0c\u5e2e\u52a9\u7528\u6237\u80fd\u591f\u5173\u6ce8\u5230\u6607\u817e\u7cfb\u5217AI\u5904\u7406\u5668\u4ee5\u53ca\u5bb9\u5668\u7ea7\u5206\u914d\u72b6\u6001\u3002\u5efa\u8bae\u4f7f\u7528\u9ed8\u8ba4\u7684\u955c\u50cf\u53ca\u7248\u672c\u3002
                    • ServiceMonitor \uff1a\u9ed8\u8ba4\u4e0d\u5f00\u542f\uff0c\u5f00\u542f\u540e\u53ef\u524d\u5f80\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u67e5\u770b NPU \u76f8\u5173\u76d1\u63a7\u3002\u5982\u9700\u5f00\u542f\uff0c\u8bf7\u786e\u4fdd insight-agent \u5df2\u5b89\u88c5\u5e76\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\uff0c\u5426\u5219\u5c06\u5bfc\u81f4 ascend-mindxdl \u5b89\u88c5\u5931\u8d25\u3002
                    • isVirtualMachine \uff1a\u9ed8\u8ba4\u4e0d\u5f00\u542f\uff0c\u5982\u679c NPU \u8282\u70b9\u4e3a\u4e91\u4e3b\u673a\u573a\u666f\uff0c\u8bf7\u5f00\u542f\u00a0isVirtualMachine \u53c2\u6570\u3002

                    \u5b89\u88c5\u6210\u529f\u540e\uff0c\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u4e0b\u4f1a\u51fa\u73b0\u4e24\u4e2a\u7ec4\u4ef6\uff0c\u5982\u4e0b\u56fe\uff1a

                    \u540c\u65f6\u8282\u70b9\u4fe1\u606f\u4e0a\u4e5f\u4f1a\u51fa\u73b0\u5bf9\u5e94 NPU \u7684\u4fe1\u606f\uff1a

                    \u4e00\u5207\u5c31\u7eea\u540e\uff0c\u6211\u4eec\u901a\u8fc7\u9875\u9762\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u5c31\u80fd\u591f\u9009\u62e9\u5230\u5bf9\u5e94\u7684 NPU \u8bbe\u5907\uff0c\u5982\u4e0b\u56fe\uff1a

                    Note

                    \u6709\u5173\u8be6\u7ec6\u4f7f\u7528\u6b65\u9aa4\uff0c\u8bf7\u53c2\u7167\u5e94\u7528\u4f7f\u7528\u6607\u817e\uff08Ascend\uff09NPU\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_usage.html","title":"\u5e94\u7528\u4f7f\u7528\u6607\u817e\uff08Ascend\uff09NPU","text":"

                    \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528\u6607\u817e GPU\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_usage.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5\u6607\u817e \uff08Ascend\uff09\u9a71\u52a8\u3002
                    • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5 Ascend-Docker-Runtime \u7ec4\u4ef6\u3002
                    • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5 NPU MindX DL \u5957\u4ef6\u3002
                    • \u5f53\u524d\u96c6\u7fa4\u5185 NPU \u5361\u672a\u8fdb\u884c\u4efb\u4f55\u865a\u62df\u5316\u64cd\u4f5c\u6216\u88ab\u5176\u5b83\u5e94\u7528\u5360\u7528\u3002

                    \u8bf7\u53c2\u8003\u6607\u817e NPU \u7ec4\u4ef6\u5b89\u88c5\u6587\u6863\u5b89\u88c5\u57fa\u7840\u73af\u5883\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_usage.html#_2","title":"\u5feb\u901f\u4f7f\u7528","text":"

                    \u672c\u6587\u4f7f\u7528\u6607\u817e\u793a\u4f8b\u5e93\u4e2d\u7684 AscentCL \u56fe\u7247\u5206\u7c7b\u5e94\u7528\u793a\u4f8b\u3002

                    1. \u4e0b\u8f7d\u6607\u817e\u4ee3\u7801\u5e93

                      \u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u4e0b\u8f7d\u6607\u817e Demo \u793a\u4f8b\u4ee3\u7801\u5e93\uff0c\u5e76\u4e14\u8bf7\u8bb0\u4f4f\u4ee3\u7801\u5b58\u653e\u7684\u4f4d\u7f6e\uff0c\u540e\u7eed\u9700\u8981\u4f7f\u7528\u3002

                      git clone https://gitee.com/ascend/samples.git\n
                    2. \u51c6\u5907\u57fa\u7840\u955c\u50cf

                      \u6b64\u4f8b\u4f7f\u7528 Ascent-pytorch \u57fa\u7840\u955c\u50cf\uff0c\u53ef\u8bbf\u95ee\u6607\u817e\u955c\u50cf\u4ed3\u5e93\u83b7\u53d6\u3002

                    3. \u51c6\u5907 YAML

                      ascend-demo.yaml
                      apiVersion: batch/v1\nkind: Job\nmetadata:\n  name: resnetinfer1-1-1usoc\nspec:\n  template:\n    spec:\n      containers:\n        - image: ascendhub.huawei.com/public-ascendhub/ascend-pytorch:23.0.RC2-ubuntu18.04 # Inference image name\n          imagePullPolicy: IfNotPresent\n          name: resnet50infer\n          securityContext:\n            runAsUser: 0\n          command:\n            - \"/bin/bash\"\n            - \"-c\"\n            - |\n              source /usr/local/Ascend/ascend-toolkit/set_env.sh &&\n              TEMP_DIR=/root/samples_copy_$(date '+%Y%m%d_%H%M%S_%N') &&\n              cp -r /root/samples \"$TEMP_DIR\" &&\n              cd \"$TEMP_DIR\"/inference/modelInference/sampleResnetQuickStart/python/model &&\n              wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx &&\n              atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape=\"actual_input_1:1,3,224,224\"  --soc_version=Ascend910 &&\n              cd ../data &&\n              wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg &&\n              cd ../scripts &&\n              bash sample_run.sh\n          resources:\n            requests:\n              huawei.com/Ascend910: 1 # Number of the Ascend 910 Processors\n            limits:\n              huawei.com/Ascend910: 1 # The value should be the same as that of requests\n          volumeMounts:\n            - name: hiai-driver\n              mountPath: /usr/local/Ascend/driver\n              readOnly: true\n            - name: slog\n              mountPath: /var/log/npu/conf/slog/slog.conf\n            - name: localtime # The container time must be the same as the host time\n              mountPath: /etc/localtime\n            - name: dmp\n              mountPath: /var/dmp_daemon\n            - name: slogd\n              mountPath: /var/slogd\n            - name: hbasic\n              mountPath: /etc/hdcBasic.cfg\n            - name: sys-version\n              mountPath: /etc/sys_version.conf\n            - name: aicpu\n              mountPath: /usr/lib64/aicpu_kernels\n            - name: tfso\n              mountPath: /usr/lib64/libtensorflow.so\n            - name: sample-path\n              mountPath: /root/samples\n      volumes:\n        - name: hiai-driver\n          hostPath:\n            path: /usr/local/Ascend/driver\n        - name: slog\n          hostPath:\n            path: /var/log/npu/conf/slog/slog.conf\n        - name: localtime\n          hostPath:\n            path: /etc/localtime\n        - name: dmp\n          hostPath:\n            path: /var/dmp_daemon\n        - name: slogd\n          hostPath:\n            path: /var/slogd\n        - name: hbasic\n          hostPath:\n            path: /etc/hdcBasic.cfg\n        - name: sys-version\n          hostPath:\n            path: /etc/sys_version.conf\n        - name: aicpu\n          hostPath:\n            path: /usr/lib64/aicpu_kernels\n        - name: tfso\n          hostPath:\n            path: /usr/lib64/libtensorflow.so\n        - name: sample-path\n          hostPath:\n            path: /root/samples\n      restartPolicy: OnFailure\n

                      \u4ee5\u4e0a YAML \u4e2d\u6709\u4e00\u4e9b\u5b57\u6bb5\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u4fee\u6539\uff1a

                      1. atc ... --soc_version=Ascend910 \u4f7f\u7528\u7684\u662f Ascend910 \uff0c\u8bf7\u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u4e3b \u60a8\u53ef\u4ee5\u4f7f\u7528 npu-smi info \u547d\u4ee4\u67e5\u770b\u663e\u5361\u578b\u53f7\u7136\u540e\u52a0\u4e0a Ascend \u524d\u7f00\u5373\u53ef
                      2. samples-path \u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u51c6
                      3. resources \u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u51c6
                    4. \u90e8\u7f72 Job \u5e76\u67e5\u770b\u7ed3\u679c

                      \u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u521b\u5efa Job\uff1a

                      kubectl apply -f ascend-demo.yaml\n

                      \u67e5\u770b Pod \u8fd0\u884c\u72b6\u6001\uff1a

                      Pod \u6210\u529f\u8fd0\u884c\u540e\uff0c\u67e5\u770b\u65e5\u5fd7\u7ed3\u679c\u3002\u5728\u5c4f\u5e55\u4e0a\u7684\u5173\u952e\u63d0\u793a\u4fe1\u606f\u793a\u4f8b\u5982\u4e0b\u56fe\uff0c\u63d0\u793a\u4fe1\u606f\u4e2d\u7684 Label \u8868\u793a\u7c7b\u522b\u6807\u8bc6\uff0c Conf \u8868\u793a\u8be5\u5206\u7c7b\u7684\u6700\u5927\u7f6e\u4fe1\u5ea6\uff0cClass \u8868\u793a\u6240\u5c5e\u7c7b\u522b\u3002\u8fd9\u4e9b\u503c\u53ef\u80fd\u4f1a\u6839\u636e\u7248\u672c\u3001\u73af\u5883\u6709\u6240\u4e0d\u540c\uff0c\u8bf7\u4ee5\u5b9e\u9645\u60c5\u51b5\u4e3a\u51c6\uff1a

                      \u7ed3\u679c\u56fe\u7247\u5c55\u793a\uff1a

                    "},{"location":"end-user/kpanda/gpu/ascend/ascend_usage.html#_3","title":"\u754c\u9762\u4f7f\u7528","text":"
                    1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Ascend \u3002

                    2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Ascend\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7684\u7269\u7406\u5361\u6570\u91cf\uff1a

                      \u7269\u7406\u5361\u6570\u91cf\uff08huawei.com/Ascend910\uff09 \uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14**\u5c0f\u4e8e\u7b49\u4e8e**\u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002

                      \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/vnpu.html","title":"\u542f\u7528\u6607\u817e\u865a\u62df\u5316","text":"

                    \u6607\u817e\u865a\u62df\u5316\u5206\u4e3a\u52a8\u6001\u865a\u62df\u5316\u548c\u9759\u6001\u865a\u62df\u5316\uff0c\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5f00\u542f\u5e76\u4f7f\u7528\u6607\u817e\u9759\u6001\u865a\u62df\u5316\u80fd\u529b\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/vnpu.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    • Kubernetes \u96c6\u7fa4\u73af\u5883\u642d\u5efa\u3002
                    • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5\u6607\u817e \uff08Ascend\uff09\u9a71\u52a8\u3002
                    • \u5f53\u524d NPU \u8282\u70b9\u5df2\u5b89\u88c5 Ascend-Docker-Runtime \u7ec4\u4ef6\u3002
                    • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5 NPU MindX DL \u5957\u4ef6\u3002
                    • \u652f\u6301\u7684 NPU \u5361\u578b\u53f7\uff1a

                      • Ascend 310P\uff0c\u5df2\u9a8c\u8bc1
                      • Ascend 910b\uff0820 \u6838\uff09\uff0c\u5df2\u9a8c\u8bc1
                      • Ascend 910\uff0832 \u6838\uff09\uff0c\u5b98\u65b9\u4ecb\u7ecd\u652f\u6301\uff0c\u672a\u5b9e\u9645\u9a8c\u8bc1
                      • Ascend 910\uff0830 \u6838\uff09\uff0c\u5b98\u65b9\u4ecb\u7ecd\u652f\u6301\uff0c\u672a\u5b9e\u9645\u9a8c\u8bc1

                      \u66f4\u591a\u7ec6\u8282\u53c2\u9605\u5b98\u65b9\u865a\u62df\u5316\u786c\u4ef6\u8bf4\u660e\u3002

                    \u8bf7\u53c2\u8003\u6607\u817e NPU \u7ec4\u4ef6\u5b89\u88c5\u6587\u6863\u5b89\u88c5\u57fa\u7840\u73af\u5883\u3002

                    "},{"location":"end-user/kpanda/gpu/ascend/vnpu.html#_3","title":"\u5f00\u542f\u865a\u62df\u5316\u80fd\u529b","text":"

                    \u5f00\u542f\u865a\u62df\u5316\u80fd\u529b\u9700\u8981\u624b\u52a8\u4fee\u6539\u00a0ascend-device-plugin-daemonset \u7ec4\u4ef6\u7684\u542f\u52a8\u53c2\u6570\uff0c\u53c2\u8003\u4e0b\u8ff0\u547d\u4ee4\uff1a

                    - device-plugin -useAscendDocker=true -volcanoType=false -presetVirtualDevice=true\n- logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0\n
                    "},{"location":"end-user/kpanda/gpu/ascend/vnpu.html#vnpu","title":"\u5207\u5206 VNPU \u5b9e\u4f8b","text":"

                    \u9759\u6001\u865a\u62df\u5316\u9700\u8981\u624b\u52a8\u5bf9 VNPU \u5b9e\u4f8b\u7684\u5207\u5206\uff0c\u8bf7\u53c2\u8003\u4e0b\u8ff0\u547d\u4ee4\uff1a

                    npu-smi set -t create-vnpu -i 13 -c 0 -f vir02\n
                    • i \u6307\u7684\u662f card id
                    • c \u6307\u7684\u662f chip id
                    • vir02 \u6307\u7684\u662f\u5207\u5206\u89c4\u683c\u6a21\u677f

                    \u5173\u4e8e card id \u548c chip id\uff0c\u53ef\u4ee5\u901a\u8fc7 npu-smi info \u67e5\u8be2\uff0c\u5207\u5206\u89c4\u683c\u53ef\u901a\u8fc7 ascend \u5b98\u65b9\u6a21\u677f\u8fdb\u884c\u67e5\u8be2\u3002

                    \u5207\u5206\u5b9e\u4f8b\u8fc7\u540e\u53ef\u901a\u8fc7\u4e0b\u8ff0\u547d\u4ee4\u67e5\u8be2\u5207\u5206\u7ed3\u679c\uff1a

                    npu-smi info -t info-vnpu -i 13 -c 0\n

                    \u67e5\u8be2\u7ed3\u679c\u5982\u4e0b\uff1a

                    "},{"location":"end-user/kpanda/gpu/ascend/vnpu.html#ascend-device-plugin-daemonset","title":"\u91cd\u542f\u00a0ascend-device-plugin-daemonset","text":"

                    \u5207\u5206\u5b9e\u4f8b\u540e\u624b\u52a8\u91cd\u542f device-plugin pod\uff0c\u7136\u540e\u4f7f\u7528 kubectl describe \u547d\u4ee4\u67e5\u770b\u5df2\u6ce8\u518c node \u7684\u8d44\u6e90\uff1a

                    kubectl describe node {{nodename}}\n

                    "},{"location":"end-user/kpanda/gpu/ascend/vnpu.html#_4","title":"\u5982\u4f55\u4f7f\u7528\u8bbe\u5907","text":"

                    \u5728\u521b\u5efa\u5e94\u7528\u65f6\uff0c\u6307\u5b9a\u8d44\u6e90 key\uff0c\u53c2\u8003\u4e0b\u8ff0 YAML\uff1a

                    ......\nresources:\n  requests:\n    huawei.com/Ascend310P-2c: 1\n  limits:\n    huawei.com/Ascend310P-2c: 1\n......\n
                    "},{"location":"end-user/kpanda/gpu/metax/usemetax.html","title":"\u6c90\u66e6 GPU \u7ec4\u4ef6\u5b89\u88c5\u4e0e\u4f7f\u7528","text":"

                    \u672c\u7ae0\u8282\u63d0\u4f9b\u6c90\u66e6 gpu-extensions\u3001gpu-operator \u7b49\u7ec4\u4ef6\u7684\u5b89\u88c5\u6307\u5bfc\u548c\u6c90\u66e6 GPU \u6574\u5361\u548c vGPU \u4e24\u79cd\u6a21\u5f0f\u7684\u4f7f\u7528\u65b9\u6cd5\u3002

                    "},{"location":"end-user/kpanda/gpu/metax/usemetax.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                    1. \u5df2\u5728\u6c90\u66e6\u8f6f\u4ef6\u4e2d\u5fc3\u4e0b\u8f7d\u5e76\u5b89\u88c5\u6240\u9700\u7684 tar \u5305\uff0c \u672c\u6587\u4ee5 metax-gpu-k8s-package.0.7.10.tar.gz \u4e3a\u4f8b\u3002
                    2. \u51c6\u5907 Kubernetes \u57fa\u7840\u73af\u5883
                    "},{"location":"end-user/kpanda/gpu/metax/usemetax.html#_2","title":"\u7ec4\u4ef6\u4ecb\u7ecd","text":"

                    Metax \u63d0\u4f9b\u4e86\u4e24\u4e2a helm-chart \u5305\uff0c\u4e00\u4e2a\u662f metax-extensions\uff0c\u4e00\u4e2a\u662f gpu-operator\uff0c\u6839\u636e\u4f7f\u7528\u573a\u666f\u53ef\u9009\u62e9\u5b89\u88c5\u4e0d\u540c\u7684\u7ec4\u4ef6\u3002

                    1. Metax-extensions\uff1a\u5305\u542b gpu-device \u548c gpu-label \u4e24\u4e2a\u7ec4\u4ef6\u3002\u5728\u4f7f\u7528 Metax-extensions \u65b9\u6848\u65f6\uff0c\u7528\u6237\u7684\u5e94\u7528\u5bb9\u5668\u955c\u50cf\u9700\u8981\u57fa\u4e8e MXMACA\u00ae \u57fa\u7840\u955c\u50cf\u6784\u5efa\u3002\u4e14 Metax-extensions \u4ec5\u9002\u7528\u4e8e GPU \u6574\u5361\u4f7f\u7528\u573a\u666f\u3002
                    2. gpu-operator\uff1a\u5305\u542b gpu-device\u3001gpu-label\u3001driver-manager\u3001container-runtime\u3001operator-controller \u8fd9\u4e9b\u7ec4\u4ef6\u3002 \u4f7f\u7528 gpu-operator \u65b9\u6848\u65f6\uff0c\u7528\u6237\u53ef\u9009\u62e9\u5236\u4f5c\u4e0d\u5305\u542b MXMACA\u00ae SDK \u7684\u5e94\u7528\u5bb9\u5668\u955c\u50cf\u3002gpu-operator \u9002\u7528\u4e8e GPU \u6574\u5361\u548c vGPU \u573a\u666f\u3002
                    "},{"location":"end-user/kpanda/gpu/metax/usemetax.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                    1. \u4ece /home/metax/metax-docs/k8s/metax-gpu-k8s-package.0.7.10.tar.gz \u6587\u4ef6\u4e2d\u89e3\u538b\u51fa

                      • deploy-gpu-extensions.yaml # \u90e8\u7f72yaml
                      • metax-gpu-extensions-0.7.10.tgz\u3001metax-operator-0.7.10.tgz # helm chart\u6587\u4ef6
                      • metax-k8s-images.0.7.10.run # \u79bb\u7ebf\u955c\u50cf
                    2. \u67e5\u770b\u7cfb\u7edf\u662f\u5426\u5b89\u88c5\u9a71\u52a8

                      $ lsmod | grep metax \nmetax 1605632 0 \nttm 86016 3 drm_vram_helper,metax,drm_ttm_helper \ndrm 618496 7 drm_kms_helper,drm_vram_helper,ast,metax,drm_ttm_helper,ttm\n
                      • \u5982\u6ca1\u6709\u5185\u5bb9\u663e\u793a\uff0c\u5c31\u8868\u793a\u6ca1\u6709\u5b89\u88c5\u8fc7\u8f6f\u4ef6\u5305\u3002\u5982\u6709\u5185\u5bb9\u663e\u793a\uff0c\u5219\u8868\u793a\u5b89\u88c5\u8fc7\u8f6f\u4ef6\u5305\u3002
                      • \u4f7f\u7528 metax-opeartor \u65f6\uff0c\u4e0d\u63a8\u8350\u5728\u5de5\u4f5c\u8282\u70b9\u9884\u5b89\u88c5 MXMACA \u5185\u6838\u6001\u9a71\u52a8\uff0c\u82e5\u5df2\u5b89\u88c5\u4e5f\u65e0\u9700\u5378\u8f7d\u3002
                    3. \u5b89\u88c5\u9a71\u52a8

                    "},{"location":"end-user/kpanda/gpu/metax/usemetax.html#gpu-extensions","title":"gpu-extensions","text":"
                    1. \u63a8\u9001\u955c\u50cf

                      tar -xf metax-gpu-k8s-package.0.7.10.tar.gz\n./metax-k8s-images.0.7.10.run push {registry}/metax\n
                    2. \u63a8\u9001 Helm Chart

                      helm plugin install https://github.com/chartmuseum/helm-push\nhelm repo add  --username rootuser --password rootpass123  metax http://172.16.16.5:8081\nhelm cm-push metax-operator-0.7.10.tgz metax\nhelm cm-push metax-gpu-extensions-0.7.10.tgz metax\n
                    3. \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0a\u5b89\u88c5 metax-gpu-extensions

                      \u90e8\u7f72\u6210\u529f\u4e4b\u540e\uff0c\u53ef\u4ee5\u5728\u8282\u70b9\u4e0a\u67e5\u770b\u5230\u8d44\u6e90\u3002

                    4. \u4fee\u6539\u6210\u529f\u4e4b\u540e\u5c31\u53ef\u4ee5\u5728\u8282\u70b9\u4e0a\u770b\u5230\u5e26\u6709 Metax GPU \u7684\u6807\u7b7e

                    "},{"location":"end-user/kpanda/gpu/metax/usemetax.html#gpu-operator","title":"gpu-operator","text":"

                    \u5b89\u88c5 gpu-opeartor \u65f6\u7684\u5df2\u77e5\u95ee\u9898\uff1a

                    1. metax-operator\u3001gpu-label\u3001gpu-device \u3001container-runtime \u8fd9\u51e0\u4e2a\u7ec4\u4ef6\u955c\u50cf\u8981\u5e26\u6709 amd64 \u540e\u7f00\u3002

                    2. metax-maca \u7ec4\u4ef6\u7684\u955c\u50cf\u4e0d\u5728 metax-k8s-images.0.7.13.run \u5305\u91cc\u9762\uff0c\u9700\u8981\u5355\u72ec\u4e0b\u8f7d maca-mxc500-2.23.0.23-ubuntu20.04-x86_64.tar.xz \u8fd9\u7c7b\u955c\u50cf\uff0cload \u4e4b\u540e\u91cd\u65b0\u4fee\u6539 metax-maca \u7ec4\u4ef6\u7684\u955c\u50cf\u3002

                    3. metax-driver \u7ec4\u4ef6\u7684\u955c\u50cf\u9700\u8981\u4ece https://pub-docstore.metax-tech.com:7001 \u8fd9\u4e2a\u7f51\u7ad9\u4e0b\u8f7d k8s-driver-image.2.23.0.25.run \u6587\u4ef6\uff0c\u7136\u540e\u6267\u884c k8s-driver-image.2.23.0.25.run push {registry}/metax \u547d\u4ee4\u628a\u955c\u50cf\u63a8\u9001\u5230\u955c\u50cf\u4ed3\u5e93\u3002\u63a8\u9001\u4e4b\u540e\u4fee\u6539 metax-driver \u7ec4\u4ef6\u7684\u955c\u50cf\u5730\u5740\u3002

                    "},{"location":"end-user/kpanda/gpu/metax/usemetax.html#gpu_1","title":"\u4f7f\u7528 GPU","text":"

                    \u5b89\u88c5\u540e\u53ef\u5728\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u4f7f\u7528\u6c90\u66e6 GPU\u3002\u6ce8\u610f\u542f\u7528 GPU \u540e\uff0c\u9700\u9009\u62e9GPU\u7c7b\u578b\u4e3a Metax GPU

                    \u8fdb\u5165\u5bb9\u5668\uff0c\u6267\u884c mx-smi \u53ef\u67e5\u770b GPU \u7684\u4f7f\u7528\u60c5\u51b5.

                    "},{"location":"end-user/kpanda/gpu/mlu/use-mlu.html","title":"\u4f7f\u7528\u5bd2\u6b66\u7eaa GPU","text":"

                    \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528\u5bd2\u6b66\u7eaa GPU\u3002

                    "},{"location":"end-user/kpanda/gpu/mlu/use-mlu.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
                    • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
                    • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
                    • \u5f53\u524d\u96c6\u7fa4\u5df2\u5b89\u88c5\u5bd2\u6b66\u7eaa\u56fa\u4ef6\u3001\u9a71\u52a8\u4ee5\u53caDevicePlugin\u7ec4\u4ef6\uff0c\u5b89\u88c5\u8be6\u60c5\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff1a
                      • \u9a71\u52a8\u56fa\u4ef6\u5b89\u88c5
                      • DevicePlugin \u5b89\u88c5

                    \u5728\u5b89\u88c5 DevicePlugin \u65f6\u8bf7\u5173\u95ed --enable-device-type \u53c2\u6570\uff0c\u5426\u5219\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5c06\u65e0\u6cd5\u6b63\u786e\u8bc6\u522b\u5bd2\u6b66\u7eaa GPU\u3002

                    "},{"location":"end-user/kpanda/gpu/mlu/use-mlu.html#gpu_1","title":"\u5bd2\u6b66\u7eaa GPU \u6a21\u5f0f\u4ecb\u7ecd","text":"

                    \u5bd2\u6b66\u7eaa GPU \u6709\u4ee5\u4e0b\u51e0\u79cd\u6a21\u5f0f\uff1a

                    • \u6574\u5361\u6a21\u5f0f\uff1a\u5c06\u5bd2\u6b66\u7eaaGPU\u4ee5\u6574\u5361\u7684\u65b9\u5f0f\u6ce8\u518c\u5230\u96c6\u7fa4\u5f53\u4e2d\u8fdb\u884c\u4f7f\u7528\u3002
                    • Share \u6a21\u5f0f\uff1a\u53ef\u4ee5\u5c06\u4e00\u5f20\u5bd2\u6b66\u7eaaGPU\u5171\u4eab\u7ed9\u591a\u4e2a Pod \u8fdb\u884c\u4f7f\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7 virtualization-num \u53c2\u6570\u8fdb\u884c\u8bbe\u7f6e\u53ef\u5171\u4eab\u5bb9\u5668\u7684\u6570\u91cf\u3002
                    • Dynamic smlu \u6a21\u5f0f\uff1a\u8fdb\u4e00\u6b65\u5bf9\u8d44\u6e90\u8fdb\u884c\u4e86\u7ec6\u5316\uff0c\u53ef\u4ee5\u63a7\u5236\u5206\u914d\u7ed9\u5bb9\u5668\u7684\u663e\u5b58\u3001\u7b97\u529b\u7684\u5927\u5c0f\u3002
                    • Mim \u6a21\u5f0f\uff1a\u53ef\u4ee5\u5c06\u5bd2\u6b66\u7eaa GPU \u6309\u7167\u56fa\u5b9a\u7684\u89c4\u683c\u5207\u5206\u6210\u591a\u5f20 GPU \u8fdb\u884c\u4f7f\u7528\u3002
                    "},{"location":"end-user/kpanda/gpu/mlu/use-mlu.html#ai","title":"\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528\u5bd2\u6b66\u7eaa","text":"

                    \u8fd9\u91cc\u4ee5 Dynamic smlu \u6a21\u5f0f\u4e3a\u4f8b\uff1a

                    1. \u5728\u6b63\u786e\u5b89\u88c5 DevicePlugin \u7b49\u7ec4\u4ef6\u540e\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8fd0\u7ef4-> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002

                    2. \u70b9\u51fb\u8282\u70b9\u7ba1\u7406\u9875\u9762\uff0c\u67e5\u770b\u8282\u70b9\u662f\u5426\u5df2\u7ecf\u6b63\u786e\u8bc6\u522b\u5230\u5bf9\u5e94\u7684GPU\u7c7b\u578b\u3002

                    3. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08MLU VGPU\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e App \u4f7f\u7528\u7684 GPU \u8d44\u6e90\uff1a

                      • GPU \u7b97\u529b\uff08cambricon.com/mlu.smlu.vcore\uff09\uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u4f7f\u7528\u6838\u5fc3\u7684\u767e\u5206\u6bd4\u6570\u91cf\u3002
                      • GPU \u663e\u5b58\uff08cambricon.com/mlu.smlu.vmemory\uff09\uff1a\u8868\u793a\u5f53\u524dPod\u9700\u8981\u4f7f\u7528\u663e\u5b58\u7684\u5927\u5c0f\uff0c\u5355\u4f4d\u662fMB\u3002

                    "},{"location":"end-user/kpanda/gpu/mlu/use-mlu.html#yaml","title":"\u4f7f\u7528 YAML \u914d\u7f6e","text":"

                    \u53c2\u8003 YAML \u6587\u4ef6\u5982\u4e0b\uff1a

                    apiVersion: v1  \nkind: Pod  \nmetadata:  \n  name: pod1  \nspec:  \n  restartPolicy: OnFailure  \n  containers:  \n    - image: ubuntu:16.04  \n      name: pod1-ctr  \n      command: [\"sleep\"]  \n      args: [\"100000\"]  \n      resources:  \n        limits:  \n          cambricon.com/mlu: \"1\" # use this when device type is not enabled, else delete this line.  \n          #cambricon.com/mlu: \"1\" #uncomment to use when device type is enabled  \n          #cambricon.com/mlu.share: \"1\" #uncomment to use device with env-share mode  \n          #cambricon.com/mlu.mim-2m.8gb: \"1\" #uncomment to use device with mim mode  \n          #cambricon.com/mlu.smlu.vcore: \"100\" #uncomment to use device with mim mode  \n          #cambricon.com/mlu.smlu.vmemory: \"1024\" #uncomment to use device with mim mode\n
                    "},{"location":"end-user/kpanda/gpu/nvidia/index.html","title":"NVIDIA GPU \u5361\u4f7f\u7528\u6a21\u5f0f","text":"

                    NVIDIA \u4f5c\u4e3a\u4e1a\u5185\u77e5\u540d\u7684\u56fe\u5f62\u8ba1\u7b97\u4f9b\u5e94\u5546\uff0c\u4e3a\u7b97\u529b\u7684\u63d0\u5347\u63d0\u4f9b\u4e86\u8bf8\u591a\u8f6f\u786c\u4ef6\u89e3\u51b3\u65b9\u6848\uff0c\u5176\u4e2d NVIDIA \u5728 GPU \u7684\u4f7f\u7528\u65b9\u5f0f\u4e0a\u63d0\u4f9b\u4e86\u5982\u4e0b\u4e09\u79cd\u89e3\u51b3\u65b9\u6848\uff1a

                    "},{"location":"end-user/kpanda/gpu/nvidia/index.html#full-gpu","title":"\u6574\u5361\uff08Full GPU\uff09","text":"

                    \u6574\u5361\u662f\u6307\u5c06\u6574\u4e2a NVIDIA GPU \u5206\u914d\u7ed9\u5355\u4e2a\u7528\u6237\u6216\u5e94\u7528\u7a0b\u5e8f\u3002\u5728\u8fd9\u79cd\u914d\u7f6e\u4e0b\uff0c\u5e94\u7528\u53ef\u4ee5\u5b8c\u5168\u5360\u7528 GPU \u7684\u6240\u6709\u8d44\u6e90\uff0c \u5e76\u83b7\u5f97\u6700\u5927\u7684\u8ba1\u7b97\u6027\u80fd\u3002\u6574\u5361\u9002\u7528\u4e8e\u9700\u8981\u5927\u91cf\u8ba1\u7b97\u8d44\u6e90\u548c\u5185\u5b58\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5982\u6df1\u5ea6\u5b66\u4e60\u8bad\u7ec3\u3001\u79d1\u5b66\u8ba1\u7b97\u7b49\u3002

                    "},{"location":"end-user/kpanda/gpu/nvidia/index.html#vgpuvirtual-gpu","title":"vGPU\uff08Virtual GPU\uff09","text":"

                    vGPU \u662f\u4e00\u79cd\u865a\u62df\u5316\u6280\u672f\uff0c\u5141\u8bb8\u5c06\u4e00\u4e2a\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a\u865a\u62df GPU\uff0c\u6bcf\u4e2a\u865a\u62df GPU \u5206\u914d\u7ed9\u4e0d\u540c\u7684\u4e91\u4e3b\u673a\u6216\u7528\u6237\u3002 vGPU \u4f7f\u591a\u4e2a\u7528\u6237\u53ef\u4ee5\u5171\u4eab\u540c\u4e00\u53f0\u7269\u7406 GPU\uff0c\u5e76\u5728\u5404\u81ea\u7684\u865a\u62df\u73af\u5883\u4e2d\u72ec\u7acb\u4f7f\u7528 GPU \u8d44\u6e90\u3002 \u6bcf\u4e2a\u865a\u62df GPU \u53ef\u4ee5\u83b7\u5f97\u4e00\u5b9a\u7684\u8ba1\u7b97\u80fd\u529b\u548c\u663e\u5b58\u5bb9\u91cf\u3002vGPU \u9002\u7528\u4e8e\u865a\u62df\u5316\u73af\u5883\u548c\u4e91\u8ba1\u7b97\u573a\u666f\uff0c\u53ef\u4ee5\u63d0\u4f9b\u66f4\u9ad8\u7684\u8d44\u6e90\u5229\u7528\u7387\u548c\u7075\u6d3b\u6027\u3002

                    "},{"location":"end-user/kpanda/gpu/nvidia/index.html#migmulti-instance-gpu","title":"MIG\uff08Multi-Instance GPU\uff09","text":"

                    MIG \u662f NVIDIA Ampere \u67b6\u6784\u5f15\u5165\u7684\u4e00\u9879\u529f\u80fd\uff0c\u5b83\u5141\u8bb8\u5c06\u4e00\u4e2a\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a\u7269\u7406 GPU \u5b9e\u4f8b\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u53ef\u4ee5\u72ec\u7acb\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u7528\u6237\u6216\u5de5\u4f5c\u8d1f\u8f7d\u3002 \u6bcf\u4e2a MIG \u5b9e\u4f8b\u5177\u6709\u81ea\u5df1\u7684\u8ba1\u7b97\u8d44\u6e90\u3001\u663e\u5b58\u548c PCIe \u5e26\u5bbd\uff0c\u5c31\u50cf\u4e00\u4e2a\u72ec\u7acb\u7684\u865a\u62df GPU\u3002 MIG \u63d0\u4f9b\u4e86\u66f4\u7ec6\u7c92\u5ea6\u7684 GPU \u8d44\u6e90\u5206\u914d\u548c\u7ba1\u7406\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u52a8\u6001\u8c03\u6574\u5b9e\u4f8b\u7684\u6570\u91cf\u548c\u5927\u5c0f\u3002 MIG \u9002\u7528\u4e8e\u591a\u79df\u6237\u73af\u5883\u3001\u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f\u548c\u6279\u5904\u7406\u4f5c\u4e1a\u7b49\u573a\u666f\u3002

                    \u65e0\u8bba\u662f\u5728\u865a\u62df\u5316\u73af\u5883\u4e2d\u4f7f\u7528 vGPU\uff0c\u8fd8\u662f\u5728\u7269\u7406 GPU \u4e0a\u4f7f\u7528 MIG\uff0cNVIDIA \u4e3a\u7528\u6237\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u9009\u62e9\u548c\u4f18\u5316 GPU \u8d44\u6e90\u7684\u65b9\u5f0f\u3002 \u7b97\u4e30 AI \u7b97\u529b\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u5168\u9762\u517c\u5bb9\u4e86\u4e0a\u8ff0 NVIDIA \u7684\u80fd\u529b\u7279\u6027\uff0c\u7528\u6237\u53ea\u9700\u901a\u8fc7\u7b80\u5355\u7684\u754c\u9762\u64cd\u4f5c\uff0c\u5c31\u80fd\u591f\u83b7\u5f97\u5168\u90e8 NVIDIA GPU \u7684\u8ba1\u7b97\u80fd\u529b\uff0c\u4ece\u800c\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u7387\u5e76\u964d\u4f4e\u6210\u672c\u3002

                    • Single \u6a21\u5f0f\uff0c\u8282\u70b9\u4ec5\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u5355\u4e00\u7c7b\u578b\u7684 MIG \u8bbe\u5907\uff0c\u8282\u70b9\u4e0a\u7684\u6240\u6709 GPU \u5fc5\u987b\uff1a
                      • \u5c5e\u4e8e\u540c\u4e00\u4e2a\u578b\u53f7\uff08\u4f8b\u5982 A100-SXM-40GB\uff09\uff0c\u53ea\u6709\u540c\u4e00\u578b\u53f7 GPU \u7684 MIG Profile \u624d\u662f\u4e00\u6837\u7684
                      • \u542f\u7528 MIG \u914d\u7f6e\uff0c\u9700\u8981\u91cd\u542f\u673a\u5668\u624d\u80fd\u751f\u6548
                      • \u4e3a\u5728\u6240\u6709\u4ea7\u54c1\u4e2d\u516c\u5f00\u201c\u5b8c\u5168\u76f8\u540c\u201d\u7684 MIG \u8bbe\u5907\u7c7b\u578b\uff0c\u521b\u5efa\u76f8\u540c\u7684GI \u548c CI
                    • Mixed \u6a21\u5f0f\uff0c\u8282\u70b9\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u6df7\u5408 MIG \u8bbe\u5907\u7c7b\u578b\u3002\u8bf7\u6c42\u7279\u5b9a\u7684 MIG \u8bbe\u5907\u7c7b\u578b\u9700\u8981\u8bbe\u5907\u7c7b\u578b\u63d0\u4f9b\u7684\u8ba1\u7b97\u5207\u7247\u6570\u91cf\u548c\u5185\u5b58\u603b\u91cf\u3002
                      • \u8282\u70b9\u4e0a\u7684\u6240\u6709 GPU \u5fc5\u987b\uff1a\u5c5e\u4e8e\u540c\u4e00\u4ea7\u54c1\u7ebf\uff08\u4f8b\u5982 A100-SXM-40GB\uff09
                      • \u6bcf\u4e2a GPU \u53ef\u542f\u7528\u6216\u4e0d\u542f\u7528 MIG\uff0c\u5e76\u4e14\u53ef\u4ee5\u81ea\u7531\u914d\u7f6e\u4efb\u4f55\u53ef\u7528 MIG \u8bbe\u5907\u7c7b\u578b\u7684\u6df7\u5408\u642d\u914d\u3002
                      • \u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 k8s-device-plugin \u5c06\uff1a
                        • \u4f7f\u7528\u4f20\u7edf\u7684 nvidia.com/gpu \u8d44\u6e90\u7c7b\u578b\u516c\u5f00\u4efb\u4f55\u4e0d\u5904\u4e8e MIG \u6a21\u5f0f\u7684 GPU
                        • \u4f7f\u7528\u9075\u5faa\u67b6\u6784 nvidia.com/mig-g.gb \u7684\u8d44\u6e90\u7c7b\u578b\u516c\u5f00\u5404\u4e2a MIG \u8bbe\u5907

                          \u5f00\u542f\u914d\u7f6e\u8be6\u60c5\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/index.html#_1","title":"\u5982\u4f55\u4f7f\u7528","text":"

                          \u60a8\u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u94fe\u63a5\uff0c\u5feb\u901f\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5173\u4e8e NVIDIA GPU \u5361\u7684\u7ba1\u7406\u80fd\u529b\u3002

                          • NVIDIA GPU \u6574\u5361\u4f7f\u7528
                          • NVIDIA vGPU \u4f7f\u7528
                          • NVIDIA MIG \u4f7f\u7528
                          "},{"location":"end-user/kpanda/gpu/nvidia/full_gpu_userguide.html","title":"\u5e94\u7528\u4f7f\u7528 GPU \u6574\u5361","text":"

                          \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5c06\u6574\u4e2a NVIDIA GPU \u5361\u5206\u914d\u7ed9\u5355\u4e2a\u5e94\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/full_gpu_userguide.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
                          • \u5f53\u524d\u96c6\u7fa4\u5df2\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u5e76\u5df2\u542f\u7528 NVIDIA DevicePlugin \uff0c\u53ef\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5\u3002
                          • \u5f53\u524d\u96c6\u7fa4\u5185 GPU \u5361\u672a\u8fdb\u884c\u4efb\u4f55\u865a\u62df\u5316\u64cd\u4f5c\u6216\u88ab\u5176\u5b83\u5e94\u7528\u5360\u7528\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/full_gpu_userguide.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"end-user/kpanda/gpu/nvidia/full_gpu_userguide.html#ui","title":"\u4f7f\u7528 UI \u754c\u9762\u914d\u7f6e","text":"
                          1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Nvidia GPU \u3002

                          2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Nvidia GPU\uff09\u4e4b\u540e\uff0c\u9700\u8981\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7684\u7269\u7406\u5361\u6570\u91cf\uff1a

                            \u7269\u7406\u5361\u6570\u91cf\uff08nvidia.com/gpu\uff09 \uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002

                            \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/full_gpu_userguide.html#yaml","title":"\u4f7f\u7528 YAML \u914d\u7f6e","text":"

                          \u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u7533\u8bf7 GPU \u8d44\u6e90\uff0c\u5728\u8d44\u6e90\u7533\u8bf7\u548c\u9650\u5236\u914d\u7f6e\u4e2d\u589e\u52a0 nvidia.com/gpu: 1 \u53c2\u6570\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7269\u7406\u5361\u7684\u6570\u91cf\u3002

                          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: full-gpu-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: full-gpu-demo\n  template:\n    metadata:\n      labels:\n        app: full-gpu-demo\n    spec:\n      containers:\n      - image: chrstnhntschl/gpu_burn\n        name: container-0\n        resources:\n          requests:\n            cpu: 250m\n            memory: 512Mi\n            nvidia.com/gpu: 1   # \u7533\u8bf7 GPU \u7684\u6570\u91cf\n          limits:\n            cpu: 250m\n            memory: 512Mi\n            nvidia.com/gpu: 1   # GPU \u6570\u91cf\u7684\u4f7f\u7528\u4e0a\u9650\n      imagePullSecrets:\n      - name: default-secret\n

                          Note

                          \u4f7f\u7528 nvidia.com/gpu \u53c2\u6570\u6307\u5b9a GPU \u6570\u91cf\u65f6\uff0crequests \u548c limits \u503c\u9700\u8981\u4fdd\u6301\u4e00\u81f4\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html","title":"GPU Operator \u79bb\u7ebf\u5b89\u88c5","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9884\u7f6e\u4e86 Ubuntu22.04\u3001Ubuntu20.04\u3001CentOS 7.9 \u8fd9\u4e09\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u7684 Driver \u955c\u50cf\uff0c\u9a71\u52a8\u7248\u672c\u662f 535.104.12\uff1b \u5e76\u4e14\u5185\u7f6e\u4e86\u5404\u64cd\u4f5c\u7cfb\u7edf\u6240\u9700\u7684 Toolkit \u955c\u50cf\uff0c\u7528\u6237\u4e0d\u518d\u9700\u8981\u624b\u52a8\u79bb\u7ebf Toolkit \u955c\u50cf\u3002

                          \u672c\u6587\u4f7f\u7528 AMD \u67b6\u6784\u7684 CentOS 7.9\uff083.10.0-1160\uff09\u8fdb\u884c\u6f14\u793a\u3002\u5982\u9700\u4f7f\u7528 Red Hat 8.4 \u90e8\u7f72\uff0c \u8bf7\u53c2\u8003\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf\u548c\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5f85\u90e8\u7f72 gpu-operator \u7684\u96c6\u7fa4\u8282\u70b9\u5185\u6838\u7248\u672c\u5fc5\u987b\u5b8c\u5168\u4e00\u81f4\u3002\u8282\u70b9\u6240\u5728\u7684\u53d1\u884c\u7248\u548c GPU \u5361\u578b\u53f7\u5728 GPU \u652f\u6301\u77e9\u9635\u7684\u8303\u56f4\u5185\u3002
                          • \u5b89\u88c5 gpu-operator \u65f6\u9009\u62e9 v23.9.0+2 \u53ca\u4ee5\u4e0a\u7248\u672c
                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 gpu-operator \u63d2\u4ef6\u3002

                          1. \u767b\u5f55\u5e73\u53f0\uff0c\u8fdb\u5165 \u5bb9\u5668\u7ba1\u7406 -> \u5f85\u5b89\u88c5 gpu-operator \u7684\u96c6\u7fa4 -> \u8fdb\u5165\u96c6\u7fa4\u8be6\u60c5\u3002

                          2. \u5728 Helm \u6a21\u677f \u9875\u9762\uff0c\u9009\u62e9 \u5168\u90e8\u4ed3\u5e93 \uff0c\u641c\u7d22 gpu-operator \u3002

                          3. \u9009\u62e9 gpu-operator \uff0c\u70b9\u51fb \u5b89\u88c5 \u3002

                          4. \u53c2\u8003\u4e0b\u6587\u53c2\u6570\u914d\u7f6e\uff0c\u914d\u7f6e gpu-operator \u5b89\u88c5\u53c2\u6570\uff0c\u5b8c\u6210 gpu-operator \u7684\u5b89\u88c5\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_3","title":"\u53c2\u6570\u914d\u7f6e","text":"
                          • systemOS \uff1a\u9009\u62e9\u673a\u5668\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5f53\u524d\u5185\u7f6e\u4e86 Ubuntu 22.04\u3001Ubuntu20.04\u3001Centos7.9 \u3001other \u56db\u4e2a\u9009\u9879\uff0c\u8bf7\u6b63\u786e\u7684\u9009\u62e9\u64cd\u4f5c\u7cfb\u7edf\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_4","title":"\u57fa\u672c\u53c2\u6570\u914d\u7f6e","text":"
                          • \u540d\u79f0 \uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\u3002
                          • \u547d\u540d\u7a7a\u95f4 \uff1a\u9009\u62e9\u5c06\u63d2\u4ef6\u5b89\u88c5\u7684\u547d\u540d\u7a7a\u95f4\u3002
                          • \u7248\u672c \uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 v23.9.0+2 \u7248\u672c\u4e3a\u4f8b\u3002
                          • \u5931\u8d25\u5220\u9664 \uff1a\u5b89\u88c5\u5931\u8d25\uff0c\u5219\u5220\u9664\u5df2\u7ecf\u5b89\u88c5\u7684\u5173\u8054\u8d44\u6e90\u3002\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u3002
                          • \u5c31\u7eea\u7b49\u5f85 \uff1a\u542f\u7528\u540e\uff0c\u6240\u6709\u5173\u8054\u8d44\u6e90\u90fd\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
                          • \u8be6\u60c5\u65e5\u5fd7 \uff1a\u5f00\u542f\u540e\uff0c\u5c06\u8bb0\u5f55\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_5","title":"\u9ad8\u7ea7\u53c2\u6570\u914d\u7f6e","text":""},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#operator","title":"Operator \u53c2\u6570\u914d\u7f6e","text":"
                          • InitContainer.image \uff1a\u914d\u7f6e CUDA \u955c\u50cf\uff0c\u63a8\u8350\u9ed8\u8ba4\u955c\u50cf\uff1a nvidia/cuda
                          • InitContainer.repository \uff1aCUDA \u955c\u50cf\u6240\u5728\u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u9ed8\u8ba4\u4e3a nvcr.m.daocloud.io \u4ed3\u5e93
                          • InitContainer.version : CUDA \u955c\u50cf\u7684\u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u9ed8\u8ba4\u53c2\u6570
                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#driver","title":"Driver \u53c2\u6570\u914d\u7f6e","text":"
                          • Driver.enable \uff1a\u914d\u7f6e\u662f\u5426\u5728\u8282\u70b9\u4e0a\u90e8\u7f72 NVIDIA \u9a71\u52a8\uff0c\u9ed8\u8ba4\u5f00\u542f\uff0c\u5982\u679c\u60a8\u5728\u4f7f\u7528 GPU Operator \u90e8\u7f72\u524d\uff0c\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u90e8\u7f72\u4e86 NVIDIA \u9a71\u52a8\u7a0b\u5e8f\uff0c\u8bf7\u5173\u95ed\u3002\uff08\u82e5\u624b\u52a8\u90e8\u7f72\u9a71\u52a8\u7a0b\u5e8f\u9700\u8981\u5173\u6ce8 CUDA Toolkit \u4e0e Toolkit Driver Version \u7684\u9002\u914d\u5173\u7cfb\uff0c\u901a\u8fc7 GPU operator \u5b89\u88c5\u5219\u65e0\u9700\u5173\u6ce8\uff09\u3002
                          • Driver.usePrecompiled \uff1a\u542f\u7528\u9884\u7f16\u8bd1\u7684GPU\u9a71\u52a8
                          • Driver.image \uff1a\u914d\u7f6e GPU \u9a71\u52a8\u955c\u50cf\uff0c\u63a8\u8350\u9ed8\u8ba4\u955c\u50cf\uff1a nvidia/driver \u3002
                          • Driver.repository \uff1aGPU \u9a71\u52a8\u955c\u50cf\u6240\u5728\u7684\u955c\u50cf\u4ed3\u5e93\uff0c\u9ed8\u8ba4\u4e3a nvidia \u7684 nvcr.io \u4ed3\u5e93\u3002
                          • Driver.usePrecompiled \uff1a\u5f00\u542f\u9884\u7f16\u8bd1\u6a21\u5f0f\u5b89\u88c5\u9a71\u52a8\u3002
                          • Driver.version \uff1aGPU \u9a71\u52a8\u955c\u50cf\u7684\u7248\u672c\uff0c\u79bb\u7ebf\u90e8\u7f72\u8bf7\u4f7f\u7528\u9ed8\u8ba4\u53c2\u6570\uff0c\u4ec5\u5728\u7ebf\u5b89\u88c5\u65f6\u9700\u914d\u7f6e\u3002\u4e0d\u540c\u7c7b\u578b\u64cd\u4f5c\u7cfb\u7edf\u7684 Driver \u955c\u50cf\u7684\u7248\u672c\u5b58\u5728\u5982\u4e0b\u5dee\u5f02\uff0c \u8be6\u60c5\u53ef\u53c2\u8003\uff1aNvidia GPU Driver \u7248\u672c\u3002 \u5982\u4e0b\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u7684 Driver Version \u793a\u4f8b\uff1a

                            Note

                            \u4f7f\u7528\u5185\u7f6e\u7684\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u65e0\u9700\u4fee\u6539\u955c\u50cf\u7248\u672c\uff0c\u5176\u4ed6\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u8bf7\u53c2\u8003\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20\u955c\u50cf\u3002 \u6ce8\u610f\u7248\u672c\u53f7\u540e\u65e0\u9700\u586b\u5199 Ubuntu\u3001CentOS\u3001Red Hat \u7b49\u64cd\u4f5c\u7cfb\u7edf\u540d\u79f0\uff0c\u82e5\u5b98\u65b9\u955c\u50cf\u542b\u6709\u64cd\u4f5c\u7cfb\u7edf\u540e\u7f00\uff0c\u8bf7\u624b\u52a8\u79fb\u9664\u3002

                            • Red Hat \u7cfb\u7edf\uff0c\u4f8b\u5982 525.105.17
                            • Ubuntu \u7cfb\u7edf\uff0c\u4f8b\u5982 535-5.15.0-1043-nvidia
                            • CentOS \u7cfb\u7edf\uff0c\u4f8b\u5982 525.147.05
                          • Driver.RepoConfig.ConfigMapName \uff1a\u7528\u6765\u8bb0\u5f55 GPU Operator \u7684\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\uff0c \u5f53\u4f7f\u7528\u9884\u7f6e\u7684\u79bb\u7ebf\u5305\u65f6\uff0c\u5404\u7c7b\u578b\u7684\u64cd\u4f5c\u7cfb\u7edf\u8bf7\u53c2\u8003\u5982\u4e0b\u7684\u6587\u6863\u3002

                            • \u6784\u5efa CentOS 7.9 \u79bb\u7ebf yum \u6e90
                            • \u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90
                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#toolkit","title":"Toolkit \u914d\u7f6e\u53c2\u6570","text":"

                          Toolkit.enable \uff1a\u9ed8\u8ba4\u5f00\u542f\uff0c\u8be5\u7ec4\u4ef6\u8ba9 conatainerd/docker \u652f\u6301\u8fd0\u884c\u9700\u8981 GPU \u7684\u5bb9\u5668\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#mig","title":"MIG \u914d\u7f6e\u53c2\u6570","text":"

                          \u8be6\u7ec6\u914d\u7f6e\u65b9\u5f0f\u8bf7\u53c2\u8003\u5f00\u542f MIG \u529f\u80fd

                          MigManager.Config.name \uff1aMIG \u7684\u5207\u5206\u914d\u7f6e\u6587\u4ef6\u540d\uff0c\u7528\u4e8e\u5b9a\u4e49 MIG \u7684\uff08GI, CI\uff09\u5207\u5206\u7b56\u7565\u3002 \u9ed8\u8ba4\u4e3a default-mig-parted-config \u3002\u81ea\u5b9a\u4e49\u53c2\u6570\u53c2\u8003\u5f00\u542f MIG \u529f\u80fd\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html#_6","title":"\u4e0b\u4e00\u6b65\u64cd\u4f5c","text":"

                          \u5b8c\u6210\u4e0a\u8ff0\u76f8\u5173\u53c2\u6570\u914d\u7f6e\u548c\u521b\u5efa\u540e\uff1a

                          • \u5982\u679c\u4f7f\u7528 \u6574\u5361\u6a21\u5f0f\uff0c\u5e94\u7528\u521b\u5efa\u65f6\u53ef\u4f7f\u7528 GPU \u8d44\u6e90

                          • \u5982\u679c\u4f7f\u7528 vGPU \u6a21\u5f0f \uff0c\u5b8c\u6210\u4e0a\u8ff0\u76f8\u5173\u53c2\u6570\u914d\u7f6e\u548c\u521b\u5efa\u540e\uff0c\u4e0b\u4e00\u6b65\u8bf7\u5b8c\u6210 vGPU Addon \u5b89\u88c5

                          • \u5982\u679c\u4f7f\u7528 MIG \u6a21\u5f0f\uff0c\u5e76\u4e14\u9700\u8981\u7ed9\u4e2a\u522b GPU \u8282\u70b9\u6309\u7167\u67d0\u79cd\u5207\u5206\u89c4\u683c\u8fdb\u884c\u4f7f\u7528\uff0c \u5426\u5219\u6309\u7167 MigManager.Config \u4e2d\u7684 default \u503c\u8fdb\u884c\u5207\u5206\u3002

                            • single \u6a21\u5f0f\u8bf7\u7ed9\u5bf9\u5e94\u8282\u70b9\u6253\u4e0a\u5982\u4e0b Label\uff1a

                              kubectl label nodes {node} nvidia.com/mig.config=\"all-1g.10gb\" --overwrite\n
                            • mixed \u6a21\u5f0f\u8bf7\u7ed9\u5bf9\u5e94\u8282\u70b9\u6253\u4e0a\u5982\u4e0b Label\uff1a

                              kubectl label nodes {node} nvidia.com/mig.config=\"custom-config\" --overwrite\n

                          \u200b \u5207\u5206\u540e\uff0c\u5e94\u7528\u53ef\u4f7f\u7528 MIG GPU \u8d44\u6e90\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/push_image_to_repo.html","title":"\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf","text":"

                          \u672c\u6587\u4ee5 Red Hat 8.4 \u7684 nvcr.io/nvidia/driver:525.105.17-rhel8.4 \u79bb\u7ebf\u9a71\u52a8\u955c\u50cf\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20\u79bb\u7ebf\u955c\u50cf\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/push_image_to_repo.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          1. \u706b\u79cd\u8282\u70b9\u53ca\u5176\u7ec4\u4ef6\u72b6\u6001\u8fd0\u884c\u6b63\u5e38\u3002
                          2. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u706b\u79cd\u8282\u70b9\u7684\u8282\u70b9\uff0c\u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/push_image_to_repo.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"end-user/kpanda/gpu/nvidia/push_image_to_repo.html#_3","title":"\u5728\u8054\u7f51\u8282\u70b9\u83b7\u53d6\u79bb\u7ebf\u955c\u50cf","text":"

                          \u4ee5\u4e0b\u64cd\u4f5c\u5728\u8054\u7f51\u8282\u70b9\u4e0a\u8fdb\u884c\u3002

                          1. \u5728\u8054\u7f51\u673a\u5668\u4e0a\u62c9\u53d6 nvcr.io/nvidia/driver:525.105.17-rhel8.4 \u79bb\u7ebf\u9a71\u52a8\u955c\u50cf\uff1a

                            docker pull nvcr.io/nvidia/driver:525.105.17-rhel8.4\n
                          2. \u955c\u50cf\u62c9\u53d6\u5b8c\u6210\u540e\uff0c\u6253\u5305\u955c\u50cf\u4e3a nvidia-driver.tar \u538b\u7f29\u5305\uff1a

                            docker save nvcr.io/nvidia/driver:525.105.17-rhel8.4 > nvidia-driver.tar\n
                          3. \u62f7\u8d1d nvidia-driver.tar \u955c\u50cf\u538b\u7f29\u5305\u5230\u706b\u79cd\u8282\u70b9\uff1a

                            scp  nvidia-driver.tar user@ip:/root\n

                            \u4f8b\u5982\uff1a

                            scp  nvidia-driver.tar root@10.6.175.10:/root\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/push_image_to_repo.html#_4","title":"\u63a8\u9001\u955c\u50cf\u5230\u706b\u79cd\u8282\u70b9\u4ed3\u5e93","text":"

                          \u4ee5\u4e0b\u64cd\u4f5c\u5728\u706b\u79cd\u8282\u70b9\u4e0a\u8fdb\u884c\u3002

                          1. \u767b\u5f55\u706b\u79cd\u8282\u70b9\uff0c\u5c06\u8054\u7f51\u8282\u70b9\u62f7\u8d1d\u7684\u955c\u50cf\u538b\u7f29\u5305 nvidia-driver.tar \u5bfc\u5165\u672c\u5730\uff1a

                            docker load -i nvidia-driver.tar\n
                          2. \u67e5\u770b\u521a\u521a\u5bfc\u5165\u7684\u955c\u50cf\uff1a

                            docker images -a |grep nvidia\n

                            \u9884\u671f\u8f93\u51fa\uff1a

                            nvcr.io/nvidia/driver                 e3ed7dee73e9   1 days ago   1.02GB\n
                          3. \u91cd\u65b0\u6807\u8bb0\u955c\u50cf\uff0c\u4f7f\u5176\u4e0e\u8fdc\u7a0b Registry \u4ed3\u5e93\u4e2d\u7684\u76ee\u6807\u4ed3\u5e93\u5bf9\u5e94\uff1a

                            docker tag <image-name> <registry-url>/<repository-name>:<tag>\n
                            • <image-name> \u662f\u4e0a\u4e00\u6b65 nvidia \u955c\u50cf\u7684\u540d\u79f0\uff0c
                            • <registry-url> \u662f\u706b\u79cd\u8282\u70b9\u4e0a Registry \u670d\u52a1\u7684\u5730\u5740\uff0c
                            • <repository-name> \u662f\u60a8\u8981\u63a8\u9001\u5230\u7684\u4ed3\u5e93\u540d\u79f0\uff0c
                            • <tag> \u662f\u60a8\u4e3a\u955c\u50cf\u6307\u5b9a\u7684\u6807\u7b7e\u3002

                            \u4f8b\u5982\uff1a

                            registry\uff1adocker tag nvcr.io/nvidia/driver 10.6.10.5/nvcr.io/nvidia/driver:525.105.17-rhel8.4\n
                          4. \u5c06\u955c\u50cf\u63a8\u9001\u5230\u706b\u79cd\u8282\u70b9\u955c\u50cf\u4ed3\u5e93\uff1a

                            docker push {ip}/nvcr.io/nvidia/driver:525.105.17-rhel8.4\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/push_image_to_repo.html#_5","title":"\u63a5\u4e0b\u6765","text":"

                          \u53c2\u8003\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u548c GPU Operator \u79bb\u7ebf\u5b89\u88c5\u6765\u4e3a\u96c6\u7fa4\u90e8\u7f72 GPU Operator\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html","title":"RHEL 9.2 \u79bb\u7ebf\u5b89\u88c5 gpu-operator \u9a71\u52a8","text":"

                          \u524d\u63d0\u6761\u4ef6\uff1a\u5df2\u5b89\u88c5 gpu-operator v23.9.0+2 \u53ca\u66f4\u9ad8\u7248\u672c

                          RHEL 9.2 \u9a71\u52a8\u955c\u50cf\u4e0d\u80fd\u76f4\u63a5\u5b89\u88c5\uff0c\u5b98\u65b9\u7684\u9a71\u52a8\u811a\u672c\u5b58\u5728\u4e00\u70b9\u95ee\u9898\uff0c\u5728\u5b98\u65b9\u4fee\u590d\u4e4b\u524d\uff0c\u63d0\u4f9b\u5982\u4e0b\u7684\u6b65\u9aa4\u6765\u5b9e\u73b0\u79bb\u7ebf\u5b89\u88c5\u9a71\u52a8\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html#nouveau","title":"\u7981\u7528nouveau\u9a71\u52a8","text":"

                          \u5728 RHEL 9.2 \u4e2d\u5b58\u5728 nouveau \u975e\u5b98\u65b9\u7684 Nvidia \u9a71\u52a8\uff0c\u56e0\u6b64\u9700\u8981\u5148\u7981\u7528\u3002

                          # \u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6587\u4ef6\nsudo vi /etc/modprobe.d/blacklist-nouveau.conf\n# \u6dfb\u52a0\u4ee5\u4e0b\u4e24\u884c\u5185\u5bb9:\nblacklist nouveau\noptions nouveau modeset=0\n# \u7981\u7528Nouveau\nsudo dracut --force\n# \u91cd\u542fvm\nsudo reboot\n# \u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u6210\u529f\u7981\u7528\nlsmod | grep nouveau\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html#_1","title":"\u81ea\u5b9a\u4e49\u9a71\u52a8\u955c\u50cf","text":"

                          \u5148\u5728\u672c\u5730\u521b\u5efa nvidia-driver \u6587\u4ef6\uff1a

                          \u70b9\u51fb\u67e5\u770b\u5b8c\u6574\u7684 nvidia-driver \u6587\u4ef6\u5185\u5bb9
                          #! /bin/bash -x\n# Copyright (c) 2018-2020, NVIDIA CORPORATION. All rights reserved.\n\nset -eu\n\nRUN_DIR=/run/nvidia\nPID_FILE=${RUN_DIR}/${0##*/}.pid\nDRIVER_VERSION=${DRIVER_VERSION:?\"Missing DRIVER_VERSION env\"}\nKERNEL_UPDATE_HOOK=/run/kernel/postinst.d/update-nvidia-driver\nNUM_VGPU_DEVICES=0\nNVIDIA_MODULE_PARAMS=()\nNVIDIA_UVM_MODULE_PARAMS=()\nNVIDIA_MODESET_MODULE_PARAMS=()\nNVIDIA_PEERMEM_MODULE_PARAMS=()\nTARGETARCH=${TARGETARCH:?\"Missing TARGETARCH env\"}\nUSE_HOST_MOFED=\"${USE_HOST_MOFED:-false}\"\nDNF_RELEASEVER=${DNF_RELEASEVER:-\"\"}\nRHEL_VERSION=${RHEL_VERSION:-\"\"}\nRHEL_MAJOR_VERSION=9\n\nOPEN_KERNEL_MODULES_ENABLED=${OPEN_KERNEL_MODULES_ENABLED:-false}\n[[ \"${OPEN_KERNEL_MODULES_ENABLED}\" == \"true\" ]] && KERNEL_TYPE=kernel-open || KERNEL_TYPE=kernel\n\nDRIVER_ARCH=${TARGETARCH/amd64/x86_64} && DRIVER_ARCH=${DRIVER_ARCH/arm64/aarch64}\necho \"DRIVER_ARCH is $DRIVER_ARCH\"\n\nSCRIPT_DIR=$( cd -- \"$( dirname -- \"${BASH_SOURCE[0]}\" )\" &> /dev/null && pwd )\nsource $SCRIPT_DIR/common.sh\n\n_update_package_cache() {\n    if [ \"${PACKAGE_TAG:-}\" != \"builtin\" ]; then\n        echo \"Updating the package cache...\"\n        if ! yum -q makecache; then\n            echo \"FATAL: failed to reach RHEL package repositories. \"\\\n                 \"Ensure that the cluster can access the proper networks.\"\n            exit 1\n        fi\n    fi\n}\n\n_cleanup_package_cache() {\n    if [ \"${PACKAGE_TAG:-}\" != \"builtin\" ]; then\n        echo \"Cleaning up the package cache...\"\n        rm -rf /var/cache/yum/*\n    fi\n}\n\n_get_rhel_version_from_kernel() {\n    local rhel_version_underscore rhel_version_arr\n    rhel_version_underscore=$(echo \"${KERNEL_VERSION}\" | sed 's/.*el\\([0-9]\\+_[0-9]\\+\\).*/\\1/g')\n    # For e.g. :- from the kernel version 4.18.0-513.9.1.el8_9, we expect to extract the string \"8_9\"\n    if [[ ! ${rhel_version_underscore} =~ ^[0-9]+_[0-9]+$ ]]; then\n        echo \"Unable to resolve RHEL version from kernel version\" >&2\n        return 1\n    fi\n    IFS='_' read -r -a rhel_version_arr <<< \"$rhel_version_underscore\"\n    if [[ ${#rhel_version_arr[@]} -ne 2 ]]; then\n        echo \"Unable to resolve RHEL version from kernel version\" >&2\n        return 1\n    fi\n    RHEL_VERSION=\"${rhel_version_arr[0]}.${rhel_version_arr[1]}\"\n    echo \"RHEL VERSION successfully resolved from kernel: ${RHEL_VERSION}\"\n    return 0\n}\n\n_resolve_rhel_version() {\n    _get_rhel_version_from_kernel || RHEL_VERSION=\"${RHEL_MAJOR_VERSION}\"\n    # set dnf release version as rhel version by default\n    if [[ -z \"${DNF_RELEASEVER}\" ]]; then\n        DNF_RELEASEVER=\"${RHEL_VERSION}\"\n    fi\n    return 0\n}\n\n# Resolve the kernel version to the form major.minor.patch-revision.\n_resolve_kernel_version() {\n    echo \"Resolving Linux kernel version...\"\n    local version=$(yum -q list available --showduplicates kernel-headers |\n      awk -v arch=$(uname -m) 'NR>1 {print $2\".\"arch}' | tac | grep -E -m1 \"^${KERNEL_VERSION/latest/.*}\")\n\n    if [ -z \"${version}\" ]; then\n        echo \"Could not resolve Linux kernel version\" >&2\n        return 1\n    fi\n    KERNEL_VERSION=\"${version}\"\n    echo \"Proceeding with Linux kernel version ${KERNEL_VERSION}\"\n    return 0\n}\n\n# Install the kernel modules header/builtin/order files and generate the kernel version string.\n_install_prerequisites() (\n    local tmp_dir=$(mktemp -d)\n\n    trap \"rm -rf ${tmp_dir}\" EXIT\n    cd ${tmp_dir}\n\n    echo \"Installing elfutils...\"\n    if ! dnf install -q -y elfutils-libelf.$DRIVER_ARCH; then\n        echo \"FATAL: failed to install elfutils packages. RHEL entitlement may be improperly deployed.\"\n        exit 1\n    fi\n    if ! dnf install -q -y elfutils-libelf-devel.$DRIVER_ARCH; then\n        echo \"FATAL: failed to install elfutils packages. RHEL entitlement may be improperly deployed.\"\n        exit 1\n    fi    \n\n    rm -rf /lib/modules/${KERNEL_VERSION}\n    mkdir -p /lib/modules/${KERNEL_VERSION}/proc\n\n    echo \"Enabling RHOCP and EUS RPM repos...\"\n    if [ -n \"${OPENSHIFT_VERSION:-}\" ]; then\n        dnf config-manager --set-enabled rhocp-${OPENSHIFT_VERSION}-for-rhel-9-$DRIVER_ARCH-rpms || true\n        if ! dnf makecache --releasever=${DNF_RELEASEVER}; then\n            dnf config-manager --set-disabled rhocp-${OPENSHIFT_VERSION}-for-rhel-9-$DRIVER_ARCH-rpms || true\n        fi\n    fi\n\n    dnf config-manager --set-enabled rhel-9-for-$DRIVER_ARCH-baseos-eus-rpms  || true\n    if ! dnf makecache --releasever=${DNF_RELEASEVER}; then\n            dnf config-manager --set-disabled rhel-9-for-$DRIVER_ARCH-baseos-eus-rpms || true\n    fi\n\n    # try with EUS disabled, if it does not work, then try just major version\n    if ! dnf makecache --releasever=${DNF_RELEASEVER}; then\n      # If pointing to DNF_RELEASEVER does not work, we point to the RHEL_MAJOR_VERSION as a last resort\n      if ! dnf makecache --releasever=${RHEL_MAJOR_VERSION}; then\n        echo \"FATAL: failed to update the dnf metadata cache after multiple attempts with releasevers ${DNF_RELEASEVER}, ${RHEL_MAJOR_VERSION}\"\n        exit 1\n      else\n        DNF_RELEASEVER=${RHEL_MAJOR_VERSION}\n      fi\n    fi\n\n    echo \"Installing Linux kernel headers...\"\n    dnf -q -y --releasever=${DNF_RELEASEVER} install kernel-headers-${KERNEL_VERSION} kernel-devel-${KERNEL_VERSION} --allowerasing > /dev/null\n    ln -s /usr/src/kernels/${KERNEL_VERSION} /lib/modules/${KERNEL_VERSION}/build\n\n    echo \"Installing Linux kernel module files...\"\n    dnf -q -y --releasever=${DNF_RELEASEVER} install kernel-core-${KERNEL_VERSION} > /dev/null\n\n    # Prevent depmod from giving a WARNING about missing files\n    touch /lib/modules/${KERNEL_VERSION}/modules.order\n    touch /lib/modules/${KERNEL_VERSION}/modules.builtin\n\n    depmod ${KERNEL_VERSION}\n\n    echo \"Generating Linux kernel version string...\"\n    if [ \"$TARGETARCH\" = \"arm64\" ]; then\n        gunzip -c /lib/modules/${KERNEL_VERSION}/vmlinuz | strings | grep -E '^Linux version' | sed 's/^\\(.*\\)\\s\\+(.*)$/\\1/' > version\n    else\n        extract-vmlinux /lib/modules/${KERNEL_VERSION}/vmlinuz | strings | grep -E '^Linux version' | sed 's/^\\(.*\\)\\s\\+(.*)$/\\1/' > version\n    fi\n    if [ -z \"$(<version)\" ]; then\n        echo \"Could not locate Linux kernel version string\" >&2\n        return 1\n    fi\n    mv version /lib/modules/${KERNEL_VERSION}/proc\n\n    # Parse gcc version\n    # gcc_version is expected to match x.y.z\n    # current_gcc is expected to match 'gcc-x.y.z-rel.el8.x86_64\n    local gcc_version=$(cat /lib/modules/${KERNEL_VERSION}/proc/version | grep -Eo \"gcc \\(GCC\\) ([0-9\\.]+)\" | grep -Eo \"([0-9\\.]+)\")\n    local current_gcc=$(rpm -qa gcc)\n    echo \"kernel requires gcc version: 'gcc-${gcc_version}', current gcc version is '${current_gcc}'\"\n\n    if ! [[ \"${current_gcc}\" =~ \"gcc-${gcc_version}\"-.* ]]; then\n        dnf install -q -y --releasever=${DNF_RELEASEVER} \"gcc-${gcc_version}\"\n    fi\n)\n\n# Cleanup the prerequisites installed above.\n_remove_prerequisites() {\n    true\n    if [ \"${PACKAGE_TAG:-}\" != \"builtin\" ]; then\n        dnf -q -y remove kernel-headers-${KERNEL_VERSION} kernel-devel-${KERNEL_VERSION} > /dev/null\n        # TODO remove module files not matching an existing driver package.\n    fi\n}\n\n# Check if the kernel version requires a new precompiled driver packages.\n_kernel_requires_package() {\n    local proc_mount_arg=\"\"\n\n    echo \"Checking NVIDIA driver packages...\"\n\n    [[ ! -d /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE} ]] && return 0\n    cd /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE}\n\n    proc_mount_arg=\"--proc-mount-point /lib/modules/${KERNEL_VERSION}/proc\"\n    for pkg_name in $(ls -d -1 precompiled/** 2> /dev/null); do\n        is_match=$(../mkprecompiled --match ${pkg_name} ${proc_mount_arg})\n        if [ \"${is_match}\" == \"kernel interface matches.\" ]; then\n            echo \"Found NVIDIA driver package ${pkg_name##*/}\"\n            return 1\n        fi\n    done\n    return 0\n}\n\n# Compile the kernel modules, optionally sign them, and generate a precompiled package for use by the nvidia-installer.\n_create_driver_package() (\n    local pkg_name=\"nvidia-modules-${KERNEL_VERSION%%-*}${PACKAGE_TAG:+-${PACKAGE_TAG}}\"\n    local nvidia_sign_args=\"\"\n    local nvidia_modeset_sign_args=\"\"\n    local nvidia_uvm_sign_args=\"\"\n\n    trap \"make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build clean > /dev/null\" EXIT\n\n    echo \"Compiling NVIDIA driver kernel modules...\"\n    cd /usr/src/nvidia-${DRIVER_VERSION}/${KERNEL_TYPE}\n\n    if _gpu_direct_rdma_enabled; then\n        ln -s /run/mellanox/drivers/usr/src/ofa_kernel /usr/src/\n        # if arch directory exists(MOFED >=5.5) then create a symlink as expected by GPU driver installer\n        # This is required as currently GPU driver installer doesn't expect headers in x86_64 folder, but only in either default or kernel-version folder.\n        # ls -ltr /usr/src/ofa_kernel/\n        # lrwxrwxrwx 1 root root   36 Dec  8 20:10 default -> /etc/alternatives/ofa_kernel_headers\n        # drwxr-xr-x 4 root root 4096 Dec  8 20:14 x86_64\n        # lrwxrwxrwx 1 root root   44 Dec  9 19:05 5.4.0-90-generic -> /usr/src/ofa_kernel/x86_64/5.4.0-90-generic/\n        if [[ -d \"/run/mellanox/drivers/usr/src/ofa_kernel/$(uname -m)/$(uname -r)\" ]]; then\n            if [[ ! -e \"/usr/src/ofa_kernel/$(uname -r)\" ]]; then\n                ln -s \"/run/mellanox/drivers/usr/src/ofa_kernel/$(uname -m)/$(uname -r)\" /usr/src/ofa_kernel/\n            fi\n        fi\n    fi\n\n    make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION}/build nv-linux.o nv-modeset-linux.o > /dev/null\n\n    echo \"Relinking NVIDIA driver kernel modules...\"\n    rm -f nvidia.ko nvidia-modeset.ko\n    ld -d -r -o nvidia.ko ./nv-linux.o ./nvidia/nv-kernel.o_binary\n    ld -d -r -o nvidia-modeset.ko ./nv-modeset-linux.o ./nvidia-modeset/nv-modeset-kernel.o_binary\n\n    if [ -n \"${PRIVATE_KEY}\" ]; then\n        echo \"Signing NVIDIA driver kernel modules...\"\n        donkey get ${PRIVATE_KEY} sh -c \"PATH=${PATH}:/usr/src/linux-headers-${KERNEL_VERSION}/scripts && \\\n          sign-file sha512 \\$DONKEY_FILE pubkey.x509 nvidia.ko nvidia.ko.sign &&                          \\\n          sign-file sha512 \\$DONKEY_FILE pubkey.x509 nvidia-modeset.ko nvidia-modeset.ko.sign &&          \\\n          sign-file sha512 \\$DONKEY_FILE pubkey.x509 nvidia-uvm.ko\"\n        nvidia_sign_args=\"--linked-module nvidia.ko --signed-module nvidia.ko.sign\"\n        nvidia_modeset_sign_args=\"--linked-module nvidia-modeset.ko --signed-module nvidia-modeset.ko.sign\"\n        nvidia_uvm_sign_args=\"--signed\"\n    fi\n\n    echo \"Building NVIDIA driver package ${pkg_name}...\"\n    ../mkprecompiled --pack ${pkg_name} --description ${KERNEL_VERSION}                              \\\n                                        --proc-mount-point /lib/modules/${KERNEL_VERSION}/proc       \\\n                                        --driver-version ${DRIVER_VERSION}                           \\\n                                        --kernel-interface nv-linux.o                                \\\n                                        --linked-module-name nvidia.ko                               \\\n                                        --core-object-name nvidia/nv-kernel.o_binary                 \\\n                                        ${nvidia_sign_args}                                          \\\n                                        --target-directory .                                         \\\n                                        --kernel-interface nv-modeset-linux.o                        \\\n                                        --linked-module-name nvidia-modeset.ko                       \\\n                                        --core-object-name nvidia-modeset/nv-modeset-kernel.o_binary \\\n                                        ${nvidia_modeset_sign_args}                                  \\\n                                        --target-directory .                                         \\\n                                        --kernel-module nvidia-uvm.ko                                \\\n                                        ${nvidia_uvm_sign_args}                                      \\\n                                        --target-directory .\n    mkdir -p precompiled\n    mv ${pkg_name} precompiled\n)\n\n_assert_nvswitch_system() {\n    [ -d /proc/driver/nvidia-nvswitch ] || return 1\n    entries=$(ls -1 /proc/driver/nvidia-nvswitch/devices/*)\n    if [ -z \"${entries}\" ]; then\n        return 1\n    fi\n    return 0\n}\n\n# For each kernel module configuration file mounted into the container,\n# parse the file contents and extract the custom module parameters that\n# are to be passed as input to 'modprobe'.\n#\n# Assumptions:\n# - Configuration files are named <module-name>.conf (i.e. nvidia.conf, nvidia-uvm.conf).\n# - Configuration files are mounted inside the container at /drivers.\n# - Each line in the file contains at least one parameter, where parameters on the same line\n#   are space delimited. It is up to the user to properly format the file to ensure\n#   the correct set of parameters are passed to 'modprobe'.\n_get_module_params() {\n    local base_path=\"/drivers\"\n    # nvidia\n    if [ -f \"${base_path}/nvidia.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia.conf\"\n       echo \"Module parameters provided for nvidia: ${NVIDIA_MODULE_PARAMS[@]}\"\n    fi\n    # nvidia-uvm\n    if [ -f \"${base_path}/nvidia-uvm.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_UVM_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia-uvm.conf\"\n       echo \"Module parameters provided for nvidia-uvm: ${NVIDIA_UVM_MODULE_PARAMS[@]}\"\n    fi\n    # nvidia-modeset\n    if [ -f \"${base_path}/nvidia-modeset.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_MODESET_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia-modeset.conf\"\n       echo \"Module parameters provided for nvidia-modeset: ${NVIDIA_MODESET_MODULE_PARAMS[@]}\"\n    fi\n    # nvidia-peermem\n    if [ -f \"${base_path}/nvidia-peermem.conf\" ]; then\n       while IFS=\"\" read -r param || [ -n \"$param\" ]; do\n           NVIDIA_PEERMEM_MODULE_PARAMS+=(\"$param\")\n       done <\"${base_path}/nvidia-peermem.conf\"\n       echo \"Module parameters provided for nvidia-peermem: ${NVIDIA_PEERMEM_MODULE_PARAMS[@]}\"\n    fi\n}\n\n# Load the kernel modules and start persistenced.\n_load_driver() {\n    echo \"Parsing kernel module parameters...\"\n    _get_module_params\n\n    local nv_fw_search_path=\"$RUN_DIR/driver/lib/firmware\"\n    local set_fw_path=\"true\"\n    local fw_path_config_file=\"/sys/module/firmware_class/parameters/path\"\n    for param in \"${NVIDIA_MODULE_PARAMS[@]}\"; do\n        if [[ \"$param\" == \"NVreg_EnableGpuFirmware=0\" ]]; then\n          set_fw_path=\"false\"\n        fi\n    done\n\n    if [[ \"$set_fw_path\" == \"true\" ]]; then\n        echo \"Configuring the following firmware search path in '$fw_path_config_file': $nv_fw_search_path\"\n        if [[ ! -z $(grep '[^[:space:]]' $fw_path_config_file) ]]; then\n            echo \"WARNING: A search path is already configured in $fw_path_config_file\"\n            echo \"         Retaining the current configuration\"\n        else\n            echo -n \"$nv_fw_search_path\" > $fw_path_config_file || echo \"WARNING: Failed to configure the firmware search path\"\n        fi\n    fi\n\n    echo \"Loading ipmi and i2c_core kernel modules...\"\n    modprobe -a i2c_core ipmi_msghandler ipmi_devintf\n\n    echo \"Loading NVIDIA driver kernel modules...\"\n    set -o xtrace +o nounset\n    modprobe nvidia \"${NVIDIA_MODULE_PARAMS[@]}\"\n    modprobe nvidia-uvm \"${NVIDIA_UVM_MODULE_PARAMS[@]}\"\n    modprobe nvidia-modeset \"${NVIDIA_MODESET_MODULE_PARAMS[@]}\"\n    set +o xtrace -o nounset\n\n    if _gpu_direct_rdma_enabled; then\n        echo \"Loading NVIDIA Peer Memory kernel module...\"\n        set -o xtrace +o nounset\n        modprobe -a nvidia-peermem \"${NVIDIA_PEERMEM_MODULE_PARAMS[@]}\"\n        set +o xtrace -o nounset\n    fi\n\n    echo \"Starting NVIDIA persistence daemon...\"\n    nvidia-persistenced --persistence-mode\n\n    if [ \"${DRIVER_TYPE}\" = \"vgpu\" ]; then\n        echo \"Copying gridd.conf...\"\n        cp /drivers/gridd.conf /etc/nvidia/gridd.conf\n        if [ \"${VGPU_LICENSE_SERVER_TYPE}\" = \"NLS\" ]; then\n            echo \"Copying ClientConfigToken...\"\n            mkdir -p  /etc/nvidia/ClientConfigToken/\n            cp /drivers/ClientConfigToken/* /etc/nvidia/ClientConfigToken/\n        fi\n\n        echo \"Starting nvidia-gridd..\"\n        LD_LIBRARY_PATH=/usr/lib64/nvidia/gridd nvidia-gridd\n\n        # Start virtual topology daemon\n        _start_vgpu_topology_daemon\n    fi\n\n    if _assert_nvswitch_system; then\n        echo \"Starting NVIDIA fabric manager daemon...\"\n        nv-fabricmanager -c /usr/share/nvidia/nvswitch/fabricmanager.cfg\n    fi\n}\n\n# Stop persistenced and unload the kernel modules if they are currently loaded.\n_unload_driver() {\n    local rmmod_args=()\n    local nvidia_deps=0\n    local nvidia_refs=0\n    local nvidia_uvm_refs=0\n    local nvidia_modeset_refs=0\n    local nvidia_peermem_refs=0\n\n    echo \"Stopping NVIDIA persistence daemon...\"\n    if [ -f /var/run/nvidia-persistenced/nvidia-persistenced.pid ]; then\n        local pid=$(< /var/run/nvidia-persistenced/nvidia-persistenced.pid)\n\n        kill -SIGTERM \"${pid}\"\n        for i in $(seq 1 50); do\n            kill -0 \"${pid}\" 2> /dev/null || break\n            sleep 0.1\n        done\n        if [ $i -eq 50 ]; then\n            echo \"Could not stop NVIDIA persistence daemon\" >&2\n            return 1\n        fi\n    fi\n\n    if [ -f /var/run/nvidia-gridd/nvidia-gridd.pid ]; then\n        echo \"Stopping NVIDIA grid daemon...\"\n        local pid=$(< /var/run/nvidia-gridd/nvidia-gridd.pid)\n\n        kill -SIGTERM \"${pid}\"\n        for i in $(seq 1 10); do\n            kill -0 \"${pid}\" 2> /dev/null || break\n            sleep 0.1\n        done\n        if [ $i -eq 10 ]; then\n            echo \"Could not stop NVIDIA Grid daemon\" >&2\n            return 1\n        fi\n    fi\n\n    if [ -f /var/run/nvidia-fabricmanager/nv-fabricmanager.pid ]; then\n        echo \"Stopping NVIDIA fabric manager daemon...\"\n        local pid=$(< /var/run/nvidia-fabricmanager/nv-fabricmanager.pid)\n\n        kill -SIGTERM \"${pid}\"\n        for i in $(seq 1 50); do\n            kill -0 \"${pid}\" 2> /dev/null || break\n            sleep 0.1\n        done\n        if [ $i -eq 50 ]; then\n            echo \"Could not stop NVIDIA fabric manager daemon\" >&2\n            return 1\n        fi\n    fi\n\n    echo \"Unloading NVIDIA driver kernel modules...\"\n    if [ -f /sys/module/nvidia_modeset/refcnt ]; then\n        nvidia_modeset_refs=$(< /sys/module/nvidia_modeset/refcnt)\n        rmmod_args+=(\"nvidia-modeset\")\n        ((++nvidia_deps))\n    fi\n    if [ -f /sys/module/nvidia_uvm/refcnt ]; then\n        nvidia_uvm_refs=$(< /sys/module/nvidia_uvm/refcnt)\n        rmmod_args+=(\"nvidia-uvm\")\n        ((++nvidia_deps))\n    fi\n    if [ -f /sys/module/nvidia/refcnt ]; then\n        nvidia_refs=$(< /sys/module/nvidia/refcnt)\n        rmmod_args+=(\"nvidia\")\n    fi\n    if [ -f /sys/module/nvidia_peermem/refcnt ]; then\n        nvidia_peermem_refs=$(< /sys/module/nvidia_peermem/refcnt)\n        rmmod_args+=(\"nvidia-peermem\")\n        ((++nvidia_deps))\n    fi\n    if [ ${nvidia_refs} -gt ${nvidia_deps} ] || [ ${nvidia_uvm_refs} -gt 0 ] || [ ${nvidia_modeset_refs} -gt 0 ] || [ ${nvidia_peermem_refs} -gt 0 ]; then\n        echo \"Could not unload NVIDIA driver kernel modules, driver is in use\" >&2\n        return 1\n    fi\n\n    if [ ${#rmmod_args[@]} -gt 0 ]; then\n        rmmod ${rmmod_args[@]}\n    fi\n    return 0\n}\n\n# Link and install the kernel modules from a precompiled package using the nvidia-installer.\n_install_driver() {\n    local install_args=()\n\n    echo \"Installing NVIDIA driver kernel modules...\"\n    cd /usr/src/nvidia-${DRIVER_VERSION}\n    rm -rf /lib/modules/${KERNEL_VERSION}/video\n\n    if [ \"${ACCEPT_LICENSE}\" = \"yes\" ]; then\n        install_args+=(\"--accept-license\")\n    fi\n    IGNORE_CC_MISMATCH=1 nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check -m=${KERNEL_TYPE} ${install_args[@]+\"${install_args[@]}\"}\n    # May need to add no-cc-check for Rhel, otherwise it complains about cc missing in path\n    # /proc/version and lib/modules/KERNEL_VERSION/proc are different, by default installer looks at /proc/ so, added the proc-mount-point\n    # TODO: remove the -a flag. its not needed. in the new driver version, license-acceptance is implicit\n    #nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check --no-cc-version-check --proc-mount-point /lib/modules/${KERNEL_VERSION}/proc ${install_args[@]+\"${install_args[@]}\"}\n}\n\n# Mount the driver rootfs into the run directory with the exception of sysfs.\n_mount_rootfs() {\n    echo \"Mounting NVIDIA driver rootfs...\"\n    mount --make-runbindable /sys\n    mount --make-private /sys\n    mkdir -p ${RUN_DIR}/driver\n    mount --rbind / ${RUN_DIR}/driver\n\n    echo \"Check SELinux status\"\n    if [ -e /sys/fs/selinux ]; then\n        echo \"SELinux is enabled\"\n        echo \"Change device files security context for selinux compatibility\"\n        chcon -R -t container_file_t ${RUN_DIR}/driver/dev\n    else\n        echo \"SELinux is disabled, skipping...\"\n    fi\n}\n\n# Unmount the driver rootfs from the run directory.\n_unmount_rootfs() {\n    echo \"Unmounting NVIDIA driver rootfs...\"\n    if findmnt -r -o TARGET | grep \"${RUN_DIR}/driver\" > /dev/null; then\n        umount -l -R ${RUN_DIR}/driver\n    fi\n}\n\n# Write a kernel postinst.d script to automatically precompile packages on kernel update (similar to DKMS).\n_write_kernel_update_hook() {\n    if [ ! -d ${KERNEL_UPDATE_HOOK%/*} ]; then\n        return\n    fi\n\n    echo \"Writing kernel update hook...\"\n    cat > ${KERNEL_UPDATE_HOOK} <<'EOF'\n#!/bin/bash\n\nset -eu\ntrap 'echo \"ERROR: Failed to update the NVIDIA driver\" >&2; exit 0' ERR\n\nNVIDIA_DRIVER_PID=$(< /run/nvidia/nvidia-driver.pid)\n\nexport \"$(grep -z DRIVER_VERSION /proc/${NVIDIA_DRIVER_PID}/environ)\"\nnsenter -t \"${NVIDIA_DRIVER_PID}\" -m -- nvidia-driver update --kernel \"$1\"\nEOF\n    chmod +x ${KERNEL_UPDATE_HOOK}\n}\n\n_shutdown() {\n    if _unload_driver; then\n        _unmount_rootfs\n        rm -f ${PID_FILE} ${KERNEL_UPDATE_HOOK}\n        return 0\n    fi\n    return 1\n}\n\n_find_vgpu_driver_version() {\n    local count=\"\"\n    local version=\"\"\n    local drivers_path=\"/drivers\"\n\n    if [ \"${DISABLE_VGPU_VERSION_CHECK}\" = \"true\" ]; then\n        echo \"vgpu version compatibility check is disabled\"\n        return 0\n    fi\n    # check if vgpu devices are present\n    count=$(vgpu-util count)\n    if [ $? -ne 0 ]; then\n         echo \"cannot find vgpu devices on host, pleae check /var/log/vgpu-util.log for more details...\"\n         return 0\n    fi\n    NUM_VGPU_DEVICES=$(echo \"$count\" | awk -F= '{print $2}')\n    if [ $NUM_VGPU_DEVICES -eq 0 ]; then\n        # no vgpu devices found, treat as passthrough\n        return 0\n    fi\n    echo \"found $NUM_VGPU_DEVICES vgpu devices on host\"\n\n    # find compatible guest driver using driver catalog\n    if [ -d \"/mnt/shared-nvidia-driver-toolkit/drivers\" ]; then\n        drivers_path=\"/mnt/shared-nvidia-driver-toolkit/drivers\"\n    fi\n    version=$(vgpu-util match -i \"${drivers_path}\" -c \"${drivers_path}/vgpuDriverCatalog.yaml\")\n    if [ $? -ne 0 ]; then\n        echo \"cannot find match for compatible vgpu driver from available list, please check /var/log/vgpu-util.log for more details...\"\n        return 1\n    fi\n    DRIVER_VERSION=$(echo \"$version\" | awk -F= '{print $2}')\n    echo \"vgpu driver version selected: ${DRIVER_VERSION}\"\n    return 0\n}\n\n_start_vgpu_topology_daemon() {\n    type nvidia-topologyd > /dev/null 2>&1 || return 0\n    echo \"Starting nvidia-topologyd..\"\n    nvidia-topologyd\n}\n\n_prepare() {\n    if [ \"${DRIVER_TYPE}\" = \"vgpu\" ]; then\n        _find_vgpu_driver_version || exit 1\n    fi\n\n    # Install the userspace components and copy the kernel module sources.\n    sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \\\n        cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \\\n        sh /tmp/install.sh nvinstall && \\\n        mkdir -p /usr/src/nvidia-$DRIVER_VERSION && \\\n        mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-$DRIVER_VERSION && \\\n        sed '9,${/^\\(kernel\\|LICENSE\\)/!d}' .manifest > /usr/src/nvidia-$DRIVER_VERSION/.manifest\n\n    echo -e \"\\n========== NVIDIA Software Installer ==========\\n\"\n    echo -e \"Starting installation of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\\n\"\n}\n\n_prepare_exclusive() {\n    _prepare\n\n    exec 3> ${PID_FILE}\n    if ! flock -n 3; then\n        echo \"An instance of the NVIDIA driver is already running, aborting\"\n        exit 1\n    fi\n    echo $$ >&3\n\n    trap \"echo 'Caught signal'; exit 1\" HUP INT QUIT PIPE TERM\n    trap \"_shutdown\" EXIT\n\n    _unload_driver || exit 1\n    _unmount_rootfs\n}\n\n_build() {\n    # Install dependencies\n    if _kernel_requires_package; then\n        _update_package_cache\n        _install_prerequisites\n        _create_driver_package\n        #_remove_prerequisites\n        _cleanup_package_cache\n    fi\n\n    # Build the driver\n    _install_driver\n}\n\n_load() {\n    _load_driver\n    _mount_rootfs\n    _write_kernel_update_hook\n\n    echo \"Done, now waiting for signal\"\n    sleep infinity &\n    trap \"echo 'Caught signal'; _shutdown && { kill $!; exit 0; }\" HUP INT QUIT PIPE TERM\n    trap - EXIT\n    while true; do wait $! || continue; done\n    exit 0\n}\n\ninit() {\n    _prepare_exclusive\n\n    _build\n\n    _load\n}\n\nbuild() {\n    _prepare\n\n    _build\n}\n\nload() {\n    _prepare_exclusive\n\n    _load\n}\n\nupdate() {\n    exec 3>&2\n    if exec 2> /dev/null 4< ${PID_FILE}; then\n        if ! flock -n 4 && read pid <&4 && kill -0 \"${pid}\"; then\n            exec > >(tee -a \"/proc/${pid}/fd/1\")\n            exec 2> >(tee -a \"/proc/${pid}/fd/2\" >&3)\n        else\n            exec 2>&3\n        fi\n        exec 4>&-\n    fi\n    exec 3>&-\n\n    # vgpu driver version is chosen dynamically during runtime, so pre-compile modules for\n    # only non-vgpu driver types\n    if [ \"${DRIVER_TYPE}\" != \"vgpu\" ]; then\n        # Install the userspace components and copy the kernel module sources.\n        if [ ! -e /usr/src/nvidia-${DRIVER_VERSION}/mkprecompiled ]; then\n            sh NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION.run -x && \\\n                cd NVIDIA-Linux-$DRIVER_ARCH-$DRIVER_VERSION && \\\n                sh /tmp/install.sh nvinstall && \\\n                mkdir -p /usr/src/nvidia-$DRIVER_VERSION && \\\n                mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-$DRIVER_VERSION && \\\n                sed '9,${/^\\(kernel\\|LICENSE\\)/!d}' .manifest > /usr/src/nvidia-$DRIVER_VERSION/.manifest\n        fi\n    fi\n\n    echo -e \"\\n========== NVIDIA Software Updater ==========\\n\"\n    echo -e \"Starting update of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION}\\n\"\n\n    trap \"echo 'Caught signal'; exit 1\" HUP INT QUIT PIPE TERM\n\n    _update_package_cache\n    _resolve_kernel_version || exit 1\n    _install_prerequisites\n    if _kernel_requires_package; then\n        _create_driver_package\n    fi\n    _remove_prerequisites\n    _cleanup_package_cache\n\n    echo \"Done\"\n    exit 0\n}\n\n# Wait for MOFED drivers to be loaded and load nvidia-peermem whenever it gets unloaded during MOFED driver updates\nreload_nvidia_peermem() {\n    if [ \"$USE_HOST_MOFED\" = \"true\" ]; then\n        until  lsmod | grep mlx5_core > /dev/null 2>&1 && [ -f /run/nvidia/validations/.driver-ctr-ready ];\n        do\n            echo \"waiting for mellanox ofed and nvidia drivers to be installed\"\n            sleep 10\n        done\n    else\n        # use driver readiness flag created by MOFED container\n        until  [ -f /run/mellanox/drivers/.driver-ready ] && [ -f /run/nvidia/validations/.driver-ctr-ready ];\n        do\n            echo \"waiting for mellanox ofed and nvidia drivers to be installed\"\n            sleep 10\n        done\n    fi\n    # get any parameters provided for nvidia-peermem\n    _get_module_params && set +o nounset\n    if chroot /run/nvidia/driver modprobe nvidia-peermem \"${NVIDIA_PEERMEM_MODULE_PARAMS[@]}\"; then\n        if [ -f /sys/module/nvidia_peermem/refcnt ]; then\n            echo \"successfully loaded nvidia-peermem module, now waiting for signal\"\n            sleep inf\n            trap \"echo 'Caught signal'; exit 1\" HUP INT QUIT PIPE TERM\n        fi\n    fi\n    echo \"failed to load nvidia-peermem module\"\n    exit 1\n}\n\n# probe by gpu-operator for liveness/startup checks for nvidia-peermem module to be loaded when MOFED drivers are ready\nprobe_nvidia_peermem() {\n    if lsmod | grep mlx5_core > /dev/null 2>&1; then\n        if [ ! -f /sys/module/nvidia_peermem/refcnt ]; then\n            echo \"nvidia-peermem module is not loaded\"\n            return 1\n        fi\n    else\n        echo \"MOFED drivers are not ready, skipping probe to avoid container restarts...\"\n    fi\n    return 0\n}\n\nusage() {\n    cat >&2 <<EOF\nUsage: $0 COMMAND [ARG...]\n\nCommands:\n  init   [-a | --accept-license] [-m | --max-threads MAX_THREADS]\n  build  [-a | --accept-license] [-m | --max-threads MAX_THREADS]\n  load\n  update [-k | --kernel VERSION] [-s | --sign KEYID] [-t | --tag TAG] [-m | --max-threads MAX_THREADS]\nEOF\n    exit 1\n}\n\nif [ $# -eq 0 ]; then\n    usage\nfi\ncommand=$1; shift\ncase \"${command}\" in\n    init) options=$(getopt -l accept-license,max-threads: -o am: -- \"$@\") ;;\n    build) options=$(getopt -l accept-license,tag:,max-threads: -o a:t:m: -- \"$@\") ;;\n    load) options=\"\" ;;\n    update) options=$(getopt -l kernel:,sign:,tag:,max-threads: -o k:s:t:m: -- \"$@\") ;;\n    reload_nvidia_peermem) options=\"\" ;;\n    probe_nvidia_peermem) options=\"\" ;;\n    *) usage ;;\nesac\nif [ $? -ne 0 ]; then\n    usage\nfi\neval set -- \"${options}\"\n\nACCEPT_LICENSE=\"\"\nMAX_THREADS=\"\"\nKERNEL_VERSION=$(uname -r)\nPRIVATE_KEY=\"\"\nPACKAGE_TAG=\"\"\n\nfor opt in ${options}; do\n    case \"$opt\" in\n    -a | --accept-license) ACCEPT_LICENSE=\"yes\"; shift 1 ;;\n    -k | --kernel) KERNEL_VERSION=$2; shift 2 ;;\n    -m | --max-threads) MAX_THREADS=$2; shift 2 ;;\n    -s | --sign) PRIVATE_KEY=$2; shift 2 ;;\n    -t | --tag) PACKAGE_TAG=$2; shift 2 ;;\n    --) shift; break ;;\n    esac\ndone\nif [ $# -ne 0 ]; then\n    usage\nfi\n\n_resolve_rhel_version || exit 1\n\n$command\n

                          \u4f7f\u7528\u5b98\u65b9\u7684\u955c\u50cf\u6765\u4e8c\u6b21\u6784\u5efa\u81ea\u5b9a\u4e49\u955c\u50cf\uff0c\u5982\u4e0b\u662f\u4e00\u4e2a Dockerfile \u6587\u4ef6\u7684\u5185\u5bb9\uff1a

                          FROM nvcr.io/nvidia/driver:535.183.06-rhel9.2\nCOPY nvidia-driver /usr/local/bin\nRUN chmod +x /usr/local/bin/nvidia-driver\nCMD [\"/bin/bash\", \"-c\"]\n

                          \u6784\u5efa\u547d\u4ee4\u5e76\u63a8\u9001\u5230\u706b\u79cd\u96c6\u7fa4\uff1a

                          docker build -t {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535.183.06-01-rhel9.2 -f Dockerfile .\ndocker push {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535.183.06-01-rhel9.2\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html#_2","title":"\u5b89\u88c5\u9a71\u52a8","text":"
                          1. \u5b89\u88c5 gpu-operator addon
                          2. \u8bbe\u7f6e driver.version=535.183.06-01
                          "},{"location":"end-user/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html","title":"Ubuntu22.04 \u79bb\u7ebf\u5b89\u88c5 gpu-operator \u9a71\u52a8","text":"

                          \u524d\u63d0\u6761\u4ef6\uff1a\u5df2\u5b89\u88c5 gpu-operator v23.9.0+2 \u53ca\u66f4\u9ad8\u7248\u672c

                          "},{"location":"end-user/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html#_1","title":"\u51c6\u5907\u79bb\u7ebf\u955c\u50cf","text":"
                          1. \u67e5\u770b\u5185\u6838\u7248\u672c

                            $ uname -r\n5.15.0-78-generic\n
                          2. \u67e5\u770b\u5185\u6838\u5bf9\u5e94\u7684 GPU Driver \u955c\u50cf\u7248\u672c\uff0c https://catalog.ngc.nvidia.com/orgs/nvidia/containers/driver/tags\u3002 \u4f7f\u7528\u5185\u6838\u67e5\u8be2\u955c\u50cf\u7248\u672c\uff0c\u901a\u8fc7 ctr export \u4fdd\u5b58\u955c\u50cf\u3002

                            ctr i pull nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04\nctr i export --all-platforms driver.tar.gz nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 \n
                          3. \u628a\u955c\u50cf\u5bfc\u5165\u5230\u706b\u79cd\u96c6\u7fa4\u7684\u955c\u50cf\u4ed3\u5e93\u4e2d

                            ctr i import driver.tar.gz\nctr i tag nvcr.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04\nctr i push {\u706b\u79cdregistry}/nvcr.m.daocloud.io/nvidia/driver:535-5.15.0-78-generic-ubuntu22.04 --skip-verify=true\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html#_2","title":"\u5b89\u88c5\u9a71\u52a8","text":"
                          1. \u5b89\u88c5 gpu-operator addon
                          2. \u82e5\u4f7f\u7528\u9884\u7f16\u8bd1\u6a21\u5f0f\uff0c\u5219\u8bbe\u7f6e driver.usePrecompiled=true,\u5e76\u8bbe\u7f6e driver.version=535\uff0c\u8fd9\u91cc\u8981\u6ce8\u610f\uff0c\u5199\u7684\u662f 535\uff0c\u4e0d\u662f 535.104.12\u3002\uff08\u975e\u9884\u7f16\u8bd1\u6a21\u5f0f\u8df3\u8fc7\u6b64\u6b65\uff0c\u76f4\u63a5\u5b89\u88c5\u5373\u53ef\uff09
                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html","title":"\u6784\u5efa CentOS 7.9 \u79bb\u7ebf yum \u6e90","text":""},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#_1","title":"\u4f7f\u7528\u573a\u666f\u4ecb\u7ecd","text":"

                          \u5f53\u5de5\u4f5c\u8282\u70b9\u7684\u5185\u6838\u7248\u672c\u4e0e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u5185\u6838\u7248\u672c\u6216 OS \u7c7b\u578b\u4e0d\u4e00\u81f4\u65f6\uff0c\u9700\u8981\u7528\u6237\u624b\u52a8\u6784\u5efa\u79bb\u7ebf yum \u6e90\u3002

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u6784\u5efa\u79bb\u7ebf yum \u6e90\uff0c \u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\uff0c\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          1. \u7528\u6237\u5df2\u7ecf\u5728\u5e73\u53f0\u4e0a\u5b89\u88c5\u4e86 v0.12.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u7684 addon \u79bb\u7ebf\u5305\u3002
                          2. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u548c\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u7f51\u7edc\u80fd\u591f\u8054\u901a\u7684\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u5982 nginx \u6216 minio\u3002
                          3. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u3001\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\uff0c \u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u672c\u6587\u4ee5\u5185\u6838\u7248\u672c\u4e3a 3.10.0-1160.95.1.el7.x86_64 \u7684 CentOS 7.9 \u8282\u70b9\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u6784\u5efa GPU operator \u79bb\u7ebf\u5305\u7684 yum \u6e90\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#os","title":"\u68c0\u67e5\u96c6\u7fa4\u8282\u70b9\u7684 OS \u548c\u5185\u6838\u7248\u672c","text":"

                          \u5206\u522b\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u548c\u5f85\u90e8\u7f72 GPU Operator \u7684\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u82e5\u4e24\u4e2a\u8282\u70b9\u7684 OS \u548c\u5185\u6838\u7248\u672c\u4e00\u81f4\u5219\u65e0\u9700\u6784\u5efa yum \u6e90\uff0c \u53ef\u53c2\u8003\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u6587\u6863\u76f4\u63a5\u5b89\u88c5\uff1b\u82e5\u4e24\u4e2a\u8282\u70b9\u7684 OS \u6216\u5185\u6838\u7248\u672c\u4e0d\u4e00\u81f4\uff0c\u8bf7\u6267\u884c\u4e0b\u4e00\u6b65\u3002

                          1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u67e5\u770b\u96c6\u7fa4\u4e0b\u5f85\u90e8\u7f72 GPU Operator \u8282\u70b9\u7684\u53d1\u884c\u7248\u540d\u79f0\u548c\u7248\u672c\u53f7\u3002

                            cat /etc/redhat-release\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            CentOS Linux release 7.9 (Core)\n

                            \u8f93\u51fa\u7ed3\u679c\u4e3a\u5f53\u524d\u8282\u70b9\u5185\u6838\u7248\u672c CentOS 7.9 \u3002

                          2. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u67e5\u770b\u96c6\u7fa4\u4e0b\u5f85\u90e8\u7f72 GPU Operator \u8282\u70b9\u7684\u5185\u6838\u7248\u672c\u3002

                            uname -a\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            Linux localhost.localdomain 3.10.0-1160.95.1.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux\n

                            \u8f93\u51fa\u7ed3\u679c\u4e3a\u5f53\u524d\u8282\u70b9\u5185\u6838\u7248\u672c 3.10.0-1160.el7.x86_64\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#yum","title":"\u5236\u4f5c\u79bb\u7ebf yum \u6e90","text":"

                          \u5728\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002

                          1. \u5728\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\u4e0a\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a yum.sh \u7684\u811a\u672c\u6587\u4ef6\u3002

                            vi yum.sh\n

                            \u7136\u540e\u6309\u4e0b i \u952e\u8fdb\u5165\u63d2\u5165\u6a21\u5f0f\uff0c\u8f93\u5165\u4ee5\u4e0b\u5185\u5bb9\uff1a

                            export TARGET_KERNEL_VERSION=$1\n\ncat >> run.sh << \\EOF\n#! /bin/bash\necho \"start install kernel repo\"\necho ${KERNEL_VERSION}\nmkdir centos-base\n\nif [ \"$OS\" -eq 7 ]; then\n    yum install --downloadonly --downloaddir=./centos-base perl\n    yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64\n    yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el7.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el7.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el7.x86_64\n    yum install  -y --downloadonly --downloaddir=./centos-base groff-base\nelif [ \"$OS\" -eq 8 ]; then\n    yum install --downloadonly --downloaddir=./centos-base perl\n    yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64\n    yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el8.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el8.x86_64\n    yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el8.x86_64\n    yum install  -y --downloadonly --downloaddir=./centos-base groff-base\nelse\n    echo \"Error os version\"\nfi\n\ncreaterepo centos-base/\nls -lh centos-base/\ntar -zcf centos-base.tar.gz centos-base/\necho \"end install kernel repo\"\nEOF\n\ncat >> Dockerfile << EOF\nFROM centos:7\nENV KERNEL_VERSION=\"\"\nENV OS=7\nRUN yum install -y createrepo\nCOPY run.sh .\nENTRYPOINT [\"/bin/bash\",\"run.sh\"]\nEOF\n\ndocker build -t test:v1 -f Dockerfile .\ndocker run -e KERNEL_VERSION=$TARGET_KERNEL_VERSION --name centos7.9 test:v1\ndocker cp centos7.9:/centos-base.tar.gz .\ntar -xzf centos-base.tar.gz\n

                            \u6309\u4e0b esc \u952e\u9000\u51fa\u63d2\u5165\u6a21\u5f0f\uff0c\u7136\u540e\u8f93\u5165 __ :wq__ \u4fdd\u5b58\u5e76\u9000\u51fa\u3002

                          2. \u8fd0\u884c yum.sh \u6587\u4ef6\uff1a

                            bash -x yum.sh TARGET_KERNEL_VERSION\n

                            TARGET_KERNEL_VERSION \u53c2\u6570\u7528\u4e8e\u6307\u5b9a\u96c6\u7fa4\u8282\u70b9\u7684\u5185\u6838\u7248\u672c\uff0c\u6ce8\u610f\uff1a\u53d1\u884c\u7248\u6807\u8bc6\u7b26\uff08\u5982 __ .el7.x86_64 __ \uff09\u65e0\u9700\u8f93\u5165\u3002 \u4f8b\u5982\uff1a

                            bash -x yum.sh 3.10.0-1160.95.1\n

                          \u81f3\u6b64\uff0c\u60a8\u5df2\u7ecf\u751f\u6210\u4e86\u5185\u6838\u4e3a 3.10.0-1160.95.1.el7.x86_64 \u7684\u79bb\u7ebf\u7684 yum \u6e90\uff1a centos-base \u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#yum_1","title":"\u4e0a\u4f20\u79bb\u7ebf yum \u6e90\u5230\u6587\u4ef6\u670d\u52a1\u5668","text":"

                          \u5728\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002\u4e3b\u8981\u7528\u4e8e\u5c06\u4e0a\u4e00\u6b65\u4e2d\u751f\u6210\u7684 yum \u6e90\u4e0a\u4f20\u5230\u53ef\u4ee5\u88ab\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u8fdb\u884c\u8bbf\u95ee\u7684\u6587\u4ef6\u670d\u52a1\u5668\u4e2d\u3002 \u6587\u4ef6\u670d\u52a1\u5668\u53ef\u4ee5\u4e3a Nginx \u3001 Minio \u6216\u5176\u5b83\u652f\u6301 Http \u534f\u8bae\u7684\u6587\u4ef6\u670d\u52a1\u5668\u3002

                          \u672c\u64cd\u4f5c\u793a\u4f8b\u91c7\u7528\u7684\u662f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u4f5c\u4e3a\u6587\u4ef6\u670d\u52a1\u5668\uff0cMinio \u76f8\u5173\u4fe1\u606f\u5982\u4e0b\uff1a

                          • \u8bbf\u95ee\u5730\u5740\uff1a http://10.5.14.200:9000\uff08\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\uff09
                          • \u767b\u5f55\u7528\u6237\u540d\uff1arootuser
                          • \u767b\u5f55\u5bc6\u7801\uff1arootpass123

                          • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u5c06\u8282\u70b9\u672c\u5730 mc \u547d\u4ee4\u884c\u5de5\u5177\u548c minio \u670d\u52a1\u5668\u5efa\u7acb\u94fe\u63a5\u3002

                            mc config host add minio http://10.5.14.200:9000 rootuser rootpass123\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            Added `minio` successfully.\n

                            mc \u547d\u4ee4\u884c\u5de5\u5177\u662f Minio \u6587\u4ef6\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u5ba2\u6237\u7aef\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\uff1a MinIO Client\u3002

                          • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a centos-base \u7684\u5b58\u50a8\u6876\uff08bucket\uff09\u3002

                            mc mb -p minio/centos-base\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            Bucket created successfully __minio/centos-base__ .\n
                          • \u5c06\u5b58\u50a8\u6876 centos-base \u7684\u8bbf\u95ee\u7b56\u7565\u8bbe\u7f6e\u4e3a\u5141\u8bb8\u516c\u5f00\u4e0b\u8f7d\u3002\u4ee5\u4fbf\u5728\u540e\u671f\u5b89\u88c5 GPU-operator \u65f6\u80fd\u591f\u88ab\u8bbf\u95ee\u3002

                            mc anonymous set download minio/centos-base\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            Access permission for `minio/centos-base` is set to `download` \n
                          • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u5c06\u6b65\u9aa4\u4e8c\u751f\u6210\u7684\u79bb\u7ebf yum \u6e90\u6587\u4ef6 centos-base \u590d\u5236\u5230 minio \u670d\u52a1\u5668\u7684 minio/centos-base \u5b58\u50a8\u6876\u4e2d\u3002

                            mc cp centos-base minio/centos-base --recursive\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html#yum_2","title":"\u5728\u96c6\u7fa4\u521b\u5efa\u914d\u7f6e\u9879\u7528\u6765\u4fdd\u5b58 yum \u6e90\u4fe1\u606f","text":"

                          \u5728\u5f85\u90e8\u7f72 GPU Operator \u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002

                          1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u521b\u5efa\u540d\u4e3a CentOS-Base.repo \u7684\u6587\u4ef6\uff0c\u7528\u6765\u6307\u5b9a yum \u6e90\u5b58\u50a8\u7684\u914d\u7f6e\u4fe1\u606f\u3002

                            # \u6587\u4ef6\u540d\u79f0\u5fc5\u987b\u4e3a CentOS-Base.repo\uff0c\u5426\u5219\u5b89\u88c5 gpu-operator \u65f6\u65e0\u6cd5\u88ab\u8bc6\u522b\ncat > CentOS-Base.repo << EOF\n[extension-0]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base #\u6b65\u9aa4\u4e09\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base #\u6b65\u9aa4\u4e09\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 1\nEOF\n
                          2. \u57fa\u4e8e\u521b\u5efa\u7684 CentOS-Base.repo \u6587\u4ef6\uff0c\u5728 gpu-operator \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u521b\u5efa\u540d\u4e3a local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\uff1a

                            kubectl create configmap local-repo-config  -n gpu-operator --from-file=CentOS-Base.repo=/etc/yum.repos.d/extension.repo\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            configmap/local-repo-config created\n

                            local-repo-config \u914d\u7f6e\u6587\u4ef6\u7528\u4e8e\u5728\u5b89\u88c5 gpu-operator \u65f6\uff0c\u63d0\u4f9b RepoConfig.ConfigMapName \u53c2\u6570\u7684\u503c\uff0c\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u7528\u6237\u53ef\u81ea\u5b9a\u4e49\u3002

                          3. \u67e5\u770b local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\uff1a

                            kubectl get configmap local-repo-config  -n gpu-operator -oyaml\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            apiVersion: v1\ndata:\nCentOS-Base.repo: \"[extension-0]\\nbaseurl = http://10.6.232.5:32618/centos-base#\u6b65\u9aa4\u4e8c\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84\\ngpgcheck = 0\\nname = kubean extension 0\\n  \\n[extension-1]\\nbaseurl\n    = http://10.6.232.5:32618/centos-base #\u6b65\u9aa4\u4e8c\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84\\ngpgcheck = 0\\nname\n    = kubean extension 1\\n\"\nkind: ConfigMap\nmetadata:\ncreationTimestamp: \"2023-10-18T01:59:02Z\"\nname: local-repo-config\nnamespace: gpu-operator\nresourceVersion: \"59445080\"\nuid: c5f0ebab-046f-442c-b932-f9003e014387\n

                          \u81f3\u6b64\uff0c\u60a8\u5df2\u6210\u529f\u4e3a\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u521b\u5efa\u4e86\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u3002 \u901a\u8fc7\u5728\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u65f6\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html","title":"\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9884\u7f6e\u4e86 CentOS 7.9\uff0c\u5185\u6838\u4e3a 3.10.0-1160 \u7684 GPU operator \u79bb\u7ebf\u5305\u3002\u5176\u5b83 OS \u7c7b\u578b\u7684\u8282\u70b9\u6216\u5185\u6838\u9700\u8981\u7528\u6237\u624b\u52a8\u6784\u5efa\u79bb\u7ebf yum \u6e90\u3002

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u57fa\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4efb\u610f\u8282\u70b9\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u5305\uff0c\u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\uff0c\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          1. \u7528\u6237\u5df2\u7ecf\u5728\u5e73\u53f0\u4e0a\u5b89\u88c5\u4e86 v0.12.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u7684 addon \u79bb\u7ebf\u5305\u3002
                          2. \u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u8282\u70b9 OS \u5fc5\u987b\u4e3a Red Hat 8.4\uff0c\u4e14\u5185\u6838\u7248\u672c\u5b8c\u5168\u4e00\u81f4\u3002
                          3. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u548c\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u7f51\u7edc\u80fd\u591f\u8054\u901a\u7684\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u5982 nginx \u6216 minio\u3002
                          4. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u3001\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\uff0c\u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5\u3002
                          5. \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u8282\u70b9\u5fc5\u987b\u4e3a Red Hat 8.4 4.18.0-305.el8.x86_64\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u672c\u6587\u4ee5 Red Hat 8.4 4.18.0-305.el8.x86_64 \u8282\u70b9\u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u57fa\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4efb\u610f\u8282\u70b9\u6784\u5efa Red Hat 8.4 \u79bb\u7ebf yum \u6e90\u5305\uff0c \u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\uff0c\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum","title":"\u4e0b\u8f7d\u706b\u79cd\u8282\u70b9\u4e2d\u7684 yum \u6e90","text":"

                          \u4ee5\u4e0b\u64cd\u4f5c\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 master \u8282\u70b9\u4e0a\u6267\u884c\u3002

                          1. \u4f7f\u7528 ssh \u6216\u5176\u5b83\u65b9\u5f0f\u8fdb\u5165\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5185\u4efb\u4e00\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1a

                            cat /etc/yum.repos.d/extension.repo #\u67e5\u770b extension.repo \u4e2d\u7684\u5185\u5bb9\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            [extension-0]\nbaseurl = http://10.5.14.200:9000/kubean/redhat/$releasever/os/$basearch\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/kubean/redhat-iso/$releasever/os/$basearch/AppStream\ngpgcheck = 0\nname = kubean extension 1\n\n[extension-2]\nbaseurl = http://10.5.14.200:9000/kubean/redhat-iso/$releasever/os/$basearch/BaseOS\ngpgcheck = 0\nname = kubean extension 2\n
                          2. \u5728 root \u8def\u5f84\u4e0b\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a redhat-base-repo \u7684\u6587\u4ef6\u5939

                            mkdir redhat-base-repo\n
                          3. \u4e0b\u8f7d yum \u6e90\u4e2d\u7684 rpm \u5305\u5230\u672c\u5730\uff1a

                            yum install yum-utils\n
                          4. \u4e0b\u8f7d extension-1 \u4e2d\u7684 rpm \u5305\uff1a

                            reposync  -p redhat-base-repo  -n --repoid=extension-1\n
                          5. \u4e0b\u8f7d extension-2 \u4e2d\u7684 rpm \u5305\uff1a

                            reposync  -p redhat-base-repo  -n --repoid=extension-2\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#elfutils-libelf-devel-0187-4el8x86_64rpm","title":"\u4e0b\u8f7d elfutils-libelf-devel-0.187-4.el8.x86_64.rpm \u5305","text":"

                          \u4ee5\u4e0b\u64cd\u4f5c\u5728\u8054\u7f51\u8282\u70b9\u6267\u884c\u64cd\u4f5c\uff0c\u5728\u64cd\u4f5c\u524d\uff0c\u60a8\u9700\u8981\u4fdd\u8bc1\u8054\u7f51\u8282\u70b9\u548c\u5168\u5c40\u670d\u52a1\u96c6\u7fa4 master \u8282\u70b9\u95f4\u7684\u7f51\u7edc\u8054\u901a\u6027\u3002

                          1. \u5728\u8054\u7f51\u8282\u70b9\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u4e0b\u8f7d elfutils-libelf-devel-0.187-4.el8.x86_64.rpm \u5305\uff1a

                            wget https://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/elfutils-libelf-devel-0.187-4.el8.x86_64.rpm\n
                          2. \u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u5c06 elfutils-libelf-devel-0.187-4.el8.x86_64.rpm \u5305\u4f20\u8f93\u81f3\u6b65\u9aa4\u4e00\u4e2d\u7684\u8282\u70b9\u4e0a\uff1a

                            scp  elfutils-libelf-devel-0.187-4.el8.x86_64.rpm user@ip:~/redhat-base-repo/extension-2/Packages/\n

                            \u4f8b\u5982\uff1a

                            scp  elfutils-libelf-devel-0.187-4.el8.x86_64.rpm root@10.6.175.10:~/redhat-base-repo/extension-2/Packages/\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum-repo","title":"\u751f\u6210\u672c\u5730 yum repo","text":"

                          \u4ee5\u4e0b\u64cd\u4f5c\u5728\u6b65\u9aa4\u4e00\u4e2d\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 master \u8282\u70b9\u4e0a\u6267\u884c\u3002

                          1. \u8fdb\u5165 yum repo \u76ee\u5f55\uff1a

                            cd ~/redhat-base-repo/extension-1/Packages\ncd ~/redhat-base-repo/extension-2/Packages\n
                          2. \u751f\u6210\u76ee\u5f55 repo \u7d22\u5f15\uff1a

                            yum install createrepo -y  # \u82e5\u5df2\u5b89\u88c5 createrepo \u53ef\u7701\u7565\u6b64\u6b65\u9aa4\ncreaterepo_c ./\n

                          \u81f3\u6b64\uff0c\u60a8\u5df2\u7ecf\u751f\u6210\u4e86\u5185\u6838\u4e3a 4.18.0-305.el8.x86_64 \u7684\u79bb\u7ebf\u7684 yum \u6e90\uff1a redhat-base-repo \u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum-repo_1","title":"\u5c06\u672c\u5730\u751f\u6210\u7684 yum repo \u4e0a\u4f20\u81f3\u6587\u4ef6\u670d\u52a1\u5668","text":"

                          \u672c\u64cd\u4f5c\u793a\u4f8b\u91c7\u7528\u7684\u662f\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u706b\u79cd\u8282\u70b9\u5185\u7f6e\u7684 Minio \u4f5c\u4e3a\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u7528\u6237\u53ef\u57fa\u4e8e\u81ea\u8eab\u60c5\u51b5\u9009\u62e9\u6587\u4ef6\u670d\u52a1\u5668\u3002Minio \u76f8\u5173\u4fe1\u606f\u5982\u4e0b\uff1a

                          • \u8bbf\u95ee\u5730\u5740\uff1a http://10.5.14.200:9000\uff08\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\uff09
                          • \u767b\u5f55\u7528\u6237\u540d\uff1arootuser
                          • \u767b\u5f55\u5bc6\u7801\uff1arootpass123

                          • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u5c06\u8282\u70b9\u672c\u5730 mc \u547d\u4ee4\u884c\u5de5\u5177\u548c minio \u670d\u52a1\u5668\u5efa\u7acb\u94fe\u63a5\u3002

                            mc config host add minio \u6587\u4ef6\u670d\u52a1\u5668\u8bbf\u95ee\u5730\u5740 \u7528\u6237\u540d \u5bc6\u7801\n

                            \u4f8b\u5982\uff1a

                            mc config host add minio http://10.5.14.200:9000 rootuser rootpass123\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            Added `minio` successfully.\n

                            mc \u547d\u4ee4\u884c\u5de5\u5177\u662f Minio \u6587\u4ef6\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u5ba2\u6237\u7aef\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\uff1a MinIO Client\u3002

                          • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a redhat-base \u7684\u5b58\u50a8\u6876(bucket)\u3002

                            mc mb -p minio/redhat-base\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            Bucket created successfully `minio/redhat-base`.\n
                          • \u5c06\u5b58\u50a8\u6876 redhat-base \u7684\u8bbf\u95ee\u7b56\u7565\u8bbe\u7f6e\u4e3a\u5141\u8bb8\u516c\u5f00\u4e0b\u8f7d\u3002\u4ee5\u4fbf\u5728\u540e\u671f\u5b89\u88c5 GPU-operator \u65f6\u80fd\u591f\u88ab\u8bbf\u95ee\u3002

                            mc anonymous set download minio/redhat-base\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            Access permission for `minio/redhat-base` is set to `download` \n
                          • \u5728\u8282\u70b9\u5f53\u524d\u8def\u5f84\u4e0b\uff0c\u5c06\u6b65\u9aa4\u4e8c\u751f\u6210\u7684\u79bb\u7ebf yum \u6e90\u6587\u4ef6 redhat-base-repo \u590d\u5236\u5230 minio \u670d\u52a1\u5668\u7684 minio/redhat-base \u5b58\u50a8\u6876\u4e2d\u3002

                            mc cp redhat-base-repo minio/redhat-base --recursive\n
                          "},{"location":"end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html#yum_1","title":"\u5728\u96c6\u7fa4\u521b\u5efa\u914d\u7f6e\u9879\u7528\u6765\u4fdd\u5b58 yum \u6e90\u4fe1\u606f","text":"

                          \u672c\u6b65\u9aa4\u5728\u5f85\u90e8\u7f72 GPU Operator \u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002

                          1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u521b\u5efa\u540d\u4e3a redhat.repo \u7684\u6587\u4ef6\uff0c\u7528\u6765\u6307\u5b9a yum \u6e90\u5b58\u50a8\u7684\u914d\u7f6e\u4fe1\u606f\u3002

                            # \u6587\u4ef6\u540d\u79f0\u5fc5\u987b\u4e3a redhat.repo\uff0c\u5426\u5219\u5b89\u88c5 gpu-operator \u65f6\u65e0\u6cd5\u88ab\u8bc6\u522b\ncat > redhat.repo << EOF\n[extension-0]\nbaseurl = http://10.5.14.200:9000/redhat-base/redhat-base-repo/Packages #\u6b65\u9aa4\u4e00\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/redhat-base/redhat-base-repo/Packages #\u6b65\u9aa4\u4e00\u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\ngpgcheck = 0\nname = kubean extension 1\nEOF\n
                          2. \u57fa\u4e8e\u521b\u5efa\u7684 redhat.repo \u6587\u4ef6\uff0c\u5728 gpu-operator \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u521b\u5efa\u540d\u4e3a local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\uff1a

                            kubectl create configmap local-repo-config  -n gpu-operator --from-file=./redhat.repo \n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            configmap/local-repo-config created\n

                            local-repo-config \u914d\u7f6e\u6587\u4ef6\u7528\u4e8e\u5728\u5b89\u88c5 gpu-operator \u65f6\uff0c\u63d0\u4f9b RepoConfig.ConfigMapName \u53c2\u6570\u7684\u503c\uff0c\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u7528\u6237\u53ef\u81ea\u5b9a\u4e49\u3002

                          3. \u67e5\u770b local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\uff1a

                            kubectl get configmap local-repo-config  -n gpu-operator -oyaml\n

                          \u81f3\u6b64\uff0c\u60a8\u5df2\u6210\u529f\u4e3a\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u521b\u5efa\u4e86\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u3002 \u901a\u8fc7\u5728\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u65f6\u901a\u8fc7 RepoConfig.ConfigMapName \u53c2\u6570\u6765\u4f7f\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html","title":"\u6784\u5efa Red Hat 7.9 \u79bb\u7ebf yum \u6e90","text":""},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html#_1","title":"\u4f7f\u7528\u573a\u666f\u4ecb\u7ecd","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u9884\u7f6e\u4e86 CentOS 7.9\uff0c\u5185\u6838\u4e3a 3.10.0-1160 \u7684 GPU Operator \u79bb\u7ebf\u5305\u3002\u5176\u5b83 OS \u7c7b\u578b\u7684\u8282\u70b9\u6216\u5185\u6838\u9700\u8981\u7528\u6237\u624b\u52a8\u6784\u5efa\u79bb\u7ebf yum \u6e90\u3002

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u57fa\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4efb\u610f\u8282\u70b9\u6784\u5efa Red Hat 7.9 \u79bb\u7ebf yum \u6e90\u5305\uff0c\u5e76\u5728\u5b89\u88c5 Gpu Operator \u65f6\u4f7f\u7528 RepoConfig.ConfigMapName \u53c2\u6570\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          1. \u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u8282\u70b9 OS \u5fc5\u987b\u4e3a Red Hat 7.9\uff0c\u4e14\u5185\u6838\u7248\u672c\u5b8c\u5168\u4e00\u81f4
                          2. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u4e0e\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u7f51\u7edc\u8054\u901a\u7684\u6587\u4ef6\u670d\u52a1\u5668\uff0c\u5982 nginx \u6216 minio
                          3. \u51c6\u5907\u4e00\u4e2a\u80fd\u591f\u8bbf\u95ee\u4e92\u8054\u7f51\u3001\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u548c\u6587\u4ef6\u670d\u52a1\u5668\u7684\u8282\u70b9\uff0c \u4e14\u8282\u70b9\u4e0a\u5df2\u7ecf\u5b8c\u6210 Docker \u7684\u5b89\u88c5
                          4. \u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u8282\u70b9\u5fc5\u987b\u4e3a Red Hat 7.9
                          "},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html#1-yum","title":"1. \u6784\u5efa\u76f8\u5173\u5185\u6838\u7248\u672c\u7684\u79bb\u7ebf Yum \u6e90","text":"
                          1. \u4e0b\u8f7d rhel7.9 ISO

                          2. \u4e0b\u8f7d\u4e0e Kubean \u7248\u672c\u5bf9\u5e94\u7684\u7684 rhel7.9 ospackage

                            \u5728 \u5bb9\u5668\u7ba1\u7406 \u7684\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e2d\u627e\u5230 Helm \u5e94\u7528 \uff0c\u641c\u7d22 kubean\uff0c\u53ef\u67e5\u770b kubean \u7684\u7248\u672c\u53f7\u3002

                            \u5728 kubean\u7684\u4ee3\u7801\u4ed3\u5e93 \u4e2d\u4e0b\u8f7d\u8be5\u7248\u672c\u7684 rhel7.9 ospackage\u3002

                          3. \u901a\u8fc7\u5b89\u88c5\u5668\u5bfc\u5165\u79bb\u7ebf\u8d44\u6e90

                            \u53c2\u8003\u5bfc\u5165\u79bb\u7ebf\u8d44\u6e90\u6587\u6863\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html#2-red-hat-79-os","title":"2. \u4e0b\u8f7d Red Hat 7.9 OS \u7684\u79bb\u7ebf\u9a71\u52a8\u955c\u50cf","text":"

                          \u70b9\u51fb\u67e5\u770b\u4e0b\u8f7d\u5730\u5740\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html#3-red-hat-gpu-opreator","title":"3. \u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf","text":"

                          \u53c2\u8003\u5411\u706b\u79cd\u8282\u70b9\u4ed3\u5e93\u4e0a\u4f20 Red Hat GPU Opreator \u79bb\u7ebf\u955c\u50cf\u3002

                          Note

                          \u6b64\u53c2\u8003\u4ee5 rhel8.4 \u4e3a\u4f8b\uff0c\u8bf7\u6ce8\u610f\u4fee\u6539\u6210 rhel7.9\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html#4-yum","title":"4. \u5728\u96c6\u7fa4\u521b\u5efa\u914d\u7f6e\u9879\u7528\u6765\u4fdd\u5b58 Yum \u6e90\u4fe1\u606f","text":"

                          \u5728\u5f85\u90e8\u7f72 GPU Operator \u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u4e0a\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002

                          1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\u521b\u5efa\u540d\u4e3a CentOS-Base.repo \u7684\u6587\u4ef6\uff0c\u7528\u6765\u6307\u5b9a yum \u6e90\u5b58\u50a8\u7684\u914d\u7f6e\u4fe1\u606f\u3002

                            # \u6587\u4ef6\u540d\u79f0\u5fc5\u987b\u4e3a CentOS-Base.repo\uff0c\u5426\u5219\u5b89\u88c5 gpu-operator \u65f6\u65e0\u6cd5\u88ab\u8bc6\u522b\ncat > CentOS-Base.repo <<  EOF\n[extension-0]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base # \u706b\u79cd\u8282\u70b9\u7684\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\uff0c\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\ngpgcheck = 0\nname = kubean extension 0\n\n[extension-1]\nbaseurl = http://10.5.14.200:9000/centos-base/centos-base # \u706b\u79cd\u8282\u70b9\u7684\u7684\u6587\u4ef6\u670d\u52a1\u5668\u5730\u5740\uff0c\u4e00\u822c\u4e3a{\u706b\u79cd\u8282\u70b9 IP} + {9000 \u7aef\u53e3}\ngpgcheck = 0\nname = kubean extension 1\nEOF\n
                          2. \u57fa\u4e8e\u521b\u5efa\u7684 CentOS-Base.repo \u6587\u4ef6\uff0c\u5728 gpu-operator \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u521b\u5efa\u540d\u4e3a local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\uff1a

                            kubectl create configmap local-repo-config -n gpu-operator --from-file=CentOS-Base.repo=/etc/yum.repos.d/extension.repo\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            configmap/local-repo-config created\n

                            local-repo-config \u914d\u7f6e\u6587\u4ef6\u7528\u4e8e\u5728\u5b89\u88c5 gpu-operator \u65f6\uff0c\u63d0\u4f9b RepoConfig.ConfigMapName \u53c2\u6570\u7684\u503c\uff0c\u914d\u7f6e\u6587\u4ef6\u540d\u79f0\u7528\u6237\u53ef\u81ea\u5b9a\u4e49\u3002

                          3. \u67e5\u770b local-repo-config \u7684\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\uff1a

                            kubectl get configmap local-repo-config -n gpu-operator -oyaml\n

                            \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

                            local-repo-config.yaml
                            apiVersion: v1\ndata:\n  CentOS-Base.repo: \"[extension-0]\\nbaseurl = http://10.6.232.5:32618/centos-base # \u6b65\u9aa4 2 \u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84 \\ngpgcheck = 0\\nname = kubean extension 0\\n  \\n[extension-1]\\nbaseurl\n  = http://10.6.232.5:32618/centos-base # \u6b65\u9aa4 2 \u4e2d\uff0c\u653e\u7f6e yum \u6e90\u7684\u6587\u4ef6\u670d\u52a1\u5668\u8def\u5f84 \\ngpgcheck = 0\\nname\n  = kubean extension 1\\n\"\nkind: ConfigMap\nmetadata:\n  creationTimestamp: \"2023-10-18T01:59:02Z\"\n  name: local-repo-config\n  namespace: gpu-operator\n  resourceVersion: \"59445080\"\n  uid: c5f0ebab-046f-442c-b932-f9003e014387\n

                          \u81f3\u6b64\uff0c\u60a8\u5df2\u6210\u529f\u4e3a\u5f85\u90e8\u7f72 GPU Operator \u7684\u96c6\u7fa4\u521b\u5efa\u4e86\u79bb\u7ebf yum \u6e90\u914d\u7f6e\u6587\u4ef6\u3002 \u5176\u4e2d\u5728\u79bb\u7ebf\u5b89\u88c5 GPU Operator \u65f6\u4f7f\u7528\u4e86 RepoConfig.ConfigMapName \u53c2\u6570\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html","title":"GPU \u544a\u8b66\u89c4\u5219","text":"

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u8bbe\u7f6e GPU \u76f8\u5173\u7684\u544a\u8b66\u89c4\u5219\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
                          • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5df2\u6b63\u786e\u5b89\u88c5 GPU \u8bbe\u5907
                          • \u96c6\u7fa4\u4e2d\u5df2\u6b63\u786e\u5b89\u88c5 gpu-operator \u7ec4\u4ef6
                          • \u5982\u679c\u7528\u5230\u4e86 vGPU \u8fd8\u9700\u8981\u5728\u96c6\u7fa4\u4e2d\u5b89\u88c5 Nvidia-vgpu \u7ec4\u4ef6\uff0c\u5e76\u4e14\u5f00\u542f servicemonitor
                          • \u96c6\u7fa4\u6b63\u786e\u5b89\u88c5\u4e86 insight-agent \u7ec4\u4ef6
                          "},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#gpu_1","title":"\u544a\u8b66\u5e38\u7528 GPU \u6307\u6807","text":"

                          \u672c\u8282\u4ecb\u7ecd GPU \u544a\u8b66\u5e38\u7528\u7684\u6307\u6807\uff0c\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

                          • GPU \u5361\u7eac\u5ea6\u7684\u6307\u6807\uff0c\u4e3b\u8981\u53cd\u5e94\u5355\u4e2a GPU \u8bbe\u5907\u7684\u8fd0\u884c\u72b6\u6001\u3002
                          • \u5e94\u7528\u7eac\u5ea6\u7684\u6307\u6807\uff0c\u4e3b\u8981\u53cd\u5e94 Pod \u5728 GPU \u4e0a\u7684\u8fd0\u884c\u72b6\u6001\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#gpu_2","title":"GPU \u5361\u6307\u6807","text":"\u6307\u6807\u540d\u79f0 \u6307\u6807\u5355\u4f4d \u8bf4\u660e DCGM_FI_DEV_GPU_UTIL % GPU \u5229\u7528\u7387 DCGM_FI_DEV_MEM_COPY_UTIL % \u663e\u5b58\u5229\u7528\u7387 DCGM_FI_DEV_ENC_UTIL % \u7f16\u7801\u5668\u5229\u7528\u7387 DCGM_FI_DEV_DEC_UTIL % \u89e3\u7801\u5668\u5229\u7528\u7387 DCGM_FI_DEV_FB_FREE MB \u8868\u793a\u663e\u5b58\u5269\u4f59\u91cf DCGM_FI_DEV_FB_USED MB \u8868\u793a\u663e\u5b58\u4f7f\u7528\u91cf DCGM_FI_DEV_GPU_TEMP \u6444\u6c0f\u5ea6 \u8868\u793a\u5f53\u524d GPU \u7684\u6e29\u5ea6\u5ea6\u6570 DCGM_FI_DEV_POWER_USAGE W \u8bbe\u5907\u7535\u6e90\u4f7f\u7528\u60c5\u51b5 DCGM_FI_DEV_XID_ERRORS - \u8868\u793a\u4e00\u6bb5\u65f6\u95f4\u5185\uff0c\u6700\u540e\u53d1\u751f\u7684 XID \u9519\u8bef\u53f7\u3002XID \u63d0\u4f9b GPU \u786c\u4ef6\u3001NVIDIA \u8f6f\u4ef6\u6216\u5e94\u7528\u4e2d\u7684\u9519\u8bef\u7c7b\u578b\u3001\u9519\u8bef\u4f4d\u7f6e\u3001\u9519\u8bef\u4ee3\u7801\u7b49\u4fe1\u606f\uff0c\u66f4\u591a XID \u4fe1\u606f"},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#_2","title":"\u5e94\u7528\u7ef4\u5ea6\u7684\u6307\u6807","text":"\u6307\u6807\u540d\u79f0 \u6307\u6807\u5355\u4f4d \u8bf4\u660e kpanda_gpu_pod_utilization % \u8868\u793a Pod \u5bf9 GPU \u7684\u4f7f\u7528\u7387 kpanda_gpu_mem_pod_usage MB \u8868\u793a Pod \u5bf9 GPU \u663e\u5b58\u7684\u4f7f\u7528\u91cf kpanda_gpu_mem_pod_utilization % \u8868\u793a Pod \u5bf9 GPU \u663e\u5b58\u7684\u4f7f\u7528\u7387"},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html#_3","title":"\u8bbe\u7f6e\u544a\u8b66\u89c4\u5219","text":"

                          \u8fd9\u91cc\u4f1a\u4ecb\u7ecd\u5982\u4f55\u8bbe\u7f6e GPU \u544a\u8b66\u89c4\u5219\uff0c\u4f7f\u7528 GPU \u5361\u5229\u7528\u7387\u6307\u6807\u4f5c\u4e3a\u6848\u4f8b\uff0c\u8bf7\u7528\u6237\u6839\u636e\u5b9e\u9645\u7684\u4e1a\u52a1\u573a\u666f\u9009\u62e9\u6307\u6807\u4ee5\u53ca\u7f16\u5199 promql\u3002

                          \u76ee\u6807\uff1a\u5f53GPU\u5361\u5229\u7528\u7387\u5728\u4e94\u79d2\u949f\u5185\u4e00\u76f4\u4fdd\u6301 80% \u7684\u5229\u7528\u7387\u65f6\u53d1\u51fa\u544a\u8b66

                          1. \u5728\u53ef\u89c2\u6d4b\u9875\u9762\uff0c\u70b9\u51fb \u544a\u8b66 -> \u544a\u8b66\u7b56\u7565 -> \u521b\u5efa\u544a\u8b66\u7b56\u7565

                          2. \u586b\u5199\u57fa\u672c\u4fe1\u606f

                          3. \u6dfb\u52a0\u89c4\u5219

                          4. \u9009\u62e9\u901a\u77e5\u65b9\u5f0f

                          5. \u8bbe\u7f6e\u5b8c\u6210\u540e\uff0c\u5f53\u4e00\u4e2a GPU \u5728 5s \u5185\u4e00\u76f4\u4fdd\u6301 80% \u7684\u5229\u7528\u7387\uff0c\u4f1a\u6536\u5230\u5982\u4e0b\u7684\u544a\u8b66\u4fe1\u606f\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html","title":"GPU \u76d1\u63a7\u6307\u6807","text":"

                          \u672c\u9875\u5217\u51fa\u4e00\u4e9b\u5e38\u7528\u7684 GPU \u76d1\u63a7\u6307\u6807\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html#_1","title":"\u96c6\u7fa4\u7ef4\u5ea6","text":"\u6307\u6807\u540d\u79f0 \u63cf\u8ff0 GPU \u5361\u6570 \u96c6\u7fa4\u4e0b\u6240\u6709\u7684 GPU \u5361\u6570\u91cf GPU \u5e73\u5747\u4f7f\u7528\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u5e73\u5747\u7b97\u529b\u4f7f\u7528\u7387 GPU \u5e73\u5747\u663e\u5b58\u4f7f\u7528\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u5e73\u5747\u663e\u5b58\u4f7f\u7528\u7387 GPU \u5361\u529f\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u529f\u7387 GPU \u5361\u6e29\u5ea6 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u6e29\u5ea6 GPU \u7b97\u529b\u4f7f\u7528\u7387\u7ec6\u8282 24 \u5c0f\u65f6\u5185\uff0c\u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u4f7f\u7528\u7387\u7ec6\u8282\uff08\u5305\u542b max\u3001avg\u3001current\uff09 GPU \u663e\u5b58\u4f7f\u7528\u91cf\u7ec6\u8282 24 \u5c0f\u65f6\u5185\uff0c\u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u91cf\u7ec6\u8282\uff08\u5305\u542b min\u3001max\u3001avg\u3001current\uff09 GPU \u663e\u5b58\u5e26\u5bbd\u4f7f\u7528\u7387 \u8868\u793a\u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387\u3002\u4ee5 Nvidia GPU V100 \u4e3a\u4f8b\uff0c\u5176\u6700\u5927\u5185\u5b58\u5e26\u5bbd\u4e3a 900 GB/sec\uff0c\u5982\u679c\u5f53\u524d\u7684\u5185\u5b58\u5e26\u5bbd\u4e3a 450 GB/sec\uff0c\u5219\u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387\u4e3a 50%"},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html#_2","title":"\u8282\u70b9\u7ef4\u5ea6","text":"\u6307\u6807\u540d\u79f0 \u63cf\u8ff0 GPU \u6a21\u5f0f \u8282\u70b9\u4e0a GPU \u5361\u7684\u4f7f\u7528\u6a21\u5f0f\uff0c\u5305\u542b\u6574\u5361\u6a21\u5f0f\u3001MIG \u6a21\u5f0f\u3001vGPU \u6a21\u5f0f GPU \u7269\u7406\u5361\u6570 \u8282\u70b9\u4e0a\u6240\u6709\u7684 GPU \u5361\u6570\u91cf GPU \u865a\u62df\u5361\u6570 \u8282\u70b9\u4e0a\u5df2\u7ecf\u88ab\u521b\u5efa\u51fa\u6765\u7684 vGPU \u8bbe\u5907\u6570\u91cf GPU MIG \u5b9e\u4f8b\u6570 \u8282\u70b9\u4e0a\u5df2\u7ecf\u88ab\u521b\u5efa\u51fa\u6765\u7684 MIG \u5b9e\u4f8b\u6570 GPU \u663e\u5b58\u5206\u914d\u7387 \u8282\u70b9\u4e0a\u6240\u6709 GPU \u5361\u7684\u663e\u5b58\u5206\u914d\u7387 GPU \u7b97\u529b\u5e73\u5747\u4f7f\u7528\u7387 \u8282\u70b9\u4e0a\u6240\u6709 GPU \u5361\u7684\u7b97\u529b\u5e73\u5747\u4f7f\u7528\u7387 GPU \u663e\u5b58\u5e73\u5747\u4f7f\u7528\u7387 \u8282\u70b9\u4e0a\u6240\u6709 GPU \u5361\u7684\u5e73\u5747\u663e\u5b58\u4f7f\u7528\u7387 GPU \u9a71\u52a8\u7248\u672c \u8282\u70b9\u4e0a GPU \u5361\u9a71\u52a8\u7684\u7248\u672c\u4fe1\u606f GPU \u7b97\u529b\u4f7f\u7528\u7387\u7ec6\u8282 24 \u5c0f\u65f6\u5185\uff0c\u8282\u70b9\u4e0a\u6bcf\u5f20 GPU \u5361\u7684\u7b97\u529b\u4f7f\u7528\u7387\u7ec6\u8282\uff08\u5305\u542b max\u3001avg\u3001current\uff09 GPU \u663e\u5b58\u4f7f\u7528\u91cf 24 \u5c0f\u65f6\u5185\uff0c\u8282\u70b9\u4e0a\u6bcf\u5f20 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u91cf\u7ec6\u8282\uff08\u5305\u542b min\u3001max\u3001avg\u3001current\uff09

                          \u6839\u636e XID \u72b6\u6001\u6392\u67e5 GPU \u76f8\u5173\u95ee\u9898

                          XID \u6d88\u606f\u662f NVIDIA \u9a71\u52a8\u7a0b\u5e8f\u5411\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u6838\u65e5\u5fd7\u6216\u4e8b\u4ef6\u65e5\u5fd7\u6253\u5370\u7684\u9519\u8bef\u62a5\u544a\u3002XID \u6d88\u606f\u7528\u4e8e\u6807\u8bc6 GPU \u9519\u8bef\u4e8b\u4ef6\uff0c \u63d0\u4f9b GPU \u786c\u4ef6\u3001NVIDIA \u8f6f\u4ef6\u6216\u5e94\u7528\u4e2d\u7684\u9519\u8bef\u7c7b\u578b\u3001\u9519\u8bef\u4f4d\u7f6e\u3001\u9519\u8bef\u4ee3\u7801\u7b49\u4fe1\u606f\u3002 \u5982\u68c0\u67e5\u9879 GPU \u8282\u70b9\u4e0a\u7684 XID \u5f02\u5e38\u4e3a\u7a7a\uff0c\u8868\u660e\u65e0 XID \u6d88\u606f\uff1b\u5982\u6709\uff0c\u60a8\u53ef\u6309\u7167\u4e0b\u8868\u81ea\u52a9\u6392\u67e5\u5e76\u89e3\u51b3\u95ee\u9898\uff0c \u6216\u67e5\u770b\u66f4\u591a XID \u6d88\u606f\u3002

                          XID \u6d88\u606f \u8bf4\u660e 13 Graphics Engine Exception. \u901a\u5e38\u662f\u6570\u7ec4\u8d8a\u754c\u3001\u6307\u4ee4\u9519\u8bef\uff0c\u5c0f\u6982\u7387\u662f\u786c\u4ef6\u95ee\u9898\u3002 31 GPU memory page fault. \u901a\u5e38\u662f\u5e94\u7528\u7a0b\u5e8f\u7684\u975e\u6cd5\u5730\u5740\u8bbf\u95ee\uff0c\u6781\u5c0f\u6982\u7387\u662f\u9a71\u52a8\u6216\u8005\u786c\u4ef6\u95ee\u9898\u3002 32 Invalid or corrupted push buffer stream. \u4e8b\u4ef6\u7531 PCIE \u603b\u7ebf\u4e0a\u7ba1\u7406 NVIDIA \u9a71\u52a8\u548c GPU \u4e4b\u95f4\u901a\u4fe1\u7684 DMA \u63a7\u5236\u5668\u4e0a\u62a5\uff0c\u901a\u5e38\u662f PCI \u8d28\u91cf\u95ee\u9898\u5bfc\u81f4\uff0c\u800c\u975e\u60a8\u7684\u7a0b\u5e8f\u4ea7\u751f\u3002 38 Driver firmware error. \u901a\u5e38\u662f\u9a71\u52a8\u56fa\u4ef6\u9519\u8bef\u800c\u975e\u786c\u4ef6\u95ee\u9898\u3002 43 GPU stopped processing. \u901a\u5e38\u662f\u60a8\u5e94\u7528\u81ea\u8eab\u9519\u8bef\uff0c\u800c\u975e\u786c\u4ef6\u95ee\u9898\u3002 45 Preemptive cleanup, due to previous errors -- Most likely to see when running multiple cuda applications and hitting a DBE. \u901a\u5e38\u662f\u60a8\u624b\u52a8\u9000\u51fa\u6216\u8005\u5176\u4ed6\u6545\u969c\uff08\u786c\u4ef6\u3001\u8d44\u6e90\u9650\u5236\u7b49\uff09\u5bfc\u81f4\u7684 GPU \u5e94\u7528\u9000\u51fa\uff0cXID 45 \u53ea\u63d0\u4f9b\u4e00\u4e2a\u7ed3\u679c\uff0c\u5177\u4f53\u539f\u56e0\u901a\u5e38\u9700\u8981\u8fdb\u4e00\u6b65\u5206\u6790\u65e5\u5fd7\u3002 48 Double Bit ECC Error (DBE). \u5f53 GPU \u53d1\u751f\u4e0d\u53ef\u7ea0\u6b63\u7684\u9519\u8bef\u65f6\uff0c\u4f1a\u4e0a\u62a5\u6b64\u4e8b\u4ef6\uff0c\u8be5\u9519\u8bef\u4e5f\u4f1a\u540c\u65f6\u53cd\u9988\u7ed9\u60a8\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u901a\u5e38\u9700\u8981\u91cd\u7f6e GPU \u6216\u91cd\u542f\u8282\u70b9\u6765\u6e05\u9664\u8fd9\u4e2a\u9519\u8bef\u3002 61 Internal micro-controller breakpoint/warning. GPU \u5185\u90e8\u5f15\u64ce\u505c\u6b62\u5de5\u4f5c\uff0c\u60a8\u7684\u4e1a\u52a1\u5df2\u7ecf\u53d7\u5230\u5f71\u54cd\u3002 62 Internal micro-controller halt. \u4e0e XID 61 \u7684\u89e6\u53d1\u573a\u666f\u7c7b\u4f3c\u3002 63 ECC page retirement or row remapping recording event. \u5f53\u5e94\u7528\u7a0b\u5e8f\u906d\u9047\u5230 GPU \u663e\u5b58\u786c\u4ef6\u9519\u8bef\u65f6\uff0cNVIDIA \u81ea\u7ea0\u9519\u673a\u5236\u4f1a\u5c06\u9519\u8bef\u7684\u5185\u5b58\u533a\u57df retire \u6216\u8005 remap\uff0cretirement \u548c remapped \u4fe1\u606f\u9700\u8bb0\u5f55\u5230 infoROM \u4e2d\u624d\u80fd\u6c38\u4e45\u751f\u6548\u3002Volt \u67b6\u6784\uff1a\u6210\u529f\u8bb0\u5f55 ECC page retirement \u4e8b\u4ef6\u5230 infoROM\u3002Ampere \u67b6\u6784\uff1a\u6210\u529f\u8bb0\u5f55 row remapping \u4e8b\u4ef6\u5230 infoROM\u3002 64 ECC page retirement or row remapper recording failure. \u4e0e XID 63 \u7684\u89e6\u53d1\u573a\u666f\u7c7b\u4f3c\u3002\u4f46 XID 63 \u4ee3\u8868 retirement \u548c remapped \u4fe1\u606f\u6210\u529f\u8bb0\u5f55\u5230\u4e86 infoROM\uff0cXID 64 \u4ee3\u8868\u8be5\u8bb0\u5f55\u64cd\u4f5c\u5931\u8d25\u3002 68 NVDEC0 Exception. \u901a\u5e38\u662f\u786c\u4ef6\u6216\u9a71\u52a8\u95ee\u9898\u3002 74 NVLINK Error. NVLink \u786c\u4ef6\u9519\u8bef\u4ea7\u751f\u7684 XID\uff0c\u8868\u660e GPU \u5df2\u7ecf\u51fa\u73b0\u4e25\u91cd\u786c\u4ef6\u6545\u969c\uff0c\u9700\u8981\u4e0b\u7ebf\u7ef4\u4fee\u3002 79 GPU has fallen off the bus. GPU \u786c\u4ef6\u68c0\u6d4b\u5230\u6389\u5361\uff0c\u603b\u7ebf\u4e0a\u65e0\u6cd5\u68c0\u6d4b\u8be5 GPU\uff0c\u8868\u660e\u8be5 GPU \u5df2\u7ecf\u51fa\u73b0\u4e25\u91cd\u786c\u4ef6\u6545\u969c\uff0c\u9700\u8981\u4e0b\u7ebf\u7ef4\u4fee\u3002 92 High single-bit ECC error rate. \u786c\u4ef6\u6216\u9a71\u52a8\u6545\u969c\u3002 94 Contained ECC error. \u5f53\u5e94\u7528\u7a0b\u5e8f\u906d\u9047\u5230 GPU \u4e0d\u53ef\u7ea0\u6b63\u7684\u663e\u5b58 ECC \u9519\u8bef\u65f6\uff0cNVIDIA \u9519\u8bef\u6291\u5236\u673a\u5236\u4f1a\u5c1d\u8bd5\u5c06\u9519\u8bef\u6291\u5236\u5728\u53d1\u751f\u786c\u4ef6\u6545\u969c\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u907f\u514d\u8be5\u9519\u8bef\u5f71\u54cd GPU \u8282\u70b9\u4e0a\u8fd0\u884c\u7684\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u3002\u5f53\u6291\u5236\u673a\u5236\u6210\u529f\u6291\u5236\u9519\u8bef\u65f6\uff0c\u4f1a\u4ea7\u751f\u8be5\u4e8b\u4ef6\uff0c\u4ec5\u51fa\u73b0\u4e0d\u53ef\u7ea0\u6b63 ECC \u9519\u8bef\u7684\u5e94\u7528\u7a0b\u5e8f\u53d7\u5230\u5f71\u54cd\u3002 95 Uncontained ECC error. \u4e0e XID 94 \u7684\u89e6\u53d1\u573a\u666f\u7c7b\u4f3c\u3002\u4f46 XID 94 \u4ee3\u8868\u6291\u5236\u6210\u529f\uff0c\u800c XID 95 \u4ee3\u8868\u6291\u5236\u5931\u8d25\uff0c\u8868\u660e\u8fd0\u884c\u5728\u8be5 GPU \u4e0a\u7684\u6240\u6709\u5e94\u7528\u7a0b\u5e8f\u90fd\u5df2\u53d7\u5230\u5f71\u54cd\u3002"},{"location":"end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html#pod","title":"Pod \u7ef4\u5ea6","text":"\u5206\u7c7b \u6307\u6807\u540d\u79f0 \u63cf\u8ff0 \u5e94\u7528\u6982\u89c8 GPU \u5361 - \u7b97\u529b & \u663e\u5b58 Pod GPU \u7b97\u529b\u4f7f\u7528\u7387 \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u7b97\u529b\u4f7f\u7528\u7387 Pod GPU \u663e\u5b58\u4f7f\u7528\u7387 \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u7387 Pod \u663e\u5b58\u4f7f\u7528\u91cf \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u4f7f\u7528\u91cf \u663e\u5b58\u5206\u914d\u91cf \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u5206\u914d\u91cf Pod GPU \u663e\u5b58\u590d\u5236\u4f7f\u7528\u7387 \u5f53\u524d Pod \u6240\u4f7f\u7528\u5230\u7684 GPU \u5361\u7684\u663e\u5b58\u663e\u5b58\u590d\u5236\u6bd4\u7387 GPU \u5361 - \u5f15\u64ce\u6982\u89c8 GPU \u56fe\u5f62\u5f15\u64ce\u6d3b\u52a8\u767e\u5206\u6bd4 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cGraphics \u6216 Compute \u5f15\u64ce\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b GPU \u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387 \u8868\u793a\u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387\uff08Memory BW Utilization\uff09\u5c06\u6570\u636e\u53d1\u9001\u5230\u8bbe\u5907\u5185\u5b58\u6216\u4ece\u8bbe\u5907\u5185\u5b58\u63a5\u6536\u6570\u636e\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u8f83\u9ad8\u7684\u503c\u8868\u793a\u8bbe\u5907\u5185\u5b58\u7684\u5229\u7528\u7387\u8f83\u9ad8\u3002\u8be5\u503c\u4e3a 1\uff08100%\uff09\u8868\u793a\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u6bcf\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6761 DRAM \u6307\u4ee4\uff08\u5b9e\u9645\u4e0a\uff0c\u5cf0\u503c\u7ea6\u4e3a 0.8 (80%) \u662f\u53ef\u5b9e\u73b0\u7684\u6700\u5927\u503c\uff09\u3002\u5047\u8bbe\u8be5\u503c\u4e3a 0.2\uff0820%\uff09\uff0c\u8868\u793a 20% \u7684\u5468\u671f\u5728\u65f6\u95f4\u95f4\u9694\u5185\u8bfb\u53d6\u6216\u5199\u5165\u8bbe\u5907\u5185\u5b58\u3002 Tensor \u6838\u5fc3\u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cTensor Core \u7ba1\u9053\uff08Pipe\uff09\u5904\u4e8e Active \u65f6\u95f4\u5360\u603b\u65f6\u95f4\u7684\u6bd4\u4f8b FP16 \u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cFP16 \u7ba1\u9053\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b FP32 \u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cFP32 \u7ba1\u9053\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b FP64 \u5f15\u64ce\u4f7f\u7528\u7387 \u8868\u793a\u5728\u4e00\u4e2a\u76d1\u63a7\u5468\u671f\u5185\uff0cFP64 \u7ba1\u9053\u5904\u4e8e Active \u7684\u65f6\u95f4\u5360\u603b\u7684\u65f6\u95f4\u7684\u6bd4\u4f8b GPU \u89e3\u7801\u4f7f\u7528\u7387 GPU \u5361\u89e3\u7801\u5f15\u64ce\u6bd4\u7387 GPU \u7f16\u7801\u4f7f\u7528\u7387 GPU \u5361\u7f16\u7801\u5f15\u64ce\u6bd4\u7387 GPU \u5361 - \u6e29\u5ea6 & \u529f\u8017 GPU \u5361\u6e29\u5ea6 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u6e29\u5ea6 GPU \u5361\u529f\u7387 \u96c6\u7fa4\u4e0b\u6240\u6709 GPU \u5361\u7684\u529f\u7387 GPU \u5361 - \u603b\u8017\u80fd GPU \u5361\u603b\u5171\u6d88\u8017\u7684\u80fd\u91cf GPU \u5361 - Clock GPU \u5361\u5185\u5b58\u9891\u7387 \u5185\u5b58\u9891\u7387 GPU \u5361\u5e94\u7528SM \u65f6\u949f\u9891\u7387 \u5e94\u7528\u7684 SM \u65f6\u949f\u9891\u7387 GPU \u5361\u5e94\u7528\u5185\u5b58\u9891\u7387 \u5e94\u7528\u5185\u5b58\u9891\u7387 GPU \u5361\u89c6\u9891\u5f15\u64ce\u9891\u7387 \u89c6\u9891\u5f15\u64ce\u9891\u7387 GPU \u5361\u964d\u9891\u539f\u56e0 \u964d\u9891\u539f\u56e0 GPU \u5361 - \u5176\u4ed6\u7ec6\u8282 \u56fe\u5f62\u5f15\u64ce\u6d3b\u52a8 \u56fe\u5f62\u6216\u8ba1\u7b97\u5f15\u64ce\u7684\u4efb\u4f55\u90e8\u5206\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u65f6\u95f4\u6bd4\u4f8b\u3002\u5982\u679c\u56fe\u5f62/\u8ba1\u7b97\u4e0a\u4e0b\u6587\u5df2\u7ed1\u5b9a\u4e14\u56fe\u5f62/\u8ba1\u7b97\u7ba1\u9053\u7e41\u5fd9\uff0c\u5219\u56fe\u5f62\u5f15\u64ce\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002 SM\u6d3b\u52a8 \u591a\u5904\u7406\u5668\u4e0a\u81f3\u5c11\u4e00\u4e2a Warp \u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u65f6\u95f4\u6bd4\u4f8b\uff0c\u6240\u6709\u591a\u5904\u7406\u5668\u7684\u5e73\u5747\u503c\u3002\u8bf7\u6ce8\u610f\uff0c\u201c\u6d3b\u52a8\u201d\u5e76\u4e0d\u4e00\u5b9a\u610f\u5473\u7740 Warp \u6b63\u5728\u79ef\u6781\u8ba1\u7b97\u3002\u4f8b\u5982\uff0c\u7b49\u5f85\u5185\u5b58\u8bf7\u6c42\u7684 Warp \u88ab\u89c6\u4e3a\u6d3b\u52a8\u72b6\u6001\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u30020.8 \u6216\u66f4\u5927\u7684\u503c\u662f\u6709\u6548\u4f7f\u7528 GPU \u7684\u5fc5\u8981\u6761\u4ef6\uff0c\u4f46\u8fd8\u4e0d\u591f\u3002\u5c0f\u4e8e 0.5 \u7684\u503c\u53ef\u80fd\u8868\u793a GPU \u4f7f\u7528\u6548\u7387\u4f4e\u4e0b\u3002\u7ed9\u51fa\u4e00\u4e2a\u7b80\u5316\u7684 GPU \u67b6\u6784\u89c6\u56fe\uff0c\u5982\u679c GPU \u6709 N \u4e2a SM\uff0c\u5219\u4f7f\u7528 N \u4e2a\u5757\u5e76\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u8fd0\u884c\u7684\u5185\u6838\u5c06\u5bf9\u5e94\u4e8e\u6d3b\u52a8 1\uff08100%\uff09\u3002\u4f7f\u7528 N/5 \u4e2a\u5757\u5e76\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u8fd0\u884c\u7684\u5185\u6838\u5c06\u5bf9\u5e94\u4e8e\u6d3b\u52a8 0.2\uff0820%\uff09\u3002\u4f7f\u7528 N \u4e2a\u5757\u5e76\u8fd0\u884c\u4e94\u5206\u4e4b\u4e00\u65f6\u95f4\u95f4\u9694\u7684\u5185\u6838\uff0c\u5982\u679c SM \u5904\u4e8e\u7a7a\u95f2\u72b6\u6001\uff0c\u5219\u6d3b\u52a8\u4e5f\u5c06\u4e3a 0.2\uff0820%\uff09\u3002\u8be5\u503c\u4e0e\u6bcf\u4e2a\u5757\u7684\u7ebf\u7a0b\u6570\u65e0\u5173\uff08\u53c2\u89c1DCGM_FI_PROF_SM_OCCUPANCY\uff09\u3002 SM \u5165\u4f4f\u7387 \u591a\u5904\u7406\u5668\u4e0a\u9a7b\u7559 Warp \u7684\u6bd4\u4f8b\uff0c\u76f8\u5bf9\u4e8e\u591a\u5904\u7406\u5668\u4e0a\u652f\u6301\u7684\u6700\u5927\u5e76\u53d1 Warp \u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u5360\u7528\u7387\u8d8a\u9ad8\u5e76\u4e0d\u4e00\u5b9a\u8868\u793a GPU \u4f7f\u7528\u7387\u8d8a\u9ad8\u3002\u5bf9\u4e8e GPU \u5185\u5b58\u5e26\u5bbd\u53d7\u9650\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff08\u53c2\u89c1DCGM_FI_PROF_DRAM_ACTIVE\uff09\uff0c\u5360\u7528\u7387\u8d8a\u9ad8\u8868\u660e GPU \u4f7f\u7528\u7387\u8d8a\u9ad8\u3002\u4f46\u662f\uff0c\u5982\u679c\u5de5\u4f5c\u8d1f\u8f7d\u662f\u8ba1\u7b97\u53d7\u9650\u7684\uff08\u5373\u4e0d\u53d7 GPU \u5185\u5b58\u5e26\u5bbd\u6216\u5ef6\u8fdf\u9650\u5236\uff09\uff0c\u5219\u5360\u7528\u7387\u8d8a\u9ad8\u5e76\u4e0d\u4e00\u5b9a\u4e0e GPU \u4f7f\u7528\u7387\u8d8a\u9ad8\u76f8\u5173\u3002\u8ba1\u7b97\u5360\u7528\u7387\u5e76\u4e0d\u7b80\u5355\uff0c\u5b83\u53d6\u51b3\u4e8e GPU \u5c5e\u6027\u3001\u6bcf\u4e2a\u5757\u7684\u7ebf\u7a0b\u6570\u3001\u6bcf\u4e2a\u7ebf\u7a0b\u7684\u5bc4\u5b58\u5668\u4ee5\u53ca\u6bcf\u4e2a\u5757\u7684\u5171\u4eab\u5185\u5b58\u7b49\u56e0\u7d20\u3002\u4f7f\u7528CUDA \u5360\u7528\u7387\u8ba1\u7b97\u5668 \u63a2\u7d22\u5404\u79cd\u5360\u7528\u7387\u573a\u666f\u3002 \u5f20\u91cf\u6d3b\u52a8 \u5f20\u91cf (HMMA / IMMA) \u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0c\u5f20\u91cf\u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8 1 (100%) \u76f8\u5f53\u4e8e\u5728\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u9694\u4e00\u4e2a\u5468\u671f\u53d1\u51fa\u4e00\u4e2a\u5f20\u91cf\u6307\u4ee4\u3002\u6d3b\u52a8 0.2 (20%) \u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u7684\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u7684\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u7684\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4ecb\u4e8e\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605DCGM_FI_PROF_SM_ACTIVE\u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 FP64 \u5f15\u64ce\u6d3b\u52a8 FP64\uff08\u53cc\u7cbe\u5ea6\uff09\u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0cFP64 \u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u91cf 1\uff08100%\uff09\u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185 Volta \u4e0a\u6bcf\u56db\u4e2a\u5468\u671f\u7684\u6bcf\u4e2a SM\u4e0a\u6267\u884c\u4e00\u6761 FP64 \u6307\u4ee4 \u3002\u6d3b\u52a8\u91cf 0.2\uff0820%\uff09\u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4ecb\u4e8e\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605 DCGM_FI_PROF_SM_ACTIVE \u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 FP32 \u5f15\u64ce\u6d3b\u52a8 FMA\uff08FP32\uff08\u5355\u7cbe\u5ea6\uff09\u548c\u6574\u6570\uff09\u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0cFP32 \u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u91cf 1\uff08100%\uff09\u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u9694\u4e00\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6b21 FP32 \u6307\u4ee4\u3002\u6d3b\u52a8\u91cf 0.2\uff0820%\uff09\u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605DCGM_FI_PROF_SM_ACTIVE\u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 FP16 \u5f15\u64ce\u6d3b\u52a8 FP16\uff08\u534a\u7cbe\u5ea6\uff09\u7ba1\u9053\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u7684\u5468\u671f\u5206\u6570\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0cFP16 \u6838\u5fc3\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u91cf 1\uff08100%\uff09\u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u9694\u4e00\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6b21 FP16 \u6307\u4ee4\u3002\u6d3b\u52a8\u91cf 0.2\uff0820%\uff09\u53ef\u80fd\u8868\u793a 20% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c100% \u7684 SM \u5728\u6574\u4e2a\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 20%\uff0c100% \u7684 SM \u5728 20% \u7684\u65f6\u95f4\u6bb5\u5185\u5229\u7528\u7387\u4e3a 100%\uff0c\u6216\u8005\u4ecb\u4e8e\u4e24\u8005\u4e4b\u95f4\u7684\u4efb\u4f55\u7ec4\u5408\uff08\u8bf7\u53c2\u9605DCGM_FI_PROF_SM_ACTIVE\u4ee5\u5e2e\u52a9\u6d88\u9664\u8fd9\u4e9b\u53ef\u80fd\u6027\u7684\u6b67\u4e49\uff09\u3002 \u5185\u5b58\u5e26\u5bbd\u5229\u7528\u7387 \u5411\u8bbe\u5907\u5185\u5b58\u53d1\u9001\u6570\u636e\u6216\u4ece\u8bbe\u5907\u5185\u5b58\u63a5\u6536\u6570\u636e\u7684\u5468\u671f\u6bd4\u4f8b\u3002\u8be5\u503c\u8868\u793a\u65f6\u95f4\u95f4\u9694\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u503c\u8d8a\u9ad8\uff0c\u8bbe\u5907\u5185\u5b58\u7684\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u6d3b\u52a8\u7387\u4e3a 1 (100%) \u76f8\u5f53\u4e8e\u6574\u4e2a\u65f6\u95f4\u95f4\u9694\u5185\u6bcf\u4e2a\u5468\u671f\u6267\u884c\u4e00\u6761 DRAM \u6307\u4ee4\uff08\u5b9e\u9645\u4e0a\uff0c\u5cf0\u503c\u7ea6\u4e3a 0.8 (80%) \u662f\u53ef\u5b9e\u73b0\u7684\u6700\u5927\u503c\uff09\u3002\u6d3b\u52a8\u7387\u4e3a 0.2 (20%) \u8868\u793a\u5728\u65f6\u95f4\u95f4\u9694\u5185\u6709 20% \u7684\u5468\u671f\u6b63\u5728\u8bfb\u53d6\u6216\u5199\u5165\u8bbe\u5907\u5185\u5b58\u3002 NVLink \u5e26\u5bbd \u901a\u8fc7 NVLink \u4f20\u8f93/\u63a5\u6536\u7684\u6570\u636e\u901f\u7387\uff08\u4e0d\u5305\u62ec\u534f\u8bae\u6807\u5934\uff09\uff0c\u4ee5\u6bcf\u79d2\u5b57\u8282\u6570\u4e3a\u5355\u4f4d\u3002\u8be5\u503c\u8868\u793a\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u901f\u7387\u662f\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\u3002\u4f8b\u5982\uff0c\u5982\u679c 1 \u79d2\u5185\u4f20\u8f93\u4e86 1 GB \u7684\u6570\u636e\uff0c\u5219\u65e0\u8bba\u6570\u636e\u662f\u4ee5\u6052\u5b9a\u901f\u7387\u8fd8\u662f\u7a81\u53d1\u901f\u7387\u4f20\u8f93\uff0c\u901f\u7387\u90fd\u662f 1 GB/s\u3002\u7406\u8bba\u4e0a\uff0c\u6bcf\u4e2a\u94fe\u8def\u6bcf\u4e2a\u65b9\u5411\u7684\u6700\u5927 NVLink Gen2 \u5e26\u5bbd\u4e3a 25 GB/s\u3002 PCIe \u5e26\u5bbd \u901a\u8fc7 PCIe \u603b\u7ebf\u4f20\u8f93/\u63a5\u6536\u7684\u6570\u636e\u901f\u7387\uff0c\u5305\u62ec\u534f\u8bae\u6807\u5934\u548c\u6570\u636e\u6709\u6548\u8d1f\u8f7d\uff0c\u4ee5\u5b57\u8282/\u79d2\u4e3a\u5355\u4f4d\u3002\u8be5\u503c\u8868\u793a\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\uff0c\u800c\u4e0d\u662f\u77ac\u65f6\u503c\u3002\u8be5\u901f\u7387\u662f\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u5e73\u5747\u503c\u3002\u4f8b\u5982\uff0c\u5982\u679c 1 \u79d2\u5185\u4f20\u8f93\u4e86 1 GB \u7684\u6570\u636e\uff0c\u5219\u65e0\u8bba\u6570\u636e\u662f\u4ee5\u6052\u5b9a\u901f\u7387\u8fd8\u662f\u7a81\u53d1\u901f\u7387\u4f20\u8f93\uff0c\u901f\u7387\u90fd\u662f 1 GB/s\u3002\u7406\u8bba\u4e0a\u6700\u5927 PCIe Gen3 \u5e26\u5bbd\u4e3a\u6bcf\u901a\u9053 985 MB/s\u3002 PCIe \u4f20\u8f93\u901f\u7387 \u8282\u70b9 GPU \u5361\u901a\u8fc7 PCIe \u603b\u7ebf\u4f20\u8f93\u7684\u6570\u636e\u901f\u7387 PCIe \u63a5\u6536\u901f\u7387 \u8282\u70b9 GPU \u5361\u901a\u8fc7 PCIe \u603b\u7ebf\u63a5\u6536\u7684\u6570\u636e\u901f\u7387"},{"location":"end-user/kpanda/gpu/nvidia/mig/index.html","title":"NVIDIA \u591a\u5b9e\u4f8b GPU(MIG) \u6982\u8ff0","text":""},{"location":"end-user/kpanda/gpu/nvidia/mig/index.html#mig","title":"MIG \u573a\u666f","text":"
                          • \u591a\u79df\u6237\u4e91\u73af\u5883

                            MIG \u5141\u8bb8\u4e91\u670d\u52a1\u63d0\u4f9b\u5546\u5c06\u4e00\u5757\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a\u72ec\u7acb\u7684 GPU \u5b9e\u4f8b\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u53ef\u4ee5\u72ec\u7acb\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u79df\u6237\u3002\u8fd9\u6837\u53ef\u4ee5\u5b9e\u73b0\u8d44\u6e90\u7684\u9694\u79bb\u548c\u72ec\u7acb\u6027\uff0c\u6ee1\u8db3\u591a\u4e2a\u79df\u6237\u5bf9 GPU \u8ba1\u7b97\u80fd\u529b\u7684\u9700\u6c42\u3002

                          • \u5bb9\u5668\u5316\u5e94\u7528\u7a0b\u5e8f

                            MIG \u53ef\u4ee5\u5728\u5bb9\u5668\u5316\u73af\u5883\u4e2d\u5b9e\u73b0\u66f4\u7ec6\u7c92\u5ea6\u7684 GPU \u8d44\u6e90\u7ba1\u7406\u3002\u901a\u8fc7\u5c06\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a MIG \u5b9e\u4f8b\uff0c\u53ef\u4ee5\u4e3a\u6bcf\u4e2a\u5bb9\u5668\u5206\u914d\u72ec\u7acb\u7684 GPU \u8ba1\u7b97\u8d44\u6e90\uff0c\u63d0\u4f9b\u66f4\u597d\u7684\u6027\u80fd\u9694\u79bb\u548c\u8d44\u6e90\u5229\u7528\u3002

                          • \u6279\u5904\u7406\u4f5c\u4e1a

                            \u5bf9\u4e8e\u9700\u8981\u5927\u89c4\u6a21\u5e76\u884c\u8ba1\u7b97\u7684\u6279\u5904\u7406\u4f5c\u4e1a\uff0cMIG \u53ef\u4ee5\u63d0\u4f9b\u66f4\u9ad8\u7684\u8ba1\u7b97\u6027\u80fd\u548c\u66f4\u5927\u7684\u663e\u5b58\u5bb9\u91cf\u3002\u6bcf\u4e2a MIG \u5b9e\u4f8b\u53ef\u4ee5\u5229\u7528\u7269\u7406 GPU \u7684\u4e00\u90e8\u5206\u8ba1\u7b97\u8d44\u6e90\uff0c\u4ece\u800c\u52a0\u901f\u5927\u89c4\u6a21\u8ba1\u7b97\u4efb\u52a1\u7684\u5904\u7406\u3002

                          • AI/\u673a\u5668\u5b66\u4e60\u8bad\u7ec3

                            MIG \u53ef\u4ee5\u5728\u8bad\u7ec3\u5927\u89c4\u6a21\u6df1\u5ea6\u5b66\u4e60\u6a21\u578b\u65f6\u63d0\u4f9b\u66f4\u5927\u7684\u8ba1\u7b97\u80fd\u529b\u548c\u663e\u5b58\u5bb9\u91cf\u3002\u5c06\u7269\u7406 GPU \u5212\u5206\u4e3a\u591a\u4e2a MIG \u5b9e\u4f8b\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u53ef\u4ee5\u72ec\u7acb\u8fdb\u884c\u6a21\u578b\u8bad\u7ec3\uff0c\u63d0\u9ad8\u8bad\u7ec3\u6548\u7387\u548c\u541e\u5410\u91cf\u3002

                          \u603b\u4f53\u800c\u8a00\uff0cNVIDIA MIG \u9002\u7528\u4e8e\u9700\u8981\u66f4\u7ec6\u7c92\u5ea6\u7684GPU\u8d44\u6e90\u5206\u914d\u548c\u7ba1\u7406\u7684\u573a\u666f\uff0c\u53ef\u4ee5\u5b9e\u73b0\u8d44\u6e90\u7684\u9694\u79bb\u3001\u63d0\u9ad8\u6027\u80fd\u5229\u7528\u7387\uff0c\u5e76\u4e14\u6ee1\u8db3\u591a\u4e2a\u7528\u6237\u6216\u5e94\u7528\u7a0b\u5e8f\u5bf9 GPU \u8ba1\u7b97\u80fd\u529b\u7684\u9700\u6c42\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/index.html#mig_1","title":"MIG \u6982\u8ff0","text":"

                          NVIDIA \u591a\u5b9e\u4f8b GPU\uff08Multi-Instance GPU\uff0c\u7b80\u79f0 MIG\uff09\u662f NVIDIA \u5728 H100\uff0cA100\uff0cA30 \u7cfb\u5217 GPU \u5361\u4e0a\u63a8\u51fa\u7684\u4e00\u9879\u65b0\u7279\u6027\uff0c \u65e8\u5728\u5c06\u4e00\u5757\u7269\u7406 GPU \u5206\u5272\u4e3a\u591a\u4e2a GPU \u5b9e\u4f8b\uff0c\u4ee5\u63d0\u4f9b\u66f4\u7ec6\u7c92\u5ea6\u7684\u8d44\u6e90\u5171\u4eab\u548c\u9694\u79bb\u3002MIG \u6700\u591a\u53ef\u5c06\u4e00\u5757 GPU \u5212\u5206\u6210\u4e03\u4e2a GPU \u5b9e\u4f8b\uff0c \u4f7f\u5f97\u4e00\u4e2a \u7269\u7406 GPU \u5361\u53ef\u4e3a\u591a\u4e2a\u7528\u6237\u63d0\u4f9b\u5355\u72ec\u7684 GPU \u8d44\u6e90\uff0c\u4ee5\u5b9e\u73b0\u6700\u4f73 GPU \u5229\u7528\u7387\u3002

                          \u8fd9\u4e2a\u529f\u80fd\u4f7f\u5f97\u591a\u4e2a\u5e94\u7528\u7a0b\u5e8f\u6216\u7528\u6237\u53ef\u4ee5\u540c\u65f6\u5171\u4eabGPU\u8d44\u6e90\uff0c\u63d0\u9ad8\u4e86\u8ba1\u7b97\u8d44\u6e90\u7684\u5229\u7528\u7387\uff0c\u5e76\u589e\u52a0\u4e86\u7cfb\u7edf\u7684\u53ef\u6269\u5c55\u6027\u3002

                          \u901a\u8fc7 MIG\uff0c\u6bcf\u4e2a GPU \u5b9e\u4f8b\u7684\u5904\u7406\u5668\u5728\u6574\u4e2a\u5185\u5b58\u7cfb\u7edf\u4e2d\u5177\u6709\u72ec\u7acb\u4e14\u9694\u79bb\u7684\u8def\u5f84\u2014\u2014\u82af\u7247\u4e0a\u7684\u4ea4\u53c9\u5f00\u5173\u7aef\u53e3\u3001L2 \u9ad8\u901f\u7f13\u5b58\u7ec4\u3001\u5185\u5b58\u63a7\u5236\u5668\u548c DRAM \u5730\u5740\u603b\u7ebf\u90fd\u552f\u4e00\u5206\u914d\u7ed9\u5355\u4e2a\u5b9e\u4f8b\u3002

                          \u8fd9\u786e\u4fdd\u4e86\u5355\u4e2a\u7528\u6237\u7684\u5de5\u4f5c\u8d1f\u8f7d\u80fd\u591f\u4ee5\u53ef\u9884\u6d4b\u7684\u541e\u5410\u91cf\u548c\u5ef6\u8fdf\u8fd0\u884c\uff0c\u5e76\u5177\u6709\u76f8\u540c\u7684\u4e8c\u7ea7\u7f13\u5b58\u5206\u914d\u548c DRAM \u5e26\u5bbd\u3002 MIG \u53ef\u4ee5\u5212\u5206\u53ef\u7528\u7684 GPU \u8ba1\u7b97\u8d44\u6e90\uff08\u5305\u62ec\u6d41\u591a\u5904\u7406\u5668\u6216 SM \u548c GPU \u5f15\u64ce\uff0c\u5982\u590d\u5236\u5f15\u64ce\u6216\u89e3\u7801\u5668\uff09\u8fdb\u884c\u5206\u533a\uff0c \u4ee5\u4fbf\u4e3a\u4e0d\u540c\u7684\u5ba2\u6237\u7aef\uff08\u5982\u4e91\u4e3b\u673a\u3001\u5bb9\u5668\u6216\u8fdb\u7a0b\uff09\u63d0\u4f9b\u5b9a\u4e49\u7684\u670d\u52a1\u8d28\u91cf\uff08QoS\uff09\u548c\u6545\u969c\u9694\u79bb\uff09\u3002 MIG \u4f7f\u591a\u4e2a GPU \u5b9e\u4f8b\u80fd\u591f\u5728\u5355\u4e2a\u7269\u7406 GPU \u4e0a\u5e76\u884c\u8fd0\u884c\u3002

                          MIG \u5141\u8bb8\u591a\u4e2a vGPU\uff08\u4ee5\u53ca\u4e91\u4e3b\u673a\uff09\u5728\u5355\u4e2a GPU \u5b9e\u4f8b\u4e0a\u5e76\u884c\u8fd0\u884c\uff0c\u540c\u65f6\u4fdd\u7559 vGPU \u63d0\u4f9b\u7684\u9694\u79bb\u4fdd\u8bc1\u3002 \u6709\u5173\u4f7f\u7528 vGPU \u548c MIG \u8fdb\u884c GPU \u5206\u533a\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 NVIDIA Multi-Instance GPU and NVIDIA Virtual Compute Server\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/index.html#mig_2","title":"MIG \u67b6\u6784","text":"

                          \u5982\u4e0b\u662f\u4e00\u4e2a MIG \u7684\u6982\u8ff0\u56fe\uff0c\u53ef\u4ee5\u770b\u51fa MIG \u5c06\u4e00\u5f20\u7269\u7406 GPU \u5361\u865a\u62df\u5316\u6210\u4e86 7 \u4e2a GPU \u5b9e\u4f8b\uff0c\u8fd9\u4e9b GPU \u5b9e\u4f8b\u80fd\u591f\u53ef\u4ee5\u88ab\u591a\u4e2a User \u4f7f\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/index.html#_1","title":"\u91cd\u8981\u6982\u5ff5","text":"
                          • SM \uff1a\u6d41\u5f0f\u591a\u5904\u7406\u5668\uff08Streaming Multiprocessor\uff09\uff0cGPU \u7684\u6838\u5fc3\u8ba1\u7b97\u5355\u5143\uff0c\u8d1f\u8d23\u6267\u884c\u56fe\u5f62\u6e32\u67d3\u548c\u901a\u7528\u8ba1\u7b97\u4efb\u52a1\u3002 \u6bcf\u4e2a SM \u5305\u542b\u4e00\u7ec4 CUDA \u6838\u5fc3\uff0c\u4ee5\u53ca\u5171\u4eab\u5185\u5b58\u3001\u5bc4\u5b58\u5668\u6587\u4ef6\u548c\u5176\u4ed6\u8d44\u6e90\uff0c\u53ef\u4ee5\u540c\u65f6\u6267\u884c\u591a\u4e2a\u7ebf\u7a0b\u3002 \u6bcf\u4e2a MIG \u5b9e\u4f8b\u90fd\u62e5\u6709\u4e00\u5b9a\u6570\u91cf\u7684 SM \u548c\u5176\u4ed6\u76f8\u5173\u8d44\u6e90\uff0c\u4ee5\u53ca\u88ab\u5212\u5206\u51fa\u6765\u7684\u663e\u5b58\u3002
                          • GPU Memory Slice \uff1aGPU \u5185\u5b58\u5207\u7247\uff0cGPU \u5185\u5b58\u5207\u7247\u662f GPU \u5185\u5b58\u7684\u6700\u5c0f\u90e8\u5206\uff0c\u5305\u62ec\u76f8\u5e94\u7684\u5185\u5b58\u63a7\u5236\u5668\u548c\u7f13\u5b58\u3002 GPU \u5185\u5b58\u5207\u7247\u5927\u7ea6\u662f GPU \u5185\u5b58\u8d44\u6e90\u603b\u91cf\u7684\u516b\u5206\u4e4b\u4e00\uff0c\u5305\u62ec\u5bb9\u91cf\u548c\u5e26\u5bbd\u3002
                          • GPU SM Slice \uff1aGPU SM \u5207\u7247\u662f GPU \u4e0a SM \u7684\u6700\u5c0f\u8ba1\u7b97\u5355\u4f4d\u3002\u5728 MIG \u6a21\u5f0f\u4e0b\u914d\u7f6e\u65f6\uff0c GPU SM \u5207\u7247\u5927\u7ea6\u662f GPU \u4e2d\u53ef\u7528 SMS \u603b\u6570\u7684\u4e03\u5206\u4e4b\u4e00\u3002
                          • GPU Slice \uff1aGPU \u5207\u7247\u662f GPU \u4e2d\u7531\u5355\u4e2a GPU \u5185\u5b58\u5207\u7247\u548c\u5355\u4e2a GPU SM \u5207\u7247\u7ec4\u5408\u5728\u4e00\u8d77\u7684\u6700\u5c0f\u90e8\u5206\u3002
                          • GPU Instance \uff1aGPU \u5b9e\u4f8b \uff08GI\uff09 \u662f GPU \u5207\u7247\u548c GPU \u5f15\u64ce\uff08DMA\u3001NVDEC \u7b49\uff09\u7684\u7ec4\u5408\u3002 GPU \u5b9e\u4f8b\u4e2d\u7684\u4efb\u4f55\u5185\u5bb9\u59cb\u7ec8\u5171\u4eab\u6240\u6709 GPU \u5185\u5b58\u5207\u7247\u548c\u5176\u4ed6 GPU \u5f15\u64ce\uff0c\u4f46\u5b83\u7684 SM \u5207\u7247\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7ec6\u5206\u4e3a\u8ba1\u7b97\u5b9e\u4f8b\uff08CI\uff09\u3002 GPU \u5b9e\u4f8b\u63d0\u4f9b\u5185\u5b58 QoS\u3002\u6bcf\u4e2a GPU \u5207\u7247\u90fd\u5305\u542b\u4e13\u7528\u7684 GPU \u5185\u5b58\u8d44\u6e90\uff0c\u8fd9\u4e9b\u8d44\u6e90\u4f1a\u9650\u5236\u53ef\u7528\u5bb9\u91cf\u548c\u5e26\u5bbd\uff0c\u5e76\u63d0\u4f9b\u5185\u5b58 QoS\u3002 \u6bcf\u4e2a GPU \u5185\u5b58\u5207\u7247\u83b7\u5f97\u603b GPU \u5185\u5b58\u8d44\u6e90\u7684\u516b\u5206\u4e4b\u4e00\uff0c\u6bcf\u4e2a GPU SM \u5207\u7247\u83b7\u5f97 SM \u603b\u6570\u7684\u4e03\u5206\u4e4b\u4e00\u3002
                          • Compute Instance \uff1aGPU \u5b9e\u4f8b\u7684\u8ba1\u7b97\u5207\u7247\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7ec6\u5206\u4e3a\u591a\u4e2a\u8ba1\u7b97\u5b9e\u4f8b \uff08CI\uff09\uff0c\u5176\u4e2d CI \u5171\u4eab\u7236 GI \u7684\u5f15\u64ce\u548c\u5185\u5b58\uff0c\u4f46\u6bcf\u4e2a CI \u90fd\u6709\u4e13\u7528\u7684 SM \u8d44\u6e90\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/index.html#gpu-gi","title":"GPU \u5b9e\u4f8b\uff08GI\uff09","text":"

                          \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728 GPU \u4e0a\u521b\u5efa\u5404\u79cd\u5206\u533a\u3002\u5c06\u4f7f\u7528 A100-40GB \u4f5c\u4e3a\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u5bf9\u5355\u4e2a GPU \u7269\u7406\u5361\u4e0a\u8fdb\u884c\u5206\u533a\u3002

                          GPU \u7684\u5206\u533a\u662f\u4f7f\u7528\u5185\u5b58\u5207\u7247\u8fdb\u884c\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u8ba4\u4e3a A100-40GB GPU \u5177\u6709 8x5GB \u5185\u5b58\u5207\u7247\u548c 7 \u4e2a GPU SM \u5207\u7247\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5c55\u793a\u4e86 A100 \u4e0a\u53ef\u7528\u7684\u5185\u5b58\u5207\u7247\u3002

                          \u5982\u4e0a\u6240\u8ff0\uff0c\u521b\u5efa GPU \u5b9e\u4f8b \uff08GI\uff09 \u9700\u8981\u5c06\u4e00\u5b9a\u6570\u91cf\u7684\u5185\u5b58\u5207\u7247\u4e0e\u4e00\u5b9a\u6570\u91cf\u7684\u8ba1\u7b97\u5207\u7247\u76f8\u7ed3\u5408\u3002 \u5728\u4e0b\u56fe\u4e2d\uff0c\u4e00\u4e2a 5GB \u5185\u5b58\u5207\u7247\u4e0e 1 \u4e2a\u8ba1\u7b97\u5207\u7247\u76f8\u7ed3\u5408\uff0c\u4ee5\u521b\u5efa 1g.5gb GI \u914d\u7f6e\u6587\u4ef6\uff1a

                          \u540c\u6837\uff0c4x5GB \u5185\u5b58\u5207\u7247\u53ef\u4ee5\u4e0e 4x1 \u8ba1\u7b97\u5207\u7247\u7ed3\u5408\u4f7f\u7528\u4ee5\u521b\u5efa 4g.20gb \u7684 GI \u914d\u7f6e\u6587\u4ef6\uff1a

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/index.html#ci","title":"\u8ba1\u7b97\u5b9e\u4f8b\uff08CI\uff09","text":"

                          GPU \u5b9e\u4f8b\u7684\u8ba1\u7b97\u5207\u7247(GI)\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7ec6\u5206\u4e3a\u591a\u4e2a\u8ba1\u7b97\u5b9e\u4f8b\uff08CI\uff09\uff0c\u5176\u4e2d CI \u5171\u4eab\u7236 GI \u7684\u5f15\u64ce\u548c\u5185\u5b58\uff0c \u4f46\u6bcf\u4e2a CI \u90fd\u6709\u4e13\u7528\u7684 SM \u8d44\u6e90\u3002\u4f7f\u7528\u4e0a\u9762\u7684\u76f8\u540c 4g.20gb \u793a\u4f8b\uff0c\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a CI \u4ee5\u4ec5\u4f7f\u7528\u7b2c\u4e00\u4e2a\u8ba1\u7b97\u5207\u7247\u7684 1c.4g.20gb \u8ba1\u7b97\u914d\u7f6e\uff0c\u5982\u4e0b\u56fe\u84dd\u8272\u90e8\u5206\u6240\u793a\uff1a

                          \u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u901a\u8fc7\u9009\u62e9\u4efb\u4f55\u8ba1\u7b97\u5207\u7247\u6765\u521b\u5efa 4 \u4e2a\u4e0d\u540c\u7684 CI\u3002\u8fd8\u53ef\u4ee5\u5c06\u4e24\u4e2a\u8ba1\u7b97\u5207\u7247\u7ec4\u5408\u5728\u4e00\u8d77\u4ee5\u521b\u5efa 2c.4g.20gb \u7684\u8ba1\u7b97\u914d\u7f6e\uff09\uff1a

                          \u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u53ef\u4ee5\u7ec4\u5408 3 \u4e2a\u8ba1\u7b97\u5207\u7247\u4ee5\u521b\u5efa\u8ba1\u7b97\u914d\u7f6e\u6587\u4ef6\uff0c\u6216\u8005\u53ef\u4ee5\u7ec4\u5408\u6240\u6709 4 \u4e2a\u8ba1\u7b97\u5207\u7247\u4ee5\u521b\u5efa 3c.4g.20gb \u3001 4c.4g.20gb \u8ba1\u7b97\u914d\u7f6e\u6587\u4ef6\u3002 \u5408\u5e76\u6240\u6709 4 \u4e2a\u8ba1\u7b97\u5207\u7247\u65f6\uff0c\u914d\u7f6e\u6587\u4ef6\u7b80\u79f0\u4e3a 4g.20gb \u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/create_mig.html","title":"\u5f00\u542f MIG \u529f\u80fd","text":"

                          \u672c\u7ae0\u8282\u4ecb\u7ecd\u5982\u4f55\u5f00\u542f NVIDIA MIG \u529f\u80fd\u65b9\u5f0f\uff0cNVIDIA \u5f53\u524d\u63d0\u4f9b\u4e24\u79cd\u5728 Kubernetes \u8282\u70b9\u4e0a\u516c\u5f00 MIG \u8bbe\u5907\u7684\u7b56\u7565\uff1a

                          • Single \u6a21\u5f0f\uff0c\u8282\u70b9\u4ec5\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u5355\u4e00\u7c7b\u578b\u7684 MIG \u8bbe\u5907\u3002
                          • Mixed \u6a21\u5f0f\uff0c\u8282\u70b9\u5728\u5176\u6240\u6709 GPU \u4e0a\u516c\u5f00\u6df7\u5408 MIG \u8bbe\u5907\u7c7b\u578b\u3002

                          \u8be6\u60c5\u53c2\u8003 NVIDIA GPU \u5361\u4f7f\u7528\u6a21\u5f0f\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/create_mig.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5f85\u5b89\u88c5 GPU \u9a71\u52a8\u8282\u70b9\u7cfb\u7edf\u8981\u6c42\u8bf7\u53c2\u8003\uff1aGPU \u652f\u6301\u77e9\u9635
                          • \u786e\u8ba4\u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361\uff08NVIDIA H100\u3001 A100 \u548c A30 Tensor Core GPU\uff09\uff0c \u8be6\u60c5\u53c2\u8003 GPU \u652f\u6301\u77e9\u9635\u3002
                          • \u8282\u70b9\u4e0a\u7684\u6240\u6709 GPU \u5fc5\u987b\uff1a\u5c5e\u4e8e\u540c\u4e00\u4ea7\u54c1\u7ebf\uff08\u4f8b\u5982 A100-SXM-40GB\uff09
                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/create_mig.html#gpu-operator-addon","title":"\u5b89\u88c5 gpu-operator Addon","text":""},{"location":"end-user/kpanda/gpu/nvidia/mig/create_mig.html#_2","title":"\u53c2\u6570\u914d\u7f6e","text":"

                          \u5b89\u88c5 Operator \u65f6\u9700\u8981\u5bf9\u5e94\u8bbe\u7f6e MigManager Config \u53c2\u6570\uff0c \u9ed8\u8ba4\u4e3a default-mig-parted-config \uff0c\u540c\u65f6\u4e5f\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5207\u5206\u7b56\u7565\u914d\u7f6e\u6587\u4ef6\uff1a

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/create_mig.html#_3","title":"\u81ea\u5b9a\u4e49\u5207\u5206\u7b56\u7565","text":"
                            ## \u81ea\u5b9a\u4e49\u5207\u5206 GI \u5b9e\u4f8b\u914d\u7f6e\n  all-disabled:\n    - devices: all\n      mig-enabled: false\n  all-enabled:\n    - devices: all\n      mig-enabled: true\n      mig-devices: {}\n  all-1g.10gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.5gb: 7\n  all-1g.10gb.me:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.10gb+me: 1\n  all-1g.20gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.20gb: 4\n  all-2g.20gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        2g.20gb: 3\n  all-3g.40gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        3g.40gb: 2\n  all-4g.40gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        4g.40gb: 1\n  all-7g.80gb:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        7g.80gb: 1\n  all-balanced:\n    - device-filter: [\"0x233110DE\", \"0x232210DE\", \"0x20B210DE\", \"0x20B510DE\", \"0x20F310DE\", \"0x20F510DE\"]\n      devices: all\n      mig-enabled: true\n      mig-devices:\n        1g.10gb: 2\n        2g.20gb: 1\n        3g.40gb: 1\n  # \u8bbe\u7f6e\u540e\u4f1a\u6309\u7167\u8bbe\u7f6e\u89c4\u683c\u5207\u5206 CI \u5b9e\u4f8b\n  custom-config:\n    - devices: all\n      mig-enabled: true\n      mig-devices:\n        3g.40gb: 2\n

                          \u5728\u4e0a\u8ff0\u7684 YAML \u4e2d\u8bbe\u7f6e custom-config \uff0c\u8bbe\u7f6e\u540e\u4f1a\u6309\u7167\u89c4\u683c\u5207\u5206 CI \u5b9e\u4f8b\u3002

                          custom-config:\n  - devices: all\n    mig-enabled: true\n    mig-devices:\n      1c.3g.40gb: 6\n

                          \u8bbe\u7f6e\u5b8c\u6210\u540e\uff0c\u5728\u786e\u8ba4\u90e8\u7f72\u5e94\u7528\u65f6\u5373\u53ef\u4f7f\u7528 GPU MIG \u8d44\u6e90\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/create_mig.html#gpu","title":"\u5207\u6362\u8282\u70b9 GPU \u6a21\u5f0f","text":"

                          Note

                          \u5207\u6362 GPU \u6a21\u5f0f\u6216\u8005\u4fee\u6539\u5207\u5206\u89c4\u683c\u540e\u9700\u8981\u91cd\u542f nvidia-mig-manager\u3002

                          \u5f53\u6211\u4eec\u6210\u529f\u5b89\u88c5 gpu-operator \u4e4b\u540e\uff0c\u8282\u70b9\u9ed8\u8ba4\u662f\u6574\u5361\u6a21\u5f0f\uff0c\u5728\u8282\u70b9\u7ba1\u7406\u9875\u9762\u4f1a\u6709\u6807\u8bc6\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

                          \u70b9\u51fb\u8282\u70b9\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u9009\u62e9 GPU \u6a21\u5f0f\u5207\u6362 \uff0c\u7136\u540e\u9009\u62e9\u5bf9\u5e94\u7684 MIG \u6a21\u5f0f\u4ee5\u53ca\u5207\u5206\u7684\u7b56\u7565\uff0c\u8fd9\u91cc\u4ee5 MIXED \u6a21\u5f0f\u4e3a\u4f8b\uff1a

                          \u8fd9\u91cc\u4e00\u5171\u6709\u4e24\u4e2a\u914d\u7f6e\uff1a

                          1. MIg \u7b56\u7565\uff1aMixed \u4ee5\u53ca Single \u3002
                          2. \u5207\u5206\u7b56\u7565\uff1a\u8fd9\u91cc\u7684\u7b56\u7565\u9700\u8981\u4e0e default-mig-parted-config \uff08\u6216\u8005\u7528\u6237\u81ea\u5b9a\u4e49\u7684\u5207\u5206\u7b56\u7565\uff09\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684 key \u4fdd\u6301\u4e00\u81f4\u3002

                          \u70b9\u51fb \u786e\u5b9a \u6309\u94ae\u540e\uff0c\u7b49\u5f85\u7ea6\u4e00\u5206\u949f\u5de6\u53f3\u5237\u65b0\u9875\u9762\uff0cMIG \u6a21\u5f0f\u5207\u6362\u6210\uff1a

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/mig_command.html","title":"MIG \u76f8\u5173\u547d\u4ee4","text":"

                          GI \u76f8\u5173\u547d\u540d\uff1a

                          \u5b50\u547d\u4ee4 \u8bf4\u660e nvidia-smi mig -lgi \u67e5\u770b\u521b\u5efa GI \u5b9e\u4f8b\u5217\u8868 nvidia-smi mig -dgi -gi \u5220\u9664\u6307\u5b9a\u7684 GI \u5b9e\u4f8b nvidia-smi mig -lgip \u67e5\u770b GI \u7684 profile nvidia-smi mig -cgi \u901a\u8fc7\u6307\u5b9a profile \u7684 ID \u521b\u5efa GI

                          CI \u76f8\u5173\u547d\u4ee4\uff1a

                          \u5b50\u547d\u4ee4 \u8bf4\u660e nvidia-smi mig -lcip { -gi {gi Instance ID}} \u67e5\u770b CI \u7684 profile \uff0c\u6307\u5b9a -gi \u53ef\u4ee5\u67e5\u770b\u7279\u5b9a GI \u5b9e\u4f8b\u53ef\u4ee5\u521b\u5efa\u7684 CI nvidia-smi mig -lci \u67e5\u770b\u521b\u5efa\u7684 CI \u5b9e\u4f8b\u5217\u8868 nvidia-smi mig -cci {profile id} -gi {gi instance id} \u6307\u5b9a\u7684 GI \u521b\u5efa CI \u5b9e\u4f8b nvidia-smi mig -dci -ci \u5220\u9664\u6307\u5b9a CI \u5b9e\u4f8b

                          GI+CI \u76f8\u5173\u547d\u4ee4\uff1a

                          \u5b50\u547d\u4ee4 \u8bf4\u660e nvidia-smi mig -i 0 -cgi {gi profile id} -C {ci profile id} \u76f4\u63a5\u521b\u5efa GI + CI \u5b9e\u4f8b"},{"location":"end-user/kpanda/gpu/nvidia/mig/mig_usage.html","title":"\u4f7f\u7528 MIG GPU \u8d44\u6e90","text":"

                          \u672c\u8282\u4ecb\u7ecd\u5e94\u7528\u5982\u4f55\u4f7f\u7528 MIG GPU \u8d44\u6e90\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/mig_usage.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5df2\u7ecf\u90e8\u7f72 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0 \u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\uff0c\u4e14\u5e73\u53f0\u8fd0\u884c\u6b63\u5e38\u3002
                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
                          • \u5df2\u5b89\u88c5 GPU Operator\u3002
                          • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361
                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/mig_usage.html#ui-mig-gpu","title":"UI \u754c\u9762\u4f7f\u7528 MIG GPU","text":"
                          1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u8bc6\u522b GPU \u5361\u7c7b\u578b

                            \u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 -> \u8282\u70b9\u7ba1\u7406 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u6b63\u786e\u8bc6\u522b\u4e3a MIG \u6a21\u5f0f\u3002

                          2. \u901a\u8fc7\u955c\u50cf\u90e8\u7f72\u5e94\u7528\uff0c\u53ef\u9009\u62e9\u5e76\u4f7f\u7528 NVIDIA MIG \u8d44\u6e90\u3002

                            • MIG Single \u6a21\u5f0f\u793a\u4f8b\uff08\u4e0e\u6574\u5361\u4f7f\u7528\u65b9\u5f0f\u76f8\u540c\uff09\uff1a

                              Note

                              MIG single \u7b56\u7565\u5141\u8bb8\u7528\u6237\u4ee5\u4e0e GPU \u6574\u5361\u76f8\u540c\u7684\u65b9\u5f0f\uff08nvidia.com/gpu\uff09\u8bf7\u6c42\u548c\u4f7f\u7528GPU\u8d44\u6e90\uff0c\u4e0d\u540c\u7684\u662f\u8fd9\u4e9b\u8d44\u6e90\u53ef\u4ee5\u662f GPU \u7684\u4e00\u90e8\u5206\uff08MIG\u8bbe\u5907\uff09\uff0c\u800c\u4e0d\u662f\u6574\u4e2aGPU\u3002\u4e86\u89e3\u66f4\u591a GPU MIG \u6a21\u5f0f\u8bbe\u8ba1

                            • MIG Mixed \u6a21\u5f0f\u793a\u4f8b\uff1a

                          "},{"location":"end-user/kpanda/gpu/nvidia/mig/mig_usage.html#yaml-mig","title":"YAML \u914d\u7f6e\u4f7f\u7528 MIG","text":"

                          MIG Single \u6a21\u5f0f\uff1a

                          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: mig-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: mig-demo\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: mig-demo\n    spec:\n      containers:\n        - name: mig-demo1\n          image: chrstnhntschl/gpu_burn\n          resources:\n            limits:\n              nvidia.com/gpu: 2 # (1)!\n          imagePullPolicy: Always\n      restartPolicy: Always\n
                          1. \u7533\u8bf7 MIG GPU \u7684\u6570\u91cf

                          MIG Mixed \u6a21\u5f0f\uff1a

                          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: mig-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: mig-demo\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: mig-demo\n    spec:\n      containers:\n        - name: mig-demo1\n          image: chrstnhntschl/gpu_burn\n          resources:\n            limits:\n              nvidia.com/mig-4g.20gb: 1 # (1)!\n          imagePullPolicy: Always\n      restartPolicy: Always\n
                          1. \u901a\u8fc7 nvidia.com/mig-g.gb \u7684\u8d44\u6e90\u7c7b\u578b\u516c\u5f00\u5404\u4e2a MIG \u8bbe\u5907

                          \u8fdb\u5165\u5bb9\u5668\u540e\u53ef\u4ee5\u67e5\u770b\u53ea\u4f7f\u7528\u4e86\u4e00\u4e2a MIG \u8bbe\u5907\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/hami.html","title":"\u6784\u5efa vGPU \u663e\u5b58\u8d85\u914d\u955c\u50cf","text":"

                          Hami \u9879\u76ee\u4e2d vGPU \u663e\u5b58\u8d85\u914d\u7684\u529f\u80fd\u5df2\u7ecf\u4e0d\u5b58\u5728\uff0c\u76ee\u524d\u4f7f\u7528\u6709\u663e\u5b58\u8d85\u914d\u7684 libvgpu.so \u6587\u4ef6\u91cd\u65b0\u6784\u5efa\u3002

                          Dockerfile
                          FROM docker.m.daocloud.io/projecthami/hami:v2.3.11\nCOPY libvgpu.so /k8s-vgpu/lib/nvidia/\n

                          \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6784\u5efa\u955c\u50cf\uff1a

                          docker build -t release.daocloud.io/projecthami/hami:v2.3.11 -f Dockerfile .\n

                          \u7136\u540e\u628a\u955c\u50cf push \u5230 release.daocloud.io \u4e2d\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_addon.html","title":"\u5b89\u88c5 NVIDIA vGPU Addon","text":"

                          \u5982\u9700\u5c06\u4e00\u5f20 NVIDIA \u865a\u62df\u5316\u6210\u591a\u4e2a\u865a\u62df GPU\uff0c\u5e76\u5c06\u5176\u5206\u914d\u7ed9\u4e0d\u540c\u7684\u4e91\u4e3b\u673a\u6216\u7528\u6237\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 NVIDIA \u7684 vGPU \u80fd\u529b\u3002 \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u5b89\u88c5 vGPU \u63d2\u4ef6\uff0c\u8fd9\u662f\u4f7f\u7528 NVIDIA vGPU \u80fd\u529b\u7684\u524d\u63d0\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_addon.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u53c2\u8003 GPU \u652f\u6301\u77e9\u9635 \u786e\u8ba4\u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361\u3002
                          • \u5f53\u524d\u96c6\u7fa4\u5df2\u901a\u8fc7 Operator \u90e8\u7f72 NVIDIA \u9a71\u52a8\uff0c\u5177\u4f53\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5\u3002
                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_addon.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                          1. \u529f\u80fd\u6a21\u5757\u8def\u5f84\uff1a \u5bb9\u5668\u7ba1\u7406 -> \u96c6\u7fa4\u7ba1\u7406 \uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u4ece\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f -> \u641c\u7d22 nvidia-vgpu \u3002

                          2. \u5728\u5b89\u88c5 vGPU \u7684\u8fc7\u7a0b\u4e2d\u63d0\u4f9b\u4e86\u51e0\u4e2a\u57fa\u672c\u4fee\u6539\u7684\u53c2\u6570\uff0c\u5982\u679c\u9700\u8981\u4fee\u6539\u9ad8\u7ea7\u53c2\u6570\u70b9\u51fb YAML \u5217\u8fdb\u884c\u4fee\u6539\uff1a

                            • deviceCoreScaling \uff1aNVIDIA \u88c5\u7f6e\u7b97\u529b\u4f7f\u7528\u6bd4\u4f8b\uff0c\u9884\u8bbe\u503c\u662f 1\u3002\u53ef\u4ee5\u5927\u4e8e 1\uff08\u542f\u7528\u865a\u62df\u7b97\u529b\uff0c\u5b9e\u9a8c\u529f\u80fd\uff09\u3002\u5982\u679c\u6211\u4eec\u914d\u7f6e devicePlugin.deviceCoreScaling \u53c2\u6570\u4e3a S\uff0c\u5728\u90e8\u7f72\u4e86\u6211\u4eec\u88c5\u7f6e\u63d2\u4ef6\u7684 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u8fd9\u5f20 GPU \u5206\u51fa\u7684 vGPU \u5c06\u603b\u5171\u5305\u542b S * 100% \u7b97\u529b\u3002

                            • deviceMemoryScaling \uff1aNVIDIA \u88c5\u7f6e\u663e\u5b58\u4f7f\u7528\u6bd4\u4f8b\uff0c\u9884\u8bbe\u503c\u662f 1\u3002\u53ef\u4ee5\u5927\u4e8e 1\uff08\u542f\u7528\u865a\u62df\u663e\u5b58\uff0c\u5b9e\u9a8c\u529f\u80fd\uff09\u3002 \u5bf9\u4e8e\u6709 M \u663e\u5b58\u5927\u5c0f\u7684 NVIDIA GPU\uff0c\u5982\u679c\u6211\u4eec\u914d\u7f6e devicePlugin.deviceMemoryScaling \u53c2\u6570\u4e3a S\uff0c \u5728\u90e8\u7f72\u4e86\u6211\u4eec\u88c5\u7f6e\u63d2\u4ef6\u7684 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u8fd9\u5f20 GPU \u5206\u51fa\u7684 vGPU \u5c06\u603b\u5171\u5305\u542b S * M \u663e\u5b58\u3002

                            • deviceSplitCount \uff1a\u6574\u6570\u7c7b\u578b\uff0c\u9884\u8bbe\u503c\u662f 10\u3002GPU \u7684\u5206\u5272\u6570\uff0c\u6bcf\u4e00\u5f20 GPU \u90fd\u4e0d\u80fd\u5206\u914d\u8d85\u8fc7\u5176\u914d\u7f6e\u6570\u76ee\u7684\u4efb\u52a1\u3002 \u82e5\u5176\u914d\u7f6e\u4e3a N \u7684\u8bdd\uff0c\u6bcf\u4e2a GPU \u4e0a\u6700\u591a\u53ef\u4ee5\u540c\u65f6\u5b58\u5728 N \u4e2a\u4efb\u52a1\u3002

                            • Resources \uff1a\u5c31\u662f\u5bf9\u5e94 vgpu-device-plugin \u548c vgpu-schedule pod \u7684\u8d44\u6e90\u4f7f\u7528\u91cf\u3002

                            • ServiceMonitor \uff1a\u9ed8\u8ba4\u4e0d\u5f00\u542f\uff0c\u5f00\u542f\u540e\u53ef\u524d\u5f80\u53ef\u89c2\u6d4b\u6027\u6a21\u5757\u67e5\u770b vGPU \u76f8\u5173\u76d1\u63a7\u3002\u5982\u9700\u5f00\u542f\uff0c\u8bf7\u786e\u4fdd insight-agent \u5df2\u5b89\u88c5\u5e76\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\uff0c\u5426\u5219\u5c06\u5bfc\u81f4 NVIDIA vGPU Addon \u5b89\u88c5\u5931\u8d25\u3002

                          3. \u5b89\u88c5\u6210\u529f\u4e4b\u540e\u4f1a\u5728\u6307\u5b9a Namespace \u4e0b\u51fa\u73b0\u5982\u4e0b\u4e24\u4e2a\u7c7b\u578b\u7684 Pod\uff0c\u5373\u8868\u793a NVIDIA vGPU \u63d2\u4ef6\u5df2\u5b89\u88c5\u6210\u529f\uff1a

                          \u5b89\u88c5\u6210\u529f\u540e\uff0c\u90e8\u7f72\u5e94\u7528\u53ef\u4f7f\u7528 vGPU \u8d44\u6e90\u3002

                          Note

                          NVIDIA vGPU Addon \u4e0d\u652f\u6301\u4ece\u8001\u7248\u672c v2.0.0 \u76f4\u63a5\u5347\u7ea7\u4e3a\u6700\u65b0\u7248 v2.0.0+1\uff1b \u5982\u9700\u5347\u7ea7\uff0c\u8bf7\u5378\u8f7d\u8001\u7248\u672c\u540e\u91cd\u65b0\u5b89\u88c5\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html","title":"\u5e94\u7528\u4f7f\u7528 Nvidia vGPU","text":"

                          \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4f7f\u7528 vGPU \u80fd\u529b\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u96c6\u7fa4\u8282\u70b9\u4e0a\u5177\u6709\u5bf9\u5e94\u578b\u53f7\u7684 GPU \u5361
                          • \u5df2\u6210\u529f\u5b89\u88c5 vGPU Addon\uff0c\u8be6\u60c5\u53c2\u8003 GPU Addon \u5b89\u88c5
                          • \u5df2\u5b89\u88c5 GPU Operator\uff0c\u5e76\u5df2 \u5173\u95ed Nvidia.DevicePlugin \u80fd\u529b\uff0c\u53ef\u53c2\u8003 GPU Operator \u79bb\u7ebf\u5b89\u88c5
                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":""},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html#vgpu","title":"\u754c\u9762\u4f7f\u7528 vGPU","text":"
                          1. \u786e\u8ba4\u96c6\u7fa4\u662f\u5426\u5df2\u68c0\u6d4b GPU \u5361\u3002\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u96c6\u7fa4\u8bbe\u7f6e -> Addon \u63d2\u4ef6 \uff0c\u67e5\u770b\u662f\u5426\u5df2\u81ea\u52a8\u542f\u7528\u5e76\u81ea\u52a8\u68c0\u6d4b\u5bf9\u5e94 GPU \u7c7b\u578b\u3002 \u76ee\u524d\u96c6\u7fa4\u4f1a\u81ea\u52a8\u542f\u7528 GPU \uff0c\u5e76\u4e14\u8bbe\u7f6e GPU \u7c7b\u578b\u4e3a Nvidia vGPU \u3002

                          2. \u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u70b9\u51fb\u5bf9\u5e94 \u96c6\u7fa4 -> \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u90e8\u7f72\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u9009\u62e9\u7c7b\u578b\uff08Nvidia vGPU\uff09\u4e4b\u540e\uff0c\u4f1a\u81ea\u52a8\u51fa\u73b0\u5982\u4e0b\u51e0\u4e2a\u53c2\u6570\u9700\u8981\u586b\u5199\uff1a

                            • \u7269\u7406\u5361\u6570\u91cf\uff08nvidia.com/vgpu\uff09\uff1a\u8868\u793a\u5f53\u524d Pod \u9700\u8981\u6302\u8f7d\u51e0\u5f20\u7269\u7406\u5361\uff0c\u8f93\u5165\u503c\u5fc5\u987b\u4e3a\u6574\u6570\u4e14 \u5c0f\u4e8e\u7b49\u4e8e \u5bbf\u4e3b\u673a\u4e0a\u7684\u5361\u6570\u91cf\u3002
                            • GPU \u7b97\u529b\uff08nvidia.com/gpucores\uff09: \u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u7b97\u529b\uff0c\u503c\u8303\u56f4\u4e3a 0-100\uff1b \u5982\u679c\u914d\u7f6e\u4e3a 0\uff0c \u5219\u8ba4\u4e3a\u4e0d\u5f3a\u5236\u9694\u79bb\uff1b\u914d\u7f6e\u4e3a100\uff0c\u5219\u8ba4\u4e3a\u72ec\u5360\u6574\u5f20\u5361\u3002
                            • GPU \u663e\u5b58\uff08nvidia.com/gpumem\uff09: \u8868\u793a\u6bcf\u5f20\u5361\u5360\u7528\u7684 GPU \u663e\u5b58\uff0c\u503c\u5355\u4f4d\u4e3a MB\uff0c\u6700\u5c0f\u503c\u4e3a 1\uff0c\u6700\u5927\u503c\u4e3a\u6574\u5361\u7684\u663e\u5b58\u503c\u3002

                            \u5982\u679c\u4e0a\u8ff0\u503c\u914d\u7f6e\u7684\u6709\u95ee\u9898\u5219\u4f1a\u51fa\u73b0\u8c03\u5ea6\u5931\u8d25\uff0c\u8d44\u6e90\u5206\u914d\u4e0d\u4e86\u7684\u60c5\u51b5\u3002

                          "},{"location":"end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html#yaml-vgpu","title":"YAML \u914d\u7f6e\u4f7f\u7528 vGPU","text":"

                          \u53c2\u8003\u5982\u4e0b\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\uff0c\u5728\u8d44\u6e90\u7533\u8bf7\u548c\u9650\u5236\u914d\u7f6e\u4e2d\u589e\u52a0 nvidia.com/vgpu: '1' \u53c2\u6570\u6765\u914d\u7f6e\u5e94\u7528\u4f7f\u7528\u7269\u7406\u5361\u7684\u6570\u91cf\u3002

                          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: full-vgpu-demo\n  namespace: default\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: full-vgpu-demo\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: full-vgpu-demo\n    spec:\n      containers:\n        - name: full-vgpu-demo1\n          image: chrstnhntschl/gpu_burn\n          resources:\n            limits:\n              nvidia.com/gpucores: '20'   # \u7533\u8bf7\u6bcf\u5f20\u5361\u5360\u7528 20% \u7684 GPU \u7b97\u529b\n              nvidia.com/gpumem: '200'   # \u7533\u8bf7\u6bcf\u5f20\u5361\u5360\u7528 200MB \u7684\u663e\u5b58\n              nvidia.com/vgpu: '1'   # \u7533\u8bf7GPU\u7684\u6570\u91cf\n          imagePullPolicy: Always\n      restartPolicy: Always\n
                          "},{"location":"end-user/kpanda/gpu/volcano/drf.html","title":"DRF\uff08Dominant Resource Fairness\uff09 \u8c03\u5ea6\u7b56\u7565","text":"

                          DRF \u8c03\u5ea6\u7b56\u7565\u8ba4\u4e3a\u5360\u7528\u8d44\u6e90\u8f83\u5c11\u7684\u4efb\u52a1\u5177\u6709\u66f4\u9ad8\u7684\u4f18\u5148\u7ea7\u3002\u8fd9\u6837\u80fd\u591f\u6ee1\u8db3\u66f4\u591a\u7684\u4f5c\u4e1a\uff0c\u4e0d\u4f1a\u56e0\u4e3a\u4e00\u4e2a\u80d6\u4e1a\u52a1\uff0c \u997f\u6b7b\u5927\u6279\u5c0f\u4e1a\u52a1\u3002DRF \u8c03\u5ea6\u7b97\u6cd5\u80fd\u591f\u786e\u4fdd\u5728\u591a\u79cd\u7c7b\u578b\u8d44\u6e90\u5171\u5b58\u7684\u73af\u5883\u4e0b\uff0c\u5c3d\u53ef\u80fd\u6ee1\u8db3\u5206\u914d\u7684\u516c\u5e73\u539f\u5219\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/drf.html#_1","title":"\u4f7f\u7528\u65b9\u5f0f","text":"

                          DRF \u8c03\u5ea6\u7b56\u7565\u9ed8\u8ba4\u5df2\u542f\u7528\uff0c\u65e0\u9700\u4efb\u4f55\u914d\u7f6e\u3002

                          kubectl -n volcano-system view configmaps volcano-scheduler-configmap\n
                          "},{"location":"end-user/kpanda/gpu/volcano/drf.html#_2","title":"\u4f7f\u7528\u6848\u4f8b","text":"

                          \u5728 AI \u8bad\u7ec3\uff0c\u6216\u5927\u6570\u636e\u8ba1\u7b97\u4e2d\uff0c\u901a\u8fc7\u6709\u9650\u8fd0\u884c\u4f7f\u7528\u8d44\u6e90\u5c11\u7684\u4efb\u52a1\uff0c\u8fd9\u6837\u53ef\u4ee5\u8ba9\u96c6\u7fa4\u8d44\u6e90\u4f7f\u7528\u7387\u66f4\u9ad8\uff0c\u800c\u4e14\u8fd8\u80fd\u907f\u514d\u5c0f\u4efb\u52a1\u88ab\u997f\u6b7b\u3002 \u5982\u4e0b\u521b\u5efa\u4e24\u4e2a Job\uff0c\u4e00\u4e2a\u662f\u5c0f\u8d44\u6e90\u9700\u6c42\uff0c\u4e00\u4e2a\u662f\u5927\u8d44\u6e90\u9700\u6c42\uff0c\u53ef\u4ee5\u770b\u51fa\u6765\u5c0f\u8d44\u6e90\u9700\u6c42\u7684 Job \u4f18\u5148\u8fd0\u884c\u8d77\u6765\u3002

                          cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: small-resource  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: small-resource  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"1\"  \n          restartPolicy: OnFailure  \n---  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: large-resource  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: large-resource  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"2\"  \n          restartPolicy: OnFailure  \nEOF\n
                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html","title":"NUMA \u4eb2\u548c\u6027\u8c03\u5ea6","text":"

                          NUMA \u8282\u70b9\u662f Non-Uniform Memory Access\uff08\u975e\u7edf\u4e00\u5185\u5b58\u8bbf\u95ee\uff09\u67b6\u6784\u4e2d\u7684\u4e00\u4e2a\u57fa\u672c\u7ec4\u6210\u5355\u5143\uff0c\u4e00\u4e2a Node \u8282\u70b9\u662f\u591a\u4e2a NUMA \u8282\u70b9\u7684\u96c6\u5408\uff0c \u5728\u591a\u4e2a NUMA \u8282\u70b9\u4e4b\u95f4\u8fdb\u884c\u5185\u5b58\u8bbf\u95ee\u65f6\u4f1a\u4ea7\u751f\u5ef6\u8fdf\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u901a\u8fc7\u4f18\u5316\u4efb\u52a1\u8c03\u5ea6\u548c\u5185\u5b58\u5206\u914d\u7b56\u7565\uff0c\u6765\u63d0\u9ad8\u5185\u5b58\u8bbf\u95ee\u6548\u7387\u548c\u6574\u4f53\u6027\u80fd\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html#_1","title":"\u4f7f\u7528\u573a\u666f","text":"

                          Numa \u4eb2\u548c\u6027\u8c03\u5ea6\u7684\u5e38\u89c1\u573a\u666f\u662f\u90a3\u4e9b\u5bf9 CPU \u53c2\u6570\u654f\u611f/\u8c03\u5ea6\u5ef6\u8fdf\u654f\u611f\u7684\u8ba1\u7b97\u5bc6\u96c6\u578b\u4f5c\u4e1a\u3002\u5982\u79d1\u5b66\u8ba1\u7b97\u3001\u89c6\u9891\u89e3\u7801\u3001\u52a8\u6f2b\u52a8\u753b\u6e32\u67d3\u3001\u5927\u6570\u636e\u79bb\u7ebf\u5904\u7406\u7b49\u5177\u4f53\u573a\u666f\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html#_2","title":"\u8c03\u5ea6\u7b56\u7565","text":"

                          Pod \u8c03\u5ea6\u65f6\u53ef\u4ee5\u91c7\u7528\u7684 NUMA \u653e\u7f6e\u7b56\u7565\uff0c\u5177\u4f53\u7b56\u7565\u5bf9\u5e94\u7684\u8c03\u5ea6\u884c\u4e3a\u8bf7\u53c2\u89c1 Pod \u8c03\u5ea6\u884c\u4e3a\u8bf4\u660e\u3002

                          • single-numa-node\uff1aPod \u8c03\u5ea6\u65f6\u4f1a\u9009\u62e9\u62d3\u6251\u7ba1\u7406\u7b56\u7565\u5df2\u7ecf\u8bbe\u7f6e\u4e3a single-numa-node \u7684\u8282\u70b9\u6c60\u4e2d\u7684\u8282\u70b9\uff0c\u4e14 CPU \u9700\u8981\u653e\u7f6e\u5728\u76f8\u540c NUMA \u4e0b\uff0c\u5982\u679c\u8282\u70b9\u6c60\u4e2d\u6ca1\u6709\u6ee1\u8db3\u6761\u4ef6\u7684\u8282\u70b9\uff0cPod \u5c06\u65e0\u6cd5\u88ab\u8c03\u5ea6\u3002
                          • restricted\uff1aPod \u8c03\u5ea6\u65f6\u4f1a\u9009\u62e9\u62d3\u6251\u7ba1\u7406\u7b56\u7565\u5df2\u7ecf\u8bbe\u7f6e\u4e3a restricted \u8282\u70b9\u6c60\u7684\u8282\u70b9\uff0c\u4e14 CPU \u9700\u8981\u653e\u7f6e\u5728\u76f8\u540c\u7684 NUMA \u96c6\u5408\u4e0b\uff0c\u5982\u679c\u8282\u70b9\u6c60\u4e2d\u6ca1\u6709\u6ee1\u8db3\u6761\u4ef6\u7684\u8282\u70b9\uff0cPod \u5c06\u65e0\u6cd5\u88ab\u8c03\u5ea6\u3002
                          • best-effort\uff1aPod \u8c03\u5ea6\u65f6\u4f1a\u9009\u62e9\u62d3\u6251\u7ba1\u7406\u7b56\u7565\u5df2\u7ecf\u8bbe\u7f6e\u4e3a best-effort \u8282\u70b9\u6c60\u7684\u8282\u70b9\uff0c\u4e14\u5c3d\u91cf\u5c06 CPU \u653e\u7f6e\u5728\u76f8\u540c NUMA \u4e0b\uff0c\u5982\u679c\u6ca1\u6709\u8282\u70b9\u6ee1\u8db3\u8fd9\u4e00\u6761\u4ef6\uff0c\u5219\u9009\u62e9\u6700\u4f18\u8282\u70b9\u8fdb\u884c\u653e\u7f6e\u3002
                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html#_3","title":"\u8c03\u5ea6\u539f\u7406","text":"

                          \u5f53Pod\u8bbe\u7f6e\u4e86\u62d3\u6251\u7b56\u7565\u65f6\uff0cVolcano \u4f1a\u6839\u636e Pod \u8bbe\u7f6e\u7684\u62d3\u6251\u7b56\u7565\u9884\u6d4b\u5339\u914d\u7684\u8282\u70b9\u5217\u8868\u3002 \u8c03\u5ea6\u8fc7\u7a0b\u5982\u4e0b\uff1a

                          1. \u6839\u636e Pod \u8bbe\u7f6e\u7684 Volcano \u62d3\u6251\u7b56\u7565\uff0c\u7b5b\u9009\u5177\u6709\u76f8\u540c\u7b56\u7565\u7684\u8282\u70b9\u3002

                          2. \u5728\u8bbe\u7f6e\u4e86\u76f8\u540c\u7b56\u7565\u7684\u8282\u70b9\u4e2d\uff0c\u7b5b\u9009 CPU \u62d3\u6251\u6ee1\u8db3\u8be5\u7b56\u7565\u8981\u6c42\u7684\u8282\u70b9\u8fdb\u884c\u8c03\u5ea6\u3002

                          Pod \u53ef\u914d\u7f6e\u7684\u62d3\u6251\u7b56\u7565 1. \u6839\u636e Pod \u8bbe\u7f6e\u7684\u62d3\u6251\u7b56\u7565\uff0c\u7b5b\u9009\u53ef\u8c03\u5ea6\u7684\u8282\u70b9 2. \u8fdb\u4e00\u6b65\u7b5b\u9009 CPU \u62d3\u6251\u6ee1\u8db3\u7b56\u7565\u7684\u8282\u70b9\u8fdb\u884c\u8c03\u5ea6 none \u9488\u5bf9\u914d\u7f6e\u4e86\u4ee5\u4e0b\u51e0\u79cd\u62d3\u6251\u7b56\u7565\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u65f6\u5747\u65e0\u7b5b\u9009\u884c\u4e3a\u3002none\uff1a\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u53ef\u8c03\u5ea6 - best-effort \u7b5b\u9009\u62d3\u6251\u7b56\u7565\u540c\u6837\u4e3a\u201cbest-effort\u201d\u7684\u8282\u70b9\uff1anone\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u4e0d\u53ef\u8c03\u5ea6 \u5c3d\u53ef\u80fd\u6ee1\u8db3\u7b56\u7565\u8981\u6c42\u8fdb\u884c\u8c03\u5ea6\uff1a\u4f18\u5148\u8c03\u5ea6\u81f3\u5355 NUMA \u8282\u70b9\uff0c\u5982\u679c\u5355 NUMA \u8282\u70b9\u65e0\u6cd5\u6ee1\u8db3 CPU \u7533\u8bf7\u503c\uff0c\u5141\u8bb8\u8c03\u5ea6\u81f3\u591a\u4e2a NUMA \u8282\u70b9\u3002 restricted \u7b5b\u9009\u62d3\u6251\u7b56\u7565\u540c\u6837\u4e3a\u201crestricted\u201d\u7684\u8282\u70b9\uff1anone\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u4e0d\u53ef\u8c03\u5ea6 \u4e25\u683c\u9650\u5236\u7684\u8c03\u5ea6\u7b56\u7565\uff1a\u5355 NUMA \u8282\u70b9\u7684CPU\u5bb9\u91cf\u4e0a\u9650\u5927\u4e8e\u7b49\u4e8e CPU \u7684\u7533\u8bf7\u503c\u65f6\uff0c\u4ec5\u5141\u8bb8\u8c03\u5ea6\u81f3\u5355 NUMA \u8282\u70b9\u3002\u6b64\u65f6\u5982\u679c\u5355 NUMA \u8282\u70b9\u5269\u4f59\u7684 CPU \u53ef\u4f7f\u7528\u91cf\u4e0d\u8db3\uff0c\u5219 Pod \u65e0\u6cd5\u8c03\u5ea6\u3002\u5355 NUMA \u8282\u70b9\u7684 CPU \u5bb9\u91cf\u4e0a\u9650\u5c0f\u4e8e CPU \u7684\u7533\u8bf7\u503c\u65f6\uff0c\u53ef\u5141\u8bb8\u8c03\u5ea6\u81f3\u591a\u4e2a NUMA \u8282\u70b9\u3002 single-numa-node \u7b5b\u9009\u62d3\u6251\u7b56\u7565\u540c\u6837\u4e3a\u201csingle-numa-node\u201d\u7684\u8282\u70b9\uff1anone\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bbest-effort\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1brestricted\uff1a\u4e0d\u53ef\u8c03\u5ea6\uff1bsingle-numa-node\uff1a\u53ef\u8c03\u5ea6 \u4ec5\u5141\u8bb8\u8c03\u5ea6\u81f3\u5355 NUMA \u8282\u70b9\u3002"},{"location":"end-user/kpanda/gpu/volcano/numa.html#numa_1","title":"\u914d\u7f6e NUMA \u4eb2\u548c\u8c03\u5ea6\u7b56\u7565","text":"
                          1. \u5728 Job \u4e2d\u914d\u7f6e policies

                            task: \n  - replicas: 1 \n    name: \"test-1\" \n    topologyPolicy: single-numa-node \n  - replicas: 1 \n    name: \"test-2\" \n    topologyPolicy: best-effort \n
                          2. \u4fee\u6539 kubelet \u7684\u8c03\u5ea6\u7b56\u7565\uff0c\u8bbe\u7f6e --topology-manager-policy \u53c2\u6570\uff0c\u652f\u6301\u7684\u7b56\u7565\u6709\u56db\u79cd\uff1a

                            • none\uff08\u9ed8\u8ba4\uff09
                            • best-effort
                            • restricted
                            • single-numa-node
                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html#_4","title":"\u4f7f\u7528\u6848\u4f8b","text":"
                          1. \u793a\u4f8b\u4e00\uff1a\u5728\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u914d\u7f6e NUMA \u4eb2\u548c\u6027\u3002

                            kind: Deployment  \napiVersion: apps/v1  \nmetadata:  \n  name: numa-tset  \nspec:  \n  replicas: 1  \n  selector:  \n    matchLabels:  \n      app: numa-tset  \n  template:  \n    metadata:  \n      labels:  \n        app: numa-tset  \n      annotations:  \n        volcano.sh/numa-topology-policy: single-numa-node    # set the topology policy  \n    spec:  \n      containers:  \n        - name: container-1  \n          image: nginx:alpine  \n          resources:  \n            requests:  \n              cpu: 2           # \u5fc5\u987b\u4e3a\u6574\u6570\uff0c\u4e14\u9700\u8981\u4e0elimits\u4e2d\u4e00\u81f4  \n              memory: 2048Mi  \n            limits:  \n              cpu: 2           # \u5fc5\u987b\u4e3a\u6574\u6570\uff0c\u4e14\u9700\u8981\u4e0erequests\u4e2d\u4e00\u81f4  \n              memory: 2048Mi  \n      imagePullSecrets:  \n      - name: default-secret\n
                          2. \u793a\u4f8b\u4e8c\uff1a\u521b\u5efa\u4e00\u4e2a Volcano Job\uff0c\u5e76\u4f7f\u7528 NUMA \u4eb2\u548c\u6027\u3002

                            apiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: vj-test  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 1  \n  tasks:  \n    - replicas: 1  \n      name: \"test\"  \n      topologyPolicy: best-effort   # set the topology policy for task  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                limits:  \n                  cpu: 20  \n                  memory: \"100Mi\"  \n          restartPolicy: OnFailure\n
                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html#numa_2","title":"NUMA \u8c03\u5ea6\u5206\u6790","text":"

                          \u5047\u8bbe NUMA \u8282\u70b9\u60c5\u51b5\u5982\u4e0b\uff1a

                          \u5de5\u4f5c\u8282\u70b9 \u8282\u70b9\u7b56\u7565\u62d3\u6251\u7ba1\u7406\u5668\u7b56\u7565 NUMA \u8282\u70b9 0 \u4e0a\u7684\u53ef\u5206\u914d CPU NUMA \u8282\u70b9 1 \u4e0a\u7684\u53ef\u5206\u914d CPU node-1 single-numa-node 16U 16U node-2 best-effort 16U 16U node-3 best-effort 20U 20U
                          • \u793a\u4f8b\u4e00\u4e2d\uff0cPod \u7684 CPU \u7533\u8bf7\u503c\u4e3a 2U\uff0c\u8bbe\u7f6e\u62d3\u6251\u7b56\u7565\u4e3a\u201csingle-numa-node\u201d\uff0c\u56e0\u6b64\u4f1a\u88ab\u8c03\u5ea6\u5230\u76f8\u540c\u7b56\u7565\u7684 node-1\u3002
                          • \u793a\u4f8b\u4e8c\u4e2d\uff0cPod \u7684 CPU \u7533\u8bf7\u503c\u4e3a20U\uff0c\u8bbe\u7f6e\u62d3\u6251\u7b56\u7565\u4e3a\u201cbest-effort\u201d\uff0c\u5b83\u5c06\u88ab\u8c03\u5ea6\u5230 node-3\uff0c \u56e0\u4e3a node-3 \u53ef\u4ee5\u5728\u5355\u4e2a NUMA \u8282\u70b9\u4e0a\u5206\u914d Pod \u7684 CPU \u8bf7\u6c42\uff0c\u800c node-2 \u9700\u8981\u5728\u4e24\u4e2a NUMA \u8282\u70b9\u4e0a\u6267\u884c\u6b64\u64cd\u4f5c\u3002
                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html#cpu","title":"\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u6982\u51b5","text":"

                          \u60a8\u53ef\u4ee5\u901a\u8fc7 lscpu \u547d\u4ee4\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u6982\u51b5\uff1a

                          lscpu \n... \nCPU(s): 32 \nNUMA node(s): 2 \nNUMA node0 CPU(s): 0-15 \nNUMA node1 CPU(s): 16-31\n
                          "},{"location":"end-user/kpanda/gpu/volcano/numa.html#cpu_1","title":"\u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u5206\u914d","text":"

                          \u7136\u540e\u67e5\u770b NUMA \u8282\u70b9\u4f7f\u7528\u60c5\u51b5\uff1a

                          # \u67e5\u770b\u5f53\u524d\u8282\u70b9\u7684 CPU \u5206\u914d\ncat /var/lib/kubelet/cpu_manager_state\n{\"policyName\":\"static\",\"defaultCpuSet\":\"0,10-15,25-31\",\"entries\":{\"777870b5-c64f-42f5-9296-688b9dc212ba\":{\"container-1\":\"16-24\"},\"fb15e10a-b6a5-4aaa-8fcd-76c1aa64e6fd\":{\"container-1\":\"1-9\"}},\"checksum\":318470969}\n

                          \u4ee5\u4e0a\u793a\u4f8b\u4e2d\u8868\u793a\uff0c\u8282\u70b9\u4e0a\u8fd0\u884c\u4e86\u4e24\u4e2a\u5bb9\u5668\uff0c\u4e00\u4e2a\u5360\u7528\u4e86 NUMA node0 \u76841-9 \u6838\uff0c\u53e6\u4e00\u4e2a\u5360\u7528\u4e86 NUMA node1 \u7684 16-24 \u6838\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html","title":"\u4f7f\u7528 Volcano \u7684 Gang Scheduler","text":"

                          Gang \u8c03\u5ea6\u7b56\u7565\u662f volcano-scheduler \u7684\u6838\u5fc3\u8c03\u5ea6\u7b97\u6cd5\u4e4b\u4e00\uff0c\u5b83\u6ee1\u8db3\u4e86\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u7684 \u201cAll or nothing\u201d \u7684\u8c03\u5ea6\u9700\u6c42\uff0c \u907f\u514d Pod \u7684\u4efb\u610f\u8c03\u5ea6\u5bfc\u81f4\u96c6\u7fa4\u8d44\u6e90\u7684\u6d6a\u8d39\u3002\u5177\u4f53\u7b97\u6cd5\u662f\uff0c\u89c2\u5bdf Job \u4e0b\u7684 Pod \u5df2\u8c03\u5ea6\u6570\u91cf\u662f\u5426\u6ee1\u8db3\u4e86\u6700\u5c0f\u8fd0\u884c\u6570\u91cf\uff0c \u5f53 Job \u7684\u6700\u5c0f\u8fd0\u884c\u6570\u91cf\u5f97\u5230\u6ee1\u8db3\u65f6\uff0c\u4e3a Job \u4e0b\u7684\u6240\u6709 Pod \u6267\u884c\u8c03\u5ea6\u52a8\u4f5c\uff0c\u5426\u5219\uff0c\u4e0d\u6267\u884c\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html#_1","title":"\u4f7f\u7528\u573a\u666f","text":"

                          \u57fa\u4e8e\u5bb9\u5668\u7ec4\u6982\u5ff5\u7684 Gang \u8c03\u5ea6\u7b97\u6cd5\u5341\u5206\u9002\u5408\u9700\u8981\u591a\u8fdb\u7a0b\u534f\u4f5c\u7684\u573a\u666f\u3002AI \u573a\u666f\u5f80\u5f80\u5305\u542b\u590d\u6742\u7684\u6d41\u7a0b\uff0c Data Ingestion\u3001Data Analysts\u3001Data Splitting\u3001Trainer\u3001Serving\u3001Logging \u7b49\uff0c \u9700\u8981\u4e00\u7ec4\u5bb9\u5668\u8fdb\u884c\u534f\u540c\u5de5\u4f5c\uff0c\u5c31\u5f88\u9002\u5408\u57fa\u4e8e\u5bb9\u5668\u7ec4\u7684 Gang \u8c03\u5ea6\u7b56\u7565\u3002 MPI \u8ba1\u7b97\u6846\u67b6\u4e0b\u7684\u591a\u7ebf\u7a0b\u5e76\u884c\u8ba1\u7b97\u901a\u4fe1\u573a\u666f\uff0c\u7531\u4e8e\u9700\u8981\u4e3b\u4ece\u8fdb\u7a0b\u534f\u540c\u5de5\u4f5c\uff0c\u4e5f\u975e\u5e38\u9002\u5408\u4f7f\u7528 Gang \u8c03\u5ea6\u7b56\u7565\u3002 \u5bb9\u5668\u7ec4\u4e0b\u7684\u5bb9\u5668\u9ad8\u5ea6\u76f8\u5173\u4e5f\u53ef\u80fd\u5b58\u5728\u8d44\u6e90\u4e89\u62a2\uff0c\u6574\u4f53\u8c03\u5ea6\u5206\u914d\uff0c\u80fd\u591f\u6709\u6548\u89e3\u51b3\u6b7b\u9501\u3002

                          \u5728\u96c6\u7fa4\u8d44\u6e90\u4e0d\u8db3\u7684\u573a\u666f\u4e0b\uff0cGang \u7684\u8c03\u5ea6\u7b56\u7565\u5bf9\u4e8e\u96c6\u7fa4\u8d44\u6e90\u7684\u5229\u7528\u7387\u7684\u63d0\u5347\u662f\u975e\u5e38\u660e\u663e\u7684\u3002 \u6bd4\u5982\u96c6\u7fa4\u73b0\u5728\u53ea\u80fd\u5bb9\u7eb3 2 \u4e2a Pod\uff0c\u73b0\u5728\u8981\u6c42\u6700\u5c0f\u8c03\u5ea6\u7684 Pod \u6570\u4e3a 3\u3002 \u90a3\u73b0\u5728\u8fd9\u4e2a Job \u7684\u6240\u6709\u7684 Pod \u90fd\u4f1a pending\uff0c\u76f4\u5230\u96c6\u7fa4\u80fd\u591f\u5bb9\u7eb3 3 \u4e2a Pod\uff0cPod \u624d\u4f1a\u88ab\u8c03\u5ea6\u3002 \u6709\u6548\u9632\u6b62\u8c03\u5ea6\u90e8\u5206 Pod\uff0c\u4e0d\u6ee1\u8db3\u8981\u6c42\u53c8\u5360\u7528\u4e86\u8d44\u6e90\uff0c\u4f7f\u5176\u4ed6 Job \u65e0\u6cd5\u8fd0\u884c\u7684\u60c5\u51b5\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html#_2","title":"\u6982\u5ff5\u8bf4\u660e","text":"

                          Gang Scheduler \u662f Volcano \u7684\u6838\u5fc3\u7684\u8c03\u5ea6\u63d2\u4ef6\uff0c\u5b89\u88c5 Volcano \u540e\u9ed8\u8ba4\u5c31\u5f00\u542f\u4e86\u3002 \u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\u53ea\u9700\u8981\u6307\u5b9a\u8c03\u5ea6\u5668\u7684\u540d\u79f0\u4e3a Volcano \u5373\u53ef\u3002

                          Volcano \u662f\u4ee5 PodGroup \u4e3a\u5355\u4f4d\u8fdb\u884c\u8c03\u5ea6\u7684\uff0c\u5728\u521b\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u5e76\u4e0d\u9700\u8981\u624b\u52a8\u521b\u5efa PodGroup \u8d44\u6e90\uff0c Volcano \u4f1a\u6839\u636e\u5de5\u4f5c\u8d1f\u8f7d\u7684\u4fe1\u606f\u81ea\u52a8\u521b\u5efa\u3002\u4e0b\u9762\u662f\u4e00\u4e2a PodGroup \u7684\u793a\u4f8b\uff1a

                          apiVersion: scheduling.volcano.sh/v1beta1\nkind: PodGroup\nmetadata:\n  name: test\n  namespace: default\nspec:\n  minMember: 1  # (1)!\n  minResources:  # (2)!\n    cpu: \"3\"\n    memory: \"2048Mi\"\n  priorityClassName: high-prority # (3)!\n  queue: default # (4)!\n
                          1. \u8868\u793a\u8be5 PodGroup \u4e0b \u6700\u5c11 \u9700\u8981\u8fd0\u884c\u7684 Pod \u6216\u4efb\u52a1\u6570\u91cf\u3002 \u5982\u679c\u96c6\u7fa4\u8d44\u6e90\u4e0d\u6ee1\u8db3 miniMember \u6570\u91cf\u4efb\u52a1\u7684\u8fd0\u884c\u9700\u6c42\uff0c\u8c03\u5ea6\u5668\u5c06\u4e0d\u4f1a\u8c03\u5ea6\u4efb\u4f55\u4e00\u4e2a\u8be5 PodGroup \u5185\u7684\u4efb\u52a1\u3002
                          2. \u8868\u793a\u8fd0\u884c\u8be5 PodGroup \u6240\u9700\u8981\u7684\u6700\u5c11\u8d44\u6e90\u3002\u5f53\u96c6\u7fa4\u53ef\u5206\u914d\u8d44\u6e90\u4e0d\u6ee1\u8db3 minResources \u65f6\uff0c\u8c03\u5ea6\u5668\u5c06\u4e0d\u4f1a\u8c03\u5ea6\u4efb\u4f55\u4e00\u4e2a\u8be5 PodGroup \u5185\u7684\u4efb\u52a1\u3002
                          3. \u8868\u793a\u8be5 PodGroup \u7684\u4f18\u5148\u7ea7\uff0c\u7528\u4e8e\u8c03\u5ea6\u5668\u4e3a\u8be5 queue \u4e2d\u6240\u6709 PodGroup \u8fdb\u884c\u8c03\u5ea6\u65f6\u8fdb\u884c\u6392\u5e8f\u3002 system-node-critical \u548c system-cluster-critical \u662f 2 \u4e2a\u9884\u7559\u7684\u503c\uff0c\u8868\u793a\u6700\u9ad8\u4f18\u5148\u7ea7\u3002\u4e0d\u7279\u522b\u6307\u5b9a\u65f6\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u4f18\u5148\u7ea7\u6216 zero \u4f18\u5148\u7ea7\u3002
                          4. \u8868\u793a\u8be5 PodGroup \u6240\u5c5e\u7684 queue\u3002queue \u5fc5\u987b\u63d0\u524d\u5df2\u521b\u5efa\u4e14\u72b6\u6001\u4e3a open\u3002
                          "},{"location":"end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html#_3","title":"\u4f7f\u7528\u6848\u4f8b","text":"

                          \u5728 MPI \u8ba1\u7b97\u6846\u67b6\u4e0b\u7684\u591a\u7ebf\u7a0b\u5e76\u884c\u8ba1\u7b97\u901a\u4fe1\u573a\u666f\u4e2d\uff0c\u6211\u4eec\u8981\u786e\u4fdd\u6240\u6709\u7684 Pod \u90fd\u80fd\u8c03\u5ea6\u6210\u529f\u624d\u80fd\u4fdd\u8bc1\u4efb\u52a1\u6b63\u5e38\u5b8c\u6210\u3002 \u8bbe\u7f6e minAvailable \u4e3a 4\uff0c\u8868\u793a\u8981\u6c42 1 \u4e2a mpimaster \u548c 3 \u4e2a mpiworker \u80fd\u8fd0\u884c\u3002

                          apiVersion: batch.volcano.sh/v1alpha1\nkind: Job\nmetadata:\n  name: lm-mpi-job\n  labels:\n    \"volcano.sh/job-type\": \"MPI\"\nspec:\n  minAvailable: 4\n  schedulerName: volcano\n  plugins:\n    ssh: []\n    svc: []\n  policies:\n    - event: PodEvicted\n      action: RestartJob\n  tasks:\n    - replicas: 1\n      name: mpimaster\n      policies:\n        - event: TaskCompleted\n          action: CompleteJob\n      template:\n        spec:\n          containers:\n            - command:\n                - /bin/sh\n                - -c\n                - |\n                  MPI_HOST=`cat /etc/volcano/mpiworker.host | tr \"\\n\" \",\"`;\n                  mkdir -p /var/run/sshd; /usr/sbin/sshd;\n                  mpiexec --allow-run-as-root --host ${MPI_HOST} -np 3 mpi_hello_world;\n              image: docker.m.daocloud.io/volcanosh/example-mpi:0.0.1\n              name: mpimaster\n              ports:\n                - containerPort: 22\n                  name: mpijob-port\n              workingDir: /home\n              resources:\n                requests:\n                  cpu: \"500m\"\n                limits:\n                  cpu: \"500m\"\n          restartPolicy: OnFailure\n          imagePullSecrets:\n            - name: default-secret\n    - replicas: 3\n      name: mpiworker\n      template:\n        spec:\n          containers:\n            - command:\n                - /bin/sh\n                - -c\n                - |\n                  mkdir -p /var/run/sshd; /usr/sbin/sshd -D;\n              image: docker.m.daocloud.io/volcanosh/example-mpi:0.0.1\n              name: mpiworker\n              ports:\n                - containerPort: 22\n                  name: mpijob-port\n              workingDir: /home\n              resources:\n                requests:\n                  cpu: \"1000m\"\n                limits:\n                  cpu: \"1000m\"\n          restartPolicy: OnFailure\n          imagePullSecrets:\n            - name: default-secret\n

                          \u751f\u6210 PodGroup \u7684\u8d44\u6e90\uff1a

                          apiVersion: scheduling.volcano.sh/v1beta1\nkind: PodGroup\nmetadata:\n  annotations:\n  creationTimestamp: \"2024-05-28T09:18:50Z\"\n  generation: 5\n  labels:\n    volcano.sh/job-type: MPI\n  name: lm-mpi-job-9c571015-37c7-4a1a-9604-eaa2248613f2\n  namespace: default\n  ownerReferences:\n  - apiVersion: batch.volcano.sh/v1alpha1\n    blockOwnerDeletion: true\n    controller: true\n    kind: Job\n    name: lm-mpi-job\n    uid: 9c571015-37c7-4a1a-9604-eaa2248613f2\n  resourceVersion: \"25173454\"\n  uid: 7b04632e-7cff-4884-8e9a-035b7649d33b\nspec:\n  minMember: 4\n  minResources:\n    count/pods: \"4\"\n    cpu: 3500m\n    limits.cpu: 3500m\n    pods: \"4\"\n    requests.cpu: 3500m\n  minTaskMember:\n    mpimaster: 1\n    mpiworker: 3\n  queue: default\nstatus:\n  conditions:\n  - lastTransitionTime: \"2024-05-28T09:19:01Z\"\n    message: '3/4 tasks in gang unschedulable: pod group is not ready, 1 Succeeded,\n      3 Releasing, 4 minAvailable'\n    reason: NotEnoughResources\n    status: \"True\"\n    transitionID: f875efa5-0358-4363-9300-06cebc0e7466\n    type: Unschedulable\n  - lastTransitionTime: \"2024-05-28T09:18:53Z\"\n    reason: tasks in gang are ready to be scheduled\n    status: \"True\"\n    transitionID: 5a7708c8-7d42-4c33-9d97-0581f7c06dab\n    type: Scheduled\n  phase: Pending\n  succeeded: 1\n

                          \u4ece PodGroup \u53ef\u4ee5\u770b\u51fa\uff0c\u901a\u8fc7 ownerReferences \u5173\u8054\u5230\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5e76\u8bbe\u7f6e\u6700\u5c0f\u8fd0\u884c\u7684 Pod \u6570\u4e3a 4\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_binpack.html","title":"\u4f7f\u7528 Volcano Binpack \u8c03\u5ea6\u7b56\u7565","text":"

                          Binpack \u8c03\u5ea6\u7b97\u6cd5\u7684\u76ee\u6807\u662f\u5c3d\u91cf\u628a\u5df2\u88ab\u5360\u7528\u7684\u8282\u70b9\u586b\u6ee1\uff08\u5c3d\u91cf\u4e0d\u5f80\u7a7a\u767d\u8282\u70b9\u5206\u914d\uff09\u3002\u5177\u4f53\u5b9e\u73b0\u4e0a\uff0cBinpack \u8c03\u5ea6\u7b97\u6cd5\u4f1a\u7ed9\u6295\u9012\u7684\u8282\u70b9\u6253\u5206\uff0c \u5206\u6570\u8d8a\u9ad8\u8868\u793a\u8282\u70b9\u7684\u8d44\u6e90\u5229\u7528\u7387\u8d8a\u9ad8\u3002\u901a\u8fc7\u5c3d\u53ef\u80fd\u586b\u6ee1\u8282\u70b9\uff0c\u5c06\u5e94\u7528\u8d1f\u8f7d\u9760\u62e2\u5728\u90e8\u5206\u8282\u70b9\uff0c\u8fd9\u79cd\u8c03\u5ea6\u7b97\u6cd5\u80fd\u591f\u5c3d\u53ef\u80fd\u51cf\u5c0f\u8282\u70b9\u5185\u7684\u788e\u7247\uff0c \u5728\u7a7a\u95f2\u7684\u673a\u5668\u4e0a\u4e3a\u7533\u8bf7\u4e86\u66f4\u5927\u8d44\u6e90\u8bf7\u6c42\u7684 Pod \u9884\u7559\u8db3\u591f\u7684\u8d44\u6e90\u7a7a\u95f4\uff0c\u4f7f\u96c6\u7fa4\u4e0b\u7a7a\u95f2\u8d44\u6e90\u5f97\u5230\u6700\u5927\u5316\u7684\u5229\u7528\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_binpack.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"

                          \u9884\u5148\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e0a\u5b89\u88c5 Volcano \u7ec4\u4ef6\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_binpack.html#binpack","title":"Binpack \u7b97\u6cd5\u539f\u7406","text":"

                          Binpack \u5728\u5bf9\u4e00\u4e2a\u8282\u70b9\u6253\u5206\u65f6\uff0c\u4f1a\u6839\u636e Binpack \u63d2\u4ef6\u81ea\u8eab\u6743\u91cd\u548c\u5404\u8d44\u6e90\u8bbe\u7f6e\u7684\u6743\u91cd\u503c\u7efc\u5408\u6253\u5206\u3002 \u9996\u5148\uff0c\u5bf9 Pod \u8bf7\u6c42\u8d44\u6e90\u4e2d\u7684\u6bcf\u7c7b\u8d44\u6e90\u4f9d\u6b21\u6253\u5206\uff0c\u4ee5 CPU \u4e3a\u4f8b\uff0cCPU \u8d44\u6e90\u5728\u5f85\u8c03\u5ea6\u8282\u70b9\u7684\u5f97\u5206\u4fe1\u606f\u5982\u4e0b\uff1a

                          CPU.weight * (request + used) / allocatable\n

                          \u5373 CPU \u6743\u91cd\u503c\u8d8a\u9ad8\uff0c\u5f97\u5206\u8d8a\u9ad8\uff0c\u8282\u70b9\u8d44\u6e90\u4f7f\u7528\u91cf\u8d8a\u6ee1\uff0c\u5f97\u5206\u8d8a\u9ad8\u3002Memory\u3001GPU \u7b49\u8d44\u6e90\u539f\u7406\u7c7b\u4f3c\u3002\u5176\u4e2d\uff1a

                          • CPU.weight \u4e3a\u7528\u6237\u8bbe\u7f6e\u7684 CPU \u6743\u91cd
                          • request \u4e3a\u5f53\u524d Pod \u8bf7\u6c42\u7684 CPU \u8d44\u6e90\u91cf
                          • used \u4e3a\u5f53\u524d\u8282\u70b9\u5df2\u7ecf\u5206\u914d\u4f7f\u7528\u7684 CPU \u91cf
                          • allocatable \u4e3a\u5f53\u524d\u8282\u70b9 CPU \u53ef\u7528\u603b\u91cf

                          \u901a\u8fc7 Binpack \u7b56\u7565\u7684\u8282\u70b9\u603b\u5f97\u5206\u5982\u4e0b\uff1a

                          binpack.weight - (CPU.score + Memory.score + GPU.score) / (CPU.weight + Memory.weight + GPU.weight) - 100\n

                          \u5373 Binpack \u63d2\u4ef6\u7684\u6743\u91cd\u503c\u8d8a\u5927\uff0c\u5f97\u5206\u8d8a\u9ad8\uff0c\u67d0\u7c7b\u8d44\u6e90\u7684\u6743\u91cd\u8d8a\u5927\uff0c\u8be5\u8d44\u6e90\u5728\u6253\u5206\u65f6\u7684\u5360\u6bd4\u8d8a\u5927\u3002\u5176\u4e2d\uff1a

                          • binpack.weight \u4e3a\u7528\u6237\u8bbe\u7f6e\u7684\u88c5\u7bb1\u8c03\u5ea6\u7b56\u7565\u6743\u91cd
                          • CPU.score \u4e3a CPU \u8d44\u6e90\u5f97\u5206\uff0cCPU.weight \u4e3a CPU \u6743\u91cd
                          • Memory.score \u4e3a Memory \u8d44\u6e90\u5f97\u5206\uff0cMemory.weight \u4e3a Memory \u6743\u91cd
                          • GPU.score \u4e3a GPU \u8d44\u6e90\u5f97\u5206\uff0cGPU.weight \u4e3a GPU \u6743\u91cd

                          \u5982\u56fe\u6240\u793a\uff0c\u96c6\u7fa4\u4e2d\u5b58\u5728\u4e24\u4e2a\u8282\u70b9\uff0c\u5206\u522b\u4e3a Node1 \u548c Node 2\uff0c\u5728\u8c03\u5ea6 Pod \u65f6\uff0cBinpack \u7b56\u7565\u5bf9\u4e24\u4e2a\u8282\u70b9\u5206\u522b\u6253\u5206\u3002 \u5047\u8bbe\u96c6\u7fa4\u4e2d CPU.weight \u914d\u7f6e\u4e3a 1\uff0cMemory.weight \u914d\u7f6e\u4e3a 1\uff0cGPU.weight \u914d\u7f6e\u4e3a 2\uff0cbinpack.weight \u914d\u7f6e\u4e3a 5\u3002

                          1. Binpack \u5bf9 Node 1 \u7684\u8d44\u6e90\u6253\u5206\uff0c\u5404\u8d44\u6e90\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

                            • CPU Score\uff1a

                              CPU.weight - (request + used) / allocatable = 1 - (2 + 4) / 8 = 0.75

                            • Memory Score\uff1a

                              Memory.weight - (request + used) / allocatable = 1 - (4 + 8) / 16 = 0.75

                            • GPU Score\uff1a

                              GPU.weight - (request + used) / allocatable = 2 - (4 + 4) / 8 = 2

                          2. \u8282\u70b9\u603b\u5f97\u5206\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

                            binpack.weight - (CPU.score + Memory.score + GPU.score) / (CPU.weight + Memory.weight + GPU.weight) - 100\n

                            \u5047\u8bbe binpack.weight \u914d\u7f6e\u4e3a 5\uff0cNode 1 \u5728 Binpack \u7b56\u7565\u4e0b\u7684\u5f97\u5206\u4e3a\uff1a

                            5 - (0.75 + 0.75 + 2) / (1 + 1 + 2) - 100 = 437.5\n
                          3. Binpack \u5bf9 Node 2 \u7684\u8d44\u6e90\u6253\u5206\uff1a

                            • CPU Score\uff1a

                              CPU.weight - (request + used) / allocatable = 1 - (2 + 6) / 8 = 1

                            • Memory Score\uff1a

                              Memory.weight - (request + used) / allocatable = 1 - (4 + 8) / 16 = 0.75

                            • GPU Score\uff1a

                              GPU.weight - (request + used) / allocatable = 2 - (4 + 4) / 8 = 2

                          4. Node 2 \u5728 Binpack \u7b56\u7565\u4e0b\u7684\u5f97\u5206\u4e3a\uff1a

                            5 - (1 + 0.75 + 2) / (1 + 1 + 2) - 100 = 468.75\n

                          \u7efc\u4e0a\uff0cNode 2 \u5f97\u5206\u5927\u4e8e Node 1\uff0c\u6309\u7167 Binpack \u7b56\u7565\uff0cPod \u5c06\u4f1a\u4f18\u5148\u8c03\u5ea6\u81f3 Node 2\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_binpack.html#_2","title":"\u4f7f\u7528\u6848\u4f8b","text":"

                          Binpack \u8c03\u5ea6\u63d2\u4ef6\u5728\u5b89\u88c5 Volcano \u7684\u65f6\u5019\u9ed8\u8ba4\u5c31\u4f1a\u5f00\u542f\uff1b\u5982\u679c\u7528\u6237\u6ca1\u6709\u914d\u7f6e\u6743\u91cd\uff0c\u5219\u4f7f\u7528\u5982\u4e0b\u9ed8\u8ba4\u7684\u914d\u7f6e\u6743\u91cd\u3002

                          - plugins:\n    - name: binpack\n      arguments:\n        binpack.weight: 1\n        binpack.cpu: 1\n        binpack.memory: 1\n

                          \u9ed8\u8ba4\u6743\u91cd\u4e0d\u80fd\u4f53\u73b0\u5806\u53e0\u7279\u6027\uff0c\u56e0\u6b64\u9700\u8981\u4fee\u6539\u4e3a binpack.weight: 10\u3002

                          kubectl -n volcano-system edit configmaps volcano-scheduler-configmap\n
                          - plugins:\n    - name: binpack\n      arguments:\n        binpack.weight: 10\n        binpack.cpu: 1\n        binpack.memory: 1\n        binpack.resources: nvidia.com/gpu, example.com/foo\n        binpack.resources.nvidia.com/gpu: 2\n        binpack.resources.example.com/foo: 3\n

                          \u6539\u597d\u4e4b\u540e\u91cd\u542f volcano-scheduler Pod \u4f7f\u5176\u751f\u6548\u3002

                          \u521b\u5efa\u5982\u4e0b\u7684 Deployment\u3002

                          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: binpack-test\n  labels:\n    app: binpack-test\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: test\n  template:\n    metadata:\n      labels:\n        app: test\n    spec:\n      schedulerName: volcano\n      containers:\n        - name: test\n          image: busybox\n          imagePullPolicy: IfNotPresent\n          command: [\"sh\", \"-c\", 'echo \"Hello, Kubernetes!\" && sleep 3600']\n          resources:\n            requests:\n              cpu: 500m\n            limits:\n              cpu: 500m\n

                          \u5728\u4e24\u4e2a Node \u7684\u96c6\u7fa4\u4e0a\u53ef\u4ee5\u770b\u5230 Pod \u88ab\u8c03\u5ea6\u5230\u4e00\u4e2a Node \u4e0a\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_priority.html","title":"\u4f18\u5148\u7ea7\u62a2\u5360\uff08Preemption scheduling\uff09\u7b56\u7565","text":"

                          Volcano \u901a\u8fc7 Priority \u63d2\u4ef6\u5b9e\u73b0\u4e86\u4f18\u5148\u7ea7\u62a2\u5360\u7b56\u7565\uff0c\u5373 Preemption scheduling \u7b56\u7565\u3002\u5728\u96c6\u7fa4\u8d44\u6e90\u6709\u9650\u4e14\u591a\u4e2a Job \u7b49\u5f85\u8c03\u5ea6\u65f6\uff0c \u5982\u679c\u4f7f\u7528 Kubernetes \u9ed8\u8ba4\u8c03\u5ea6\u5668\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u5177\u6709\u66f4\u591a Pod \u6570\u91cf\u7684 Job \u5206\u5f97\u66f4\u591a\u8d44\u6e90\u3002\u800c Volcano-scheduler \u63d0\u4f9b\u4e86\u7b97\u6cd5\uff0c\u652f\u6301\u4e0d\u540c\u7684 Job \u4ee5 fair-share \u7684\u5f62\u5f0f\u5171\u4eab\u96c6\u7fa4\u8d44\u6e90\u3002

                          Priority \u63d2\u4ef6\u5141\u8bb8\u7528\u6237\u81ea\u5b9a\u4e49 Job \u548c Task \u7684\u4f18\u5148\u7ea7\uff0c\u5e76\u6839\u636e\u9700\u6c42\u5728\u4e0d\u540c\u5c42\u6b21\u4e0a\u5b9a\u5236\u8c03\u5ea6\u7b56\u7565\u3002 \u4f8b\u5982\uff0c\u5bf9\u4e8e\u91d1\u878d\u573a\u666f\u3001\u7269\u8054\u7f51\u76d1\u63a7\u573a\u666f\u7b49\u9700\u8981\u8f83\u9ad8\u5b9e\u65f6\u6027\u7684\u5e94\u7528\uff0cPriority \u63d2\u4ef6\u80fd\u591f\u786e\u4fdd\u5176\u4f18\u5148\u5f97\u5230\u8c03\u5ea6\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_priority.html#_1","title":"\u4f7f\u7528\u65b9\u5f0f","text":"

                          \u4f18\u5148\u7ea7\u7684\u51b3\u5b9a\u57fa\u4e8e\u914d\u7f6e\u7684 PriorityClass \u4e2d\u7684 Value \u503c\uff0c\u503c\u8d8a\u5927\u4f18\u5148\u7ea7\u8d8a\u9ad8\u3002\u9ed8\u8ba4\u5df2\u542f\u7528\uff0c\u65e0\u9700\u4fee\u6539\u3002\u53ef\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u6216\u4fee\u6539\u3002

                          kubectl -n volcano-system edit configmaps volcano-scheduler-configmap\n
                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_priority.html#_2","title":"\u4f7f\u7528\u6848\u4f8b","text":"

                          \u5047\u8bbe\u96c6\u7fa4\u4e2d\u5b58\u5728\u4e24\u4e2a\u7a7a\u95f2\u8282\u70b9\uff0c\u5e76\u6709\u4e09\u4e2a\u4f18\u5148\u7ea7\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff1ahigh-priority\u3001med-priority \u548c low-priority\u3002 \u5f53 high-priority \u5de5\u4f5c\u8d1f\u8f7d\u8fd0\u884c\u5e76\u5360\u6ee1\u96c6\u7fa4\u8d44\u6e90\u540e\uff0c\u518d\u63d0\u4ea4 med-priority \u548c low-priority \u5de5\u4f5c\u8d1f\u8f7d\u3002 \u7531\u4e8e\u96c6\u7fa4\u8d44\u6e90\u5168\u90e8\u88ab\u66f4\u9ad8\u4f18\u5148\u7ea7\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5360\u7528\uff0cmed-priority \u548c low-priority \u5de5\u4f5c\u8d1f\u8f7d\u5c06\u5904\u4e8e pending \u72b6\u6001\u3002 \u5f53 high-priority \u5de5\u4f5c\u8d1f\u8f7d\u7ed3\u675f\u540e\uff0c\u6839\u636e\u4f18\u5148\u7ea7\u8c03\u5ea6\u539f\u5219\uff0cmed-priority \u5de5\u4f5c\u8d1f\u8f7d\u5c06\u4f18\u5148\u88ab\u8c03\u5ea6\u3002

                          1. \u901a\u8fc7 priority.yaml \u521b\u5efa 3 \u4e2a\u4f18\u5148\u7ea7\u5b9a\u4e49\uff0c\u5206\u522b\u4e3a\uff1ahigh-priority\uff0cmed-priority\uff0clow-priority\u3002

                            \u67e5\u770b priority.yaml

                            cat <<EOF | kubectl apply -f - \napiVersion: scheduling.k8s.io/v1 \nkind: PriorityClass \nitems: \n  - metadata: \n      name: high-priority \n    value: 100 \n    globalDefault: false \n    description: \"This priority class should be used for volcano job only.\" \n  - metadata: \n      name: med-priority \n    value: 50 \n    globalDefault: false \n    description: \"This priority class should be used for volcano job only.\" \n  - metadata: \n      name: low-priority \n    value: 10 \n    globalDefault: false \n    description: \"This priority class should be used for volcano job only.\" \nEOF\n
                            2. \u67e5\u770b\u4f18\u5148\u7ea7\u5b9a\u4e49\u4fe1\u606f\u3002

                            kubectl get PriorityClass\n
                            NAME                      VALUE        GLOBAL-DEFAULT   AGE  \nhigh-priority             100          false            97s  \nlow-priority              10           false            97s  \nmed-priority              50           false            97s  \nsystem-cluster-critical   2000000000   false            6d6h  \nsystem-node-critical      2000001000   false            6d6h\n

                          2. \u521b\u5efa\u9ad8\u4f18\u5148\u7ea7\u5de5\u4f5c\u8d1f\u8f7d high-priority-job\uff0c\u5360\u7528\u96c6\u7fa4\u7684\u5168\u90e8\u8d44\u6e90\u3002

                            \u67e5\u770b high-priority-job
                            cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: priority-high  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: high-priority  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"4\"  \n          restartPolicy: OnFailure  \nEOF\n

                            \u901a\u8fc7 kubectl get pod \u67e5\u770b Pod\u8fd0\u884c \u4fe1\u606f\uff1a

                            kubectl get pods\n
                            NAME                   READY   STATUS    RESTARTS   AGE  \npriority-high-test-0   1/1     Running   0          3s  \npriority-high-test-1   1/1     Running   0          3s  \npriority-high-test-2   1/1     Running   0          3s  \npriority-high-test-3   1/1     Running   0          3s\n

                            \u6b64\u65f6\uff0c\u96c6\u7fa4\u8282\u70b9\u8d44\u6e90\u5df2\u5168\u90e8\u88ab\u5360\u7528\u3002

                          3. \u521b\u5efa\u4e2d\u4f18\u5148\u7ea7\u5de5\u4f5c\u8d1f\u8f7d med-priority-job \u548c\u4f4e\u4f18\u5148\u7ea7\u5de5\u4f5c\u8d1f\u8f7d low-priority-job\u3002

                            med-priority-job
                            cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: priority-medium  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: med-priority  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"4\"  \n          restartPolicy: OnFailure  \nEOF\n
                            low-priority-job
                            cat <<EOF | kubectl apply -f -  \napiVersion: batch.volcano.sh/v1alpha1  \nkind: Job  \nmetadata:  \n  name: priority-low  \nspec:  \n  schedulerName: volcano  \n  minAvailable: 4  \n  priorityClassName: low-priority  \n  tasks:  \n    - replicas: 4  \n      name: \"test\"  \n      template:  \n        spec:  \n          containers:  \n            - image: alpine  \n              command: [\"/bin/sh\", \"-c\", \"sleep 1000\"]  \n              imagePullPolicy: IfNotPresent  \n              name: running  \n              resources:  \n                requests:  \n                  cpu: \"4\"  \n          restartPolicy: OnFailure  \nEOF\n

                            \u901a\u8fc7 kubectl get pod \u67e5\u770b Pod \u8fd0\u884c\u4fe1\u606f\uff0c\u96c6\u7fa4\u8d44\u6e90\u4e0d\u8db3\uff0cPod \u5904\u4e8e Pending \u72b6\u6001\uff1a

                            kubectl get pods\n
                            NAME                     READY   STATUS    RESTARTS   AGE  \npriority-high-test-0     1/1     Running   0          3m29s  \npriority-high-test-1     1/1     Running   0          3m29s  \npriority-high-test-2     1/1     Running   0          3m29s  \npriority-high-test-3     1/1     Running   0          3m29s  \npriority-low-test-0      0/1     Pending   0          2m26s  \npriority-low-test-1      0/1     Pending   0          2m26s  \npriority-low-test-2      0/1     Pending   0          2m26s  \npriority-low-test-3      0/1     Pending   0          2m26s  \npriority-medium-test-0   0/1     Pending   0          2m36s  \npriority-medium-test-1   0/1     Pending   0          2m36s  \npriority-medium-test-2   0/1     Pending   0          2m36s  \npriority-medium-test-3   0/1     Pending   0          2m36s\n

                          4. \u5220\u9664 high_priority_job \u5de5\u4f5c\u8d1f\u8f7d\uff0c\u91ca\u653e\u96c6\u7fa4\u8d44\u6e90\uff0cmed_priority_job \u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002 \u6267\u884c kubectl delete -f high_priority_job.yaml \u91ca\u653e\u96c6\u7fa4\u8d44\u6e90\uff0c\u67e5\u770b Pod \u7684\u8c03\u5ea6\u4fe1\u606f\uff1a

                            kubectl get pods\n
                            NAME                     READY   STATUS    RESTARTS   AGE  \npriority-low-test-0      0/1     Pending   0          5m18s  \npriority-low-test-1      0/1     Pending   0          5m18s  \npriority-low-test-2      0/1     Pending   0          5m18s  \npriority-low-test-3      0/1     Pending   0          5m18s  \npriority-medium-test-0   1/1     Running   0          5m28s  \npriority-medium-test-1   1/1     Running   0          5m28s  \npriority-medium-test-2   1/1     Running   0          5m28s  \npriority-medium-test-3   1/1     Running   0          5m28s\n

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_user_guide.html","title":"\u5b89\u88c5 Volcano","text":"

                          \u968f\u7740 Kubernetes\uff08K8s\uff09\u6210\u4e3a\u4e91\u539f\u751f\u5e94\u7528\u7f16\u6392\u4e0e\u7ba1\u7406\u7684\u9996\u9009\u5e73\u53f0\uff0c\u4f17\u591a\u5e94\u7528\u6b63\u79ef\u6781\u5411 K8s \u8fc1\u79fb\u3002 \u5728\u4eba\u5de5\u667a\u80fd\u4e0e\u673a\u5668\u5b66\u4e60\u9886\u57df\uff0c\u7531\u4e8e\u8fd9\u4e9b\u4efb\u52a1\u901a\u5e38\u6d89\u53ca\u5927\u91cf\u8ba1\u7b97\uff0c\u5f00\u53d1\u8005\u503e\u5411\u4e8e\u5728 Kubernetes \u4e0a\u6784\u5efa AI \u5e73\u53f0\uff0c \u4ee5\u5145\u5206\u5229\u7528\u5176\u5728\u8d44\u6e90\u7ba1\u7406\u3001\u5e94\u7528\u7f16\u6392\u53ca\u8fd0\u7ef4\u76d1\u63a7\u65b9\u9762\u7684\u4f18\u52bf\u3002

                          \u7136\u800c\uff0cKubernetes \u7684\u9ed8\u8ba4\u8c03\u5ea6\u5668\u4e3b\u8981\u9488\u5bf9\u957f\u671f\u8fd0\u884c\u7684\u670d\u52a1\u8bbe\u8ba1\uff0c\u5bf9\u4e8e AI\u3001\u5927\u6570\u636e\u7b49\u9700\u8981\u6279\u91cf\u548c\u5f39\u6027\u8c03\u5ea6\u7684\u4efb\u52a1\u5b58\u5728\u8bf8\u591a\u4e0d\u8db3\u3002 \u4f8b\u5982\uff0c\u5728\u8d44\u6e90\u7ade\u4e89\u6fc0\u70c8\u7684\u60c5\u51b5\u4e0b\uff0c\u9ed8\u8ba4\u8c03\u5ea6\u5668\u53ef\u80fd\u5bfc\u81f4\u8d44\u6e90\u5206\u914d\u4e0d\u5747\uff0c\u8fdb\u800c\u5f71\u54cd\u4efb\u52a1\u7684\u6b63\u5e38\u6267\u884c\u3002

                          \u4ee5 TensorFlow \u4f5c\u4e1a\u4e3a\u4f8b\uff0c\u5176\u5305\u542b PS\uff08\u53c2\u6570\u670d\u52a1\u5668\uff09\u548c Worker \u4e24\u79cd\u89d2\u8272\uff0c\u4e24\u8005\u9700\u534f\u540c\u5de5\u4f5c\u624d\u80fd\u5b8c\u6210\u4efb\u52a1\u3002 \u82e5\u4ec5\u90e8\u7f72\u5355\u4e00\u89d2\u8272\uff0c\u4f5c\u4e1a\u5c06\u65e0\u6cd5\u8fd0\u884c\u3002\u800c\u9ed8\u8ba4\u8c03\u5ea6\u5668\u5bf9 Pod \u7684\u8c03\u5ea6\u662f\u9010\u4e2a\u8fdb\u884c\u7684\uff0c\u65e0\u6cd5\u611f\u77e5 TFJob \u4e2d PS \u548c Worker \u7684\u4f9d\u8d56\u5173\u7cfb\u3002 \u5728\u9ad8\u8d1f\u8f7d\u60c5\u51b5\u4e0b\uff0c\u8fd9\u53ef\u80fd\u5bfc\u81f4\u591a\u4e2a\u4f5c\u4e1a\u5404\u81ea\u5206\u914d\u5230\u90e8\u5206\u8d44\u6e90\uff0c\u4f46\u5747\u65e0\u6cd5\u5b8c\u6210\uff0c\u4ece\u800c\u9020\u6210\u8d44\u6e90\u6d6a\u8d39\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_user_guide.html#volcano_1","title":"Volcano \u7684\u8c03\u5ea6\u7b56\u7565\u4f18\u52bf","text":"

                          Volcano \u63d0\u4f9b\u4e86\u591a\u79cd\u8c03\u5ea6\u7b56\u7565\uff0c\u4ee5\u5e94\u5bf9\u4e0a\u8ff0\u6311\u6218\u3002\u5176\u4e2d\uff0cGang-scheduling \u7b56\u7565\u80fd\u786e\u4fdd\u5206\u5e03\u5f0f\u673a\u5668\u5b66\u4e60\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u591a\u4e2a\u4efb\u52a1\uff08Pod\uff09\u540c\u65f6\u542f\u52a8\uff0c \u907f\u514d\u6b7b\u9501\uff1bPreemption scheduling \u7b56\u7565\u5219\u5141\u8bb8\u9ad8\u4f18\u5148\u7ea7\u4f5c\u4e1a\u5728\u8d44\u6e90\u4e0d\u8db3\u65f6\u62a2\u5360\u4f4e\u4f18\u5148\u7ea7\u4f5c\u4e1a\u7684\u8d44\u6e90\uff0c\u786e\u4fdd\u5173\u952e\u4efb\u52a1\u4f18\u5148\u5b8c\u6210\u3002

                          \u6b64\u5916\uff0cVolcano \u4e0e Spark\u3001TensorFlow\u3001PyTorch \u7b49\u4e3b\u6d41\u8ba1\u7b97\u6846\u67b6\u65e0\u7f1d\u5bf9\u63a5\uff0c\u5e76\u652f\u6301 CPU \u548c GPU \u7b49\u5f02\u6784\u8bbe\u5907\u7684\u6df7\u5408\u8c03\u5ea6\uff0c\u4e3a AI \u8ba1\u7b97\u4efb\u52a1\u63d0\u4f9b\u4e86\u5168\u9762\u7684\u4f18\u5316\u652f\u6301\u3002

                          \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5\u548c\u4f7f\u7528 Volcano\uff0c\u4ee5\u4fbf\u60a8\u80fd\u591f\u5145\u5206\u5229\u7528\u5176\u8c03\u5ea6\u7b56\u7565\u4f18\u52bf\uff0c\u4f18\u5316 AI \u8ba1\u7b97\u4efb\u52a1\u3002

                          "},{"location":"end-user/kpanda/gpu/volcano/volcano_user_guide.html#volcano_2","title":"\u5b89\u88c5 Volcano","text":"
                          1. \u5728 \u96c6\u7fa4\u8be6\u60c5 -> Helm \u5e94\u7528 -> Helm \u6a21\u677f \u4e2d\u627e\u5230 Volcano \u5e76\u5b89\u88c5\u3002

                          2. \u68c0\u67e5\u5e76\u786e\u8ba4 Volcano \u662f\u5426\u5b89\u88c5\u5b8c\u6210\uff0c\u5373 volcano-admission\u3001volcano-controllers\u3001volcano-scheduler \u7ec4\u4ef6\u662f\u5426\u6b63\u5e38\u8fd0\u884c\u3002

                          \u901a\u5e38 Volcano \u4f1a\u548c AI Lab \u5e73\u53f0\u914d\u5408\u4f7f\u7528\uff0c\u4ee5\u5b9e\u73b0\u6570\u636e\u96c6\u3001Notebook\u3001\u4efb\u52a1\u8bad\u7ec3\u7684\u6574\u4e2a\u5f00\u53d1\u3001\u8bad\u7ec3\u6d41\u7a0b\u7684\u6709\u6548\u95ed\u73af\u3002

                          "},{"location":"end-user/kpanda/helm/index.html","title":"Helm \u6a21\u677f","text":"

                          Helm \u662f Kubernetes \u7684\u5305\u7ba1\u7406\u5de5\u5177\uff0c\u65b9\u4fbf\u7528\u6237\u5feb\u901f\u53d1\u73b0\u3001\u5171\u4eab\u548c\u4f7f\u7528 Kubernetes \u6784\u5efa\u7684\u5e94\u7528\u3002\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63d0\u4f9b\u4e86\u4e0a\u767e\u4e2a Helm \u6a21\u677f\uff0c\u6db5\u76d6\u5b58\u50a8\u3001\u7f51\u7edc\u3001\u76d1\u63a7\u3001\u6570\u636e\u5e93\u7b49\u4e3b\u8981\u573a\u666f\u3002\u501f\u52a9\u8fd9\u4e9b\u6a21\u677f\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7 UI \u754c\u9762\u5feb\u901f\u90e8\u7f72\u3001\u4fbf\u6377\u7ba1\u7406 Helm \u5e94\u7528\u3002\u6b64\u5916\uff0c\u652f\u6301\u901a\u8fc7\u6dfb\u52a0 Helm \u4ed3\u5e93 \u6dfb\u52a0\u66f4\u591a\u7684\u4e2a\u6027\u5316\u6a21\u677f\uff0c\u6ee1\u8db3\u591a\u6837\u9700\u6c42\u3002

                          \u5173\u952e\u6982\u5ff5\uff1a

                          \u4f7f\u7528 Helm \u65f6\u9700\u8981\u4e86\u89e3\u4ee5\u4e0b\u51e0\u4e2a\u5173\u952e\u6982\u5ff5\uff1a

                          • Chart\uff1a\u4e00\u4e2a Helm \u5b89\u88c5\u5305\uff0c\u5176\u4e2d\u5305\u542b\u4e86\u8fd0\u884c\u4e00\u4e2a\u5e94\u7528\u6240\u9700\u8981\u7684\u955c\u50cf\u3001\u4f9d\u8d56\u548c\u8d44\u6e90\u5b9a\u4e49\u7b49\uff0c\u8fd8\u53ef\u80fd\u5305\u542b Kubernetes \u96c6\u7fa4\u4e2d\u7684\u670d\u52a1\u5b9a\u4e49\uff0c\u7c7b\u4f3c Homebrew \u4e2d\u7684 formula\u3001APT \u7684 dpkg \u6216\u8005 Yum \u7684 rpm \u6587\u4ef6\u3002Chart \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u79f0\u4e3a Helm \u6a21\u677f \u3002

                          • Release\uff1a\u5728 Kubernetes \u96c6\u7fa4\u4e0a\u8fd0\u884c\u7684\u4e00\u4e2a Chart \u5b9e\u4f8b\u3002\u4e00\u4e2a Chart \u53ef\u4ee5\u5728\u540c\u4e00\u4e2a\u96c6\u7fa4\u5185\u591a\u6b21\u5b89\u88c5\uff0c\u6bcf\u6b21\u5b89\u88c5\u90fd\u4f1a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 Release\u3002Release \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u79f0\u4e3a Helm \u5e94\u7528 \u3002

                          • Repository\uff1a\u7528\u4e8e\u53d1\u5e03\u548c\u5b58\u50a8 Chart \u7684\u5b58\u50a8\u5e93\u3002Repository \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u79f0\u4e3a Helm \u4ed3\u5e93\u3002

                          \u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u524d\u5f80 Helm \u5b98\u7f51\u67e5\u770b\u3002

                          \u76f8\u5173\u64cd\u4f5c\uff1a

                          • \u4e0a\u4f20 Helm \u6a21\u677f\uff0c\u4ecb\u7ecd\u4e0a\u4f20 Helm \u6a21\u677f\u64cd\u4f5c\u3002
                          • \u7ba1\u7406 Helm \u5e94\u7528\uff0c\u5305\u62ec\u5b89\u88c5\u3001\u66f4\u65b0\u3001\u5378\u8f7d Helm \u5e94\u7528\uff0c\u67e5\u770b Helm \u64cd\u4f5c\u8bb0\u5f55\u7b49\u3002
                          • \u7ba1\u7406 Helm \u4ed3\u5e93\uff0c\u5305\u62ec\u5b89\u88c5\u3001\u66f4\u65b0\u3001\u5220\u9664 Helm \u4ed3\u5e93\u7b49\u3002
                          "},{"location":"end-user/kpanda/helm/Import-addon.html","title":"\u5c06\u81ea\u5b9a\u4e49 Helm \u5e94\u7528\u5bfc\u5165\u7cfb\u7edf\u5185\u7f6e Addon","text":"

                          \u672c\u6587\u4ece\u79bb\u7ebf\u548c\u5728\u7ebf\u4e24\u79cd\u73af\u5883\u8bf4\u660e\u5982\u4f55\u5c06 Helm \u5e94\u7528\u5bfc\u5165\u5230\u7cfb\u7edf\u5185\u7f6e\u7684 Addon \u4e2d\u3002

                          "},{"location":"end-user/kpanda/helm/Import-addon.html#_1","title":"\u79bb\u7ebf\u73af\u5883","text":"

                          \u79bb\u7ebf\u73af\u5883\u6307\u7684\u662f\u65e0\u6cd5\u8fde\u901a\u4e92\u8054\u7f51\u6216\u5c01\u95ed\u7684\u79c1\u6709\u7f51\u7edc\u73af\u5883\u3002

                          "},{"location":"end-user/kpanda/helm/Import-addon.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5b58\u5728\u53ef\u4ee5\u8fd0\u884c\u7684\u00a0charts-syncer\u3002 \u82e5\u6ca1\u6709\uff0c\u53ef\u70b9\u51fb\u4e0b\u8f7d\u3002
                          • Helm Chart \u5df2\u7ecf\u5b8c\u6210\u9002\u914d charts-syncer\u3002 \u5373\u5728 Helm Chart \u5185\u6dfb\u52a0\u4e86 .relok8s-images.yaml \u6587\u4ef6\u3002\u8be5\u6587\u4ef6\u9700\u8981\u5305\u542b Chart \u4e2d\u6240\u6709\u4f7f\u7528\u5230\u955c\u50cf\uff0c \u4e5f\u53ef\u4ee5\u5305\u542b Chart \u4e2d\u672a\u76f4\u63a5\u4f7f\u7528\u7684\u955c\u50cf\uff0c\u7c7b\u4f3c Operator \u4e2d\u4f7f\u7528\u7684\u955c\u50cf\u3002

                          Note

                          • \u5982\u4f55\u7f16\u5199 Chart \u53ef\u53c2\u8003\u00a0image-hints-file\u3002 \u8981\u6c42\u955c\u50cf\u7684\u00a0registry \u548c repository \u5fc5\u987b\u5206\u5f00\uff0c\u56e0\u4e3a load \u955c\u50cf\u65f6\u9700\u66ff\u6362\u6216\u4fee\u6539 registry/repository\u3002
                          • \u5b89\u88c5\u5668\u6240\u5728\u7684\u706b\u79cd\u96c6\u7fa4\u5df2\u5b89\u88c5 charts-syncer\u3002 \u82e5\u5c06\u81ea\u5b9a\u4e49 Helm \u5e94\u7528\u5bfc\u5165\u5b89\u88c5\u5668\u6240\u5728\u706b\u79cd\u96c6\u7fa4\uff0c\u53ef\u8df3\u8fc7\u4e0b\u8f7d\u76f4\u63a5\u9002\u914d\uff1b \u82e5\u672a\u5b89\u88c5\u00a0charts-syncer\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c \u53ef\u7acb\u5373\u4e0b\u8f7d\u3002
                          "},{"location":"end-user/kpanda/helm/Import-addon.html#helm-chart","title":"\u540c\u6b65 Helm Chart","text":"
                          1. \u8fdb\u5165\u5bb9\u5668\u7ba1\u7406 -> Helm \u5e94\u7528 -> Helm \u4ed3\u5e93\uff0c\u641c\u7d22 addon\uff0c\u83b7\u53d6\u5185\u7f6e\u4ed3\u5e93\u5730\u5740\u548c\u7528\u6237\u540d/\u5bc6\u7801\uff08\u7cfb\u7edf\u5185\u7f6e\u4ed3\u5e93\u9ed8\u8ba4\u7528\u6237\u540d/\u5bc6\u7801\u4e3a rootuser/rootpass123\uff09\u3002
                          1. \u540c\u6b65 Helm Chart \u5230\u5bb9\u5668\u7ba1\u7406\u5185\u7f6e\u4ed3\u5e93 Addon

                            • \u7f16\u5199\u5982\u4e0b\u914d\u7f6e\u6587\u4ef6\uff0c\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u914d\u7f6e\u4fee\u6539\uff0c\u5e76\u4fdd\u5b58\u4e3a sync-dao-2048.yaml\u3002

                              source:  # helm charts \u6e90\u4fe1\u606f\n  repo:\n    kind: HARBOR # \u4e5f\u53ef\u4ee5\u662f\u4efb\u4f55\u5176\u4ed6\u652f\u6301\u7684 Helm Chart \u4ed3\u5e93\u7c7b\u522b\uff0c\u6bd4\u5982 CHARTMUSEUM\n    url: https://release-ci.daocloud.io/chartrepo/community #  \u9700\u66f4\u6539\u4e3a chart repo url\n    #auth: # \u7528\u6237\u540d/\u5bc6\u7801,\u82e5\u6ca1\u6709\u8bbe\u7f6e\u5bc6\u7801\u53ef\u4ee5\u4e0d\u586b\u5199\n      #username: \"admin\"\n      #password: \"Harbor12345\"\ncharts:  # \u9700\u8981\u540c\u6b65\n  - name: dao-2048 # helm charts \u4fe1\u606f\uff0c\u82e5\u4e0d\u586b\u5199\u5219\u540c\u6b65\u6e90 helm repo \u5185\u6240\u6709 charts\n    versions:\n      - 1.4.1\ntarget:  # helm charts \u76ee\u6807\u4fe1\u606f\n  containerRegistry: 10.5.14.40 # \u955c\u50cf\u4ed3\u5e93 url\n  repo:\n    kind: CHARTMUSEUM # \u4e5f\u53ef\u4ee5\u662f\u4efb\u4f55\u5176\u4ed6\u652f\u6301\u7684 Helm Chart \u4ed3\u5e93\u7c7b\u522b\uff0c\u6bd4\u5982 HARBOR\n    url: http://10.5.14.40:8081 #  \u9700\u66f4\u6539\u4e3a\u6b63\u786e chart repo url\uff0c\u53ef\u4ee5\u901a\u8fc7 helm repo add $HELM-REPO \u9a8c\u8bc1\u5730\u5740\u662f\u5426\u6b63\u786e\n    auth: # \u7528\u6237\u540d/\u5bc6\u7801\uff0c\u82e5\u6ca1\u6709\u8bbe\u7f6e\u5bc6\u7801\u53ef\u4ee5\u4e0d\u586b\u5199\n      username: \"rootuser\"\n      password: \"rootpass123\"\n  containers:\n    # kind: HARBOR # \u82e5\u955c\u50cf\u4ed3\u5e93\u4e3a HARBOR \u4e14\u5e0c\u671b charts-syncer \u81ea\u52a8\u521b\u5efa\u955c\u50cf Repository \u5219\u586b\u5199\u8be5\u5b57\u6bb5  \n    # auth: # \u7528\u6237\u540d/\u5bc6\u7801\uff0c\u82e5\u6ca1\u6709\u8bbe\u7f6e\u5bc6\u7801\u53ef\u4ee5\u4e0d\u586b\u5199 \n      # username: \"admin\"\n      # password: \"Harbor12345\"\n\n# leverage .relok8s-images.yaml file inside the Charts to move the container images too\nrelocateContainerImages: true\n
                            • \u6267\u884c charts-syncer \u547d\u4ee4\u540c\u6b65 Chart \u53ca\u5176\u5305\u542b\u7684\u955c\u50cf

                              charts-syncer sync --config sync-dao-2048.yaml --insecure --auto-create-repository\n

                              \u9884\u671f\u8f93\u51fa\u4e3a\uff1a

                              I1222 15:01:47.119777    8743 sync.go:45] Using config file: \"examples/sync-dao-2048.yaml\"\nW1222 15:01:47.234238    8743 syncer.go:263] Ignoring skipDependencies option as dependency sync is not supported if container image relocation is true or syncing from/to intermediate directory\nI1222 15:01:47.234685    8743 sync.go:58] There is 1 chart out of sync!\nI1222 15:01:47.234706    8743 sync.go:66] Syncing \"dao-2048_1.4.1\" chart...\n.relok8s-images.yaml hints file found\nComputing relocation...\n\nRelocating dao-2048@1.4.1...\nPushing 10.5.14.40/daocloud/dao-2048:v1.4.1...\nDone\nDone moving /var/folders/vm/08vw0t3j68z9z_4lcqyhg8nm0000gn/T/charts-syncer869598676/dao-2048-1.4.1.tgz\n
                          2. \u5f85\u4e0a\u4e00\u6b65\u6267\u884c\u5b8c\u6210\u540e\uff0c\u8fdb\u5165\u5bb9\u5668\u7ba1\u7406 -> Helm \u5e94\u7528 -> Helm \u4ed3\u5e93\uff0c\u627e\u5230\u5bf9\u5e94 Addon\uff0c \u5728\u64cd\u4f5c\u680f\u70b9\u51fb\u540c\u6b65\u4ed3\u5e93\uff0c\u56de\u5230 Helm \u6a21\u677f\u5c31\u53ef\u4ee5\u770b\u5230\u4e0a\u4f20\u7684 Helm \u5e94\u7528

                          3. \u540e\u7eed\u53ef\u6b63\u5e38\u8fdb\u884c\u5b89\u88c5\u3001\u5347\u7ea7\u3001\u5378\u8f7d

                          "},{"location":"end-user/kpanda/helm/Import-addon.html#_3","title":"\u5728\u7ebf\u73af\u5883","text":"

                          \u5728\u7ebf\u73af\u5883\u7684 Helm Repo \u5730\u5740\u4e3a release.daocloud.io\u3002 \u5982\u679c\u7528\u6237\u65e0\u6743\u9650\u6dfb\u52a0 Helm Repo\uff0c\u5219\u65e0\u6cd5\u5c06\u81ea\u5b9a\u4e49 Helm \u5e94\u7528\u5bfc\u5165\u7cfb\u7edf\u5185\u7f6e Addon\u3002 \u60a8\u53ef\u4ee5\u6dfb\u52a0\u81ea\u5df1\u642d\u5efa\u7684 Helm \u4ed3\u5e93\uff0c\u7136\u540e\u6309\u7167\u79bb\u7ebf\u73af\u5883\u4e2d\u540c\u6b65 Helm Chart \u7684\u6b65\u9aa4\u5c06\u60a8\u7684 Helm \u4ed3\u5e93\u96c6\u6210\u5230\u5e73\u53f0\u4f7f\u7528\u3002

                          "},{"location":"end-user/kpanda/helm/helm-app.html","title":"\u7ba1\u7406 Helm \u5e94\u7528","text":"

                          \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u5bf9 Helm \u8fdb\u884c\u754c\u9762\u5316\u7ba1\u7406\uff0c\u5305\u62ec\u4f7f\u7528 Helm \u6a21\u677f\u521b\u5efa Helm \u5b9e\u4f8b\u3001\u81ea\u5b9a\u4e49 Helm \u5b9e\u4f8b\u53c2\u6570\u3001\u5bf9 Helm \u5b9e\u4f8b\u8fdb\u884c\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u7b49\u529f\u80fd\u3002

                          \u672c\u8282\u5c06\u4ee5 cert-manager \u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u754c\u9762\u521b\u5efa\u5e76\u7ba1\u7406 Helm \u5e94\u7528\u3002

                          "},{"location":"end-user/kpanda/helm/helm-app.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          "},{"location":"end-user/kpanda/helm/helm-app.html#helm_1","title":"\u5b89\u88c5 Helm \u5e94\u7528","text":"

                          \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5b89\u88c5 Helm \u5e94\u7528\u3002

                          1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u8fdb\u5165 Helm \u6a21\u677f\u9875\u9762\u3002

                            \u5728 Helm \u6a21\u677f\u9875\u9762\u9009\u62e9\u540d\u4e3a addon \u7684 Helm \u4ed3\u5e93\uff0c\u6b64\u65f6\u754c\u9762\u4e0a\u5c06\u5448\u73b0 addon \u4ed3\u5e93\u4e0b\u6240\u6709\u7684 Helm chart \u6a21\u677f\u3002 \u70b9\u51fb\u540d\u79f0\u4e3a cert-manager \u7684 Chart\u3002

                          3. \u5728\u5b89\u88c5\u9875\u9762\uff0c\u80fd\u591f\u770b\u5230 Chart \u7684\u76f8\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u5728\u754c\u9762\u53f3\u4e0a\u89d2\u9009\u62e9\u9700\u8981\u5b89\u88c5\u7684\u7248\u672c\uff0c\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u6b64\u5904\u9009\u62e9 v1.9.1 \u7248\u672c\u8fdb\u884c\u5b89\u88c5\u3002

                          4. \u914d\u7f6e \u540d\u79f0 \u3001 \u547d\u540d\u7a7a\u95f4 \u53ca \u7248\u672c\u4fe1\u606f \uff0c\u4e5f\u53ef\u4ee5\u5728\u4e0b\u65b9\u7684 \u53c2\u6570\u914d\u7f6e \u533a\u57df\u901a\u8fc7\u4fee\u6539 YAML \u6765\u81ea\u5b9a\u4e49\u53c2\u6570\u3002\u70b9\u51fb \u786e\u5b9a \u3002

                          5. \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de Helm \u5e94\u7528\u5217\u8868\uff0c\u65b0\u521b\u5efa\u7684 Helm \u5e94\u7528\u72b6\u6001\u4e3a \u5b89\u88c5\u4e2d \uff0c\u7b49\u5f85\u4e00\u6bb5\u65f6\u95f4\u540e\u72b6\u6001\u53d8\u4e3a \u8fd0\u884c\u4e2d \u3002

                          "},{"location":"end-user/kpanda/helm/helm-app.html#helm_2","title":"\u66f4\u65b0 Helm \u5e94\u7528","text":"

                          \u5f53\u6211\u4eec\u901a\u8fc7\u754c\u9762\u5b8c\u6210\u4e00\u4e2a Helm \u5e94\u7528\u7684\u5b89\u88c5\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u5bf9 Helm \u5e94\u7528\u6267\u884c\u66f4\u65b0\u64cd\u4f5c\u3002\u6ce8\u610f\uff1a\u53ea\u6709\u901a\u8fc7\u754c\u9762\u5b89\u88c5\u7684 Helm \u5e94\u7528\u624d\u652f\u6301\u4f7f\u7528\u754c\u9762\u8fdb\u884c\u66f4\u65b0\u64cd\u4f5c\u3002

                          \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u66f4\u65b0 Helm \u5e94\u7528\u3002

                          1. \u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb Helm \u5e94\u7528 \uff0c\u8fdb\u5165 Helm \u5e94\u7528\u5217\u8868\u9875\u9762\u3002

                            \u5728 Helm \u5e94\u7528\u5217\u8868\u9875\u9009\u62e9\u9700\u8981\u66f4\u65b0\u7684 Helm \u5e94\u7528\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff0c\u5728\u4e0b\u62c9\u9009\u62e9\u4e2d\u9009\u62e9 \u66f4\u65b0 \u64cd\u4f5c\u3002

                          3. \u70b9\u51fb \u66f4\u65b0 \u6309\u94ae\u540e\uff0c\u7cfb\u7edf\u5c06\u8df3\u8f6c\u81f3\u66f4\u65b0\u754c\u9762\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u9700\u8981\u5bf9 Helm \u5e94\u7528\u8fdb\u884c\u66f4\u65b0\uff0c\u6b64\u5904\u6211\u4eec\u4ee5\u66f4\u65b0 dao-2048 \u8fd9\u4e2a\u5e94\u7528\u7684 http \u7aef\u53e3\u4e3a\u4f8b\u3002

                          4. \u4fee\u6539\u5b8c\u76f8\u5e94\u53c2\u6570\u540e\u3002\u60a8\u53ef\u4ee5\u5728\u53c2\u6570\u914d\u7f6e\u4e0b\u70b9\u51fb \u53d8\u5316 \u6309\u94ae\uff0c\u5bf9\u6bd4\u4fee\u6539\u524d\u540e\u7684\u6587\u4ef6\uff0c\u786e\u5b9a\u65e0\u8bef\u540e\uff0c\u70b9\u51fb\u5e95\u90e8 \u786e\u5b9a \u6309\u94ae\uff0c\u5b8c\u6210 Helm \u5e94\u7528\u7684\u66f4\u65b0\u3002

                          5. \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de Helm \u5e94\u7528\u5217\u8868\uff0c\u53f3\u4e0a\u89d2\u5f39\u7a97\u63d0\u793a \u66f4\u65b0\u6210\u529f \u3002

                          "},{"location":"end-user/kpanda/helm/helm-app.html#helm_3","title":"\u67e5\u770b Helm \u64cd\u4f5c\u8bb0\u5f55","text":"

                          Helm \u5e94\u7528\u7684\u6bcf\u6b21\u5b89\u88c5\u3001\u66f4\u65b0\u3001\u5220\u9664\u90fd\u6709\u8be6\u7ec6\u7684\u64cd\u4f5c\u8bb0\u5f55\u548c\u65e5\u5fd7\u53ef\u4f9b\u67e5\u770b\u3002

                          1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb \u96c6\u7fa4\u8fd0\u7ef4 -> \u6700\u8fd1\u64cd\u4f5c \uff0c\u7136\u540e\u5728\u9875\u9762\u4e0a\u65b9\u9009\u62e9 Helm \u64cd\u4f5c \u6807\u7b7e\u9875\u3002\u6bcf\u4e00\u6761\u8bb0\u5f55\u5bf9\u5e94\u4e00\u6b21\u5b89\u88c5/\u66f4\u65b0/\u5220\u9664\u64cd\u4f5c\u3002

                          2. \u5982\u9700\u67e5\u770b\u6bcf\u4e00\u6b21\u64cd\u4f5c\u7684\u8be6\u7ec6\u65e5\u5fd7\uff1a\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 \u65e5\u5fd7 \u3002

                          3. \u6b64\u65f6\u9875\u9762\u4e0b\u65b9\u5c06\u4ee5\u63a7\u5236\u53f0\u7684\u5f62\u5f0f\u5c55\u793a\u8be6\u7ec6\u7684\u8fd0\u884c\u65e5\u5fd7\u3002

                          "},{"location":"end-user/kpanda/helm/helm-app.html#helm_4","title":"\u5220\u9664 Helm \u5e94\u7528","text":"

                          \u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5220\u9664 Helm \u5e94\u7528\u3002

                          1. \u627e\u5230\u5f85\u5220\u9664\u7684 Helm \u5e94\u7528\u6240\u5728\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb Helm \u5e94\u7528 \uff0c\u8fdb\u5165 Helm \u5e94\u7528\u5217\u8868\u9875\u9762\u3002

                            \u5728 Helm \u5e94\u7528\u5217\u8868\u9875\u9009\u62e9\u60a8\u9700\u8981\u5220\u9664\u7684 Helm \u5e94\u7528\uff0c\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff0c\u5728\u4e0b\u62c9\u9009\u62e9\u4e2d\u9009\u62e9 \u5220\u9664 \u3002

                          3. \u5728\u5f39\u7a97\u5185\u8f93\u5165 Helm \u5e94\u7528\u7684\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u7136\u540e\u70b9\u51fb \u5220\u9664 \u6309\u94ae\u3002

                          "},{"location":"end-user/kpanda/helm/helm-repo.html","title":"\u7ba1\u7406 Helm \u4ed3\u5e93","text":"

                          Helm \u4ed3\u5e93\u662f\u7528\u6765\u5b58\u50a8\u548c\u53d1\u5e03 Chart \u7684\u5b58\u50a8\u5e93\u3002Helm \u5e94\u7528\u6a21\u5757\u652f\u6301\u901a\u8fc7 HTTP(s) \u534f\u8bae\u6765\u8bbf\u95ee\u5b58\u50a8\u5e93\u4e2d\u7684 Chart \u5305\u3002\u7cfb\u7edf\u9ed8\u8ba4\u5185\u7f6e\u4e86\u4e0b\u8868\u6240\u793a\u7684 4 \u4e2a Helm \u4ed3\u5e93\u4ee5\u6ee1\u8db3\u4f01\u4e1a\u751f\u4ea7\u8fc7\u7a0b\u4e2d\u7684\u5e38\u89c1\u9700\u6c42\u3002

                          \u4ed3\u5e93 \u63cf\u8ff0 \u793a\u4f8b partner \u7531\u751f\u6001\u5408\u4f5c\u4f19\u4f34\u6240\u63d0\u4f9b\u7684\u5404\u7c7b\u4f18\u8d28\u7279\u8272 Chart tidb system \u7cfb\u7edf\u6838\u5fc3\u529f\u80fd\u7ec4\u4ef6\u53ca\u90e8\u5206\u9ad8\u7ea7\u529f\u80fd\u6240\u5fc5\u9700\u4f9d\u8d56\u7684 Chart\uff0c\u5982\u5fc5\u9700\u5b89\u88c5 insight-agent \u624d\u80fd\u591f\u83b7\u53d6\u96c6\u7fa4\u7684\u76d1\u63a7\u4fe1\u606f Insight addon \u4e1a\u52a1\u573a\u666f\u4e2d\u5e38\u89c1\u7684 Chart cert-manager community Kubernetes \u793e\u533a\u8f83\u4e3a\u70ed\u95e8\u7684\u5f00\u6e90\u7ec4\u4ef6 Chart Istio

                          \u9664\u4e0a\u8ff0\u9884\u7f6e\u4ed3\u5e93\u5916\uff0c\u60a8\u4e5f\u53ef\u4ee5\u81ea\u884c\u6dfb\u52a0\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u6dfb\u52a0\u3001\u66f4\u65b0\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u3002

                          "},{"location":"end-user/kpanda/helm/helm-repo.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762

                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5982\u679c\u4f7f\u7528\u79c1\u6709\u4ed3\u5e93\uff0c\u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u62e5\u6709\u5bf9\u8be5\u79c1\u6709\u4ed3\u5e93\u7684\u8bfb\u5199\u6743\u9650\u3002

                          "},{"location":"end-user/kpanda/helm/helm-repo.html#helm_1","title":"\u5f15\u5165\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93","text":"

                          \u4e0b\u9762\u4ee5 Kubevela \u516c\u5f00\u7684\u955c\u50cf\u4ed3\u5e93\u4e3a\u4f8b\uff0c\u5f15\u5165 Helm \u4ed3\u5e93\u5e76\u7ba1\u7406\u3002

                          1. \u627e\u5230\u9700\u8981\u5f15\u5165\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u8fdb\u5165 Helm \u4ed3\u5e93\u9875\u9762\u3002

                          3. \u5728 Helm \u4ed3\u5e93\u9875\u9762\u70b9\u51fb \u521b\u5efa\u4ed3\u5e93 \u6309\u94ae\uff0c\u8fdb\u5165\u521b\u5efa\u4ed3\u5e93\u9875\u9762\uff0c\u6309\u7167\u4e0b\u8868\u914d\u7f6e\u76f8\u5173\u53c2\u6570\u3002

                            • \u4ed3\u5e93\u540d\u79f0\uff1a\u8bbe\u7f6e\u4ed3\u5e93\u540d\u79f0\u3002\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26 - \uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u5e76\u7ed3\u5c3e\uff0c\u4f8b\u5982 kubevela
                            • \u4ed3\u5e93\u5730\u5740\uff1a\u7528\u6765\u6307\u5411\u76ee\u6807 Helm \u4ed3\u5e93\u7684 http\uff08s\uff09\u5730\u5740\u3002\u4f8b\u5982 https://charts.kubevela.net/core
                            • \u8df3\u8fc7 TLS \u9a8c\u8bc1: \u5982\u679c\u6dfb\u52a0\u7684 Helm \u4ed3\u5e93\u4e3a https \u5730\u5740\u4e14\u9700\u8df3\u8fc7 TLS \u9a8c\u8bc1\uff0c\u53ef\u4ee5\u52fe\u9009\u6b64\u9009\u9879\uff0c\u9ed8\u8ba4\u4e3a\u4e0d\u52fe\u9009
                            • \u8ba4\u8bc1\u65b9\u5f0f\uff1a\u8fde\u63a5\u4ed3\u5e93\u5730\u5740\u540e\u7528\u6765\u8fdb\u884c\u8eab\u4efd\u6821\u9a8c\u7684\u65b9\u5f0f\u3002\u5bf9\u4e8e\u516c\u5f00\u4ed3\u5e93\uff0c\u53ef\u4ee5\u9009\u62e9 None \uff0c\u79c1\u6709\u7684\u4ed3\u5e93\u9700\u8981\u8f93\u5165\u7528\u6237\u540d/\u5bc6\u7801\u4ee5\u8fdb\u884c\u8eab\u4efd\u6821\u9a8c
                            • \u6807\u7b7e\uff1a\u4e3a\u8be5 Helm \u4ed3\u5e93\u6dfb\u52a0\u6807\u7b7e\u3002\u4f8b\u5982 key: repo4\uff1bvalue: Kubevela
                            • \u6ce8\u89e3\uff1a\u4e3a\u8be5 Helm \u4ed3\u5e93\u6dfb\u52a0\u6ce8\u89e3\u3002\u4f8b\u5982 key: repo4\uff1bvalue: Kubevela
                            • \u63cf\u8ff0\uff1a\u4e3a\u8be5 Helm \u4ed3\u5e93\u6dfb\u52a0\u63cf\u8ff0\u3002\u4f8b\u5982\uff1a\u8fd9\u662f\u4e00\u4e2a Kubevela \u516c\u5f00 Helm \u4ed3\u5e93

                          4. \u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210 Helm \u4ed3\u5e93\u7684\u521b\u5efa\u3002\u9875\u9762\u4f1a\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u4ed3\u5e93\u5217\u8868\u3002

                          "},{"location":"end-user/kpanda/helm/helm-repo.html#helm_2","title":"\u66f4\u65b0 Helm \u4ed3\u5e93","text":"

                          \u5f53 Helm \u4ed3\u5e93\u7684\u5730\u5740\u4fe1\u606f\u53d1\u751f\u53d8\u5316\u65f6\uff0c\u53ef\u4ee5\u66f4\u65b0 Helm \u4ed3\u5e93\u7684\u5730\u5740\u3001\u8ba4\u8bc1\u65b9\u5f0f\u3001\u6807\u7b7e\u3001\u6ce8\u89e3\u53ca\u63cf\u8ff0\u4fe1\u606f\u3002

                          1. \u627e\u5230\u5f85\u66f4\u65b0\u4ed3\u5e93\u6240\u5728\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u8fdb\u5165 Helm \u4ed3\u5e93\u5217\u8868\u9875\u9762\u3002

                          3. \u5728\u4ed3\u5e93\u5217\u8868\u9875\u9762\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684 Helm \u4ed3\u5e93\uff0c\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \u6309\u94ae\uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u70b9\u51fb \u66f4\u65b0 \u3002

                          4. \u5728 \u7f16\u8f91 Helm \u4ed3\u5e93 \u9875\u9762\u8fdb\u884c\u66f4\u65b0\uff0c\u5b8c\u6210\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                          5. \u8fd4\u56de Helm \u4ed3\u5e93\u5217\u8868\uff0c\u5c4f\u5e55\u63d0\u793a\u66f4\u65b0\u6210\u529f\u3002

                          "},{"location":"end-user/kpanda/helm/helm-repo.html#helm_3","title":"\u5220\u9664 Helm \u4ed3\u5e93","text":"

                          \u9664\u4e86\u5f15\u5165\u3001\u66f4\u65b0\u4ed3\u5e93\u5916\uff0c\u60a8\u4e5f\u53ef\u4ee5\u5c06\u4e0d\u9700\u8981\u7684\u4ed3\u5e93\u5220\u9664\uff0c\u5305\u62ec\u7cfb\u7edf\u9884\u7f6e\u4ed3\u5e93\u548c\u7b2c\u4e09\u65b9\u4ed3\u5e93\u3002

                          1. \u627e\u5230\u5f85\u5220\u9664\u4ed3\u5e93\u6240\u5728\u7684\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u4f9d\u6b21\u70b9\u51fb Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u8fdb\u5165 Helm \u4ed3\u5e93\u5217\u8868\u9875\u9762\u3002

                          3. \u5728\u4ed3\u5e93\u5217\u8868\u9875\u9762\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684 Helm \u4ed3\u5e93\uff0c\u5728\u5217\u8868\u53f3\u4fa7\u70b9\u51fb \u2507 \u6309\u94ae\uff0c\u5728\u5f39\u51fa\u83dc\u5355\u4e2d\u70b9\u51fb \u5220\u9664 \u3002

                          4. \u8f93\u5165\u4ed3\u5e93\u540d\u79f0\u8fdb\u884c\u786e\u8ba4\uff0c\u70b9\u51fb \u5220\u9664 \u3002

                          5. \u8fd4\u56de Helm \u4ed3\u5e93\u5217\u8868\uff0c\u5c4f\u5e55\u63d0\u793a\u5220\u9664\u6210\u529f\u3002

                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html","title":"Helm \u5e94\u7528\u591a\u67b6\u6784\u548c\u5347\u7ea7\u5bfc\u5165\u6b65\u9aa4","text":"

                          \u901a\u5e38\u5728\u591a\u67b6\u6784\u96c6\u7fa4\u4e2d\uff0c\u4e5f\u4f1a\u4f7f\u7528\u591a\u67b6\u6784\u7684 Helm \u5305\u6765\u90e8\u7f72\u5e94\u7528\uff0c\u4ee5\u89e3\u51b3\u67b6\u6784\u5dee\u5f02\u5e26\u6765\u7684\u90e8\u7f72\u95ee\u9898\u3002 \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u5c06\u5355\u67b6\u6784 Helm \u5e94\u7528\u878d\u5408\u4e3a\u591a\u67b6\u6784\uff0c\u4ee5\u53ca\u591a\u67b6\u6784\u4e0e\u591a\u67b6\u6784 Helm \u5e94\u7528\u7684\u76f8\u4e92\u878d\u5408\u3002

                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_1","title":"\u5bfc\u5165","text":""},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_2","title":"\u5355\u67b6\u6784\u5bfc\u5165","text":"

                          \u51c6\u5907\u597d\u5f85\u5bfc\u5165\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz \u3002 \u628a\u8def\u5f84\u586b\u5199\u81f3 clusterConfig.yml \u914d\u7f6e\u6587\u4ef6\uff0c\u4f8b\u5982\uff1a

                          addonPackage:\n  path: \"/home/addon-offline-full-package-v0.9.0-amd64.tar.gz\"\n

                          \u7136\u540e\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

                          ~/dce5-installer cluster-create -c /home/dce5/sample/clusterConfig.yaml -m /home/dce5/sample/manifest.yaml -d -j13\n
                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_3","title":"\u591a\u67b6\u6784\u878d\u5408","text":"

                          \u51c6\u5907\u597d\u5f85\u878d\u5408\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz\u3002

                          \u4ee5 addon-offline-full-package-v0.9.0-arm64.tar.gz \u4e3a\u4f8b\uff0c\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

                          ~/dce5-installer import-addon -c /home/dce5/sample/clusterConfig.yaml --addon-path=/home/addon-offline-full-package-v0.9.0-arm64.tar.gz\n
                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_4","title":"\u5347\u7ea7","text":""},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_5","title":"\u5355\u67b6\u6784\u5347\u7ea7","text":"

                          \u51c6\u5907\u597d\u5f85\u5bfc\u5165\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz\u3002

                          \u628a\u8def\u5f84\u586b\u5199\u81f3 clusterConfig.yml \u914d\u7f6e\u6587\u4ef6\uff0c\u4f8b\u5982\uff1a

                          addonPackage:\n  path: \"/home/addon-offline-full-package-v0.11.0-amd64.tar.gz\"\n

                          \u7136\u540e\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

                          ~/dce5-installer cluster-create -c /home/dce5/sample/clusterConfig.yaml -m /home/dce5/sample/manifest.yaml -d -j13\n
                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_6","title":"\u591a\u67b6\u6784\u878d\u5408","text":"

                          \u51c6\u5907\u597d\u5f85\u878d\u5408\u7684\u79bb\u7ebf\u5305 addon-offline-full-package-${version}-${arch}.tar.gz\u3002

                          \u4ee5 addon-offline-full-package-v0.11.0-arm64.tar.gz \u4e3a\u4f8b\uff0c\u6267\u884c\u5bfc\u5165\u547d\u4ee4\uff1a

                          ~/dce5-installer import-addon -c /home/dce5/sample/clusterConfig.yaml --addon-path=/home/addon-offline-full-package-v0.11.0-arm64.tar.gz\n
                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_7","title":"\u6ce8\u610f\u4e8b\u9879","text":""},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_8","title":"\u78c1\u76d8\u7a7a\u95f4","text":"

                          \u79bb\u7ebf\u5305\u6bd4\u8f83\u5927\uff0c\u4e14\u8fc7\u7a0b\u4e2d\u9700\u8981\u89e3\u538b\u548c load \u955c\u50cf\uff0c\u9700\u8981\u9884\u7559\u5145\u8db3\u7684\u7a7a\u95f4\uff0c\u5426\u5219\u53ef\u80fd\u5728\u8fc7\u7a0b\u4e2d\u62a5 \u201cno space left\u201d \u800c\u4e2d\u65ad\u3002

                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_9","title":"\u5931\u8d25\u540e\u91cd\u8bd5","text":"

                          \u5982\u679c\u5728\u591a\u67b6\u6784\u878d\u5408\u6b65\u9aa4\u6267\u884c\u5931\u8d25\uff0c\u91cd\u8bd5\u524d\u9700\u8981\u6e05\u7406\u4e00\u4e0b\u6b8b\u7559\uff1a

                          rm -rf addon-offline-target-package\n
                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_10","title":"\u955c\u50cf\u7a7a\u95f4","text":"

                          \u5982\u679c\u878d\u5408\u7684\u79bb\u7ebf\u5305\u4e2d\u5305\u542b\u4e86\u4e0e\u5bfc\u5165\u7684\u79bb\u7ebf\u5305\u4e0d\u4e00\u81f4\u7684\u955c\u50cf\u7a7a\u95f4\uff0c\u53ef\u80fd\u4f1a\u5728\u878d\u5408\u8fc7\u7a0b\u4e2d\u56e0\u4e3a\u955c\u50cf\u7a7a\u95f4\u4e0d\u5b58\u5728\u800c\u62a5\u9519\uff1a

                          \u89e3\u51b3\u529e\u6cd5\uff1a\u53ea\u9700\u8981\u5728\u878d\u5408\u4e4b\u524d\u521b\u5efa\u597d\u8be5\u955c\u50cf\u7a7a\u95f4\u5373\u53ef\uff0c\u4f8b\u5982\u4e0a\u56fe\u62a5\u9519\u53ef\u901a\u8fc7\u521b\u5efa\u955c\u50cf\u7a7a\u95f4 localhost \u63d0\u524d\u907f\u514d\u3002

                          "},{"location":"end-user/kpanda/helm/multi-archi-helm.html#_11","title":"\u67b6\u6784\u51b2\u7a81","text":"

                          \u5347\u7ea7\u81f3\u4f4e\u4e8e 0.12.0 \u7248\u672c\u7684 addon \u65f6\uff0c\u7531\u4e8e\u76ee\u6807\u79bb\u7ebf\u5305\u91cc\u7684 charts-syncer \u6ca1\u6709\u68c0\u67e5\u955c\u50cf\u5b58\u5728\u5219\u4e0d\u63a8\u9001\u529f\u80fd\uff0c\u56e0\u6b64\u4f1a\u5728\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\u4f1a\u91cd\u65b0\u628a\u591a\u67b6\u6784\u51b2\u6210\u5355\u67b6\u6784\u3002 \u4f8b\u5982\uff1a\u5728 v0.10 \u7248\u672c\u5c06 addon \u5b9e\u73b0\u4e3a\u591a\u67b6\u6784\uff0c\u6b64\u65f6\u82e5\u5347\u7ea7\u4e3a v0.11 \u7248\u672c\uff0c\u5219\u591a\u67b6\u6784 addon \u4f1a\u88ab\u8986\u76d6\u4e3a\u5355\u67b6\u6784\uff1b\u82e5\u5347\u7ea7\u4e3a 0.12.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u5219\u4ecd\u80fd\u591f\u4fdd\u6301\u591a\u67b6\u6784\u3002

                          "},{"location":"end-user/kpanda/helm/upload-helm.html","title":"\u4e0a\u4f20 Helm \u6a21\u677f","text":"

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4e0a\u4f20 Helm \u6a21\u677f\uff0c\u64cd\u4f5c\u6b65\u9aa4\u89c1\u4e0b\u6587\u3002

                          1. \u5f15\u5165 Helm \u4ed3\u5e93\uff0c\u64cd\u4f5c\u6b65\u9aa4\u53c2\u8003\u5f15\u5165\u7b2c\u4e09\u65b9 Helm \u4ed3\u5e93\u3002

                          2. \u4e0a\u4f20 Helm Chart \u5230 Helm \u4ed3\u5e93\u3002

                            \u5ba2\u6237\u7aef\u4e0a\u4f20\u9875\u9762\u4e0a\u4f20

                            Note

                            \u6b64\u65b9\u5f0f\u9002\u7528\u4e8e Harbor\u3001ChartMuseum\u3001JFrog \u7c7b\u578b\u4ed3\u5e93\u3002

                            1. \u767b\u5f55\u4e00\u4e2a\u53ef\u4ee5\u8bbf\u95ee\u5230 Helm \u4ed3\u5e93\u7684\u8282\u70b9\uff0c\u5c06 Helm \u4e8c\u8fdb\u5236\u6587\u4ef6\u4e0a\u4f20\u5230\u8282\u70b9\uff0c\u5e76\u5b89\u88c5 cm-push \u63d2\u4ef6\uff08\u9700\u8981\u8fde\u901a\u5916\u7f51\u5e76\u63d0\u524d\u5b89\u88c5 Git\uff09\u3002

                              \u5b89\u88c5\u63d2\u4ef6\u6d41\u7a0b\u53c2\u8003\u5b89\u88c5 cm-push \u63d2\u4ef6\u3002

                            2. \u63a8\u9001 Helm Chart \u5230 Helm \u4ed3\u5e93\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff1b

                              helm cm-push ${charts-dir} ${HELM_REPO_URL} --username ${username} --password ${password}\n

                              \u5b57\u6bb5\u8bf4\u660e\uff1a

                              • charts-dir\uff1aHelm Chart \u7684\u76ee\u5f55\uff0c\u6216\u8005\u662f\u6253\u5305\u597d\u7684 Chart\uff08\u5373 .tgz \u6587\u4ef6\uff09\u3002
                              • HELM_REPO_URL\uff1aHelm \u4ed3\u5e93\u7684 URL\u3002
                              • username/password\uff1a\u6709\u63a8\u9001\u6743\u9650\u7684 Helm \u4ed3\u5e93\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002
                              • \u5982\u679c\u91c7\u7528 https \u8bbf\u95ee\u4e14\u9700\u8981\u8df3\u8fc7\u8bc1\u4e66\u9a8c\u8bc1\uff0c\u53ef\u6dfb\u52a0\u53c2\u6570 --insecure

                            Note

                            \u6b64\u65b9\u5f0f\u4ec5\u9002\u7528\u4e8e Harbor \u7c7b\u578b\u4ed3\u5e93\u3002

                            1. \u767b\u5f55\u7f51\u9875 Harbor \u4ed3\u5e93\uff0c\u8bf7\u786e\u4fdd\u767b\u5f55\u7528\u6237\u6709\u63a8\u9001\u6743\u9650\uff1b

                            2. \u8fdb\u5165\u5230\u5bf9\u5e94\u9879\u76ee\uff0c\u9009\u62e9 Helm Charts \u9875\u7b7e\uff0c\u70b9\u51fb\u9875\u9762 \u4e0a\u4f20 \u6309\u94ae\uff0c\u5b8c\u6210 Helm Chart \u4e0a\u4f20\u3002

                          3. \u540c\u6b65\u8fdc\u7aef\u4ed3\u5e93\u6570\u636e

                            \u624b\u52a8\u540c\u6b65\u81ea\u52a8\u540c\u6b65

                            \u9ed8\u8ba4\u96c6\u7fa4\u672a\u5f00\u542f Helm \u4ed3\u5e93\u81ea\u52a8\u5237\u65b0 \uff0c\u9700\u8981\u6267\u884c\u624b\u52a8\u540c\u6b65\u64cd\u4f5c\uff0c\u5927\u81f4\u6b65\u9aa4\u4e3a\uff1a

                            \u8fdb\u5165 Helm \u5e94\u7528 -> Helm \u4ed3\u5e93 \uff0c\u70b9\u51fb\u4ed3\u5e93\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \u6309\u94ae\uff0c\u9009\u62e9 \u540c\u6b65\u4ed3\u5e93 \uff0c\u5b8c\u6210\u4ed3\u5e93\u6570\u636e\u540c\u6b65\u3002

                            \u5982\u9700\u5f00\u542f Helm \u4ed3\u5e93\u81ea\u52a8\u540c\u6b65\u529f\u80fd\uff0c\u53ef\u8fdb\u5165 \u96c6\u7fa4\u8fd0\u7ef4 -> \u96c6\u7fa4\u8bbe\u7f6e -> \u9ad8\u7ea7\u914d\u7f6e \uff0c\u5f00\u542f Helm \u4ed3\u5e93\u81ea\u52a8\u5237\u65b0\u5f00\u5173\u3002

                          "},{"location":"end-user/kpanda/inspect/index.html","title":"\u96c6\u7fa4\u5de1\u68c0","text":"

                          \u96c6\u7fa4\u5de1\u68c0\u53ef\u4ee5\u901a\u8fc7\u81ea\u52a8\u6216\u624b\u52a8\u65b9\u5f0f\uff0c\u5b9a\u671f\u6216\u968f\u65f6\u68c0\u67e5\u96c6\u7fa4\u7684\u6574\u4f53\u5065\u5eb7\u72b6\u6001\uff0c\u8ba9\u7ba1\u7406\u5458\u83b7\u5f97\u4fdd\u969c\u96c6\u7fa4\u5b89\u5168\u7684\u4e3b\u52a8\u6743\u3002 \u57fa\u4e8e\u5408\u7406\u7684\u5de1\u68c0\u8ba1\u5212\uff0c\u8fd9\u79cd\u4e3b\u52a8\u81ea\u53d1\u7684\u96c6\u7fa4\u68c0\u67e5\u53ef\u4ee5\u8ba9\u7ba1\u7406\u5458\u968f\u65f6\u638c\u63e1\u96c6\u7fa4\u72b6\u6001\uff0c\u6446\u8131\u4e4b\u524d\u51fa\u73b0\u6545\u969c\u65f6\u53ea\u80fd\u88ab\u52a8\u6392\u67e5\u95ee\u9898\u7684\u56f0\u5883\uff0c\u505a\u5230\u4e8b\u5148\u76d1\u63a7\u3001\u63d0\u524d\u9632\u8303\u3002

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63d0\u4f9b\u7684\u96c6\u7fa4\u5de1\u68c0\u529f\u80fd\uff0c\u652f\u6301\u4ece\u96c6\u7fa4\u3001\u8282\u70b9\u3001\u5bb9\u5668\u7ec4\uff08Pod\uff09\u4e09\u4e2a\u7ef4\u5ea6\u8fdb\u884c\u81ea\u5b9a\u4e49\u5de1\u68c0\u9879\uff0c\u5de1\u68c0\u7ed3\u675f\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u53ef\u89c6\u5316\u7684\u5de1\u68c0\u62a5\u544a\u3002

                          • \u96c6\u7fa4\u7ef4\u5ea6\uff1a\u68c0\u67e5\u96c6\u7fa4\u4e2d\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u60c5\u51b5\uff0c\u5305\u62ec\u96c6\u7fa4\u72b6\u6001\u3001\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u4ee5\u53ca\u63a7\u5236\u8282\u70b9\u7279\u6709\u7684\u5de1\u68c0\u9879\u7b49\uff0c\u4f8b\u5982 kube-apiserver \u548c etcd \u7684\u72b6\u6001\u3002
                          • \u8282\u70b9\u7ef4\u5ea6\uff1a\u5305\u62ec\u63a7\u5236\u8282\u70b9\u548c\u5de5\u4f5c\u8282\u70b9\u901a\u7528\u7684\u68c0\u67e5\u9879\uff0c\u4f8b\u5982\u8282\u70b9\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3001\u53e5\u67c4\u6570\u3001PID \u72b6\u6001\u3001\u7f51\u7edc\u72b6\u6001\u3002
                          • \u5bb9\u5668\u7ec4\u7ef4\u5ea6\uff1a\u68c0\u67e5 Pod \u7684 CPU \u548c\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\u3001\u8fd0\u884c\u72b6\u6001\u3001PV \u548c PVC \u7684\u72b6\u6001\u7b49\u3002

                          \u5982\u9700\u4e86\u89e3\u6216\u6267\u884c\u5b89\u5168\u65b9\u9762\u7684\u5de1\u68c0\uff0c\u53ef\u53c2\u8003\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u7684\u5b89\u5168\u626b\u63cf\u7c7b\u578b\u3002

                          "},{"location":"end-user/kpanda/inspect/config.html","title":"\u521b\u5efa\u5de1\u68c0\u914d\u7f6e","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63d0\u4f9b\u96c6\u7fa4\u5de1\u68c0\u529f\u80fd\uff0c\u652f\u6301\u4ece\u96c6\u7fa4\u7ef4\u5ea6\u3001\u8282\u70b9\u7ef4\u5ea6\u3001\u5bb9\u5668\u7ec4\u7ef4\u5ea6\u8fdb\u884c\u5de1\u68c0\u3002

                          • \u96c6\u7fa4\u7ef4\u5ea6\uff1a\u68c0\u67e5\u96c6\u7fa4\u4e2d\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u60c5\u51b5\uff0c\u5305\u62ec\u96c6\u7fa4\u72b6\u6001\u3001\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\uff0c\u4ee5\u53ca\u63a7\u5236\u8282\u70b9\u7279\u6709\u7684\u5de1\u68c0\u9879\u7b49\uff0c\u4f8b\u5982 kube-apiserver \u548c etcd \u7684\u72b6\u6001\u3002
                          • \u8282\u70b9\u7ef4\u5ea6\uff1a\u5305\u62ec\u63a7\u5236\u8282\u70b9\u548c\u5de5\u4f5c\u8282\u70b9\u901a\u7528\u7684\u68c0\u67e5\u9879\uff0c\u4f8b\u5982\u8282\u70b9\u8d44\u6e90\u4f7f\u7528\u60c5\u51b5\u3001\u53e5\u67c4\u6570\u3001PID \u72b6\u6001\u3001\u7f51\u7edc\u72b6\u6001\u3002
                          • \u5bb9\u5668\u7ec4\u7ef4\u5ea6\uff1a\u68c0\u67e5 Pod \u7684 CPU \u548c\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\u3001\u8fd0\u884c\u72b6\u6001\u3001PV \u548c PVC \u7684\u72b6\u6001\u7b49\u3002

                          \u4e0b\u9762\u4ecb\u7ecd\u5982\u4f55\u521b\u5efa\u5de1\u68c0\u914d\u7f6e\u3002

                          "},{"location":"end-user/kpanda/inspect/config.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4
                          • \u6240\u9009\u96c6\u7fa4\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u4e14\u5df2\u7ecf\u5728\u96c6\u7fa4\u4e2d\u5b89\u88c5\u4e86 insight \u7ec4\u4ef6
                          "},{"location":"end-user/kpanda/inspect/config.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                          1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u96c6\u7fa4\u5de1\u68c0 \u3002

                          2. \u5728\u9875\u9762\u53f3\u4fa7\u70b9\u51fb \u5de1\u68c0\u914d\u7f6e \u3002

                          3. \u53c2\u8003\u4ee5\u4e0b\u8bf4\u660e\u586b\u5199\u5de1\u68c0\u914d\u7f6e\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                            • \u96c6\u7fa4\uff1a\u4e0b\u62c9\u9009\u62e9\u8981\u5bf9\u54ea\u4e9b\u96c6\u7fa4\u8fdb\u884c\u5de1\u68c0\u3002\u5982\u679c\u9009\u62e9\u591a\u4e2a\u96c6\u7fa4\uff0c\u5219\u81ea\u52a8\u751f\u6210\u591a\u4e2a\u5de1\u68c0\u914d\u7f6e\uff08\u4ec5\u5de1\u68c0\u7684\u96c6\u7fa4\u4e0d\u4e00\u81f4\uff0c\u5176\u4ed6\u914d\u7f6e\u90fd\u5b8c\u5168\u4e00\u81f4\uff09
                            • \u5b9a\u65f6\u5de1\u68c0\uff1a\u542f\u7528\u540e\u53ef\u6839\u636e\u4e8b\u5148\u8bbe\u7f6e\u7684\u5de1\u68c0\u9891\u7387\u5b9a\u671f\u81ea\u52a8\u6267\u884c\u96c6\u7fa4\u5de1\u68c0
                            • \u5de1\u68c0\u9891\u7387\uff1a\u8bbe\u7f6e\u81ea\u52a8\u5de1\u68c0\u7684\u5468\u671f\uff0c\u4f8b\u5982\u6bcf\u5468\u4e8c\u4e0a\u5348\u5341\u70b9\u3002\u652f\u6301\u81ea\u5b9a\u4e49 CronExpression\uff0c\u53ef\u53c2\u8003 Cron \u65f6\u95f4\u8868\u8bed\u6cd5
                            • \u5de1\u68c0\u8bb0\u5f55\u4fdd\u7559\u6761\u6570\uff1a\u7d2f\u8ba1\u6700\u591a\u4fdd\u7559\u591a\u5c11\u6761\u5de1\u68c0\u8bb0\u5f55\uff0c\u5305\u62ec\u6240\u6709\u96c6\u7fa4\u7684\u5de1\u68c0\u8bb0\u5f55
                            • \u53c2\u6570\u914d\u7f6e\uff1a\u53c2\u6570\u914d\u7f6e\u5206\u4e3a\u96c6\u7fa4\u7ef4\u5ea6\u3001\u8282\u70b9\u7ef4\u5ea6\u3001\u5bb9\u5668\u7ec4\u7ef4\u5ea6\u4e09\u90e8\u5206\uff0c\u53ef\u4ee5\u6839\u636e\u573a\u666f\u9700\u6c42\u542f\u7528\u6216\u7981\u7528\u67d0\u4e9b\u5de1\u68c0\u9879\u3002

                          \u5de1\u68c0\u914d\u7f6e\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u4f1a\u81ea\u52a8\u663e\u793a\u5728\u5de1\u68c0\u914d\u7f6e\u5217\u8868\u4e2d\u3002\u5728\u914d\u7f6e\u53f3\u4fa7\u70b9\u51fb\u66f4\u591a\u64cd\u4f5c\u6309\u94ae\u53ef\u4ee5\u7acb\u5373\u6267\u884c\u5de1\u68c0\u3001\u4fee\u6539\u5de1\u68c0\u914d\u7f6e\u3001\u5220\u9664\u5de1\u68c0\u914d\u7f6e\u548c\u5de1\u68c0\u8bb0\u5f55\u3002

                          • \u70b9\u51fb \u5de1\u68c0 \u53ef\u4ee5\u6839\u636e\u8be5\u914d\u7f6e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u5de1\u68c0\u3002
                          • \u70b9\u51fb \u5de1\u68c0\u914d\u7f6e \u53ef\u4ee5\u4fee\u6539\u5de1\u68c0\u914d\u7f6e\u3002
                          • \u70b9\u51fb \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u5de1\u68c0\u914d\u7f6e\u548c\u5386\u53f2\u7684\u5de1\u68c0\u8bb0\u5f55

                          Note

                          • \u5de1\u68c0\u914d\u7f6e\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u5982\u679c\u542f\u7528\u4e86 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u4f1a\u5728\u6307\u5b9a\u65f6\u95f4\u81ea\u52a8\u6267\u884c\u5de1\u68c0\u3002
                          • \u5982\u672a\u542f\u7528 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u9700\u8981\u624b\u52a8\u89e6\u53d1\u5de1\u68c0\u3002
                          "},{"location":"end-user/kpanda/inspect/inspect.html","title":"\u6267\u884c\u96c6\u7fa4\u5de1\u68c0","text":"

                          \u5de1\u68c0\u914d\u7f6e\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u5982\u679c\u542f\u7528\u4e86 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u4f1a\u5728\u6307\u5b9a\u65f6\u95f4\u81ea\u52a8\u6267\u884c\u5de1\u68c0\u3002\u5982\u672a\u542f\u7528 \u5b9a\u65f6\u5de1\u68c0 \u914d\u7f6e\uff0c\u5219\u9700\u8981\u624b\u52a8\u89e6\u53d1\u5de1\u68c0\u3002

                          \u6b64\u9875\u4ecb\u7ecd\u5982\u4f55\u624b\u52a8\u6267\u884c\u96c6\u7fa4\u5de1\u68c0\u3002

                          "},{"location":"end-user/kpanda/inspect/inspect.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4
                          • \u5df2\u521b\u5efa\u5de1\u68c0\u914d\u7f6e
                          • \u6240\u9009\u96c6\u7fa4\u5904\u4e8e \u8fd0\u884c\u4e2d \u72b6\u6001\u4e14\u5df2\u7ecf\u5728\u96c6\u7fa4\u4e2d\u5b89\u88c5\u4e86 insight \u7ec4\u4ef6
                          "},{"location":"end-user/kpanda/inspect/inspect.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u6267\u884c\u5de1\u68c0\u65f6\uff0c\u652f\u6301\u52fe\u9009\u591a\u4e2a\u96c6\u7fa4\u8fdb\u884c\u6279\u91cf\u5de1\u68c0\uff0c\u6216\u8005\u4ec5\u5bf9\u67d0\u4e00\u4e2a\u96c6\u7fa4\u8fdb\u884c\u5355\u72ec\u5de1\u68c0\u3002

                          \u6279\u91cf\u5de1\u68c0\u5355\u72ec\u5de1\u68c0
                          1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u4e00\u7ea7\u5bfc\u822a\u680f\u70b9\u51fb \u96c6\u7fa4\u5de1\u68c0 \uff0c\u7136\u540e\u5728\u9875\u9762\u53f3\u4fa7\u70b9\u51fb \u5de1\u68c0 \u3002

                          2. \u52fe\u9009\u9700\u8981\u5de1\u68c0\u7684\u96c6\u7fa4\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                            • \u82e5\u9009\u62e9\u591a\u4e2a\u96c6\u7fa4\u8fdb\u884c\u540c\u65f6\u5de1\u68c0\uff0c\u7cfb\u7edf\u5c06\u6839\u636e\u4e0d\u540c\u96c6\u7fa4\u7684\u5de1\u68c0\u914d\u7f6e\u8fdb\u884c\u5de1\u68c0\u3002
                            • \u5982\u672a\u8bbe\u7f6e\u96c6\u7fa4\u5de1\u68c0\u914d\u7f6e\uff0c\u5c06\u4f7f\u7528\u7cfb\u7edf\u9ed8\u8ba4\u914d\u7f6e\u3002

                          1. \u8fdb\u5165\u96c6\u7fa4\u5de1\u68c0\u9875\u9762\u3002
                          2. \u5728\u5bf9\u5e94\u5de1\u68c0\u914d\u7f6e\u7684\u53f3\u4fa7\u70b9\u51fb \u2507 \u66f4\u591a\u64cd\u4f5c\u6309\u94ae\uff0c\u7136\u540e\u5728\u5f39\u51fa\u7684\u83dc\u5355\u4e2d\u9009\u62e9 \u5de1\u68c0 \u5373\u53ef\u3002

                          "},{"location":"end-user/kpanda/inspect/report.html","title":"\u67e5\u770b\u5de1\u68c0\u62a5\u544a","text":"

                          \u5de1\u68c0\u6267\u884c\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u5de1\u68c0\u8bb0\u5f55\u548c\u8be6\u7ec6\u7684\u5de1\u68c0\u62a5\u544a\u3002

                          "},{"location":"end-user/kpanda/inspect/report.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5df2\u7ecf\u521b\u5efa\u4e86\u5de1\u68c0\u914d\u7f6e
                          • \u5df2\u7ecf\u6267\u884c\u8fc7\u81f3\u5c11\u4e00\u6b21\u5de1\u68c0
                          "},{"location":"end-user/kpanda/inspect/report.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                          1. \u8fdb\u5165\u96c6\u7fa4\u5de1\u68c0\u9875\u9762\uff0c\u70b9\u51fb\u76ee\u6807\u5de1\u68c0\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                          2. \u70b9\u51fb\u60f3\u8981\u67e5\u770b\u7684\u5de1\u68c0\u8bb0\u5f55\u540d\u79f0\u3002

                            • \u6bcf\u6267\u884c\u4e00\u6b21\u5de1\u68c0\uff0c\u5c31\u4f1a\u751f\u6210\u4e00\u6761\u5de1\u68c0\u8bb0\u5f55\u3002
                            • \u5f53\u5de1\u68c0\u8bb0\u5f55\u8d85\u8fc7\u5de1\u68c0\u914d\u7f6e\u4e2d\u8bbe\u7f6e\u7684\u6700\u5927\u4fdd\u7559\u6761\u6570\u65f6\uff0c\u4ece\u6267\u884c\u65f6\u95f4\u6700\u65e9\u7684\u8bb0\u5f55\u5f00\u59cb\u5220\u9664\u3002

                          3. \u67e5\u770b\u5de1\u68c0\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u6839\u636e\u5de1\u68c0\u914d\u7f6e\u53ef\u80fd\u5305\u62ec\u96c6\u7fa4\u8d44\u6e90\u6982\u89c8\u3001\u7cfb\u7edf\u7ec4\u4ef6\u7684\u8fd0\u884c\u60c5\u51b5\u7b49\u3002

                            \u5728\u9875\u9762\u53f3\u4e0a\u89d2\u53ef\u4ee5\u4e0b\u8f7d\u5de1\u68c0\u62a5\u544a\u6216\u5220\u9664\u8be5\u9879\u5de1\u68c0\u62a5\u544a\u3002

                          "},{"location":"end-user/kpanda/namespaces/createns.html","title":"\u547d\u540d\u7a7a\u95f4","text":"

                          \u547d\u540d\u7a7a\u95f4\u662f Kubernetes \u4e2d\u7528\u6765\u8fdb\u884c\u8d44\u6e90\u9694\u79bb\u7684\u4e00\u79cd\u62bd\u8c61\u3002\u4e00\u4e2a\u96c6\u7fa4\u4e0b\u53ef\u4ee5\u5305\u542b\u591a\u4e2a\u4e0d\u91cd\u540d\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6bcf\u4e2a\u547d\u540d\u7a7a\u95f4\u4e2d\u7684\u8d44\u6e90\u76f8\u4e92\u9694\u79bb\u3002\u6709\u5173\u547d\u540d\u7a7a\u95f4\u7684\u8be6\u7ec6\u4ecb\u7ecd\uff0c\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u3002

                          \u672c\u6587\u5c06\u4ecb\u7ecd\u547d\u540d\u7a7a\u95f4\u7684\u76f8\u5173\u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/namespaces/createns.html#_2","title":"\u521b\u5efa\u547d\u540d\u7a7a\u95f4","text":"

                          \u652f\u6301\u901a\u8fc7\u8868\u5355\u8f7b\u677e\u521b\u5efa\u547d\u540d\u7a7a\u95f4\uff0c\u4e5f\u652f\u6301\u901a\u8fc7\u7f16\u5199\u6216\u5bfc\u5165 YAML \u6587\u4ef6\u5feb\u901f\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u3002

                          Note

                          • \u5728\u521b\u5efa\u547d\u540d\u7a7a\u95f4\u4e4b\u524d\uff0c\u9700\u8981\u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\u3002
                          • \u96c6\u7fa4\u521d\u59cb\u5316\u540e\u901a\u5e38\u4f1a\u81ea\u52a8\u751f\u6210\u9ed8\u8ba4\u7684\u547d\u540d\u7a7a\u95f4 default \u3002\u4f46\u5bf9\u4e8e\u751f\u4ea7\u96c6\u7fa4\u800c\u8a00\uff0c\u4e3a\u4fbf\u4e8e\u7ba1\u7406\uff0c\u5efa\u8bae\u521b\u5efa\u5176\u4ed6\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u800c\u975e\u76f4\u63a5\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002
                          "},{"location":"end-user/kpanda/namespaces/createns.html#_3","title":"\u8868\u5355\u521b\u5efa","text":"
                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae\u3002

                          3. \u586b\u5199\u547d\u540d\u7a7a\u95f4\u7684\u540d\u79f0\uff0c\u914d\u7f6e\u5de5\u4f5c\u7a7a\u95f4\u548c\u6807\u7b7e\uff08\u53ef\u9009\u8bbe\u7f6e\uff09\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                            Info

                            • \u547d\u540d\u7a7a\u95f4\u7ed1\u5b9a\u5de5\u4f5c\u7a7a\u95f4\u4e4b\u540e\uff0c\u8be5\u547d\u540d\u7a7a\u95f4\u7684\u8d44\u6e90\u5c31\u4f1a\u5171\u4eab\u7ed9\u6240\u7ed1\u5b9a\u7684\u5de5\u4f5c\u7a7a\u95f4\u3002\u6709\u5173\u5de5\u4f5c\u7a7a\u95f4\u7684\u8be6\u7ec6\u8bf4\u660e\uff0c\u53ef\u53c2\u8003\u5de5\u4f5c\u7a7a\u95f4\u4e0e\u5c42\u7ea7\u3002

                            • \u547d\u540d\u7a7a\u95f4\u521b\u5efa\u5b8c\u6210\u540e\uff0c\u4ecd\u7136\u53ef\u4ee5\u7ed1\u5b9a/\u89e3\u7ed1\u5de5\u4f5c\u7a7a\u95f4\u3002

                          4. \u70b9\u51fb \u786e\u5b9a \uff0c\u5b8c\u6210\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3002\u5728\u547d\u540d\u7a7a\u95f4\u5217\u8868\u53f3\u4fa7\uff0c\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u4ece\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9\u67e5\u770b YAML\u3001\u4fee\u6539\u6807\u7b7e\u3001\u7ed1\u5b9a/\u89e3\u7ed1\u5de5\u4f5c\u7a7a\u95f4\u3001\u914d\u989d\u7ba1\u7406\u3001\u5220\u9664\u7b49\u66f4\u591a\u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/namespaces/createns.html#yaml","title":"YAML \u521b\u5efa","text":"
                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4fa7\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

                          3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u5185\u5bb9\uff0c\u6216\u8005\u4ece\u672c\u5730\u76f4\u63a5\u5bfc\u5165\u5df2\u6709\u7684 YAML \u6587\u4ef6\u3002

                            \u8f93\u5165 YAML \u5185\u5bb9\u540e\uff0c\u70b9\u51fb \u4e0b\u8f7d \u53ef\u4ee5\u5c06\u8be5 YAML \u6587\u4ef6\u4fdd\u5b58\u5230\u672c\u5730\u3002

                          4. \u6700\u540e\u5728\u5f39\u6846\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                          "},{"location":"end-user/kpanda/namespaces/exclusive.html","title":"\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9","text":"

                          \u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u6307\u5728 kubernetes \u96c6\u7fa4\u4e2d\uff0c\u901a\u8fc7\u6c61\u70b9\u548c\u6c61\u70b9\u5bb9\u5fcd\u7684\u65b9\u5f0f\u5b9e\u73b0\u7279\u5b9a\u547d\u540d\u7a7a\u95f4\u5bf9\u4e00\u4e2a\u6216\u591a\u4e2a\u8282\u70b9 CPU\u3001\u5185\u5b58\u7b49\u8d44\u6e90\u7684\u72ec\u4eab\u3002\u4e3a\u7279\u5b9a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u72ec\u4eab\u8282\u70b9\u540e\uff0c\u5176\u5b83\u975e\u6b64\u547d\u540d\u7a7a\u95f4\u7684\u5e94\u7528\u548c\u670d\u52a1\u5747\u4e0d\u80fd\u8fd0\u884c\u5728\u88ab\u72ec\u4eab\u7684\u8282\u70b9\u4e0a\u3002\u4f7f\u7528\u72ec\u4eab\u8282\u70b9\u53ef\u4ee5\u8ba9\u91cd\u8981\u5e94\u7528\u72ec\u4eab\u4e00\u90e8\u5206\u8ba1\u7b97\u8d44\u6e90\uff0c\u4ece\u800c\u548c\u5176\u4ed6\u5e94\u7528\u5b9e\u73b0\u7269\u7406\u9694\u79bb\u3002

                          Note

                          \u5728\u8282\u70b9\u88ab\u8bbe\u7f6e\u4e3a\u72ec\u4eab\u8282\u70b9\u524d\u5df2\u7ecf\u8fd0\u884c\u5728\u6b64\u8282\u70b9\u4e0a\u7684\u5e94\u7528\u548c\u670d\u52a1\u5c06\u4e0d\u4f1a\u53d7\u5f71\u54cd\uff0c\u4f9d\u7136\u4f1a\u6b63\u5e38\u8fd0\u884c\u5728\u8be5\u8282\u70b9\u4e0a\uff0c\u4ec5\u5f53\u8fd9\u4e9b Pod \u88ab\u5220\u9664\u6216\u91cd\u5efa\u65f6\uff0c\u624d\u4f1a\u8c03\u5ea6\u5230\u5176\u5b83\u975e\u72ec\u4eab\u8282\u70b9\u4e0a\u3002

                          "},{"location":"end-user/kpanda/namespaces/exclusive.html#_2","title":"\u51c6\u5907\u5de5\u4f5c","text":"

                          \u68c0\u67e5\u5f53\u524d\u96c6\u7fa4\u7684 kube-apiserver \u662f\u5426\u542f\u7528\u4e86 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668\u3002

                          \u4f7f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u529f\u80fd\u9700\u8981\u7528\u6237\u542f\u7528 kube-apiserver \u4e0a\u7684 PodNodeSelector \u548c PodTolerationRestriction \u4e24\u4e2a\u7279\u6027\u51c6\u5165\u63a7\u5236\u5668\uff08Admission Controllers\uff09\uff0c\u5173\u4e8e\u51c6\u5165\u63a7\u5236\u5668\u66f4\u591a\u8bf4\u660e\u8bf7\u53c2\u9605 kubernetes Admission Controllers Reference\u3002

                          \u60a8\u53ef\u4ee5\u524d\u5f80\u5f53\u524d\u96c6\u7fa4\u4e0b\u4efb\u610f\u4e00\u4e2a Master \u8282\u70b9\u4e0a\u68c0\u67e5 kube-apiserver.yaml \u6587\u4ef6\u5185\u662f\u5426\u542f\u7528\u4e86\u8fd9\u4e24\u4e2a\u7279\u6027\uff0c\u4e5f\u53ef\u4ee5\u5728 Master \u8282\u70b9\u4e0a\u6267\u884c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u5feb\u901f\u68c0\u67e5\uff1a

                          ```bash\n[root@g-master1 ~]# cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep  enable-admission-plugins\n\n# \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a\n- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction\n```\n
                          "},{"location":"end-user/kpanda/namespaces/exclusive.html#_3","title":"\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9","text":"

                          \u7531\u4e8e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u8fd0\u884c\u7740 kpanda\u3001ghippo\u3001insight \u7b49\u5e73\u53f0\u57fa\u7840\u7ec4\u4ef6\uff0c\u5728 Global \u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u5c06\u53ef\u80fd\u5bfc\u81f4\u5f53\u7cfb\u7edf\u7ec4\u4ef6\u91cd\u542f\u540e\uff0c\u7cfb\u7edf\u7ec4\u4ef6\u65e0\u6cd5\u8c03\u5ea6\u5230\u88ab\u72ec\u4eab\u7684\u8282\u70b9\u4e0a\uff0c\u5f71\u54cd\u7cfb\u7edf\u7684\u6574\u4f53\u9ad8\u53ef\u7528\u80fd\u529b\u3002\u56e0\u6b64\uff0c\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e0d\u63a8\u8350\u7528\u6237\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\u7279\u6027\u3002

                          \u5982\u679c\u60a8\u786e\u5b9e\u9700\u8981\u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u5f00\u542f\uff1a

                          1. \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684 kube-apiserver \u542f\u7528\u4e86 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668

                            Note

                            \u5982\u679c\u96c6\u7fa4\u5df2\u542f\u7528\u4e86\u4e0a\u8ff0\u7684\u4e24\u4e2a\u51c6\u5165\u63a7\u5236\u5668\uff0c\u8bf7\u8df3\u8fc7\u6b64\u6b65\uff0c\u76f4\u63a5\u524d\u5f80\u914d\u7f6e\u7cfb\u7edf\u7ec4\u4ef6\u5bb9\u5fcd\u3002

                            \u524d\u5f80\u5f53\u524d\u96c6\u7fa4\u4e0b\u4efb\u610f\u4e00\u4e2a Master \u8282\u70b9\u4e0a\u4fee\u6539 kube-apiserver.yaml \u914d\u7f6e\u6587\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u5728 Master \u8282\u70b9\u4e0a\u6267\u884c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\uff1a

                            [root@g-master1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml\n\n# \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a\napiVersion: v1\nkind: Pod\nmetadata:\n    ......\nspec:\ncontainers:\n- command:\n    - kube-apiserver\n    ......\n    - --default-not-ready-toleration-seconds=300\n    - --default-unreachable-toleration-seconds=300\n    - --enable-admission-plugins=NodeRestriction   #\u542f\u7528\u7684\u51c6\u5165\u63a7\u5236\u5668\u5217\u8868\n    - --enable-aggregator-routing=False\n    - --enable-bootstrap-token-auth=true\n    - --endpoint-reconciler-type=lease\n    - --etcd-cafile=/etc/kubernetes/ssl/etcd/ca.crt\n    ......\n

                            \u627e\u5230 --enable-admission-plugins \u53c2\u6570\uff0c\u52a0\u5165\uff08\u4ee5\u82f1\u6587\u9017\u53f7\u5206\u9694\u7684\uff09 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668\u3002\u53c2\u8003\u5982\u4e0b\uff1a

                            # \u52a0\u5165 __ ,PodNodeSelector,PodTolerationRestriction__ \n- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction \n
                          2. \u4e3a\u5e73\u53f0\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u5bb9\u5fcd\u6ce8\u89e3

                            \u5b8c\u6210\u51c6\u5165\u63a7\u5236\u5668\u7684\u5f00\u542f\u540e\uff0c\u60a8\u9700\u8981\u4e3a\u5e73\u53f0\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u5bb9\u5fcd\u6ce8\u89e3\uff0c\u4ee5\u4fdd\u8bc1\u5e73\u53f0\u7ec4\u4ef6\u7684\u9ad8\u53ef\u7528\u3002

                            \u76ee\u524d\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u7cfb\u7edf\u7ec4\u4ef6\u547d\u540d\u7a7a\u95f4\u5982\u4e0b\u8868\uff1a

                            \u547d\u540d\u7a7a\u95f4 \u6240\u5305\u542b\u7684\u7cfb\u7edf\u7ec4\u4ef6 kpanda-system kpanda hwameiStor-system hwameiStor istio-system istio metallb-system metallb cert-manager-system cert-manager contour-system contour kubean-system kubean ghippo-system ghippo kcoral-system kcoral kcollie-system kcollie insight-system insight\u3001insight-agent: ipavo-system ipavo kairship-system kairship karmada-system karmada amamba-system amamba\u3001jenkins skoala-system skoala mspider-system mspider mcamel-system mcamel-rabbitmq\u3001mcamel-elasticsearch\u3001mcamel-mysql\u3001mcamel-redis\u3001mcamel-kafka\u3001mcamel-minio\u3001mcamel-postgresql spidernet-system spidernet kangaroo-system kangaroo gmagpie-system gmagpie dowl-system dowl

                            \u68c0\u67e5\u5f53\u524d\u96c6\u7fa4\u4e2d\u6240\u6709\u547d\u540d\u7a7a\u95f4\u662f\u5426\u5b58\u5728\u4e0a\u8ff0\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5206\u522b\u4e3a\u6bcf\u4e2a\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u6ce8\u89e3\uff1a scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]' \u3002

                            kubectl annotate ns <namespace-name> scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \n\"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]'\n
                            \u8bf7\u786e\u4fdd\u5c06 <namespace-name> \u66ff\u6362\u4e3a\u8981\u6dfb\u52a0\u6ce8\u89e3\u7684\u5e73\u53f0\u547d\u540d\u7a7a\u95f4\u540d\u79f0\u3002

                          3. \u4f7f\u7528\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9

                            \u5f53\u60a8\u786e\u8ba4\u96c6\u7fa4 API \u670d\u52a1\u5668\u4e0a\u7684 PodNodeSelector \u548c PodTolerationRestriction \u4e24\u4e2a\u7279\u6027\u51c6\u5165\u63a7\u5236\u5668\u5df2\u7ecf\u5f00\u542f\u540e\uff0c\u8bf7\u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684 UI \u7ba1\u7406\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9\u4e86\u3002

                            1. \u5728\u96c6\u7fa4\u5217\u8868\u9875\u9762\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \u3002

                            2. \u70b9\u51fb\u547d\u540d\u7a7a\u95f4\u540d\u79f0\uff0c\u7136\u540e\u70b9\u51fb \u72ec\u4eab\u8282\u70b9 \u9875\u7b7e\uff0c\u5728\u4e0b\u65b9\u53f3\u4fa7\u70b9\u51fb \u6dfb\u52a0\u8282\u70b9 \u3002

                            3. \u5728\u9875\u9762\u5de6\u4fa7\u9009\u62e9\u8ba9\u8be5\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u54ea\u4e9b\u8282\u70b9\uff0c\u5728\u53f3\u4fa7\u53ef\u4ee5\u6e05\u7a7a\u6216\u5220\u9664\u67d0\u4e2a\u5df2\u9009\u8282\u70b9\uff0c\u6700\u540e\u5728\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                            4. \u53ef\u4ee5\u5728\u5217\u8868\u4e2d\u67e5\u770b\u6b64\u547d\u540d\u7a7a\u95f4\u7684\u5df2\u6709\u7684\u72ec\u4eab\u8282\u70b9\uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u53ef\u4ee5\u9009\u62e9 \u53d6\u6d88\u72ec\u4eab \u3002

                              \u53d6\u6d88\u72ec\u4eab\u4e4b\u540e\uff0c\u5176\u4ed6\u547d\u540d\u7a7a\u95f4\u4e0b\u7684 Pod \u4e5f\u53ef\u4ee5\u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u4e0a\u3002

                          "},{"location":"end-user/kpanda/namespaces/exclusive.html#_4","title":"\u5728 \u975e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9","text":"

                          \u5728 \u975e\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u542f\u7528\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u8282\u70b9\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u5f00\u542f\uff1a

                          1. \u4e3a\u5f53\u524d\u96c6\u7fa4\u7684 kube-apiserver \u542f\u7528\u4e86 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668

                            Note

                            \u5982\u679c\u96c6\u7fa4\u5df2\u542f\u7528\u4e86\u4e0a\u8ff0\u7684\u4e24\u4e2a\u51c6\u5165\u63a7\u5236\u5668\uff0c\u8bf7\u8df3\u8fc7\u6b64\u6b65\uff0c\u76f4\u63a5\u524d\u5f80\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9

                            \u524d\u5f80\u5f53\u524d\u96c6\u7fa4\u4e0b\u4efb\u610f\u4e00\u4e2a Master \u8282\u70b9\u4e0a\u4fee\u6539 kube-apiserver.yaml \u914d\u7f6e\u6587\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u5728 Master \u8282\u70b9\u4e0a\u6267\u884c\u6267\u884c\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\uff1a

                            [root@g-master1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml\n\n# \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a\napiVersion: v1\nkind: Pod\nmetadata:\n    ......\nspec:\ncontainers:\n- command:\n    - kube-apiserver\n    ......\n    - --default-not-ready-toleration-seconds=300\n    - --default-unreachable-toleration-seconds=300\n    - --enable-admission-plugins=NodeRestriction   #\u542f\u7528\u7684\u51c6\u5165\u63a7\u5236\u5668\u5217\u8868\n    - --enable-aggregator-routing=False\n    - --enable-bootstrap-token-auth=true\n    - --endpoint-reconciler-type=lease\n    - --etcd-cafile=/etc/kubernetes/ssl/etcd/ca.crt\n    ......\n

                            \u627e\u5230 --enable-admission-plugins \u53c2\u6570\uff0c\u52a0\u5165\uff08\u4ee5\u82f1\u6587\u9017\u53f7\u5206\u9694\u7684\uff09 PodNodeSelector \u548c PodTolerationRestriction \u51c6\u5165\u63a7\u5236\u5668\u3002\u53c2\u8003\u5982\u4e0b\uff1a

                            # \u52a0\u5165 __ ,PodNodeSelector,PodTolerationRestriction__ \n- --enable-admission-plugins=NodeRestriction,PodNodeSelector,PodTolerationRestriction \n
                          2. \u4f7f\u7528\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9

                            \u5f53\u60a8\u786e\u8ba4\u96c6\u7fa4 API \u670d\u52a1\u5668\u4e0a\u7684 PodNodeSelector \u548c PodTolerationRestriction \u4e24\u4e2a\u7279\u6027\u51c6\u5165\u63a7\u5236\u5668\u5df2\u7ecf\u5f00\u542f\u540e\uff0c\u8bf7\u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4f7f\u7528\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684 UI \u7ba1\u7406\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u8bbe\u7f6e\u72ec\u4eab\u8282\u70b9\u4e86\u3002

                            1. \u5728\u96c6\u7fa4\u5217\u8868\u9875\u9762\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u547d\u540d\u7a7a\u95f4 \u3002

                            2. \u70b9\u51fb\u547d\u540d\u7a7a\u95f4\u540d\u79f0\uff0c\u7136\u540e\u70b9\u51fb \u72ec\u4eab\u8282\u70b9 \u9875\u7b7e\uff0c\u5728\u4e0b\u65b9\u53f3\u4fa7\u70b9\u51fb \u6dfb\u52a0\u8282\u70b9 \u3002

                            3. \u5728\u9875\u9762\u5de6\u4fa7\u9009\u62e9\u8ba9\u8be5\u547d\u540d\u7a7a\u95f4\u72ec\u4eab\u54ea\u4e9b\u8282\u70b9\uff0c\u5728\u53f3\u4fa7\u53ef\u4ee5\u6e05\u7a7a\u6216\u5220\u9664\u67d0\u4e2a\u5df2\u9009\u8282\u70b9\uff0c\u6700\u540e\u5728\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                            4. \u53ef\u4ee5\u5728\u5217\u8868\u4e2d\u67e5\u770b\u6b64\u547d\u540d\u7a7a\u95f4\u7684\u5df2\u6709\u7684\u72ec\u4eab\u8282\u70b9\uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u53ef\u4ee5\u9009\u62e9 \u53d6\u6d88\u72ec\u4eab \u3002

                              \u53d6\u6d88\u72ec\u4eab\u4e4b\u540e\uff0c\u5176\u4ed6\u547d\u540d\u7a7a\u95f4\u4e0b\u7684 Pod \u4e5f\u53ef\u4ee5\u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u4e0a\u3002

                          3. \u4e3a\u9700\u8981\u9ad8\u53ef\u7528\u7684\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u5bb9\u5fcd\u6ce8\u89e3\uff08\u53ef\u9009\uff09

                            \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u9700\u8981\u9ad8\u53ef\u7528\u7684\u7ec4\u4ef6\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u6dfb\u52a0\u6ce8\u89e3\uff1ascheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]'\u3002

                            kubectl annotate ns <namespace-name> scheduler.alpha.kubernetes.io/defaultTolerations: '[{\"operator\": \"Exists\", \"effect\": \n\"NoSchedule\", \"key\": \"ExclusiveNamespace\"}]'\n

                            \u8bf7\u786e\u4fdd\u5c06 <namespace-name> \u66ff\u6362\u4e3a\u8981\u6dfb\u52a0\u6ce8\u89e3\u7684\u5e73\u53f0\u547d\u540d\u7a7a\u95f4\u540d\u79f0\u3002

                          "},{"location":"end-user/kpanda/namespaces/podsecurity.html","title":"\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565","text":"

                          \u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565\u6307\u5728 kubernetes \u96c6\u7fa4\u4e2d\uff0c\u901a\u8fc7\u4e3a\u6307\u5b9a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u4e0d\u540c\u7684\u7b49\u7ea7\u548c\u6a21\u5f0f\uff0c\u5b9e\u73b0\u5728\u5b89\u5168\u7684\u5404\u4e2a\u65b9\u9762\u63a7\u5236 Pod \u7684\u884c\u4e3a\uff0c\u53ea\u6709\u6ee1\u8db3\u4e00\u5b9a\u7684\u6761\u4ef6\u7684 Pod \u624d\u4f1a\u88ab\u7cfb\u7edf\u63a5\u53d7\u3002\u5b83\u8bbe\u7f6e\u4e09\u4e2a\u7b49\u7ea7\u548c\u4e09\u79cd\u6a21\u5f0f\uff0c\u7528\u6237\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u9009\u62e9\u66f4\u52a0\u5408\u9002\u7684\u65b9\u6848\u6765\u8bbe\u7f6e\u9650\u5236\u7b56\u7565\u3002

                          Note

                          \u4e00\u6761\u5b89\u5168\u6a21\u5f0f\u4ec5\u80fd\u914d\u7f6e\u4e00\u6761\u5b89\u5168\u7b56\u7565\u3002\u540c\u65f6\u8bf7\u8c28\u614e\u4e3a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e enforce \u7684\u5b89\u5168\u6a21\u5f0f\uff0c\u8fdd\u53cd\u540e\u5c06\u4f1a\u5bfc\u81f4 Pod \u65e0\u6cd5\u521b\u5efa\u3002

                          \u672c\u8282\u5c06\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u754c\u9762\u4e3a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565\u3002

                          "},{"location":"end-user/kpanda/namespaces/podsecurity.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u96c6\u7fa4\u7684\u7248\u672c\u9700\u8981\u5728 v1.22 \u4ee5\u4e0a\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Admin \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          "},{"location":"end-user/kpanda/namespaces/podsecurity.html#_3","title":"\u4e3a\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565","text":"
                          1. \u9009\u62e9\u9700\u8981\u914d\u7f6e\u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u8fdb\u5165\u8be6\u60c5\u9875\u3002\u5728 \u5bb9\u5668\u7ec4\u5b89\u5168\u7b56\u7565 \u9875\u9762\u70b9\u51fb \u914d\u7f6e\u7b56\u7565 \uff0c\u8fdb\u5165\u914d\u7f6e\u9875\u3002

                          2. \u5728\u914d\u7f6e\u9875\u70b9\u51fb \u6dfb\u52a0\u7b56\u7565 \uff0c\u5219\u4f1a\u51fa\u73b0\u4e00\u6761\u7b56\u7565\uff0c\u5305\u62ec\u5b89\u5168\u7ea7\u522b\u548c\u5b89\u5168\u6a21\u5f0f\uff0c\u4ee5\u4e0b\u662f\u5bf9\u5b89\u5168\u7ea7\u522b\u548c\u5b89\u5168\u7b56\u7565\u7684\u8be6\u7ec6\u4ecb\u7ecd\u3002

                            \u5b89\u5168\u7ea7\u522b \u63cf\u8ff0 Privileged \u4e0d\u53d7\u9650\u5236\u7684\u7b56\u7565\uff0c\u63d0\u4f9b\u6700\u5927\u53ef\u80fd\u8303\u56f4\u7684\u6743\u9650\u8bb8\u53ef\u3002\u6b64\u7b56\u7565\u5141\u8bb8\u5df2\u77e5\u7684\u7279\u6743\u63d0\u5347\u3002 Baseline \u9650\u5236\u6027\u6700\u5f31\u7684\u7b56\u7565\uff0c\u7981\u6b62\u5df2\u77e5\u7684\u7b56\u7565\u63d0\u5347\u3002\u5141\u8bb8\u4f7f\u7528\u9ed8\u8ba4\u7684\uff08\u89c4\u5b9a\u6700\u5c11\uff09Pod \u914d\u7f6e\u3002 Restricted \u9650\u5236\u6027\u975e\u5e38\u5f3a\u7684\u7b56\u7565\uff0c\u9075\u5faa\u5f53\u524d\u7684\u4fdd\u62a4 Pod \u7684\u6700\u4f73\u5b9e\u8df5\u3002 \u5b89\u5168\u6a21\u5f0f \u63cf\u8ff0 Audit \u8fdd\u53cd\u6307\u5b9a\u7b56\u7565\u4f1a\u5728\u5ba1\u8ba1\u65e5\u5fd7\u4e2d\u6dfb\u52a0\u65b0\u7684\u5ba1\u8ba1\u4e8b\u4ef6\uff0cPod \u53ef\u4ee5\u88ab\u521b\u5efa\u3002 Warn \u8fdd\u53cd\u6307\u5b9a\u7b56\u7565\u4f1a\u8fd4\u56de\u7528\u6237\u53ef\u89c1\u7684\u544a\u8b66\u4fe1\u606f\uff0cPod \u53ef\u4ee5\u88ab\u521b\u5efa\u3002 Enforce \u8fdd\u53cd\u6307\u5b9a\u7b56\u7565\u4f1a\u5bfc\u81f4 Pod \u65e0\u6cd5\u521b\u5efa\u3002

                          3. \u4e0d\u540c\u7684\u5b89\u5168\u7ea7\u522b\u5bf9\u5e94\u4e0d\u540c\u7684\u68c0\u67e5\u9879\uff0c\u82e5\u60a8\u4e0d\u77e5\u9053\u8be5\u5982\u4f55\u4e3a\u60a8\u7684\u547d\u540d\u7a7a\u95f4\u914d\u7f6e\uff0c\u53ef\u4ee5\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u7b56\u7565\u914d\u7f6e\u9879\u8bf4\u660e \u67e5\u770b\u8be6\u7ec6\u4fe1\u606f\u3002

                          4. \u70b9\u51fb\u786e\u5b9a\uff0c\u82e5\u521b\u5efa\u6210\u529f\uff0c\u5219\u9875\u9762\u4e0a\u5c06\u51fa\u73b0\u60a8\u914d\u7f6e\u7684\u5b89\u5168\u7b56\u7565\u3002

                          5. \u70b9\u51fb \u2507 \u8fd8\u53ef\u4ee5\u7f16\u8f91\u6216\u8005\u5220\u9664\u60a8\u914d\u7f6e\u7684\u5b89\u5168\u7b56\u7565\u3002

                          "},{"location":"end-user/kpanda/network/create-ingress.html","title":"\u521b\u5efa\u8def\u7531\uff08Ingress\uff09","text":"

                          \u5728 Kubernetes \u96c6\u7fa4\u4e2d\uff0cIngress \u516c\u5f00\u4ece\u96c6\u7fa4\u5916\u90e8\u5230\u96c6\u7fa4\u5185\u670d\u52a1\u7684 HTTP \u548c HTTPS \u8def\u7531\u3002 \u6d41\u91cf\u8def\u7531\u7531 Ingress \u8d44\u6e90\u4e0a\u5b9a\u4e49\u7684\u89c4\u5219\u63a7\u5236\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u5c06\u6240\u6709\u6d41\u91cf\u90fd\u53d1\u9001\u5230\u540c\u4e00 Service \u7684\u7b80\u5355 Ingress \u793a\u4f8b\uff1a

                          Ingress \u662f\u5bf9\u96c6\u7fa4\u4e2d\u670d\u52a1\u7684\u5916\u90e8\u8bbf\u95ee\u8fdb\u884c\u7ba1\u7406\u7684 API \u5bf9\u8c61\uff0c\u5178\u578b\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f HTTP\u3002Ingress \u53ef\u4ee5\u63d0\u4f9b\u8d1f\u8f7d\u5747\u8861\u3001SSL \u7ec8\u7ed3\u548c\u57fa\u4e8e\u540d\u79f0\u7684\u865a\u62df\u6258\u7ba1\u3002

                          "},{"location":"end-user/kpanda/network/create-ingress.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002
                          • \u5df2\u7ecf\u5b8c\u6210 Ingress \u5b9e\u4f8b\u7684\u521b\u5efa\uff0c\u5df2\u90e8\u7f72\u5e94\u7528\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5e76\u4e14\u5df2\u521b\u5efa\u5bf9\u5e94 Service
                          • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002
                          "},{"location":"end-user/kpanda/network/create-ingress.html#_2","title":"\u521b\u5efa\u8def\u7531","text":"
                          1. \u4ee5 NS Editor \u7528\u6237\u6210\u529f\u767b\u5f55\u540e\uff0c\u70b9\u51fb\u5de6\u4e0a\u89d2\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u3002\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u8def\u7531 \u8fdb\u5165\u670d\u52a1\u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u8def\u7531 \u6309\u94ae\u3002

                            Note

                            \u4e5f\u53ef\u4ee5\u901a\u8fc7 YAML \u521b\u5efa \u4e00\u4e2a\u8def\u7531\u3002

                          3. \u6253\u5f00 \u521b\u5efa\u8def\u7531 \u9875\u9762\uff0c\u8fdb\u884c\u914d\u7f6e\u3002\u53ef\u9009\u62e9\u4e24\u79cd\u534f\u8bae\u7c7b\u578b\uff0c\u53c2\u8003\u4ee5\u4e0b\u4e24\u4e2a\u53c2\u6570\u8868\u8fdb\u884c\u914d\u7f6e\u3002

                          "},{"location":"end-user/kpanda/network/create-ingress.html#http","title":"\u521b\u5efa HTTP \u534f\u8bae\u8def\u7531","text":"

                          \u8f93\u5165\u5982\u4e0b\u53c2\u6570\uff1a

                          • \u8def\u7531\u540d\u79f0 \uff1a\u5fc5\u586b\uff0c\u8f93\u5165\u65b0\u5efa\u8def\u7531\u7684\u540d\u79f0\u3002
                          • \u547d\u540d\u7a7a\u95f4 \uff1a\u5fc5\u586b\uff0c\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002
                          • \u8bbe\u7f6e\u8def\u7531\u89c4\u5219 \uff1a
                            • \u57df\u540d \uff1a\u5fc5\u586b\uff0c\u4f7f\u7528\u57df\u540d\u5bf9\u5916\u63d0\u4f9b\u8bbf\u95ee\u670d\u52a1\u3002\u9ed8\u8ba4\u4e3a\u96c6\u7fa4\u7684\u57df\u540d\u3002
                            • \u534f\u8bae \uff1a\u5fc5\u586b\uff0c\u6307\u6388\u6743\u5165\u7ad9\u5230\u8fbe\u96c6\u7fa4\u670d\u52a1\u7684\u534f\u8bae\uff0c\u652f\u6301 HTTP \uff08\u4e0d\u9700\u8981\u8eab\u4efd\u8ba4\u8bc1\uff09\u6216 HTTPS\uff08\u9700\u9700\u8981\u914d\u7f6e\u8eab\u4efd\u8ba4\u8bc1\uff09 \u534f\u8bae\u3002 \u8fd9\u91cc\u9009\u62e9 HTTP \u534f\u8bae\u7684\u8def\u7531\u3002
                            • \u8f6c\u53d1\u7b56\u7565 \uff1a\u9009\u586b\uff0c\u6307\u5b9a Ingress \u7684\u8bbf\u95ee\u7b56\u7565
                            • \u8def\u5f84 \uff1a\u6307\u5b9a\u670d\u52a1\u8bbf\u95ee\u7684URL\u8def\u5f84\uff0c\u9ed8\u8ba4\u4e3a\u6839\u8def\u5f84
                            • \u76ee\u6807\u670d\u52a1 \uff1a\u8fdb\u884c\u8def\u7531\u7684\u670d\u52a1\u540d\u79f0
                            • \u76ee\u6807\u670d\u52a1\u7aef\u53e3 \uff1a\u670d\u52a1\u5bf9\u5916\u66b4\u9732\u7684\u7aef\u53e3
                          • \u8d1f\u8f7d\u5747\u8861\u5668\u7c7b\u578b \uff1a\u5fc5\u586b\uff0cIngress \u5b9e\u4f8b\u7684\u4f7f\u7528\u8303\u56f4
                            • \u5e73\u53f0\u7ea7\u8d1f\u8f7d\u5747\u8861\u5668 \uff1a\u540c\u4e00\u4e2a\u96c6\u7fa4\u5185\uff0c\u5171\u4eab\u540c\u4e00\u4e2a Ingress \u5b9e\u4f8b\uff0c\u5176\u4e2d Pod \u90fd\u53ef\u4ee5\u63a5\u6536\u5230\u7531\u8be5\u8d1f\u8f7d\u5747\u8861\u5206\u53d1\u7684\u8bf7\u6c42
                            • \u79df\u6237\u7ea7\u8d1f\u8f7d\u5747\u8861\u5668 \uff1a\u79df\u6237\u8d1f\u8f7d\u5747\u8861\u5668\uff0cIngress \u5b9e\u4f8b\u72ec\u5c5e\u4e8e\u5f53\u524d\u547d\u540d\u7a7a\uff0c\u6216\u8005\u72ec\u5c5e\u4e8e\u67d0\u4e00\u5de5\u4f5c\u7a7a\u95f4\uff0c \u5e76\u4e14\u8bbe\u7f6e\u7684\u5de5\u4f5c\u7a7a\u95f4\u4e2d\u5305\u542b\u5f53\u524d\u547d\u540d\u7a7a\u95f4\uff0c\u5176\u4e2d Pod \u90fd\u53ef\u4ee5\u63a5\u6536\u5230\u7531\u8be5\u8d1f\u8f7d\u5747\u8861\u5206\u53d1\u7684\u8bf7\u6c42
                          • Ingress Class \uff1a\u9009\u586b\uff0c\u9009\u62e9\u5bf9\u5e94\u7684 Ingress \u5b9e\u4f8b\uff0c\u9009\u62e9\u540e\u5c06\u6d41\u91cf\u5bfc\u5165\u5230\u6307\u5b9a\u7684 Ingress \u5b9e\u4f8b\u3002
                            • \u4e3a None \u65f6\u4f7f\u7528\u9ed8\u8ba4\u7684 DefaultClass\uff0c\u8bf7\u5728\u521b\u5efa Ingress \u5b9e\u4f8b\u65f6\u8bbe\u7f6e DefaultClass\uff0c \u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003 Ingress Class
                            • \u82e5\u9009\u62e9\u5176\u4ed6\u5b9e\u4f8b\uff08\u5982 ngnix \uff09\uff0c\u5219\u4f1a\u51fa\u73b0\u9ad8\u7ea7\u914d\u7f6e\uff0c\u53ef\u8bbe\u7f6e \u4f1a\u8bdd\u4fdd\u6301 \u3001 \u8def\u5f84\u91cd\u5199 \u3001 \u91cd\u5b9a\u5411 \u548c \u6d41\u91cf\u5206\u53d1 \u3002
                          • \u4f1a\u8bdd\u4fdd\u6301 \uff1a\u9009\u586b\uff0c\u4f1a\u8bdd\u4fdd\u6301\u5206\u4e3a \u4e09\u79cd\u7c7b\u578b\uff1a L4 \u6e90\u5730\u5740\u54c8\u5e0c \u3001 Cookie Key \u3001 L7 Header Name \uff0c\u5f00\u542f\u540e\u6839\u636e\u5bf9\u5e94\u89c4\u5219\u8fdb\u884c\u4f1a\u8bdd\u4fdd\u6301\u3002
                            • L4 \u6e90\u5730\u5740\u54c8\u5e0c \uff1a\u5f00\u542f\u540e\u9ed8\u8ba4\u5728 Annotation \u4e2d\u52a0\u5165\u5982\u4e0b\u6807\u7b7e\uff1a nginx.ingress.kubernetes.io/upstream-hash-by: \"$binary_remote_addr\"
                            • Cookie Key \uff1a\u5f00\u542f\u540e\u6765\u81ea\u7279\u5b9a\u5ba2\u6237\u7aef\u7684\u8fde\u63a5\u5c06\u4f20\u9012\u81f3\u76f8\u540c Pod\uff0c\u5f00\u542f\u540e \u9ed8\u8ba4\u5728 Annotation \u4e2d\u589e\u52a0\u5982\u4e0b\u53c2\u6570\uff1a nginx.ingress.kubernetes.io/affinity: \"cookie\"\u3002nginx.ingress.kubernetes.io/affinity-mode: persistent
                            • L7 Header Name \uff1a\u5f00\u542f\u540e\u9ed8\u8ba4\u5728 Annotation \u4e2d\u52a0\u5165\u5982\u4e0b\u6807\u7b7e\uff1a nginx.ingress.kubernetes.io/upstream-hash-by: \"$http_x_forwarded_for\"
                          • \u8def\u5f84\u91cd\u5199 \uff1a\u9009\u586b\uff0c rewrite-target \uff0c\u67d0\u4e9b\u573a\u666f\u4e2d\u540e\u7aef\u670d\u52a1\u66b4\u9732\u7684URL\u4e0eIngress\u89c4\u5219\u4e2d\u6307\u5b9a\u7684\u8def\u5f84\u4e0d\u540c\uff0c\u5982\u679c\u4e0d\u8fdb\u884cURL\u91cd\u5199\u914d\u7f6e\uff0c\u8bbf\u95ee\u4f1a\u51fa\u73b0\u9519\u8bef\u3002
                          • \u91cd\u5b9a\u5411 \uff1a\u9009\u586b\uff0c permanent-redirect \uff0c\u6c38\u4e45\u91cd\u5b9a\u5411\uff0c\u8f93\u5165\u91cd\u5199\u8def\u5f84\u540e\uff0c\u8bbf\u95ee\u8def\u5f84\u91cd\u5b9a\u5411\u81f3\u8bbe\u7f6e\u7684\u5730\u5740\u3002
                          • \u6d41\u91cf\u5206\u53d1 \uff1a\u9009\u586b\uff0c\u5f00\u542f\u540e\u5e76\u8bbe\u7f6e\u540e\uff0c\u6839\u636e\u8bbe\u5b9a\u6761\u4ef6\u8fdb\u884c\u6d41\u91cf\u5206\u53d1\u3002
                            • \u57fa\u4e8e\u6743\u91cd \uff1a\u8bbe\u5b9a\u6743\u91cd\u540e\uff0c\u5728\u521b\u5efa\u7684 Ingress \u6dfb\u52a0\u5982\u4e0b Annotation\uff1a nginx.ingress.kubernetes.io/canary-weight: \"10\"
                            • \u57fa\u4e8e Cookie \uff1a\u8bbe\u5b9a Cookie \u89c4\u5219\u540e\uff0c\u6d41\u91cf\u6839\u636e\u8bbe\u5b9a\u7684 Cookie \u6761\u4ef6\u8fdb\u884c\u6d41\u91cf\u5206\u53d1
                            • \u57fa\u4e8e Header \uff1a \u8bbe\u5b9a Header \u89c4\u5219\u540e\uff0c\u6d41\u91cf\u6839\u636e\u8bbe\u5b9a\u7684 Header \u6761\u4ef6\u8fdb\u884c\u6d41\u91cf\u5206\u53d1
                          • \u6807\u7b7e \uff1a\u9009\u586b\uff0c\u4e3a\u8def\u7531\u6dfb\u52a0\u6807\u7b7e
                          • \u6ce8\u89e3 \uff1a\u9009\u586b\uff0c\u4e3a\u8def\u7531\u6dfb\u52a0\u6ce8\u89e3
                          "},{"location":"end-user/kpanda/network/create-ingress.html#https","title":"\u521b\u5efa HTTPS \u534f\u8bae\u8def\u7531","text":"

                          \u8f93\u5165\u5982\u4e0b\u53c2\u6570\uff1a

                          Note

                          \u6ce8\u610f\uff1a\u4e0e HTTP \u534f\u8bae \u8bbe\u7f6e\u8def\u7531\u89c4\u5219 \u4e0d\u540c\uff0c\u589e\u52a0\u5bc6\u94a5\u9009\u62e9\u8bc1\u4e66\uff0c\u5176\u4ed6\u57fa\u672c\u4e00\u81f4\u3002

                          • \u534f\u8bae \uff1a\u5fc5\u586b\u6307\u6388\u6743\u5165\u7ad9\u5230\u8fbe\u96c6\u7fa4\u670d\u52a1\u7684\u534f\u8bae\uff0c\u652f\u6301 HTTP \uff08\u4e0d\u9700\u8981\u8eab\u4efd\u8ba4\u8bc1\uff09\u6216 HTTPS\uff08\u9700\u9700\u8981\u914d\u7f6e\u8eab\u4efd\u8ba4\u8bc1\uff09 \u534f\u8bae\u3002\u8fd9\u91cc\u9009\u62e9 HTTPS \u534f\u8bae\u7684\u8def\u7531\u3002
                          • \u5bc6\u94a5 \uff1a\u5fc5\u586b\uff0cHttps TLS \u8bc1\u4e66\uff0c\u521b\u5efa\u79d8\u94a5\u3002
                          "},{"location":"end-user/kpanda/network/create-ingress.html#_3","title":"\u5b8c\u6210\u8def\u7531\u521b\u5efa","text":"

                          \u914d\u7f6e\u5b8c\u6240\u6709\u53c2\u6570\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u8def\u7531\u5217\u8868\u3002\u5728\u5217\u8868\u53f3\u4fa7\uff0c\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u4fee\u6539\u6216\u5220\u9664\u6240\u9009\u8def\u7531\u3002

                          "},{"location":"end-user/kpanda/network/create-services.html","title":"\u521b\u5efa\u670d\u52a1\uff08Service\uff09","text":"

                          \u5728 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u6bcf\u4e2a Pod \u90fd\u6709\u4e00\u4e2a\u5185\u90e8\u72ec\u7acb\u7684 IP \u5730\u5740\uff0c\u4f46\u662f\u5de5\u4f5c\u8d1f\u8f7d\u4e2d\u7684 Pod \u53ef\u80fd\u4f1a\u88ab\u968f\u65f6\u521b\u5efa\u548c\u5220\u9664\uff0c\u76f4\u63a5\u4f7f\u7528 Pod IP \u5730\u5740\u5e76\u4e0d\u80fd\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002

                          \u8fd9\u5c31\u9700\u8981\u521b\u5efa\u670d\u52a1\uff0c\u901a\u8fc7\u670d\u52a1\u60a8\u4f1a\u83b7\u5f97\u4e00\u4e2a\u56fa\u5b9a\u7684 IP \u5730\u5740\uff0c\u4ece\u800c\u5b9e\u73b0\u5de5\u4f5c\u8d1f\u8f7d\u524d\u7aef\u548c\u540e\u7aef\u7684\u89e3\u8026\uff0c\u8ba9\u5916\u90e8\u7528\u6237\u80fd\u591f\u8bbf\u95ee\u670d\u52a1\u3002\u540c\u65f6\uff0c\u670d\u52a1\u8fd8\u63d0\u4f9b\u4e86\u8d1f\u8f7d\u5747\u8861\uff08LoadBalancer\uff09\u529f\u80fd\uff0c\u4f7f\u7528\u6237\u80fd\u4ece\u516c\u7f51\u8bbf\u95ee\u5230\u5de5\u4f5c\u8d1f\u8f7d\u3002

                          "},{"location":"end-user/kpanda/network/create-services.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u5c06\u7528\u6237\u6388\u6743\u4e3a NS Editor \u89d2\u8272 \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

                          "},{"location":"end-user/kpanda/network/create-services.html#_2","title":"\u521b\u5efa\u670d\u52a1","text":"
                          1. \u4ee5 NS Editor \u7528\u6237\u6210\u529f\u767b\u5f55\u540e\uff0c\u70b9\u51fb\u5de6\u4e0a\u89d2\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u3002\u5728\u96c6\u7fa4\u5217\u8868\u4e2d\uff0c\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u4e2d\uff0c\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u670d\u52a1 \u8fdb\u5165\u670d\u52a1\u5217\u8868\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2 \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

                            Tip

                            \u4e5f\u53ef\u4ee5\u901a\u8fc7 YAML \u521b\u5efa \u4e00\u4e2a\u670d\u52a1\u3002

                          3. \u6253\u5f00 \u521b\u5efa\u670d\u52a1 \u9875\u9762\uff0c\u9009\u62e9\u4e00\u79cd\u8bbf\u95ee\u7c7b\u578b\uff0c\u53c2\u8003\u4ee5\u4e0b\u51e0\u4e2a\u53c2\u6570\u8868\u8fdb\u884c\u914d\u7f6e\u3002

                          "},{"location":"end-user/kpanda/network/create-services.html#clusterip","title":"\u521b\u5efa ClusterIP \u670d\u52a1","text":"

                          \u70b9\u9009 \u96c6\u7fa4\u5185\u8bbf\u95ee\uff08ClusterIP\uff09 \uff0c\u8fd9\u662f\u6307\u901a\u8fc7\u96c6\u7fa4\u7684\u5185\u90e8 IP \u66b4\u9732\u670d\u52a1\uff0c\u9009\u62e9\u6b64\u9879\u7684\u670d\u52a1\u53ea\u80fd\u5728\u96c6\u7fa4\u5185\u90e8\u8bbf\u95ee\u3002\u8fd9\u662f\u9ed8\u8ba4\u7684\u670d\u52a1\u7c7b\u578b\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u96c6\u7fa4\u5185\u8bbf\u95ee\uff08ClusterIP\uff09\u3002 ClusterIP \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u6807\u7b7e\u9009\u62e9\u5668 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6dfb\u52a0\u6807\u7b7e\uff0cService \u6839\u636e\u6807\u7b7e\u9009\u62e9 Pod\uff0c\u586b\u5199\u540e\u70b9\u51fb\u201c\u6dfb\u52a0\u201d\u3002\u4e5f\u53ef\u4ee5\u5f15\u7528\u5df2\u6709\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6807\u7b7e\uff0c\u70b9\u51fb \u5f15\u7528\u8d1f\u8f7d\u6807\u7b7e \uff0c\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\u9009\u62e9\u8d1f\u8f7d\uff0c\u7cfb\u7edf\u4f1a\u9ed8\u8ba4\u5c06\u6240\u9009\u7684\u8d1f\u8f7d\u6807\u7b7e\u4f5c\u4e3a\u9009\u62e9\u5668\u3002 app:job01 \u7aef\u53e3\u914d\u7f6e \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u534f\u8bae\u7aef\u53e3\uff0c\u9700\u8981\u5148\u9009\u62e9\u7aef\u53e3\u534f\u8bae\u7c7b\u578b\uff0c\u76ee\u524d\u652f\u6301 TCP\u3001UDP \u4e24\u79cd\u4f20\u8f93\u534f\u8bae\u3002\u7aef\u53e3\u540d\u79f0\uff1a\u8f93\u5165\u81ea\u5b9a\u4e49\u7684\u7aef\u53e3\u7684\u540d\u79f0\u3002\u670d\u52a1\u7aef\u53e3\uff08port\uff09\uff1aPod \u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u7684\u8bbf\u95ee\u7aef\u53e3\u3002\u5bb9\u5668\u7aef\u53e3\uff08targetport\uff09\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u9645\u76d1\u542c\u7684\u5bb9\u5668\u7aef\u53e3\uff0c\u7528\u6765\u5bf9\u96c6\u7fa4\u5185\u66b4\u9732\u670d\u52a1\u3002 \u4f1a\u8bdd\u4fdd\u6301 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u540e\uff0c\u76f8\u540c\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u5c06\u8f6c\u53d1\u81f3\u540c\u4e00 Pod \u5f00\u542f \u4f1a\u8bdd\u4fdd\u6301\u6700\u5927\u65f6\u957f \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u4f1a\u8bdd\u4fdd\u6301\u540e\uff0c\u4fdd\u6301\u7684\u6700\u5927\u65f6\u957f\uff0c\u9ed8\u8ba4\u4e3a 30 \u79d2 30 \u79d2 \u6ce8\u89e3 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u6ce8\u89e3"},{"location":"end-user/kpanda/network/create-services.html#nodeport","title":"\u521b\u5efa NodePort \u670d\u52a1","text":"

                          \u70b9\u9009 \u8282\u70b9\u8bbf\u95ee\uff08NodePort\uff09 \uff0c\u8fd9\u662f\u6307\u901a\u8fc7\u6bcf\u4e2a\u8282\u70b9\u4e0a\u7684 IP \u548c\u9759\u6001\u7aef\u53e3\uff08 NodePort \uff09\u66b4\u9732\u670d\u52a1\u3002 NodePort \u670d\u52a1\u4f1a\u8def\u7531\u5230\u81ea\u52a8\u521b\u5efa\u7684 ClusterIP \u670d\u52a1\u3002\u901a\u8fc7\u8bf7\u6c42 <\u8282\u70b9 IP>:<\u8282\u70b9\u7aef\u53e3> \uff0c\u60a8\u53ef\u4ee5\u4ece\u96c6\u7fa4\u7684\u5916\u90e8\u8bbf\u95ee\u4e00\u4e2a NodePort \u670d\u52a1\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u8282\u70b9\u8bbf\u95ee\uff08NodePort\uff09\u3002 NodePort \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u6807\u7b7e\u9009\u62e9\u5668 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6dfb\u52a0\u6807\u7b7e\uff0cService \u6839\u636e\u6807\u7b7e\u9009\u62e9 Pod\uff0c\u586b\u5199\u540e\u70b9\u51fb\u201c\u6dfb\u52a0\u201d\u3002\u4e5f\u53ef\u4ee5\u5f15\u7528\u5df2\u6709\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6807\u7b7e\uff0c\u70b9\u51fb \u5f15\u7528\u8d1f\u8f7d\u6807\u7b7e \uff0c\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\u9009\u62e9\u8d1f\u8f7d\uff0c\u7cfb\u7edf\u4f1a\u9ed8\u8ba4\u5c06\u6240\u9009\u7684\u8d1f\u8f7d\u6807\u7b7e\u4f5c\u4e3a\u9009\u62e9\u5668\u3002 \u7aef\u53e3\u914d\u7f6e \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u534f\u8bae\u7aef\u53e3\uff0c\u9700\u8981\u5148\u9009\u62e9\u7aef\u53e3\u534f\u8bae\u7c7b\u578b\uff0c\u76ee\u524d\u652f\u6301 TCP\u3001UDP \u4e24\u79cd\u4f20\u8f93\u534f\u8bae\u3002\u7aef\u53e3\u540d\u79f0\uff1a\u8f93\u5165\u81ea\u5b9a\u4e49\u7684\u7aef\u53e3\u7684\u540d\u79f0\u3002\u670d\u52a1\u7aef\u53e3\uff08port\uff09\uff1aPod \u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u7684\u8bbf\u95ee\u7aef\u53e3\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u670d\u52a1\u7aef\u53e3\u88ab\u8bbe\u7f6e\u4e3a\u4e0e\u5bb9\u5668\u7aef\u53e3\u5b57\u6bb5\u76f8\u540c\u7684\u503c\u3002\u5bb9\u5668\u7aef\u53e3\uff08targetport\uff09\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u9645\u76d1\u542c\u7684\u5bb9\u5668\u7aef\u53e3\u3002\u8282\u70b9\u7aef\u53e3\uff08nodeport\uff09\uff1a\u8282\u70b9\u7684\u7aef\u53e3\uff0c\u63a5\u6536\u6765\u81ea ClusterIP \u4f20\u8f93\u7684\u6d41\u91cf\u3002\u7528\u6765\u505a\u5916\u90e8\u6d41\u91cf\u8bbf\u95ee\u7684\u5165\u53e3\u3002 \u4f1a\u8bdd\u4fdd\u6301 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u540e\uff0c\u76f8\u540c\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u5c06\u8f6c\u53d1\u81f3\u540c\u4e00 Pod\u5f00\u542f\u540e Service \u7684 .spec.sessionAffinity \u4e3a ClientIP \uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\uff1aService \u7684\u4f1a\u8bdd\u4eb2\u548c\u6027 \u5f00\u542f \u4f1a\u8bdd\u4fdd\u6301\u6700\u5927\u65f6\u957f \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5f00\u542f\u4f1a\u8bdd\u4fdd\u6301\u540e\uff0c\u4fdd\u6301\u7684\u6700\u5927\u65f6\u957f\uff0c\u9ed8\u8ba4\u8d85\u65f6\u65f6\u957f\u4e3a 30 \u79d2.spec.sessionAffinityConfig.clientIP.timeoutSeconds \u9ed8\u8ba4\u8bbe\u7f6e\u4e3a 30 \u79d2 30 \u79d2 \u6ce8\u89e3 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u6ce8\u89e3"},{"location":"end-user/kpanda/network/create-services.html#loadbalancer","title":"\u521b\u5efa LoadBalancer \u670d\u52a1","text":"

                          \u70b9\u9009 \u8d1f\u8f7d\u5747\u8861\uff08LoadBalancer\uff09 \uff0c\u8fd9\u662f\u6307\u4f7f\u7528\u4e91\u63d0\u4f9b\u5546\u7684\u8d1f\u8f7d\u5747\u8861\u5668\u5411\u5916\u90e8\u66b4\u9732\u670d\u52a1\u3002 \u5916\u90e8\u8d1f\u8f7d\u5747\u8861\u5668\u53ef\u4ee5\u5c06\u6d41\u91cf\u8def\u7531\u5230\u81ea\u52a8\u521b\u5efa\u7684 NodePort \u670d\u52a1\u548c ClusterIP \u670d\u52a1\u4e0a\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u8d1f\u8f7d\u5747\u8861\uff08LoadBalancer\uff09\u3002 LoadBalancer \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u5916\u90e8\u6d41\u91cf\u7b56\u7565 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8bbe\u7f6e\u5916\u90e8\u6d41\u91cf\u7b56\u7565\u3002Cluster\uff1a\u6d41\u91cf\u53ef\u4ee5\u8f6c\u53d1\u5230\u96c6\u7fa4\u4e2d\u6240\u6709\u8282\u70b9\u4e0a\u7684 Pod\u3002Local\uff1a\u6d41\u91cf\u53ea\u53d1\u7ed9\u672c\u8282\u70b9\u4e0a\u7684 Pod\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 \u6807\u7b7e\u9009\u62e9\u5668 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6dfb\u52a0\u6807\u7b7e\uff0cService \u6839\u636e\u6807\u7b7e\u9009\u62e9 Pod\uff0c\u586b\u5199\u540e\u70b9\u51fb\u201c\u6dfb\u52a0\u201d\u3002\u4e5f\u53ef\u4ee5\u5f15\u7528\u5df2\u6709\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6807\u7b7e\uff0c\u70b9\u51fb \u5f15\u7528\u8d1f\u8f7d\u6807\u7b7e \uff0c\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\u9009\u62e9\u8d1f\u8f7d\uff0c\u7cfb\u7edf\u4f1a\u9ed8\u8ba4\u5c06\u6240\u9009\u7684\u8d1f\u8f7d\u6807\u7b7e\u4f5c\u4e3a\u9009\u62e9\u5668\u3002 \u8d1f\u8f7d\u5747\u8861\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4f7f\u7528\u7684\u8d1f\u8f7d\u5747\u8861\u7c7b\u578b\uff0c\u5f53\u524d\u652f\u6301 MetalLB \u548c\u5176\u4ed6\u3002 MetalLB IP \u6c60 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u7684 \u8d1f\u8f7d\u5747\u8861\u7c7b\u578b\u4e3a MetalLB \u65f6\uff0cLoadBalancer Service\u9ed8\u8ba4\u4f1a\u4ece\u8fd9\u4e2a\u6c60\u4e2d\u5206\u914d IP \u5730\u5740, \u5e76\u4e14\u901a\u8fc7 APR \u5ba3\u544a\u8fd9\u4e2a\u6c60\u4e2d\u7684\u6240\u6709 IP \u5730\u5740 \u8d1f\u8f7d\u5747\u8861\u5730\u5740 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u30111.\u5982\u4f7f\u7528\u7684\u662f\u516c\u6709\u4e91 CloudProvider\uff0c\u6b64\u5904\u586b\u5199\u7684\u4e3a\u4e91\u5382\u5546\u63d0\u4f9b\u7684\u8d1f\u8f7d\u5747\u8861\u5730\u5740\uff1b2.\u5982\u679c\u4e0a\u8ff0\u8d1f\u8f7d\u5747\u8861\u7c7b\u578b\u9009\u62e9\u4e3a MetalLB \uff0c\u9ed8\u8ba4\u4ece\u4e0a\u8ff0 IP \u6c60\u4e2d\u83b7\u53d6 IP \uff0c\u5982\u679c\u4e0d\u586b\u5219\u81ea\u52a8\u83b7\u53d6\u3002 \u7aef\u53e3\u914d\u7f6e \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u534f\u8bae\u7aef\u53e3\uff0c\u9700\u8981\u5148\u9009\u62e9\u7aef\u53e3\u534f\u8bae\u7c7b\u578b\uff0c\u76ee\u524d\u652f\u6301 TCP\u3001UDP \u4e24\u79cd\u4f20\u8f93\u534f\u8bae\u3002\u7aef\u53e3\u540d\u79f0\uff1a\u8f93\u5165\u81ea\u5b9a\u4e49\u7684\u7aef\u53e3\u7684\u540d\u79f0\u3002\u670d\u52a1\u7aef\u53e3\uff08port\uff09\uff1aPod \u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u7684\u8bbf\u95ee\u7aef\u53e3\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u670d\u52a1\u7aef\u53e3\u88ab\u8bbe\u7f6e\u4e3a\u4e0e\u5bb9\u5668\u7aef\u53e3\u5b57\u6bb5\u76f8\u540c\u7684\u503c\u3002\u5bb9\u5668\u7aef\u53e3\uff08targetport\uff09\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u9645\u76d1\u542c\u7684\u5bb9\u5668\u7aef\u53e3\u3002\u8282\u70b9\u7aef\u53e3\uff08nodeport\uff09\uff1a\u8282\u70b9\u7684\u7aef\u53e3\uff0c\u63a5\u6536\u6765\u81ea ClusterIP \u4f20\u8f93\u7684\u6d41\u91cf\u3002\u7528\u6765\u505a\u5916\u90e8\u6d41\u91cf\u8bbf\u95ee\u7684\u5165\u53e3\u3002 \u6ce8\u89e3 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u4e3a\u670d\u52a1\u6dfb\u52a0\u6ce8\u89e3"},{"location":"end-user/kpanda/network/create-services.html#externalname","title":"\u521b\u5efa ExternalName \u670d\u52a1","text":"

                          \u70b9\u9009 \u5916\u90e8\u670d\u52a1\uff08ExternalName\uff09 \uff0c\u8fd9\u662f\u6307\u901a\u8fc7\u5c06\u670d\u52a1\u6620\u5c04\u5230\u5916\u90e8\u57df\u540d\u6765\u66b4\u9732\u670d\u52a1\u3002\u9009\u62e9\u6b64\u9879\u7684\u670d\u52a1\u4e0d\u4f1a\u521b\u5efa\u5178\u578b\u7684 ClusterIP \u6216 NodePort\uff0c\u800c\u662f\u901a\u8fc7 DNS \u540d\u79f0\u89e3\u6790\u5c06\u8bf7\u6c42\u91cd\u5b9a\u5411\u5230\u5916\u90e8\u7684\u670d\u52a1\u5730\u5740\u3002\u53c2\u8003\u4e0b\u8868\u914d\u7f6e\u53c2\u6570\u3002

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8bbf\u95ee\u7c7b\u578b \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u6307\u5b9a Pod \u670d\u52a1\u53d1\u73b0\u7684\u65b9\u5f0f\uff0c\u8fd9\u91cc\u9009\u62e9\u5916\u90e8\u670d\u52a1\uff08ExternalName\uff09\u3002 ExternalName \u670d\u52a1\u540d\u79f0 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u65b0\u5efa\u670d\u52a1\u7684\u540d\u79f0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 Svc-01 \u547d\u540d\u7a7a\u95f4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u9009\u62e9\u65b0\u5efa\u670d\u52a1\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002\u5173\u4e8e\u547d\u540d\u7a7a\u95f4\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6982\u8ff0\u3002\u3010\u6ce8\u610f\u3011\u8bf7\u8f93\u5165 4 \u5230 63 \u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u5305\u542b\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e2d\u5212\u7ebf\uff08-\uff09\uff0c\u5e76\u4ee5\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u5c3e\u3002 default \u57df\u540d \u3010\u7c7b\u578b\u3011\u5fc5\u586b"},{"location":"end-user/kpanda/network/create-services.html#_3","title":"\u5b8c\u6210\u670d\u52a1\u521b\u5efa","text":"

                          \u914d\u7f6e\u5b8c\u6240\u6709\u53c2\u6570\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u670d\u52a1\u5217\u8868\u3002\u5728\u5217\u8868\u53f3\u4fa7\uff0c\u70b9\u51fb \u2507 \uff0c\u53ef\u4ee5\u4fee\u6539\u6216\u5220\u9664\u6240\u9009\u670d\u52a1\u3002

                          "},{"location":"end-user/kpanda/network/network-policy.html","title":"\u7f51\u7edc\u7b56\u7565","text":"

                          \u7f51\u7edc\u7b56\u7565\uff08NetworkPolicy\uff09\u53ef\u4ee5\u5728 IP \u5730\u5740\u6216\u7aef\u53e3\u5c42\u9762\uff08OSI \u7b2c 3 \u5c42\u6216\u7b2c 4 \u5c42\uff09\u63a7\u5236\u7f51\u7edc\u6d41\u91cf\u3002\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u76ee\u524d\u652f\u6301\u521b\u5efa\u57fa\u4e8e Pod \u6216\u547d\u540d\u7a7a\u95f4\u7684\u7f51\u7edc\u7b56\u7565\uff0c\u652f\u6301\u901a\u8fc7\u6807\u7b7e\u9009\u62e9\u5668\u6765\u8bbe\u5b9a\u54ea\u4e9b\u6d41\u91cf\u53ef\u4ee5\u8fdb\u5165\u6216\u79bb\u5f00\u5e26\u6709\u7279\u5b9a\u6807\u7b7e\u7684 Pod\u3002

                          \u6709\u5173\u7f51\u7edc\u7b56\u7565\u7684\u66f4\u591a\u8be6\u60c5\uff0c\u53ef\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u7f51\u7edc\u7b56\u7565\u3002

                          "},{"location":"end-user/kpanda/network/network-policy.html#_2","title":"\u521b\u5efa\u7f51\u7edc\u7b56\u7565","text":"

                          \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u7f51\u7edc\u7b56\u7565\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

                          \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u7f51\u7edc\u7b56\u7565\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

                          \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

                          "},{"location":"end-user/kpanda/network/network-policy.html#yaml","title":"YAML \u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u7f51\u7edc\u7b56\u7565 -> YAML \u521b\u5efa \u3002

                          2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                          "},{"location":"end-user/kpanda/network/network-policy.html#_3","title":"\u8868\u5355\u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u7f51\u7edc\u7b56\u7565 -> \u521b\u5efa\u7b56\u7565 \u3002

                          2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

                            \u540d\u79f0\u548c\u547d\u540d\u7a7a\u95f4\u5728\u521b\u5efa\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002

                          3. \u586b\u5199\u7b56\u7565\u914d\u7f6e\u3002

                            \u7b56\u7565\u914d\u7f6e\u5206\u4e3a\u5165\u6d41\u91cf\u7b56\u7565\u548c\u51fa\u6d41\u91cf\u7b56\u7565\u3002\u5982\u679c\u6e90 Pod \u60f3\u8981\u6210\u529f\u8fde\u63a5\u5230\u76ee\u6807 Pod\uff0c\u6e90 Pod \u7684\u51fa\u6d41\u91cf\u7b56\u7565\u548c\u76ee\u6807 Pod \u7684\u5165\u6d41\u91cf\u7b56\u7565\u90fd\u9700\u8981\u5141\u8bb8\u8fde\u63a5\u3002\u5982\u679c\u4efb\u4f55\u4e00\u65b9\u4e0d\u5141\u8bb8\u8fde\u63a5\uff0c\u90fd\u4f1a\u5bfc\u81f4\u8fde\u63a5\u5931\u8d25\u3002

                            • \u5165\u6d41\u91cf\u7b56\u7565\uff1a\u70b9\u51fb \u2795 \u5f00\u59cb\u914d\u7f6e\u7b56\u7565\uff0c\u652f\u6301\u914d\u7f6e\u591a\u6761\u7b56\u7565\u3002\u591a\u6761\u7f51\u7edc\u7b56\u7565\u7684\u6548\u679c\u76f8\u4e92\u53e0\u52a0\uff0c\u53ea\u6709\u540c\u65f6\u6ee1\u8db3\u6240\u6709\u7f51\u7edc\u7b56\u7565\uff0c\u624d\u80fd\u6210\u529f\u5efa\u7acb\u8fde\u63a5\u3002

                            • \u51fa\u6d41\u91cf\u7b56\u7565

                          "},{"location":"end-user/kpanda/network/network-policy.html#_4","title":"\u67e5\u770b\u7f51\u7edc\u7b56\u7565","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u7f51\u7edc -> \u7f51\u7edc\u7b56\u7565 \uff0c\u70b9\u51fb\u7f51\u7edc\u7b56\u7565\u7684\u540d\u79f0\u3002

                          2. \u67e5\u770b\u8be5\u7b56\u7565\u7684\u57fa\u672c\u914d\u7f6e\u3001\u5173\u8054\u5b9e\u4f8b\u4fe1\u606f\u3001\u5165\u6d41\u91cf\u7b56\u7565\u3001\u51fa\u6d41\u91cf\u7b56\u7565\u3002

                          Info

                          \u5728\u5173\u8054\u5b9e\u4f8b\u9875\u7b7e\u4e0b\uff0c\u652f\u6301\u67e5\u770b\u5b9e\u4f8b\u76d1\u63a7\u3001\u65e5\u5fd7\u3001\u5bb9\u5668\u5217\u8868\u3001YAML \u6587\u4ef6\u3001\u4e8b\u4ef6\u7b49\u3002

                          "},{"location":"end-user/kpanda/network/network-policy.html#_5","title":"\u66f4\u65b0\u7f51\u7edc\u7b56\u7565","text":"

                          \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u66f4\u65b0\u7f51\u7edc\u7b56\u7565\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u7f51\u7edc\u7b56\u7565\u3002

                          • \u5728\u7f51\u7edc\u7b56\u7565\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u7b56\u7565\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

                          • \u70b9\u51fb\u7f51\u7edc\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u7f51\u7edc\u7b56\u7565\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

                          "},{"location":"end-user/kpanda/network/network-policy.html#_6","title":"\u5220\u9664\u7f51\u7edc\u7b56\u7565","text":"

                          \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u5220\u9664\u7f51\u7edc\u7b56\u7565\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u7f51\u7edc\u7b56\u7565\u3002

                          • \u5728\u7f51\u7edc\u7b56\u7565\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u7b56\u7565\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u5220\u9664\u3002

                          • \u70b9\u51fb\u7f51\u7edc\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u7f51\u7edc\u7b56\u7565\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u5220\u9664\u3002

                          "},{"location":"end-user/kpanda/nodes/add-node.html","title":"\u96c6\u7fa4\u8282\u70b9\u6269\u5bb9","text":"

                          \u968f\u7740\u4e1a\u52a1\u5e94\u7528\u4e0d\u65ad\u589e\u957f\uff0c\u96c6\u7fa4\u8d44\u6e90\u65e5\u8d8b\u7d27\u5f20\uff0c\u8fd9\u65f6\u53ef\u4ee5\u57fa\u4e8e kubean \u5bf9\u96c6\u7fa4\u8282\u70b9\u8fdb\u884c\u6269\u5bb9\u3002\u6269\u5bb9\u540e\uff0c\u5e94\u7528\u53ef\u4ee5\u8fd0\u884c\u5728\u65b0\u589e\u7684\u8282\u70b9\u4e0a\uff0c\u7f13\u89e3\u8d44\u6e90\u538b\u529b\u3002

                          \u53ea\u6709\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u521b\u5efa\u7684\u96c6\u7fa4\u624d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\uff0c\u4ece\u5916\u90e8\u63a5\u5165\u7684\u96c6\u7fa4\u4e0d\u652f\u6301\u6b64\u64cd\u4f5c\u3002\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u540c\u79cd\u67b6\u6784\u4e0b\u5de5\u4f5c\u96c6\u7fa4\u7684 \u5de5\u4f5c\u8282\u70b9 \u6269\u5bb9\u3002

                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                            \u82e5 \u96c6\u7fa4\u89d2\u8272 \u4e2d\u5e26\u6709 \u63a5\u5165\u96c6\u7fa4 \u7684\u6807\u7b7e\uff0c\u5219\u8bf4\u660e\u8be5\u96c6\u7fa4\u4e0d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u7136\u540e\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u70b9\u51fb \u63a5\u5165\u8282\u70b9 \u3002

                          3. \u8f93\u5165\u4e3b\u673a\u540d\u79f0\u548c\u8282\u70b9 IP \u5e76\u70b9\u51fb \u786e\u5b9a \u3002

                            \u70b9\u51fb \u2795 \u6dfb\u52a0\u5de5\u4f5c\u8282\u70b9 \u53ef\u4ee5\u7ee7\u7eed\u63a5\u5165\u66f4\u591a\u8282\u70b9\u3002

                          Note

                          \u63a5\u5165\u8282\u70b9\u5927\u7ea6\u9700\u8981 20 \u5206\u949f\uff0c\u8bf7\u60a8\u8010\u5fc3\u7b49\u5f85\u3002

                          "},{"location":"end-user/kpanda/nodes/add-node.html#_2","title":"\u53c2\u8003\u6587\u6863","text":"
                          • \u5bf9\u5de5\u4f5c\u96c6\u7fa4\u7684\u63a7\u5236\u8282\u70b9\u6269\u5bb9
                          • \u4e3a\u5de5\u4f5c\u96c6\u7fa4\u6dfb\u52a0\u5f02\u6784\u8282\u70b9
                          • \u4e3a\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u7684\u5de5\u4f5c\u8282\u70b9\u6269\u5bb9
                          • \u66ff\u6362\u5de5\u4f5c\u96c6\u7fa4\u7684\u9996\u4e2a\u63a7\u5236\u8282\u70b9
                          "},{"location":"end-user/kpanda/nodes/delete-node.html","title":"\u96c6\u7fa4\u8282\u70b9\u7f29\u5bb9","text":"

                          \u5f53\u4e1a\u52a1\u9ad8\u5cf0\u671f\u7ed3\u675f\u4e4b\u540e\uff0c\u4e3a\u4e86\u8282\u7701\u8d44\u6e90\u6210\u672c\uff0c\u53ef\u4ee5\u7f29\u5c0f\u96c6\u7fa4\u89c4\u6a21\uff0c\u5378\u8f7d\u5197\u4f59\u7684\u8282\u70b9\uff0c\u5373\u8282\u70b9\u7f29\u5bb9\u3002\u8282\u70b9\u5378\u8f7d\u540e\uff0c\u5e94\u7528\u65e0\u6cd5\u7ee7\u7eed\u8fd0\u884c\u5728\u8be5\u8282\u70b9\u4e0a\u3002

                          "},{"location":"end-user/kpanda/nodes/delete-node.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5177\u6709 Cluster Admin \u89d2\u8272\u6388\u6743 \u3002
                          • \u53ea\u6709\u901a\u8fc7\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u521b\u5efa\u7684\u96c6\u7fa4\u624d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\uff0c\u4ece\u5916\u90e8\u63a5\u5165\u7684\u96c6\u7fa4\u4e0d\u652f\u6301\u6b64\u64cd\u4f5c\u3002
                          • \u5378\u8f7d\u8282\u70b9\u4e4b\u524d\uff0c\u9700\u8981\u6682\u505c\u8c03\u5ea6\u8be5\u8282\u70b9\uff0c\u5e76\u4e14\u5c06\u8be5\u8282\u70b9\u4e0a\u7684\u5e94\u7528\u90fd\u9a71\u9010\u81f3\u5176\u4ed6\u8282\u70b9\u3002
                          • \u9a71\u9010\u65b9\u5f0f\uff1a\u767b\u5f55\u63a7\u5236\u5668\u8282\u70b9\uff0c\u901a\u8fc7 kubectl drain \u547d\u4ee4\u9a71\u9010\u8282\u70b9\u4e0a\u6240\u6709 Pod\u3002\u5b89\u5168\u9a71\u9010\u7684\u65b9\u5f0f\u53ef\u4ee5\u5141\u8bb8\u5bb9\u5668\u7ec4\u91cc\u9762\u7684\u5bb9\u5668\u4f18\u96c5\u5730\u4e2d\u6b62\u3002
                          "},{"location":"end-user/kpanda/nodes/delete-node.html#_3","title":"\u6ce8\u610f\u4e8b\u9879","text":"
                          1. \u96c6\u7fa4\u8282\u70b9\u7f29\u5bb9\u65f6\uff0c\u53ea\u80fd\u9010\u4e2a\u8fdb\u884c\u5378\u8f7d\uff0c\u65e0\u6cd5\u6279\u91cf\u5378\u8f7d\u3002

                          2. \u5982\u9700\u5378\u8f7d\u96c6\u7fa4\u63a7\u5236\u5668\u8282\u70b9\uff0c\u9700\u8981\u786e\u4fdd\u6700\u7ec8\u63a7\u5236\u5668\u8282\u70b9\u6570\u4e3a \u5947\u6570\u3002

                          3. \u96c6\u7fa4\u8282\u70b9\u7f29\u5bb9\u65f6\u4e0d\u53ef\u4e0b\u7ebf \u7b2c\u4e00\u4e2a\u63a7\u5236\u5668 \u8282\u70b9\u3002\u5982\u679c\u5fc5\u987b\u6267\u884c\u6b64\u64cd\u4f5c\uff0c\u8bf7\u8054\u7cfb\u552e\u540e\u5de5\u7a0b\u5e08\u3002

                          "},{"location":"end-user/kpanda/nodes/delete-node.html#_4","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                            \u82e5 \u96c6\u7fa4\u89d2\u8272 \u4e2d\u5e26\u6709 \u63a5\u5165\u96c6\u7fa4 \u7684\u6807\u7b7e\uff0c\u5219\u8bf4\u660e\u8be5\u96c6\u7fa4\u4e0d\u652f\u6301\u8282\u70b9\u6269\u7f29\u5bb9\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u627e\u5230\u9700\u8981\u5378\u8f7d\u7684\u8282\u70b9\uff0c\u70b9\u51fb \u2507 \u9009\u62e9 \u79fb\u9664\u8282\u70b9 \u3002

                          3. \u8f93\u5165\u8282\u70b9\u540d\u79f0\uff0c\u5e76\u70b9\u51fb \u5220\u9664 \u8fdb\u884c\u786e\u8ba4\u3002

                          "},{"location":"end-user/kpanda/nodes/labels-annotations.html","title":"\u6807\u7b7e\u4e0e\u6ce8\u89e3","text":"

                          \u6807\u7b7e\uff08Labels\uff09\u662f\u4e3a Pod\u3001\u8282\u70b9\u3001\u96c6\u7fa4\u7b49 Kubernetes \u5bf9\u8c61\u6dfb\u52a0\u7684\u6807\u8bc6\u6027\u952e\u503c\u5bf9\uff0c\u53ef\u7ed3\u5408\u6807\u7b7e\u9009\u62e9\u5668\u67e5\u627e\u5e76\u7b5b\u9009\u6ee1\u8db3\u67d0\u4e9b\u6761\u4ef6\u7684 Kubernetes \u5bf9\u8c61\u3002\u6bcf\u4e2a\u952e\u5bf9\u4e8e\u7ed9\u5b9a\u5bf9\u8c61\u5fc5\u987b\u662f\u552f\u4e00\u7684\u3002

                          \u6ce8\u89e3\uff08Annotations\uff09\u548c\u6807\u7b7e\u4e00\u6837\uff0c\u4e5f\u662f\u952e/\u503c\u5bf9\uff0c\u4f46\u4e0d\u5177\u5907\u6807\u8bc6\u6216\u7b5b\u9009\u529f\u80fd\u3002 \u4f7f\u7528\u6ce8\u89e3\u53ef\u4ee5\u4e3a\u8282\u70b9\u6dfb\u52a0\u4efb\u610f\u7684\u5143\u6570\u636e\u3002 \u6ce8\u89e3\u7684\u952e\u901a\u5e38\u4f7f\u7528\u7684\u683c\u5f0f\u4e3a \u524d\u7f00\uff08\u53ef\u9009\uff09/\u540d\u79f0\uff08\u5fc5\u586b\uff09 \uff0c\u4f8b\u5982 nfd.node.kubernetes.io/extended-resources \u3002 \u5982\u679c\u7701\u7565\u524d\u7f00\uff0c\u8868\u793a\u8be5\u6ce8\u89e3\u952e\u662f\u7528\u6237\u79c1\u6709\u7684\u3002

                          \u6709\u5173\u6807\u7b7e\u548c\u6ce8\u89e3\u7684\u66f4\u591a\u4fe1\u606f\uff0c\u53ef\u53c2\u8003 Kubernetes \u7684\u5b98\u65b9\u6587\u6863\u6807\u7b7e\u548c\u9009\u62e9\u7b97\u7b26\u6216\u6ce8\u89e3\u3002

                          \u6dfb\u52a0/\u5220\u9664\u6807\u7b7e\u4e0e\u6ce8\u89e3\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u56fe\u6807\uff0c\u70b9\u51fb \u4fee\u6539\u6807\u7b7e \u6216 \u4fee\u6539\u6ce8\u89e3 \u3002

                          3. \u70b9\u51fb \u2795 \u6dfb\u52a0 \u53ef\u4ee5\u6dfb\u52a0\u6807\u7b7e\u6216\u6ce8\u89e3\uff0c\u70b9\u51fb X \u53ef\u4ee5\u5220\u9664\u6807\u7b7e\u6216\u6ce8\u89e3\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                          "},{"location":"end-user/kpanda/nodes/node-authentication.html","title":"\u4f7f\u7528 SSH \u5bc6\u94a5\u8ba4\u8bc1\u8282\u70b9","text":"

                          \u5982\u679c\u60a8\u9009\u62e9\u4f7f\u7528 SSH \u5bc6\u94a5\u4f5c\u4e3a\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u8282\u70b9\u8ba4\u8bc1\u65b9\u5f0f\uff0c\u60a8\u9700\u8981\u6309\u7167\u5982\u4e0b\u8bf4\u660e\u914d\u7f6e\u516c\u79c1\u94a5\u3002

                          1. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5728 \u5f85\u5efa\u96c6\u7fa4\u7684\u7ba1\u7406\u96c6\u7fa4\u4e2d\u7684\u4efb\u610f\u8282\u70b9 \u4e0a\u751f\u6210\u516c\u79c1\u94a5\u3002

                            cd /root/.ssh\nssh-keygen -t rsa\n
                          2. \u6267\u884c ls \u547d\u4ee4\u67e5\u770b\u7ba1\u7406\u96c6\u7fa4\u4e0a\u7684\u5bc6\u94a5\u662f\u5426\u521b\u5efa\u6210\u529f\uff0c\u6b63\u786e\u53cd\u9988\u5982\u4e0b\uff1a

                            ls\nid_rsa  id_rsa.pub  known_hosts\n

                            \u5176\u4e2d\u540d\u4e3a id_rsa \u7684\u6587\u4ef6\u662f\u79c1\u94a5\uff0c\u540d\u4e3a id_rsa.pub \u7684\u6587\u4ef6\u662f\u516c\u94a5\u3002

                          3. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u5206\u522b\u5c06\u516c\u94a5\u6587\u4ef6 id_rsa.pub \u52a0\u8f7d\u5230\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u6240\u6709\u8282\u70b9\u4e0a\u3002

                            ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.0\n

                            \u5c06\u4e0a\u9762\u547d\u4ee4\u4e2d\u7684 root@10.0.0.0 \u7528\u6237\u8d26\u53f7\u548c\u8282\u70b9 IP \u66ff\u6362\u4e3a\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u8282\u70b9\u7528\u6237\u540d\u548c IP\u3002** \u9700\u8981\u5728\u5f85\u521b\u5efa\u96c6\u7fa4\u7684\u6bcf\u53f0\u8282\u70b9\u90fd\u6267\u884c\u76f8\u540c\u7684\u64cd\u4f5c **\u3002

                          4. \u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u67e5\u770b\u6b65\u9aa4 1 \u6240\u521b\u5efa\u7684\u79c1\u94a5\u6587\u4ef6 id_rsa \u3002

                            cat /root/.ssh/id_rsa\n

                            \u8f93\u51fa\u5982\u4e0b\u5185\u5bb9\uff1a

                            -----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEA3UvyKINzY5BFuemQ+uJ6q+GqgfvnWwNC8HzZhpcMSjJy26MM\nUtBEBJxy8fMi57XcjYxPibXW/wnd+32ICCycqCwByUmuXeCC1cjlCQDqjcAvXae7\nY54IXGF7wm2IsMNwf0kjFEXjuS48FLDA0mGRaN3BG+Up5geXcHckg3K5LD8kXFFx\ndEmSIjdyw55NaUitmEdHzN7cIdfi6Z56jcV8dcFBgWKUx+ebiyPmZBkXToz6GnMF\nrswzzZCl+G6Jb2xTGy7g7ozb4BoZd1IpSD5EhDanRrESVE0C5YuJ5zUAC0CvVd1l\nv67AK8Ko6MXToHp01/bcsvlM6cqgwUFXZKVeOwIDAQABAoIBAQCO36GQlo3BEjxy\nM2HvGJmqrx+unDxafliRe4nVY2AD515Qf4xNSzke4QM1QoyenMOwf446krQkJPK0\nk+9nl6Xszby5gGCbK4BNFk8I6RaGPjZWeRx6zGUJf8avWJiPxx6yjz2esSC9RiR0\nF0nmiiefVMyAfgv2/5++dK2WUFNNRKLgSRRpP5bRaD5wMzzxtSSXrUon6217HO8p\n3RoWsI51MbVzhdVgpHUNABcoa0rpr9svT6XLKZxY8mxpKFYjM0Wv2JIDABg3kBvh\nQbJ7kStCO3naZjKMU9UuSqVJs06cflGYw7Or8/tABR3LErNQKPjkhAQqt0DXw7Iw\n3tKdTAJBAoGBAP687U7JAOqQkcphek2E/A/sbO/d37ix7Z3vNOy065STrA+ZWMZn\npZ6Ui1B/oJpoZssnfvIoz9sn559X0j67TljFALFd2ZGS0Fqh9KVCqDvfk+Vst1dq\n+3r/yZdTOyswoccxkJiC/GDwZGK0amJWqvob39JCZhDAKIGLbGMmjdAHAoGBAN5k\nm1WGnni1nZ+3dryIwgB6z1hWcnLTamzSET6KhSuo946ET0IRG9xtlheCx6dqICbr\nVk1Y4NtRZjK/p/YGx59rDWf7E3I8ZMgR7mjieOcUZ4lUlA4l7ZIlW/2WZHW+nUXO\nTi20fqJ8qSp4BUvOvuth1pz2GLUHe2/Fxjf7HIstAoGBAPHpPr9r+TfIlPsJeRj2\n6lzA3G8qWFRQfGRYjv0fjv0pA+RIb1rzgP/I90g5+63G6Z+R4WdcxI/OJJNY1iuG\nuw9n/pFxm7U4JC990BPE6nj5iLz+clpNGYckNDBF9VG9vFSrSDLdaYkxoVNvG/xJ\na9Na90H4lm7f3VewrPy310KvAoGAZr+mwNoEh5Kpc6xo8Gxi7aPP/mlaUVD6X7Ki\ngvmu02AqmC7rC4QqEiqTaONkaSXwGusqIWxJ3yp5hELmUBYLzszAEeV/s4zRp1oZ\ng133LBRSTbHFAdBmNdqK6Nu+KGRb92980UMOKvZbliKDl+W6cbfvVu+gtKrzTc3b\naevb4TUCgYEAnJAxyVYDP1nJf7bjBSHXQu1E/DMwbtrqw7dylRJ8cAzI7IxfSCez\n7BYWq41PqVd9/zrb3Pbh2phiVzKe783igAIMqummcjo/kZyCwFsYBzK77max1jF5\naPQsLbRS2aDz8kIH6jHPZ/R+15EROmdtLmA7vIJZGerWWQR0dUU+XXA=\n

                            \u5c06\u79c1\u94a5\u5185\u5bb9\u590d\u5236\u540e\u586b\u81f3\u754c\u9762\u5bc6\u94a5\u8f93\u5165\u6846\u3002

                          "},{"location":"end-user/kpanda/nodes/node-check.html","title":"\u521b\u5efa\u96c6\u7fa4\u8282\u70b9\u53ef\u7528\u6027\u68c0\u67e5","text":"

                          \u5728\u521b\u5efa\u96c6\u7fa4\u6216\u4e3a\u5df2\u6709\u96c6\u7fa4\u6dfb\u52a0\u8282\u70b9\u65f6\uff0c\u8bf7\u53c2\u9605\u4e0b\u8868\uff0c\u68c0\u67e5\u8282\u70b9\u914d\u7f6e\uff0c\u4ee5\u907f\u514d\u56e0\u8282\u70b9\u914d\u7f6e\u9519\u8bef\u5bfc\u81f4\u96c6\u7fa4\u521b\u5efa\u6216\u6269\u5bb9\u5931\u8d25\u3002

                          \u68c0\u67e5\u9879 \u63cf\u8ff0 \u64cd\u4f5c\u7cfb\u7edf \u53c2\u8003\u652f\u6301\u7684\u67b6\u6784\u53ca\u64cd\u4f5c\u7cfb\u7edf SELinux \u5173\u95ed \u9632\u706b\u5899 \u5173\u95ed \u67b6\u6784\u4e00\u81f4\u6027 \u8282\u70b9\u95f4 CPU \u67b6\u6784\u4e00\u81f4\uff08\u5982\u5747\u4e3a ARM \u6216 x86\uff09 \u4e3b\u673a\u65f6\u95f4 \u6240\u6709\u4e3b\u673a\u95f4\u540c\u6b65\u8bef\u5dee\u5c0f\u4e8e 10 \u79d2\u3002 \u7f51\u7edc\u8054\u901a\u6027 \u8282\u70b9\u53ca\u5176 SSH \u7aef\u53e3\u80fd\u591f\u6b63\u5e38\u88ab\u5e73\u53f0\u8bbf\u95ee\u3002 CPU \u53ef\u7528 CPU \u8d44\u6e90\u5927\u4e8e 4 Core \u5185\u5b58 \u53ef\u7528\u5185\u5b58\u8d44\u6e90\u5927\u4e8e 8 GB"},{"location":"end-user/kpanda/nodes/node-check.html#_2","title":"\u652f\u6301\u7684\u67b6\u6784\u53ca\u64cd\u4f5c\u7cfb\u7edf","text":"\u67b6\u6784 \u64cd\u4f5c\u7cfb\u7edf \u5907\u6ce8 ARM Kylin Linux Advanced Server release V10 (Sword) SP2 \u63a8\u8350 ARM UOS Linux ARM openEuler x86 CentOS 7.x \u63a8\u8350 x86 Redhat 7.x \u63a8\u8350 x86 Redhat 8.x \u63a8\u8350 x86 Flatcar Container Linux by Kinvolk x86 Debian Bullseye, Buster, Jessie, Stretch x86 Ubuntu 16.04, 18.04, 20.04, 22.04 x86 Fedora 35, 36 x86 Fedora CoreOS x86 openSUSE Leap 15.x/Tumbleweed x86 Oracle Linux 7, 8, 9 x86 Alma Linux 8, 9 x86 Rocky Linux 8, 9 x86 Amazon Linux 2 x86 Kylin Linux Advanced Server release V10 (Sword) - SP2 \u6d77\u5149 x86 UOS Linux x86 openEuler"},{"location":"end-user/kpanda/nodes/node-details.html","title":"\u8282\u70b9\u8be6\u60c5","text":"

                          \u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u96c6\u7fa4\u4e2d\u5404\u4e2a\u8282\u70b9\u7684\u4fe1\u606f\uff0c\u5305\u62ec\u8282\u70b9\u72b6\u6001\u3001\u6807\u7b7e\u3001\u8d44\u6e90\u7528\u91cf\u3001Pod\u3001\u76d1\u63a7\u4fe1\u606f\u7b49\u3002

                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u53ef\u4ee5\u67e5\u770b\u8282\u70b9\u72b6\u6001\u3001\u89d2\u8272\u3001\u6807\u7b7e\u3001CPU/\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\u3001IP \u5730\u5740\u3001\u521b\u5efa\u65f6\u95f4\u3002

                          3. \u70b9\u51fb\u8282\u70b9\u540d\u79f0\uff0c\u53ef\u4ee5\u8fdb\u5165\u8282\u70b9\u8be6\u60c5\u9875\u9762\u67e5\u770b\u66f4\u591a\u4fe1\u606f\uff0c\u5305\u62ec\u6982\u89c8\u4fe1\u606f\u3001\u5bb9\u5668\u7ec4\u4fe1\u606f\u3001\u6807\u7b7e\u6ce8\u89e3\u4fe1\u606f\u3001\u4e8b\u4ef6\u5217\u8868\u3001\u72b6\u6001\u7b49\u3002

                            \u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u67e5\u770b\u8282\u70b9\u7684 YAML \u6587\u4ef6\u3001\u76d1\u63a7\u4fe1\u606f\u3001\u6807\u7b7e\u548c\u6ce8\u89e3\u7b49\u3002

                          "},{"location":"end-user/kpanda/nodes/schedule.html","title":"\u8282\u70b9\u8c03\u5ea6","text":"

                          \u652f\u6301\u5c06\u8282\u70b9\u6682\u505c\u8c03\u5ea6\u6216\u6062\u590d\u8c03\u5ea6\u3002\u6682\u505c\u8c03\u5ea6\u6307\uff0c\u505c\u6b62\u5c06 Pod \u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002\u6062\u590d\u8c03\u5ea6\u6307\uff0c\u53ef\u4ee5\u5c06 Pod \u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002

                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u5728\u8282\u70b9\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u56fe\u6807\uff0c\u70b9\u51fb \u6682\u505c\u8c03\u5ea6 \u6309\u94ae\u5373\u53ef\u6682\u505c\u8c03\u5ea6\u8be5\u8282\u70b9\u3002

                          3. \u5728\u8282\u70b9\u53f3\u4fa7\u70b9\u51fb \u2507 \u64cd\u4f5c\u56fe\u6807\uff0c\u70b9\u51fb \u6062\u590d\u8c03\u5ea6 \u6309\u94ae\u5373\u53ef\u6062\u590d\u8c03\u5ea6\u8be5\u8282\u70b9\u3002

                          \u8282\u70b9\u8c03\u5ea6\u72b6\u6001\u53ef\u80fd\u56e0\u7f51\u7edc\u60c5\u51b5\u6709\u6240\u5ef6\u8fdf\uff0c\u70b9\u51fb\u641c\u7d22\u6846\u53f3\u4fa7\u7684\u5237\u65b0\u56fe\u6807\u53ef\u4ee5\u5237\u65b0\u8282\u70b9\u8c03\u5ea6\u72b6\u6001\u3002

                          "},{"location":"end-user/kpanda/nodes/taints.html","title":"\u8282\u70b9\u6c61\u70b9\u7ba1\u7406","text":"

                          \u6c61\u70b9 (Taint) \u80fd\u591f\u4f7f\u8282\u70b9\u6392\u65a5\u67d0\u4e00\u7c7b Pod\uff0c\u907f\u514d Pod \u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u4e0a\u3002 \u6bcf\u4e2a\u8282\u70b9\u4e0a\u53ef\u4ee5\u5e94\u7528\u4e00\u4e2a\u6216\u591a\u4e2a\u6c61\u70b9\uff0c\u4e0d\u80fd\u5bb9\u5fcd\u8fd9\u4e9b\u6c61\u70b9\u7684 Pod \u5219\u4e0d\u4f1a\u88ab\u8c03\u5ea6\u8be5\u8282\u70b9\u4e0a\u3002

                          "},{"location":"end-user/kpanda/nodes/taints.html#_2","title":"\u6ce8\u610f\u4e8b\u9879","text":"
                          1. \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u5907 NS Editor \u89d2\u8272\u6388\u6743\u6216\u5176\u4ed6\u66f4\u9ad8\u6743\u9650\u3002
                          2. \u4e3a\u8282\u70b9\u6dfb\u52a0\u6c61\u70b9\u4e4b\u540e\uff0c\u53ea\u6709\u80fd\u5bb9\u5fcd\u8be5\u6c61\u70b9\u7684 Pod \u624d\u80fd\u88ab\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002
                          "},{"location":"end-user/kpanda/nodes/taints.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u627e\u5230\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u6982\u89c8 \u9875\u9762\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\uff0c\u70b9\u51fb \u8282\u70b9\u7ba1\u7406 \uff0c\u627e\u5230\u9700\u8981\u4fee\u6539\u6c61\u70b9\u7684\u8282\u70b9\uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u56fe\u6807\u5e76\u70b9\u51fb \u4fee\u6539\u6c61\u70b9 \u6309\u94ae\u3002

                          3. \u5728\u5f39\u6846\u5185\u8f93\u5165\u6c61\u70b9\u7684\u952e\u503c\u4fe1\u606f\uff0c\u9009\u62e9\u6c61\u70b9\u6548\u679c\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                            \u70b9\u51fb \u2795 \u6dfb\u52a0 \u53ef\u4ee5\u4e3a\u8282\u70b9\u6dfb\u52a0\u591a\u4e2a\u6c61\u70b9\uff0c\u70b9\u51fb\u6c61\u70b9\u6548\u679c\u53f3\u4fa7\u7684 X \u53ef\u4ee5\u5220\u9664\u6c61\u70b9\u3002

                            \u76ee\u524d\u652f\u6301\u4e09\u79cd\u6c61\u70b9\u6548\u679c\uff1a

                            • NoSchedule\uff1a\u65b0\u7684 Pod \u4e0d\u4f1a\u88ab\u8c03\u5ea6\u5230\u5e26\u6709\u6b64\u6c61\u70b9\u7684\u8282\u70b9\u4e0a\uff0c\u9664\u975e\u65b0\u7684 Pod \u5177\u6709\u76f8\u5339\u914d\u7684\u5bb9\u5fcd\u5ea6\u3002\u5f53\u524d\u6b63\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u4e0d\u4f1a \u88ab\u9a71\u9010\u3002
                            • NoExecute\uff1a\u8fd9\u4f1a\u5f71\u54cd\u5df2\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod\uff1a
                              • \u5982\u679c Pod \u4e0d\u80fd\u5bb9\u5fcd\u6b64\u6c61\u70b9\uff0c\u4f1a\u9a6c\u4e0a\u88ab\u9a71\u9010\u3002
                              • \u5982\u679c Pod \u80fd\u591f\u5bb9\u5fcd\u6b64\u6c61\u70b9\uff0c\u4f46\u662f\u5728\u5bb9\u5fcd\u5ea6\u5b9a\u4e49\u4e2d\u6ca1\u6709\u6307\u5b9a tolerationSeconds\uff0c\u5219 Pod \u8fd8\u4f1a\u4e00\u76f4\u5728\u8fd9\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u3002
                              • \u5982\u679c Pod \u80fd\u591f\u5bb9\u5fcd\u6b64\u6c61\u70b9\u800c\u4e14\u6307\u5b9a\u4e86 tolerationSeconds\uff0c\u5219 Pod \u8fd8\u80fd\u5728\u8fd9\u4e2a\u8282\u70b9\u4e0a\u7ee7\u7eed\u8fd0\u884c\u6307\u5b9a\u7684\u65f6\u957f\u3002\u8fd9\u6bb5\u65f6\u95f4\u8fc7\u53bb\u540e\uff0c\u518d\u4ece\u8282\u70b9\u4e0a\u9a71\u9664\u8fd9\u4e9b Pod\u3002
                            • PreferNoSchedule\uff1a\u8fd9\u662f\u201c\u8f6f\u6027\u201d\u7684 NoSchedule\u3002\u63a7\u5236\u5e73\u9762\u5c06**\u5c1d\u8bd5**\u907f\u514d\u5c06\u4e0d\u5bb9\u5fcd\u6b64\u6c61\u70b9\u7684 Pod \u8c03\u5ea6\u5230\u8282\u70b9\u4e0a\uff0c\u4f46\u4e0d\u80fd\u4fdd\u8bc1\u5b8c\u5168\u907f\u514d\u3002\u6240\u4ee5\u8981\u5c3d\u91cf\u907f\u514d\u4f7f\u7528\u6b64\u6c61\u70b9\u3002

                          \u6709\u5173\u6c61\u70b9\u7684\u66f4\u591a\u8be6\u60c5\uff0c\u8bf7\u53c2\u9605 Kubernetes \u5b98\u65b9\u6587\u6863\uff1a\u6c61\u70b9\u548c\u5bb9\u5fcd\u5ea6\u3002

                          "},{"location":"end-user/kpanda/olm/import-miniooperator.html","title":"\u5bfc\u5165\u79bb\u7ebf MinIo Operator","text":"

                          \u672c\u6587\u5c06\u4ecb\u7ecd\u5728\u79bb\u7ebf\u73af\u5883\u4e0b\u5982\u4f55\u5bfc\u5165 MinIo Operator\u3002

                          "},{"location":"end-user/kpanda/olm/import-miniooperator.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5f53\u524d\u96c6\u7fa4\u5df2\u63a5\u5165\u5bb9\u5668\u7ba1\u7406\u4e14\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u5df2\u7ecf\u5b89\u88c5 kolm \u7ec4\u4ef6\uff08helm \u6a21\u677f\u641c\u7d22 kolm\uff09
                          • \u5f53\u524d\u96c6\u7fa4\u5df2\u7ecf\u5b89\u88c5 olm \u7ec4\u4ef6\u4e14\u7248\u672c >= 0.2.4 (helm \u6a21\u677f\u641c\u7d22 olm)
                          • \u652f\u6301\u6267\u884c Docker \u547d\u4ee4
                          • \u51c6\u5907\u4e00\u4e2a\u955c\u50cf\u4ed3\u5e93
                          "},{"location":"end-user/kpanda/olm/import-miniooperator.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                          1. \u5728\u6267\u884c\u73af\u5883\u4e2d\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u5e76\u5728\u540e\u7eed\u6b65\u9aa4\u4f7f\u7528\uff0c\u6267\u884c\u547d\u4ee4\uff1a

                            export OPM_IMG=10.5.14.200/quay.m.daocloud.io/operator-framework/opm:v1.29.0 \nexport BUNDLE_IMG=10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3 \n

                            \u5982\u4f55\u83b7\u53d6\u4e0a\u8ff0\u955c\u50cf\u5730\u5740\uff1a

                            \u524d\u5f80 \u5bb9\u5668\u7ba1\u7406 -> \u9009\u62e9\u5f53\u524d\u96c6\u7fa4 -> helm \u5e94\u7528 -> \u67e5\u770b olm \u7ec4\u4ef6 -> \u63d2\u4ef6\u8bbe\u7f6e \uff0c\u627e\u5230\u540e\u7eed\u6b65\u9aa4\u6240\u9700 opm\uff0cminio\uff0cminio bundle\uff0cminio operator \u7684\u955c\u50cf\u3002

                            \u4ee5\u4e0a\u8bc9\u622a\u56fe\u4e3a\u4f8b\uff0c\u5219\u56db\u4e2a\u955c\u50cf\u5730\u5740\u5982\u4e0b\n\n# opm \u955c\u50cf \n10.5.14.200/quay.m.daocloud.io/operator-framework/opm:v1.29.0\n\n# minio \u955c\u50cf\n10.5.14.200/quay.m.daocloud.io/minio/minio:RELEASE.2023-03-24T21-41-23Z\n\n# minio bundle \u955c\u50cf\n10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3\n\n# minio operator \u955c\u50cf \n10.5.14.200/quay.m.daocloud.io/minio/operator:v5.0.3\n
                          2. \u6267\u884c opm \u547d\u4ee4\u83b7\u53d6\u79bb\u7ebf bundle \u955c\u50cf\u5305\u542b\u7684 operator\u3002

                            # \u521b\u5efa operator \u5b58\u653e\u76ee\u5f55\n$ mkdir minio-operator && cd minio-operator \n\n# \u83b7\u53d6 operator yaml \n$ docker run --user root  -v $PWD/minio-operator:/minio-operator ${OPM_IMG} alpha bundle unpack --skip-tls-verify -v -d ${BUNDLE_IMG} -o ./minio-operator\n\n# \u9884\u671f\u7ed3\u679c\n.\n\u2514\u2500\u2500 minio-operator\n    \u251c\u2500\u2500 manifests\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-env_v1_configmap.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-sa-secret_v1_secret.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio-operator.clusterserviceversion.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio.min.io_tenants.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 operator_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 sts.min.io_policybindings.yaml\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 sts_v1_service.yaml\n    \u2514\u2500\u2500 metadata\n        \u2514\u2500\u2500 annotations.yaml\n\n3 directories, 9 files\n
                          3. \u66ff\u6362\u00a0 minio-operator/manifests/minio-operator.clusterserviceversion.yaml\u00a0 \u6587\u4ef6\u4e2d\u7684\u6240\u6709\u955c\u50cf\u5730\u5740\u4e3a\u79bb\u7ebf\u955c\u50cf\u4ed3\u5e93\u5730\u5740\u955c\u50cf\u3002

                            \u66ff\u6362\u524d\uff1a

                            \u66ff\u6362\u540e\uff1a

                          4. \u751f\u6210\u6784\u5efa bundle \u955c\u50cf\u7684 Dockerfile

                            $ docker run --user root  -v $PWD:/minio-operator -w /minio-operator ${OPM_IMG} alpha bundle generate --channels stable,beta -d /minio-operator/minio-operator/manifests -e stable -p minio-operator \u00a0\n\n# \u9884\u671f\u7ed3\u679c\n.\n\u251c\u2500\u2500 bundle.Dockerfile\n\u2514\u2500\u2500 minio-operator\n    \u251c\u2500\u2500 manifests\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-env_v1_configmap.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-sa-secret_v1_secret.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio-operator.clusterserviceversion.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio.min.io_tenants.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 operator_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 sts.min.io_policybindings.yaml\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 sts_v1_service.yaml\n    \u2514\u2500\u2500 metadata\n        \u2514\u2500\u2500 annotations.yaml\n\n3 directories, 10 files\n
                          5. \u6267\u884c\u6784\u5efa\u547d\u4ee4\uff0c\u6784\u5efa bundle \u955c\u50cf\u4e14\u63a8\u9001\u5230\u79bb\u7ebf registry\u3002

                            # \u8bbe\u7f6e\u65b0\u7684 bundle image \nexport OFFLINE_BUNDLE_IMG=10.5.14.200/quay.m.daocloud.io/operatorhubio/minio-operator:v5.0.3-offline \n\n$ docker build . -f bundle.Dockerfile -t ${OFFLINE_BUNDLE_IMG} \u00a0\n\n$ docker push ${OFFLINE_BUNDLE_IMG}\n
                          6. \u751f\u6210\u6784\u5efa catalog \u955c\u50cf\u7684 Dockerfile\u3002

                            $ docker run --user root  -v $PWD:/minio-operator  -w /minio-operator ${OPM_IMG} index add  --bundles ${OFFLINE_BUNDLE_IMG} --generate --binary-image ${OPM_IMG} --skip-tls-verify\n\n# \u9884\u671f\u7ed3\u679c\n.\n\u251c\u2500\u2500 bundle.Dockerfile\n\u251c\u2500\u2500 database\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 index.db\n\u251c\u2500\u2500 index.Dockerfile\n\u2514\u2500\u2500 minio-operator\n    \u251c\u2500\u2500 manifests\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-env_v1_configmap.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console-sa-secret_v1_secret.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 console_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio.min.io_tenants.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 minio-operator.clusterserviceversion.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 operator_v1_service.yaml\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 sts.min.io_policybindings.yaml\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 sts_v1_service.yaml\n    \u2514\u2500\u2500 metadata\n        \u2514\u2500\u2500 annotations.yaml\n\n4 directories, 12 files\n
                          7. \u6784\u5efa catalog \u955c\u50cf

                            # \u8bbe\u7f6e\u65b0\u7684 catalog image  \nexport OFFLINE_CATALOG_IMG=10.5.14.200/release.daocloud.io/operator-framework/system-operator-index:v0.1.0-offline\n\n$ docker build . -f index.Dockerfile -t ${OFFLINE_CATALOG_IMG}  \n\n$ docker push ${OFFLINE_CATALOG_IMG}\n
                          8. \u524d\u5f80\u5bb9\u5668\u7ba1\u7406\uff0c\u66f4\u65b0 helm \u5e94\u7528 olm \u7684\u5185\u7f6e catsrc \u955c\u50cf\uff08\u586b\u5199\u6784\u5efa catalog \u955c\u50cf\u6307\u5b9a\u7684 ${catalog-image} \u5373\u53ef\uff09

                          9. \u66f4\u65b0\u6210\u529f\u540e\uff0cOperator Hub \u4e2d\u4f1a\u51fa\u73b0 minio-operator \u7ec4\u4ef6

                          "},{"location":"end-user/kpanda/permissions/cluster-ns-auth.html","title":"\u96c6\u7fa4\u548c\u547d\u540d\u7a7a\u95f4\u6388\u6743","text":"

                          \u5bb9\u5668\u7ba1\u7406\u57fa\u4e8e\u5168\u5c40\u6743\u9650\u7ba1\u7406\u53ca\u5168\u5c40\u7528\u6237/\u7528\u6237\u7ec4\u7ba1\u7406\u5b9e\u73b0\u6388\u6743\uff0c\u5982\u9700\u4e3a\u7528\u6237\u6388\u4e88\u5bb9\u5668\u7ba1\u7406\u7684\u6700\u9ad8\u6743\u9650\uff08\u53ef\u4ee5\u521b\u5efa\u3001\u7ba1\u7406\u3001\u5220\u9664\u6240\u6709\u96c6\u7fa4\uff09\u3002

                          "},{"location":"end-user/kpanda/permissions/cluster-ns-auth.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u7ed9\u7528\u6237/\u7528\u6237\u7ec4\u6388\u6743\u4e4b\u524d\uff0c\u8bf7\u5b8c\u6210\u5982\u4e0b\u51c6\u5907\uff1a

                          • \u5df2\u5728\u5168\u5c40\u7ba1\u7406\u4e2d\u521b\u5efa\u4e86\u5f85\u6388\u6743\u7684\u7528\u6237/\u7528\u6237\u7ec4\uff0c\u8bf7\u53c2\u8003\u7528\u6237\u3002

                          • \u4ec5 Kpanda Owner\u53ca\u5f53\u524d\u96c6\u7fa4\u7684 Cluster Admin \u5177\u5907\u96c6\u7fa4\u6388\u6743\u80fd\u529b\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u6743\u9650\u8bf4\u660e\u3002

                          • \u4ec5 Kpanda Owner\u3001\u5f53\u524d\u96c6\u7fa4\u7684 Cluster Admin\uff0c\u5f53\u524d\u547d\u540d\u7a7a\u95f4\u7684 NS Admin \u5177\u5907\u547d\u540d\u7a7a\u95f4\u6388\u6743\u80fd\u529b\u3002

                          "},{"location":"end-user/kpanda/permissions/cluster-ns-auth.html#_3","title":"\u96c6\u7fa4\u6388\u6743","text":"
                          1. \u7528\u6237\u767b\u5f55\u5e73\u53f0\u540e\uff0c\u70b9\u51fb\u5de6\u4fa7\u83dc\u5355\u680f \u5bb9\u5668\u7ba1\u7406 \u4e0b\u7684 \u6743\u9650\u7ba1\u7406 \uff0c\u9ed8\u8ba4\u4f4d\u4e8e \u96c6\u7fa4\u6743\u9650 \u9875\u7b7e\u3002

                          2. \u70b9\u51fb \u6dfb\u52a0\u6388\u6743 \u6309\u94ae\u3002

                          3. \u5728 \u6dfb\u52a0\u96c6\u7fa4\u6743\u9650 \u9875\u9762\u4e2d\uff0c\u9009\u62e9\u76ee\u6807\u96c6\u7fa4\u3001\u5f85\u6388\u6743\u7684\u7528\u6237/\u7528\u6237\u7ec4\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                            \u76ee\u524d\u4ec5\u652f\u6301\u7684\u96c6\u7fa4\u89d2\u8272\u4e3a Cluster Admin \uff0c\u8be6\u60c5\u6743\u9650\u53ef\u53c2\u8003\u6743\u9650\u8bf4\u660e\u3002\u5982\u9700\u8981\u7ed9\u591a\u4e2a\u7528\u6237/\u7528\u6237\u7ec4\u540c\u65f6\u8fdb\u884c\u6388\u6743\uff0c \u53ef\u70b9\u51fb \u6dfb\u52a0\u7528\u6237\u6743\u9650 \u8fdb\u884c\u591a\u6b21\u6dfb\u52a0\u3002

                          4. \u8fd4\u56de\u96c6\u7fa4\u6743\u9650\u7ba1\u7406\u9875\u9762\uff0c\u5c4f\u5e55\u51fa\u73b0\u6d88\u606f\uff1a \u6dfb\u52a0\u96c6\u7fa4\u6743\u9650\u6210\u529f \u3002

                          "},{"location":"end-user/kpanda/permissions/cluster-ns-auth.html#_4","title":"\u547d\u540d\u7a7a\u95f4\u6388\u6743","text":"
                          1. \u7528\u6237\u767b\u5f55\u5e73\u53f0\u540e\uff0c\u70b9\u51fb\u5de6\u4fa7\u83dc\u5355\u680f \u5bb9\u5668\u7ba1\u7406 \u4e0b\u7684 \u6743\u9650\u7ba1\u7406 \uff0c\u70b9\u51fb \u547d\u540d\u7a7a\u95f4\u6743\u9650 \u9875\u7b7e\u3002

                          2. \u70b9\u51fb \u6dfb\u52a0\u6388\u6743 \u6309\u94ae\u3002\u5728 \u6dfb\u52a0\u547d\u540d\u7a7a\u95f4\u6743\u9650 \u9875\u9762\u4e2d\uff0c\u9009\u62e9\u76ee\u6807\u96c6\u7fa4\u3001\u76ee\u6807\u547d\u540d\u7a7a\u95f4\uff0c\u4ee5\u53ca\u5f85\u6388\u6743\u7684\u7528\u6237/\u7528\u6237\u7ec4\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                            \u76ee\u524d\u652f\u6301\u7684\u547d\u540d\u7a7a\u95f4\u89d2\u8272\u4e3a NS Admin\u3001NS Editor\u3001NS Viewer\uff0c\u8be6\u60c5\u6743\u9650\u53ef\u53c2\u8003\u6743\u9650\u8bf4\u660e\u3002\u5982\u9700\u7ed9\u591a\u4e2a\u7528\u6237/\u7528\u6237\u7ec4\u540c\u65f6\u8fdb\u884c\u6388\u6743\uff0c\u53ef\u70b9\u51fb \u6dfb\u52a0\u7528\u6237\u6743\u9650 \u8fdb\u884c\u591a\u6b21\u6dfb\u52a0\u3002\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u6743\u9650\u6388\u6743\u3002

                          3. \u8fd4\u56de\u547d\u540d\u7a7a\u95f4\u6743\u9650\u7ba1\u7406\u9875\u9762\uff0c\u5c4f\u5e55\u51fa\u73b0\u6d88\u606f\uff1a \u6dfb\u52a0\u96c6\u7fa4\u6743\u9650\u6210\u529f \u3002

                            Tip

                            \u540e\u7eed\u5982\u9700\u5220\u9664\u6216\u7f16\u8f91\u6743\u9650\uff0c\u53ef\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u9009\u62e9 \u7f16\u8f91 \u6216 \u5220\u9664 \u3002

                          "},{"location":"end-user/kpanda/permissions/custom-kpanda-role.html","title":"\u589e\u52a0 Kpanda \u5185\u7f6e\u89d2\u8272\u6743\u9650\u70b9","text":"

                          \u8fc7\u53bb Kpanda \u5185\u7f6e\u89d2\u8272\u7684\u6743\u9650\u70b9\uff08rbac rules\uff09\u90fd\u662f\u63d0\u524d\u9884\u5b9a\u4e49\u597d\u7684\u4e14\u7528\u6237\u65e0\u6cd5\u4fee\u6539\uff0c\u56e0\u4e3a\u4ee5\u524d\u4fee\u6539\u5185\u7f6e\u89d2\u8272\u7684\u6743\u9650\u70b9\u4e4b\u540e\u4e5f\u4f1a\u88ab Kpanda \u63a7\u5236\u5668\u8fd8\u539f\u6210\u9884\u5b9a\u4e49\u7684\u6743\u9650\u70b9\u3002 \u4e3a\u4e86\u652f\u6301\u66f4\u52a0\u7075\u6d3b\u7684\u6743\u9650\u914d\u7f6e\uff0c\u6ee1\u8db3\u5bf9\u7cfb\u7edf\u89d2\u8272\u7684\u81ea\u5b9a\u4e49\u9700\u6c42\uff0c\u76ee\u524d Kpanda \u652f\u6301\u4e3a\u5185\u7f6e\u7cfb\u7edf\u89d2\u8272\uff08cluster admin\u3001ns admin\u3001ns editor\u3001ns viewer\uff09\u4fee\u6539\u6743\u9650\u70b9\u3002 \u4ee5\u4e0b\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u65b0\u589e ns-viewer \u6743\u9650\u70b9\uff0c\u5c1d\u8bd5\u589e\u52a0\u53ef\u4ee5\u5220\u9664 Deployment \u7684\u6743\u9650\u3002\u5176\u4ed6\u6743\u9650\u70b9\u64cd\u4f5c\u7c7b\u4f3c\u3002

                          "},{"location":"end-user/kpanda/permissions/custom-kpanda-role.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u9002\u7528\u4e8e\u5bb9\u5668\u7ba1\u7406 v0.27.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u3002
                          • \u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002
                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u7528\u6237\u7684\u521b\u5efa\uff0c\u5e76\u4e3a\u7528\u6237\u6388\u4e88 NS Viewer \uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          Note

                          • \u53ea\u9700\u5728 Global Cluster \u589e\u52a0\u6743\u9650\u70b9\uff0cKpanda \u63a7\u5236\u5668\u4f1a\u628a Global Cluster \u589e\u52a0\u7684\u6743\u9650\u70b9\u540c\u6b65\u5230\u6240\u6709\u63a5\u5165\u5b50\u96c6\u7fa4\u4e2d\uff0c\u540c\u6b65\u9700\u4e00\u6bb5\u65f6\u95f4\u624d\u80fd\u5b8c\u6210
                          • \u53ea\u80fd\u5728 Global Cluster \u589e\u52a0\u6743\u9650\u70b9\uff0c\u5728\u5b50\u96c6\u7fa4\u65b0\u589e\u7684\u6743\u9650\u70b9\u4f1a\u88ab Global Cluster \u5185\u7f6e\u89d2\u8272\u6743\u9650\u70b9\u8986\u76d6
                          • \u53ea\u652f\u6301\u4f7f\u7528\u56fa\u5b9a Label \u7684 ClusterRole \u8ffd\u52a0\u6743\u9650\uff0c\u4e0d\u652f\u6301\u66ff\u6362\u6216\u8005\u5220\u9664\u6743\u9650\uff0c\u4e5f\u4e0d\u80fd\u4f7f\u7528 role \u8ffd\u52a0\u6743\u9650\uff0c\u5185\u7f6e\u89d2\u8272\u8ddf\u7528\u6237\u521b\u5efa\u7684 ClusterRole Label \u5bf9\u5e94\u5173\u7cfb\u5982\u4e0b

                            cluster-admin: rbac.kpanda.io/role-template-cluster-admin: \"true\"\ncluster-edit: rbac.kpanda.io/role-template-cluster-edit: \"true\"\ncluster-view: rbac.kpanda.io/role-template-cluster-view: \"true\"\nns-admin: rbac.kpanda.io/role-template-ns-admin: \"true\"\nns-edit: rbac.kpanda.io/role-template-ns-edit: \"true\"\nns-view: rbac.kpanda.io/role-template-ns-view: \"true\"\n
                          "},{"location":"end-user/kpanda/permissions/custom-kpanda-role.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"
                          1. \u4f7f\u7528 admin \u6216\u8005 cluster admin \u6743\u9650\u7684\u7528\u6237\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d

                          2. \u6388\u6743 ns-viewer\uff0c\u7528\u6237\u6709\u8be5 namespace ns-view \u6743\u9650

                          3. \u5207\u6362\u767b\u5f55\u7528\u6237\u4e3a ns-viewer\uff0c\u6253\u5f00\u63a7\u5236\u53f0\u83b7\u53d6 ns-viewer \u7528\u6237\u5bf9\u5e94\u7684 token\uff0c\u4f7f\u7528 curl \u8bf7\u6c42\u5220\u9664\u4e0a\u8ff0\u7684 deployment nginx\uff0c\u53d1\u73b0\u65e0\u5220\u9664\u6743\u9650

                            [root@master-01 ~]# curl -k -X DELETE  'https://${URL}/apis/kpanda.io/v1alpha1/clusters/cluster-member/namespaces/default/deployments/nginx' -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJOU044MG9BclBRMzUwZ2VVU2ZyNy1xMEREVWY4MmEtZmJqR05uRE1sd1lFIn0.eyJleHAiOjE3MTU3NjY1NzksImlhdCI6MTcxNTY4MDE3OSwiYXV0aF90aW1lIjoxNzE1NjgwMTc3LCJqdGkiOiIxZjI3MzJlNC1jYjFhLTQ4OTktYjBiZC1iN2IxZWY1MzAxNDEiLCJpc3MiOiJodHRwczovLzEwLjYuMjAxLjIwMTozMDE0Ny9hdXRoL3JlYWxtcy9naGlwcG8iLCJhdWQiOiJfX2ludGVybmFsLWdoaXBwbyIsInN1YiI6ImMxZmMxM2ViLTAwZGUtNDFiYS05ZTllLWE5OGU2OGM0MmVmMCIsInR5cCI6IklEIiwiYXpwIjoiX19pbnRlcm5hbC1naGlwcG8iLCJzZXNzaW9uX3N0YXRlIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiYXRfaGFzaCI6IlJhTHoyQjlKQ2FNc1RrbGVMR3V6blEiLCJhY3IiOiIwIiwic2lkIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJncm91cHMiOltdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJucy12aWV3ZXIiLCJsb2NhbGUiOiIifQ.As2ipMjfvzvgONAGlc9RnqOd3zMwAj82VXlcqcR74ZK9tAq3Q4ruQ1a6WuIfqiq8Kq4F77ljwwzYUuunfBli2zhU2II8zyxVhLoCEBu4pBVBd_oJyUycXuNa6HfQGnl36E1M7-_QG8b-_T51wFxxVb5b7SEDE1AvIf54NAlAr-rhDmGRdOK1c9CohQcS00ab52MD3IPiFFZ8_Iljnii-RpXKZoTjdcULJVn_uZNk_SzSUK-7MVWmPBK15m6sNktOMSf0pCObKWRqHd15JSe-2aA2PKBo1jBH3tHbOgZyMPdsLI0QdmEnKB5FiiOeMpwn_oHnT6IjT-BZlB18VkW8rA'\n{\"code\":7,\"message\":\"[RBAC] delete resources(deployments: nginx) is forbidden for user(ns-viewer) in cluster(cluster-member)\",\"details\":[]}[root@master-01 ~]#\n[root@master-01 ~]#\n
                          4. \u5728\u5168\u5c40\u670d\u52a1\u96c6\u7fa4\u4e0a\u521b\u5efa\u5982\u4e0b ClusterRole\uff1a

                            apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: append-ns-view # (1)!\n  labels:\n    rbac.kpanda.io/role-template-ns-view: \"true\" # (2)!\nrules:\n  - apiGroups: [ \"apps\" ]\n    resources: [ \"deployments\" ]\n    verbs: [ \"delete\" ]\n
                            1. \u6b64\u5b57\u6bb5\u503c\u53ef\u4efb\u610f\u6307\u5b9a\uff0c\u53ea\u9700\u4e0d\u91cd\u590d\u4e14\u7b26\u5408 Kubernetes \u8d44\u6e90\u540d\u79f0\u89c4\u5219\u8981\u6c42
                            2. \u6ce8\u610f\u7ed9\u4e0d\u540c\u7684\u89d2\u8272\u6dfb\u52a0\u6743\u9650\u65f6\u5e94\u6253\u4e0a\u4e0d\u540c\u7684 label
                          5. \u7b49\u5f85 Kpanda \u63a7\u5236\u5668\u6dfb\u52a0\u7528\u6237\u521b\u5efa\u6743\u9650\u5230\u5185\u7f6e\u89d2\u8272 ns-viewer \u4e2d\uff0c\u53ef\u67e5\u770b\u5bf9\u5e94\u5185\u7f6e\u89d2\u8272\u5982\u662f\u5426\u6709\u4e0a\u4e00\u6b65\u65b0\u589e\u7684\u6743\u9650\u70b9

                            [root@master-01 ~]# kubectl get clusterrole role-template-ns-view -oyaml|grep deployments -C 10|tail -n 6\n
                            - apiGroups:\n  - apps\n  resources:\n  - deployments\n  verbs:\n  - delete\n

                          6. \u518d\u6b21\u4f7f\u7528 curl \u8bf7\u6c42\u5220\u9664\u4e0a\u8ff0\u7684 deployment nginx\uff0c\u8fd9\u6b21\u6210\u529f\u5220\u9664\u4e86\u3002\u4e5f\u5c31\u662f\u8bf4\uff0cns-viewer \u6210\u529f\u65b0\u589e\u4e86\u5220\u9664 Deployment \u7684\u6743\u9650\u3002

                            [root@master-01 ~]# curl -k -X DELETE  'https://${URL}/apis/kpanda.io/v1alpha1/clusters/cluster-member/namespaces/default/deployments/nginx' -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJOU044MG9BclBRMzUwZ2VVU2ZyNy1xMEREVWY4MmEtZmJqR05uRE1sd1lFIn0.eyJleHAiOjE3MTU3NjY1NzksImlhdCI6MTcxNTY4MDE3OSwiYXV0aF90aW1lIjoxNzE1NjgwMTc3LCJqdGkiOiIxZjI3MzJlNC1jYjFhLTQ4OTktYjBiZC1iN2IxZWY1MzAxNDEiLCJpc3MiOiJodHRwczovLzEwLjYuMjAxLjIwMTozMDE0Ny9hdXRoL3JlYWxtcy9naGlwcG8iLCJhdWQiOiJfX2ludGVybmFsLWdoaXBwbyIsInN1YiI6ImMxZmMxM2ViLTAwZGUtNDFiYS05ZTllLWE5OGU2OGM0MmVmMCIsInR5cCI6IklEIiwiYXpwIjoiX19pbnRlcm5hbC1naGlwcG8iLCJzZXNzaW9uX3N0YXRlIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiYXRfaGFzaCI6IlJhTHoyQjlKQ2FNc1RrbGVMR3V6blEiLCJhY3IiOiIwIiwic2lkIjoiMGJjZWRjZTctMTliYS00NmU1LTkwYmUtOTliMWY2MWEyNzI0IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJncm91cHMiOltdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJucy12aWV3ZXIiLCJsb2NhbGUiOiIifQ.As2ipMjfvzvgONAGlc9RnqOd3zMwAj82VXlcqcR74ZK9tAq3Q4ruQ1a6WuIfqiq8Kq4F77ljwwzYUuunfBli2zhU2II8zyxVhLoCEBu4pBVBd_oJyUycXuNa6HfQGnl36E1M7-_QG8b-_T51wFxxVb5b7SEDE1AvIf54NAlAr-rhDmGRdOK1c9CohQcS00ab52MD3IPiFFZ8_Iljnii-RpXKZoTjdcULJVn_uZNk_SzSUK-7MVWmPBK15m6sNktOMSf0pCObKWRqHd15JSe-2aA2PKBo1jBH3tHbOgZyMPdsLI0QdmEnKB5FiiOeMpwn_oHnT6IjT-BZlB18VkW8rA'\n
                          "},{"location":"end-user/kpanda/permissions/permission-brief.html","title":"\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u8bf4\u660e","text":"

                          \u5bb9\u5668\u7ba1\u7406\u6743\u9650\u57fa\u4e8e\u5168\u5c40\u6743\u9650\u7ba1\u7406\u4ee5\u53ca Kubernetes RBAC \u6743\u9650\u7ba1\u7406\u6253\u9020\u7684\u591a\u7ef4\u5ea6\u6743\u9650\u7ba1\u7406\u4f53\u7cfb\u3002 \u652f\u6301\u96c6\u7fa4\u7ea7\u3001\u547d\u540d\u7a7a\u95f4\u7ea7\u7684\u6743\u9650\u63a7\u5236\uff0c\u5e2e\u52a9\u7528\u6237\u4fbf\u6377\u7075\u6d3b\u5730\u5bf9\u79df\u6237\u4e0b\u7684 IAM \u7528\u6237\u3001\u7528\u6237\u7ec4\uff08\u7528\u6237\u7684\u96c6\u5408\uff09\u8bbe\u5b9a\u4e0d\u540c\u7684\u64cd\u4f5c\u6743\u9650\u3002

                          "},{"location":"end-user/kpanda/permissions/permission-brief.html#_2","title":"\u96c6\u7fa4\u6743\u9650","text":"

                          \u96c6\u7fa4\u6743\u9650\u57fa\u4e8e Kubernetes RBAC \u7684 ClusterRolebinding \u6388\u6743\uff0c\u96c6\u7fa4\u6743\u9650\u8bbe\u7f6e\u53ef\u8ba9\u7528\u6237/\u7528\u6237\u7ec4\u5177\u5907\u96c6\u7fa4\u76f8\u5173\u6743\u9650\u3002 \u76ee\u524d\u7684\u9ed8\u8ba4\u96c6\u7fa4\u89d2\u8272\u4e3a Cluster Admin \uff08\u4e0d\u5177\u5907\u96c6\u7fa4\u7684\u521b\u5efa\u3001\u5220\u9664\u6743\u9650\uff09\u3002

                          "},{"location":"end-user/kpanda/permissions/permission-brief.html#cluster-admin","title":"Cluster Admin","text":"

                          Cluster Admin \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

                          • \u53ef\u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b\u5bf9\u5e94\u96c6\u7fa4

                          • \u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b \u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d\u53ca\u96c6\u7fa4\u5185\u6240\u6709\u8d44\u6e90

                          • \u53ef\u6388\u6743\u7528\u6237\u4e3a\u96c6\u7fa4\u5185\u89d2\u8272 (Cluster Admin\u3001NS Admin\u3001NS Editor\u3001NS Viewer)

                          \u8be5\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b\u5982\u4e0b\uff1a

                          apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:49Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-cluster-admin\n  resourceVersion: \"15168\"\n  uid: f8f86d42-d5ef-47aa-b284-097615795076\nrules:\n- apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n- nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'\n
                          "},{"location":"end-user/kpanda/permissions/permission-brief.html#_3","title":"\u547d\u540d\u7a7a\u95f4\u6743\u9650","text":"

                          \u547d\u540d\u7a7a\u95f4\u6743\u9650\u662f\u57fa\u4e8e Kubernetes RBAC \u80fd\u529b\u7684\u6388\u6743\uff0c\u53ef\u4ee5\u5b9e\u73b0\u4e0d\u540c\u7684\u7528\u6237/\u7528\u6237\u7ec4\u5bf9\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u8d44\u6e90\u5177\u6709\u4e0d\u540c\u7684\u64cd\u4f5c\u6743\u9650(\u5305\u62ec Kubernetes API \u6743\u9650)\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\uff1aKubernetes RBAC\u3002\u76ee\u524d\u5bb9\u5668\u7ba1\u7406\u7684\u9ed8\u8ba4\u89d2\u8272\u4e3a\uff1aNS Admin\u3001NS Editor\u3001NS Viewer\u3002

                          "},{"location":"end-user/kpanda/permissions/permission-brief.html#ns-admin","title":"NS Admin","text":"

                          NS Admin \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

                          • \u53ef\u67e5\u770b\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4
                          • \u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b \u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u53ca\u81ea\u5b9a\u4e49\u8d44\u6e90
                          • \u53ef\u6388\u6743\u7528\u6237\u4e3a\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u89d2\u8272 (NS Editor\u3001NS Viewer)

                          \u8be5\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b\u5982\u4e0b\uff1a

                          apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:49Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-ns-admin\n  resourceVersion: \"15173\"\n  uid: 69f64c7e-70e7-4c7c-a3e0-053f507f2bc3\nrules:\n- apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n- nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'    \n
                          "},{"location":"end-user/kpanda/permissions/permission-brief.html#ns-editor","title":"NS Editor","text":"

                          NS Editor \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

                          • \u53ef\u67e5\u770b\u5bf9\u5e94\u6709\u6743\u9650\u7684\u547d\u540d\u7a7a\u95f4
                          • \u7ba1\u7406\u3001\u7f16\u8f91\u3001\u67e5\u770b \u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d
                          \u70b9\u51fb\u67e5\u770b\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b
                          apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:50Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-ns-edit\n  resourceVersion: \"15175\"\n  uid: ca9e690e-96c0-4978-8915-6e4c00c748fe\nrules:\n- apiGroups:\n  - \"\"\n  resources:\n  - configmaps\n  - endpoints\n  - persistentvolumeclaims\n  - persistentvolumeclaims/status\n  - pods\n  - replicationcontrollers\n  - replicationcontrollers/scale\n  - serviceaccounts\n  - services\n  - services/status\n  verbs:\n  - '*'\n- apiGroups:\n  - \"\"\n  resources:\n  - bindings\n  - events\n  - limitranges\n  - namespaces/status\n  - pods/log\n  - pods/status\n  - replicationcontrollers/status\n  - resourcequotas\n  - resourcequotas/status\n  verbs:\n  - '*'\n- apiGroups:\n  - \"\"\n  resources:\n  - namespaces\n  verbs:\n  - '*'\n- apiGroups:\n  - apps\n  resources:\n  - controllerrevisions\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - statefulsets\n  - statefulsets/scale\n  - statefulsets/status\n  verbs:\n  - '*'\n- apiGroups:\n  - autoscaling\n  resources:\n  - horizontalpodautoscalers\n  - horizontalpodautoscalers/status\n  verbs:\n  - '*'\n- apiGroups:\n  - batch\n  resources:\n  - cronjobs\n  - cronjobs/status\n  - jobs\n  - jobs/status\n  verbs:\n  - '*'\n- apiGroups:\n  - extensions\n  resources:\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - replicationcontrollers/scale\n  verbs:\n  - '*'\n- apiGroups:\n  - policy\n  resources:\n  - poddisruptionbudgets\n  - poddisruptionbudgets/status\n  verbs:\n  - '*'\n- apiGroups:\n  - networking.k8s.io\n  resources:\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  verbs:\n  - '*'      \n
                          "},{"location":"end-user/kpanda/permissions/permission-brief.html#ns-viewer","title":"NS Viewer","text":"

                          NS Viewer \u5177\u6709\u4ee5\u4e0b\u6743\u9650\uff1a

                          • \u53ef\u67e5\u770b\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4
                          • \u53ef\u67e5\u770b\u5bf9\u5e94\u547d\u540d\u7a7a\u95f4\u4e0b\u7684\u6240\u6709\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u53ca\u81ea\u5b9a\u4e49\u8d44\u6e90
                          \u70b9\u51fb\u67e5\u770b\u96c6\u7fa4\u89d2\u8272\u7684 YAML \u793a\u4f8b
                          apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  annotations:\n    kpanda.io/creator: system\n  creationTimestamp: \"2022-06-16T09:42:50Z\"\n  labels:\n    iam.kpanda.io/role-template: \"true\"\n  name: role-template-ns-view\n  resourceVersion: \"15183\"\n  uid: 853888fd-6ee8-42ac-b91e-63923918baf8\nrules:\n- apiGroups:\n  - \"\"\n  resources:\n  - configmaps\n  - endpoints\n  - persistentvolumeclaims\n  - persistentvolumeclaims/status\n  - pods\n  - replicationcontrollers\n  - replicationcontrollers/scale\n  - serviceaccounts\n  - services\n  - services/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - \"\"\n  resources:\n  - bindings\n  - events\n  - limitranges\n  - namespaces/status\n  - pods/log\n  - pods/status\n  - replicationcontrollers/status\n  - resourcequotas\n  - resourcequotas/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - \"\"\n  resources:\n  - namespaces\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - apps\n  resources:\n  - controllerrevisions\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - statefulsets\n  - statefulsets/scale\n  - statefulsets/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - autoscaling\n  resources:\n  - horizontalpodautoscalers\n  - horizontalpodautoscalers/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - batch\n  resources:\n  - cronjobs\n  - cronjobs/status\n  - jobs\n  - jobs/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - extensions\n  resources:\n  - daemonsets\n  - daemonsets/status\n  - deployments\n  - deployments/scale\n  - deployments/status\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  - replicasets\n  - replicasets/scale\n  - replicasets/status\n  - replicationcontrollers/scale\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - policy\n  resources:\n  - poddisruptionbudgets\n  - poddisruptionbudgets/status\n  verbs:\n  - get\n  - list\n  - watch\n- apiGroups:\n  - networking.k8s.io\n  resources:\n  - ingresses\n  - ingresses/status\n  - networkpolicies\n  verbs:\n  - get\n  - list\n  - watch \n
                          "},{"location":"end-user/kpanda/permissions/permission-brief.html#faq","title":"\u6743\u9650 FAQ","text":"
                          1. \u5168\u5c40\u6743\u9650\u548c\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u7ba1\u7406\u7684\u5173\u7cfb\uff1f

                            \u7b54\uff1a\u5168\u5c40\u6743\u9650\u4ec5\u6388\u6743\u4e3a\u7c97\u7c92\u5ea6\u6743\u9650\uff0c\u53ef\u7ba1\u7406\u6240\u6709\u96c6\u7fa4\u7684\u521b\u5efa\u3001\u7f16\u8f91\u3001\u5220\u9664\uff1b\u800c\u5bf9\u4e8e\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\uff0c\u5982\u5355\u4e2a\u96c6\u7fa4\u7684\u7ba1\u7406\u6743\u9650\uff0c\u5355\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u7ba1\u7406\u3001\u7f16\u8f91\u3001\u5220\u9664\u6743\u9650\uff0c\u9700\u8981\u57fa\u4e8e Kubernetes RBAC \u7684\u5bb9\u5668\u7ba1\u7406\u6743\u9650\u8fdb\u884c\u5b9e\u73b0\u3002 \u4e00\u822c\u6743\u9650\u7684\u7528\u6237\u4ec5\u9700\u8981\u5728\u5bb9\u5668\u7ba1\u7406\u4e2d\u8fdb\u884c\u6388\u6743\u5373\u53ef\u3002

                          2. \u76ee\u524d\u4ec5\u652f\u6301\u56db\u4e2a\u9ed8\u8ba4\u89d2\u8272\uff0c\u540e\u53f0\u81ea\u5b9a\u4e49\u89d2\u8272\u7684 RoleBinding \u4ee5\u53ca ClusterRoleBinding \uff08Kubernetes \u7ec6\u7c92\u5ea6\u7684 RBAC\uff09\u662f\u5426\u4e5f\u80fd\u751f\u6548\uff1f

                            \u7b54\uff1a\u76ee\u524d\u81ea\u5b9a\u4e49\u6743\u9650\u6682\u65f6\u65e0\u6cd5\u901a\u8fc7\u56fe\u5f62\u754c\u9762\u8fdb\u884c\u7ba1\u7406\uff0c\u4f46\u662f\u901a\u8fc7 kubectl \u521b\u5efa\u7684\u6743\u9650\u89c4\u5219\u540c\u6837\u80fd\u751f\u6548\u3002

                          "},{"location":"end-user/kpanda/scale/create-hpa.html","title":"\u57fa\u4e8e\u5185\u7f6e\u6307\u6807\u521b\u5efa HPA","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301 Pod \u8d44\u6e90\u57fa\u4e8e\u6307\u6807\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\uff08Horizontal Pod Autoscaling, HPA\uff09\u3002 \u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e CPU \u5229\u7528\u7387\u3001\u5185\u5b58\u7528\u91cf\u53ca\u81ea\u5b9a\u4e49\u6307\u6807\u6307\u6807\u6765\u52a8\u6001\u8c03\u6574 Pod \u8d44\u6e90\u7684\u526f\u672c\u6570\u91cf\u3002 \u4f8b\u5982\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u8bbe\u7f6e\u57fa\u4e8e CPU \u5229\u7528\u7387\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u540e\uff0c\u5f53 Pod \u7684 CPU \u5229\u7528\u7387\u8d85\u8fc7/\u4f4e\u4e8e\u60a8\u8bbe\u7f6e\u7684\u6307\u6807\u9600\u503c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u63a7\u5236\u5668\u5c06\u4f1a\u81ea\u52a8\u589e\u52a0/\u8f83\u5c11 Pod \u526f\u672c\u6570\u3002

                          \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u57fa\u4e8e\u5185\u7f6e\u6307\u6807\u7684\u5f39\u6027\u4f38\u7f29\u3002

                          Note

                          1. HPA \u4ec5\u9002\u7528\u4e8e Deployment \u548c StatefulSet\uff0c\u6bcf\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u53ea\u80fd\u521b\u5efa\u4e00\u4e2a HPA\u3002
                          2. \u5982\u679c\u57fa\u4e8e CPU \u5229\u7528\u7387\u521b\u5efa HPA \u7b56\u7565\uff0c\u5fc5\u987b\u9884\u5148\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u8bbe\u7f6e\u914d\u7f6e\u9650\u5236\uff08Limit\uff09\uff0c\u5426\u5219\u65e0\u6cd5\u8ba1\u7b97 CPU \u5229\u7528\u7387\u3002
                          3. \u5982\u679c\u540c\u65f6\u4f7f\u7528\u5185\u7f6e\u6307\u6807\u548c\u591a\u79cd\u81ea\u5b9a\u4e49\u6307\uff0cHPA \u4f1a\u6839\u636e\u591a\u9879\u6307\u6807\u5206\u522b\u8ba1\u7b97\u6240\u9700\u4f38\u7f29\u526f\u672c\u6570\uff0c\u53d6\u8f83\u5927\u503c\uff08\u4f46\u4e0d\u4f1a\u8d85\u8fc7\u8bbe\u7f6e HPA \u7b56\u7565\u65f6\u914d\u7f6e\u7684\u6700\u5927\u526f\u672c\u6570\uff09\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\u3002
                          "},{"location":"end-user/kpanda/scale/create-hpa.html#_1","title":"\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565","text":"

                          \u7cfb\u7edf\u5185\u7f6e\u4e86 CPU \u548c\u5185\u5b58\u4e24\u79cd\u5f39\u6027\u4f38\u7f29\u6307\u6807\u4ee5\u6ee1\u8db3\u7528\u6237\u7684\u57fa\u7840\u4e1a\u52a1\u4f7f\u7528\u573a\u666f\u3002

                          "},{"location":"end-user/kpanda/scale/create-hpa.html#_2","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u5728\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u6216\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5df2\u5b8c\u6210 metrics-server \u63d2\u4ef6\u5b89\u88c5 \u3002

                          "},{"location":"end-user/kpanda/scale/create-hpa.html#_3","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165\u96c6\u7fa4\u5217\u8868\u9875\u9762\u3002\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d \u8fdb\u5165\u5de5\u4f5c\u8d1f\u8f7d\u5217\u8868\u540e\uff0c\u70b9\u51fb\u4e00\u4e2a\u8d1f\u8f7d\u540d\u79f0\uff0c\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \u9875\u9762\u3002

                          3. \u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u5f39\u6027\u4f38\u7f29\u914d\u7f6e\u60c5\u51b5\u3002

                          4. \u786e\u8ba4\u96c6\u7fa4\u5df2\u5b89\u88c5\u4e86 metrics-server \u63d2\u4ef6\uff0c\u4e14\u63d2\u4ef6\u8fd0\u884c\u72b6\u6001\u4e3a\u6b63\u5e38\u540e\uff0c\u5373\u53ef\u70b9\u51fb \u65b0\u5efa\u4f38\u7f29 \u6309\u94ae\u3002

                          5. \u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u53c2\u6570\u3002

                            • \u7b56\u7565\u540d\u79f0\uff1a\u8f93\u5165\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 hpa-my-dep\u3002
                            • \u547d\u540d\u7a7a\u95f4\uff1a\u8d1f\u8f7d\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002
                            • \u5de5\u4f5c\u8d1f\u8f7d\uff1a\u6267\u884c\u5f39\u6027\u4f38\u7f29\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5bf9\u8c61\u3002
                            • \u76ee\u6807 CPU \u5229\u7528\u7387\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u4e0b Pod \u7684 CPU \u4f7f\u7528\u7387\u3002\u8ba1\u7b97\u65b9\u5f0f\u4e3a\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u4e0b\u6240\u6709\u7684 Pod \u8d44\u6e90 / \u5de5\u4f5c\u8d1f\u8f7d\u7684\u8bf7\u6c42\uff08request\uff09\u503c\u3002\u5f53\u5b9e\u9645 CPU \u7528\u91cf\u5927\u4e8e/\u5c0f\u4e8e\u76ee\u6807\u503c\u65f6\uff0c\u7cfb\u7edf\u81ea\u52a8\u51cf\u5c11/\u589e\u52a0 Pod \u526f\u672c\u6570\u91cf\u3002
                            • \u76ee\u6807\u5185\u5b58\u7528\u91cf\uff1a\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u4e0b\u7684 Pod \u7684\u5185\u5b58\u7528\u91cf\u3002\u5f53\u5b9e\u9645\u5185\u5b58\u7528\u91cf\u5927\u4e8e/\u5c0f\u4e8e\u76ee\u6807\u503c\u65f6\uff0c\u7cfb\u7edf\u81ea\u52a8\u51cf\u5c11/\u589e\u52a0 Pod \u526f\u672c\u6570\u91cf\u3002
                            • \u526f\u672c\u8303\u56f4\uff1aPod \u526f\u672c\u6570\u7684\u5f39\u6027\u4f38\u7f29\u8303\u56f4\u3002\u9ed8\u8ba4\u533a\u95f4\u4e3a\u4e3a 1 - 10\u3002
                          6. \u5b8c\u6210\u53c2\u6570\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u5f39\u6027\u4f38\u7f29\u8be6\u60c5\u9875\u9762\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u7f16\u8f91\u3001\u5220\u9664\u64cd\u4f5c\uff0c\u8fd8\u53ef\u4ee5\u67e5\u770b\u76f8\u5173\u4e8b\u4ef6\u3002

                          "},{"location":"end-user/kpanda/scale/create-vpa.html","title":"\u521b\u5efa VPA","text":"

                          \u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7b56\u7565\uff08Vertical Pod Autoscaler, VPA\uff09\u901a\u8fc7\u76d1\u63a7 Pod \u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u7684\u8d44\u6e90\u7533\u8bf7\u548c\u7528\u91cf\uff0c \u8ba1\u7b97\u51fa\u5bf9\u8be5 Pod \u800c\u8a00\u6700\u9002\u5408\u7684 CPU \u548c\u5185\u5b58\u8bf7\u6c42\u503c\u3002\u4f7f\u7528 VPA \u53ef\u4ee5\u66f4\u52a0\u5408\u7406\u5730\u4e3a\u96c6\u7fa4\u4e0b\u6bcf\u4e2a Pod \u5206\u914d\u8d44\u6e90\uff0c\u63d0\u9ad8\u96c6\u7fa4\u7684\u6574\u4f53\u8d44\u6e90\u5229\u7528\u7387\uff0c\u907f\u514d\u96c6\u7fa4\u8d44\u6e90\u6d6a\u8d39\u3002

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u901a\u8fc7\u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7b56\u7565\uff08Vertical Pod Autoscaler, VPA\uff09\uff0c\u57fa\u4e8e\u6b64\u529f\u80fd\u53ef\u4ee5\u6839\u636e\u5bb9\u5668\u8d44\u6e90\u7684\u4f7f\u7528\u60c5\u51b5\u52a8\u6001\u8c03\u6574 Pod \u8bf7\u6c42\u503c\u3002 \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u652f\u6301\u901a\u8fc7\u624b\u52a8\u548c\u81ea\u52a8\u4e24\u79cd\u65b9\u5f0f\u6765\u4fee\u6539\u8d44\u6e90\u8bf7\u6c42\u503c\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u8981\u8fdb\u884c\u914d\u7f6e\u3002

                          \u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e Pod \u5782\u76f4\u4f38\u7f29\u3002

                          Warning

                          \u4f7f\u7528 VPA \u4fee\u6539 Pod \u8d44\u6e90\u8bf7\u6c42\u4f1a\u89e6\u53d1 Pod \u91cd\u542f\u3002\u7531\u4e8e Kubernetes \u672c\u8eab\u7684\u9650\u5236\uff0c Pod \u91cd\u542f\u540e\u53ef\u80fd\u4f1a\u88ab\u8c03\u5ea6\u5230\u5176\u5b83\u8282\u70b9\u4e0a\u3002

                          "},{"location":"end-user/kpanda/scale/create-vpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3001\u7528\u6237\u3001\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u6216\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5f53\u524d\u96c6\u7fa4\u5df2\u7ecf\u5b89\u88c5 metrics-server \u548c VPA \u63d2\u4ef6\u3002

                          "},{"location":"end-user/kpanda/scale/create-vpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u5185\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u3002

                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u4e2d\u627e\u5230\u76ee\u524d\u96c6\u7fa4\uff0c\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d \uff0c\u627e\u5230\u9700\u8981\u521b\u5efa VPA \u7684\u8d1f\u8f7d\uff0c\u70b9\u51fb\u8be5\u8d1f\u8f7d\u7684\u540d\u79f0\u3002

                            3. \u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u5f39\u6027\u4f38\u7f29\u914d\u7f6e\uff0c\u786e\u8ba4\u5df2\u7ecf\u5b89\u88c5\u4e86\u76f8\u5173\u63d2\u4ef6\u5e76\u4e14\u63d2\u4ef6\u662f\u5426\u8fd0\u884c\u6b63\u5e38\u3002

                          3. \u70b9\u51fb \u65b0\u5efa\u4f38\u7f29 \u6309\u94ae\uff0c\u5e76\u914d\u7f6e VPA \u5782\u76f4\u4f38\u7f29\u7b56\u7565\u53c2\u6570\u3002

                            • \u7b56\u7565\u540d\u79f0\uff1a\u8f93\u5165\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 vpa-my-dep\u3002
                            • \u4f38\u7f29\u6a21\u5f0f\uff1a\u6267\u884c\u4fee\u6539 CPU \u548c\u5185\u5b58\u8bf7\u6c42\u503c\u7684\u65b9\u5f0f\uff0c\u76ee\u524d\u5782\u76f4\u4f38\u7f29\u652f\u6301\u624b\u52a8\u548c\u81ea\u52a8\u4e24\u79cd\u4f38\u7f29\u6a21\u5f0f\u3002
                              • \u624b\u52a8\u4f38\u7f29\uff1a\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u8ba1\u7b97\u51fa\u63a8\u8350\u7684\u8d44\u6e90\u914d\u7f6e\u503c\u540e\uff0c\u9700\u7528\u6237\u624b\u52a8\u4fee\u6539\u5e94\u7528\u7684\u8d44\u6e90\u914d\u989d\u3002
                              • \u81ea\u52a8\u4f38\u7f29\uff1a\u5782\u76f4\u4f38\u7f29\u7b56\u7565\u81ea\u52a8\u8ba1\u7b97\u548c\u4fee\u6539\u5e94\u7528\u7684\u8d44\u6e90\u914d\u989d\u3002
                            • \u76ee\u6807\u5bb9\u5668\uff1a\u9009\u62e9\u9700\u8981\u8fdb\u884c\u5782\u76f4\u4f38\u7f29\u7684\u5bb9\u5668\u3002
                          4. \u5b8c\u6210\u53c2\u6570\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u81ea\u52a8\u8fd4\u56de\u5f39\u6027\u4f38\u7f29\u8be6\u60c5\u9875\u9762\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u6267\u884c\u7f16\u8f91\u3001\u5220\u9664\u64cd\u4f5c\u3002

                          Note

                          \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c--min-replicas \u7684\u503c\u4e3a 2\u3002\u8868\u793a\u5f53\u526f\u672c\u6570\u5927\u4e8e 1 \u65f6\uff0cVPA \u624d\u4f1a\u751f\u6548\uff0c \u53ef\u4ee5\u901a\u8fc7\u4fee\u6539 updater \u7684 --min-replicas \u53c2\u6570\u503c\u6765\u6539\u53d8\u8fd9\u4e00\u9ed8\u8ba4\u884c\u4e3a\u3002

                          spec: \n  containers: \n  - name: updater \n  args: \n  - \"--min-replicas=2\"\n
                          "},{"location":"end-user/kpanda/scale/custom-hpa.html","title":"\u57fa\u4e8e\u81ea\u5b9a\u4e49\u6307\u6807\u521b\u5efa HPA","text":"

                          \u5f53\u7cfb\u7edf\u5185\u7f6e\u7684 CPU \u548c\u5185\u5b58\u4e24\u79cd\u6307\u6807\u4e0d\u80fd\u6ee1\u8db3\u60a8\u4e1a\u52a1\u7684\u5b9e\u9645\u9700\u6c42\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e ServiceMonitoring \u6765\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6307\u6807\uff0c \u5e76\u57fa\u4e8e\u81ea\u5b9a\u4e49\u6307\u6807\u5b9e\u73b0\u5f39\u6027\u4f38\u7f29\u3002\u672c\u6587\u5c06\u4ecb\u7ecd\u5982\u4f55\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u57fa\u4e8e\u81ea\u5b9a\u4e49\u6307\u6807\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\u3002

                          Note

                          1. HPA \u4ec5\u9002\u7528\u4e8e Deployment \u548c StatefulSet\uff0c\u6bcf\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u53ea\u80fd\u521b\u5efa\u4e00\u4e2a HPA\u3002
                          2. \u5982\u679c\u540c\u65f6\u4f7f\u7528\u5185\u7f6e\u6307\u6807\u548c\u591a\u79cd\u81ea\u5b9a\u4e49\u6307\uff0cHPA \u4f1a\u6839\u636e\u591a\u9879\u6307\u6807\u5206\u522b\u8ba1\u7b97\u6240\u9700\u4f38\u7f29\u526f\u672c\u6570\uff0c\u53d6\u8f83\u5927\u503c\uff08\u4f46\u4e0d\u4f1a\u8d85\u8fc7\u8bbe\u7f6e HPA \u7b56\u7565\u65f6\u914d\u7f6e\u7684\u6700\u5927\u526f\u672c\u6570\uff09\u8fdb\u884c\u5f39\u6027\u4f38\u7f29\u3002
                          "},{"location":"end-user/kpanda/scale/custom-hpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u5728\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c \u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762
                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3001\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u6216\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa
                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c \u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743
                          • \u5df2\u5b89\u88c5 metrics-server \u63d2\u4ef6
                          • \u5df2\u5b89\u88c5 insight-agent \u63d2\u4ef6
                          • \u5df2\u5b89\u88c5 Prometheus-adapter \u63d2\u4ef6
                          "},{"location":"end-user/kpanda/scale/custom-hpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u914d\u7f6e\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \u8fdb\u5165\u96c6\u7fa4\u5217\u8868\u9875\u9762\u3002\u70b9\u51fb\u4e00\u4e2a\u96c6\u7fa4\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d \u8fdb\u5165\u5de5\u4f5c\u8d1f\u8f7d\u5217\u8868\u540e\uff0c\u70b9\u51fb\u4e00\u4e2a\u8d1f\u8f7d\u540d\u79f0\uff0c\u8fdb\u5165 \u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5 \u9875\u9762\u3002

                          3. \u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u7684\u5f39\u6027\u4f38\u7f29\u914d\u7f6e\u60c5\u51b5\u3002

                          4. \u786e\u8ba4\u96c6\u7fa4\u5df2\u5b89\u88c5\u4e86 metrics-server \u3001Insight\u3001Prometheus-adapter \u63d2\u4ef6\u4e14\u63d2\u4ef6\u8fd0\u884c\u72b6\u6001\u4e3a\u6b63\u5e38\u540e\uff0c\u5373\u53ef\u70b9\u51fb \u65b0\u5efa\u4f38\u7f29 \u6309\u94ae\u3002

                            Note

                            \u5982\u679c\u76f8\u5173\u63d2\u4ef6\u672a\u5b89\u88c5\u6216\u63d2\u4ef6\u5904\u4e8e\u5f02\u5e38\u72b6\u6001\uff0c\u60a8\u5728\u9875\u9762\u4e0a\u5c06\u65e0\u6cd5\u770b\u89c1\u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u5165\u53e3\u3002

                          5. \u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u53c2\u6570\u3002

                            • \u7b56\u7565\u540d\u79f0\uff1a\u8f93\u5165\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u7684\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 hpa-my-dep\u3002
                            • \u547d\u540d\u7a7a\u95f4\uff1a\u8d1f\u8f7d\u6240\u5728\u7684\u547d\u540d\u7a7a\u95f4\u3002
                            • \u5de5\u4f5c\u8d1f\u8f7d\uff1a\u6267\u884c\u5f39\u6027\u4f38\u7f29\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5bf9\u8c61\u3002
                            • \u8d44\u6e90\u7c7b\u578b\uff1a\u8fdb\u884c\u76d1\u63a7\u7684\u81ea\u5b9a\u4e49\u6307\u6807\u7c7b\u578b\uff0c\u5305\u542b Pod \u548c Service \u4e24\u79cd\u7c7b\u578b\u3002
                            • \u6307\u6807\uff1a\u4f7f\u7528 ServiceMonitoring \u521b\u5efa\u7684\u81ea\u5b9a\u4e49\u6307\u6807\u540d\u79f0\u6216\u7cfb\u7edf\u5185\u7f6e\u7684\u81ea\u5b9a\u4e49\u6307\u6807\u540d\u79f0\u3002
                            • \u6570\u636e\u7c7b\u578b\uff1a\u7528\u4e8e\u8ba1\u7b97\u6307\u6807\u503c\u7684\u65b9\u6cd5\uff0c\u5305\u542b\u76ee\u6807\u503c\u548c\u76ee\u6807\u5e73\u5747\u503c\u4e24\u79cd\u7c7b\u578b\uff0c\u5f53\u8d44\u6e90\u7c7b\u578b\u4e3a Pod \u65f6\uff0c\u53ea\u652f\u6301\u4f7f\u7528\u76ee\u6807\u5e73\u5747\u503c\u3002
                          "},{"location":"end-user/kpanda/scale/custom-hpa.html#_3","title":"\u64cd\u4f5c\u793a\u4f8b","text":"

                          \u672c\u6848\u4f8b\u4ee5 Golang \u4e1a\u52a1\u7a0b\u5e8f\u4e3a\u4f8b\uff0c\u8be5\u793a\u4f8b\u7a0b\u5e8f\u66b4\u9732\u4e86 httpserver_requests_total \u6307\u6807\uff0c\u5e76\u8bb0\u5f55 HTTP \u7684\u8bf7\u6c42\uff0c\u901a\u8fc7\u8be5\u6307\u6807\u53ef\u4ee5\u8ba1\u7b97\u51fa\u4e1a\u52a1\u7a0b\u5e8f\u7684 QPS \u503c\u3002

                          "},{"location":"end-user/kpanda/scale/custom-hpa.html#_4","title":"\u90e8\u7f72\u4e1a\u52a1\u7a0b\u5e8f","text":"

                          \u4f7f\u7528 Deployment \u90e8\u7f72\u4e1a\u52a1\u7a0b\u5e8f\uff1a

                          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: httpserver\n  namespace: httpserver\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: httpserver\n  template:\n    metadata:\n      labels:\n        app: httpserver\n    spec:\n      containers:\n      - name: httpserver\n        image: registry.imroc.cc/test/httpserver:custom-metrics\n        imagePullPolicy: Always\n---\n\napiVersion: v1\nkind: Service\nmetadata:\n  name: httpserver\n  namespace: httpserver\n  labels:\n    app: httpserver\n  annotations:\n    prometheus.io/scrape: \"true\"\n    prometheus.io/path: \"/metrics\"\n    prometheus.io/port: \"http\"\nspec:\n  type: ClusterIP\n  ports:\n  - port: 80\n    protocol: TCP\n    name: http\n  selector:\n    app: httpserver\n
                          "},{"location":"end-user/kpanda/scale/custom-hpa.html#prometheus","title":"Prometheus \u91c7\u96c6\u4e1a\u52a1\u76d1\u63a7","text":"

                          \u82e5\u5df2\u5b89\u88c5 insight-agent\uff0c\u53ef\u4ee5\u901a\u8fc7\u521b\u5efa ServiceMonitor \u7684 CRD \u5bf9\u8c61\u914d\u7f6e Prometheus\u3002

                          \u64cd\u4f5c\u6b65\u9aa4\uff1a\u5728 \u96c6\u7fa4\u8be6\u60c5 -> \u81ea\u5b9a\u4e49\u8d44\u6e90 \u641c\u7d22\u201cservicemonitors.monitoring.coreos.com\"\uff0c\u70b9\u51fb\u540d\u79f0\u8fdb\u5165\u8be6\u60c5\u3002 \u901a\u8fc7\u521b\u5efa YAML\uff0c\u5728\u547d\u540d\u7a7a\u95f4 httpserver \u4e0b\u521b\u5efa\u5982\u4e0b\u793a\u4f8b\u7684 CRD\uff1a

                          apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: httpserver\n  namespace: httpserver\n  labels:\n    operator.insight.io/managed-by: insight\nspec:\n  endpoints:\n  - port: http\n    interval: 5s\n  namespaceSelector:\n    matchNames:\n    - httpserver\n  selector:\n    matchLabels:\n      app: httpserver\n

                          Note

                          \u82e5\u901a\u8fc7 insight \u5b89\u88c5 Prometheus\uff0c\u5219 serviceMonitor \u4e0a\u5fc5\u987b\u6253\u4e0a operator.insight.io/managed-by: insight \u8fd9\u4e2a label\uff0c\u901a\u8fc7\u5176\u4ed6\u65b9\u5f0f\u5b89\u88c5\u5219\u65e0\u9700\u6b64 label\u3002

                          "},{"location":"end-user/kpanda/scale/custom-hpa.html#prometheus-adapter","title":"\u5728 prometheus-adapter \u4e2d\u914d\u7f6e\u6307\u6807\u89c4\u5219","text":"

                          \u64cd\u4f5c\u6b65\u9aa4\uff1a\u5728 \u96c6\u7fa4\u8be6\u60c5 -> Helm \u5e94\u7528 \u641c\u7d22 \u201cprometheus-adapter\"\uff0c\u901a\u8fc7\u64cd\u4f5c\u680f\u8fdb\u5165\u66f4\u65b0\u9875\u9762\uff0c\u5728 YAML \u4e2d\u914d\u7f6e\u81ea\u5b9a\u4e49\u6307\u6807\uff0c\u793a\u4f8b\u5982\u4e0b\uff1a

                          rules:\n  custom:\n    - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)\n      name:\n        as: httpserver_requests_qps\n        matches: httpserver_requests_total\n      resources:\n        template: <<.Resource>>\n      seriesQuery: httpserver_requests_total\n

                          "},{"location":"end-user/kpanda/scale/custom-hpa.html#_5","title":"\u521b\u5efa\u81ea\u5b9a\u4e49\u6307\u6807\u5f39\u6027\u4f38\u7f29\u7b56\u7565\u53c2\u6570","text":"

                          \u6309\u7167\u4e0a\u8ff0\u6b65\u9aa4\u5728 Deployment \u4e2d\u627e\u5230\u5e94\u7528\u7a0b\u5e8f httpserver \u5e76\u901a\u8fc7\u81ea\u5b9a\u4e49\u6307\u6807\u521b\u5efa\u5f39\u6027\u4f38\u7f29\u3002

                          "},{"location":"end-user/kpanda/scale/hpa-cronhpa-compatibility-rules.html","title":"HPA \u548c CronHPA \u517c\u5bb9\u89c4\u5219","text":"

                          HPA \u5168\u79f0\u4e3a HorizontalPodAutoscaler\uff0c\u5373 Pod \u6c34\u5e73\u81ea\u52a8\u4f38\u7f29\u3002

                          CronHPA \u5168\u79f0\u4e3a Cron HorizontalPodAutoscaler\uff0c\u5373 Pod \u5b9a\u65f6\u7684\u6c34\u5e73\u81ea\u52a8\u4f38\u7f29\u3002

                          "},{"location":"end-user/kpanda/scale/hpa-cronhpa-compatibility-rules.html#cronhpa-hpa","title":"CronHPA \u548c HPA \u517c\u5bb9\u51b2\u7a81","text":"

                          \u5b9a\u65f6\u4f38\u7f29 CronHPA \u901a\u8fc7\u8bbe\u7f6e\u5b9a\u65f6\u7684\u65b9\u5f0f\u89e6\u53d1\u5bb9\u5668\u7684\u6c34\u5e73\u526f\u672c\u4f38\u7f29\u3002\u4e3a\u4e86\u9632\u6b62\u7a81\u53d1\u7684\u6d41\u91cf\u51b2\u51fb\u7b49\u72b6\u51b5\uff0c \u60a8\u53ef\u80fd\u5df2\u7ecf\u914d\u7f6e HPA \u4fdd\u969c\u5e94\u7528\u7684\u6b63\u5e38\u8fd0\u884c\u3002\u5982\u679c\u540c\u65f6\u68c0\u6d4b\u5230\u4e86 HPA \u548c CronHPA \u7684\u5b58\u5728\uff0c \u7531\u4e8e CronHPA \u548c HPA \u76f8\u4e92\u72ec\u7acb\u65e0\u6cd5\u611f\u77e5\uff0c\u5c31\u4f1a\u51fa\u73b0\u4e24\u4e2a\u63a7\u5236\u5668\u5404\u81ea\u5de5\u4f5c\uff0c\u540e\u6267\u884c\u7684\u64cd\u4f5c\u4f1a\u8986\u76d6\u5148\u6267\u884c\u7684\u64cd\u4f5c\u3002

                          \u5bf9\u6bd4 CronHPA \u548c HPA \u7684\u5b9a\u4e49\u6a21\u677f\uff0c\u53ef\u4ee5\u89c2\u5bdf\u5230\u4ee5\u4e0b\u51e0\u70b9\uff1a

                          • CronHPA \u548c HPA \u90fd\u662f\u901a\u8fc7 scaleTargetRef \u5b57\u6bb5\u6765\u83b7\u53d6\u4f38\u7f29\u5bf9\u8c61\u3002
                          • CronHPA \u901a\u8fc7 jobs \u7684 crontab \u89c4\u5219\u5b9a\u65f6\u4f38\u7f29\u526f\u672c\u6570\u3002
                          • HPA \u901a\u8fc7\u8d44\u6e90\u5229\u7528\u7387\u5224\u65ad\u4f38\u7f29\u60c5\u51b5\u3002

                          Note

                          \u5982\u679c\u540c\u65f6\u8bbe\u7f6e CronHPA \u548c HPA\uff0c\u4f1a\u51fa\u73b0 CronHPA \u548c HPA \u540c\u65f6\u64cd\u4f5c\u4e00\u4e2a scaleTargetRef \u7684\u573a\u666f\u3002

                          "},{"location":"end-user/kpanda/scale/hpa-cronhpa-compatibility-rules.html#cronhpa-hpa_1","title":"CronHPA \u548c HPA \u517c\u5bb9\u65b9\u6848","text":"

                          \u4ece\u4e0a\u6587\u53ef\u77e5\uff0cCronHPA \u548c HPA \u540c\u65f6\u4f7f\u7528\u4f1a\u5bfc\u81f4\u540e\u6267\u884c\u7684\u64cd\u4f5c\u8986\u76d6\u5148\u6267\u884c\u64cd\u4f5c\u7684\u672c\u8d28\u539f\u56e0\u662f\u4e24\u4e2a\u63a7\u5236\u5668\u65e0\u6cd5\u76f8\u4e92\u611f\u77e5\uff0c \u90a3\u4e48\u53ea\u9700\u8981\u8ba9 CronHPA \u611f\u77e5 HPA \u7684\u5f53\u524d\u72b6\u6001\u5c31\u80fd\u89e3\u51b3\u51b2\u7a81\u95ee\u9898\u3002

                          \u7cfb\u7edf\u4f1a\u5c06 HPA \u4f5c\u4e3a\u5b9a\u65f6\u4f38\u7f29 CronHPA \u7684\u6269\u7f29\u5bb9\u5bf9\u8c61\uff0c\u4ece\u800c\u5b9e\u73b0\u5bf9\u8be5 HPA \u5b9a\u4e49\u7684 Deployment \u5bf9\u8c61\u7684\u5b9a\u65f6\u6269\u7f29\u5bb9\u3002

                          HPA \u7684\u5b9a\u4e49\u5c06 Deployment \u914d\u7f6e\u5728 scaleTargetRef \u5b57\u6bb5\u4e0b\uff0c\u7136\u540e Deployment \u901a\u8fc7\u81ea\u8eab\u5b9a\u4e49\u67e5\u627e ReplicaSet\uff0c\u6700\u540e\u901a\u8fc7 ReplicaSet \u8c03\u6574\u771f\u5b9e\u7684\u526f\u672c\u6570\u76ee\u3002

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5c06 CronHPA \u4e2d\u7684 scaleTargetRef \u8bbe\u7f6e\u4e3a HPA \u5bf9\u8c61\uff0c\u7136\u540e\u901a\u8fc7 HPA \u5bf9\u8c61\u6765\u5bfb\u627e\u771f\u5b9e\u7684 scaleTargetRef\uff0c\u4ece\u800c\u8ba9 CronHPA \u611f\u77e5 HPA \u7684\u5f53\u524d\u72b6\u6001\u3002

                          CronHPA \u4f1a\u901a\u8fc7\u8c03\u6574 HPA \u7684\u65b9\u5f0f\u611f\u77e5 HPA\u3002CronHPA \u901a\u8fc7\u8bc6\u522b\u8981\u8fbe\u5230\u7684\u526f\u672c\u6570\u4e0e\u5f53\u524d\u526f\u672c\u6570\u4e24\u8005\u95f4\u7684\u8f83\u5927\u503c\uff0c \u5224\u65ad\u662f\u5426\u9700\u8981\u6269\u7f29\u5bb9\u53ca\u4fee\u6539 HPA \u7684\u4e0a\u9650\uff1bCronHPA \u901a\u8fc7\u8bc6\u522b CronHPA \u8981\u8fbe\u5230\u7684\u526f\u672c\u6570\u4e0e HPA \u7684\u914d\u7f6e\u95f4\u7684\u8f83\u5c0f\u503c\uff0c\u5224\u65ad\u662f\u5426\u9700\u8981\u4fee\u6539 HPA \u7684\u4e0b\u9650\u3002

                          "},{"location":"end-user/kpanda/scale/install-cronhpa.html","title":"\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6","text":"

                          \u5bb9\u5668\u526f\u672c\u5b9a\u65f6\u6c34\u5e73\u6269\u7f29\u5bb9\u7b56\u7565\uff08CronHPA\uff09\u80fd\u591f\u4e3a\u5468\u671f\u6027\u9ad8\u5e76\u53d1\u5e94\u7528\u63d0\u4f9b\u7a33\u5b9a\u7684\u8ba1\u7b97\u8d44\u6e90\u4fdd\u969c\uff0c kubernetes-cronhpa-controller \u5219\u662f\u5b9e\u73b0 CronHPA \u7684\u5173\u952e\u7ec4\u4ef6\u3002

                          \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\u3002

                          Note

                          \u4e3a\u4e86\u4f7f\u7528 CornHPA\uff0c\u4e0d\u4ec5\u9700\u8981\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\uff0c\u8fd8\u8981\u5b89\u88c5 metrics-server \u63d2\u4ef6\u3002

                          "},{"location":"end-user/kpanda/scale/install-cronhpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          "},{"location":"end-user/kpanda/scale/install-cronhpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 kubernetes-cronhpa-controller \u63d2\u4ef6\u3002

                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u627e\u5230\u9700\u8981\u5b89\u88c5\u6b64\u63d2\u4ef6\u7684\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u8be5\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d \uff0c\u70b9\u51fb\u76ee\u6807\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u5728 CronHPA \u53f3\u4fa7\u70b9\u51fb \u5b89\u88c5 \u3002

                          3. \u9605\u8bfb\u8be5\u63d2\u4ef6\u7684\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u63a8\u8350\u5b89\u88c5 1.3.0 \u6216\u66f4\u9ad8\u7248\u672c\u3002

                          4. \u53c2\u8003\u4ee5\u4e0b\u8bf4\u660e\u914d\u7f6e\u53c2\u6570\u3002

                            • \u540d\u79f0\uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 kubernetes-cronhpa-controller\u3002
                            • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u63d2\u4ef6\u5b89\u88c5\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u6b64\u5904\u4ee5 default \u4e3a\u4f8b\u3002
                            • \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 1.3.0 \u7248\u672c\u4e3a\u4f8b\u3002
                            • \u5c31\u7eea\u7b49\u5f85\uff1a\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u7684\u6240\u6709\u5173\u8054\u8d44\u6e90\u90fd\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
                            • \u5931\u8d25\u5220\u9664\uff1a\u5982\u679c\u63d2\u4ef6\u5b89\u88c5\u5931\u8d25\uff0c\u5219\u5220\u9664\u5df2\u7ecf\u5b89\u88c5\u7684\u5173\u8054\u8d44\u6e90\u3002\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u3002
                            • \u8be6\u60c5\u65e5\u5fd7\uff1a\u5f00\u542f\u540e\uff0c\u5c06\u8bb0\u5f55\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

                            Note

                            \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a\u201c\u8fd0\u884c\u4e2d\u201d\u72b6\u6001\u3002

                          5. \u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \uff0c\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u3002\u7a0d\u7b49\u51e0\u5206\u949f\u540e\u5237\u65b0\u9875\u9762\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

                            Warning

                            \u5982\u9700\u5220\u9664 kubernetes-cronhpa-controller \u63d2\u4ef6\uff0c\u5e94\u5728 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u624d\u80fd\u5c06\u5176\u5f7b\u5e95\u5220\u9664\u3002

                            \u5982\u679c\u5728\u5de5\u4f5c\u8d1f\u8f7d\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\u4e0b\u5220\u9664\u63d2\u4ef6\uff0c\u8fd9\u53ea\u662f\u5220\u9664\u4e86\u8be5\u63d2\u4ef6\u7684\u5de5\u4f5c\u8d1f\u8f7d\u526f\u672c\uff0c\u63d2\u4ef6\u672c\u8eab\u4ecd\u672a\u5220\u9664\uff0c\u540e\u7eed\u91cd\u65b0\u5b89\u88c5\u8be5\u63d2\u4ef6\u65f6\u4e5f\u4f1a\u63d0\u793a\u9519\u8bef\u3002

                          6. \u56de\u5230\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\u4e0b\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u53ef\u4ee5\u770b\u5230\u754c\u9762\u663e\u793a \u63d2\u4ef6\u5df2\u5b89\u88c5 \u3002\u73b0\u5728\u53ef\u4ee5\u5f00\u59cb\u521b\u5efa CronHPA \u7b56\u7565\u4e86\u3002

                          "},{"location":"end-user/kpanda/scale/install-metrics-server.html","title":"\u5b89\u88c5 metrics-server \u63d2\u4ef6","text":"

                          metrics-server \u662f Kubernetes \u5185\u7f6e\u7684\u8d44\u6e90\u4f7f\u7528\u6307\u6807\u91c7\u96c6\u7ec4\u4ef6\u3002 \u60a8\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u5f39\u6027\u4f38\u7f29\uff08HPA\uff09\u7b56\u7565\u6765\u5b9e\u73b0\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u81ea\u52a8\u6c34\u5e73\u4f38\u7f29 Pod \u526f\u672c\u3002

                          \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5 metrics-server \u3002

                          "},{"location":"end-user/kpanda/scale/install-metrics-server.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u5b89\u88c5 metrics-server \u63d2\u4ef6\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u5df2\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u5df2\u521b\u5efa Kubernetes \u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u5df2\u5b8c\u6210\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u7684\u521b\u5efa\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          "},{"location":"end-user/kpanda/scale/install-metrics-server.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u8bf7\u6267\u884c\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 metrics-server \u63d2\u4ef6\u3002

                          1. \u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u4e0b\u7684\u5f39\u6027\u4f38\u7f29\u9875\u9762\uff0c\u70b9\u51fb \u53bb\u5b89\u88c5 \uff0c\u8fdb\u5165 metrics-server \u63d2\u4ef6\u5b89\u88c5\u754c\u9762\u3002

                          2. \u9605\u8bfb metrics-server \u63d2\u4ef6\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u672c\u6587\u5c06\u4ee5 3.8.2 \u7248\u672c\u4e3a\u4f8b\u8fdb\u884c\u5b89\u88c5\uff0c\u63a8\u8350\u60a8\u5b89\u88c5 3.8.2 \u53ca\u66f4\u9ad8\u7248\u672c\u3002

                          3. \u5728\u5b89\u88c5\u914d\u7f6e\u754c\u9762\u914d\u7f6e\u57fa\u672c\u53c2\u6570\u3002

                            • \u540d\u79f0\uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 metrics-server-01\u3002
                            • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u63d2\u4ef6\u5b89\u88c5\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6b64\u5904\u4ee5 default \u4e3a\u4f8b\u3002
                            • \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 3.8.2 \u7248\u672c\u4e3a\u4f8b\u3002
                            • \u5c31\u7eea\u7b49\u5f85\uff1a\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u6240\u6709\u5173\u8054\u8d44\u6e90\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002
                            • \u5931\u8d25\u5220\u9664\uff1a\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f\u5c31\u7eea\u7b49\u5f85\u3002\u5982\u679c\u5b89\u88c5\u5931\u8d25\uff0c\u5c06\u5220\u9664\u5b89\u88c5\u76f8\u5173\u8d44\u6e90\u3002
                            • \u8be6\u60c5\u65e5\u5fd7\uff1a\u5f00\u542f\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\u7684\u8be6\u7ec6\u8f93\u51fa\u3002

                            Note

                            \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u7ecf\u8fc7\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a \u8fd0\u884c\u4e2d \u72b6\u6001\u3002

                          4. \u9ad8\u7ea7\u53c2\u6570\u914d\u7f6e

                            • \u5982\u679c\u96c6\u7fa4\u7f51\u7edc\u65e0\u6cd5\u8bbf\u95ee k8s.gcr.io \u4ed3\u5e93\uff0c\u8bf7\u5c1d\u8bd5\u4fee\u6539 repositort \u53c2\u6570\u4e3a repository: k8s.m.daocloud.io/metrics-server/metrics-server

                            • \u5b89\u88c5 metrics-server \u63d2\u4ef6\u8fd8\u9700\u63d0\u4f9b SSL \u8bc1\u4e66\u3002\u5982\u9700\u7ed5\u8fc7\u8bc1\u4e66\u6821\u9a8c\uff0c\u9700\u8981\u5728 defaultArgs: \u5904\u6dfb\u52a0 - --kubelet-insecure-tls \u53c2\u6570\u3002

                            \u70b9\u51fb\u67e5\u770b\u63a8\u8350\u7684 YAML \u53c2\u6570
                            image:\n  repository: k8s.m.daocloud.io/metrics-server/metrics-server # \u5c06\u4ed3\u5e93\u6e90\u5730\u5740\u4fee\u6539\u4e3a k8s.m.daocloud.io\n  tag: ''\n  pullPolicy: IfNotPresent\nimagePullSecrets: []\nnameOverride: ''\nfullnameOverride: ''\nserviceAccount:\n  create: true\n  annotations: {}\n  name: ''\nrbac:\n  create: true\n  pspEnabled: false\napiService:\n  create: true\npodLabels: {}\npodAnnotations: {}\npodSecurityContext: {}\nsecurityContext:\n  allowPrivilegeEscalation: false\n  readOnlyRootFilesystem: true\n  runAsNonRoot: true\n  runAsUser: 1000\npriorityClassName: system-cluster-critical\ncontainerPort: 4443\nhostNetwork:\n  enabled: false\nreplicas: 1\nupdateStrategy: {}\npodDisruptionBudget:\n  enabled: false\n  minAvailable: null\n  maxUnavailable: null\ndefaultArgs:\n  - '--cert-dir=/tmp'\n  - '--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname'\n  - '--kubelet-use-node-status-port'\n  - '--metric-resolution=15s'\n  - --kubelet-insecure-tls # \u7ed5\u8fc7\u8bc1\u4e66\u6821\u9a8c\nargs: []\nlivenessProbe:\n  httpGet:\n    path: /livez\n    port: https\n    scheme: HTTPS\n  initialDelaySeconds: 0\n  periodSeconds: 10\n  failureThreshold: 3\nreadinessProbe:\n  httpGet:\n    path: /readyz\n    port: https\n    scheme: HTTPS\n  initialDelaySeconds: 20\n  periodSeconds: 10\n  failureThreshold: 3\nservice:\n  type: ClusterIP\n  port: 443\n  annotations: {}\n  labels: {}\nmetrics:\n  enabled: false\nserviceMonitor:\n  enabled: false\n  additionalLabels: {}\n  interval: 1m\n  scrapeTimeout: 10s\nresources: {}\nextraVolumeMounts: []\nextraVolumes: []\nnodeSelector: {}\ntolerations: []\naffinity: {}\n
                          5. \u70b9\u51fb \u786e\u5b9a \u6309\u94ae\uff0c\u5b8c\u6210 metrics-server \u63d2\u4ef6\u7684\u5b89\u88c5\uff0c\u4e4b\u540e\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\uff0c \u7a0d\u7b49\u51e0\u5206\u949f\u540e\uff0c\u4e3a\u9875\u9762\u6267\u884c\u5237\u65b0\u64cd\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

                          Note

                          \u5220\u9664 metrics-server \u63d2\u4ef6\u65f6\uff0c\u5728 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u624d\u80fd\u5f7b\u5e95\u5220\u9664\u8be5\u63d2\u4ef6\u3002\u5982\u679c\u4ec5\u5728\u5de5\u4f5c\u8d1f\u8f7d\u9875\u9762\u5220\u9664 metrics-server \uff0c \u8fd9\u53ea\u662f\u5220\u9664\u4e86\u8be5\u5e94\u7528\u7684\u5de5\u4f5c\u8d1f\u8f7d\u526f\u672c\uff0c\u5e94\u7528\u672c\u8eab\u4ecd\u672a\u5220\u9664\uff0c\u540e\u7eed\u91cd\u65b0\u5b89\u88c5\u8be5\u63d2\u4ef6\u65f6\u4e5f\u4f1a\u63d0\u793a\u9519\u8bef\u3002

                          "},{"location":"end-user/kpanda/scale/install-vpa.html","title":"\u5b89\u88c5 vpa \u63d2\u4ef6","text":"

                          \u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7b56\u7565\uff08Vertical Pod Autoscaler, VPA\uff09\u80fd\u591f\u8ba9\u96c6\u7fa4\u7684\u8d44\u6e90\u914d\u7f6e\u66f4\u52a0\u5408\u7406\uff0c\u907f\u514d\u96c6\u7fa4\u8d44\u6e90\u6d6a\u8d39\u3002 vpa \u5219\u662f\u5b9e\u73b0\u5bb9\u5668\u5782\u76f4\u6269\u7f29\u5bb9\u7684\u5173\u952e\u7ec4\u4ef6\u3002

                          \u672c\u8282\u4ecb\u7ecd\u5982\u4f55\u5b89\u88c5 vpa \u63d2\u4ef6\u3002

                          \u4e3a\u4e86\u4f7f\u7528 VPA \u7b56\u7565\uff0c\u4e0d\u4ec5\u9700\u8981\u5b89\u88c5 __vpa__ \u63d2\u4ef6\uff0c\u8fd8\u8981[\u5b89\u88c5 __metrics-server__ \u63d2\u4ef6](install-metrics-server.md)\u3002\n
                          "},{"location":"end-user/kpanda/scale/install-vpa.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u5b89\u88c5 vpa \u63d2\u4ef6\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          "},{"location":"end-user/kpanda/scale/install-vpa.html#_2","title":"\u64cd\u4f5c\u6b65\u9aa4","text":"

                          \u53c2\u8003\u5982\u4e0b\u6b65\u9aa4\u4e3a\u96c6\u7fa4\u5b89\u88c5 vpa \u63d2\u4ef6\u3002

                          1. \u5728 \u96c6\u7fa4\u5217\u8868 \u9875\u9762\u627e\u5230\u9700\u8981\u5b89\u88c5\u6b64\u63d2\u4ef6\u7684\u76ee\u6807\u96c6\u7fa4\uff0c\u70b9\u51fb\u8be5\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d \uff0c\u70b9\u51fb\u76ee\u6807\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u3002

                          2. \u5728\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u5728 VPA \u53f3\u4fa7\u70b9\u51fb \u5b89\u88c5 \u3002

                            3. \u9605\u8bfb\u8be5\u63d2\u4ef6\u7684\u76f8\u5173\u4ecb\u7ecd\uff0c\u9009\u62e9\u7248\u672c\u540e\u70b9\u51fb \u5b89\u88c5 \u6309\u94ae\u3002\u63a8\u8350\u5b89\u88c5 1.5.0 \u6216\u66f4\u9ad8\u7248\u672c\u3002

                            4. \u67e5\u770b\u4ee5\u4e0b\u8bf4\u660e\u914d\u7f6e\u53c2\u6570\u3002

                            - \u540d\u79f0\uff1a\u8f93\u5165\u63d2\u4ef6\u540d\u79f0\uff0c\u8bf7\u6ce8\u610f\u540d\u79f0\u6700\u957f 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 kubernetes-cronhpa-controller\u3002 - \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u63d2\u4ef6\u5b89\u88c5\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u6b64\u5904\u4ee5 default \u4e3a\u4f8b\u3002 - \u7248\u672c\uff1a\u63d2\u4ef6\u7684\u7248\u672c\uff0c\u6b64\u5904\u4ee5 4.5.0 \u7248\u672c\u4e3a\u4f8b\u3002 - \u5c31\u7eea\u7b49\u5f85\uff1a\u542f\u7528\u540e\uff0c\u5c06\u7b49\u5f85\u5e94\u7528\u4e0b\u7684\u6240\u6709\u5173\u8054\u8d44\u6e90\u90fd\u5904\u4e8e\u5c31\u7eea\u72b6\u6001\uff0c\u624d\u4f1a\u6807\u8bb0\u5e94\u7528\u5b89\u88c5\u6210\u529f\u3002 - \u5931\u8d25\u5220\u9664\uff1a\u5982\u679c\u63d2\u4ef6\u5b89\u88c5\u5931\u8d25\uff0c\u5219\u5220\u9664\u5df2\u7ecf\u5b89\u88c5\u7684\u5173\u8054\u8d44\u6e90\u3002\u5f00\u542f\u540e\uff0c\u5c06\u9ed8\u8ba4\u540c\u6b65\u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u3002 - \u8be6\u60c5\u65e5\u5fd7\uff1a\u5f00\u542f\u540e\uff0c\u5c06\u8bb0\u5f55\u5b89\u88c5\u8fc7\u7a0b\u7684\u8be6\u7ec6\u65e5\u5fd7\u3002

                            Note

                            \u5f00\u542f \u5c31\u7eea\u7b49\u5f85 \u548c/\u6216 \u5931\u8d25\u5220\u9664 \u540e\uff0c\u5e94\u7528\u9700\u8981\u7ecf\u8fc7\u8f83\u957f\u65f6\u95f4\u624d\u4f1a\u88ab\u6807\u8bb0\u4e3a\u201c\u8fd0\u884c\u4e2d\u201d\u72b6\u6001\u3002

                          3. \u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \uff0c\u7cfb\u7edf\u5c06\u81ea\u52a8\u8df3\u8f6c\u81f3 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u3002\u7a0d\u7b49\u51e0\u5206\u949f\u540e\u5237\u65b0\u9875\u9762\u4f5c\uff0c\u5373\u53ef\u770b\u5230\u521a\u521a\u5b89\u88c5\u7684\u5e94\u7528\u3002

                            Warning

                            \u5982\u9700\u5220\u9664 vpa \u63d2\u4ef6\uff0c\u5e94\u5728 Helm \u5e94\u7528 \u5217\u8868\u9875\u9762\u624d\u80fd\u5c06\u5176\u5f7b\u5e95\u5220\u9664\u3002

                            \u5982\u679c\u5728\u5de5\u4f5c\u8d1f\u8f7d\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\u4e0b\u5220\u9664\u63d2\u4ef6\uff0c\u8fd9\u53ea\u662f\u5220\u9664\u4e86\u8be5\u63d2\u4ef6\u7684\u5de5\u4f5c\u8d1f\u8f7d\u526f\u672c\uff0c\u63d2\u4ef6\u672c\u8eab\u4ecd\u672a\u5220\u9664\uff0c\u540e\u7eed\u91cd\u65b0\u5b89\u88c5\u8be5\u63d2\u4ef6\u65f6\u4e5f\u4f1a\u63d0\u793a\u9519\u8bef\u3002

                          4. \u56de\u5230\u5de5\u4f5c\u8d1f\u8f7d\u8be6\u60c5\u9875\u9762\u4e0b\u7684 \u5f39\u6027\u4f38\u7f29 \u9875\u7b7e\uff0c\u53ef\u4ee5\u770b\u5230\u754c\u9762\u663e\u793a \u63d2\u4ef6\u5df2\u5b89\u88c5 \u3002\u73b0\u5728\u53ef\u4ee5\u5f00\u59cb\u521b\u5efa VPA \u7b56\u7565\u4e86\u3002

                          "},{"location":"end-user/kpanda/scale/knative/install.html","title":"\u5b89\u88c5","text":"

                          Knative \u662f\u4e00\u4e2a\u9762\u5411\u65e0\u670d\u52a1\u5668\u90e8\u7f72\u7684\u8de8\u5e73\u53f0\u89e3\u51b3\u65b9\u6848\u3002

                          "},{"location":"end-user/kpanda/scale/knative/install.html#_2","title":"\u6b65\u9aa4","text":"
                          1. \u767b\u5f55\u96c6\u7fa4\uff0c\u70b9\u51fb\u4fa7\u8fb9\u680f Helm \u5e94\u7528 -> Helm \u6a21\u677f \uff0c\u5728\u53f3\u4fa7\u4e0a\u65b9\u641c\u7d22\u6846\u8f93\u5165 knative \uff0c\u7136\u540e\u6309\u56de\u8f66\u952e\u641c\u7d22\u3002

                          2. \u70b9\u51fb\u641c\u7d22\u51fa\u7684 knative-operator \uff0c\u8fdb\u5165\u5b89\u88c5\u914d\u7f6e\u754c\u9762\u3002\u4f60\u53ef\u4ee5\u5728\u8be5\u754c\u9762\u67e5\u770b\u53ef\u7528\u7248\u672c\u4ee5\u53ca Helm values \u7684 Parameters \u53ef\u9009\u9879\u3002

                          3. \u70b9\u51fb\u5b89\u88c5\u6309\u94ae\u540e\uff0c\u8fdb\u5165\u5b89\u88c5\u914d\u7f6e\u754c\u9762\u3002

                          4. \u8f93\u5165\u540d\u79f0\uff0c\u5b89\u88c5\u79df\u6237\uff0c\u5efa\u8bae\u52fe\u9009 \u5c31\u7eea\u7b49\u5f85 \u548c \u8be6\u7ec6\u65e5\u5fd7 \u3002

                          5. \u5728\u4e0b\u65b9\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u52fe\u9009 Serving \uff0c\u5e76\u8f93\u5165 Knative Serving \u7ec4\u4ef6\u7684\u5b89\u88c5\u79df\u6237\uff0c\u4f1a\u5728\u5b89\u88c5\u540e\u90e8\u7f72 Knative Serving \u7ec4\u4ef6\uff0c\u8be5\u7ec4\u4ef6\u7531 Knative Operator \u7ba1\u7406\u3002

                          "},{"location":"end-user/kpanda/scale/knative/knative.html","title":"Kantive \u4ecb\u7ecd","text":"

                          Knative \u63d0\u4f9b\u4e86\u4e00\u79cd\u66f4\u9ad8\u5c42\u6b21\u7684\u62bd\u8c61\uff0c\u7b80\u5316\u5e76\u52a0\u901f\u4e86\u5728 Kubernetes \u4e0a\u6784\u5efa\u3001\u90e8\u7f72\u548c\u7ba1\u7406\u5e94\u7528\u7684\u8fc7\u7a0b\u3002\u5b83\u4f7f\u5f97\u5f00\u53d1\u4eba\u5458\u80fd\u591f\u66f4\u4e13\u6ce8\u4e8e\u4e1a\u52a1\u903b\u8f91\u7684\u5b9e\u73b0\uff0c\u800c\u5c06\u5927\u90e8\u5206\u57fa\u7840\u8bbe\u65bd\u548c\u8fd0\u7ef4\u5de5\u4f5c\u4ea4\u7ed9 Knative \u53bb\u5904\u7406\uff0c\u4ece\u800c\u663e\u8457\u63d0\u9ad8\u751f\u4ea7\u529b\u3002

                          "},{"location":"end-user/kpanda/scale/knative/knative.html#_1","title":"\u7ec4\u4ef6","text":"

                          knative-operator \u8fd0\u884c\u7ec4\u4ef6\u5982\u4e0b\u3002

                          knative-operator   knative-operator-58f7d7db5c-7f6r5      1/1     Running     0     6m55s\nknative-operator   operator-webhook-667dc67bc-qvrv4       1/1     Running     0     6m55s\n

                          knative-serving \u7ec4\u4ef6\u5982\u4e0b\u3002

                          knative-serving        3scale-kourier-gateway-d69fbfbd-bd8d8   1/1     Running     0                 7m13s\nknative-serving        activator-7c6fddd698-wdlng              1/1     Running     0                 7m3s\nknative-serving        autoscaler-8f4b876bb-kd25p              1/1     Running     0                 7m17s\nknative-serving        autoscaler-hpa-5f7f74679c-vkc7p         1/1     Running     0                 7m15s\nknative-serving        controller-789c896c46-tfvsv             1/1     Running     0                 7m17s\nknative-serving        net-kourier-controller-7db578c889-7gd5l 1/1     Running     0                 7m14s\nknative-serving        webhook-5c88b94c5-78x7m                 1/1     Running     0                 7m1s\nknative-serving        storage-version-migration-serving-serving-1.12.2-t7zvd   0/1  Completed   0   7m15s\n
                          \u7ec4\u4ef6 \u4f5c\u7528 Activator \u5bf9\u8bf7\u6c42\u6392\u961f\uff08\u5982\u679c\u4e00\u4e2a Knative Service \u5df2\u7ecf\u7f29\u51cf\u5230\u96f6\uff09\u3002\u8c03\u7528 autoscaler\uff0c\u5c06\u7f29\u51cf\u5230 0 \u7684\u670d\u52a1\u6062\u590d\u5e76\u8f6c\u53d1\u6392\u961f\u7684\u8bf7\u6c42\u3002Activator \u8fd8\u53ef\u4ee5\u5145\u5f53\u8bf7\u6c42\u7f13\u51b2\u5668\uff0c\u5904\u7406\u7a81\u53d1\u6d41\u91cf\u3002 Autoscaler Autoscaler \u8d1f\u8d23\u6839\u636e\u914d\u7f6e\u3001\u6307\u6807\u548c\u8fdb\u5165\u7684\u8bf7\u6c42\u6765\u7f29\u653e Knative \u670d\u52a1\u3002 Controller \u7ba1\u7406 Knative CR \u7684\u72b6\u6001\u3002\u5b83\u4f1a\u76d1\u89c6\u591a\u4e2a\u5bf9\u8c61\uff0c\u7ba1\u7406\u4f9d\u8d56\u8d44\u6e90\u7684\u751f\u547d\u5468\u671f\uff0c\u5e76\u66f4\u65b0\u8d44\u6e90\u72b6\u6001\u3002 Queue-Proxy Sidecar \u5bb9\u5668\uff0c\u6bcf\u4e2a Knative Service \u90fd\u4f1a\u6ce8\u5165\u4e00\u4e2a\u3002\u8d1f\u8d23\u6536\u96c6\u6d41\u91cf\u6570\u636e\u5e76\u62a5\u544a\u7ed9 Autoscaler\uff0cAutoscaler \u6839\u636e\u8fd9\u4e9b\u6570\u636e\u548c\u9884\u8bbe\u7684\u89c4\u5219\u6765\u53d1\u8d77\u6269\u5bb9\u6216\u7f29\u5bb9\u8bf7\u6c42\u3002 Webhooks Knative Serving \u6709\u51e0\u4e2a Webhooks \u8d1f\u8d23\u9a8c\u8bc1\u548c\u53d8\u66f4 Knative \u8d44\u6e90\u3002"},{"location":"end-user/kpanda/scale/knative/knative.html#ingress","title":"Ingress \u6d41\u91cf\u5165\u53e3\u65b9\u6848","text":"\u65b9\u6848 \u9002\u7528\u573a\u666f Istio \u5982\u679c\u5df2\u7ecf\u7528\u4e86 Istio\uff0c\u53ef\u4ee5\u9009\u62e9 Istio \u4f5c\u4e3a\u6d41\u91cf\u5165\u53e3\u65b9\u6848\u3002 Contour \u5982\u679c\u96c6\u7fa4\u4e2d\u5df2\u7ecf\u542f\u7528\u4e86 Contour\uff0c\u53ef\u4ee5\u9009\u62e9 Contour \u4f5c\u4e3a\u6d41\u91cf\u5165\u53e3\u65b9\u6848\u3002 Kourier \u5982\u679c\u5728\u6ca1\u6709\u4e0a\u8ff0 2 \u79cd Ingress \u7ec4\u4ef6\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 Knative \u57fa\u4e8e Envoy \u5b9e\u73b0\u7684 Kourier Ingress \u4f5c\u4e3a\u6d41\u91cf\u5165\u53e3\u3002"},{"location":"end-user/kpanda/scale/knative/knative.html#autoscaler","title":"Autoscaler \u65b9\u6848\u5bf9\u6bd4","text":"Autoscaler \u7c7b\u578b \u662f\u5426\u4e3a Knative Serving \u6838\u5fc3\u90e8\u5206 \u9ed8\u8ba4\u542f\u7528 Scale to Zero \u652f\u6301 \u57fa\u4e8e CPU \u7684 Autoscaling \u652f\u6301 Knative Pod Autoscaler (KPA) \u662f \u662f \u662f \u5426 Horizontal Pod Autoscaler (HPA) \u5426 \u9700\u5b89\u88c5 Knative Serving \u540e\u542f\u7528 \u5426 \u662f"},{"location":"end-user/kpanda/scale/knative/knative.html#crd","title":"CRD","text":"\u8d44\u6e90\u7c7b\u578b API \u540d\u79f0 \u63cf\u8ff0 Services service.serving.knative.dev \u81ea\u52a8\u7ba1\u7406 Workload \u7684\u6574\u4e2a\u751f\u547d\u5468\u671f\uff0c\u63a7\u5236\u5176\u4ed6\u5bf9\u8c61\u7684\u521b\u5efa\uff0c\u786e\u4fdd\u5e94\u7528\u5177\u6709 Routes\u3001Configurations \u4ee5\u53ca\u6bcf\u6b21\u66f4\u65b0\u65f6\u7684\u65b0 revision\u3002 Routes route.serving.knative.dev \u5c06\u7f51\u7edc\u7aef\u70b9\u6620\u5c04\u5230\u4e00\u4e2a\u6216\u591a\u4e2a\u4fee\u8ba2\u7248\u672c\uff0c\u652f\u6301\u6d41\u91cf\u5206\u914d\u548c\u7248\u672c\u8def\u7531\u3002 Configurations configuration.serving.knative.dev \u7ef4\u62a4\u90e8\u7f72\u7684\u671f\u671b\u72b6\u6001\uff0c\u63d0\u4f9b\u4ee3\u7801\u548c\u914d\u7f6e\u4e4b\u95f4\u7684\u5206\u79bb\uff0c\u9075\u5faa Twelve-Factor \u5e94\u7528\u7a0b\u5e8f\u65b9\u6cd5\u8bba\uff0c\u4fee\u6539\u914d\u7f6e\u4f1a\u521b\u5efa\u65b0\u7684 revision\u3002 Revisions revision.serving.knative.dev \u6bcf\u6b21\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u4fee\u6539\u7684\u65f6\u95f4\u70b9\u5feb\u7167\uff0c\u662f\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff0c\u53ef\u6839\u636e\u6d41\u91cf\u81ea\u52a8\u6269\u5bb9\u548c\u7f29\u5bb9\u3002"},{"location":"end-user/kpanda/scale/knative/playground.html","title":"Knative \u4f7f\u7528\u5b9e\u8df5","text":"

                          \u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u51e0\u4e2a\u5b9e\u8df5\u6765\u6df1\u5165\u4e86\u89e3\u5b66\u4e60 Knative\u3002

                          "},{"location":"end-user/kpanda/scale/knative/playground.html#case-1-hello-world","title":"case 1 - Hello World","text":"
                          apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n

                          \u53ef\u4ee5\u4f7f\u7528 kubectl \u5df2\u90e8\u7f72\u7684\u5e94\u7528\u7684\u72b6\u6001\uff0c\u8fd9\u4e2a\u5e94\u7528\u7531 knative \u81ea\u52a8\u914d\u7f6e\u4e86 ingress \u548c\u4f38\u7f29\u5668\u3002

                          ~ kubectl get service.serving.knative.dev/hello\nNAME    URL                                              LATESTCREATED   LATESTREADY   READY   REASON\nhello   http://hello.knative-serving.knative.loulan.me   hello-00001     hello-00001   True\n

                          \u90e8\u7f72\u51fa\u7684 Pod YAML \u5982\u4e0b\uff0c\u7531 2 \u4e2a Pod \u7ec4\u6210\uff1auser-container \u548c queue-proxy\u3002

                          apiVersion: v1\nkind: Pod\nmetadata:\n  name: hello-00003-deployment-5fcb8ccbf-7qjfk\nspec:\n  containers:\n  - name: user-container\n  - name: queue-proxy\n

                          \u8bf7\u6c42\u6d41\uff1a

                          1. case1 \u5728\u4f4e\u6d41\u91cf\u6216\u96f6\u6d41\u91cf\u65f6\uff0c\u6d41\u91cf\u5c06\u8def\u7531\u5230 activator
                          2. case2 \u6d41\u91cf\u5927\u65f6\uff0c\u6d41\u91cf\u5927\u4e8e target-burst-capacity \u65f6\u624d\u76f4\u63a5\u8def\u7531\u5230 Pod
                            1. \u914d\u7f6e\u4e3a 0\uff0c\u53ea\u6709\u4ece 0 \u6269\u5bb9\u5b58\u5728
                            2. \u914d\u7f6e\u4e3a -1\uff0cactivator \u4f1a\u4e00\u76f4\u5b58\u5728\u8bf7\u6c42\u8def\u5f84
                            3. \u914d\u7f6e\u4e3a >0\uff0c\u89e6\u53d1\u6269\u7f29\u5bb9\u4e4b\u524d\uff0c\u7cfb\u7edf\u80fd\u591f\u989d\u5916\u5904\u7406\u7684\u5e76\u53d1\u8bf7\u6c42\u6570\u91cf\u3002
                          3. case3 \u6d41\u91cf\u518d\u53d8\u5c0f\u65f6\uff0c\u6d41\u91cf\u4f4e\u4e8e current_demand + target-burst-capacity > (pods * concurrency-target) \u65f6\u5c06\u518d\u6b21\u8def\u7531\u5230 activator

                            \u5f85\u5904\u7406\u7684\u8bf7\u6c42\u603b\u6570 + \u80fd\u63a5\u53d7\u7684\u8d85\u8fc7\u76ee\u6807\u5e76\u53d1\u6570\u7684\u8bf7\u6c42\u6570\u91cf > \u6bcf\u4e2a Pod \u7684\u76ee\u6807\u5e76\u53d1\u6570 * Pod \u6570\u91cf

                          "},{"location":"end-user/kpanda/scale/knative/playground.html#case-2-","title":"case 2 - \u57fa\u4e8e\u5e76\u53d1\u5f39\u6027\u4f38\u7f29","text":"

                          \u6211\u4eec\u9996\u5148\u5728\u96c6\u7fa4\u5e94\u7528\u4e0b\u9762 YAML \u5b9a\u4e49\u3002

                          apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    metadata:\n      annotations:\n        autoscaling.knative.dev/target: \"1\"\n        autoscaling.knative.dev/class: \"kpa.autoscaling.knative.dev\"\n    spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n

                          \u6267\u884c\u4e0b\u9762\u547d\u4ee4\u6d4b\u8bd5\uff0c\u5e76\u53ef\u4ee5\u901a\u8fc7 kubectl get pods -A -w \u6765\u89c2\u5bdf\u6269\u5bb9\u7684 Pod\u3002

                          wrk -t2 -c4 -d6s http://hello.knative-serving.knative.daocloud.io/\n
                          "},{"location":"end-user/kpanda/scale/knative/playground.html#case-3-","title":"case 3 - \u57fa\u4e8e\u5e76\u53d1\u5f39\u6027\u4f38\u7f29\uff0c\u8fbe\u5230\u7279\u5b9a\u6bd4\u4f8b\u63d0\u524d\u6269\u5bb9","text":"

                          \u6211\u4eec\u53ef\u4ee5\u5f88\u8f7b\u677e\u7684\u5b9e\u73b0\uff0c\u4f8b\u5982\u9650\u5236\u6bcf\u4e2a\u5bb9\u5668\u5e76\u53d1\u4e3a 10\uff0c\u53ef\u4ee5\u901a\u8fc7 autoscaling.knative.dev/target-utilization-percentage: 70 \u6765\u5b9e\u73b0\uff0c\u8fbe\u5230 70% \u5c31\u5f00\u59cb\u6269\u5bb9 Pod\u3002

                          apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    metadata:\n      annotations:\n        autoscaling.knative.dev/target: \"10\"\n        autoscaling.knative.dev/class: \"kpa.autoscaling.knative.dev\"\n \u00a0 \u00a0 \u00a0 \u00a0autoscaling.knative.dev/target-utilization-percentage: \"70\" \n \u00a0 \u00a0 \u00a0 \u00a0autoscaling.knative.dev/metric: \"concurrency\"\n \u00a0 \u00a0 spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n
                          "},{"location":"end-user/kpanda/scale/knative/playground.html#case-4-","title":"case 4 - \u7070\u5ea6\u53d1\u5e03/\u6d41\u91cf\u767e\u5206\u6bd4","text":"

                          \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 spec.traffic \u5b9e\u73b0\u5230\u6bcf\u4e2a\u7248\u672c\u6d41\u91cf\u7684\u63a7\u5236\u3002

                          apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n  name: hello\nspec:\n  template:\n    metadata:\n      annotations:\n        autoscaling.knative.dev/target: \"1\"  \n        autoscaling.knative.dev/class: \"kpa.autoscaling.knative.dev\"         \n    spec:\n      containers:\n        - image: m.daocloud.io/ghcr.io/knative/helloworld-go:latest\n          ports:\n            - containerPort: 8080\n          env:\n            - name: TARGET\n              value: \"World\"\n  traffic:\n  - latestRevision: true\n    percent: 50\n  - latestRevision: false\n    percent: 50\n    revisionName: hello-00001\n
                          "},{"location":"end-user/kpanda/scale/knative/scene.html","title":"\u4f7f\u7528\u573a\u666f","text":""},{"location":"end-user/kpanda/scale/knative/scene.html#_2","title":"\u9002\u5408\u7684\u573a\u666f","text":"
                          • \u77ed\u8fde\u63a5\u9ad8\u5e76\u53d1\u4e1a\u52a1
                          • \u9700\u8981\u5f39\u6027\u4f38\u7f29\u7684\u4e1a\u52a1
                          • \u5927\u91cf\u5e94\u7528\u9700\u8981\u7f29\u5bb9\u5230 0 \u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u7387
                          • AI Serving \u670d\u52a1\uff0c\u57fa\u4e8e\u7279\u5b9a\u6307\u6807\u8fdb\u884c\u6269\u5bb9

                          Tip

                          \u77ed\u8fde\u63a5\u9ad8\u5e76\u53d1\u4e1a\u52a1\u4ee5\u53ca\u9700\u8981\u5f39\u6027\u4f38\u7f29\u7684\u4e1a\u52a1\uff0c\u63a8\u8350\u4f7f\u7528 HPA \u548c VPA \u80fd\u529b\u3002

                          "},{"location":"end-user/kpanda/scale/knative/scene.html#_3","title":"\u4e0d\u9002\u5408\u7684\u573a\u666f","text":"
                          • \u957f\u8fde\u63a5\u4e1a\u52a1
                          • \u5ef6\u65f6\u654f\u611f\u4e1a\u52a1
                          • \u57fa\u4e8e cookie \u7684\u6d41\u91cf\u5206\u6d41
                          • \u57fa\u4e8e header \u7684\u6d41\u91cf\u5206\u6d41
                          "},{"location":"end-user/kpanda/security/index.html","title":"\u5b89\u5168\u626b\u63cf\u7c7b\u578b","text":"

                          \u5728Kubernetes\uff08\u7b80\u79f0K8s\uff09\u73af\u5883\u4e2d\uff0c\u5b89\u5168\u626b\u63cf\u662f\u786e\u4fdd\u96c6\u7fa4\u5b89\u5168\u6027\u7684\u5173\u952e\u63aa\u65bd\u4e4b\u4e00\u3002\u5176\u4e2d\uff0c\u5408\u89c4\u6027\u626b\u63cf\uff08\u57fa\u4e8eCIS Benchmark\uff09\u3001\u6743\u9650\u626b\u63cf\uff08\u57fa\u4e8ekube-audit\u5ba1\u8ba1\u529f\u80fd\uff09\u3001\u6f0f\u6d1e\u626b\u63cf\uff08\u57fa\u4e8e kube-hunter\uff09\u662f\u4e09\u79cd\u5e38\u89c1\u4e14\u91cd\u8981\u7684\u5b89\u5168\u626b\u63cf\u624b\u6bb5\uff1a

                          • \u5408\u89c4\u6027\u626b\u63cf\uff1a\u57fa\u4e8e CIS Benchmark \u5bf9\u96c6\u7fa4\u8282\u70b9\u8fdb\u884c\u5b89\u5168\u626b\u63cf\u3002CIS Benchmark \u662f\u4e00\u5957\u5168\u7403\u516c\u8ba4\u7684\u6700\u4f73\u5b9e\u8df5\u6807\u51c6\uff0c\u4e3a Kubernetes \u96c6\u7fa4\u63d0\u4f9b\u4e86\u8be6\u7ec6\u7684\u5b89\u5168\u914d\u7f6e\u6307\u5357\u548c\u81ea\u52a8\u5316\u68c0\u67e5\u5de5\u5177\uff08\u5982Kube-Bench\uff09\uff0c\u5e2e\u52a9\u7ec4\u7ec7\u786e\u4fdd\u5176K8s\u96c6\u7fa4\u7b26\u5408\u5b89\u5168\u57fa\u7ebf\u8981\u6c42\uff0c\u4fdd\u62a4\u7cfb\u7edf\u548c\u6570\u636e\u514d\u53d7\u5a01\u80c1\u3002

                          • \u6743\u9650\u626b\u63cf\uff1a\u57fa\u4e8ekube-audit\u5ba1\u8ba1\u529f\u80fd\u3002\u6743\u9650\u626b\u63cf\u4e3b\u8981\u89e3\u51b3\u96c6\u7fa4\u8bbf\u95ee\u63a7\u5236\u548c\u64cd\u4f5c\u900f\u660e\u5ea6\u7684\u95ee\u9898\u3002\u901a\u8fc7\u5ba1\u8ba1\u65e5\u5fd7\uff0c\u96c6\u7fa4\u7ba1\u7406\u5458\u80fd\u591f\u8ffd\u6eaf\u96c6\u7fa4\u8d44\u6e90\u7684\u8bbf\u95ee\u5386\u53f2\uff0c\u8bc6\u522b\u5f02\u5e38\u884c\u4e3a\uff0c\u5982\u672a\u7ecf\u6388\u6743\u7684\u8bbf\u95ee\u3001\u654f\u611f\u6570\u636e\u7684\u6cc4\u9732\u3001\u6709\u5b89\u5168\u6f0f\u6d1e\u7684\u64cd\u4f5c\u8bb0\u5f55\u7b49\u3002\u8fd9\u5bf9\u4e8e\u6545\u969c\u6392\u67e5\u3001\u5b89\u5168\u4e8b\u4ef6\u54cd\u5e94\u4ee5\u53ca\u6ee1\u8db3\u5408\u89c4\u6027\u8981\u6c42\u81f3\u5173\u91cd\u8981\u3002\u6b64\u5916\uff0c\u6743\u9650\u626b\u63cf\u8fd8\u53ef\u4ee5\u5e2e\u52a9\u7ec4\u7ec7\u53d1\u73b0\u6f5c\u5728\u7684\u6743\u9650\u6ee5\u7528\u95ee\u9898\uff0c\u53ca\u65f6\u91c7\u53d6\u63aa\u65bd\u9632\u6b62\u5b89\u5168\u4e8b\u4ef6\u7684\u53d1\u751f\u3002

                          • \u6f0f\u6d1e\u626b\u63cf\uff1a\u57fa\u4e8e kube-hunter\uff0c\u4e3b\u8981\u89e3\u51b3 Kubernetes \u96c6\u7fa4\u4e2d\u5b58\u5728\u7684\u5df2\u77e5\u6f0f\u6d1e\u548c\u914d\u7f6e\u9519\u8bef\u95ee\u9898\u3002kube-hunter \u901a\u8fc7\u6a21\u62df\u653b\u51fb\u884c\u4e3a\uff0c\u80fd\u591f\u8bc6\u522b\u96c6\u7fa4\u4e2d\u53ef\u88ab\u6076\u610f\u5229\u7528\u7684\u6f0f\u6d1e\uff0c\u5982\u672a\u6388\u6743\u8bbf\u95ee\u3001\u66b4\u9732\u7684\u670d\u52a1\u548cAPI\u7aef\u70b9\u3001\u914d\u7f6e\u9519\u8bef\u7684\u89d2\u8272\u548c\u7ed1\u5b9a\u7b56\u7565\u7b49\u3002\u7279\u522b\u5730\uff0ckube-hunter\u80fd\u591f\u8bc6\u522b\u5e76\u62a5\u544a CVE \u6f0f\u6d1e\uff0c\u8fd9\u4e9b\u6f0f\u6d1e\u5982\u679c\u88ab\u6076\u610f\u5229\u7528\uff0c\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u6cc4\u9732\u3001\u670d\u52a1\u4e2d\u65ad\u7b49\u4e25\u91cd\u540e\u679c\u3002CVE \u6f0f\u6d1e\u662f\u7531\u56fd\u9645\u77e5\u540d\u7684\u5b89\u5168\u7ec4\u7ec7\u5982MITRE\u6240\u5b9a\u4e49\u548c\u7ef4\u62a4\u7684\uff0cCVE\u6570\u636e\u5e93\u4e3a\u8f6f\u4ef6\u548c\u56fa\u4ef6\u4e2d\u7684\u5df2\u77e5\u6f0f\u6d1e\u63d0\u4f9b\u4e86\u552f\u4e00\u6807\u8bc6\u7b26\uff0c\u6210\u4e3a\u5168\u7403\u5b89\u5168\u793e\u533a\u5171\u540c\u9075\u5faa\u7684\u6807\u51c6\u3002kube-hunter \u901a\u8fc7\u5229\u7528 CVE \u6570\u636e\u5e93\u4e2d\u7684\u4fe1\u606f\uff0c\u80fd\u591f\u5e2e\u52a9\u7528\u6237\u5feb\u901f\u8bc6\u522b\u5e76\u54cd\u5e94Kubernetes\u96c6\u7fa4\u4e2d\u7684\u5b89\u5168\u5a01\u80c1\u3002

                          "},{"location":"end-user/kpanda/security/index.html#_2","title":"\u5408\u89c4\u6027\u626b\u63cf","text":"

                          \u5408\u89c4\u6027\u626b\u63cf\u7684\u5bf9\u8c61\u662f\u96c6\u7fa4\u8282\u70b9\u3002\u626b\u63cf\u7ed3\u679c\u4e2d\u4f1a\u5217\u51fa\u626b\u63cf\u9879\u4ee5\u53ca\u626b\u63cf\u7ed3\u679c\uff0c\u5e76\u9488\u5bf9\u672a\u901a\u8fc7\u7684\u626b\u63cf\u9879\u7ed9\u51fa\u4fee\u590d\u5efa\u8bae\u3002\u6709\u5173\u626b\u63cf\u65f6\u7528\u5230\u7684\u5177\u4f53\u5b89\u5168\u89c4\u5219\uff0c\u53ef\u53c2\u8003 CIS Kubernetes Benchmark

                          \u68c0\u67e5\u4e0d\u540c\u7c7b\u578b\u7684\u8282\u70b9\u65f6\uff0c\u626b\u63cf\u7684\u4fa7\u91cd\u70b9\u6709\u6240\u4e0d\u540c\u3002

                          • \u626b\u63cf\u63a7\u5236\u5e73\u9762\u8282\u70b9\uff08Controller\uff09

                            • \u5173\u6ce8 API Server \u3001 controller-manager \u3001 scheduler \u3001 kubelet \u7b49\u7cfb\u7edf\u7ec4\u4ef6\u7684\u5b89\u5168\u6027
                            • \u68c0\u67e5 Etcd \u6570\u636e\u5e93\u7684\u5b89\u5168\u914d\u7f6e
                            • \u68c0\u67e5\u96c6\u7fa4\u8eab\u4efd\u9a8c\u8bc1\u673a\u5236\u3001\u6388\u6743\u7b56\u7565\u548c\u7f51\u7edc\u5b89\u5168\u914d\u7f6e\u662f\u5426\u7b26\u5408\u5b89\u5168\u6807\u51c6
                          • \u626b\u63cf\u5de5\u4f5c\u8282\u70b9\uff08Worker\uff09

                            • \u68c0\u67e5 kubelet\u3001Docker\u7b49\u5bb9\u5668\u8fd0\u884c\u65f6\u7684\u914d\u7f6e\u5426\u7b26\u5408\u5b89\u5168\u6807\u51c6
                            • \u68c0\u67e5\u5bb9\u5668\u955c\u50cf\u662f\u5426\u7ecf\u8fc7\u4fe1\u4efb\u9a8c\u8bc1
                            • \u68c0\u67e5\u8282\u70b9\u7684\u7f51\u7edc\u5b89\u5168\u914d\u7f6e\u5426\u7b26\u5408\u5b89\u5168\u6807\u51c6

                          Tip

                          \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u65f6\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u914d\u7f6e\uff0c\u7136\u540e\u57fa\u4e8e\u8be5\u914d\u7f6e\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002\u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u62a5\u544a\u3002

                          "},{"location":"end-user/kpanda/security/index.html#_3","title":"\u6743\u9650\u626b\u63cf","text":"

                          \u6743\u9650\u626b\u63cf\u4fa7\u91cd\u4e8e\u6743\u9650\u95ee\u9898\u5f15\u53d1\u7684\u5b89\u5168\u6f0f\u6d1e\u3002\u6743\u9650\u626b\u63cf\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u8bc6\u522b Kubernetes \u96c6\u7fa4\u4e2d\u7684\u5b89\u5168\u5a01\u80c1\uff0c\u6807\u8bc6\u54ea\u4e9b\u8d44\u6e90\u9700\u8981\u8fdb\u884c\u8fdb\u4e00\u6b65\u7684\u5ba1\u67e5\u548c\u4fdd\u62a4\u63aa\u65bd\u3002\u901a\u8fc7\u6267\u884c\u8fd9\u4e9b\u68c0\u67e5\u9879\uff0c\u7528\u6237\u53ef\u4ee5\u66f4\u6e05\u695a\u3001\u66f4\u5168\u9762\u5730\u4e86\u89e3\u81ea\u5df1\u7684 Kubernetes \u73af\u5883\uff0c\u786e\u4fdd\u96c6\u7fa4\u73af\u5883\u7b26\u5408 Kubernetes \u7684\u6700\u4f73\u5b9e\u8df5\u548c\u5b89\u5168\u6807\u51c6\u3002

                          \u5177\u4f53\u800c\u8a00\uff0c\u6743\u9650\u626b\u63cf\u652f\u6301\u4ee5\u4e0b\u64cd\u4f5c\uff1a

                          • \u626b\u63cf\u96c6\u7fa4\u4e2d\u7684\u6240\u6709\u8282\u70b9\u7684\u5065\u5eb7\u72b6\u6001\u3002

                          • \u626b\u63cf\u96c6\u7fa4\u7ec4\u4ef6\u7684\u8fd0\u884c\u72b6\u51b5\uff0c\u5982 kube-apiserver \u3001 kube-controller-manager \u3001 kube-scheduler \u7b49\u3002

                          • \u626b\u63cf\u5b89\u5168\u914d\u7f6e\uff1a\u68c0\u67e5 Kubernetes \u7684\u5b89\u5168\u914d\u7f6e

                            • API \u5b89\u5168\uff1a\u542f\u7528\u4e86\u4e0d\u5b89\u5168\u7684 API \u7248\u672c\uff0c\u662f\u5426\u8bbe\u7f6e\u4e86\u9002\u5f53\u7684 RBAC \u89d2\u8272\u548c\u6743\u9650\u9650\u5236\u7b49
                            • \u5bb9\u5668\u5b89\u5168\uff1a\u662f\u5426\u4f7f\u7528\u4e86\u4e0d\u5b89\u5168\u7684 Image\u3001\u662f\u5426\u5f00\u653e\u4e86\u7279\u6743\u6a21\u5f0f\uff0c\u662f\u5426\u8bbe\u7f6e\u4e86\u5408\u9002\u7684\u5b89\u5168\u4e0a\u4e0b\u6587\u7b49
                            • \u7f51\u7edc\u5b89\u5168\uff1a\u662f\u5426\u542f\u7528\u4e86\u5408\u9002\u7684\u7f51\u7edc\u7b56\u7565\u6765\u9650\u5236\u6d41\u91cf\uff0c\u662f\u5426\u4f7f\u7528\u4e86 TLS \u52a0\u5bc6\u7b49
                            • \u5b58\u50a8\u5b89\u5168\uff1a\u662f\u5426\u542f\u7528\u4e86\u9002\u5f53\u7684\u52a0\u5bc6\u3001\u8bbf\u95ee\u63a7\u5236\u7b49\u3002
                            • \u5e94\u7528\u7a0b\u5e8f\u5b89\u5168\uff1a\u662f\u5426\u8bbe\u7f6e\u4e86\u5fc5\u8981\u7684\u5b89\u5168\u63aa\u65bd\uff0c\u4f8b\u5982\u5bc6\u7801\u7ba1\u7406\u3001\u8de8\u7ad9\u811a\u672c\u653b\u51fb\u9632\u5fa1\u7b49\u3002
                          • \u63d0\u4f9b\u8b66\u544a\u548c\u5efa\u8bae\uff1a\u5efa\u8bae\u96c6\u7fa4\u7ba1\u7406\u5458\u6267\u884c\u7684\u5b89\u5168\u6700\u4f73\u5b9e\u8df5\uff0c\u4f8b\u5982\u5b9a\u671f\u8f6e\u6362\u8bc1\u4e66\u3001\u4f7f\u7528\u5f3a\u5bc6\u7801\u3001\u9650\u5236\u7f51\u7edc\u8bbf\u95ee\u7b49\u3002

                          Tip

                          \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u65f6\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002\u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u62a5\u544a\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5b89\u5168\u626b\u63cf\u3002

                          "},{"location":"end-user/kpanda/security/index.html#_4","title":"\u6f0f\u6d1e\u626b\u63cf","text":"

                          \u6f0f\u6d1e\u626b\u63cf\u4fa7\u91cd\u4e8e\u626b\u63cf\u6f5c\u5728\u7684\u6076\u610f\u653b\u51fb\u548c\u5b89\u5168\u6f0f\u6d1e\uff0c\u4f8b\u5982\u8fdc\u7a0b\u4ee3\u7801\u6267\u884c\u3001SQL \u6ce8\u5165\u3001XSS \u653b\u51fb\u7b49\uff0c\u4ee5\u53ca\u4e00\u4e9b\u9488\u5bf9 Kubernetes \u7279\u5b9a\u7684\u653b\u51fb\u3002\u6700\u7ec8\u7684\u626b\u63cf\u62a5\u544a\u4f1a\u5217\u51fa\u96c6\u7fa4\u4e2d\u5b58\u5728\u7684\u5b89\u5168\u6f0f\u6d1e\uff0c\u5e76\u63d0\u51fa\u4fee\u590d\u5efa\u8bae\u3002

                          Tip

                          \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u65f6\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002\u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u62a5\u544a\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u6f0f\u6d1e\u626b\u63cf\u3002

                          "},{"location":"end-user/kpanda/security/audit.html","title":"\u6743\u9650\u626b\u63cf","text":"

                          \u4e3a\u4e86\u4f7f\u7528\u6743\u9650\u626b\u63cf\u529f\u80fd\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\uff0c\u6267\u884c\u8be5\u7b56\u7565\u4e4b\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u626b\u63cf\u62a5\u544a\u4ee5\u4f9b\u67e5\u770b\u3002

                          "},{"location":"end-user/kpanda/security/audit.html#_2","title":"\u521b\u5efa\u626b\u63cf\u7b56\u7565","text":"
                          1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u9996\u9875\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5b89\u5168\u7ba1\u7406 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6743\u9650\u626b\u63cf \uff0c\u70b9\u51fb \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb \u521b\u5efa\u626b\u63cf\u7b56\u7565 \u3002

                          3. \u53c2\u8003\u4e0b\u5217\u8bf4\u660e\u586b\u5199\u914d\u7f6e\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                            • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u626b\u63cf\u54ea\u4e2a\u96c6\u7fa4\u3002\u53ef\u9009\u7684\u96c6\u7fa4\u5217\u8868\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\u3002\u5982\u679c\u6ca1\u6709\u60f3\u9009\u7684\u96c6\u7fa4\uff0c\u53ef\u4ee5\u53bb\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u3002
                            • \u626b\u63cf\u7c7b\u578b\uff1a

                              • \u7acb\u5373\u626b\u63cf\uff1a\u5728\u626b\u63cf\u7b56\u7565\u521b\u5efa\u597d\u4e4b\u540e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u626b\u63cf\uff0c\u540e\u7eed\u4e0d\u53ef\u4ee5\u81ea\u52a8/\u624b\u52a8\u518d\u6b21\u6267\u884c\u626b\u63cf\u3002
                              • \u5b9a\u65f6\u626b\u63cf\uff1a\u901a\u8fc7\u8bbe\u7f6e\u626b\u63cf\u5468\u671f\uff0c\u81ea\u52a8\u6309\u65f6\u91cd\u590d\u6267\u884c\u626b\u63cf\u3002
                            • \u626b\u63cf\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff1a\u8bbe\u7f6e\u6700\u591a\u4fdd\u7559\u591a\u5c11\u626b\u63cf\u62a5\u544a\u3002\u8d85\u8fc7\u6307\u5b9a\u7684\u4fdd\u7559\u6570\u91cf\u65f6\uff0c\u4ece\u6700\u65e9\u7684\u62a5\u544a\u5f00\u59cb\u5220\u9664\u3002

                          "},{"location":"end-user/kpanda/security/audit.html#_3","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u7b56\u7565","text":"

                          \u521b\u5efa\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u66f4\u65b0\u6216\u5220\u9664\u626b\u63cf\u7b56\u7565\u3002

                          \u5728 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

                          • \u5bf9\u4e8e\u5468\u671f\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a

                            • \u9009\u62e9 \u7acb\u5373\u6267\u884c \u610f\u5473\u7740\uff0c\u5728\u5468\u671f\u8ba1\u5212\u4e4b\u5916\u7acb\u5373\u518d\u626b\u63cf\u4e00\u6b21\u96c6\u7fa4
                            • \u9009\u62e9 \u7981\u7528 \u4f1a\u4e2d\u65ad\u626b\u63cf\u8ba1\u5212\uff0c\u76f4\u5230\u70b9\u51fb \u542f\u7528 \u624d\u53ef\u4ee5\u7ee7\u7eed\u6839\u636e\u5468\u671f\u8ba1\u5212\u6267\u884c\u8be5\u626b\u63cf\u7b56\u7565\u3002
                            • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u626b\u63cf\u914d\u7f6e\u3001\u7c7b\u578b\u3001\u626b\u63cf\u5468\u671f\u3001\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff0c\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u548c\u9700\u8981\u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4\u3002
                            • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e
                          • \u5bf9\u4e8e\u4e00\u6b21\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a\u4ec5\u652f\u6301 \u5220\u9664 \u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/security/audit.html#_4","title":"\u67e5\u770b\u626b\u63cf\u62a5\u544a","text":"
                          1. \u5728 \u5b89\u5168\u7ba1\u7406 -> \u6743\u9650\u626b\u63cf -> \u626b\u63cf\u62a5\u544a \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u62a5\u544a\u540d\u79f0

                            \u5728\u62a5\u544a\u53f3\u4fa7\u70b9\u51fb \u5220\u9664 \u53ef\u4ee5\u624b\u52a8\u5220\u9664\u62a5\u544a\u3002

                          2. \u67e5\u770b\u626b\u63cf\u62a5\u544a\u5185\u5bb9\uff0c\u5305\u62ec\uff1a

                            • \u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4
                            • \u4f7f\u7528\u7684\u626b\u63cf\u7b56\u7565
                            • \u626b\u63cf\u9879\u603b\u6570\u3001\u8b66\u544a\u6570\u3001\u9519\u8bef\u6570
                            • \u5728\u5468\u671f\u6027\u626b\u63cf\u7b56\u7565\u751f\u6210\u7684\u626b\u63cf\u62a5\u544a\u4e2d\uff0c\u8fd8\u53ef\u4ee5\u67e5\u770b\u626b\u63cf\u9891\u7387
                            • \u626b\u63cf\u5f00\u59cb\u7684\u65f6\u95f4
                            • \u68c0\u67e5\u8be6\u60c5\uff0c\u4f8b\u5982\u88ab\u68c0\u67e5\u7684\u8d44\u6e90\u3001\u8d44\u6e90\u7c7b\u578b\u3001\u626b\u63cf\u7ed3\u679c\u3001\u9519\u8bef\u7c7b\u578b\u3001\u9519\u8bef\u8be6\u60c5

                          "},{"location":"end-user/kpanda/security/hunter.html","title":"\u6f0f\u6d1e\u626b\u63cf","text":"

                          \u4e3a\u4e86\u4f7f\u7528\u6f0f\u6d1e\u626b\u63cf\u529f\u80fd\uff0c\u9700\u8981\u5148\u521b\u5efa\u626b\u63cf\u7b56\u7565\uff0c\u6267\u884c\u8be5\u7b56\u7565\u4e4b\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u626b\u63cf\u62a5\u544a\u4ee5\u4f9b\u67e5\u770b\u3002

                          "},{"location":"end-user/kpanda/security/hunter.html#_2","title":"\u521b\u5efa\u626b\u63cf\u7b56\u7565","text":"
                          1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u9996\u9875\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5b89\u5168\u7ba1\u7406 \u3002

                          2. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u6f0f\u6d1e\u626b\u63cf \uff0c\u70b9\u51fb \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb \u521b\u5efa\u626b\u63cf\u7b56\u7565 \u3002

                          3. \u53c2\u8003\u4e0b\u5217\u8bf4\u660e\u586b\u5199\u914d\u7f6e\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u3002

                            • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u626b\u63cf\u54ea\u4e2a\u96c6\u7fa4\u3002\u53ef\u9009\u7684\u96c6\u7fa4\u5217\u8868\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\u3002\u5982\u679c\u6ca1\u6709\u60f3\u9009\u7684\u96c6\u7fa4\uff0c\u53ef\u4ee5\u53bb\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u3002
                            • \u626b\u63cf\u7c7b\u578b\uff1a

                              • \u7acb\u5373\u626b\u63cf\uff1a\u5728\u626b\u63cf\u7b56\u7565\u521b\u5efa\u597d\u4e4b\u540e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u626b\u63cf\uff0c\u540e\u7eed\u4e0d\u53ef\u4ee5\u81ea\u52a8/\u624b\u52a8\u518d\u6b21\u6267\u884c\u626b\u63cf\u3002
                              • \u5b9a\u65f6\u626b\u63cf\uff1a\u901a\u8fc7\u8bbe\u7f6e\u626b\u63cf\u5468\u671f\uff0c\u81ea\u52a8\u6309\u65f6\u91cd\u590d\u6267\u884c\u626b\u63cf\u3002
                            • \u626b\u63cf\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff1a\u8bbe\u7f6e\u6700\u591a\u4fdd\u7559\u591a\u5c11\u626b\u63cf\u62a5\u544a\u3002\u8d85\u8fc7\u6307\u5b9a\u7684\u4fdd\u7559\u6570\u91cf\u65f6\uff0c\u4ece\u6700\u65e9\u7684\u62a5\u544a\u5f00\u59cb\u5220\u9664\u3002

                          "},{"location":"end-user/kpanda/security/hunter.html#_3","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u7b56\u7565","text":"

                          \u521b\u5efa\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u66f4\u65b0\u6216\u5220\u9664\u626b\u63cf\u7b56\u7565\u3002

                          \u5728 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

                          • \u5bf9\u4e8e\u5468\u671f\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a

                            • \u9009\u62e9 \u7acb\u5373\u6267\u884c \u610f\u5473\u7740\uff0c\u5728\u5468\u671f\u8ba1\u5212\u4e4b\u5916\u7acb\u5373\u518d\u626b\u63cf\u4e00\u6b21\u96c6\u7fa4
                            • \u9009\u62e9 \u7981\u7528 \u4f1a\u4e2d\u65ad\u626b\u63cf\u8ba1\u5212\uff0c\u76f4\u5230\u70b9\u51fb \u542f\u7528 \u624d\u53ef\u4ee5\u7ee7\u7eed\u6839\u636e\u5468\u671f\u8ba1\u5212\u6267\u884c\u8be5\u626b\u63cf\u7b56\u7565\u3002
                            • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u626b\u63cf\u914d\u7f6e\u3001\u7c7b\u578b\u3001\u626b\u63cf\u5468\u671f\u3001\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff0c\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u548c\u9700\u8981\u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4\u3002
                            • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e
                          • \u5bf9\u4e8e\u4e00\u6b21\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a\u4ec5\u652f\u6301 \u5220\u9664 \u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/security/hunter.html#_4","title":"\u67e5\u770b\u626b\u63cf\u62a5\u544a","text":"
                          1. \u5728 \u5b89\u5168\u7ba1\u7406 -> \u6743\u9650\u626b\u63cf -> \u626b\u63cf\u62a5\u544a \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u62a5\u544a\u540d\u79f0

                            \u5728\u62a5\u544a\u53f3\u4fa7\u70b9\u51fb \u5220\u9664 \u53ef\u4ee5\u624b\u52a8\u5220\u9664\u62a5\u544a\u3002

                          2. \u67e5\u770b\u626b\u63cf\u62a5\u544a\u5185\u5bb9\uff0c\u5305\u62ec\uff1a

                            • \u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4
                            • \u4f7f\u7528\u7684\u626b\u63cf\u7b56\u7565
                            • \u626b\u63cf\u9891\u7387
                            • \u98ce\u9669\u603b\u6570\u3001\u9ad8\u98ce\u9669\u6570\u3001\u4e2d\u98ce\u9669\u6570\u3001\u4f4e\u98ce\u9669\u6570
                            • \u626b\u63cf\u65f6\u95f4
                            • \u68c0\u67e5\u8be6\u60c5\uff0c\u4f8b\u5982\u6f0f\u6d1e ID\u3001\u6f0f\u6d1e\u7c7b\u578b\u3001\u6f0f\u6d1e\u540d\u79f0\u3001\u6f0f\u6d1e\u63cf\u8ff0\u7b49

                          "},{"location":"end-user/kpanda/security/cis/config.html","title":"\u626b\u63cf\u914d\u7f6e","text":"

                          \u4f7f\u7528\u5408\u89c4\u6027\u626b\u63cf\u7684\u7b2c\u4e00\u6b65\uff0c\u5c31\u662f\u5148\u521b\u5efa\u626b\u63cf\u914d\u7f6e\u3002\u57fa\u4e8e\u626b\u63cf\u914d\u7f6e\u518d\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3001\u6267\u884c\u626b\u63cf\u7b56\u7565\uff0c\u6700\u540e\u67e5\u770b\u626b\u63cf\u7ed3\u679c\u3002

                          "},{"location":"end-user/kpanda/security/cis/config.html#_2","title":"\u521b\u5efa\u626b\u63cf\u914d\u7f6e","text":"

                          \u521b\u5efa\u626b\u63cf\u914d\u7f6e\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

                          1. \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u7684\u9996\u9875\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5b89\u5168\u7ba1\u7406 \u3002

                          2. \u9ed8\u8ba4\u8fdb\u5165 \u5408\u89c4\u6027\u626b\u63cf \u9875\u9762\uff0c\u70b9\u51fb \u626b\u63cf\u914d\u7f6e \u9875\u7b7e\uff0c\u7136\u540e\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u521b\u5efa\u626b\u63cf\u914d\u7f6e \u3002

                          3. \u586b\u5199\u914d\u7f6e\u540d\u79f0\u3001\u9009\u62e9\u914d\u7f6e\u6a21\u677f\u3001\u6309\u9700\u52fe\u9009\u626b\u63cf\u9879\uff0c\u6700\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                            \u626b\u63cf\u6a21\u677f\uff1a\u76ee\u524d\u63d0\u4f9b\u4e86\u4e24\u4e2a\u6a21\u677f\u3002 kubeadm \u6a21\u677f\u9002\u7528\u4e8e\u4e00\u822c\u60c5\u51b5\u4e0b\u7684 Kubernetes \u96c6\u7fa4\u3002 \u6211\u4eec\u5728 kubeadm \u6a21\u677f\u57fa\u7840\u4e0a\uff0c\u7ed3\u5408\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u5e73\u53f0\u8bbe\u8ba1\u5ffd\u7565\u4e86\u4e0d\u9002\u7528\u4e8e\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u626b\u63cf\u9879\u3002

                          "},{"location":"end-user/kpanda/security/cis/config.html#_3","title":"\u67e5\u770b\u626b\u63cf\u914d\u7f6e","text":"

                          \u5728\u626b\u63cf\u914d\u7f6e\u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u626b\u63cf\u914d\u7f6e\u7684\u540d\u79f0\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u914d\u7f6e\u7684\u7c7b\u578b\u3001\u626b\u63cf\u9879\u6570\u91cf\u3001\u521b\u5efa\u65f6\u95f4\u3001\u914d\u7f6e\u6a21\u677f\uff0c\u4ee5\u53ca\u8be5\u914d\u7f6e\u542f\u7528\u7684\u5177\u4f53\u626b\u63cf\u9879\u3002

                          "},{"location":"end-user/kpanda/security/cis/config.html#_4","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u914d\u7f6e","text":"

                          \u626b\u63cf\u914d\u7f6e\u521b\u5efa\u6210\u529f\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u66f4\u65b0\u914d\u7f6e\u6216\u5220\u9664\u8be5\u914d\u7f6e\u3002

                          \u5728\u626b\u63cf\u914d\u7f6e\u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

                          • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u63cf\u8ff0\u3001\u6a21\u677f\u548c\u626b\u63cf\u9879\u3002\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u3002
                          • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e\u3002

                          "},{"location":"end-user/kpanda/security/cis/policy.html","title":"\u626b\u63cf\u7b56\u7565","text":""},{"location":"end-user/kpanda/security/cis/policy.html#_2","title":"\u521b\u5efa\u626b\u63cf\u7b56\u7565","text":"

                          \u521b\u5efa\u626b\u63cf\u914d\u7f6e\u4e4b\u540e\uff0c\u53ef\u4ee5\u57fa\u4e8e\u914d\u7f6e\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002

                          1. \u5728 \u5b89\u5168\u7ba1\u7406 -> \u5408\u89c4\u6027\u626b\u63cf \u9875\u9762\u7684 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u5728\u53f3\u4fa7\u70b9\u51fb\u521b\u5efa\u626b\u63cf\u7b56\u7565\u3002

                          2. \u53c2\u8003\u4e0b\u5217\u8bf4\u660e\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u5b9a \u3002

                            • \u96c6\u7fa4\uff1a\u9009\u62e9\u9700\u8981\u626b\u63cf\u54ea\u4e2a\u96c6\u7fa4\u3002\u53ef\u9009\u7684\u96c6\u7fa4\u5217\u8868\u6765\u81ea\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u7684\u96c6\u7fa4\u3002\u5982\u679c\u6ca1\u6709\u60f3\u9009\u7684\u96c6\u7fa4\uff0c\u53ef\u4ee5\u53bb\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165\u6216\u521b\u5efa\u96c6\u7fa4\u3002
                            • \u626b\u63cf\u914d\u7f6e\uff1a\u9009\u62e9\u4e8b\u5148\u521b\u5efa\u597d\u7684\u626b\u63cf\u914d\u7f6e\u3002\u626b\u63cf\u914d\u7f6e\u89c4\u5b9a\u4e86\u9700\u8981\u6267\u884c\u54ea\u4e9b\u5177\u4f53\u7684\u626b\u63cf\u9879\u3002
                            • \u626b\u63cf\u7c7b\u578b\uff1a

                              • \u7acb\u5373\u626b\u63cf\uff1a\u5728\u626b\u63cf\u7b56\u7565\u521b\u5efa\u597d\u4e4b\u540e\u7acb\u5373\u6267\u884c\u4e00\u6b21\u626b\u63cf\uff0c\u540e\u7eed\u4e0d\u53ef\u4ee5\u81ea\u52a8/\u624b\u52a8\u518d\u6b21\u6267\u884c\u626b\u63cf\u3002
                              • \u5b9a\u65f6\u626b\u63cf\uff1a\u901a\u8fc7\u8bbe\u7f6e\u626b\u63cf\u5468\u671f\uff0c\u81ea\u52a8\u6309\u65f6\u91cd\u590d\u6267\u884c\u626b\u63cf\u3002
                            • \u626b\u63cf\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff1a\u8bbe\u7f6e\u6700\u591a\u4fdd\u7559\u591a\u5c11\u626b\u63cf\u62a5\u544a\u3002\u8d85\u8fc7\u6307\u5b9a\u7684\u4fdd\u7559\u6570\u91cf\u65f6\uff0c\u4ece\u6700\u65e9\u7684\u62a5\u544a\u5f00\u59cb\u5220\u9664\u3002

                          "},{"location":"end-user/kpanda/security/cis/policy.html#_3","title":"\u66f4\u65b0/\u5220\u9664\u626b\u63cf\u7b56\u7565","text":"

                          \u521b\u5efa\u626b\u63cf\u7b56\u7565\u4e4b\u540e\uff0c\u53ef\u4ee5\u6839\u636e\u9700\u8981\u66f4\u65b0\u6216\u5220\u9664\u626b\u63cf\u7b56\u7565\u3002

                          \u5728 \u626b\u63cf\u7b56\u7565 \u9875\u7b7e\u4e0b\uff0c\u70b9\u51fb\u914d\u7f6e\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\uff1a

                          • \u5bf9\u4e8e\u5468\u671f\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a

                            • \u9009\u62e9 \u7acb\u5373\u6267\u884c \u610f\u5473\u7740\uff0c\u5728\u5468\u671f\u8ba1\u5212\u4e4b\u5916\u7acb\u5373\u518d\u626b\u63cf\u4e00\u6b21\u96c6\u7fa4
                            • \u9009\u62e9 \u7981\u7528 \u4f1a\u4e2d\u65ad\u626b\u63cf\u8ba1\u5212\uff0c\u76f4\u5230\u70b9\u51fb \u542f\u7528 \u624d\u53ef\u4ee5\u7ee7\u7eed\u6839\u636e\u5468\u671f\u8ba1\u5212\u6267\u884c\u8be5\u626b\u63cf\u7b56\u7565\u3002
                            • \u9009\u62e9 \u7f16\u8f91 \u53ef\u4ee5\u66f4\u65b0\u914d\u7f6e\uff0c\u652f\u6301\u66f4\u65b0\u626b\u63cf\u914d\u7f6e\u3001\u7c7b\u578b\u3001\u626b\u63cf\u5468\u671f\u3001\u62a5\u544a\u4fdd\u7559\u6570\u91cf\uff0c\u4e0d\u53ef\u66f4\u6539\u914d\u7f6e\u540d\u79f0\u548c\u9700\u8981\u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4\u3002
                            • \u9009\u62e9 \u5220\u9664 \u53ef\u4ee5\u5220\u9664\u8be5\u914d\u7f6e
                          • \u5bf9\u4e8e\u4e00\u6b21\u6027\u7684\u626b\u63cf\u7b56\u7565\uff1a\u4ec5\u652f\u6301 \u5220\u9664 \u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/security/cis/report.html","title":"\u626b\u63cf\u62a5\u544a","text":"

                          hide\uff1a - toc

                          "},{"location":"end-user/kpanda/security/cis/report.html#_1","title":"\u626b\u63cf\u62a5\u544a","text":"

                          \u6267\u884c\u626b\u63cf\u7b56\u7565\u4e4b\u540e\u4f1a\u81ea\u52a8\u751f\u6210\u626b\u63cf\u62a5\u544a\u3002\u60a8\u53ef\u4ee5\u5728\u7ebf\u67e5\u770b\u626b\u63cf\u62a5\u544a\u6216\u5c06\u5176\u4e0b\u8f7d\u5230\u672c\u5730\u67e5\u770b\u3002

                          • \u4e0b\u8f7d\u67e5\u770b\u626b\u63cf\u62a5\u544a

                            \u5b89\u5168\u7ba1\u7406 -> \u5408\u89c4\u6027\u626b\u63cf \u9875\u9762\u7684 \u626b\u63cf\u62a5\u544a \u9875\u7b7e\u70b9\u51fb\u62a5\u544a\u53f3\u4fa7\u7684 \u2507 \u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u4e0b\u8f7d \u3002

                          • \u5728\u7ebf\u67e5\u770b\u626b\u63cf\u62a5\u544a

                            \u70b9\u51fb\u67d0\u4e2a\u62a5\u544a\u7684\u540d\u79f0\uff0c\u60a8\u53ef\u4ee5\u5728\u7ebf\u67e5\u770b CIS \u5408\u89c4\u6027\u626b\u63cf\u7684\u62a5\u544a\u5185\u5bb9\u3002\u5177\u4f53\u5305\u62ec\uff1a

                            • \u626b\u63cf\u7684\u76ee\u6807\u96c6\u7fa4
                            • \u4f7f\u7528\u7684\u626b\u63cf\u7b56\u7565\u548c\u626b\u63cf\u914d\u7f6e
                            • \u626b\u63cf\u5f00\u59cb\u65f6\u95f4
                            • \u626b\u63cf\u9879\u603b\u6570\u3001\u901a\u8fc7\u6570\u4e0e\u672a\u901a\u8fc7\u6570
                            • \u5bf9\u4e8e\u672a\u901a\u8fc7\u7684\u626b\u63cf\u9879\u7ed9\u51fa\u5bf9\u5e94\u7684\u4fee\u590d\u5efa\u8bae
                            • \u5bf9\u4e8e\u901a\u8fc7\u7684\u626b\u63cf\u9879\u7ed9\u51fa\u66f4\u5b89\u5168\u7684\u64cd\u4f5c\u5efa\u8bae

                          "},{"location":"end-user/kpanda/storage/pv.html","title":"\u6570\u636e\u5377(PV)","text":"

                          \u6570\u636e\u5377\uff08PersistentVolume\uff0cPV\uff09\u662f\u96c6\u7fa4\u4e2d\u7684\u4e00\u5757\u5b58\u50a8\uff0c\u53ef\u7531\u7ba1\u7406\u5458\u4e8b\u5148\u5236\u5907\uff0c\u6216\u4f7f\u7528\u5b58\u50a8\u7c7b\uff08Storage Class\uff09\u6765\u52a8\u6001\u5236\u5907\u3002PV \u662f\u96c6\u7fa4\u8d44\u6e90\uff0c\u4f46\u62e5\u6709\u72ec\u7acb\u7684\u751f\u547d\u5468\u671f\uff0c\u4e0d\u4f1a\u968f\u7740 Pod \u8fdb\u7a0b\u7ed3\u675f\u800c\u88ab\u5220\u9664\u3002\u5c06 PV \u6302\u8f7d\u5230\u5de5\u4f5c\u8d1f\u8f7d\u53ef\u4ee5\u5b9e\u73b0\u5de5\u4f5c\u8d1f\u8f7d\u7684\u6570\u636e\u6301\u4e45\u5316\u3002PV \u4e2d\u4fdd\u5b58\u4e86\u53ef\u88ab Pod \u4e2d\u5bb9\u5668\u8bbf\u95ee\u7684\u6570\u636e\u76ee\u5f55\u3002

                          "},{"location":"end-user/kpanda/storage/pv.html#_1","title":"\u521b\u5efa\u6570\u636e\u5377","text":"

                          \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u6570\u636e\u5377\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

                          • \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u6570\u636e\u5377\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

                          • \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

                          "},{"location":"end-user/kpanda/storage/pv.html#yaml","title":"YAML \u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) -> YAML \u521b\u5efa \u3002

                          2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                            \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

                          "},{"location":"end-user/kpanda/storage/pv.html#_2","title":"\u8868\u5355\u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) -> \u521b\u5efa\u6570\u636e\u5377(PV) \u3002

                          2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

                            • \u6570\u636e\u5377\u540d\u79f0\u3001\u6570\u636e\u5377\u7c7b\u578b\u3001\u6302\u8f7d\u8def\u5f84\u3001\u5377\u6a21\u5f0f\u3001\u8282\u70b9\u4eb2\u548c\u6027\u5728\u521b\u5efa\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                            • \u6570\u636e\u5377\u7c7b\u578b\uff1a\u6709\u5173\u5377\u7c7b\u578b\u7684\u8be6\u7ec6\u4ecb\u7ecd\uff0c\u53ef\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u5377\u3002

                            • Local\uff1a\u5c06 Node \u8282\u70b9\u7684\u672c\u5730\u5b58\u50a8\u5305\u88c5\u6210 PVC \u63a5\u53e3\uff0c\u5bb9\u5668\u76f4\u63a5\u4f7f\u7528 PVC \u800c\u65e0\u9700\u5173\u6ce8\u5e95\u5c42\u7684\u5b58\u50a8\u7c7b\u578b\u3002Local \u5377\u4e0d\u652f\u6301\u52a8\u6001\u914d\u7f6e\u6570\u636e\u5377\uff0c\u4f46\u652f\u6301\u914d\u7f6e\u8282\u70b9\u4eb2\u548c\u6027\uff0c\u53ef\u4ee5\u9650\u5236\u80fd\u4ece\u54ea\u4e9b\u8282\u70b9\u4e0a\u8bbf\u95ee\u8be5\u6570\u636e\u5377\u3002

                            • HostPath\uff1a\u4f7f\u7528 Node \u8282\u70b9\u7684\u6587\u4ef6\u7cfb\u7edf\u4e0a\u7684\u6587\u4ef6\u6216\u76ee\u5f55\u4f5c\u4e3a\u6570\u636e\u5377\uff0c\u4e0d\u652f\u6301\u57fa\u4e8e\u8282\u70b9\u4eb2\u548c\u6027\u7684 Pod \u8c03\u5ea6\u3002

                            • \u6302\u8f7d\u8def\u5f84\uff1a\u5c06\u6570\u636e\u5377\u6302\u8f7d\u5230\u5bb9\u5668\u4e2d\u7684\u67d0\u4e2a\u5177\u4f53\u76ee\u5f55\u4e0b\u3002

                            • \u8bbf\u95ee\u6a21\u5f0f\uff1a

                              • ReadWriteOnce\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u4e00\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                              • ReadWriteMany\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                              • ReadOnlyMany\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u53ea\u8bfb\u65b9\u5f0f\u6302\u8f7d\u3002
                              • ReadWriteOncePod\uff1a\u6570\u636e\u5377\u53ef\u4ee5\u88ab\u5355\u4e2a Pod \u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                            • \u56de\u6536\u7b56\u7565\uff1a

                              • Retain\uff1a\u4e0d\u5220\u9664 PV\uff0c\u4ec5\u5c06\u5176\u72b6\u6001\u53d8\u4e3a released \uff0c\u9700\u8981\u7528\u6237\u624b\u52a8\u56de\u6536\u3002\u6709\u5173\u5982\u4f55\u624b\u52a8\u56de\u6536\uff0c\u53ef\u53c2\u8003\u6301\u4e45\u5377\u3002
                              • Recycle\uff1a\u4fdd\u7559 PV \u4f46\u6e05\u7a7a\u5176\u4e2d\u7684\u6570\u636e\uff0c\u6267\u884c\u57fa\u672c\u7684\u64e6\u9664\u64cd\u4f5c\uff08 rm -rf /thevolume/* \uff09\u3002
                              • Delete\uff1a\u5220\u9664 PV \u65f6\u53ca\u5176\u4e2d\u7684\u6570\u636e\u3002
                            • \u5377\u6a21\u5f0f\uff1a

                              • \u6587\u4ef6\u7cfb\u7edf\uff1a\u6570\u636e\u5377\u5c06\u88ab Pod \u6302\u8f7d\u5230\u67d0\u4e2a\u76ee\u5f55\u3002\u5982\u679c\u6570\u636e\u5377\u7684\u5b58\u50a8\u6765\u81ea\u67d0\u5757\u8bbe\u5907\u800c\u8be5\u8bbe\u5907\u76ee\u524d\u4e3a\u7a7a\uff0c\u7b2c\u4e00\u6b21\u6302\u8f7d\u5377\u4e4b\u524d\u4f1a\u5728\u8bbe\u5907\u4e0a\u521b\u5efa\u6587\u4ef6\u7cfb\u7edf\u3002
                              • \u5757\uff1a\u5c06\u6570\u636e\u5377\u4f5c\u4e3a\u539f\u59cb\u5757\u8bbe\u5907\u6765\u4f7f\u7528\u3002\u8fd9\u7c7b\u5377\u4ee5\u5757\u8bbe\u5907\u7684\u65b9\u5f0f\u4ea4\u7ed9 Pod \u4f7f\u7528\uff0c\u5176\u4e0a\u6ca1\u6709\u4efb\u4f55\u6587\u4ef6\u7cfb\u7edf\uff0c\u53ef\u4ee5\u8ba9 Pod \u66f4\u5feb\u5730\u8bbf\u95ee\u6570\u636e\u5377\u3002
                            • \u8282\u70b9\u4eb2\u548c\u6027\uff1a

                          "},{"location":"end-user/kpanda/storage/pv.html#_3","title":"\u67e5\u770b\u6570\u636e\u5377","text":"

                          \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377(PV) \u3002

                          • \u8be5\u9875\u9762\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u4e2d\u7684\u6240\u6709\u6570\u636e\u5377\uff0c\u4ee5\u53ca\u5404\u4e2a\u6570\u636e\u5377\u7684\u72b6\u6001\u3001\u5bb9\u91cf\u3001\u547d\u540d\u7a7a\u95f4\u7b49\u4fe1\u606f\u3002

                          • \u652f\u6301\u6309\u7167\u6570\u636e\u5377\u7684\u540d\u79f0\u3001\u72b6\u6001\u3001\u547d\u540d\u7a7a\u95f4\u3001\u521b\u5efa\u65f6\u95f4\u8fdb\u884c\u987a\u5e8f\u6216\u9006\u5e8f\u6392\u5e8f\u3002

                          • \u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u6570\u636e\u5377\u7684\u57fa\u672c\u914d\u7f6e\u3001\u5b58\u50a8\u6c60\u4fe1\u606f\u3001\u6807\u7b7e\u3001\u6ce8\u89e3\u7b49\u4fe1\u606f\u3002

                          "},{"location":"end-user/kpanda/storage/pv.html#_4","title":"\u514b\u9686\u6570\u636e\u5377","text":"

                          \u901a\u8fc7\u514b\u9686\u6570\u636e\u5377\uff0c\u53ef\u4ee5\u57fa\u4e8e\u88ab\u514b\u9686\u6570\u636e\u5377\u7684\u914d\u7f6e\uff0c\u91cd\u65b0\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6570\u636e\u5377\u3002

                          1. \u8fdb\u5165\u514b\u9686\u9875\u9762

                            • \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u514b\u9686\u7684\u6570\u636e\u5377\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u514b\u9686 \u3002

                              \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u514b\u9686 \u3002

                          2. \u76f4\u63a5\u4f7f\u7528\u539f\u914d\u7f6e\uff0c\u6216\u8005\u6309\u9700\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                          "},{"location":"end-user/kpanda/storage/pv.html#_5","title":"\u66f4\u65b0\u6570\u636e\u5377","text":"

                          \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u66f4\u65b0\u6570\u636e\u5377\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u6570\u636e\u5377\u3002

                          Note

                          \u4ec5\u652f\u6301\u66f4\u65b0\u6570\u636e\u5377\u7684\u522b\u540d\u3001\u5bb9\u91cf\u3001\u8bbf\u95ee\u6a21\u5f0f\u3001\u56de\u6536\u7b56\u7565\u3001\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                          • \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u6570\u636e\u5377\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

                          • \u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u6570\u636e\u5377\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

                          "},{"location":"end-user/kpanda/storage/pv.html#_6","title":"\u5220\u9664\u6570\u636e\u5377","text":"

                          \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u5220\u9664\u7684\u6570\u636e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u5220\u9664 \u3002

                          \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u5220\u9664 \u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html","title":"\u6570\u636e\u5377\u58f0\u660e(PVC)","text":"

                          \u6301\u4e45\u5377\u58f0\u660e\uff08PersistentVolumeClaim\uff0cPVC\uff09\u8868\u8fbe\u7684\u662f\u7528\u6237\u5bf9\u5b58\u50a8\u7684\u8bf7\u6c42\u3002PVC \u6d88\u8017 PV \u8d44\u6e90\uff0c\u7533\u9886\u4f7f\u7528\u7279\u5b9a\u5927\u5c0f\u3001\u7279\u5b9a\u8bbf\u95ee\u6a21\u5f0f\u7684\u6570\u636e\u5377\uff0c\u4f8b\u5982\u8981\u6c42 PV \u5377\u4ee5 ReadWriteOnce\u3001ReadOnlyMany \u6216 ReadWriteMany \u7b49\u6a21\u5f0f\u6765\u6302\u8f7d\u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_1","title":"\u521b\u5efa\u6570\u636e\u5377\u58f0\u660e","text":"

                          \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u6570\u636e\u5377\u58f0\u660e\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

                          • \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u6570\u636e\u5377\u58f0\u660e\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

                          • \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#yaml","title":"YAML \u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e (PVC) -> YAML \u521b\u5efa \u3002

                          2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                            \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_2","title":"\u8868\u5355\u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e (PVC) -> \u521b\u5efa\u6570\u636e\u5377\u58f0\u660e (PVC) \u3002

                          2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\u3002

                            • \u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\u3001\u547d\u540d\u7a7a\u95f4\u3001\u521b\u5efa\u65b9\u5f0f\u3001\u6570\u636e\u5377\u3001\u5bb9\u91cf\u3001\u8bbf\u95ee\u6a21\u5f0f\u5728\u521b\u5efa\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                            • \u521b\u5efa\u65b9\u5f0f\uff1a\u5728\u5df2\u6709\u7684\u5b58\u50a8\u6c60\u6216\u8005\u6570\u636e\u5377\u4e2d\u52a8\u6001\u521b\u5efa\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\uff0c\u6216\u8005\u57fa\u4e8e\u6570\u636e\u5377\u58f0\u660e\u7684\u5feb\u7167\u521b\u5efa\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

                              \u57fa\u4e8e\u5feb\u7167\u521b\u5efa\u65f6\u65e0\u6cd5\u4fee\u6539\u6570\u636e\u5377\u58f0\u660e\u7684\u5bb9\u91cf\uff0c\u53ef\u4ee5\u5728\u521b\u5efa\u5b8c\u6210\u540e\u518d\u8fdb\u884c\u4fee\u6539\u3002

                            • \u9009\u62e9\u521b\u5efa\u65b9\u5f0f\u4e4b\u540e\uff0c\u5728\u4e0b\u62c9\u5217\u8868\u4e2d\u9009\u62e9\u60f3\u8981\u4f7f\u7528\u7684\u5b58\u50a8\u6c60/\u6570\u636e\u5377/\u5feb\u7167\u3002

                            • \u8bbf\u95ee\u6a21\u5f0f\uff1a

                            • ReadWriteOnce\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u4e00\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002

                            • ReadWriteMany\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002
                            • ReadOnlyMany\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u591a\u4e2a\u8282\u70b9\u4ee5\u53ea\u8bfb\u65b9\u5f0f\u6302\u8f7d\u3002
                            • ReadWriteOncePod\uff0c\u6570\u636e\u5377\u58f0\u660e\u53ef\u4ee5\u88ab\u5355\u4e2a Pod \u4ee5\u8bfb\u5199\u65b9\u5f0f\u6302\u8f7d\u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_3","title":"\u67e5\u770b\u6570\u636e\u5377\u58f0\u660e","text":"

                          \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \u3002

                          • \u8be5\u9875\u9762\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u96c6\u7fa4\u4e2d\u7684\u6240\u6709\u6570\u636e\u5377\u58f0\u660e\uff0c\u4ee5\u53ca\u5404\u4e2a\u6570\u636e\u5377\u58f0\u660e\u7684\u72b6\u6001\u3001\u5bb9\u91cf\u3001\u547d\u540d\u7a7a\u95f4\u7b49\u4fe1\u606f\u3002

                          • \u652f\u6301\u6309\u7167\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\u3001\u72b6\u6001\u3001\u547d\u540d\u7a7a\u95f4\u3001\u521b\u5efa\u65f6\u95f4\u8fdb\u884c\u987a\u5e8f\u6216\u9006\u5e8f\u6392\u5e8f\u3002

                          • \u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u53ef\u4ee5\u67e5\u770b\u8be5\u6570\u636e\u5377\u58f0\u660e\u7684\u57fa\u672c\u914d\u7f6e\u3001\u5b58\u50a8\u6c60\u4fe1\u606f\u3001\u6807\u7b7e\u3001\u6ce8\u89e3\u7b49\u4fe1\u606f\u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_4","title":"\u6269\u5bb9\u6570\u636e\u5377\u58f0\u660e","text":"
                          1. \u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u6570\u636e\u5377\u58f0\u660e(PVC) \uff0c\u627e\u5230\u60f3\u8981\u8c03\u6574\u5bb9\u91cf\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

                          2. \u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u6269\u5bb9 \u3002

                          3. \u8f93\u5165\u76ee\u6807\u5bb9\u91cf\uff0c\u7136\u540e\u70b9\u51fb \u786e\u5b9a \u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_5","title":"\u514b\u9686\u6570\u636e\u5377\u58f0\u660e","text":"

                          \u901a\u8fc7\u514b\u9686\u6570\u636e\u5377\u58f0\u660e\uff0c\u53ef\u4ee5\u57fa\u4e8e\u88ab\u514b\u9686\u6570\u636e\u5377\u58f0\u660e\u7684\u914d\u7f6e\uff0c\u91cd\u65b0\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\u3002

                          1. \u8fdb\u5165\u514b\u9686\u9875\u9762

                            • \u5728\u6570\u636e\u5377\u58f0\u660e\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u514b\u9686\u7684\u6570\u636e\u5377\u58f0\u660e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u514b\u9686 \u3002

                              \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u514b\u9686 \u3002

                          2. \u76f4\u63a5\u4f7f\u7528\u539f\u914d\u7f6e\uff0c\u6216\u8005\u6309\u9700\u8fdb\u884c\u4fee\u6539\uff0c\u7136\u540e\u5728\u9875\u9762\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_6","title":"\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e","text":"

                          \u6709\u4e24\u79cd\u9014\u5f84\u53ef\u4ee5\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e\u3002\u652f\u6301\u901a\u8fc7\u8868\u5355\u6216 YAML \u6587\u4ef6\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e\u3002

                          Note

                          \u4ec5\u652f\u6301\u66f4\u65b0\u6570\u636e\u5377\u58f0\u660e\u7684\u522b\u540d\u3001\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                          • \u5728\u6570\u636e\u5377\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u6570\u636e\u5377\u58f0\u660e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

                          • \u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u8fdb\u5165\u6570\u636e\u5377\u58f0\u660e\u7684\u8be6\u60c5\u9875\u9762\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0a\u89d2\u9009\u62e9 \u66f4\u65b0 \u5373\u53ef\u901a\u8fc7\u8868\u5355\u66f4\u65b0\uff0c\u9009\u62e9 \u7f16\u8f91 YAML \u5373\u53ef\u901a\u8fc7 YAML \u66f4\u65b0\u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_7","title":"\u5220\u9664\u6570\u636e\u5377\u58f0\u660e","text":"

                          \u5728\u6570\u636e\u5377\u58f0\u660e\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u5220\u9664\u7684\u6570\u636e\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u5220\u9664 \u3002

                          \u4e5f\u53ef\u4ee5\u70b9\u51fb\u6570\u636e\u5377\u58f0\u660e\u7684\u540d\u79f0\uff0c\u5728\u8be6\u60c5\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u70b9\u51fb\u64cd\u4f5c\u6309\u94ae\u9009\u62e9 \u5220\u9664 \u3002

                          "},{"location":"end-user/kpanda/storage/pvc.html#_8","title":"\u5e38\u89c1\u95ee\u9898","text":"
                          1. \u5982\u679c\u5217\u8868\u4e2d\u6ca1\u6709\u53ef\u9009\u7684\u5b58\u50a8\u6c60\u6216\u6570\u636e\u5377\uff0c\u53ef\u4ee5\u521b\u5efa\u5b58\u50a8\u6c60\u6216\u521b\u5efa\u6570\u636e\u5377\u3002

                          2. \u5982\u679c\u5217\u8868\u4e2d\u6ca1\u6709\u53ef\u9009\u7684\u5feb\u7167\uff0c\u53ef\u4ee5\u8fdb\u5165\u6570\u636e\u5377\u58f0\u660e\u7684\u8be6\u60c5\u9875\uff0c\u5728\u53f3\u4e0a\u89d2\u5236\u4f5c\u5feb\u7167\u3002

                          3. \u5982\u679c\u6570\u636e\u5377\u58f0\u660e\u6240\u4f7f\u7528\u7684\u5b58\u50a8\u6c60 (SC) \u6ca1\u6709\u542f\u7528\u5feb\u7167\uff0c\u5219\u65e0\u6cd5\u5236\u4f5c\u5feb\u7167\uff0c\u9875\u9762\u4e0d\u4f1a\u663e\u793a\u201c\u5236\u4f5c\u5feb\u7167\u201d\u9009\u9879\u3002

                          4. \u5982\u679c\u6570\u636e\u5377\u58f0\u660e\u6240\u4f7f\u7528\u7684\u5b58\u50a8\u6c60 (SC) \u6ca1\u6709\u5f00\u542f\u6269\u5bb9\u529f\u80fd\uff0c\u5219\u8be5\u6570\u636e\u5377\u4e0d\u652f\u6301\u6269\u5bb9\uff0c\u9875\u9762\u4e0d\u4f1a\u663e\u793a\u6269\u5bb9\u9009\u9879\u3002

                          "},{"location":"end-user/kpanda/storage/sc-share.html","title":"\u5171\u4eab\u5b58\u50a8\u6c60","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u652f\u6301\u5c06\u4e00\u4e2a\u5b58\u50a8\u6c60\u5171\u4eab\u7ed9\u591a\u4e2a\u547d\u540d\u7a7a\u95f4\u4f7f\u7528\uff0c\u4ee5\u4fbf\u63d0\u9ad8\u8d44\u6e90\u5229\u7528\u6548\u7387\u3002

                          1. \u5728\u5b58\u50a8\u6c60\u5217\u8868\u4e2d\u627e\u5230\u9700\u8981\u5171\u4eab\u7684\u5b58\u50a8\u6c60\uff0c\u5728\u53f3\u4fa7\u64cd\u4f5c\u680f\u4e0b\u70b9\u51fb \u6388\u6743\u547d\u540d\u7a7a\u95f4 \u3002

                          2. \u70b9\u51fb \u81ea\u5b9a\u4e49\u547d\u540d\u7a7a\u95f4 \u53ef\u4ee5\u9010\u4e00\u9009\u62e9\u9700\u8981\u5c06\u6b64\u5b58\u50a8\u6c60\u5171\u4eab\u5230\u54ea\u4e9b\u547d\u540d\u7a7a\u95f4\u3002

                            • \u70b9\u51fb \u6388\u6743\u6240\u6709\u547d\u540d\u7a7a\u95f4 \u53ef\u4ee5\u4e00\u6b21\u6027\u5c06\u6b64\u5b58\u50a8\u6c60\u5171\u4eab\u5230\u5f53\u524d\u96c6\u7fa4\u4e0b\u7684\u6240\u6709\u547d\u540d\u7a7a\u95f4\u3002
                            • \u5728\u5217\u8868\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u65b9\u70b9\u51fb \u79fb\u9664\u6388\u6743 \uff0c\u53ef\u4ee5\u89e3\u9664\u6388\u6743\uff0c\u505c\u6b62\u5c06\u6b64\u5b58\u50a8\u6c60\u5171\u4eab\u5230\u8be5\u547d\u540d\u7a7a\u95f4\u3002

                          "},{"location":"end-user/kpanda/storage/sc.html","title":"\u5b58\u50a8\u6c60(SC)","text":"

                          \u5b58\u50a8\u6c60\u6307\u5c06\u8bb8\u591a\u7269\u7406\u78c1\u76d8\u7ec4\u6210\u4e00\u4e2a\u5927\u578b\u5b58\u50a8\u8d44\u6e90\u6c60\uff0c\u672c\u5e73\u53f0\u652f\u6301\u63a5\u5165\u5404\u7c7b\u5b58\u50a8\u5382\u5546\u540e\u521b\u5efa\u5757\u5b58\u50a8\u6c60\u3001\u672c\u5730\u5b58\u50a8\u6c60\u3001\u81ea\u5b9a\u4e49\u5b58\u50a8\u6c60\uff0c\u7136\u540e\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u52a8\u6001\u914d\u7f6e\u6570\u636e\u5377\u3002

                          "},{"location":"end-user/kpanda/storage/sc.html#sc_1","title":"\u521b\u5efa\u5b58\u50a8\u6c60(SC)","text":"

                          \u76ee\u524d\u652f\u6301\u901a\u8fc7 YAML \u548c\u8868\u5355\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u5b58\u50a8\u6c60\uff0c\u8fd9\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u4f18\u52a3\uff0c\u53ef\u4ee5\u6ee1\u8db3\u4e0d\u540c\u7528\u6237\u7684\u4f7f\u7528\u9700\u6c42\u3002

                          • \u901a\u8fc7 YAML \u521b\u5efa\u6b65\u9aa4\u66f4\u5c11\u3001\u66f4\u9ad8\u6548\uff0c\u4f46\u95e8\u69db\u8981\u6c42\u8f83\u9ad8\uff0c\u9700\u8981\u719f\u6089\u5b58\u50a8\u6c60\u7684 YAML \u6587\u4ef6\u914d\u7f6e\u3002

                          • \u901a\u8fc7\u8868\u5355\u521b\u5efa\u66f4\u76f4\u89c2\u66f4\u7b80\u5355\uff0c\u6839\u636e\u63d0\u793a\u586b\u5199\u5bf9\u5e94\u7684\u503c\u5373\u53ef\uff0c\u4f46\u6b65\u9aa4\u66f4\u52a0\u7e41\u7410\u3002

                          "},{"location":"end-user/kpanda/storage/sc.html#yaml","title":"YAML \u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u5b58\u50a8\u6c60(SC) -> YAML \u521b\u5efa \u3002

                          2. \u5728\u5f39\u6846\u4e2d\u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u7136\u540e\u5728\u5f39\u6846\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                            \u652f\u6301\u4ece\u672c\u5730\u5bfc\u5165 YAML \u6587\u4ef6\u6216\u5c06\u586b\u5199\u597d\u7684\u6587\u4ef6\u4e0b\u8f7d\u4fdd\u5b58\u5230\u672c\u5730\u3002

                          "},{"location":"end-user/kpanda/storage/sc.html#_1","title":"\u8868\u5355\u521b\u5efa","text":"
                          1. \u5728\u96c6\u7fa4\u5217\u8868\u4e2d\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u7136\u540e\u5728\u5de6\u4fa7\u5bfc\u822a\u680f\u70b9\u51fb \u5bb9\u5668\u5b58\u50a8 -> \u5b58\u50a8\u6c60(SC) -> \u521b\u5efa\u5b58\u50a8\u6c60(SC) \u3002

                          2. \u586b\u5199\u57fa\u672c\u4fe1\u606f\uff0c\u7136\u540e\u5728\u5e95\u90e8\u70b9\u51fb \u786e\u5b9a \u3002

                            \u81ea\u5b9a\u4e49\u5b58\u50a8\u7cfb\u7edf

                            • \u5b58\u50a8\u6c60\u540d\u79f0\u3001\u9a71\u52a8\u3001\u56de\u6536\u7b56\u7565\u5728\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002
                            • CSI \u5b58\u50a8\u9a71\u52a8\uff1a\u57fa\u4e8e\u6807\u51c6 Kubernetes \u7684\u5bb9\u5668\u5b58\u50a8\u63a5\u53e3\u63d2\u4ef6\uff0c\u9700\u9075\u5b88\u5b58\u50a8\u5382\u5546\u89c4\u5b9a\u7684\u683c\u5f0f\uff0c\u4f8b\u5982 rancher.io/local-path \u3002

                              • \u6709\u5173\u5982\u4f55\u586b\u5199\u4e0d\u540c\u5382\u5546\u63d0\u4f9b\u7684 CSI \u9a71\u52a8\uff0c\u53ef\u53c2\u8003 Kubernetes \u5b98\u65b9\u6587\u6863\u5b58\u50a8\u7c7b\u3002
                                • \u56de\u6536\u7b56\u7565\uff1a\u5220\u9664\u6570\u636e\u5377\u65f6\uff0c\u4fdd\u7559\u6570\u636e\u5377\u4e2d\u7684\u6570\u636e\u6216\u8005\u5220\u9664\u5176\u4e2d\u7684\u6570\u636e\u3002
                                • \u5feb\u7167/\u6269\u5bb9\uff1a\u5f00\u542f\u540e\uff0c\u57fa\u4e8e\u8be5\u5b58\u50a8\u6c60\u7684\u6570\u636e\u5377/\u6570\u636e\u5377\u58f0\u660e\u624d\u80fd\u652f\u6301\u6269\u5bb9\u548c\u5feb\u7167\u529f\u80fd\uff0c\u4f46 \u524d\u63d0\u662f\u5e95\u5c42\u4f7f\u7528\u7684\u5b58\u50a8\u9a71\u52a8\u652f\u6301\u5feb\u7167\u548c\u6269\u5bb9\u529f\u80fd\u3002

                            HwameiStor \u5b58\u50a8\u7cfb\u7edf

                            • \u5b58\u50a8\u6c60\u540d\u79f0\u3001\u9a71\u52a8\u3001\u56de\u6536\u7b56\u7565\u5728\u521b\u5efa\u540e\u4e0d\u53ef\u4fee\u6539\u3002
                            • \u5b58\u50a8\u7cfb\u7edf\uff1aHwameiStor \u5b58\u50a8\u7cfb\u7edf\u3002
                            • \u5b58\u50a8\u7c7b\u578b\uff1a\u652f\u6301 LVM\uff0c\u88f8\u78c1\u76d8\u7c7b\u578b
                              • LVM \u7c7b\u578b \uff1aHwameiStor \u63a8\u8350\u4f7f\u7528\u6b64\u65b9\u5f0f\uff0c\u53ef\u4f7f\u7528\u9ad8\u53ef\u7528\u6570\u636e\u5377\uff0c\u5bf9\u5e94\u7684\u7684 CSI \u5b58\u50a8\u9a71\u52a8\u4e3a lvm.hwameistor.io\u3002
                              • \u88f8\u78c1\u76d8\u6570\u636e\u5377 \uff1a \u9002\u7528\u4e8e\u975e\u9ad8\u53ef\u7528\u573a\u666f\uff0c\u65e0\u9ad8\u53ef\u7528\u80fd\u529b\uff0c\u5bf9\u5e94\u7684 CSI \u9a71\u52a8\u4e3a hdd.hwameistor.io
                            • \u9ad8\u53ef\u7528\u6a21\u5f0f\uff1a\u4f7f\u7528\u9ad8\u53ef\u7528\u80fd\u529b\u4e4b\u524d\u8bf7\u786e\u8ba4 DRBD \u7ec4\u4ef6 \u5df2\u5b89\u88c5\u3002\u5f00\u542f\u9ad8\u53ef\u7528\u6a21\u5f0f\u540e\uff0c\u53ef\u5c06\u6570\u636e\u5377\u526f\u672c\u6570\u8bbe\u7f6e\u4e3a 1 \u548c 2\u3002 \u5982\u9700\u8981\u53ef\u5c06\u6570\u636e\u5377\u526f\u672c\u4ece 1 Convert \u6210 1
                            • \u56de\u6536\u7b56\u7565\uff1a\u5220\u9664\u6570\u636e\u5377\u65f6\uff0c\u4fdd\u7559\u6570\u636e\u5377\u4e2d\u7684\u6570\u636e\u6216\u8005\u5220\u9664\u5176\u4e2d\u7684\u6570\u636e\u3002
                            • \u5feb\u7167/\u6269\u5bb9\uff1a\u5f00\u542f\u540e\uff0c\u57fa\u4e8e\u8be5\u5b58\u50a8\u6c60\u7684\u6570\u636e\u5377/\u6570\u636e\u5377\u58f0\u660e\u624d\u80fd\u652f\u6301\u6269\u5bb9\u548c\u5feb\u7167\u529f\u80fd\uff0c\u4f46 \u524d\u63d0\u662f\u5e95\u5c42\u4f7f\u7528\u7684\u5b58\u50a8\u9a71\u52a8\u652f\u6301\u5feb\u7167\u548c\u6269\u5bb9\u529f\u80fd\u3002

                            Note

                            \u76ee\u524d HwameiStor xfs\u3001ext4 \u4e24\u79cd\u6587\u4ef6\u7cfb\u7edf\uff0c\u5176\u4e2d\u9ed8\u8ba4\u4f7f\u7528\u7684\u662f xfs \u6587\u4ef6\u7cfb\u7edf\uff0c\u5982\u679c\u60f3\u8981\u66ff\u6362\u4e3a ext4\uff0c\u53ef\u4ee5\u5728\u81ea\u5b9a\u4e49\u53c2\u6570\u6dfb\u52a0 csi.storage.k8s.io/fstype: ext4

                          "},{"location":"end-user/kpanda/storage/sc.html#sc_2","title":"\u66f4\u65b0\u5b58\u50a8\u6c60(SC)","text":"

                          \u5728\u5b58\u50a8\u6c60\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u66f4\u65b0\u7684\u5b58\u50a8\u6c60\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u7f16\u8f91 \u5373\u53ef\u901a\u8fc7\u66f4\u65b0\u5b58\u50a8\u6c60\u3002

                          Info

                          \u9009\u62e9 \u67e5\u770b YAML \u53ef\u4ee5\u67e5\u770b\u8be5\u5b58\u50a8\u6c60\u7684 YAML \u6587\u4ef6\uff0c\u4f46\u4e0d\u652f\u6301\u7f16\u8f91\u3002

                          "},{"location":"end-user/kpanda/storage/sc.html#sc_3","title":"\u5220\u9664\u5b58\u50a8\u6c60(SC)","text":"

                          \u5728\u5b58\u50a8\u6c60\u5217\u8868\u9875\u9762\uff0c\u627e\u5230\u9700\u8981\u5220\u9664\u7684\u5b58\u50a8\u6c60\uff0c\u5728\u53f3\u4fa7\u7684\u64cd\u4f5c\u680f\u4e0b\u9009\u62e9 \u5220\u9664 \u3002

                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html","title":"\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09","text":"

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09\u3002

                          \u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09\u9002\u7528\u4e8e\u4e8e\u6267\u884c\u5468\u671f\u6027\u7684\u64cd\u4f5c\uff0c\u4f8b\u5982\u5907\u4efd\u3001\u62a5\u544a\u751f\u6210\u7b49\u3002\u8fd9\u4e9b\u4efb\u52a1\u53ef\u4ee5\u914d\u7f6e\u4e3a\u5468\u671f\u6027\u91cd\u590d\u7684\uff08\u4f8b\u5982\uff1a\u6bcf\u5929/\u6bcf\u5468/\u6bcf\u6708\u4e00\u6b21\uff09\uff0c\u53ef\u4ee5\u5b9a\u4e49\u4efb\u52a1\u5f00\u59cb\u6267\u884c\u7684\u65f6\u95f4\u95f4\u9694\u3002

                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\uff08CronJob\uff09\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u5b9a\u65f6\u4efb\u52a1\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b9a\u65f6\u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

                          3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u5b9a\u65f6\u4efb\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                            \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u5b9a\u65f6\u4efb\u52a1 \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u5b9a\u65f6\u4efb\u52a1\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u91cd\u542f\u7b49\u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

                          \u5728 \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1 \u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                          • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                          • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u5b9a\u65f6\u4efb\u52a1\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
                          • \u63cf\u8ff0\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u91cf\u5e94\u4e0d\u8d85\u8fc7 512 \u4e2a\u3002
                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

                          \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

                          \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

                          \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

                          • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
                          • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
                          • \u955c\u50cf\uff1a
                            • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                            • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                            • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                            • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
                          • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
                          • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
                          • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                            • \u6574\u5361\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                            • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                              • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                              • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                              • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                              • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                              • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                            • Mig \u6a21\u5f0f
                              • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                              • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

                          \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

                          \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

                          \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

                          \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

                          \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

                          \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#_5","title":"\u5b9a\u65f6\u4efb\u52a1\u914d\u7f6e","text":"
                          • \u5e76\u53d1\u7b56\u7565\uff1a\u662f\u5426\u5141\u8bb8\u591a\u4e2a Job \u4efb\u52a1\u5e76\u884c\u6267\u884c\u3002

                            • Allow \uff1a\u53ef\u4ee5\u5728\u524d\u4e00\u4e2a\u4efb\u52a1\u672a\u5b8c\u6210\u65f6\u5c31\u521b\u5efa\u65b0\u7684\u5b9a\u65f6\u4efb\u52a1\uff0c\u800c\u4e14\u591a\u4e2a\u4efb\u52a1\u53ef\u4ee5\u5e76\u884c\u3002\u4efb\u52a1\u592a\u591a\u53ef\u80fd\u62a2\u5360\u96c6\u7fa4\u8d44\u6e90\u3002
                            • Forbid \uff1a\u5728\u524d\u4e00\u4e2a\u4efb\u52a1\u5b8c\u6210\u4e4b\u524d\uff0c\u4e0d\u80fd\u521b\u5efa\u65b0\u4efb\u52a1\uff0c\u5982\u679c\u65b0\u4efb\u52a1\u7684\u6267\u884c\u65f6\u95f4\u5230\u4e86\u800c\u4e4b\u524d\u7684\u4efb\u52a1\u4ecd\u672a\u6267\u884c\u5b8c\uff0cCronJob \u4f1a\u5ffd\u7565\u65b0\u4efb\u52a1\u7684\u6267\u884c\u3002
                            • Replace \uff1a\u5982\u679c\u65b0\u4efb\u52a1\u7684\u6267\u884c\u65f6\u95f4\u5230\u4e86\uff0c\u4f46\u524d\u4e00\u4e2a\u4efb\u52a1\u8fd8\u672a\u5b8c\u6210\uff0c\u65b0\u7684\u4efb\u52a1\u4f1a\u53d6\u4ee3\u524d\u4e00\u4e2a\u4efb\u52a1\u3002

                            \u4e0a\u8ff0\u89c4\u5219\u4ec5\u9002\u7528\u4e8e\u540c\u4e00\u4e2a CronJob \u521b\u5efa\u7684\u591a\u4e2a\u4efb\u52a1\u3002\u591a\u4e2a CronJob \u521b\u5efa\u7684\u591a\u4e2a\u4efb\u52a1\u603b\u662f\u5141\u8bb8\u5e76\u53d1\u6267\u884c\u3002

                          • \u5b9a\u65f6\u89c4\u5219\uff1a\u57fa\u4e8e\u5206\u949f\u3001\u5c0f\u65f6\u3001\u5929\u3001\u5468\u3001\u6708\u8bbe\u7f6e\u4efb\u52a1\u6267\u884c\u7684\u65f6\u95f4\u5468\u671f\u3002\u652f\u6301\u7528\u6570\u5b57\u548c * \u81ea\u5b9a\u4e49 Cron \u8868\u8fbe\u5f0f\uff0c\u8f93\u5165\u8868\u8fbe\u5f0f\u540e\u4e0b\u65b9\u4f1a\u63d0\u793a\u5f53\u524d\u8868\u8fbe\u5f0f\u7684\u542b\u4e49\u3002\u6709\u5173\u8be6\u7ec6\u7684\u8868\u8fbe\u5f0f\u8bed\u6cd5\u89c4\u5219\uff0c\u53ef\u53c2\u8003 Cron \u65f6\u95f4\u8868\u8bed\u6cd5\u3002

                          • \u4efb\u52a1\u8bb0\u5f55\uff1a\u8bbe\u5b9a\u4fdd\u7559\u591a\u5c11\u6761\u4efb\u52a1\u6267\u884c\u6210\u529f\u6216\u5931\u8d25\u7684\u8bb0\u5f55\u3002 0 \u8868\u793a\u4e0d\u4fdd\u7559\u3002
                          • \u8d85\u65f6\u65f6\u95f4\uff1a\u8d85\u51fa\u8be5\u65f6\u95f4\u65f6\uff0c\u4efb\u52a1\u5c31\u4f1a\u88ab\u6807\u8bc6\u4e3a\u6267\u884c\u5931\u8d25\uff0c\u4efb\u52a1\u4e0b\u7684\u6240\u6709 Pod \u90fd\u4f1a\u88ab\u5220\u9664\u3002\u4e3a\u7a7a\u65f6\u8868\u793a\u4e0d\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\u3002\u9ed8\u8ba4\u503c\u4e3a 360 s\u3002
                          • \u91cd\u8bd5\u6b21\u6570\uff1a\u4efb\u52a1\u53ef\u91cd\u8bd5\u6b21\u6570\uff0c\u9ed8\u8ba4\u503c\u4e3a 6\u3002
                          • \u91cd\u542f\u7b56\u7565\uff1a\u8bbe\u7f6e\u4efb\u52a1\u5931\u8d25\u65f6\u662f\u5426\u91cd\u542f Pod\u3002
                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#_6","title":"\u670d\u52a1\u914d\u7f6e","text":"

                          \u4e3a\u6709\u72b6\u6001\u8d1f\u8f7d\u914d\u7f6e\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u6709\u72b6\u6001\u8d1f\u8f7d\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

                          1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

                          2. \u53c2\u8003\u521b\u5efa\u670d\u52a1\uff0c\u914d\u7f6e\u670d\u52a1\u53c2\u6570\u3002

                          3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#_7","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

                          \u5b9a\u65f6\u4efb\u52a1\u7684\u9ad8\u7ea7\u914d\u7f6e\u4e3b\u8981\u6d89\u53ca\u6807\u7b7e\u4e0e\u6ce8\u89e3\u3002

                          \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u4f8b Pod \u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                          "},{"location":"end-user/kpanda/workloads/create-cronjob.html#yaml","title":"YAML \u521b\u5efa","text":"

                          \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b9a\u65f6\u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

                          3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

                          \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u7684 YAML \u793a\u4f8b
                          apiVersion: batch/v1\nkind: CronJob\nmetadata:\n  creationTimestamp: '2022-12-26T09:45:47Z'\n  generation: 1\n  name: demo\n  namespace: default\n  resourceVersion: '92726617'\n  uid: d030d8d7-a405-4dcd-b09a-176942ef36c9\nspec:\n  concurrencyPolicy: Allow\n  failedJobsHistoryLimit: 1\n  jobTemplate:\n    metadata:\n      creationTimestamp: null\n    spec:\n      activeDeadlineSeconds: 360\n      backoffLimit: 6\n      template:\n        metadata:\n          creationTimestamp: null\n        spec:\n          containers:\n            - image: nginx\n              imagePullPolicy: IfNotPresent\n              lifecycle: {}\n              name: container-3\n              resources:\n                limits:\n                  cpu: 250m\n                  memory: 512Mi\n                requests:\n                  cpu: 250m\n                  memory: 512Mi\n              securityContext:\n                privileged: false\n              terminationMessagePath: /dev/termination-log\n              terminationMessagePolicy: File\n          dnsPolicy: ClusterFirst\n          restartPolicy: Never\n          schedulerName: default-scheduler\n          securityContext: {}\n          terminationGracePeriodSeconds: 30\n  schedule: 0 0 13 * 5\n  successfulJobsHistoryLimit: 3\n  suspend: false\nstatus: {}\n
                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html","title":"\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b(DaemonSet)","text":"

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b\uff08DaemonSet\uff09\u3002

                          \u5b88\u62a4\u8fdb\u7a0b\uff08DaemonSet\uff09\u901a\u8fc7\u8282\u70b9\u4eb2\u548c\u6027\u4e0e\u6c61\u70b9\u529f\u80fd\u786e\u4fdd\u5728\u5168\u90e8\u6216\u90e8\u5206\u8282\u70b9\u4e0a\u8fd0\u884c\u4e00\u4e2a Pod \u7684\u526f\u672c\u3002\u5bf9\u4e8e\u65b0\u52a0\u5165\u96c6\u7fa4\u7684\u8282\u70b9\uff0cDaemonSet \u81ea\u52a8\u5728\u65b0\u8282\u70b9\u4e0a\u90e8\u7f72\u76f8\u5e94\u7684 Pod\uff0c\u5e76\u8ddf\u8e2a Pod \u7684\u8fd0\u884c\u72b6\u6001\u3002\u5f53\u8282\u70b9\u88ab\u79fb\u9664\u65f6\uff0cDaemonSet \u5219\u5220\u9664\u5176\u521b\u5efa\u7684\u6240\u6709 Pod\u3002

                          \u5b88\u62a4\u8fdb\u7a0b\u7684\u5e38\u89c1\u7528\u4f8b\u5305\u62ec\uff1a

                          • \u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u96c6\u7fa4\u5b88\u62a4\u8fdb\u7a0b\u3002

                          • \u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u65e5\u5fd7\u6536\u96c6\u5b88\u62a4\u8fdb\u7a0b\u3002

                          • \u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u76d1\u63a7\u5b88\u62a4\u8fdb\u7a0b\u3002

                          \u7b80\u5355\u8d77\u89c1\uff0c\u53ef\u4ee5\u5728\u6bcf\u4e2a\u8282\u70b9\u4e0a\u4e3a\u6bcf\u79cd\u7c7b\u578b\u7684\u5b88\u62a4\u8fdb\u7a0b\u90fd\u542f\u52a8\u4e00\u4e2a DaemonSet\u3002\u5982\u9700\u66f4\u7cbe\u7ec6\u3001\u66f4\u9ad8\u7ea7\u5730\u7ba1\u7406\u5b88\u62a4\u8fdb\u7a0b\uff0c\u4e5f\u53ef\u4ee5\u4e3a\u540c\u4e00\u79cd\u5b88\u62a4\u8fdb\u7a0b\u90e8\u7f72\u591a\u4e2a DaemonSet\u3002\u6bcf\u4e2a DaemonSet \u5177\u6709\u4e0d\u540c\u7684\u6807\u5fd7\uff0c\u5e76\u4e14\u5bf9\u4e0d\u540c\u786c\u4ef6\u7c7b\u578b\u5177\u6709\u4e0d\u540c\u7684\u5185\u5b58\u3001CPU \u8981\u6c42\u3002

                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u521b\u5efa DaemonSet \u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u5b88\u62a4\u8fdb\u7a0b\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b88\u62a4\u8fdb\u7a0b \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

                          3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                            \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u5b88\u62a4\u8fdb\u7a0b \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u5b88\u62a4\u8fdb\u7a0b\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u91cd\u542f\u7b49\u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

                          \u5728 \u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b \u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                          • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                          • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u5b88\u62a4\u8fdb\u7a0b\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
                          • \u63cf\u8ff0\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u91cf\u5e94\u4e0d\u8d85\u8fc7 512 \u4e2a\u3002
                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

                          \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

                          \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

                          \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

                          • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
                          • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
                          • \u955c\u50cf\uff1a
                            • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                            • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                            • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                            • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
                          • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
                          • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
                          • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                            • \u6574\u5361\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                            • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                              • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                              • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                              • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                              • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                              • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                            • Mig \u6a21\u5f0f
                              • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                              • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

                          \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

                          \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

                          \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

                          \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

                          \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

                          \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html#_5","title":"\u670d\u52a1\u914d\u7f6e","text":"

                          \u4e3a\u5b88\u62a4\u8fdb\u7a0b\u521b\u5efa\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u5b88\u62a4\u8fdb\u7a0b\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

                          1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

                          2. \u914d\u7f6e\u670d\u52a1\u53c2\u6570\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\u521b\u5efa\u670d\u52a1\u3002

                          3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html#_6","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

                          \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u8d1f\u8f7d\u7684\u7f51\u7edc\u914d\u7f6e\u3001\u5347\u7ea7\u7b56\u7565\u3001\u8c03\u5ea6\u7b56\u7565\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u56db\u90e8\u5206\uff0c\u53ef\u70b9\u51fb\u4e0b\u65b9\u7684\u9875\u7b7e\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u7f51\u7edc\u914d\u7f6e\u5347\u7ea7\u7b56\u7565\u8c03\u5ea6\u7b56\u7565\u6807\u7b7e\u4e0e\u6ce8\u89e3

                          \u5e94\u7528\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u4f1a\u51fa\u73b0\u5197\u4f59\u7684 DNS \u67e5\u8be2\u3002Kubernetes \u4e3a\u5e94\u7528\u63d0\u4f9b\u4e86\u4e0e DNS \u76f8\u5173\u7684\u914d\u7f6e\u9009\u9879\uff0c\u80fd\u591f\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u6709\u6548\u5730\u51cf\u5c11\u5197\u4f59\u7684 DNS \u67e5\u8be2\uff0c\u63d0\u5347\u4e1a\u52a1\u5e76\u53d1\u91cf\u3002

                          • DNS \u7b56\u7565

                            • Default\uff1a\u4f7f\u5bb9\u5668\u4f7f\u7528 kubelet \u7684 --resolv-conf \u53c2\u6570\u6307\u5411\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u3002\u8be5\u914d\u7f6e\u53ea\u80fd\u89e3\u6790\u6ce8\u518c\u5230\u4e92\u8054\u7f51\u4e0a\u7684\u5916\u90e8\u57df\u540d\uff0c\u65e0\u6cd5\u89e3\u6790\u96c6\u7fa4\u5185\u90e8\u57df\u540d\uff0c\u4e14\u4e0d\u5b58\u5728\u65e0\u6548\u7684 DNS \u67e5\u8be2\u3002
                            • ClusterFirstWithHostNet\uff1a\u5e94\u7528\u5bf9\u63a5\u4e3b\u673a\u7684\u57df\u540d\u6587\u4ef6\u3002
                            • ClusterFirst\uff1a\u5e94\u7528\u5bf9\u63a5 Kube-DNS/CoreDNS\u3002
                            • None\uff1aKubernetes v1.9\uff08Beta in v1.10\uff09\u4e2d\u5f15\u5165\u7684\u65b0\u9009\u9879\u503c\u3002\u8bbe\u7f6e\u4e3a None \u4e4b\u540e\uff0c\u5fc5\u987b\u8bbe\u7f6e dnsConfig\uff0c\u6b64\u65f6\u5bb9\u5668\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u5c06\u5b8c\u5168\u901a\u8fc7 dnsConfig \u7684\u914d\u7f6e\u6765\u751f\u6210\u3002
                          • \u57df\u540d\u670d\u52a1\u5668\uff1a\u586b\u5199\u57df\u540d\u670d\u52a1\u5668\u7684\u5730\u5740\uff0c\u4f8b\u5982 10.6.175.20 \u3002

                          • \u641c\u7d22\u57df\uff1a\u57df\u540d\u67e5\u8be2\u65f6\u7684 DNS \u641c\u7d22\u57df\u5217\u8868\u3002\u6307\u5b9a\u540e\uff0c\u63d0\u4f9b\u7684\u641c\u7d22\u57df\u5217\u8868\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 search \u5b57\u6bb5\u4e2d\uff0c\u5e76\u5220\u9664\u91cd\u590d\u7684\u57df\u540d\u3002Kubernetes \u6700\u591a\u5141\u8bb8 6 \u4e2a\u641c\u7d22\u57df\u3002
                          • Options\uff1aDNS \u7684\u914d\u7f6e\u9009\u9879\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5177\u6709 name \u5c5e\u6027\uff08\u5fc5\u9700\uff09\u548c value \u5c5e\u6027\uff08\u53ef\u9009\uff09\u3002\u8be5\u5b57\u6bb5\u4e2d\u7684\u5185\u5bb9\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 options \u5b57\u6bb5\u4e2d\uff0cdnsConfig \u7684 options \u7684\u67d0\u4e9b\u9009\u9879\u5982\u679c\u4e0e\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684\u9009\u9879\u51b2\u7a81\uff0c\u5219\u4f1a\u88ab dnsConfig \u6240\u8986\u76d6\u3002
                          • \u4e3b\u673a\u522b\u540d\uff1a\u4e3a\u4e3b\u673a\u8bbe\u7f6e\u7684\u522b\u540d\u3002

                          • \u5347\u7ea7\u65b9\u5f0f\uff1a \u6eda\u52a8\u5347\u7ea7 \u6307\u9010\u6b65\u7528\u65b0\u7248\u672c\u7684\u5b9e\u4f8b\u66ff\u6362\u65e7\u7248\u672c\u7684\u5b9e\u4f8b\uff0c\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e1a\u52a1\u6d41\u91cf\u4f1a\u540c\u65f6\u8d1f\u8f7d\u5747\u8861\u5206\u5e03\u5230\u65b0\u8001\u7684\u5b9e\u4f8b\u4e0a\uff0c\u56e0\u6b64\u4e1a\u52a1\u4e0d\u4f1a\u4e2d\u65ad\u3002 \u91cd\u5efa\u5347\u7ea7 \u6307\u5148\u5220\u9664\u8001\u7248\u672c\u7684\u8d1f\u8f7d\u5b9e\u4f8b\uff0c\u518d\u5b89\u88c5\u6307\u5b9a\u7684\u65b0\u7248\u672c\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2d\u4e1a\u52a1\u4f1a\u4e2d\u65ad\u3002
                          • \u6700\u5927\u65e0\u6548 Pod \u6570\uff1a\u6307\u5b9a\u8d1f\u8f7d\u66f4\u65b0\u8fc7\u7a0b\u4e2d\u4e0d\u53ef\u7528 Pod \u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\uff0c\u9ed8\u8ba4 25%\u3002\u5982\u679c\u7b49\u4e8e\u5b9e\u4f8b\u6570\u6709\u670d\u52a1\u4e2d\u65ad\u7684\u98ce\u9669\u3002
                          • \u6700\u5927\u6d6a\u6d8c\uff1a\u66f4\u65b0 Pod \u7684\u8fc7\u7a0b\u4e2d Pod \u603b\u6570\u8d85\u8fc7 Pod \u671f\u671b\u526f\u672c\u6570\u90e8\u5206\u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\u3002\u9ed8\u8ba4 25%\u3002
                          • \u6700\u5927\u4fdd\u7559\u7248\u672c\u6570\uff1a\u8bbe\u7f6e\u7248\u672c\u56de\u6eda\u65f6\u4fdd\u7559\u7684\u65e7\u7248\u672c\u6570\u91cf\u3002\u9ed8\u8ba4 10\u3002
                          • Pod \u53ef\u7528\u6700\u77ed\u65f6\u95f4\uff1aPod \u5c31\u7eea\u7684\u6700\u77ed\u65f6\u95f4\uff0c\u53ea\u6709\u8d85\u51fa\u8fd9\u4e2a\u65f6\u95f4 Pod \u624d\u88ab\u8ba4\u4e3a\u53ef\u7528\uff0c\u9ed8\u8ba4 0 \u79d2\u3002
                          • \u5347\u7ea7\u6700\u5927\u6301\u7eed\u65f6\u95f4\uff1a\u5982\u679c\u8d85\u8fc7\u6240\u8bbe\u7f6e\u7684\u65f6\u95f4\u4ecd\u672a\u90e8\u7f72\u6210\u529f\uff0c\u5219\u5c06\u8be5\u8d1f\u8f7d\u6807\u8bb0\u4e3a\u5931\u8d25\u3002\u9ed8\u8ba4 600 \u79d2\u3002
                          • \u7f29\u5bb9\u65f6\u95f4\u7a97\uff1a\u8d1f\u8f7d\u505c\u6b62\u524d\u547d\u4ee4\u7684\u6267\u884c\u65f6\u95f4\u7a97\uff080-9,999\u79d2\uff09\uff0c\u9ed8\u8ba4 30 \u79d2\u3002

                          • \u5bb9\u5fcd\u65f6\u95f4\uff1a\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u5c06\u8d1f\u8f7d\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002
                          • \u8282\u70b9\u4eb2\u548c\u6027\uff1a\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002
                          • \u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
                          • \u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u4e0d\u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
                          • \u62d3\u6251\u57df\uff1a\u5373 topologyKey\uff0c\u7528\u4e8e\u6307\u5b9a\u53ef\u4ee5\u8c03\u5ea6\u7684\u4e00\u7ec4\u8282\u70b9\u3002\u4f8b\u5982\uff0c kubernetes.io/os \u8868\u793a\u53ea\u8981\u67d0\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u7684\u8282\u70b9\u6ee1\u8db3 labelSelector \u7684\u6761\u4ef6\u5c31\u53ef\u4ee5\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002

                          \u5177\u4f53\u8be6\u60c5\u8bf7\u53c2\u8003\u8c03\u5ea6\u7b56\u7565\u3002

                          \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u548c\u5bb9\u5668\u7ec4\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                          "},{"location":"end-user/kpanda/workloads/create-daemonset.html#yaml","title":"YAML \u521b\u5efa","text":"

                          \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u5b88\u62a4\u8fdb\u7a0b \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

                          3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

                          \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u5b88\u62a4\u8fdb\u7a0b\u7684 YAML \u793a\u4f8b
                          kind: DaemonSet\napiVersion: apps/v1\nmetadata:\n  name: hwameistor-local-disk-manager\n  namespace: hwameistor\n  uid: ccbdc098-7de3-4a8a-96dd-d1cee159c92b\n  resourceVersion: '90999552'\n  generation: 1\n  creationTimestamp: '2022-12-15T09:03:44Z'\n  labels:\n    app.kubernetes.io/managed-by: Helm\n  annotations:\n    deprecated.daemonset.template.generation: '1'\n    meta.helm.sh/release-name: hwameistor\n    meta.helm.sh/release-namespace: hwameistor\nspec:\n  selector:\n    matchLabels:\n      app: hwameistor-local-disk-manager\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: hwameistor-local-disk-manager\n    spec:\n      volumes:\n        - name: udev\n          hostPath:\n            path: /run/udev\n            type: Directory\n        - name: procmount\n          hostPath:\n            path: /proc\n            type: Directory\n        - name: devmount\n          hostPath:\n            path: /dev\n            type: Directory\n        - name: socket-dir\n          hostPath:\n            path: /var/lib/kubelet/plugins/disk.hwameistor.io\n            type: DirectoryOrCreate\n        - name: registration-dir\n          hostPath:\n            path: /var/lib/kubelet/plugins_registry/\n            type: Directory\n        - name: plugin-dir\n          hostPath:\n            path: /var/lib/kubelet/plugins\n            type: DirectoryOrCreate\n        - name: pods-mount-dir\n          hostPath:\n            path: /var/lib/kubelet/pods\n            type: DirectoryOrCreate\n      containers:\n        - name: registrar\n          image: k8s-gcr.m.daocloud.io/sig-storage/csi-node-driver-registrar:v2.5.0\n          args:\n            - '--v=5'\n            - '--csi-address=/csi/csi.sock'\n            - >-\n              --kubelet-registration-path=/var/lib/kubelet/plugins/disk.hwameistor.io/csi.sock\n          env:\n            - name: KUBE_NODE_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: spec.nodeName\n          resources: {}\n          volumeMounts:\n            - name: socket-dir\n              mountPath: /csi\n            - name: registration-dir\n              mountPath: /registration\n          lifecycle:\n            preStop:\n              exec:\n                command:\n                  - /bin/sh\n                  - '-c'\n                  - >-\n                    rm -rf /registration/disk.hwameistor.io \n                    /registration/disk.hwameistor.io-reg.sock\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: manager\n          image: ghcr.m.daocloud.io/hwameistor/local-disk-manager:v0.6.1\n          command:\n            - /local-disk-manager\n          args:\n            - '--endpoint=$(CSI_ENDPOINT)'\n            - '--nodeid=$(NODENAME)'\n            - '--csi-enable=true'\n          env:\n            - name: CSI_ENDPOINT\n              value: unix://var/lib/kubelet/plugins/disk.hwameistor.io/csi.sock\n            - name: NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: WATCH_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: NODENAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: spec.nodeName\n            - name: OPERATOR_NAME\n              value: local-disk-manager\n          resources: {}\n          volumeMounts:\n            - name: udev\n              mountPath: /run/udev\n            - name: procmount\n              readOnly: true\n              mountPath: /host/proc\n            - name: devmount\n              mountPath: /dev\n            - name: registration-dir\n              mountPath: /var/lib/kubelet/plugins_registry\n            - name: plugin-dir\n              mountPath: /var/lib/kubelet/plugins\n              mountPropagation: Bidirectional\n            - name: pods-mount-dir\n              mountPath: /var/lib/kubelet/pods\n              mountPropagation: Bidirectional\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n          securityContext:\n            privileged: true\n      restartPolicy: Always\n      terminationGracePeriodSeconds: 30\n      dnsPolicy: ClusterFirst\n      serviceAccountName: hwameistor-admin\n      serviceAccount: hwameistor-admin\n      hostNetwork: true\n      hostPID: true\n      securityContext: {}\n      schedulerName: default-scheduler\n      tolerations:\n        - key: CriticalAddonsOnly\n          operator: Exists\n        - key: node.kubernetes.io/not-ready\n          operator: Exists\n          effect: NoSchedule\n        - key: node-role.kubernetes.io/master\n          operator: Exists\n          effect: NoSchedule\n        - key: node-role.kubernetes.io/control-plane\n          operator: Exists\n          effect: NoSchedule\n        - key: node.cloudprovider.kubernetes.io/uninitialized\n          operator: Exists\n          effect: NoSchedule\n  updateStrategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxUnavailable: 1\n      maxSurge: 0\n  revisionHistoryLimit: 10\nstatus:\n  currentNumberScheduled: 4\n  numberMisscheduled: 0\n  desiredNumberScheduled: 4\n  numberReady: 4\n  observedGeneration: 1\n  updatedNumberScheduled: 4\n  numberAvailable: 4\n
                          "},{"location":"end-user/kpanda/workloads/create-deployment.html","title":"\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09","text":"

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u3002

                          \u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09\u662f Kubernetes \u4e2d\u7684\u4e00\u79cd\u5e38\u89c1\u8d44\u6e90\uff0c\u4e3b\u8981\u4e3a Pod \u548c ReplicaSet \u63d0\u4f9b\u58f0\u660e\u5f0f\u66f4\u65b0\uff0c\u652f\u6301\u5f39\u6027\u4f38\u7f29\u3001\u6eda\u52a8\u5347\u7ea7\u3001\u7248\u672c\u56de\u9000\u7b49\u529f\u80fd\u3002\u5728 Deployment \u4e2d\u58f0\u660e\u671f\u671b\u7684 Pod \u72b6\u6001\uff0cDeployment Controller \u4f1a\u901a\u8fc7 ReplicaSet \u4fee\u6539\u5f53\u524d\u72b6\u6001\uff0c\u4f7f\u5176\u8fbe\u5230\u9884\u5148\u58f0\u660e\u7684\u671f\u671b\u72b6\u6001\u3002Deployment \u662f\u65e0\u72b6\u6001\u7684\uff0c\u4e0d\u652f\u6301\u6570\u636e\u6301\u4e45\u5316\uff0c\u9002\u7528\u4e8e\u90e8\u7f72\u65e0\u72b6\u6001\u7684\u3001\u4e0d\u9700\u8981\u4fdd\u5b58\u6570\u636e\u3001\u968f\u65f6\u53ef\u4ee5\u91cd\u542f\u56de\u6eda\u7684\u5e94\u7528\u3002

                          \u901a\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\uff0c\u53ef\u4ee5\u57fa\u4e8e\u76f8\u5e94\u7684\u89d2\u8272\u6743\u9650\u8f7b\u677e\u7ba1\u7406\u591a\u4e91\u591a\u96c6\u7fa4\u4e0a\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5305\u62ec\u5bf9\u65e0\u72b6\u6001\u8d1f\u8f7d\u7684\u521b\u5efa\u3001\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u3002

                          "},{"location":"end-user/kpanda/workloads/create-deployment.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u5728\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

                          "},{"location":"end-user/kpanda/workloads/create-deployment.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u65e0\u72b6\u6001\u8d1f\u8f7d\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

                          3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                            \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u65e0\u72b6\u6001\u8d1f\u8f7d \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u8d1f\u8f7d\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u64cd\u4f5c\u3002\u5982\u679c\u8d1f\u8f7d\u72b6\u6001\u51fa\u73b0\u5f02\u5e38\uff0c\u8bf7\u67e5\u770b\u5177\u4f53\u5f02\u5e38\u4fe1\u606f\uff0c\u53ef\u53c2\u8003\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u3002

                          "},{"location":"end-user/kpanda/workloads/create-deployment.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"
                          • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 deployment-01\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                          • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u8d1f\u8f7d\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
                          • \u5b9e\u4f8b\u6570\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684 Pod \u5b9e\u4f8b\u6570\u91cf\uff0c\u9ed8\u8ba4\u521b\u5efa 1 \u4e2a Pod \u5b9e\u4f8b\u3002
                          • \u63cf\u8ff0\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u4e0d\u8d85\u8fc7 512\u3002

                          "},{"location":"end-user/kpanda/workloads/create-deployment.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

                          \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

                          \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

                          \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

                          • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
                          • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
                          • \u955c\u50cf\uff1a
                            • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u5b89\u88c5\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                            • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                            • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                            • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
                          • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
                          • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
                          • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                            • \u6574\u5361\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                            • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                              • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                              • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                              • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                              • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                              • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                            • Mig \u6a21\u5f0f
                              • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                              • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

                          \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

                          \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

                          \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

                          \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

                          \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

                          \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

                          "},{"location":"end-user/kpanda/workloads/create-deployment.html#_5","title":"\u670d\u52a1\u914d\u7f6e","text":"

                          \u4e3a\u65e0\u72b6\u6001\u8d1f\u8f7d\u914d\u7f6e\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u65e0\u72b6\u6001\u8d1f\u8f7d\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

                          1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

                          2. \u53c2\u8003\u521b\u5efa\u670d\u52a1\uff0c\u914d\u7f6e\u670d\u52a1\u53c2\u6570\u3002

                          3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                          "},{"location":"end-user/kpanda/workloads/create-deployment.html#_6","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

                          \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u8d1f\u8f7d\u7684\u7f51\u7edc\u914d\u7f6e\u3001\u5347\u7ea7\u7b56\u7565\u3001\u8c03\u5ea6\u7b56\u7565\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u56db\u90e8\u5206\uff0c\u53ef\u70b9\u51fb\u4e0b\u65b9\u7684\u9875\u7b7e\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u7f51\u7edc\u914d\u7f6e\u5347\u7ea7\u7b56\u7565\u8c03\u5ea6\u7b56\u7565\u6807\u7b7e\u4e0e\u6ce8\u89e3
                          • \u5982\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u4e86 SpiderPool \u548c Multus \u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u5728\u7f51\u7edc\u914d\u7f6e\u4e2d\u914d\u7f6e\u5bb9\u5668\u7f51\u5361\u3002

                          • DNS \u914d\u7f6e\uff1a\u5e94\u7528\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u4f1a\u51fa\u73b0\u5197\u4f59\u7684 DNS \u67e5\u8be2\u3002Kubernetes \u4e3a\u5e94\u7528\u63d0\u4f9b\u4e86\u4e0e DNS \u76f8\u5173\u7684\u914d\u7f6e\u9009\u9879\uff0c\u80fd\u591f\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u6709\u6548\u5730\u51cf\u5c11\u5197\u4f59\u7684 DNS \u67e5\u8be2\uff0c\u63d0\u5347\u4e1a\u52a1\u5e76\u53d1\u91cf\u3002

                          • DNS \u7b56\u7565

                            • Default\uff1a\u4f7f\u5bb9\u5668\u4f7f\u7528 kubelet \u7684 --resolv-conf \u53c2\u6570\u6307\u5411\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u3002\u8be5\u914d\u7f6e\u53ea\u80fd\u89e3\u6790\u6ce8\u518c\u5230\u4e92\u8054\u7f51\u4e0a\u7684\u5916\u90e8\u57df\u540d\uff0c\u65e0\u6cd5\u89e3\u6790\u96c6\u7fa4\u5185\u90e8\u57df\u540d\uff0c\u4e14\u4e0d\u5b58\u5728\u65e0\u6548\u7684 DNS \u67e5\u8be2\u3002
                            • ClusterFirstWithHostNet\uff1a\u5e94\u7528\u5bf9\u63a5\u4e3b\u673a\u7684\u57df\u540d\u6587\u4ef6\u3002
                            • ClusterFirst\uff1a\u5e94\u7528\u5bf9\u63a5 Kube-DNS/CoreDNS\u3002
                            • None\uff1aKubernetes v1.9\uff08Beta in v1.10\uff09\u4e2d\u5f15\u5165\u7684\u65b0\u9009\u9879\u503c\u3002\u8bbe\u7f6e\u4e3a None \u4e4b\u540e\uff0c\u5fc5\u987b\u8bbe\u7f6e dnsConfig\uff0c\u6b64\u65f6\u5bb9\u5668\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u5c06\u5b8c\u5168\u901a\u8fc7 dnsConfig \u7684\u914d\u7f6e\u6765\u751f\u6210\u3002
                          • \u57df\u540d\u670d\u52a1\u5668\uff1a\u586b\u5199\u57df\u540d\u670d\u52a1\u5668\u7684\u5730\u5740\uff0c\u4f8b\u5982 10.6.175.20 \u3002

                          • \u641c\u7d22\u57df\uff1a\u57df\u540d\u67e5\u8be2\u65f6\u7684 DNS \u641c\u7d22\u57df\u5217\u8868\u3002\u6307\u5b9a\u540e\uff0c\u63d0\u4f9b\u7684\u641c\u7d22\u57df\u5217\u8868\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 search \u5b57\u6bb5\u4e2d\uff0c\u5e76\u5220\u9664\u91cd\u590d\u7684\u57df\u540d\u3002Kubernetes \u6700\u591a\u5141\u8bb8 6 \u4e2a\u641c\u7d22\u57df\u3002
                          • Options\uff1aDNS \u7684\u914d\u7f6e\u9009\u9879\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5177\u6709 name \u5c5e\u6027\uff08\u5fc5\u9700\uff09\u548c value \u5c5e\u6027\uff08\u53ef\u9009\uff09\u3002\u8be5\u5b57\u6bb5\u4e2d\u7684\u5185\u5bb9\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 options \u5b57\u6bb5\u4e2d\uff0cdnsConfig \u7684 options \u7684\u67d0\u4e9b\u9009\u9879\u5982\u679c\u4e0e\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684\u9009\u9879\u51b2\u7a81\uff0c\u5219\u4f1a\u88ab dnsConfig \u6240\u8986\u76d6\u3002
                          • \u4e3b\u673a\u522b\u540d\uff1a\u4e3a\u4e3b\u673a\u8bbe\u7f6e\u7684\u522b\u540d\u3002

                          • \u5347\u7ea7\u65b9\u5f0f\uff1a \u6eda\u52a8\u5347\u7ea7 \u6307\u9010\u6b65\u7528\u65b0\u7248\u672c\u7684\u5b9e\u4f8b\u66ff\u6362\u65e7\u7248\u672c\u7684\u5b9e\u4f8b\uff0c\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e1a\u52a1\u6d41\u91cf\u4f1a\u540c\u65f6\u8d1f\u8f7d\u5747\u8861\u5206\u5e03\u5230\u65b0\u8001\u7684\u5b9e\u4f8b\u4e0a\uff0c\u56e0\u6b64\u4e1a\u52a1\u4e0d\u4f1a\u4e2d\u65ad\u3002 \u91cd\u5efa\u5347\u7ea7 \u6307\u5148\u5220\u9664\u8001\u7248\u672c\u7684\u8d1f\u8f7d\u5b9e\u4f8b\uff0c\u518d\u5b89\u88c5\u6307\u5b9a\u7684\u65b0\u7248\u672c\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2d\u4e1a\u52a1\u4f1a\u4e2d\u65ad\u3002
                          • \u6700\u5927\u4e0d\u53ef\u7528\uff1a\u6307\u5b9a\u8d1f\u8f7d\u66f4\u65b0\u8fc7\u7a0b\u4e2d\u4e0d\u53ef\u7528 Pod \u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\uff0c\u9ed8\u8ba4 25%\u3002\u5982\u679c\u7b49\u4e8e\u5b9e\u4f8b\u6570\u6709\u670d\u52a1\u4e2d\u65ad\u7684\u98ce\u9669\u3002
                          • \u6700\u5927\u5cf0\u503c\uff1a\u66f4\u65b0 Pod \u7684\u8fc7\u7a0b\u4e2d Pod \u603b\u6570\u8d85\u8fc7 Pod \u671f\u671b\u526f\u672c\u6570\u90e8\u5206\u7684\u6700\u5927\u503c\u6216\u6bd4\u7387\u3002\u9ed8\u8ba4 25%\u3002
                          • \u6700\u5927\u4fdd\u7559\u7248\u672c\u6570\uff1a\u8bbe\u7f6e\u7248\u672c\u56de\u6eda\u65f6\u4fdd\u7559\u7684\u65e7\u7248\u672c\u6570\u91cf\u3002\u9ed8\u8ba4 10\u3002
                          • Pod \u53ef\u7528\u6700\u77ed\u65f6\u95f4\uff1aPod \u5c31\u7eea\u7684\u6700\u77ed\u65f6\u95f4\uff0c\u53ea\u6709\u8d85\u51fa\u8fd9\u4e2a\u65f6\u95f4 Pod \u624d\u88ab\u8ba4\u4e3a\u53ef\u7528\uff0c\u9ed8\u8ba4 0 \u79d2\u3002
                          • \u5347\u7ea7\u6700\u5927\u6301\u7eed\u65f6\u95f4\uff1a\u5982\u679c\u8d85\u8fc7\u6240\u8bbe\u7f6e\u7684\u65f6\u95f4\u4ecd\u672a\u90e8\u7f72\u6210\u529f\uff0c\u5219\u5c06\u8be5\u8d1f\u8f7d\u6807\u8bb0\u4e3a\u5931\u8d25\u3002\u9ed8\u8ba4 600 \u79d2\u3002
                          • \u7f29\u5bb9\u65f6\u95f4\u7a97\uff1a\u8d1f\u8f7d\u505c\u6b62\u524d\u547d\u4ee4\u7684\u6267\u884c\u65f6\u95f4\u7a97\uff080-9,999\u79d2\uff09\uff0c\u9ed8\u8ba4 30 \u79d2\u3002

                          • \u5bb9\u5fcd\u65f6\u95f4\uff1a\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u5c06\u8d1f\u8f7d\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002
                          • \u8282\u70b9\u4eb2\u548c\u6027\uff1a\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002
                          • \u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
                          • \u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u4e0d\u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002

                          \u5177\u4f53\u8be6\u60c5\u8bf7\u53c2\u8003\u8c03\u5ea6\u7b56\u7565\u3002

                          \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u548c\u5bb9\u5668\u7ec4\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                          "},{"location":"end-user/kpanda/workloads/create-deployment.html#yaml","title":"YAML \u521b\u5efa","text":"

                          \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

                          3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

                          \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u65e0\u72b6\u6001\u8d1f\u8f7d\u7684 YAML \u793a\u4f8b
                          apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\nspec:\n  selector:\n    matchLabels:\n      app: nginx\n  replicas: 2 # \u544a\u77e5 Deployment \u8fd0\u884c 2 \u4e2a\u4e0e\u8be5\u6a21\u677f\u5339\u914d\u7684 Pod\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.14.2\n        ports:\n        - containerPort: 80\n
                          "},{"location":"end-user/kpanda/workloads/create-job.html","title":"\u521b\u5efa\u4efb\u52a1\uff08Job\uff09","text":"

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u4efb\u52a1\uff08Job\uff09\u3002

                          \u4efb\u52a1\uff08Job\uff09\u9002\u7528\u4e8e\u6267\u884c\u4e00\u6b21\u6027\u4efb\u52a1\u3002Job \u4f1a\u521b\u5efa\u4e00\u4e2a\u6216\u591a\u4e2a Pod\uff0cJob \u4f1a\u4e00\u76f4\u91cd\u65b0\u5c1d\u8bd5\u6267\u884c Pod\uff0c\u76f4\u5230\u6210\u529f\u7ec8\u6b62\u7684 Pod \u8fbe\u5230\u4e00\u5b9a\u6570\u91cf\u3002\u6210\u529f\u7ec8\u6b62\u7684 Pod \u8fbe\u5230\u6307\u5b9a\u7684\u6570\u91cf\u540e\uff0cJob \u4e5f\u968f\u4e4b\u7ed3\u675f\u3002\u5220\u9664 Job \u65f6\u4f1a\u4e00\u540c\u6e05\u9664\u8be5 Job \u521b\u5efa\u7684\u6240\u6709 Pod\u3002\u6682\u505c Job \u65f6\u5220\u9664\u8be5 Job \u4e2d\u7684\u6240\u6709\u6d3b\u8dc3 Pod\uff0c\u76f4\u5230 Job \u88ab\u7ee7\u7eed\u6267\u884c\u3002\u6709\u5173\u4efb\u52a1\uff08Job\uff09\u7684\u66f4\u591a\u4ecb\u7ecd\uff0c\u53ef\u53c2\u8003Job\u3002

                          "},{"location":"end-user/kpanda/workloads/create-job.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"
                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

                          "},{"location":"end-user/kpanda/workloads/create-job.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u4efb\u52a1\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

                          3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                            \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u4efb\u52a1 \u5217\u8868\u3002\u70b9\u51fb\u5217\u8868\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u4efb\u52a1\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u91cd\u542f\u7b49\u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/workloads/create-job.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"

                          \u5728 \u521b\u5efa\u4efb\u52a1 \u9875\u9762\u4e2d\uff0c\u6839\u636e\u4e0b\u8868\u8f93\u5165\u57fa\u672c\u4fe1\u606f\u540e\uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                          • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                          • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u4efb\u52a1\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
                          • \u5b9e\u4f8b\u6570\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u5b9e\u4f8b\u6570\u91cf\u3002\u9ed8\u8ba4\u521b\u5efa 1 \u4e2a Pod \u5b9e\u4f8b\u3002
                          • \u63cf\u8ff0\uff1a\u8f93\u5165\u5de5\u4f5c\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u91cf\u5e94\u4e0d\u8d85\u8fc7 512 \u4e2a\u3002
                          "},{"location":"end-user/kpanda/workloads/create-job.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

                          \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

                          \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

                          \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

                          • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
                          • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
                          • \u955c\u50cf\uff1a
                            • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                            • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                            • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                            • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
                          • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
                          • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
                          • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                            • \u6574\u5361\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                            • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                              • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                              • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                              • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                              • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                              • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                            • Mig \u6a21\u5f0f
                              • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                              • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

                          \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

                          \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

                          \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

                          \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

                          \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

                          \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

                          "},{"location":"end-user/kpanda/workloads/create-job.html#_5","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

                          \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u4efb\u52a1\u8bbe\u7f6e\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u4e24\u90e8\u5206\u3002

                          \u4efb\u52a1\u8bbe\u7f6e\u6807\u7b7e\u4e0e\u6ce8\u89e3

                          • \u5e76\u884c\u6570\uff1a\u4efb\u52a1\u6267\u884c\u8fc7\u7a0b\u4e2d\u5141\u8bb8\u540c\u65f6\u521b\u5efa\u7684\u6700\u5927 Pod \u6570\uff0c\u5e76\u884c\u6570\u5e94\u4e0d\u5927\u4e8e Pod \u603b\u6570\u3002\u9ed8\u8ba4\u4e3a 1\u3002
                          • \u8d85\u65f6\u65f6\u95f4\uff1a\u8d85\u51fa\u8be5\u65f6\u95f4\u65f6\uff0c\u4efb\u52a1\u4f1a\u88ab\u6807\u8bc6\u4e3a\u6267\u884c\u5931\u8d25\uff0c\u4efb\u52a1\u4e0b\u7684\u6240\u6709 Pod \u90fd\u4f1a\u88ab\u5220\u9664\u3002\u4e3a\u7a7a\u65f6\u8868\u793a\u4e0d\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\u3002
                          • \u91cd\u542f\u7b56\u7565\uff1a\u8bbe\u7f6e\u5931\u8d25\u65f6\u662f\u5426\u91cd\u542f Pod\u3002

                          \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u4f8b Pod \u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                          "},{"location":"end-user/kpanda/workloads/create-job.html#yaml","title":"YAML \u521b\u5efa","text":"

                          \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u4efb\u52a1\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u4efb\u52a1 \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

                          3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

                          \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u4efb\u52a1\u7684 YAML \u793a\u4f8b
                          kind: Job\napiVersion: batch/v1\nmetadata:\n  name: demo\n  namespace: default\n  uid: a9708239-0358-4aa1-87d3-a092c080836e\n  resourceVersion: '92751876'\n  generation: 1\n  creationTimestamp: '2022-12-26T10:52:22Z'\n  labels:\n    app: demo\n    controller-uid: a9708239-0358-4aa1-87d3-a092c080836e\n    job-name: demo\n  annotations:\n    revisions: >-\n      {\"1\":{\"status\":\"running\",\"uid\":\"a9708239-0358-4aa1-87d3-a092c080836e\",\"start-time\":\"2022-12-26T10:52:22Z\",\"completion-time\":\"0001-01-01T00:00:00Z\"}}\nspec:\n  parallelism: 1\n  backoffLimit: 6\n  selector:\n    matchLabels:\n      controller-uid: a9708239-0358-4aa1-87d3-a092c080836e\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: demo\n        controller-uid: a9708239-0358-4aa1-87d3-a092c080836e\n        job-name: demo\n    spec:\n      containers:\n        - name: container-4\n          image: nginx\n          resources:\n            limits:\n              cpu: 250m\n              memory: 512Mi\n            requests:\n              cpu: 250m\n              memory: 512Mi\n          lifecycle: {}\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n          securityContext:\n            privileged: false\n      restartPolicy: Never\n      terminationGracePeriodSeconds: 30\n      dnsPolicy: ClusterFirst\n      securityContext: {}\n      schedulerName: default-scheduler\n  completionMode: NonIndexed\n  suspend: false\nstatus:\n  startTime: '2022-12-26T10:52:22Z'\n  active: 1\n
                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html","title":"\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\uff08StatefulSet\uff09","text":"

                          \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u955c\u50cf\u548c YAML \u6587\u4ef6\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\uff08StatefulSet\uff09\u3002

                          \u6709\u72b6\u6001\u8d1f\u8f7d\uff08StatefulSet\uff09\u662f Kubernetes \u4e2d\u7684\u4e00\u79cd\u5e38\u89c1\u8d44\u6e90\uff0c\u548c\u65e0\u72b6\u6001\u8d1f\u8f7d\uff08Deployment\uff09\u7c7b\u4f3c\uff0c\u4e3b\u8981\u7528\u4e8e\u7ba1\u7406 Pod \u96c6\u5408\u7684\u90e8\u7f72\u548c\u4f38\u7f29\u3002\u4e8c\u8005\u7684\u4e3b\u8981\u533a\u522b\u5728\u4e8e\uff0cDeployment \u662f\u65e0\u72b6\u6001\u7684\uff0c\u4e0d\u4fdd\u5b58\u6570\u636e\uff0c\u800c StatefulSet \u662f\u6709\u72b6\u6001\u7684\uff0c\u4e3b\u8981\u7528\u4e8e\u7ba1\u7406\u6709\u72b6\u6001\u5e94\u7528\u3002\u6b64\u5916\uff0cStatefulSet \u4e2d\u7684 Pod \u5177\u6709\u6c38\u4e45\u4e0d\u53d8\u7684 ID\uff0c\u4fbf\u4e8e\u5728\u5339\u914d\u5b58\u50a8\u5377\u65f6\u8bc6\u522b\u5bf9\u5e94\u7684 Pod\u3002

                          \u901a\u8fc7\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\uff0c\u53ef\u4ee5\u57fa\u4e8e\u76f8\u5e94\u7684\u89d2\u8272\u6743\u9650\u8f7b\u677e\u7ba1\u7406\u591a\u4e91\u591a\u96c6\u7fa4\u4e0a\u7684\u5de5\u4f5c\u8d1f\u8f7d\uff0c\u5305\u62ec\u5bf9\u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u7684\u521b\u5efa\u3001\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u3002

                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html#_1","title":"\u524d\u63d0\u6761\u4ef6","text":"

                          \u5728\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\u4e4b\u524d\uff0c\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u524d\u63d0\u6761\u4ef6\uff1a

                          • \u5728\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4e2d\u63a5\u5165 Kubernetes \u96c6\u7fa4\u6216\u8005\u7ba1\u7406\u5458\u5df2\u4e3a\u7528\u6237\u521b\u5efa\u4e86\u96c6\u7fa4\uff0c\u4e14\u80fd\u591f\u8bbf\u95ee\u96c6\u7fa4\u7684 UI \u754c\u9762\u3002

                          • \u521b\u5efa\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u548c\u7528\u6237\u3002

                          • \u5f53\u524d\u64cd\u4f5c\u7528\u6237\u5e94\u5177\u6709 NS Editor \u6216\u66f4\u9ad8\u6743\u9650\uff0c\u8be6\u60c5\u53ef\u53c2\u8003\u547d\u540d\u7a7a\u95f4\u6388\u6743\u3002

                          • \u5355\u4e2a\u5b9e\u4f8b\u4e2d\u6709\u591a\u4e2a\u5bb9\u5668\u65f6\uff0c\u8bf7\u786e\u4fdd\u5bb9\u5668\u4f7f\u7528\u7684\u7aef\u53e3\u4e0d\u51b2\u7a81\uff0c\u5426\u5219\u90e8\u7f72\u4f1a\u5931\u6548\u3002

                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html#_2","title":"\u955c\u50cf\u521b\u5efa","text":"

                          \u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u4e00\u4e2a\u6709\u72b6\u6001\u8d1f\u8f7d\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u3002

                          2. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u6709\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u53f3\u4e0a\u89d2 \u955c\u50cf\u521b\u5efa \u6309\u94ae\u3002

                          3. \u4f9d\u6b21\u586b\u5199\u57fa\u672c\u4fe1\u606f\u3001\u5bb9\u5668\u914d\u7f6e\u3001\u670d\u52a1\u914d\u7f6e\u3001\u9ad8\u7ea7\u914d\u7f6e\u540e\uff0c\u5728\u9875\u9762\u53f3\u4e0b\u89d2\u70b9\u51fb \u786e\u5b9a \u5b8c\u6210\u521b\u5efa\u3002

                            \u7cfb\u7edf\u5c06\u81ea\u52a8\u8fd4\u56de \u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d \u5217\u8868\uff0c\u7b49\u5f85\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u53d8\u4e3a \u8fd0\u884c\u4e2d \u3002\u5982\u679c\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u51fa\u73b0\u5f02\u5e38\uff0c\u8bf7\u67e5\u770b\u5177\u4f53\u5f02\u5e38\u4fe1\u606f\uff0c\u53ef\u53c2\u8003\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001\u3002

                            \u70b9\u51fb\u65b0\u5efa\u5de5\u4f5c\u8d1f\u8f7d\u5217\u53f3\u4fa7\u7684 \u2507 \uff0c\u53ef\u4ee5\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u6267\u884c\u6267\u884c\u66f4\u65b0\u3001\u5220\u9664\u3001\u5f39\u6027\u6269\u7f29\u3001\u91cd\u542f\u3001\u7248\u672c\u56de\u9000\u7b49\u64cd\u4f5c\u3002

                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html#_3","title":"\u57fa\u672c\u4fe1\u606f","text":"
                          • \u8d1f\u8f7d\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u53ea\u80fd\u5305\u542b\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\uff0c\u4e14\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 deployment-01\u3002\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u540c\u4e00\u7c7b\u578b\u5de5\u4f5c\u8d1f\u8f7d\u7684\u540d\u79f0\u4e0d\u5f97\u91cd\u590d\uff0c\u800c\u4e14\u8d1f\u8f7d\u540d\u79f0\u5728\u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u597d\u4e4b\u540e\u4e0d\u53ef\u66f4\u6539\u3002
                          • \u547d\u540d\u7a7a\u95f4\uff1a\u9009\u62e9\u5c06\u65b0\u5efa\u7684\u8d1f\u8f7d\u90e8\u7f72\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u9ed8\u8ba4\u4f7f\u7528 default \u547d\u540d\u7a7a\u95f4\u3002\u627e\u4e0d\u5230\u6240\u9700\u7684\u547d\u540d\u7a7a\u95f4\u65f6\u53ef\u4ee5\u6839\u636e\u9875\u9762\u63d0\u793a\u53bb\u521b\u5efa\u65b0\u7684\u547d\u540d\u7a7a\u95f4\u3002
                          • \u5b9e\u4f8b\u6570\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684 Pod \u5b9e\u4f8b\u6570\u91cf\uff0c\u9ed8\u8ba4\u521b\u5efa 1 \u4e2a Pod \u5b9e\u4f8b\u3002
                          • \u63cf\u8ff0\uff1a\u8f93\u5165\u8d1f\u8f7d\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u5185\u5bb9\u81ea\u5b9a\u4e49\u3002\u5b57\u7b26\u6570\u4e0d\u8d85\u8fc7 512\u3002

                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html#_4","title":"\u5bb9\u5668\u914d\u7f6e","text":"

                          \u5bb9\u5668\u914d\u7f6e\u5206\u4e3a\u57fa\u672c\u4fe1\u606f\u3001\u751f\u547d\u5468\u671f\u3001\u5065\u5eb7\u68c0\u67e5\u3001\u73af\u5883\u53d8\u91cf\u3001\u6570\u636e\u5b58\u50a8\u3001\u5b89\u5168\u8bbe\u7f6e\u516d\u90e8\u5206\uff0c\u70b9\u51fb\u4e0b\u65b9\u7684\u76f8\u5e94\u9875\u7b7e\u53ef\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u5bb9\u5668\u914d\u7f6e\u4ec5\u9488\u5bf9\u5355\u4e2a\u5bb9\u5668\u8fdb\u884c\u914d\u7f6e\uff0c\u5982\u9700\u5728\u4e00\u4e2a\u5bb9\u5668\u7ec4\u4e2d\u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\uff0c\u53ef\u70b9\u51fb\u53f3\u4fa7\u7684 + \u6dfb\u52a0\u591a\u4e2a\u5bb9\u5668\u3002

                          \u57fa\u672c\u4fe1\u606f\uff08\u5fc5\u586b\uff09\u751f\u547d\u5468\u671f\uff08\u9009\u586b\uff09\u5065\u5eb7\u68c0\u67e5\uff08\u9009\u586b\uff09\u73af\u5883\u53d8\u91cf\uff08\u9009\u586b\uff09\u6570\u636e\u5b58\u50a8\uff08\u9009\u586b\uff09\u5b89\u5168\u8bbe\u7f6e\uff08\u9009\u586b\uff09

                          \u5728\u914d\u7f6e\u5bb9\u5668\u76f8\u5173\u53c2\u6570\u65f6\uff0c\u5fc5\u987b\u6b63\u786e\u586b\u5199\u5bb9\u5668\u7684\u540d\u79f0\u3001\u955c\u50cf\u53c2\u6570\uff0c\u5426\u5219\u5c06\u65e0\u6cd5\u8fdb\u5165\u4e0b\u4e00\u6b65\u3002\u53c2\u8003\u4ee5\u4e0b\u8981\u6c42\u586b\u5199\u914d\u7f6e\u540e\uff0c\u70b9\u51fb \u786e\u8ba4 \u3002

                          • \u5bb9\u5668\u7c7b\u578b\uff1a\u9ed8\u8ba4\u4e3a\u5de5\u4f5c\u5bb9\u5668\u3002\u6709\u5173\u521d\u59cb\u5316\u5bb9\u5668\uff0c\u53c2\u89c1 k8s \u5b98\u65b9\u6587\u6863\u3002
                          • \u5bb9\u5668\u540d\u79f0\uff1a\u6700\u591a\u5305\u542b 63 \u4e2a\u5b57\u7b26\uff0c\u652f\u6301\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u53ca\u5206\u9694\u7b26\uff08\u201c-\u201d\uff09\u3002\u5fc5\u987b\u4ee5\u5c0f\u5199\u5b57\u6bcd\u6216\u6570\u5b57\u5f00\u5934\u53ca\u7ed3\u5c3e\uff0c\u4f8b\u5982 nginx-01\u3002
                          • \u955c\u50cf\uff1a
                            • \u5bb9\u5668\u955c\u50cf\uff1a\u4ece\u5217\u8868\u4e2d\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u955c\u50cf\u3002\u8f93\u5165\u955c\u50cf\u540d\u79f0\u65f6\uff0c\u9ed8\u8ba4\u4ece\u5b98\u65b9\u7684 DockerHub \u62c9\u53d6\u955c\u50cf\u3002 \u63a5\u5165\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u7684\u955c\u50cf\u4ed3\u5e93\u6a21\u5757\u540e\uff0c\u53ef\u4ee5\u70b9\u51fb\u53f3\u4fa7\u7684 \u9009\u62e9\u955c\u50cf \u6309\u94ae\u6765\u9009\u62e9\u955c\u50cf\u3002
                            • \u955c\u50cf\u7248\u672c\uff1a\u4ece\u4e0b\u62c9\u5217\u8868\u9009\u62e9\u4e00\u4e2a\u5408\u9002\u7684\u7248\u672c\u3002
                            • \u955c\u50cf\u62c9\u53d6\u7b56\u7565\uff1a\u52fe\u9009 \u603b\u662f\u62c9\u53d6\u955c\u50cf \u540e\uff0c\u8d1f\u8f7d\u6bcf\u6b21\u91cd\u542f/\u5347\u7ea7\u65f6\u90fd\u4f1a\u4ece\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u955c\u50cf\u3002 \u5982\u679c\u4e0d\u52fe\u9009\uff0c\u5219\u53ea\u62c9\u53d6\u672c\u5730\u955c\u50cf\uff0c\u53ea\u6709\u5f53\u955c\u50cf\u5728\u672c\u5730\u4e0d\u5b58\u5728\u65f6\u624d\u4ece\u955c\u50cf\u4ed3\u5e93\u91cd\u65b0\u62c9\u53d6\u3002 \u66f4\u591a\u8be6\u60c5\u53ef\u53c2\u8003\u955c\u50cf\u62c9\u53d6\u7b56\u7565\u3002
                            • \u955c\u50cf\u4ed3\u5e93\u5bc6\u94a5\uff1a\u53ef\u9009\u3002\u5982\u679c\u76ee\u6807\u4ed3\u5e93\u9700\u8981 Secret \u624d\u80fd\u8bbf\u95ee\uff0c\u9700\u8981\u5148\u53bb\u521b\u5efa\u4e00\u4e2a\u5bc6\u94a5\u3002
                          • \u7279\u6743\u5bb9\u5668\uff1a\u5bb9\u5668\u9ed8\u8ba4\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u4efb\u4f55\u8bbe\u5907\uff0c\u5f00\u542f\u7279\u6743\u5bb9\u5668\u540e\uff0c\u5bb9\u5668\u5373\u53ef\u8bbf\u95ee\u5bbf\u4e3b\u673a\u4e0a\u7684\u6240\u6709\u8bbe\u5907\uff0c\u4eab\u6709\u5bbf\u4e3b\u673a\u4e0a\u7684\u8fd0\u884c\u8fdb\u7a0b\u7684\u6240\u6709\u6743\u9650\u3002
                          • CPU/\u5185\u5b58\u914d\u989d\uff1aCPU/\u5185\u5b58\u8d44\u6e90\u7684\u8bf7\u6c42\u503c\uff08\u9700\u8981\u4f7f\u7528\u7684\u6700\u5c0f\u8d44\u6e90\uff09\u548c\u9650\u5236\u503c\uff08\u5141\u8bb8\u4f7f\u7528\u7684\u6700\u5927\u8d44\u6e90\uff09\u3002\u8bf7\u6839\u636e\u9700\u8981\u4e3a\u5bb9\u5668\u914d\u7f6e\u8d44\u6e90\uff0c\u907f\u514d\u8d44\u6e90\u6d6a\u8d39\u548c\u56e0\u5bb9\u5668\u8d44\u6e90\u8d85\u989d\u5bfc\u81f4\u7cfb\u7edf\u6545\u969c\u3002\u9ed8\u8ba4\u503c\u5982\u56fe\u6240\u793a\u3002
                          • GPU \u914d\u7f6e\uff1a\u4e3a\u5bb9\u5668\u914d\u7f6e GPU \u7528\u91cf\uff0c \u4ec5\u652f\u6301\u8f93\u5165\u6b63\u6574\u6570\u3002
                            • \u6574\u5361\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5c06\u5360\u7528\u6574\u5f20\u7269\u7406 GPU\u5361\u3002\u540c\u65f6\u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                            • \u865a\u62df\u5316\u6a21\u5f0f\uff1a
                              • \u7269\u7406\u5361\u6570\u91cf\uff1a\u5bb9\u5668\u80fd\u591f\u4f7f\u7528\u7684\u7269\u7406 GPU \u5361\u6570\u91cf\uff0c \u7269\u7406\u5361\u6570\u91cf\u9700\u8981 \u2264 \u5355\u8282\u70b9\u63d2\u5165\u7684\u6700\u5927 GPU \u5361\u6570\u3002
                              • GPU \u7b97\u529b\uff1a\u6bcf\u5f20\u7269\u7406 GPU \u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u7b97\u529b\u767e\u5206\u6bd4\uff0c\u6700\u591a\u4e3a100%\u3002
                              • \u663e\u5b58\uff1a\u6bcf\u5f20\u7269\u7406\u5361\u4e0a\u9700\u8981\u4f7f\u7528\u7684\u663e\u5b58\u6570\u91cf\u3002
                              • \u8c03\u5ea6\u7b56\u7565\uff08Binpack / Spread\uff09\uff1a\u652f\u6301\u57fa\u4e8e GPU \u5361\u548c\u57fa\u4e8e\u8282\u70b9\u7684\u4e24\u79cd\u7ef4\u5ea6\u7684\u8c03\u5ea6\u7b56\u7565\u3002Binpack \u662f\u96c6\u4e2d\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u540c\u4e00\u4e2a\u8282\u70b9\u7684\u540c\u4e00\u5f20 GPU \u5361\u4e0a\uff1bSpread \u662f\u5206\u6563\u5f0f\u8c03\u5ea6\u7b56\u7565\uff0c\u4f18\u5148\u5c06\u5bb9\u5668\u8c03\u5ea6\u5230\u4e0d\u540c\u8282\u70b9\u7684\u4e0d\u540c GPU \u5361\u4e0a\uff0c\u6839\u636e\u5b9e\u9645\u573a\u666f\u53ef\u7ec4\u5408\u4f7f\u7528\u3002\uff08\u5f53\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u4e0e\u96c6\u7fa4\u7ea7\u522b\u7684 Binpack / Spread \u8c03\u5ea6\u7b56\u7565\u51b2\u7a81\u65f6\uff0c\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u5de5\u4f5c\u8d1f\u8f7d\u7ea7\u522b\u7684\u8c03\u5ea6\u7b56\u7565\uff09\u3002
                              • \u4efb\u52a1\u4f18\u5148\u7ea7\uff1aGPU \u7b97\u529b\u4f1a\u4f18\u5148\u4f9b\u7ed9\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u4f7f\u7528\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u51cf\u5c11\u751a\u81f3\u6682\u505c\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u76f4\u5230\u9ad8\u4f18\u5148\u7ea7\u4efb\u52a1\u7ed3\u675f\uff0c\u666e\u901a\u4efb\u52a1\u4f1a\u91cd\u65b0\u7ee7\u7eed\u4f7f\u7528 GPU \u7b97\u529b\uff0c\u5e38\u7528\u4e8e\u5728\u79bb\u7ebf\u6df7\u90e8\u573a\u666f\u3002
                              • \u6307\u5b9a\u578b\u53f7\uff1a\u5c06\u5de5\u4f5c\u8d1f\u8f7d\u8c03\u5ea6\u5230\u6307\u5b9a\u578b\u53f7\u7684 GPU \u5361\u4e0a\uff0c\u9002\u7528\u4e8e\u5bf9 GPU \u578b\u53f7\u6709\u7279\u6b8a\u8981\u6c42\u7684\u573a\u666f\u3002
                            • Mig \u6a21\u5f0f
                              • \u89c4\u683c\uff1a\u5207\u5206\u540e\u7684\u7269\u7406 GPU \u5361\u89c4\u683c\u3002
                              • \u6570\u91cf\uff1a\u4f7f\u7528\u8be5\u89c4\u683c\u7684\u6570\u91cf\u3002

                          \u8bbe\u7f6e GPU \u4e4b\u524d\uff0c\u9700\u8981\u7ba1\u7406\u5458\u9884\u5148\u5728\u96c6\u7fa4\u4e0a\u5b89\u88c5 GPU Operator \u548c nvidia-vgpu\uff08\u4ec5 vGPU \u6a21\u5f0f\u9700\u8981\u5b89\u88c5\uff09\uff0c\u5e76\u5728\u96c6\u7fa4\u8bbe\u7f6e\u4e2d\u5f00\u542f GPU \u7279\u6027\u3002

                          \u8bbe\u7f6e\u5bb9\u5668\u542f\u52a8\u65f6\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u751f\u547d\u5468\u671f\u914d\u7f6e\u3002

                          \u7528\u4e8e\u5224\u65ad\u5bb9\u5668\u548c\u5e94\u7528\u7684\u5065\u5eb7\u72b6\u6001\u3002\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u914d\u7f6e\u3002

                          \u914d\u7f6e Pod \u5185\u7684\u5bb9\u5668\u53c2\u6570\uff0c\u4e3a Pod \u6dfb\u52a0\u73af\u5883\u53d8\u91cf\u6216\u4f20\u9012\u914d\u7f6e\u7b49\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u3002

                          \u914d\u7f6e\u5bb9\u5668\u6302\u8f7d\u6570\u636e\u5377\u548c\u6570\u636e\u6301\u4e45\u5316\u7684\u8bbe\u7f6e\u3002\u8be6\u60c5\u53ef\u53c2\u8003\u5bb9\u5668\u6570\u636e\u5b58\u50a8\u914d\u7f6e\u3002

                          \u901a\u8fc7 Linux \u5185\u7f6e\u7684\u8d26\u53f7\u6743\u9650\u9694\u79bb\u673a\u5236\u6765\u5bf9\u5bb9\u5668\u8fdb\u884c\u5b89\u5168\u9694\u79bb\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u4e0d\u540c\u6743\u9650\u7684\u8d26\u53f7 UID\uff08\u6570\u5b57\u8eab\u4efd\u6807\u8bb0\uff09\u6765\u9650\u5236\u5bb9\u5668\u7684\u6743\u9650\u3002\u4f8b\u5982\uff0c\u8f93\u5165 0 \u8868\u793a\u4f7f\u7528 root \u8d26\u53f7\u7684\u6743\u9650\u3002

                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html#_5","title":"\u670d\u52a1\u914d\u7f6e","text":"

                          \u4e3a\u6709\u72b6\u6001\u8d1f\u8f7d\u914d\u7f6e\u670d\u52a1\uff08Service\uff09\uff0c\u4f7f\u6709\u72b6\u6001\u8d1f\u8f7d\u80fd\u591f\u88ab\u5916\u90e8\u8bbf\u95ee\u3002

                          1. \u70b9\u51fb \u521b\u5efa\u670d\u52a1 \u6309\u94ae\u3002

                          2. \u53c2\u8003\u521b\u5efa\u670d\u52a1\uff0c\u914d\u7f6e\u670d\u52a1\u53c2\u6570\u3002

                          3. \u70b9\u51fb \u786e\u5b9a \uff0c\u70b9\u51fb \u4e0b\u4e00\u6b65 \u3002

                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html#_6","title":"\u9ad8\u7ea7\u914d\u7f6e","text":"

                          \u9ad8\u7ea7\u914d\u7f6e\u5305\u62ec\u8d1f\u8f7d\u7684\u7f51\u7edc\u914d\u7f6e\u3001\u5347\u7ea7\u7b56\u7565\u3001\u8c03\u5ea6\u7b56\u7565\u3001\u6807\u7b7e\u4e0e\u6ce8\u89e3\u56db\u90e8\u5206\uff0c\u53ef\u70b9\u51fb\u4e0b\u65b9\u7684\u9875\u7b7e\u67e5\u770b\u5404\u90e8\u5206\u7684\u914d\u7f6e\u8981\u6c42\u3002

                          \u7f51\u7edc\u914d\u7f6e\u5347\u7ea7\u7b56\u7565\u5bb9\u5668\u7ba1\u7406\u7b56\u7565\u8c03\u5ea6\u7b56\u7565\u6807\u7b7e\u4e0e\u6ce8\u89e3
                          • \u5982\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u4e86 SpiderPool \u548c Multus \u7ec4\u4ef6\uff0c\u5219\u53ef\u4ee5\u5728\u7f51\u7edc\u914d\u7f6e\u4e2d\u914d\u7f6e\u5bb9\u5668\u7f51\u5361\u3002

                          • DNS \u914d\u7f6e\uff1a\u5e94\u7528\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u4f1a\u51fa\u73b0\u5197\u4f59\u7684 DNS \u67e5\u8be2\u3002Kubernetes \u4e3a\u5e94\u7528\u63d0\u4f9b\u4e86\u4e0e DNS \u76f8\u5173\u7684\u914d\u7f6e\u9009\u9879\uff0c\u80fd\u591f\u5728\u67d0\u4e9b\u573a\u666f\u4e0b\u6709\u6548\u5730\u51cf\u5c11\u5197\u4f59\u7684 DNS \u67e5\u8be2\uff0c\u63d0\u5347\u4e1a\u52a1\u5e76\u53d1\u91cf\u3002

                          • DNS \u7b56\u7565

                            • Default\uff1a\u4f7f\u5bb9\u5668\u4f7f\u7528 kubelet \u7684 --resolv-conf \u53c2\u6570\u6307\u5411\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u3002\u8be5\u914d\u7f6e\u53ea\u80fd\u89e3\u6790\u6ce8\u518c\u5230\u4e92\u8054\u7f51\u4e0a\u7684\u5916\u90e8\u57df\u540d\uff0c\u65e0\u6cd5\u89e3\u6790\u96c6\u7fa4\u5185\u90e8\u57df\u540d\uff0c\u4e14\u4e0d\u5b58\u5728\u65e0\u6548\u7684 DNS \u67e5\u8be2\u3002
                            • ClusterFirstWithHostNet\uff1a\u5e94\u7528\u5bf9\u63a5\u4e3b\u673a\u7684\u57df\u540d\u6587\u4ef6\u3002
                            • ClusterFirst\uff1a\u5e94\u7528\u5bf9\u63a5 Kube-DNS/CoreDNS\u3002
                            • None\uff1aKubernetes v1.9\uff08Beta in v1.10\uff09\u4e2d\u5f15\u5165\u7684\u65b0\u9009\u9879\u503c\u3002\u8bbe\u7f6e\u4e3a None \u4e4b\u540e\uff0c\u5fc5\u987b\u8bbe\u7f6e dnsConfig\uff0c\u6b64\u65f6\u5bb9\u5668\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u5c06\u5b8c\u5168\u901a\u8fc7 dnsConfig \u7684\u914d\u7f6e\u6765\u751f\u6210\u3002
                          • \u57df\u540d\u670d\u52a1\u5668\uff1a\u586b\u5199\u57df\u540d\u670d\u52a1\u5668\u7684\u5730\u5740\uff0c\u4f8b\u5982 10.6.175.20 \u3002

                          • \u641c\u7d22\u57df\uff1a\u57df\u540d\u67e5\u8be2\u65f6\u7684 DNS \u641c\u7d22\u57df\u5217\u8868\u3002\u6307\u5b9a\u540e\uff0c\u63d0\u4f9b\u7684\u641c\u7d22\u57df\u5217\u8868\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 search \u5b57\u6bb5\u4e2d\uff0c\u5e76\u5220\u9664\u91cd\u590d\u7684\u57df\u540d\u3002Kubernetes \u6700\u591a\u5141\u8bb8 6 \u4e2a\u641c\u7d22\u57df\u3002
                          • Options\uff1aDNS \u7684\u914d\u7f6e\u9009\u9879\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u5177\u6709 name \u5c5e\u6027\uff08\u5fc5\u9700\uff09\u548c value \u5c5e\u6027\uff08\u53ef\u9009\uff09\u3002\u8be5\u5b57\u6bb5\u4e2d\u7684\u5185\u5bb9\u5c06\u5408\u5e76\u5230\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684 options \u5b57\u6bb5\u4e2d\uff0cdnsConfig \u7684 options \u7684\u67d0\u4e9b\u9009\u9879\u5982\u679c\u4e0e\u57fa\u4e8e dnsPolicy \u751f\u6210\u7684\u57df\u540d\u89e3\u6790\u6587\u4ef6\u7684\u9009\u9879\u51b2\u7a81\uff0c\u5219\u4f1a\u88ab dnsConfig \u6240\u8986\u76d6\u3002
                          • \u4e3b\u673a\u522b\u540d\uff1a\u4e3a\u4e3b\u673a\u8bbe\u7f6e\u7684\u522b\u540d\u3002

                          • \u5347\u7ea7\u65b9\u5f0f\uff1a \u6eda\u52a8\u5347\u7ea7 \u6307\u9010\u6b65\u7528\u65b0\u7248\u672c\u7684\u5b9e\u4f8b\u66ff\u6362\u65e7\u7248\u672c\u7684\u5b9e\u4f8b\uff0c\u5347\u7ea7\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e1a\u52a1\u6d41\u91cf\u4f1a\u540c\u65f6\u8d1f\u8f7d\u5747\u8861\u5206\u5e03\u5230\u65b0\u8001\u7684\u5b9e\u4f8b\u4e0a\uff0c\u56e0\u6b64\u4e1a\u52a1\u4e0d\u4f1a\u4e2d\u65ad\u3002 \u91cd\u5efa\u5347\u7ea7 \u6307\u5148\u5220\u9664\u8001\u7248\u672c\u7684\u8d1f\u8f7d\u5b9e\u4f8b\uff0c\u518d\u5b89\u88c5\u6307\u5b9a\u7684\u65b0\u7248\u672c\uff0c\u5347\u7ea7\u8fc7\u7a0b\u4e2d\u4e1a\u52a1\u4f1a\u4e2d\u65ad\u3002
                          • \u6700\u5927\u4fdd\u7559\u7248\u672c\u6570\uff1a\u8bbe\u7f6e\u7248\u672c\u56de\u6eda\u65f6\u4fdd\u7559\u7684\u65e7\u7248\u672c\u6570\u91cf\u3002\u9ed8\u8ba4 10\u3002
                          • \u7f29\u5bb9\u65f6\u95f4\u7a97\uff1a\u8d1f\u8f7d\u505c\u6b62\u524d\u547d\u4ee4\u7684\u6267\u884c\u65f6\u95f4\u7a97\uff080-9,999\u79d2\uff09\uff0c\u9ed8\u8ba4 30 \u79d2\u3002

                          Kubernetes v1.7 \u53ca\u5176\u4e4b\u540e\u7684\u7248\u672c\u53ef\u4ee5\u901a\u8fc7 .spec.podManagementPolicy \u8bbe\u7f6e Pod \u7684\u7ba1\u7406\u7b56\u7565\uff0c\u652f\u6301\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\uff1a

                          • \u6309\u5e8f\u7b56\u7565\uff08OrderedReady\uff09 \uff1a\u9ed8\u8ba4\u7684 Pod \u7ba1\u7406\u7b56\u7565\uff0c\u8868\u793a\u6309\u987a\u5e8f\u90e8\u7f72 Pod\uff0c\u53ea\u6709\u524d\u4e00\u4e2a Pod \u90e8\u7f72 \u6210\u529f\u5b8c\u6210\u540e\uff0c\u6709\u72b6\u6001\u8d1f\u8f7d\u624d\u4f1a\u5f00\u59cb\u90e8\u7f72\u4e0b\u4e00\u4e2a Pod\u3002\u5220\u9664 Pod \u65f6\u5219\u91c7\u7528\u9006\u5e8f\uff0c\u6700\u540e\u521b\u5efa\u7684\u6700\u5148\u88ab\u5220\u9664\u3002

                          • \u5e76\u884c\u7b56\u7565\uff08Parallel\uff09 \uff1a\u5e76\u884c\u521b\u5efa\u6216\u5220\u9664\u5bb9\u5668\uff0c\u548c Deployment \u7c7b\u578b\u7684 Pod \u4e00\u6837\u3002StatefulSet \u63a7\u5236\u5668\u5e76\u884c\u5730\u542f\u52a8\u6216\u7ec8\u6b62\u6240\u6709\u7684\u5bb9\u5668\u3002\u542f\u52a8\u6216\u8005\u7ec8\u6b62\u5176\u4ed6 Pod \u524d\uff0c\u65e0\u9700\u7b49\u5f85 Pod \u8fdb\u5165 Running \u548c ready \u6216\u8005\u5b8c\u5168\u505c\u6b62\u72b6\u6001\u3002 \u8fd9\u4e2a\u9009\u9879\u53ea\u4f1a\u5f71\u54cd\u6269\u7f29\u64cd\u4f5c\u7684\u884c\u4e3a\uff0c\u4e0d\u5f71\u54cd\u66f4\u65b0\u65f6\u7684\u987a\u5e8f\u3002

                          • \u5bb9\u5fcd\u65f6\u95f4\uff1a\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u5c06\u8d1f\u8f7d\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002
                          • \u8282\u70b9\u4eb2\u548c\u6027\uff1a\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002
                          • \u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
                          • \u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027\uff1a\u57fa\u4e8e\u5df2\u7ecf\u5728\u8282\u70b9\u4e0a\u8fd0\u884c\u7684 Pod \u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u4e0d\u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u3002
                          • \u62d3\u6251\u57df\uff1a\u5373 topologyKey\uff0c\u7528\u4e8e\u6307\u5b9a\u53ef\u4ee5\u8c03\u5ea6\u7684\u4e00\u7ec4\u8282\u70b9\u3002\u4f8b\u5982\uff0c kubernetes.io/os \u8868\u793a\u53ea\u8981\u67d0\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u7684\u8282\u70b9\u6ee1\u8db3 labelSelector \u7684\u6761\u4ef6\u5c31\u53ef\u4ee5\u8c03\u5ea6\u5230\u8be5\u8282\u70b9\u3002

                          \u5177\u4f53\u8be6\u60c5\u8bf7\u53c2\u8003\u8c03\u5ea6\u7b56\u7565\u3002

                          ![\u8c03\u5ea6\u7b56\u7565](../../../images/deploy15_1.png)\n

                          \u53ef\u4ee5\u70b9\u51fb \u6dfb\u52a0 \u6309\u94ae\u4e3a\u5de5\u4f5c\u8d1f\u8f7d\u548c\u5bb9\u5668\u7ec4\u6dfb\u52a0\u6807\u7b7e\u548c\u6ce8\u89e3\u3002

                          "},{"location":"end-user/kpanda/workloads/create-statefulset.html#yaml","title":"YAML \u521b\u5efa","text":"

                          \u9664\u4e86\u901a\u8fc7\u955c\u50cf\u65b9\u5f0f\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 YAML \u6587\u4ef6\u66f4\u5feb\u901f\u5730\u521b\u5efa\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\u3002

                          1. \u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u4e0a\u7684 \u96c6\u7fa4\u5217\u8868 \uff0c\u7136\u540e\u70b9\u51fb\u76ee\u6807\u96c6\u7fa4\u7684\u540d\u79f0\uff0c\u8fdb\u5165 \u96c6\u7fa4\u8be6\u60c5 \u9875\u9762\u3002

                          2. \u5728\u96c6\u7fa4\u8be6\u60c5\u9875\u9762\uff0c\u70b9\u51fb\u5de6\u4fa7\u5bfc\u822a\u680f\u7684 \u5de5\u4f5c\u8d1f\u8f7d -> \u6709\u72b6\u6001\u8d1f\u8f7d \uff0c\u7136\u540e\u70b9\u51fb\u9875\u9762\u53f3\u4e0a\u89d2\u7684 YAML \u521b\u5efa \u6309\u94ae\u3002

                          3. \u8f93\u5165\u6216\u7c98\u8d34\u4e8b\u5148\u51c6\u5907\u597d\u7684 YAML \u6587\u4ef6\uff0c\u70b9\u51fb \u786e\u5b9a \u5373\u53ef\u5b8c\u6210\u521b\u5efa\u3002

                          \u70b9\u51fb\u67e5\u770b\u521b\u5efa\u6709\u72b6\u6001\u8d1f\u8f7d\u7684 YAML \u793a\u4f8b
                          kind: StatefulSet\napiVersion: apps/v1\nmetadata:\n  name: test-mysql-123-mysql\n  namespace: default\n  uid: d3f45527-a0ab-4b22-9013-5842a06f4e0e\n  resourceVersion: '20504385'\n  generation: 1\n  creationTimestamp: '2022-09-22T09:34:10Z'\n  ownerReferences:\n    - apiVersion: mysql.presslabs.org/v1alpha1\n      kind: MysqlCluster\n      name: test-mysql-123\n      uid: 5e877cc3-5167-49da-904e-820940cf1a6d\n      controller: true\n      blockOwnerDeletion: true\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app.kubernetes.io/managed-by: mysql.presslabs.org\n      app.kubernetes.io/name: mysql\n      mysql.presslabs.org/cluster: test-mysql-123\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app.kubernetes.io/component: database\n        app.kubernetes.io/instance: test-mysql-123\n        app.kubernetes.io/managed-by: mysql.presslabs.org\n        app.kubernetes.io/name: mysql\n        app.kubernetes.io/version: 5.7.31\n        mysql.presslabs.org/cluster: test-mysql-123\n      annotations:\n        config_rev: '13941099'\n        prometheus.io/port: '9125'\n        prometheus.io/scrape: 'true'\n        secret_rev: '13941101'\n    spec:\n      volumes:\n        - name: conf\n          emptyDir: {}\n        - name: init-scripts\n          emptyDir: {}\n        - name: config-map\n          configMap:\n            name: test-mysql-123-mysql\n            defaultMode: 420\n        - name: data\n          persistentVolumeClaim:\n            claimName: data\n      initContainers:\n        - name: init\n          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1\n          args:\n            - clone-and-init\n          envFrom:\n            - secretRef:\n                name: test-mysql-123-mysql-operated\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: BACKUP_USER\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: BACKUP_USER\n                  optional: true\n            - name: BACKUP_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: BACKUP_PASSWORD\n                  optional: true\n          resources: {}\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n            - name: config-map\n              mountPath: /mnt/conf\n            - name: data\n              mountPath: /var/lib/mysql\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n      containers:\n        - name: mysql\n          image: docker.m.daocloud.io/mysql:5.7.31\n          ports:\n            - name: mysql\n              containerPort: 3306\n              protocol: TCP\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: ORCH_CLUSTER_ALIAS\n              value: test-mysql-123.default\n            - name: ORCH_HTTP_API\n              value: http://mysql-operator.mcamel-system/api\n            - name: MYSQL_ROOT_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: ROOT_PASSWORD\n                  optional: false\n            - name: MYSQL_USER\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: USER\n                  optional: true\n            - name: MYSQL_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: PASSWORD\n                  optional: true\n            - name: MYSQL_DATABASE\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-secret\n                  key: DATABASE\n                  optional: true\n          resources:\n            limits:\n              cpu: '1'\n              memory: 1Gi\n            requests:\n              cpu: 100m\n              memory: 512Mi\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n            - name: data\n              mountPath: /var/lib/mysql\n          livenessProbe:\n            exec:\n              command:\n                - mysqladmin\n                - '--defaults-file=/etc/mysql/client.conf'\n                - ping\n            initialDelaySeconds: 60\n            timeoutSeconds: 5\n            periodSeconds: 5\n            successThreshold: 1\n            failureThreshold: 3\n          readinessProbe:\n            exec:\n              command:\n                - /bin/sh\n                - '-c'\n                - >-\n                  test $(mysql --defaults-file=/etc/mysql/client.conf -NB -e\n                  'SELECT COUNT(*) FROM sys_operator.status WHERE\n                  name=\"configured\" AND value=\"1\"') -eq 1\n            initialDelaySeconds: 5\n            timeoutSeconds: 5\n            periodSeconds: 2\n            successThreshold: 1\n            failureThreshold: 3\n          lifecycle:\n            preStop:\n              exec:\n                command:\n                  - bash\n                  - /etc/mysql/pre-shutdown-ha.sh\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: sidecar\n          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1\n          args:\n            - config-and-serve\n          ports:\n            - name: sidecar-http\n              containerPort: 8080\n              protocol: TCP\n          envFrom:\n            - secretRef:\n                name: test-mysql-123-mysql-operated\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: XTRABACKUP_TARGET_DIR\n              value: /tmp/xtrabackup_backupfiles/\n          resources:\n            limits:\n              cpu: '1'\n              memory: 1Gi\n            requests:\n              cpu: 10m\n              memory: 64Mi\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n            - name: data\n              mountPath: /var/lib/mysql\n          readinessProbe:\n            httpGet:\n              path: /health\n              port: 8080\n              scheme: HTTP\n            initialDelaySeconds: 30\n            timeoutSeconds: 5\n            periodSeconds: 5\n            successThreshold: 1\n            failureThreshold: 3\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: metrics-exporter\n          image: prom/mysqld-exporter:v0.13.0\n          args:\n            - '--web.listen-address=0.0.0.0:9125'\n            - '--web.telemetry-path=/metrics'\n            - '--collect.heartbeat'\n            - '--collect.heartbeat.database=sys_operator'\n          ports:\n            - name: prometheus\n              containerPort: 9125\n              protocol: TCP\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n            - name: USER\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: METRICS_EXPORTER_USER\n                  optional: false\n            - name: PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: test-mysql-123-mysql-operated\n                  key: METRICS_EXPORTER_PASSWORD\n                  optional: false\n            - name: DATA_SOURCE_NAME\n              value: $(USER):$(PASSWORD)@(127.0.0.1:3306)/\n          resources:\n            limits:\n              cpu: 100m\n              memory: 128Mi\n            requests:\n              cpu: 10m\n              memory: 32Mi\n          livenessProbe:\n            httpGet:\n              path: /metrics\n              port: 9125\n              scheme: HTTP\n            initialDelaySeconds: 30\n            timeoutSeconds: 30\n            periodSeconds: 30\n            successThreshold: 1\n            failureThreshold: 3\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n        - name: pt-heartbeat\n          image: docker.m.daocloud.io/bitpoke/mysql-operator-sidecar-5.7:v0.6.1\n          args:\n            - pt-heartbeat\n            - '--update'\n            - '--replace'\n            - '--check-read-only'\n            - '--create-table'\n            - '--database'\n            - sys_operator\n            - '--table'\n            - heartbeat\n            - '--utc'\n            - '--defaults-file'\n            - /etc/mysql/heartbeat.conf\n            - '--fail-successive-errors=20'\n          env:\n            - name: MY_NAMESPACE\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.namespace\n            - name: MY_POD_NAME\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: metadata.name\n            - name: MY_POD_IP\n              valueFrom:\n                fieldRef:\n                  apiVersion: v1\n                  fieldPath: status.podIP\n            - name: MY_SERVICE_NAME\n              value: mysql\n            - name: MY_CLUSTER_NAME\n              value: test-mysql-123\n            - name: MY_FQDN\n              value: $(MY_POD_NAME).$(MY_SERVICE_NAME).$(MY_NAMESPACE)\n            - name: MY_MYSQL_VERSION\n              value: 5.7.31\n          resources:\n            limits:\n              cpu: 100m\n              memory: 64Mi\n            requests:\n              cpu: 10m\n              memory: 32Mi\n          volumeMounts:\n            - name: conf\n              mountPath: /etc/mysql\n          terminationMessagePath: /dev/termination-log\n          terminationMessagePolicy: File\n          imagePullPolicy: IfNotPresent\n      restartPolicy: Always\n      terminationGracePeriodSeconds: 30\n      dnsPolicy: ClusterFirst\n      securityContext:\n        runAsUser: 999\n        fsGroup: 999\n      affinity:\n        podAntiAffinity:\n          preferredDuringSchedulingIgnoredDuringExecution:\n            - weight: 100\n              podAffinityTerm:\n                labelSelector:\n                  matchLabels:\n                    app.kubernetes.io/component: database\n                    app.kubernetes.io/instance: test-mysql-123\n                    app.kubernetes.io/managed-by: mysql.presslabs.org\n                    app.kubernetes.io/name: mysql\n                    app.kubernetes.io/version: 5.7.31\n                    mysql.presslabs.org/cluster: test-mysql-123\n                topologyKey: kubernetes.io/hostname\n      schedulerName: default-scheduler\n  volumeClaimTemplates:\n    - kind: PersistentVolumeClaim\n      apiVersion: v1\n      metadata:\n        name: data\n        creationTimestamp: null\n        ownerReferences:\n          - apiVersion: mysql.presslabs.org/v1alpha1\n            kind: MysqlCluster\n            name: test-mysql-123\n            uid: 5e877cc3-5167-49da-904e-820940cf1a6d\n            controller: true\n      spec:\n        accessModes:\n          - ReadWriteOnce\n        resources:\n          limits:\n            storage: 1Gi\n          requests:\n            storage: 1Gi\n        storageClassName: local-path\n        volumeMode: Filesystem\n      status:\n        phase: Pending\n  serviceName: mysql\n  podManagementPolicy: OrderedReady\n  updateStrategy:\n    type: RollingUpdate\n    rollingUpdate:\n      partition: 0\n  revisionHistoryLimit: 10\nstatus:\n  observedGeneration: 1\n  replicas: 1\n  readyReplicas: 1\n  currentReplicas: 1\n  updatedReplicas: 1\n  currentRevision: test-mysql-123-mysql-6b8f5577c7\n  updateRevision: test-mysql-123-mysql-6b8f5577c7\n  collisionCount: 0\n  availableReplicas: 1\n
                          "},{"location":"end-user/kpanda/workloads/pod-config/env-variables.html","title":"\u914d\u7f6e\u73af\u5883\u53d8\u91cf","text":"

                          \u73af\u5883\u53d8\u91cf\u662f\u6307\u5bb9\u5668\u8fd0\u884c\u73af\u5883\u4e2d\u8bbe\u5b9a\u7684\u4e00\u4e2a\u53d8\u91cf\uff0c\u7528\u4e8e\u7ed9 Pod \u6dfb\u52a0\u73af\u5883\u6807\u5fd7\u6216\u4f20\u9012\u914d\u7f6e\u7b49\uff0c\u652f\u6301\u901a\u8fc7\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u4e3a Pod \u914d\u7f6e\u73af\u5883\u53d8\u91cf\u3002

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u5728\u539f\u751f Kubernetes \u7684\u57fa\u7840\u4e0a\u589e\u52a0\u4e86\u56fe\u5f62\u5316\u754c\u9762\u4e3a Pod \u914d\u7f6e\u73af\u5883\u53d8\u91cf\uff0c\u652f\u6301\u4ee5\u4e0b\u51e0\u79cd\u914d\u7f6e\u65b9\u5f0f\uff1a

                          • \u952e\u503c\u5bf9\uff08Key/Value Pair\uff09\uff1a\u5c06\u81ea\u5b9a\u4e49\u7684\u952e\u503c\u5bf9\u4f5c\u4e3a\u5bb9\u5668\u7684\u73af\u5883\u53d8\u91cf
                          • \u8d44\u6e90\u5f15\u7528\uff08Resource\uff09\uff1a\u5c06 Container \u5b9a\u4e49\u7684\u5b57\u6bb5\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff0c\u4f8b\u5982\u5bb9\u5668\u7684\u5185\u5b58\u9650\u5236\u3001\u526f\u672c\u6570\u7b49
                          • \u53d8\u91cf/\u53d8\u91cf\u5f15\u7528\uff08Pod Field\uff09\uff1a\u5c06 Pod \u5b57\u6bb5\u4f5c\u4e3a\u73af\u5883\u53d8\u91cf\u7684\u503c\uff0c\u4f8b\u5982 Pod \u7684\u540d\u79f0
                          • \u914d\u7f6e\u9879\u952e\u503c\u5bfc\u5165\uff08ConfigMap key\uff09\uff1a\u5bfc\u5165\u914d\u7f6e\u9879\u4e2d\u67d0\u4e2a\u952e\u7684\u503c\u4f5c\u4e3a\u67d0\u4e2a\u73af\u5883\u53d8\u91cf\u7684\u503c
                          • \u5bc6\u94a5\u952e\u503c\u5bfc\u5165\uff08Secret Key\uff09\uff1a\u4f7f\u7528\u6765\u81ea Secret \u4e2d\u7684\u6570\u636e\u5b9a\u4e49\u73af\u5883\u53d8\u91cf\u7684\u503c
                          • \u5bc6\u94a5\u5bfc\u5165\uff08Secret\uff09\uff1a\u5c06 Secret \u4e2d\u7684\u6240\u6709\u952e\u503c\u90fd\u5bfc\u5165\u4e3a\u73af\u5883\u53d8\u91cf
                          • \u914d\u7f6e\u9879\u5bfc\u5165\uff08ConfigMap\uff09\uff1a\u5c06\u914d\u7f6e\u9879\u4e2d\u6240\u6709\u952e\u503c\u90fd\u5bfc\u5165\u4e3a\u73af\u5883\u53d8\u91cf
                          "},{"location":"end-user/kpanda/workloads/pod-config/health-check.html","title":"\u5bb9\u5668\u7684\u5065\u5eb7\u68c0\u67e5","text":"

                          \u5bb9\u5668\u5065\u5eb7\u68c0\u67e5\u6839\u636e\u7528\u6237\u9700\u6c42\uff0c\u68c0\u67e5\u5bb9\u5668\u7684\u5065\u5eb7\u72b6\u51b5\u3002\u914d\u7f6e\u540e\uff0c\u5bb9\u5668\u5185\u7684\u5e94\u7528\u7a0b\u5e8f\u5165\u5982\u679c\u5f02\u5e38\uff0c\u5bb9\u5668\u4f1a\u81ea\u52a8\u8fdb\u884c\u91cd\u542f\u6062\u590d\u3002Kubernetes \u63d0\u4f9b\u4e86\u5b58\u6d3b\uff08Liveness\uff09\u68c0\u67e5\u3001\u5c31\u7eea\uff08Readiness\uff09\u68c0\u67e5\u548c\u542f\u52a8\uff08Startup\uff09\u68c0\u67e5\u3002

                          • \u5b58\u6d3b\u68c0\u67e5\uff08LivenessProbe\uff09 \u53ef\u63a2\u6d4b\u5230\u5e94\u7528\u6b7b\u9501\uff08\u5e94\u7528\u7a0b\u5e8f\u5728\u8fd0\u884c\uff0c\u4f46\u662f\u65e0\u6cd5\u7ee7\u7eed\u6267\u884c\u540e\u9762\u7684\u6b65\u9aa4\uff09\u60c5\u51b5\u3002 \u91cd\u542f\u8fd9\u79cd\u72b6\u6001\u4e0b\u7684\u5bb9\u5668\u6709\u52a9\u4e8e\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u7528\u6027\uff0c\u5373\u4f7f\u5176\u4e2d\u5b58\u5728\u7f3a\u9677\u3002

                          • \u5c31\u7eea\u68c0\u67e5\uff08ReadinessProbe\uff09 \u53ef\u63a2\u77e5\u5bb9\u5668\u4f55\u65f6\u51c6\u5907\u597d\u63a5\u53d7\u8bf7\u6c42\u6d41\u91cf\uff0c\u5f53\u4e00\u4e2a Pod \u5185\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5c31\u7eea\u65f6\uff0c\u624d\u80fd\u8ba4\u4e3a\u8be5 Pod \u5c31\u7eea\u3002 \u8fd9\u79cd\u4fe1\u53f7\u7684\u4e00\u4e2a\u7528\u9014\u5c31\u662f\u63a7\u5236\u54ea\u4e2a Pod \u4f5c\u4e3a Service \u7684\u540e\u7aef\u3002 \u82e5 Pod \u5c1a\u672a\u5c31\u7eea\uff0c\u4f1a\u88ab\u4ece Service \u7684\u8d1f\u8f7d\u5747\u8861\u5668\u4e2d\u5254\u9664\u3002

                          • \u542f\u52a8\u68c0\u67e5\uff08StartupProbe\uff09 \u53ef\u4ee5\u4e86\u89e3\u5e94\u7528\u5bb9\u5668\u4f55\u65f6\u542f\u52a8\uff0c\u914d\u7f6e\u540e\uff0c\u53ef\u63a7\u5236\u5bb9\u5668\u5728\u542f\u52a8\u6210\u529f\u540e\u518d\u8fdb\u884c\u5b58\u6d3b\u6027\u548c\u5c31\u7eea\u6001\u68c0\u67e5\uff0c \u786e\u4fdd\u8fd9\u4e9b\u5b58\u6d3b\u3001\u5c31\u7eea\u63a2\u6d4b\u5668\u4e0d\u4f1a\u5f71\u54cd\u5e94\u7528\u7684\u542f\u52a8\u3002 \u542f\u52a8\u63a2\u6d4b\u53ef\u4ee5\u7528\u4e8e\u5bf9\u6162\u542f\u52a8\u5bb9\u5668\u8fdb\u884c\u5b58\u6d3b\u6027\u68c0\u6d4b\uff0c\u907f\u514d\u5b83\u4eec\u5728\u542f\u52a8\u8fd0\u884c\u4e4b\u524d\u5c31\u88ab\u6740\u6389\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/health-check.html#_2","title":"\u5b58\u6d3b\u548c\u5c31\u7eea\u68c0\u67e5","text":"

                          \u5b58\u6d3b\u68c0\u67e5\uff08LivenessProbe\uff09\u7684\u914d\u7f6e\u548c\u5c31\u7eea\u68c0\u67e5\uff08ReadinessProbe\uff09\u7684\u914d\u7f6e\u53c2\u6570\u76f8\u4f3c\uff0c \u552f\u4e00\u533a\u522b\u662f\u8981\u4f7f\u7528 readinessProbe \u5b57\u6bb5\uff0c\u800c\u4e0d\u662f livenessProbe \u5b57\u6bb5\u3002

                          HTTP GET \u53c2\u6570\u8bf4\u660e\uff1a

                          \u53c2\u6570 \u53c2\u6570\u8bf4\u660e \u8def\u5f84\uff08 Path\uff09 \u8bbf\u95ee\u7684\u8bf7\u6c42\u8def\u5f84\u3002\u5982\uff1a \u793a\u4f8b\u4e2d\u7684 /healthz \u8def\u5f84 \u7aef\u53e3(Port) \u670d\u52a1\u76d1\u542c\u7aef\u53e3\u3002 \u5982\uff1a \u793a\u4f8b\u4e2d\u7684 8080 \u7aef\u53e3 \u534f\u8bae \u8bbf\u95ee\u534f\u8bae\uff0cHttp \u6216\u8005Https \u5ef6\u8fdf\u65f6\u95f4\uff08initialDelaySeconds\uff09 \u5ef6\u8fdf\u68c0\u67e5\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\uff0c\u6b64\u8bbe\u7f6e\u4e0e\u4e1a\u52a1\u7a0b\u5e8f\u6b63\u5e38\u542f\u52a8\u65f6\u95f4\u76f8\u5173\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a30\uff0c\u8868\u660e\u5bb9\u5668\u542f\u52a8\u540e30\u79d2\u624d\u5f00\u59cb\u5065\u5eb7\u68c0\u67e5\uff0c\u8be5\u65f6\u95f4\u662f\u9884\u7559\u7ed9\u4e1a\u52a1\u7a0b\u5e8f\u542f\u52a8\u7684\u65f6\u95f4\u3002 \u8d85\u65f6\u65f6\u95f4\uff08timeoutSeconds\uff09 \u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a10\uff0c\u8868\u660e\u6267\u884c\u5065\u5eb7\u68c0\u67e5\u7684\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a10\u79d2\uff0c\u5982\u679c\u8d85\u8fc7\u8fd9\u4e2a\u65f6\u95f4\uff0c\u672c\u6b21\u5065\u5eb7\u68c0\u67e5\u5c31\u88ab\u89c6\u4e3a\u5931\u8d25\u3002\u82e5\u8bbe\u7f6e\u4e3a0\u6216\u4e0d\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a1\u79d2\u3002 \u8d85\u65f6\u65f6\u95f4\uff08timeoutSeconds\uff09 \u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a10\uff0c\u8868\u660e\u6267\u884c\u5065\u5eb7\u68c0\u67e5\u7684\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a10\u79d2\uff0c\u5982\u679c\u8d85\u8fc7\u8fd9\u4e2a\u65f6\u95f4\uff0c\u672c\u6b21\u5065\u5eb7\u68c0\u67e5\u5c31\u88ab\u89c6\u4e3a\u5931\u8d25\u3002\u82e5\u8bbe\u7f6e\u4e3a0\u6216\u4e0d\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a1\u79d2\u3002 \u6210\u529f\u9608\u503c\uff08successThreshold\uff09 \u63a2\u6d4b\u5931\u8d25\u540e\uff0c\u88ab\u89c6\u4e3a\u6210\u529f\u7684\u6700\u5c0f\u8fde\u7eed\u6210\u529f\u6570\u3002\u9ed8\u8ba4\u503c\u662f 1\uff0c\u6700\u5c0f\u503c\u662f 1\u3002\u5b58\u6d3b\u548c\u542f\u52a8\u63a2\u6d4b\u7684\u8fd9\u4e2a\u503c\u5fc5\u987b\u662f 1\u3002 \u6700\u5927\u5931\u8d25\u6b21\u6570\uff08failureThreshold\uff09 \u5f53\u63a2\u6d4b\u5931\u8d25\u65f6\u91cd\u8bd5\u7684\u6b21\u6570\u3002\u5b58\u6d3b\u63a2\u6d4b\u60c5\u51b5\u4e0b\u7684\u653e\u5f03\u5c31\u610f\u5473\u7740\u91cd\u65b0\u542f\u52a8\u5bb9\u5668\u3002\u5c31\u7eea\u63a2\u6d4b\u60c5\u51b5\u4e0b\u7684\u653e\u5f03 Pod \u4f1a\u88ab\u6253\u4e0a\u672a\u5c31\u7eea\u7684\u6807\u7b7e\u3002\u9ed8\u8ba4\u503c\u662f 3\u3002\u6700\u5c0f\u503c\u662f 1\u3002"},{"location":"end-user/kpanda/workloads/pod-config/health-check.html#http-get","title":"\u4f7f\u7528 HTTP GET \u8bf7\u6c42\u68c0\u67e5","text":"

                          YAML \u793a\u4f8b\uff1a

                          apiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    test: liveness\n  name: liveness-http\nspec:\n  containers:\n  - name: liveness\n    image: k8s.gcr.io/liveness\n    args:\n    - /server\n    livenessProbe:\n      httpGet:\n        path: /healthz  # \u8bbf\u95ee\u7684\u8bf7\u6c42\u8def\u5f84\n        port: 8080  # \u670d\u52a1\u76d1\u542c\u7aef\u53e3\n        httpHeaders:\n        - name: Custom-Header\n          value: Awesome\n      initialDelaySeconds: 3  # kubelet \u5728\u6267\u884c\u7b2c\u4e00\u6b21\u63a2\u6d4b\u524d\u5e94\u8be5\u7b49\u5f85 3 \u79d2\n      periodSeconds: 3   # kubelet \u6bcf\u9694 3 \u79d2\u6267\u884c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\n

                          \u6309\u7167\u8bbe\u5b9a\u7684\u89c4\u5219\uff0cubelet \u5411\u5bb9\u5668\u5185\u8fd0\u884c\u7684\u670d\u52a1\uff08\u670d\u52a1\u5728\u76d1\u542c 8080 \u7aef\u53e3\uff09\u53d1\u9001\u4e00\u4e2a HTTP GET \u8bf7\u6c42\u6765\u6267\u884c\u63a2\u6d4b\u3002\u5982\u679c\u670d\u52a1\u5668\u4e0a /healthz \u8def\u5f84\u4e0b\u7684\u5904\u7406\u7a0b\u5e8f\u8fd4\u56de\u6210\u529f\u4ee3\u7801\uff0c\u5219 kubelet \u8ba4\u4e3a\u5bb9\u5668\u662f\u5065\u5eb7\u5b58\u6d3b\u7684\u3002 \u5982\u679c\u5904\u7406\u7a0b\u5e8f\u8fd4\u56de\u5931\u8d25\u4ee3\u7801\uff0c\u5219 kubelet \u4f1a\u6740\u6b7b\u8fd9\u4e2a\u5bb9\u5668\u5e76\u5c06\u5176\u91cd\u542f\u3002\u8fd4\u56de\u5927\u4e8e\u6216\u7b49\u4e8e 200 \u5e76\u4e14\u5c0f\u4e8e 400 \u7684\u4efb\u4f55\u4ee3\u7801\u90fd\u6807\u793a\u6210\u529f\uff0c\u5176\u5b83\u8fd4\u56de\u4ee3\u7801\u90fd\u6807\u793a\u5931\u8d25\u3002 \u5bb9\u5668\u5b58\u6d3b\u671f\u95f4\u7684\u6700\u5f00\u59cb 10 \u79d2\u4e2d\uff0c /healthz \u5904\u7406\u7a0b\u5e8f\u8fd4\u56de 200 \u7684\u72b6\u6001\u7801\u3002 \u4e4b\u540e\u5904\u7406\u7a0b\u5e8f\u8fd4\u56de 500 \u7684\u72b6\u6001\u7801\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/health-check.html#tcp","title":"\u4f7f\u7528 TCP \u7aef\u53e3\u68c0\u67e5","text":"

                          TCP \u7aef\u53e3\u53c2\u6570\u8bf4\u660e\uff1a

                          \u53c2\u6570 \u53c2\u6570\u8bf4\u660e \u7aef\u53e3(Port) \u670d\u52a1\u76d1\u542c\u7aef\u53e3\u3002 \u5982\uff1a \u793a\u4f8b\u4e2d\u7684 8080 \u7aef\u53e3 \u5ef6\u8fdf\u65f6\u95f4\uff08initialDelaySeconds\uff09 \u5ef6\u8fdf\u68c0\u67e5\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\uff0c\u6b64\u8bbe\u7f6e\u4e0e\u4e1a\u52a1\u7a0b\u5e8f\u6b63\u5e38\u542f\u52a8\u65f6\u95f4\u76f8\u5173\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a30\uff0c\u8868\u660e\u5bb9\u5668\u542f\u52a8\u540e30\u79d2\u624d\u5f00\u59cb\u5065\u5eb7\u68c0\u67e5\uff0c\u8be5\u65f6\u95f4\u662f\u9884\u7559\u7ed9\u4e1a\u52a1\u7a0b\u5e8f\u542f\u52a8\u7684\u65f6\u95f4\u3002 \u8d85\u65f6\u65f6\u95f4\uff08timeoutSeconds\uff09 \u8d85\u65f6\u65f6\u95f4\uff0c\u5355\u4f4d\u4e3a\u79d2\u3002\u4f8b\u5982\uff0c\u8bbe\u7f6e\u4e3a10\uff0c\u8868\u660e\u6267\u884c\u5065\u5eb7\u68c0\u67e5\u7684\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a10\u79d2\uff0c\u5982\u679c\u8d85\u8fc7\u8fd9\u4e2a\u65f6\u95f4\uff0c\u672c\u6b21\u5065\u5eb7\u68c0\u67e5\u5c31\u88ab\u89c6\u4e3a\u5931\u8d25\u3002\u82e5\u8bbe\u7f6e\u4e3a0\u6216\u4e0d\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u8d85\u65f6\u7b49\u5f85\u65f6\u95f4\u4e3a1\u79d2\u3002

                          \u5bf9\u4e8e\u63d0\u4f9bTCP\u901a\u4fe1\u670d\u52a1\u7684\u5bb9\u5668\uff0c\u57fa\u4e8e\u6b64\u914d\u7f6e\uff0c\u6309\u7167\u8bbe\u5b9a\u89c4\u5219\u96c6\u7fa4\u5bf9\u8be5\u5bb9\u5668\u5efa\u7acbTCP\u8fde\u63a5\uff0c\u5982\u679c\u8fde\u63a5\u6210\u529f\uff0c\u5219\u8bc1\u660e\u63a2\u6d4b\u6210\u529f\uff0c\u5426\u5219\u63a2\u6d4b\u5931\u8d25\u3002\u9009\u62e9TCP\u7aef\u53e3\u63a2\u6d4b\u65b9\u5f0f\uff0c\u5fc5\u987b\u6307\u5b9a\u5bb9\u5668\u76d1\u542c\u7684\u7aef\u53e3\u3002

                          YAML \u793a\u4f8b\uff1a

                          apiVersion: v1\nkind: Pod\nmetadata:\n  name: goproxy\n  labels:\n    app: goproxy\nspec:\n  containers:\n  - name: goproxy\n    image: k8s.gcr.io/goproxy:0.1\n    ports:\n    - containerPort: 8080\n    readinessProbe:\n      tcpSocket:\n        port: 8080\n      initialDelaySeconds: 5\n      periodSeconds: 10\n    livenessProbe:\n      tcpSocket:\n        port: 8080\n      initialDelaySeconds: 15\n      periodSeconds: 20\n

                          \u6b64\u793a\u4f8b\u540c\u65f6\u4f7f\u7528\u5c31\u7eea\u548c\u5b58\u6d3b\u63a2\u9488\u3002kubelet \u5728\u5bb9\u5668\u542f\u52a8 5 \u79d2\u540e\u53d1\u9001\u7b2c\u4e00\u4e2a\u5c31\u7eea\u63a2\u6d4b\u3002 \u5c1d\u8bd5\u8fde\u63a5 goproxy \u5bb9\u5668\u7684 8080 \u7aef\u53e3\uff0c \u5982\u679c\u63a2\u6d4b\u6210\u529f\uff0c\u8fd9\u4e2a Pod \u4f1a\u88ab\u6807\u8bb0\u4e3a\u5c31\u7eea\u72b6\u6001\uff0ckubelet \u5c06\u7ee7\u7eed\u6bcf\u9694 10 \u79d2\u8fd0\u884c\u4e00\u6b21\u68c0\u6d4b\u3002

                          \u9664\u4e86\u5c31\u7eea\u63a2\u6d4b\uff0c\u8fd9\u4e2a\u914d\u7f6e\u5305\u62ec\u4e86\u4e00\u4e2a\u5b58\u6d3b\u63a2\u6d4b\u3002 kubelet \u4f1a\u5728\u5bb9\u5668\u542f\u52a8 15 \u79d2\u540e\u8fdb\u884c\u7b2c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\u3002 \u5c31\u7eea\u63a2\u6d4b\u4f1a\u5c1d\u8bd5\u8fde\u63a5 goproxy \u5bb9\u5668\u7684 8080 \u7aef\u53e3\u3002 \u5982\u679c\u5b58\u6d3b\u63a2\u6d4b\u5931\u8d25\uff0c\u5bb9\u5668\u4f1a\u88ab\u91cd\u65b0\u542f\u52a8\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/health-check.html#_3","title":"\u6267\u884c\u547d\u4ee4\u68c0\u67e5","text":"

                          YAML \u793a\u4f8b:

                          apiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    test: liveness\n  name: liveness-exec\nspec:\n  containers:\n  - name: liveness\n    image: k8s.gcr.io/busybox\n    args:\n    - /bin/sh\n    - -c\n    - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600\n    livenessProbe:\n      exec:\n        command:\n        - cat\n        - /tmp/healthy\n      initialDelaySeconds: 5 # kubelet \u5728\u6267\u884c\u7b2c\u4e00\u6b21\u63a2\u6d4b\u524d\u7b49\u5f85 5 \u79d2\n      periodSeconds: 5  #kubelet \u6bcf 5 \u79d2\u6267\u884c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\n

                          periodSeconds \u5b57\u6bb5\u6307\u5b9a\u4e86 kubelet \u6bcf 5 \u79d2\u6267\u884c\u4e00\u6b21\u5b58\u6d3b\u63a2\u6d4b\uff0c initialDelaySeconds \u5b57\u6bb5\u6307\u5b9a kubelet \u5728\u6267\u884c\u7b2c\u4e00\u6b21\u63a2\u6d4b\u524d\u7b49\u5f85 5 \u79d2\u3002\u6309\u7167\u8bbe\u5b9a\u89c4\u5219\uff0c\u96c6\u7fa4\u5468\u671f\u6027\u7684\u901a\u8fc7 kubelet \u5728\u5bb9\u5668\u5185\u6267\u884c\u547d\u4ee4 cat /tmp/healthy \u6765\u8fdb\u884c\u63a2\u6d4b\u3002 \u5982\u679c\u547d\u4ee4\u6267\u884c\u6210\u529f\u5e76\u4e14\u8fd4\u56de\u503c\u4e3a 0\uff0ckubelet \u5c31\u4f1a\u8ba4\u4e3a\u8fd9\u4e2a\u5bb9\u5668\u662f\u5065\u5eb7\u5b58\u6d3b\u7684\u3002 \u5982\u679c\u8fd9\u4e2a\u547d\u4ee4\u8fd4\u56de\u975e 0 \u503c\uff0ckubelet \u4f1a\u6740\u6b7b\u8fd9\u4e2a\u5bb9\u5668\u5e76\u91cd\u65b0\u542f\u52a8\u5b83\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/health-check.html#_4","title":"\u4f7f\u7528\u542f\u52a8\u524d\u68c0\u67e5\u4fdd\u62a4\u6162\u542f\u52a8\u5bb9\u5668","text":"

                          \u6709\u4e9b\u5e94\u7528\u5728\u542f\u52a8\u65f6\u9700\u8981\u8f83\u957f\u7684\u521d\u59cb\u5316\u65f6\u95f4\uff0c\u9700\u8981\u4f7f\u7528\u76f8\u540c\u7684\u547d\u4ee4\u6765\u8bbe\u7f6e\u542f\u52a8\u63a2\u6d4b\uff0c\u9488\u5bf9 HTTP \u6216 TCP \u68c0\u6d4b\uff0c\u53ef\u4ee5\u901a\u8fc7\u5c06 failureThreshold * periodSeconds \u53c2\u6570\u8bbe\u7f6e\u4e3a\u8db3\u591f\u957f\u7684\u65f6\u95f4\u6765\u5e94\u5bf9\u542f\u52a8\u9700\u8981\u8f83\u957f\u65f6\u95f4\u7684\u573a\u666f\u3002

                          YAML \u793a\u4f8b\uff1a

                          ports:\n- name: liveness-port\n  containerPort: 8080\n  hostPort: 8080\n\nlivenessProbe:\n  httpGet:\n    path: /healthz\n    port: liveness-port\n  failureThreshold: 1\n  periodSeconds: 10\n\nstartupProbe:\n  httpGet:\n    path: /healthz\n    port: liveness-port\n  failureThreshold: 30\n  periodSeconds: 10\n

                          \u5982\u4e0a\u8bbe\u7f6e\uff0c\u5e94\u7528\u5c06\u6709\u6700\u591a 5 \u5206\u949f\uff0830 * 10 = 300s\uff09\u7684\u65f6\u95f4\u6765\u5b8c\u6210\u542f\u52a8\u8fc7\u7a0b\uff0c \u4e00\u65e6\u542f\u52a8\u63a2\u6d4b\u6210\u529f\uff0c\u5b58\u6d3b\u63a2\u6d4b\u4efb\u52a1\u5c31\u4f1a\u63a5\u7ba1\u5bf9\u5bb9\u5668\u7684\u63a2\u6d4b\uff0c\u5bf9\u5bb9\u5668\u6b7b\u9501\u4f5c\u51fa\u5feb\u901f\u54cd\u5e94\u3002 \u5982\u679c\u542f\u52a8\u63a2\u6d4b\u4e00\u76f4\u6ca1\u6709\u6210\u529f\uff0c\u5bb9\u5668\u4f1a\u5728 300 \u79d2\u540e\u88ab\u6740\u6b7b\uff0c\u5e76\u4e14\u6839\u636e restartPolicy \u6765 \u6267\u884c\u8fdb\u4e00\u6b65\u5904\u7f6e\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/job-parameters.html","title":"\u4efb\u52a1\u53c2\u6570\u8bf4\u660e","text":"

                          \u6839\u636e .spec.completions \u548c .spec.Parallelism \u7684\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u5c06\u4efb\u52a1\uff08Job\uff09\u5212\u5206\u4e3a\u4ee5\u4e0b\u51e0\u79cd\u7c7b\u578b:

                          Job \u7c7b\u578b \u8bf4\u660e \u975e\u5e76\u884c Job \u521b\u5efa\u4e00\u4e2a Pod \u76f4\u81f3\u5176 Job \u6210\u529f\u7ed3\u675f \u5177\u6709\u786e\u5b9a\u5b8c\u6210\u8ba1\u6570\u7684\u5e76\u884c Job \u5f53\u6210\u529f\u7684 Pod \u4e2a\u6570\u8fbe\u5230 .spec.completions \u65f6\uff0cJob \u88ab\u89c6\u4e3a\u5b8c\u6210 \u5e76\u884c Job \u521b\u5efa\u4e00\u4e2a\u6216\u591a\u4e2a Pod \u76f4\u81f3\u6709\u4e00\u4e2a\u6210\u529f\u7ed3\u675f

                          \u53c2\u6570\u8bf4\u660e

                          RestartPolicy \u521b\u5efa\u4e00\u4e2a Pod \u76f4\u81f3\u5176\u6210\u529f\u7ed3\u675f .spec.completions \u8868\u793a Job \u7ed3\u675f\u9700\u8981\u6210\u529f\u8fd0\u884c\u7684 Pod \u4e2a\u6570\uff0c\u9ed8\u8ba4\u4e3a 1 .spec.parallelism \u8868\u793a\u5e76\u884c\u8fd0\u884c\u7684 Pod \u7684\u4e2a\u6570\uff0c\u9ed8\u8ba4\u4e3a 1 spec.backoffLimit \u8868\u793a\u5931\u8d25 Pod \u7684\u91cd\u8bd5\u6700\u5927\u6b21\u6570\uff0c\u8d85\u8fc7\u8fd9\u4e2a\u6b21\u6570\u4e0d\u4f1a\u7ee7\u7eed\u91cd\u8bd5\u3002 .spec.activeDeadlineSeconds \u8868\u793a Pod \u8fd0\u884c\u65f6\u95f4\uff0c\u4e00\u65e6\u8fbe\u5230\u8fd9\u4e2a\u65f6\u95f4\uff0cJob \u5373\u5176\u6240\u6709\u7684 Pod \u90fd\u4f1a\u505c\u6b62\u3002\u4e14activeDeadlineSeconds \u4f18\u5148\u7ea7\u9ad8\u4e8e backoffLimit\uff0c\u5373\u5230\u8fbe activeDeadlineSeconds \u7684 Job \u4f1a\u5ffd\u7565backoffLimit \u7684\u8bbe\u7f6e\u3002

                          \u4ee5\u4e0b\u662f\u4e00\u4e2a Job \u914d\u7f6e\u793a\u4f8b\uff0c\u4fdd\u5b58\u5728 myjob.yaml \u4e2d\uff0c\u5176\u8ba1\u7b97 \u03c0 \u5230 2000 \u4f4d\u5e76\u6253\u5370\u8f93\u51fa\u3002

                          apiVersion: batch/v1\nkind: Job            # \u5f53\u524d\u8d44\u6e90\u7684\u7c7b\u578b\nmetadata:\n  name: myjob\nspec:\n  completions: 50        # Job\u7ed3\u675f\u9700\u8981\u8fd0\u884c50\u4e2aPod\uff0c\u8fd9\u4e2a\u793a\u4f8b\u4e2d\u5c31\u662f\u6253\u5370\u03c0 50\u6b21\n  parallelism: 5        # \u5e76\u884c5\u4e2aPod\n  backoffLimit: 5        # \u6700\u591a\u91cd\u8bd55\u6b21\n  template:\n    spec:\n      containers:\n      - name: pi\n        image: perl\n        command: [\"perl\",  \"-Mbignum=bpi\", \"-wle\", \"print bpi(2000)\"]\n      restartPolicy: Never #\u91cd\u542f\u7b56\u7565\n

                          \u76f8\u5173\u547d\u4ee4

                          kubectl apply -f myjob.yaml  #\u542f\u52a8 job\nkubectl get job #\u67e5\u770b\u8fd9\u4e2ajob\nkubectl logs myjob-1122dswzs \u67e5\u770bJob Pod \u7684\u65e5\u5fd7\n
                          "},{"location":"end-user/kpanda/workloads/pod-config/lifecycle.html","title":"\u914d\u7f6e\u5bb9\u5668\u751f\u547d\u5468\u671f","text":"

                          Pod \u9075\u5faa\u4e00\u4e2a\u9884\u5b9a\u4e49\u7684\u751f\u547d\u5468\u671f\uff0c\u8d77\u59cb\u4e8e Pending \u9636\u6bb5\uff0c\u5982\u679c Pod \u5185\u81f3\u5c11\u6709\u4e00\u4e2a\u5bb9\u5668\u6b63\u5e38\u542f\u52a8\uff0c\u5219\u8fdb\u5165 Running \u72b6\u6001\u3002\u5982\u679c Pod \u4e2d\u6709\u5bb9\u5668\u4ee5\u5931\u8d25\u72b6\u6001\u7ed3\u675f\uff0c\u5219\u72b6\u6001\u53d8\u4e3a Failed \u3002\u4ee5\u4e0b phase \u5b57\u6bb5\u503c\u8868\u660e\u4e86\u4e00\u4e2a Pod \u5904\u4e8e\u751f\u547d\u5468\u671f\u7684\u54ea\u4e2a\u9636\u6bb5\u3002

                          \u503c \u63cf\u8ff0 Pending \uff08\u60ac\u51b3\uff09 Pod \u5df2\u88ab\u7cfb\u7edf\u63a5\u53d7\uff0c\u4f46\u6709\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u5bb9\u5668\u5c1a\u672a\u521b\u5efa\u4ea6\u672a\u8fd0\u884c\u3002\u8fd9\u4e2a\u9636\u6bb5\u5305\u62ec\u7b49\u5f85 Pod \u88ab\u8c03\u5ea6\u7684\u65f6\u95f4\u548c\u901a\u8fc7\u7f51\u7edc\u4e0b\u8f7d\u955c\u50cf\u7684\u65f6\u95f4\u3002 Running \uff08\u8fd0\u884c\u4e2d\uff09 Pod \u5df2\u7ecf\u7ed1\u5b9a\u5230\u4e86\u67d0\u4e2a\u8282\u70b9\uff0cPod \u4e2d\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5df2\u88ab\u521b\u5efa\u3002\u81f3\u5c11\u6709\u4e00\u4e2a\u5bb9\u5668\u4ecd\u5728\u8fd0\u884c\uff0c\u6216\u8005\u6b63\u5904\u4e8e\u542f\u52a8\u6216\u91cd\u542f\u72b6\u6001\u3002 Succeeded \uff08\u6210\u529f\uff09 Pod \u4e2d\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5df2\u6210\u529f\u7ec8\u6b62\uff0c\u5e76\u4e14\u4e0d\u4f1a\u518d\u91cd\u542f\u3002 Failed \uff08\u5931\u8d25\uff09 Pod \u4e2d\u7684\u6240\u6709\u5bb9\u5668\u90fd\u5df2\u7ec8\u6b62\uff0c\u5e76\u4e14\u81f3\u5c11\u6709\u4e00\u4e2a\u5bb9\u5668\u662f\u56e0\u4e3a\u5931\u8d25\u800c\u7ec8\u6b62\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5bb9\u5668\u4ee5\u975e 0 \u72b6\u6001\u9000\u51fa\u6216\u8005\u88ab\u7cfb\u7edf\u7ec8\u6b62\u3002 Unknown \uff08\u672a\u77e5\uff09 \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u65e0\u6cd5\u53d6\u5f97 Pod \u7684\u72b6\u6001\uff0c\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u56e0\u4e3a\u4e0e Pod \u6240\u5728\u4e3b\u673a\u901a\u4fe1\u5931\u8d25\u6240\u81f4\u3002

                          \u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u5bb9\u5668\u7ba1\u7406\u4e2d\u521b\u5efa\u4e00\u4e2a\u5de5\u4f5c\u8d1f\u8f7d\u65f6\uff0c\u901a\u5e38\u4f7f\u7528\u955c\u50cf\u6765\u6307\u5b9a\u5bb9\u5668\u4e2d\u7684\u8fd0\u884c\u73af\u5883\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5728\u6784\u5efa\u955c\u50cf\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7 Entrypoint \u548c CMD \u4e24\u4e2a\u5b57\u6bb5\u6765\u5b9a\u4e49\u5bb9\u5668\u8fd0\u884c\u65f6\u6267\u884c\u7684\u547d\u4ee4\u548c\u53c2\u6570\u3002\u5982\u679c\u9700\u8981\u66f4\u6539\u5bb9\u5668\u955c\u50cf\u542f\u52a8\u524d\u3001\u542f\u52a8\u540e\u3001\u505c\u6b62\u524d\u7684\u547d\u4ee4\u548c\u53c2\u6570\uff0c\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u5bb9\u5668\u7684\u751f\u547d\u5468\u671f\u4e8b\u4ef6\u547d\u4ee4\u548c\u53c2\u6570\uff0c\u6765\u8986\u76d6\u955c\u50cf\u4e2d\u9ed8\u8ba4\u7684\u547d\u4ee4\u548c\u53c2\u6570\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/lifecycle.html#_2","title":"\u751f\u547d\u5468\u671f\u914d\u7f6e","text":"

                          \u6839\u636e\u4e1a\u52a1\u9700\u8981\u5bf9\u5bb9\u5668\u7684\u542f\u52a8\u547d\u4ee4\u3001\u542f\u52a8\u540e\u547d\u4ee4\u3001\u505c\u6b62\u524d\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u542f\u52a8\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5bb9\u5668\u5c06\u6309\u7167\u542f\u52a8\u547d\u4ee4\u8fdb\u884c\u542f\u52a8\u3002 \u542f\u52a8\u540e\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5bb9\u5668\u542f\u52a8\u540e\u51fa\u53d1\u7684\u547d\u4ee4 \u505c\u6b62\u524d\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u5bb9\u5668\u5728\u6536\u5230\u505c\u6b62\u547d\u4ee4\u540e\u6267\u884c\u7684\u547d\u4ee4\u3002\u786e\u4fdd\u5347\u7ea7\u6216\u5b9e\u4f8b\u5220\u9664\u65f6\u53ef\u63d0\u524d\u5c06\u5b9e\u4f8b\u4e2d\u8fd0\u884c\u7684\u4e1a\u52a1\u6392\u6c34\u3002"},{"location":"end-user/kpanda/workloads/pod-config/lifecycle.html#_3","title":"\u542f\u52a8\u547d\u4ee4","text":"

                          \u6839\u636e\u4e0b\u8868\u5bf9\u542f\u52a8\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8fd0\u884c\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u53ef\u6267\u884c\u7684\u547d\u4ee4\uff0c\u591a\u4e2a\u547d\u4ee4\u4e4b\u95f4\u7528\u7a7a\u683c\u8fdb\u884c\u5206\u5272\uff0c\u5982\u547d\u4ee4\u672c\u8eab\u5e26\u7a7a\u683c\uff0c\u5219\u9700\u8981\u52a0\uff08\u201c\u201d\uff09\u3002\u3010\u542b\u4e49\u3011\u591a\u547d\u4ee4\u65f6\uff0c\u8fd0\u884c\u547d\u4ee4\u5efa\u8bae\u7528/bin/sh\u6216\u5176\u4ed6\u7684shell\uff0c\u5176\u4ed6\u5168\u90e8\u547d\u4ee4\u4f5c\u4e3a\u53c2\u6570\u6765\u4f20\u5165\u3002 /run/server \u8fd0\u884c\u53c2\u6570 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u63a7\u5236\u5bb9\u5668\u8fd0\u884c\u547d\u4ee4\u53c2\u6570\u3002 port=8080"},{"location":"end-user/kpanda/workloads/pod-config/lifecycle.html#_4","title":"\u542f\u52a8\u540e\u547d\u4ee4","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u547d\u4ee4\u884c\u811a\u672c\u548c HTTP \u8bf7\u6c42\u4e24\u79cd\u5904\u7406\u7c7b\u578b\u5bf9\u542f\u52a8\u540e\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u4e0b\u8868\u9009\u62e9\u9002\u5408\u60a8\u7684\u914d\u7f6e\u65b9\u5f0f\u3002

                          \u547d\u4ee4\u884c\u811a\u672c\u914d\u7f6e

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c \u8fd0\u884c\u547d\u4ee4 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u53ef\u6267\u884c\u7684\u547d\u4ee4\uff0c\u591a\u4e2a\u547d\u4ee4\u4e4b\u95f4\u7528\u7a7a\u683c\u8fdb\u884c\u5206\u5272\uff0c\u5982\u547d\u4ee4\u672c\u8eab\u5e26\u7a7a\u683c\uff0c\u5219\u9700\u8981\u52a0\uff08\u201c\u201d\uff09\u3002\u3010\u542b\u4e49\u3011\u591a\u547d\u4ee4\u65f6\uff0c\u8fd0\u884c\u547d\u4ee4\u5efa\u8bae\u7528/bin/sh\u6216\u5176\u4ed6\u7684shell\uff0c\u5176\u4ed6\u5168\u90e8\u547d\u4ee4\u4f5c\u4e3a\u53c2\u6570\u6765\u4f20\u5165\u3002 /run/server \u8fd0\u884c\u53c2\u6570 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8f93\u5165\u63a7\u5236\u5bb9\u5668\u8fd0\u884c\u547d\u4ee4\u53c2\u6570\u3002 port=8080"},{"location":"end-user/kpanda/workloads/pod-config/lifecycle.html#_5","title":"\u505c\u6b62\u524d\u547d\u4ee4","text":"

                          \u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u63d0\u4f9b\u547d\u4ee4\u884c\u811a\u672c\u548c HTTP \u8bf7\u6c42\u4e24\u79cd\u5904\u7406\u7c7b\u578b\u5bf9\u505c\u6b62\u524d\u547d\u4ee4\u8fdb\u884c\u914d\u7f6e\u3002\u60a8\u53ef\u4ee5\u6839\u636e\u4e0b\u8868\u9009\u62e9\u9002\u5408\u60a8\u7684\u914d\u7f6e\u65b9\u5f0f\u3002

                          HTTP \u8bf7\u6c42\u914d\u7f6e

                          \u53c2\u6570 \u8bf4\u660e \u4e3e\u4f8b\u503c URL \u8def\u5f84 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8bf7\u6c42\u7684URL\u8def\u5f84\u3002\u3010\u542b\u4e49\u3011\u591a\u547d\u4ee4\u65f6\uff0c\u8fd0\u884c\u547d\u4ee4\u5efa\u8bae\u7528/bin/sh\u6216\u5176\u4ed6\u7684shell\uff0c\u5176\u4ed6\u5168\u90e8\u547d\u4ee4\u4f5c\u4e3a\u53c2\u6570\u6765\u4f20\u5165\u3002 /run/server \u7aef\u53e3 \u3010\u7c7b\u578b\u3011\u5fc5\u586b\u3010\u542b\u4e49\u3011\u8bf7\u6c42\u7684\u7aef\u53e3\u3002 port=8080 \u8282\u70b9\u5730\u5740 \u3010\u7c7b\u578b\u3011\u9009\u586b\u3010\u542b\u4e49\u3011\u8bf7\u6c42\u7684 IP \u5730\u5740\uff0c\u9ed8\u8ba4\u662f\u5bb9\u5668\u6240\u5728\u7684\u8282\u70b9 IP\u3002"},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html","title":"\u8c03\u5ea6\u7b56\u7565","text":"

                          \u5728 Kubernetes \u96c6\u7fa4\u4e2d\uff0c\u8282\u70b9\u4e5f\u6709\u6807\u7b7e\u3002\u60a8\u53ef\u4ee5\u624b\u52a8\u6dfb\u52a0\u6807\u7b7e\u3002 Kubernetes \u4e5f\u4f1a\u4e3a\u96c6\u7fa4\u4e2d\u6240\u6709\u8282\u70b9\u6dfb\u52a0\u4e00\u4e9b\u6807\u51c6\u7684\u6807\u7b7e\u3002\u53c2\u89c1\u5e38\u7528\u7684\u6807\u7b7e\u3001\u6ce8\u89e3\u548c\u6c61\u70b9\u4ee5\u4e86\u89e3\u5e38\u89c1\u7684\u8282\u70b9\u6807\u7b7e\u3002\u901a\u8fc7\u4e3a\u8282\u70b9\u6dfb\u52a0\u6807\u7b7e\uff0c\u60a8\u53ef\u4ee5\u8ba9 Pod \u8c03\u5ea6\u5230\u7279\u5b9a\u8282\u70b9\u6216\u8282\u70b9\u7ec4\u4e0a\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528\u8fd9\u4e2a\u529f\u80fd\u6765\u786e\u4fdd\u7279\u5b9a\u7684 Pod \u53ea\u80fd\u8fd0\u884c\u5728\u5177\u6709\u4e00\u5b9a\u9694\u79bb\u6027\uff0c\u5b89\u5168\u6027\u6216\u76d1\u7ba1\u5c5e\u6027\u7684\u8282\u70b9\u4e0a\u3002

                          nodeSelector \u662f\u8282\u70b9\u9009\u62e9\u7ea6\u675f\u7684\u6700\u7b80\u5355\u63a8\u8350\u5f62\u5f0f\u3002\u60a8\u53ef\u4ee5\u5c06 nodeSelector \u5b57\u6bb5\u6dfb\u52a0\u5230 Pod \u7684\u89c4\u7ea6\u4e2d\u8bbe\u7f6e\u60a8\u5e0c\u671b\u76ee\u6807\u8282\u70b9\u6240\u5177\u6709\u7684\u8282\u70b9\u6807\u7b7e\u3002Kubernetes \u53ea\u4f1a\u5c06 Pod \u8c03\u5ea6\u5230\u62e5\u6709\u6307\u5b9a\u6bcf\u4e2a\u6807\u7b7e\u7684\u8282\u70b9\u4e0a\u3002 nodeSelector \u63d0\u4f9b\u4e86\u4e00\u79cd\u6700\u7b80\u5355\u7684\u65b9\u6cd5\u6765\u5c06 Pod \u7ea6\u675f\u5230\u5177\u6709\u7279\u5b9a\u6807\u7b7e\u7684\u8282\u70b9\u4e0a\u3002\u4eb2\u548c\u6027\u548c\u53cd\u4eb2\u548c\u6027\u6269\u5c55\u4e86\u60a8\u53ef\u4ee5\u5b9a\u4e49\u7684\u7ea6\u675f\u7c7b\u578b\u3002\u4f7f\u7528\u4eb2\u548c\u6027\u4e0e\u53cd\u4eb2\u548c\u6027\u7684\u4e00\u4e9b\u597d\u5904\u6709\uff1a

                          • \u4eb2\u548c\u6027\u3001\u53cd\u4eb2\u548c\u6027\u8bed\u8a00\u7684\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002 nodeSelector \u53ea\u80fd\u9009\u62e9\u62e5\u6709\u6240\u6709\u6307\u5b9a\u6807\u7b7e\u7684\u8282\u70b9\u3002\u4eb2\u548c\u6027\u3001\u53cd\u4eb2\u548c\u6027\u4e3a\u60a8\u63d0\u4f9b\u5bf9\u9009\u62e9\u903b\u8f91\u7684\u66f4\u5f3a\u63a7\u5236\u80fd\u529b\u3002

                          • \u60a8\u53ef\u4ee5\u6807\u660e\u67d0\u89c4\u5219\u662f\u201c\u8f6f\u9700\u6c42\u201d\u6216\u8005\u201c\u504f\u597d\u201d\uff0c\u8fd9\u6837\u8c03\u5ea6\u5668\u5728\u65e0\u6cd5\u627e\u5230\u5339\u914d\u8282\u70b9\u65f6\uff0c\u4f1a\u5ffd\u7565\u4eb2\u548c\u6027/\u53cd\u4eb2\u548c\u6027\u89c4\u5219\uff0c\u786e\u4fdd Pod \u8c03\u5ea6\u6210\u529f\u3002

                          • \u60a8\u53ef\u4ee5\u4f7f\u7528\u8282\u70b9\u4e0a\uff08\u6216\u5176\u4ed6\u62d3\u6251\u57df\u4e2d\uff09\u8fd0\u884c\u7684\u5176\u4ed6 Pod \u7684\u6807\u7b7e\u6765\u5b9e\u65bd\u8c03\u5ea6\u7ea6\u675f\uff0c\u800c\u4e0d\u662f\u53ea\u80fd\u4f7f\u7528\u8282\u70b9\u672c\u8eab\u7684\u6807\u7b7e\u3002\u8fd9\u4e2a\u80fd\u529b\u8ba9\u60a8\u80fd\u591f\u5b9a\u4e49\u89c4\u5219\u5141\u8bb8\u54ea\u4e9b Pod \u53ef\u4ee5\u88ab\u653e\u7f6e\u5728\u4e00\u8d77\u3002

                          \u60a8\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u4eb2\u548c\uff08affinity\uff09\u4e0e\u53cd\u4eb2\u548c\uff08anti-affinity\uff09\u6765\u9009\u62e9 Pod \u8981\u90e8\u7f72\u7684\u8282\u70b9\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_2","title":"\u5bb9\u5fcd\u65f6\u95f4","text":"

                          \u5f53\u5de5\u4f5c\u8d1f\u8f7d\u5b9e\u4f8b\u6240\u5728\u7684\u8282\u70b9\u4e0d\u53ef\u7528\u65f6\uff0c\u7cfb\u7edf\u5c06\u5b9e\u4f8b\u91cd\u65b0\u8c03\u5ea6\u5230\u5176\u5b83\u53ef\u7528\u8282\u70b9\u7684\u65f6\u95f4\u7a97\u3002\u9ed8\u8ba4\u4e3a 300 \u79d2\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#nodeaffinity","title":"\u8282\u70b9\u4eb2\u548c\u6027\uff08nodeAffinity\uff09","text":"

                          \u8282\u70b9\u4eb2\u548c\u6027\u6982\u5ff5\u4e0a\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u5b83\u4f7f\u60a8\u53ef\u4ee5\u6839\u636e\u8282\u70b9\u4e0a\u7684\u6807\u7b7e\u6765\u7ea6\u675f Pod \u53ef\u4ee5\u8c03\u5ea6\u5230\u54ea\u4e9b\u8282\u70b9\u4e0a\u3002 \u8282\u70b9\u4eb2\u548c\u6027\u6709\u4e24\u79cd\uff1a

                          • \u5fc5\u987b\u6ee1\u8db3\uff1a\uff08 requiredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002\u60a8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

                          • \u5c3d\u91cf\u6ee1\u8db3\uff1a\uff08 preferredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002\u60a8\u8fd8\u53ef\u4e3a\u8f6f\u7ea6\u675f\u89c4\u5219\u8bbe\u5b9a\u6743\u91cd\uff0c\u5177\u4f53\u8c03\u5ea6\u65f6\uff0c\u82e5\u5b58\u5728\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u8282\u70b9\uff0c\u6743\u91cd\u6700\u5927\u7684\u8282\u70b9\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u540c\u65f6\u60a8\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_3","title":"\u6807\u7b7e\u540d","text":"

                          \u5bf9\u5e94\u8282\u70b9\u7684\u6807\u7b7e\uff0c\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u7684\u6807\u7b7e\u4e5f\u53ef\u4ee5\u7528\u6237\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_4","title":"\u64cd\u4f5c\u7b26","text":"
                          • In\uff1a\u6807\u7b7e\u503c\u9700\u8981\u5728 values \u7684\u5217\u8868\u4e2d
                          • NotIn\uff1a\u6807\u7b7e\u7684\u503c\u4e0d\u5728\u67d0\u4e2a\u5217\u8868\u4e2d
                          • Exists\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
                          • DoesNotExist\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u4e0d\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
                          • Gt\uff1a\u6807\u7b7e\u7684\u503c\u5927\u4e8e\u67d0\u4e2a\u503c\uff08\u5b57\u7b26\u4e32\u6bd4\u8f83\uff09
                          • Lt\uff1a\u6807\u7b7e\u7684\u503c\u5c0f\u4e8e\u67d0\u4e2a\u503c\uff08\u5b57\u7b26\u4e32\u6bd4\u8f83\uff09
                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_5","title":"\u6743\u91cd","text":"

                          \u4ec5\u652f\u6301\u5728\u201c\u5c3d\u91cf\u6ee1\u8db3\u201d\u7b56\u7565\u4e2d\u6dfb\u52a0\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u8c03\u5ea6\u7684\u4f18\u5148\u7ea7\uff0c\u6743\u91cd\u5927\u7684\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u53d6\u503c\u8303\u56f4\u662f 1 \u5230 100\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_6","title":"\u5de5\u4f5c\u8d1f\u8f7d\u4eb2\u548c\u6027","text":"

                          \u4e0e\u8282\u70b9\u4eb2\u548c\u6027\u7c7b\u4f3c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u7684\u4eb2\u548c\u6027\u4e5f\u6709\u4e24\u79cd\u7c7b\u578b\uff1a

                          • \u5fc5\u987b\u6ee1\u8db3\uff1a\uff08 requiredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002\u60a8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002
                          • \u5c3d\u91cf\u6ee1\u8db3\uff1a\uff08 preferredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002\u60a8\u8fd8\u53ef\u4e3a\u8f6f\u7ea6\u675f\u89c4\u5219\u8bbe\u5b9a\u6743\u91cd\uff0c\u5177\u4f53\u8c03\u5ea6\u65f6\uff0c\u82e5\u5b58\u5728\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u8282\u70b9\uff0c\u6743\u91cd\u6700\u5927\u7684\u8282\u70b9\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u540c\u65f6\u60a8\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

                          \u5de5\u4f5c\u8d1f\u8f7d\u7684\u4eb2\u548c\u6027\u4e3b\u8981\u7528\u6765\u51b3\u5b9a\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u53ef\u4ee5\u548c\u54ea\u4e9b Pod\u90e8 \u7f72\u5728\u540c\u4e00\u62d3\u6251\u57df\u3002\u4f8b\u5982\uff0c\u5bf9\u4e8e\u76f8\u4e92\u901a\u4fe1\u7684\u670d\u52a1\uff0c\u53ef\u901a\u8fc7\u5e94\u7528\u4eb2\u548c\u6027\u8c03\u5ea6\uff0c\u5c06\u5176\u90e8\u7f72\u5230\u540c\u4e00\u62d3\u6251\u57df\uff08\u5982\u540c\u4e00\u53ef\u7528\u533a\uff09\u4e2d\uff0c\u51cf\u5c11\u5b83\u4eec\u4e4b\u95f4\u7684\u7f51\u7edc\u5ef6\u8fdf\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_7","title":"\u6807\u7b7e\u540d","text":"

                          \u5bf9\u5e94\u8282\u70b9\u7684\u6807\u7b7e\uff0c\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u7684\u6807\u7b7e\u4e5f\u53ef\u4ee5\u7528\u6237\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_8","title":"\u547d\u540d\u7a7a\u95f4","text":"

                          \u6307\u5b9a\u8c03\u5ea6\u7b56\u7565\u751f\u6548\u7684\u547d\u540d\u7a7a\u95f4\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_9","title":"\u64cd\u4f5c\u7b26","text":"
                          • In\uff1a\u6807\u7b7e\u503c\u9700\u8981\u5728 values \u7684\u5217\u8868\u4e2d
                          • NotIn\uff1a\u6807\u7b7e\u7684\u503c\u4e0d\u5728\u67d0\u4e2a\u5217\u8868\u4e2d
                          • Exists\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
                          • DoesNotExist\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u4e0d\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_10","title":"\u62d3\u6251\u57df","text":"

                          \u6307\u5b9a\u8c03\u5ea6\u65f6\u7684\u5f71\u54cd\u8303\u56f4\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6307\u5b9a\u4e3a kubernetes.io/Clustername \u8868\u793a\u4ee5 Node \u8282\u70b9\u4e3a\u533a\u5206\u8303\u56f4\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_11","title":"\u5de5\u4f5c\u8d1f\u8f7d\u53cd\u4eb2\u548c\u6027","text":"

                          \u4e0e\u8282\u70b9\u4eb2\u548c\u6027\u7c7b\u4f3c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u7684\u53cd\u4eb2\u548c\u6027\u4e5f\u6709\u4e24\u79cd\u7c7b\u578b\uff1a

                          • \u5fc5\u987b\u6ee1\u8db3\uff1a\uff08 requiredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u53ea\u6709\u5728\u89c4\u5219\u88ab\u6ee1\u8db3\u7684\u65f6\u5019\u624d\u80fd\u6267\u884c\u8c03\u5ea6\u3002\u6b64\u529f\u80fd\u7c7b\u4f3c\u4e8e nodeSelector \uff0c \u4f46\u5176\u8bed\u6cd5\u8868\u8fbe\u80fd\u529b\u66f4\u5f3a\u3002\u60a8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002
                          • \u5c3d\u91cf\u6ee1\u8db3\uff1a\uff08 preferredDuringSchedulingIgnoredDuringExecution \uff09 \u8c03\u5ea6\u5668\u4f1a\u5c1d\u8bd5\u5bfb\u627e\u6ee1\u8db3\u5bf9\u5e94\u89c4\u5219\u7684\u8282\u70b9\u3002\u5982\u679c\u627e\u4e0d\u5230\u5339\u914d\u7684\u8282\u70b9\uff0c\u8c03\u5ea6\u5668\u4ecd\u7136\u4f1a\u8c03\u5ea6\u8be5 Pod\u3002\u60a8\u8fd8\u53ef\u4e3a\u8f6f\u7ea6\u675f\u89c4\u5219\u8bbe\u5b9a\u6743\u91cd\uff0c\u5177\u4f53\u8c03\u5ea6\u65f6\uff0c\u82e5\u5b58\u5728\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u8282\u70b9\uff0c\u6743\u91cd\u6700\u5927\u7684\u8282\u70b9\u4f1a\u88ab\u4f18\u5148\u8c03\u5ea6\u3002\u540c\u65f6\u60a8\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u591a\u6761\u786c\u7ea6\u675f\u89c4\u5219\uff0c\u4f46\u53ea\u9700\u6ee1\u8db3\u5176\u4e2d\u4e00\u6761\u3002

                          \u5de5\u4f5c\u8d1f\u8f7d\u7684\u53cd\u4eb2\u548c\u6027\u4e3b\u8981\u7528\u6765\u51b3\u5b9a\u5de5\u4f5c\u8d1f\u8f7d\u7684 Pod \u4e0d\u53ef\u4ee5\u548c\u54ea\u4e9b Pod \u90e8\u7f72\u5728\u540c\u4e00\u62d3\u6251\u57df\u3002\u4f8b\u5982\uff0c\u5c06\u4e00\u4e2a\u8d1f\u8f7d\u7684\u76f8\u540c Pod \u5206\u6563\u90e8\u7f72\u5230\u4e0d\u540c\u7684\u62d3\u6251\u57df\uff08\u4f8b\u5982\u4e0d\u540c\u4e3b\u673a\uff09\u4e2d\uff0c\u63d0\u9ad8\u8d1f\u8f7d\u672c\u8eab\u7684\u7a33\u5b9a\u6027\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_12","title":"\u6807\u7b7e\u540d","text":"

                          \u5bf9\u5e94\u8282\u70b9\u7684\u6807\u7b7e\uff0c\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u7684\u6807\u7b7e\u4e5f\u53ef\u4ee5\u7528\u6237\u81ea\u5b9a\u4e49\u6807\u7b7e\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_13","title":"\u547d\u540d\u7a7a\u95f4","text":"

                          \u6307\u5b9a\u8c03\u5ea6\u7b56\u7565\u751f\u6548\u7684\u547d\u540d\u7a7a\u95f4\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_14","title":"\u64cd\u4f5c\u7b26","text":"
                          • In\uff1a\u6807\u7b7e\u503c\u9700\u8981\u5728 values \u7684\u5217\u8868\u4e2d
                          • NotIn\uff1a\u6807\u7b7e\u7684\u503c\u4e0d\u5728\u67d0\u4e2a\u5217\u8868\u4e2d
                          • Exists\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
                          • DoesNotExist\uff1a\u5224\u65ad\u67d0\u4e2a\u6807\u7b7e\u662f\u4e0d\u5b58\u5728\uff0c\u65e0\u9700\u8bbe\u7f6e\u6807\u7b7e\u503c
                          "},{"location":"end-user/kpanda/workloads/pod-config/scheduling-policy.html#_15","title":"\u62d3\u6251\u57df","text":"

                          \u6307\u5b9a\u8c03\u5ea6\u65f6\u7684\u5f71\u54cd\u8303\u56f4\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6307\u5b9a\u4e3a kubernetes.io/Clustername \u8868\u793a\u4ee5 Node \u8282\u70b9\u4e3a\u533a\u5206\u8303\u56f4\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/workload-status.html","title":"\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001","text":"

                          \u5de5\u4f5c\u8d1f\u8f7d\u662f\u8fd0\u884c\u5728 Kubernetes \u4e0a\u7684\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5728 Kubernetes \u4e2d\uff0c\u65e0\u8bba\u60a8\u7684\u5e94\u7528\u7a0b\u5e8f\u662f\u7531\u5355\u4e2a\u540c\u4e00\u7ec4\u4ef6\u6216\u662f\u7531\u591a\u4e2a\u4e0d\u540c\u7684\u7ec4\u4ef6\u6784\u6210\uff0c\u90fd\u53ef\u4ee5\u4f7f\u7528\u4e00\u7ec4 Pod \u6765\u8fd0\u884c\u5b83\u3002Kubernetes \u63d0\u4f9b\u4e86\u4e94\u79cd\u5185\u7f6e\u7684\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u6765\u7ba1\u7406 Pod\uff1a

                          • \u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d
                          • \u6709\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d
                          • \u5b88\u62a4\u8fdb\u7a0b
                          • \u4efb\u52a1
                          • \u5b9a\u65f6\u4efb\u52a1

                          \u60a8\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8bbe\u7f6e\u81ea\u5b9a\u4e49\u8d44\u6e90 CRD \u6765\u5b9e\u73b0\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u7684\u6269\u5c55\u3002\u5728\u7b2c\u4e94\u4ee3\u5bb9\u5668\u7ba1\u7406\u4e2d\uff0c\u652f\u6301\u5bf9\u5de5\u4f5c\u8d1f\u8f7d\u8fdb\u884c\u521b\u5efa\u3001\u66f4\u65b0\u3001\u6269\u5bb9\u3001\u76d1\u63a7\u3001\u65e5\u5fd7\u3001\u5220\u9664\u3001\u7248\u672c\u7ba1\u7406\u7b49\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/workload-status.html#pod","title":"Pod \u72b6\u6001","text":"

                          Pod \u662f Kuberneters \u4e2d\u521b\u5efa\u548c\u7ba1\u7406\u7684\u3001\u6700\u5c0f\u7684\u8ba1\u7b97\u5355\u5143\uff0c\u5373\u4e00\u7ec4\u5bb9\u5668\u7684\u96c6\u5408\u3002\u8fd9\u4e9b\u5bb9\u5668\u5171\u4eab\u5b58\u50a8\u3001\u7f51\u7edc\u4ee5\u53ca\u7ba1\u7406\u63a7\u5236\u5bb9\u5668\u8fd0\u884c\u65b9\u5f0f\u7684\u7b56\u7565\u3002 Pod \u901a\u5e38\u4e0d\u7531\u7528\u6237\u76f4\u63a5\u521b\u5efa\uff0c\u800c\u662f\u901a\u8fc7\u5de5\u4f5c\u8d1f\u8f7d\u8d44\u6e90\u6765\u521b\u5efa\u3002 Pod \u9075\u5faa\u4e00\u4e2a\u9884\u5b9a\u4e49\u7684\u751f\u547d\u5468\u671f\uff0c\u8d77\u59cb\u4e8e Pending \u9636\u6bb5\uff0c\u5982\u679c\u81f3\u5c11\u5176\u4e2d\u6709\u4e00\u4e2a\u4e3b\u8981\u5bb9\u5668\u6b63\u5e38\u542f\u52a8\uff0c\u5219\u8fdb\u5165 Running \uff0c\u4e4b\u540e\u53d6\u51b3\u4e8e Pod \u4e2d\u662f\u5426\u6709\u5bb9\u5668\u4ee5\u5931\u8d25\u72b6\u6001\u7ed3\u675f\u800c\u8fdb\u5165 Succeeded \u6216\u8005 Failed \u9636\u6bb5\u3002

                          "},{"location":"end-user/kpanda/workloads/pod-config/workload-status.html#_2","title":"\u5de5\u4f5c\u8d1f\u8f7d\u72b6\u6001","text":"

                          \u7b2c\u4e94\u4ee3\u5bb9\u5668\u7ba1\u7406\u6a21\u5757\u4f9d\u636e Pod \u7684\u72b6\u6001\u3001\u526f\u672c\u6570\u7b49\u56e0\u7d20\uff0c\u8bbe\u8ba1\u4e86\u4e00\u79cd\u5185\u7f6e\u7684\u5de5\u4f5c\u8d1f\u8f7d\u751f\u547d\u5468\u671f\u7684\u72b6\u6001\u96c6\uff0c\u4ee5\u8ba9\u7528\u6237\u80fd\u591f\u66f4\u52a0\u771f\u5b9e\u7684\u611f\u77e5\u5de5\u4f5c\u8d1f\u8f7d\u8fd0\u884c\u60c5\u51b5\u3002 \u7531\u4e8e\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\u7c7b\u578b\uff08\u6bd4\u5982\u65e0\u72b6\u6001\u5de5\u4f5c\u8d1f\u8f7d\u548c\u4efb\u52a1\uff09\u5bf9 Pod \u7684\u7ba1\u7406\u673a\u5236\u4e0d\u4e00\u81f4\uff0c\u56e0\u6b64\uff0c\u4e0d\u540c\u7684\u5de5\u4f5c\u8d1f\u8f7d\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4f1a\u5448\u73b0\u4e0d\u540c\u7684\u751f\u547d\u5468\u671f\u72b6\u6001\uff0c\u5177\u4f53\u5982\u4e0b\u8868\uff1a

                          "},{"location":"end-user/kpanda/workloads/pod-config/workload-status.html#_3","title":"\u65e0\u72b6\u6001\u8d1f\u8f7d\u3001\u6709\u72b6\u6001\u8d1f\u8f7d\u3001\u5b88\u62a4\u8fdb\u7a0b\u72b6\u6001","text":"\u72b6\u6001 \u63cf\u8ff0 \u7b49\u5f85\u4e2d 1. \u5de5\u4f5c\u8d1f\u8f7d\u521b\u5efa\u6b63\u5728\u8fdb\u884c\u4e2d\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u30022. \u89e6\u53d1\u5347\u7ea7\u6216\u8005\u56de\u6eda\u52a8\u4f5c\u540e\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u30023. \u89e6\u53d1\u6682\u505c/\u6269\u7f29\u5bb9\u7b49\u64cd\u4f5c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u5728\u6b64\u72b6\u6001\u3002 \u8fd0\u884c\u4e2d \u8d1f\u8f7d\u4e0b\u7684\u6240\u6709\u5b9e\u4f8b\u90fd\u5728\u8fd0\u884c\u4e2d\u4e14\u526f\u672c\u6570\u4e0e\u7528\u6237\u9884\u5b9a\u4e49\u7684\u6570\u91cf\u4e00\u81f4\u65f6\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5220\u9664\u4e2d \u6267\u884c\u5220\u9664\u64cd\u4f5c\u65f6\uff0c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\uff0c\u76f4\u5230\u5220\u9664\u5b8c\u6210\u3002 \u5f02\u5e38 \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u65e0\u6cd5\u53d6\u5f97\u5de5\u4f5c\u8d1f\u8f7d\u7684\u72b6\u6001\u3002\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u56e0\u4e3a\u4e0e Pod \u6240\u5728\u4e3b\u673a\u901a\u4fe1\u5931\u8d25\u3002 \u672a\u5c31\u7eea \u5bb9\u5668\u5904\u4e8e\u5f02\u5e38\uff0cpending \u72b6\u6001\u65f6\uff0c\u56e0\u672a\u77e5\u9519\u8bef\u5bfc\u81f4\u8d1f\u8f7d\u65e0\u6cd5\u542f\u52a8\u65f6\u663e\u793a\u6b64\u72b6\u6001"},{"location":"end-user/kpanda/workloads/pod-config/workload-status.html#_4","title":"\u4efb\u52a1\u72b6\u6001","text":"\u72b6\u6001 \u63cf\u8ff0 \u7b49\u5f85\u4e2d \u4efb\u52a1\u521b\u5efa\u6b63\u5728\u8fdb\u884c\u4e2d\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u6267\u884c\u4e2d \u4efb\u52a1\u6b63\u5728\u6267\u884c\u4e2d\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u6267\u884c\u5b8c\u6210 \u4efb\u52a1\u6267\u884c\u5b8c\u6210\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5220\u9664\u4e2d \u89e6\u53d1\u5220\u9664\u64cd\u4f5c\uff0c\u5de5\u4f5c\u8d1f\u8f7d\u5904\u5728\u6b64\u72b6\u6001\u3002 \u5f02\u5e38 \u56e0\u4e3a\u67d0\u4e9b\u539f\u56e0\u65e0\u6cd5\u53d6\u5f97 Pod \u7684\u72b6\u6001\u3002\u8fd9\u79cd\u60c5\u51b5\u901a\u5e38\u662f\u56e0\u4e3a\u4e0e Pod \u6240\u5728\u4e3b\u673a\u901a\u4fe1\u5931\u8d25\u3002"},{"location":"end-user/kpanda/workloads/pod-config/workload-status.html#_5","title":"\u5b9a\u65f6\u4efb\u52a1\u72b6\u6001","text":"\u72b6\u6001 \u63cf\u8ff0 \u7b49\u5f85\u4e2d \u5b9a\u65f6\u4efb\u52a1\u521b\u5efa\u6b63\u5728\u8fdb\u884c\u4e2d\uff0c\u5b9a\u65f6\u4efb\u52a1\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5df2\u542f\u52a8 \u521b\u5efa\u5b9a\u65f6\u4efb\u52a1\u6210\u529f\u540e\uff0c\u6b63\u5e38\u8fd0\u884c\u6216\u5c06\u5df2\u6682\u505c\u7684\u4efb\u52a1\u542f\u52a8\u65f6\u5b9a\u65f6\u4efb\u52a1\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5df2\u505c\u6b62 \u6267\u884c\u505c\u6b62\u4efb\u52a1\u64cd\u4f5c\u65f6\uff0c\u5b9a\u65f6\u4efb\u52a1\u5904\u4e8e\u6b64\u72b6\u6001\u3002 \u5220\u9664\u4e2d \u89e6\u53d1\u5220\u9664\u64cd\u4f5c\uff0c\u5b9a\u65f6\u4efb\u52a1\u5904\u5728\u6b64\u72b6\u6001\u3002

                          \u5f53\u5de5\u4f5c\u8d1f\u8f7d\u5904\u4e8e\u5f02\u5e38\u6216\u672a\u5c31\u7eea\u72b6\u6001\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5c06\u9f20\u6807\u79fb\u52a8\u5230\u8d1f\u8f7d\u7684\u72b6\u6001\u503c\u4e0a\uff0c\u7cfb\u7edf\u5c06\u901a\u8fc7\u63d0\u793a\u6846\u5c55\u793a\u66f4\u52a0\u8be6\u7ec6\u7684\u9519\u8bef\u4fe1\u606f\u3002\u60a8\u4e5f\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b\u65e5\u5fd7\u6216\u4e8b\u4ef6\u6765\u83b7\u53d6\u5de5\u4f5c\u8d1f\u8f7d\u7684\u76f8\u5173\u8fd0\u884c\u4fe1\u606f\u3002

                          "},{"location":"end-user/register/index.html","title":"\u7528\u6237\u6ce8\u518c","text":"

                          \u65b0\u7528\u6237\u9996\u6b21\u4f7f\u7528 AI \u7b97\u529b\u5e73\u53f0\u9700\u8981\u8fdb\u884c\u6ce8\u518c\u3002

                          "},{"location":"end-user/register/index.html#_2","title":"\u524d\u7f6e\u6761\u4ef6","text":"
                          • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
                          • \u5df2\u5f00\u542f\u90ae\u7bb1\u6ce8\u518c\u529f\u80fd
                          • \u6709\u4e00\u4e2a\u53ef\u7528\u7684\u90ae\u7bb1
                          "},{"location":"end-user/register/index.html#_3","title":"\u90ae\u7bb1\u6ce8\u518c\u6b65\u9aa4","text":"
                          1. \u6253\u5f00 AI \u7b97\u529b\u5e73\u53f0\u9996\u9875 https://ai.isuanova.com/\uff0c\u70b9\u51fb \u6ce8\u518c

                          2. \u952e\u5165\u7528\u6237\u540d\u3001\u5bc6\u7801\u3001\u90ae\u7bb1\u540e\u70b9\u51fb \u6ce8\u518c

                          3. \u7cfb\u7edf\u63d0\u793a\u53d1\u9001\u4e86\u4e00\u5c01\u90ae\u4ef6\u5230\u60a8\u7684\u90ae\u7bb1\u3002

                          4. \u767b\u5f55\u81ea\u5df1\u7684\u90ae\u7bb1\uff0c\u627e\u5230\u90ae\u4ef6\uff0c\u70b9\u51fb\u94fe\u63a5\u3002

                          5. \u606d\u559c\uff0c\u60a8\u6210\u529f\u8fdb\u5165\u4e86 AI \u7b97\u529b\u5e73\u53f0\uff0c\u73b0\u5728\u53ef\u4ee5\u5f00\u59cb\u60a8\u7684 AI \u4e4b\u65c5\u4e86\u3002

                          "},{"location":"end-user/share/notebook.html","title":"\u4f7f\u7528 Notebook","text":"

                          Notebook \u901a\u5e38\u6307\u7684\u662f Jupyter Notebook \u6216\u7c7b\u4f3c\u7684\u4ea4\u4e92\u5f0f\u8ba1\u7b97\u73af\u5883\u3002 \u8fd9\u662f\u4e00\u79cd\u975e\u5e38\u6d41\u884c\u7684\u5de5\u5177\uff0c\u5e7f\u6cdb\u7528\u4e8e\u6570\u636e\u79d1\u5b66\u3001\u673a\u5668\u5b66\u4e60\u548c\u6df1\u5ea6\u5b66\u4e60\u7b49\u9886\u57df\u3002 \u672c\u9875\u8bf4\u660e\u5982\u4f55\u5728\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0\u4e2d\u4f7f\u7528 Notebook\u3002

                          "},{"location":"end-user/share/notebook.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
                          • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
                          • \u7528\u6237\u5df2\u6210\u529f\u6ce8\u518c
                          • \u7ba1\u7406\u5458\u4e3a\u7528\u6237\u5206\u914d\u4e86\u5de5\u4f5c\u7a7a\u95f4
                          • \u5df2\u51c6\u5907\u597d\u6570\u636e\u96c6\uff08\u4ee3\u7801\u3001\u6570\u636e\u7b49\uff09
                          "},{"location":"end-user/share/notebook.html#notebook_1","title":"\u521b\u5efa\u548c\u4f7f\u7528 Notebook \u5b9e\u4f8b","text":"
                          1. \u4ee5 \u7ba1\u7406\u5458\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
                          2. \u5bfc\u822a\u81f3 AI Lab -> \u8fd0\u7ef4\u7ba1\u7406 -> \u961f\u5217\u7ba1\u7406 \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae

                          3. \u952e\u5165\u540d\u79f0\uff0c\u9009\u62e9\u96c6\u7fa4\u3001\u5de5\u4f5c\u7a7a\u95f4\u548c\u914d\u989d\u540e\uff0c\u70b9\u51fb \u786e\u5b9a

                          4. \u4ee5 \u7528\u6237\u8eab\u4efd \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5bfc\u822a\u81f3 AI Lab -> Notebook \uff0c\u70b9\u51fb\u53f3\u4fa7\u7684 \u521b\u5efa \u6309\u94ae

                          5. \u914d\u7f6e\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a

                            \u57fa\u672c\u4fe1\u606f\u8d44\u6e90\u914d\u7f6e\u9ad8\u7ea7\u914d\u7f6e

                            \u952e\u5165\u540d\u79f0\uff0c\u9009\u62e9\u96c6\u7fa4\u3001\u547d\u540d\u7a7a\u95f4\uff0c\u9009\u62e9\u521a\u521b\u5efa\u7684\u961f\u5217\uff0c\u70b9\u51fb \u4e00\u952e\u521d\u59cb\u5316

                            \u9009\u62e9 Notebook \u7c7b\u578b\uff0c\u914d\u7f6e\u5185\u5b58\u3001CPU\uff0c\u5f00\u542f GPU\uff0c\u521b\u5efa\u548c\u914d\u7f6e PVC\uff1a

                            \u5f00\u542f SSH \u5916\u7f51\u8bbf\u95ee\uff1a

                          6. \u81ea\u52a8\u8df3\u8f6c\u5230 Notebook \u5b9e\u4f8b\u5217\u8868\uff0c\u70b9\u51fb\u5b9e\u4f8b\u540d\u79f0

                          7. \u8fdb\u5165 Notebook \u5b9e\u4f8b\u8be6\u60c5\u9875\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \u6253\u5f00 \u6309\u94ae

                          8. \u8fdb\u5165\u4e86 Notebook \u5f00\u53d1\u73af\u5883\uff0c\u6bd4\u5982\u5728 /home/jovyan \u76ee\u5f55\u6302\u8f7d\u4e86\u6301\u4e45\u5377\uff0c\u53ef\u4ee5\u901a\u8fc7 git \u514b\u9686\u4ee3\u7801\uff0c\u901a\u8fc7 SSH \u8fde\u63a5\u540e\u4e0a\u4f20\u6570\u636e\u7b49\u3002

                          "},{"location":"end-user/share/notebook.html#ssh-notebook","title":"\u901a\u8fc7 SSH \u8bbf\u95ee Notebook \u5b9e\u4f8b","text":"
                          1. \u5728\u81ea\u5df1\u7684\u7535\u8111\u4e0a\u751f\u6210 SSH \u5bc6\u94a5\u5bf9

                            \u5728\u81ea\u5df1\u7535\u8111\u4e0a\u6253\u5f00\u547d\u4ee4\u884c\uff0c\u6bd4\u5982\u5728 Windows \u4e0a\u6253\u5f00 git bash\uff0c\u8f93\u5165 ssh-keygen.exe -t rsa\uff0c\u7136\u540e\u4e00\u8def\u56de\u8f66\u3002

                          2. \u901a\u8fc7 cat ~/.ssh/id_rsa.pub \u7b49\u547d\u4ee4\u67e5\u770b\u5e76\u590d\u5236\u516c\u94a5

                          3. \u4ee5\u7528\u6237\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5728\u53f3\u4e0a\u89d2\u70b9\u51fb \u4e2a\u4eba\u4e2d\u5fc3 -> SSH \u516c\u94a5 -> \u5bfc\u5165 SSH \u516c\u94a5

                          4. \u8fdb\u5165 Notebook \u5b9e\u4f8b\u7684\u8be6\u60c5\u9875\uff0c\u590d\u5236 SSH \u7684\u94fe\u63a5

                          5. \u5728\u5ba2\u6237\u7aef\u4f7f\u7528 SSH \u8bbf\u95ee Notebook \u5b9e\u4f8b

                          \u4e0b\u4e00\u6b65\uff1a\u521b\u5efa\u8bad\u7ec3\u4efb\u52a1

                          "},{"location":"end-user/share/workload.html","title":"\u521b\u5efa AI \u8d1f\u8f7d\u4f7f\u7528 GPU \u8d44\u6e90","text":"

                          \u7ba1\u7406\u5458\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u5206\u914d\u8d44\u6e90\u914d\u989d\u540e\uff0c\u7528\u6237\u5c31\u53ef\u4ee5\u521b\u5efa AI \u5de5\u4f5c\u8d1f\u8f7d\u6765\u4f7f\u7528 GPU \u7b97\u529b\u8d44\u6e90\u3002

                          "},{"location":"end-user/share/workload.html#_1","title":"\u524d\u7f6e\u6761\u4ef6","text":"
                          • \u5df2\u5b89\u88c5 AI \u7b97\u529b\u5e73\u53f0
                          • \u7528\u6237\u5df2\u6210\u529f\u6ce8\u518c
                          • \u7ba1\u7406\u5458\u4e3a\u7528\u6237\u5206\u914d\u4e86\u5de5\u4f5c\u7a7a\u95f4
                          • \u7ba1\u7406\u5458\u4e3a\u5de5\u4f5c\u7a7a\u95f4\u8bbe\u7f6e\u4e86\u8d44\u6e90\u914d\u989d
                          • \u7ba1\u7406\u5458\u5df2\u7ecf\u4e3a\u7528\u6237\u5206\u914d\u4e86\u4e00\u4e2a\u96c6\u7fa4
                          "},{"location":"end-user/share/workload.html#ai","title":"\u521b\u5efa AI \u8d1f\u8f7d\u6b65\u9aa4","text":"
                          1. \u4ee5\u7528\u6237\u8eab\u4efd\u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0
                          2. \u5bfc\u822a\u81f3 \u5bb9\u5668\u7ba1\u7406 \uff0c\u9009\u62e9\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\uff0c\u70b9\u51fb \u5de5\u4f5c\u8d1f\u8f7d -> \u65e0\u72b6\u6001\u8d1f\u8f7d \uff0c \u70b9\u51fb\u53f3\u4fa7\u7684 \u955c\u50cf\u521b\u5efa \u6309\u94ae

                          3. \u914d\u7f6e\u5404\u9879\u53c2\u6570\u540e\u70b9\u51fb \u786e\u5b9a

                            \u57fa\u672c\u4fe1\u606f\u5bb9\u5668\u914d\u7f6e\u5176\u4ed6

                            \u9009\u62e9\u81ea\u5df1\u7684\u547d\u540d\u7a7a\u95f4\u3002

                            \u8bbe\u7f6e\u955c\u50cf\uff0c\u914d\u7f6e CPU\u3001\u5185\u5b58\u3001GPU \u7b49\u8d44\u6e90\uff0c\u8bbe\u7f6e\u542f\u52a8\u547d\u4ee4\u3002

                            \u670d\u52a1\u914d\u7f6e\u548c\u9ad8\u7ea7\u914d\u7f6e\u53ef\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u914d\u7f6e\u3002

                          4. \u81ea\u52a8\u8fd4\u56de\u65e0\u72b6\u6001\u8d1f\u8f7d\u5217\u8868\uff0c\u70b9\u51fb\u8d1f\u8f7d\u540d\u79f0

                          5. \u8fdb\u5165\u8be6\u60c5\u9875\uff0c\u53ef\u4ee5\u770b\u5230 GPU \u914d\u989d

                          6. \u4f60\u8fd8\u53ef\u4ee5\u8fdb\u5165\u63a7\u5236\u53f0\uff0c\u8fd0\u884c mx-smi \u547d\u4ee4\u67e5\u770b GPU \u8d44\u6e90

                          \u4e0b\u4e00\u6b65\uff1a\u4f7f\u7528 Notebook

                          "},{"location":"openapi/index.html","title":"OpenAPI \u6587\u6863","text":"

                          \u8fd9\u662f\u9762\u5411\u5f00\u53d1\u8005\u7684\u4e00\u4e9b OpenAPI \u6587\u6863\u3002

                          • \u4e91\u4e3b\u673a OpenAPI \u6587\u6863
                          • AI Lab OpenAPI \u6587\u6863
                          • \u5bb9\u5668\u7ba1\u7406 OpenAPI \u6587\u6863
                          • \u53ef\u89c2\u6d4b\u6027 OpenAPI \u6587\u6863
                          • \u5168\u5c40\u7ba1\u7406 OpenAPI \u6587\u6863
                          "},{"location":"openapi/index.html#openapi_1","title":"\u83b7\u53d6 OpenAPI \u8bbf\u95ee\u5bc6\u94a5","text":"

                          \u8bbf\u95ee\u5bc6\u94a5\uff08Access Key\uff09\u53ef\u7528\u4e8e\u8bbf\u95ee OpenAPI \u548c\u6301\u7eed\u53d1\u5e03\uff0c\u7528\u6237\u53ef\u5728\u4e2a\u4eba\u4e2d\u5fc3\u53c2\u7167\u4ee5\u4e0b\u6b65\u9aa4\u83b7\u53d6\u5bc6\u94a5\u5e76\u8bbf\u95ee API\u3002

                          \u767b\u5f55 AI \u7b97\u529b\u5e73\u53f0\uff0c\u5728\u53f3\u4e0a\u89d2\u7684\u4e0b\u62c9\u83dc\u5355\u4e2d\u627e\u5230 \u4e2a\u4eba\u4e2d\u5fc3 \uff0c\u53ef\u4ee5\u5728 \u8bbf\u95ee\u5bc6\u94a5 \u9875\u9762\u7ba1\u7406\u8d26\u53f7\u7684\u8bbf\u95ee\u5bc6\u94a5\u3002

                          Info

                          \u8bbf\u95ee\u5bc6\u94a5\u4fe1\u606f\u4ec5\u663e\u793a\u4e00\u6b21\u3002\u5982\u679c\u60a8\u5fd8\u8bb0\u4e86\u8bbf\u95ee\u5bc6\u94a5\u4fe1\u606f\uff0c\u60a8\u9700\u8981\u91cd\u65b0\u521b\u5efa\u65b0\u7684\u8bbf\u95ee\u5bc6\u94a5\u3002

                          "},{"location":"openapi/index.html#api","title":"\u4f7f\u7528\u5bc6\u94a5\u8bbf\u95ee API","text":"

                          \u5728\u8bbf\u95ee\u7b97\u4e30 AI \u7b97\u529b\u5e73\u53f0openAPI \u65f6\uff0c\u5728\u8bf7\u6c42\u4e2d\u52a0\u4e0a\u8bf7\u6c42\u5934 Authorization:Bearer ${token} \u4ee5\u6807\u8bc6\u8bbf\u95ee\u8005\u7684\u8eab\u4efd\uff0c \u5176\u4e2d ${token} \u662f\u4e0a\u4e00\u6b65\u4e2d\u83b7\u53d6\u5230\u7684\u5bc6\u94a5\u3002

                          \u8bf7\u6c42\u793a\u4f8b

                          curl -X GET -H 'Authorization:Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkRKVjlBTHRBLXZ4MmtQUC1TQnVGS0dCSWc1cnBfdkxiQVVqM2U3RVByWnMiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NjE0MTU5NjksImlhdCI6MTY2MDgxMTE2OSwiaXNzIjoiZ2hpcHBvLmlvIiwic3ViIjoiZjdjOGIxZjUtMTc2MS00NjYwLTg2MWQtOWI3MmI0MzJmNGViIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4iLCJncm91cHMiOltdfQ.RsUcrAYkQQ7C6BxMOrdD3qbBRUt0VVxynIGeq4wyIgye6R8Ma4cjxG5CbU1WyiHKpvIKJDJbeFQHro2euQyVde3ygA672ozkwLTnx3Tu-_mB1BubvWCBsDdUjIhCQfT39rk6EQozMjb-1X1sbLwzkfzKMls-oxkjagI_RFrYlTVPwT3Oaw-qOyulRSw7Dxd7jb0vINPq84vmlQIsI3UuTZSNO5BCgHpubcWwBss-Aon_DmYA-Et_-QtmPBA3k8E2hzDSzc7eqK0I68P25r9rwQ3DeKwD1dbRyndqWORRnz8TLEXSiCFXdZT2oiMrcJtO188Ph4eLGut1-4PzKhwgrQ' https://demo-dev.daocloud.io/apis/ghippo.io/v1alpha1/users?page=1&pageSize=10 -k\n

                          \u8bf7\u6c42\u7ed3\u679c

                          {\n    \"items\": [\n        {\n            \"id\": \"a7cfd010-ebbe-4601-987f-d098d9ef766e\",\n            \"name\": \"a\",\n            \"email\": \"\",\n            \"description\": \"\",\n            \"firstname\": \"\",\n            \"lastname\": \"\",\n            \"source\": \"locale\",\n            \"enabled\": true,\n            \"createdAt\": \"1660632794800\",\n            \"updatedAt\": \"0\",\n            \"lastLoginAt\": \"\"\n        }\n    ],\n    \"pagination\": {\n        \"page\": 1,\n        \"pageSize\": 10,\n        \"total\": 1\n    }\n}\n
                          "},{"location":"openapi/baize/index.html","title":"AI Lab OpenAPI \u6587\u6863","text":""},{"location":"openapi/ghippo/index.html","title":"\u5168\u5c40\u7ba1\u7406 OpenAPI \u6587\u6863","text":""},{"location":"openapi/insight/index.html","title":"\u53ef\u89c2\u6d4b\u6027 OpenAPI \u6587\u6863","text":""},{"location":"openapi/kpanda/index.html","title":"\u5bb9\u5668\u7ba1\u7406 OpenAPI \u6587\u6863","text":""},{"location":"openapi/virtnest/index.html","title":"\u4e91\u4e3b\u673a OpenAPI \u6587\u6863","text":""},{"location":"stylesheets/tags.html","title":"Tags","text":"

                          Following is a list of relevant tags:

                          [TAGS]

                          "}]} \ No newline at end of file diff --git a/site/sitemap.xml b/site/sitemap.xml deleted file mode 100644 index a9dae91..0000000 --- a/site/sitemap.xml +++ /dev/null @@ -1,2918 +0,0 @@ - - - - https://sophdoc.github.io/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/best-practice/add-scheduler.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/best-practice/change-notebook-image.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/best-practice/checkpoint.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/best-practice/deploy-nfs-in-worker.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/best-practice/finetunel-llm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/best-practice/label-studio.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/best-practice/train-with-deepspeed.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/quick-start.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/dataset/create-use-delete.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/dataset/environments.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/inference/models.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/inference/triton-inference.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/inference/vllm-inference.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/create.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/delete.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/mpi.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/mxnet.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/paddle.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/pytorch.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/tensorboard.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/tensorflow.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/jobs/view.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/baizectl.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/baizess.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/create.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/delete.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/notebook-auto-close.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/notebook-with-envs.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/notebook-with-ssh.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/start-pause.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/developer/notebooks/view.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/oam/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/oam/resource.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/oam/queue/create.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/oam/queue/delete.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/troubleshoot/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/troubleshoot/cluster-not-found.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/troubleshoot/local-queue-initialization-failed.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/baize/troubleshoot/notebook-not-controlled-by-quotas.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/password.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/custom-role.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/docking.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/global.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/group.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/iam.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/idprovider.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/ldap.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/oauth2.0.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/oidc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/role.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/user.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/access-control/webhook.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/audit-log.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/open-audit.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/open-k8s-audit.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/source-ip.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/gproduct-audit/ghippo.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/gproduct-audit/insight.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/gproduct-audit/kpanda.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/audit/gproduct-audit/virtnest.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/authz-plan.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/cluster-for-multiws.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/folder-practice.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/super-group.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/system-message.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/ws-best-practice.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/ws-to-ns.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/gproduct/intro.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/gproduct/nav.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/gproduct/route-auth.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/menu/menu-display-or-hiding.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/menu/navigator.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/oem/custom-idp.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/oem/demo.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/oem/keycloak-idp.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/oem/oem-in.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/best-practice/oem/oem-out.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/install/gm-gateway.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/install/login.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/install/offline-install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/install/reverse-proxy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/install/user-isolation.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/permissions/baize.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/permissions/kpanda.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/personal-center/accesstoken.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/personal-center/language.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/personal-center/security-setting.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/personal-center/ssh-key.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/platform-setting/about.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/platform-setting/appearance.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/platform-setting/mail-server.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/platform-setting/security.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/report-billing/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/report-billing/billing.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/report-billing/report.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/troubleshooting/ghippo01.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/troubleshooting/ghippo02.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/troubleshooting/ghippo03.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/troubleshooting/ghippo04.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/folder-permission.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/folders.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/quota.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/res-gp-and-shared-res.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/workspace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/ws-folder.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/ws-permission.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/ghippo/workspace/wsbind-permission.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/host/createhost.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/host/usehost.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/alert-policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/alert-template.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/inhibition.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/message.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/msg-template.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/silent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/alert-center/sms-provider.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/debug-log.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/debug-trace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/find_root_cause.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/grafana-use-db.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/insight-kafka.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/integration_deepflow.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/sw-to-otel.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/best-practice/tail-based-sampling.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/collection-manag/agent-status.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/collection-manag/collection-manag.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/collection-manag/metric-collect.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/collection-manag/probe-module.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/collection-manag/service-monitor.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/compati-test/k8s-compatibility.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/compati-test/ocp-compatibility.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/compati-test/rancher-compatibility.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/dashboard/dashboard.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/dashboard/import-dashboard.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/dashboard/login-grafana.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/dashboard/overview.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/data-query/log.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/data-query/metric.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/faq/expand-once-es-full.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/faq/ignore-pod-log-collect.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/faq/traceclockskew.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/infra/cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/infra/container.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/infra/event.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/infra/namespace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/infra/node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/infra/probe.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/big-log-and-trace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/component-scheduling.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/gethosturl.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/helm-installagent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/install-agent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/knownissues.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/install/upgrade-note.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/operator.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/otel.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/send_tracing_to_insight.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/golang/golang.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/golang/meter.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/java/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/java/mdc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/java/jvm-monitor/legacy-jvm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/other/install-agent-on-ocp.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/res-plan/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/res-plan/modify-vms-disk.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/res-plan/prometheus-res.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/quickstart/res-plan/vms-res-plan.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/reference/alertnotification.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/reference/lucene.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/reference/notify-helper.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/reference/tailing-sidecar.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/reference/used-metric-in-insight.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/system-config/modify-config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/system-config/system-component.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/system-config/system-config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/trace/service.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/trace/topology.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/insight/trace/trace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/k8s/add-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/k8s/create-k8s.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/k8s/remove-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/backup/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/backup/deployment.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/backup/etcd-backup.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/backup/install-velero.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/add-master-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/add-worker-node-on-global.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/backup-mysql-on-nfs.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/create-redhat9.2-on-centos-platform.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/create-ubuntu-on-centos-platform.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/etcd-backup.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/hardening-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/k3s-lcm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/kubean-low-version.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/limit-disk-usage-docker.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/multi-arch.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/replace-first-master-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/update-offline-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/use-otherlinux-create-custer.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/co-located/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/best-practice/co-located/install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusterops/cluster-oversold.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusterops/cluster-settings.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusterops/latest-operations.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/access-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/cluster-role.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/cluster-scheduler-plugin.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/cluster-status.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/cluster-version.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/create-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/delete-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/integrate-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/integrate-rancher-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/k8s-cert.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/runtime.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/clusters/upgrade-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/configmaps-secrets/configmap-hot-loading.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/configmaps-secrets/create-configmap.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/configmaps-secrets/create-secret.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/configmaps-secrets/use-configmap.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/configmaps-secrets/use-secret.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/custom-resources/create.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/FAQ.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/Iluvatar_usage.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/dynamic-regulation.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/gpu_matrix.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/gpu_scheduler_config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/vgpu_quota.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/ascend/ascend_driver_install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/ascend/ascend_usage.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/ascend/vnpu.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/metax/usemetax.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/mlu/use-mlu.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/full_gpu_userguide.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/push_image_to_repo.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/yum_source_redhat7_9.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/mig/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/mig/create_mig.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/mig/mig_command.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/mig/mig_usage.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/vgpu/hami.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/vgpu/vgpu_addon.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/nvidia/vgpu/vgpu_user.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/volcano/drf.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/volcano/numa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/volcano/volcano-gang-scheduler.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/volcano/volcano_binpack.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/volcano/volcano_priority.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/gpu/volcano/volcano_user_guide.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/helm/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/helm/Import-addon.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/helm/helm-app.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/helm/helm-repo.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/helm/multi-archi-helm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/helm/upload-helm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/inspect/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/inspect/config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/inspect/inspect.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/inspect/report.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/namespaces/createns.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/namespaces/exclusive.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/namespaces/podsecurity.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/network/create-ingress.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/network/create-services.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/network/network-policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/add-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/delete-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/labels-annotations.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/node-authentication.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/node-check.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/node-details.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/schedule.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/nodes/taints.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/olm/import-miniooperator.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/permissions/cluster-ns-auth.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/permissions/custom-kpanda-role.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/permissions/permission-brief.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/create-hpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/create-vpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/custom-hpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/hpa-cronhpa-compatibility-rules.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/install-cronhpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/install-metrics-server.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/install-vpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/knative/install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/knative/knative.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/knative/playground.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/scale/knative/scene.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/security/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/security/audit.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/security/hunter.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/security/cis/config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/security/cis/policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/security/cis/report.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/storage/pv.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/storage/pvc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/storage/sc-share.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/storage/sc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/create-cronjob.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/create-daemonset.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/create-deployment.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/create-job.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/create-statefulset.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/pod-config/env-variables.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/pod-config/health-check.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/pod-config/job-parameters.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/pod-config/lifecycle.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/pod-config/scheduling-policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/kpanda/workloads/pod-config/workload-status.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/register/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/register/bindws.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/register/wsres.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/security/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/security/falco-exporter.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/security/falco-install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/security/falco.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/share/infer.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/share/job.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/share/notebook.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/share/quota.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/share/workload.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/best-practice/import-ubuntu.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/best-practice/import-windows.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/best-practice/vm-windows.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/gpu/vm-gpu.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/gpu/vm-vgpu.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/install/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/install/install-dependency.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/install/offline-install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/install/virtnest-agent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/quickstart/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/quickstart/access.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/quickstart/detail.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/quickstart/nodeport.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/quickstart/update.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/template/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/template/tep.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/auto-migrate.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/clone.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/create-secret.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/cross-cluster-migrate.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/health-check.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/live-migration.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/migratiom.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/monitor.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/scheduled-snapshot.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/snapshot.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/vm-network.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm/vm-sc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/admin/virtnest/vm-image/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/dataset/create-use-delete.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/dataset/environments.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/inference/models.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/inference/triton-inference.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/inference/vllm-inference.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/create.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/delete.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/mpi.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/mxnet.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/paddle.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/pytorch.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/tensorboard.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/tensorflow.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/baize/jobs/view.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/personal-center/accesstoken.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/personal-center/language.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/personal-center/security-setting.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/personal-center/ssh-key.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/folder-permission.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/folders.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/quota.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/res-gp-and-shared-res.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/workspace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/ws-folder.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/ws-permission.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/ghippo/workspace/wsbind-permission.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/host/createhost.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/host/usehost.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/alert-policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/alert-template.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/inhibition.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/message.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/msg-template.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/silent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/alert-center/sms-provider.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/collection-manag/agent-status.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/collection-manag/collection-manag.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/collection-manag/metric-collect.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/collection-manag/probe-module.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/collection-manag/service-monitor.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/dashboard/dashboard.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/dashboard/import-dashboard.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/dashboard/login-grafana.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/dashboard/overview.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/data-query/log.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/data-query/metric.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/infra/cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/infra/container.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/infra/event.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/infra/namespace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/infra/node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/infra/probe.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/big-log-and-trace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/component-scheduling.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/gethosturl.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/helm-installagent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/install-agent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/knownissues.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/install/upgrade-note.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/operator.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/otel.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/send_tracing_to_insight.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/golang/golang.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/golang/meter.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/java/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/java/mdc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/java/jvm-monitor/jmx-exporter.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/java/jvm-monitor/legacy-jvm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/otel/java/jvm-monitor/otel-java-agent.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/other/install-agent-on-ocp.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/res-plan/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/res-plan/modify-vms-disk.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/res-plan/prometheus-res.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/quickstart/res-plan/vms-res-plan.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/system-config/modify-config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/system-config/system-component.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/system-config/system-config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/trace/service.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/trace/topology.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/insight/trace/trace.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/k8s/add-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/k8s/create-k8s.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/k8s/remove-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/backup/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/backup/deployment.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/backup/etcd-backup.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/backup/install-velero.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusterops/cluster-oversold.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusterops/cluster-settings.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusterops/latest-operations.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/access-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/cluster-role.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/cluster-scheduler-plugin.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/cluster-status.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/cluster-version.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/create-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/delete-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/integrate-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/integrate-rancher-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/k8s-cert.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/runtime.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/clusters/upgrade-cluster.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/configmaps-secrets/configmap-hot-loading.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/configmaps-secrets/create-configmap.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/configmaps-secrets/create-secret.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/configmaps-secrets/use-configmap.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/configmaps-secrets/use-secret.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/custom-resources/create.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/FAQ.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/Iluvatar_usage.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/dynamic-regulation.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/gpu_matrix.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/gpu_scheduler_config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/vgpu_quota.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/ascend/ascend_driver_install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/ascend/ascend_usage.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/ascend/vnpu.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/metax/usemetax.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/mlu/use-mlu.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/full_gpu_userguide.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/install_nvidia_driver_of_operator.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/push_image_to_repo.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/rhel9.2_offline_install_driver.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/ubuntu22.04_offline_install_driver.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/upgrade_yum_source_centos7_9.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/upgrade_yum_source_redhat8_4.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/yum_source_redhat7_9.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-alarm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/gpu-monitoring-alarm/gpu-metrics.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/mig/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/mig/create_mig.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/mig/mig_command.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/mig/mig_usage.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/vgpu/hami.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/vgpu/vgpu_addon.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/nvidia/vgpu/vgpu_user.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/volcano/drf.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/volcano/numa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/volcano/volcano-gang-scheduler.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/volcano/volcano_binpack.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/volcano/volcano_priority.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/gpu/volcano/volcano_user_guide.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/helm/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/helm/Import-addon.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/helm/helm-app.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/helm/helm-repo.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/helm/multi-archi-helm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/helm/upload-helm.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/inspect/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/inspect/config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/inspect/inspect.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/inspect/report.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/namespaces/createns.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/namespaces/exclusive.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/namespaces/podsecurity.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/network/create-ingress.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/network/create-services.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/network/network-policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/add-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/delete-node.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/labels-annotations.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/node-authentication.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/node-check.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/node-details.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/schedule.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/nodes/taints.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/olm/import-miniooperator.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/permissions/cluster-ns-auth.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/permissions/custom-kpanda-role.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/permissions/permission-brief.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/create-hpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/create-vpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/custom-hpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/hpa-cronhpa-compatibility-rules.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/install-cronhpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/install-metrics-server.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/install-vpa.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/knative/install.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/knative/knative.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/knative/playground.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/scale/knative/scene.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/security/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/security/audit.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/security/hunter.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/security/cis/config.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/security/cis/policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/security/cis/report.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/storage/pv.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/storage/pvc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/storage/sc-share.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/storage/sc.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/create-cronjob.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/create-daemonset.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/create-deployment.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/create-job.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/create-statefulset.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/pod-config/env-variables.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/pod-config/health-check.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/pod-config/job-parameters.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/pod-config/lifecycle.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/pod-config/scheduling-policy.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/kpanda/workloads/pod-config/workload-status.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/register/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/share/notebook.html - 2024-11-13 - daily - - - https://sophdoc.github.io/end-user/share/workload.html - 2024-11-13 - daily - - - https://sophdoc.github.io/openapi/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/openapi/baize/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/openapi/ghippo/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/openapi/insight/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/openapi/kpanda/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/openapi/virtnest/index.html - 2024-11-13 - daily - - - https://sophdoc.github.io/stylesheets/tags.html - 2024-11-13 - daily - - \ No newline at end of file diff --git a/site/sitemap.xml.gz b/site/sitemap.xml.gz deleted file mode 100644 index 8686591..0000000 Binary files a/site/sitemap.xml.gz and /dev/null differ diff --git a/site/stylesheets/custom.css b/site/stylesheets/custom.css deleted file mode 100644 index e747cc6..0000000 --- a/site/stylesheets/custom.css +++ /dev/null @@ -1,58 +0,0 @@ -#imgBaseDiv > img { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - max-width: 99%; - max-height: 99%; -} - -#imgBaseDiv { - width: 100%; - height: 100%; - position: fixed; - background: rgba(0, 0, 0, 0.9); - top: 0; - left: 0; - z-index: 1050; -} - -.responsive-video-container { - position: relative; - margin-bottom: 1em; - padding-bottom: 62.50%; - height: 0; - overflow: hidden; - max-width: 100%; -} - -iframe:not(.giscus-frame):not(.swagger-ui-iframe), -object, -embed { - position: absolute; - top: 0; - left: 0; - width: 100% !important; - height: 100%; -} - -.md-footer__inner { - display: none -} - -/* Maximum space for text block */ -.md-grid { - max-width: 94%; /* or 100%, if you want to stretch to full-width */ -} - - -/* -img { - height: auto; - width: auto; - border: 1px solid #ddd; - border-radius: 6px; - padding: 4px; - background-color: #fff; -} -*/ \ No newline at end of file diff --git a/site/stylesheets/landing.css b/site/stylesheets/landing.css deleted file mode 100644 index ceefdc1..0000000 --- a/site/stylesheets/landing.css +++ /dev/null @@ -1,158 +0,0 @@ -.tx-container { - background: - linear-gradient(to bottom, var(--md-primary-fg-color), #2196f3 100%, var(--md-default-bg-color) 100%) -} - -[data-md-color-scheme=slate] .tx-container { - background: - linear-gradient(to bottom, var(--md-primary-fg-color), #2196f3 100%, var(--md-default-bg-color) 100%) -} - -@media screen and (min-width: 60em) { - .tx-container { - background: - url("/assets/images/wave-regular.svg") no-repeat bottom, - linear-gradient(to bottom, var(--md-primary-fg-color), #2196f3 99%, var(--md-default-bg-color) 99%) - } - - [data-md-color-scheme=slate] .tx-container { - background: - url("/assets/images/wave-slate.svg") no-repeat bottom, - linear-gradient(to bottom, var(--md-primary-fg-color), #2196f3 99%, var(--md-default-bg-color) 99%) - } -} - -.tx-landing { - margin: 0 .8rem; - color: var(--md-primary-bg-color) -} - -.tx-landing h1 { - margin-bottom: 1rem; - color: currentColor; - font-weight: 700 -} - -@media screen and (max-width: 30em) { - .tx-landing h1 { - font-size: 1.4rem - } -} - -.tx-landing__content p a { - color: inherit; - text-decoration: underline; -} - -.tx-landing__testimonials { - width: 100%; - text-align: center; -} - -.tx-landing__content p a:hover { - color: darkblue; - text-decoration: underline; -} - -.tx-landing__logos { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center; -} - -.tx-landing__logos img { - height: 8vh; - max-height: 81px; /* max height of images */ - width: auto; - margin: 2vh; - vertical-align: middle; -} - -.tx-landing__quotes { - padding-bottom: 5em; - text-align: center; -} - -@media screen and (min-width: 60em) { - .tx-landing__quotes { - margin: 1em 5em; - } -} - -.tx-landing__quotes figure { - margin: 2em auto 2em auto; -} - -.tx-landing__quote { - display: flex; - border-radius: 1em; - padding: 1em 1em 0 1em; - background: var(--md-primary-fg-color); -} - -.tx-landing__quote blockquote { - border: 0; - color: #fff; -} - -.tx-landing__quote a img { - height: 6vh; - max-height: 81px; /* max height of images */ - display: block; - margin-left: auto; - margin-right: auto; -} - -@media screen and (min-width: 60em) { - .tx-container { - padding-bottom: 14vw - } - - .tx-landing { - display: flex; - align-items: stretch - } - - .tx-landing__content { - max-width: 19rem; - margin-top: 3.5rem; - } - - .tx-landing__image { - order: 1; - width: 38rem; - transform: translateX(4rem) - } -} - -@media screen and (min-width: 77em) { - .tx-landing__image { - transform: translateX(8rem) - } -} - -.tx-landing .md-button { - margin-top: .5rem; - margin-right: .5rem; - color: var(--md-primary-bg-color) -} - -.tx-landing .md-button:hover, .tx-landing .md-button:focus { - color: var(--md-default-bg-color); - background-color: #8bc34a; - border-color: #8bc34a -} - -.md-typeset lottie-player { - max-width: 100%; - height: auto; -} - -.md-announce a { - color: var(--md-primary-bg-color); -} - -.md-banner a { - color: var(--md-primary-bg-color); -} diff --git a/site/stylesheets/tags.html b/site/stylesheets/tags.html deleted file mode 100644 index 21fb5b2..0000000 --- a/site/stylesheets/tags.html +++ /dev/null @@ -1,350 +0,0 @@ - - - - - - - - - - - - -Tags - 豐收二號檔案站 - - - - - - - - - - - - - -
                          -
                          -
                          - - -
                          -
                          -
                          -
                          - -
                          -
                          -
                          - -
                          -
                          -
                          -
                          -
                          -

                          Tags

                          -

                          Following is a list of relevant tags:

                          -

                          [TAGS]

                          -
                          -
                          - -
                          - -
                          -
                          - -
                          -
                          -
                          -
                          -
                          - - - - - \ No newline at end of file diff --git a/site/stylesheets/zoom_image.js b/site/stylesheets/zoom_image.js deleted file mode 100644 index 8114a8b..0000000 --- a/site/stylesheets/zoom_image.js +++ /dev/null @@ -1,21 +0,0 @@ -window.onload = function () { - for (let item of document.getElementsByTagName("img")) { - if (item.classList.contains("pass") === false) { - item.setAttribute("onclick", "clickAction(this)"); - } - } -}; - -function clickAction(img) { - let medusa = document.createElement("div"); - medusa.setAttribute("id", "imgBaseDiv"); - medusa.setAttribute("onclick", "closeImg()"); - let image = document.createElement("img"); - image.setAttribute("src", img.src); - medusa.appendChild(image); - document.body.appendChild(medusa); -} - -function closeImg() { - document.getElementById("imgBaseDiv").remove(); -} diff --git a/sitemap.xml b/sitemap.xml index 53f1da4..258c975 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,42 +2,42 @@ https://aikdocs.github.io/michaelyao/index.html - 2024-11-18 + 2024-11-19 daily https://aikdocs.github.io/michaelyao/profile/index.html - 2024-11-18 + 2024-11-19 daily https://aikdocs.github.io/michaelyao/stylesheets/tags.html - 2024-11-18 + 2024-11-19 daily https://aikdocs.github.io/michaelyao/en/index.html - 2024-11-18 + 2024-11-19 daily https://aikdocs.github.io/michaelyao/en/profile/index.html - 2024-11-18 + 2024-11-19 daily https://aikdocs.github.io/michaelyao/en/stylesheets/tags.html - 2024-11-18 + 2024-11-19 daily diff --git a/sitemap.xml.gz b/sitemap.xml.gz index d60732d..14dd528 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ diff --git a/stylesheets/tags.html b/stylesheets/tags.html index e8c013f..f7764ef 100644 --- a/stylesheets/tags.html +++ b/stylesheets/tags.html @@ -9,15 +9,15 @@ - + Tags - Michael Yao's Website - + - + @@ -36,7 +36,7 @@ logo
                          @@ -57,22 +57,22 @@
                          - +
                            @@ -91,7 +91,7 @@