mirror of
https://github.com/rancher/rancher-docs.git
synced 2026-09-25 20:48:11 +00:00
deploy: 0f8d17de31
This commit is contained in:
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1711641527,
|
||||
"formattedLastUpdatedAt": "Mar 28, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "RKE Templates and Infrastructure"
|
||||
},
|
||||
@@ -400,8 +400,6 @@ function MDXContent(_param) {
|
||||
parentName: "ul"
|
||||
}, `Define almost any kind of infrastructure-as-code, including servers, databases, load balancers, monitoring, firewall settings, and SSL certificates`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Leverage catalog apps and multi-cluster apps`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Codify infrastructure across many platforms, including Rancher and major cloud providers`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Commit infrastructure-as-code to version control`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/integrations-in-rancher/harvester.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1705011762,
|
||||
"formattedLastUpdatedAt": "Jan 11, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Harvester Integration"
|
||||
},
|
||||
@@ -390,7 +390,7 @@ function MDXContent(_param) {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `If the Harvester feature flag is enabled, Harvester clusters will be filtered out from any pages or apps (such as Fleet and the multi-cluster app) that list Kubernetes clusters.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
}, `If the Harvester feature flag is enabled, Harvester clusters will be filtered out from any pages or apps (such as Continuous Delivery with Fleet) that list Kubernetes clusters.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
@@ -1,852 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[40812],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 82769:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Multi-cluster Apps'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"id": "version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"title": "Multi-cluster Apps",
|
||||
"description": "Typically, most applications are deployed on a single Kubernetes cluster, but there will be times you might want to deploy multiple copies of the same application across different clusters and/or projects. In Rancher, a multi-cluster application, is an application deployed using a Helm chart across multiple clusters. With the ability to deploy the same application across multiple clusters, it avoids the repetition of the same action on each cluster, which could introduce user error during application configuration. With multi-cluster applications, you can customize to have the same configuration across all projects/clusters as well as have the ability to change the configuration based on your target project. Since multi-cluster application is considered a single application, it's easy to manage and maintain this application.",
|
||||
"source": "@site/versioned_docs/version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1705011762,
|
||||
"formattedLastUpdatedAt": "Jan 11, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Multi-cluster Apps"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
},
|
||||
"next": {
|
||||
"title": "Backups and Disaster Recovery",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Prerequisites',
|
||||
id: 'prerequisites',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Permissions',
|
||||
id: 'permissions',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Enable Legacy Features',
|
||||
id: 'enable-legacy-features',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Launching a Multi-Cluster App',
|
||||
id: 'launching-a-multi-cluster-app',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-cluster App Configuration Options',
|
||||
id: 'multi-cluster-app-configuration-options',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Targets',
|
||||
id: 'targets',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Upgrades',
|
||||
id: 'upgrades',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Roles',
|
||||
id: 'roles',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Application Configuration Options',
|
||||
id: 'application-configuration-options',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Using a questions.yml file',
|
||||
id: 'using-a-questionsyml-file',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Key Value Pairs for Native Helm Charts',
|
||||
id: 'key-value-pairs-for-native-helm-charts',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Members',
|
||||
id: 'members',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Overriding Application Configuration Options for Specific Projects',
|
||||
id: 'overriding-application-configuration-options-for-specific-projects',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Upgrading Multi-Cluster App Roles and Projects',
|
||||
id: 'upgrading-multi-cluster-app-roles-and-projects',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-Cluster Application Management',
|
||||
id: 'multi-cluster-application-management',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Deleting a Multi-Cluster Application',
|
||||
id: 'deleting-a-multi-cluster-application',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Typically, most applications are deployed on a single Kubernetes cluster, but there will be times you might want to deploy multiple copies of the same application across different clusters and/or projects. In Rancher, a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `multi-cluster application`), `, is an application deployed using a Helm chart across multiple clusters. With the ability to deploy the same application across multiple clusters, it avoids the repetition of the same action on each cluster, which could introduce user error during application configuration. With multi-cluster applications, you can customize to have the same configuration across all projects/clusters as well as have the ability to change the configuration based on your target project. Since multi-cluster application is considered a single application, it's easy to manage and maintain this application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Any Helm charts from a global catalog can be used to deploy and manage multi-cluster applications.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `After creating a multi-cluster application, you can program a global DNS entry to make it easier to access the application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "prerequisites"
|
||||
}, `Prerequisites`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "permissions"
|
||||
}, `Permissions`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To create a multi-cluster app in Rancher, you must have at least one of the following permissions:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project-member role`), ` in the target cluster(s), which gives you the ability to create, read, update, and delete the workloads`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner role`), ` for the clusters(s) that include the target project(s)`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "enable-legacy-features"
|
||||
}, `Enable Legacy Features`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Because multi-cluster apps were deprecated and replaced with Fleet in Rancher v2.5, you will need to enable multi-cluster apps with a feature flag.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `☰ > Global Settings`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Feature Flags`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Go to the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `legacy`), ` feature flag and click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Activate`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "launching-a-multi-cluster-app"
|
||||
}, `Launching a Multi-Cluster App`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `☰ > Multi-cluster Apps`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Launch`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Find the application that you want to launch.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `(Optional) Review the detailed descriptions, which are derived from the Helm chart's `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `README`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Under `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Configuration Options`), ` enter a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Name`), ` for the multi-cluster application. By default, this name is also used to create a Kubernetes namespace in each `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#targets"
|
||||
}, `target project`), ` for the multi-cluster application. The namespace is named as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `<MULTI-CLUSTER_APPLICATION_NAME>-<PROJECT_ID>`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Select a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Template Version`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Complete the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#multi-cluster-app-configuration-options"
|
||||
}, `multi-cluster applications specific configuration options`), ` as well as the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application configuration options`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Select the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Members`), ` who can `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#members"
|
||||
}, `interact with the multi-cluster application`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Add any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), ` that would change the configuration for specific project(s) from the default application configuration answers.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Review the files in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Preview`), ` section. When you're satisfied, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Launch`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Result`), `: Your application is deployed to your chosen namespace. You can view the application status from the project's:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-app-configuration-options"
|
||||
}, `Multi-cluster App Configuration Options`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher has divided the configuration option for the multi-cluster application into several sections.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "targets"
|
||||
}, `Targets`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Targets`), ` section, select the projects that you want the application to be deployed in. The list of projects is based on what projects you have access to. For each project that you select, it will be added to the list, which shows the cluster name and project name that were selected. To remove a target project, click on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `-`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "upgrades"
|
||||
}, `Upgrades`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Upgrades`), ` section, select the upgrade strategy to use, when you decide to upgrade your application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Rolling Update (batched):`), ` When selecting this upgrade strategy, the number of applications upgraded at a time is based on the selected `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Batch size`), ` and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Interval`), ` specifies how many seconds to wait before starting the next batch of updates.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Upgrade all apps simultaneously:`), ` When selecting this upgrade strategy, all applications across all projects will be upgraded at the same time.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "roles"
|
||||
}, `Roles`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Roles`), ` section, you define the role of the multi-cluster application. Typically, when a user `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/helm-charts-in-rancher/"
|
||||
}, `launches catalog applications`), `, that specific user's permissions are used for creation of all workloads/resources that is required by the app.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For multi-cluster applications, the application is deployed by a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `system user`), ` and is assigned as the creator of all underlying resources. A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `system user`), ` is used instead of the actual user due to the fact that the actual user could be removed from one of the target projects. If the actual user was removed from one of the projects, then that user would no longer be able to manage the application for the other projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher will let you select from two options for Roles, `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Project`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), `. Rancher will allow creation using any of these roles based on the user's permissions.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Project`), ` - This is the equivalent of a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project member`), `. If you select this role, Rancher will check that in all the target projects, the user has minimally the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project member`), ` role. While the user might not be explicitly granted the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `project member`), ` role, if the user is an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions"
|
||||
}, `administrator`), `, a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner`), `, or a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project owner`), `, then the user is considered to have the appropriate level of permissions.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), ` - This is the equivalent of a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner`), `. If you select this role, Rancher will check that in all the target projects, the user has minimally the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `cluster owner`), ` role. While the user might not be explicitly granted the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `cluster owner`), ` role, if the user is an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions"
|
||||
}, `administrator`), `, then the user is considered to have the appropriate level of permissions.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `When launching the application, Rancher will confirm if you have these permissions in the target projects before launching the application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `There are some applications like `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Grafana`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Datadog`), ` that require access to specific cluster-scoped resources. These applications will require the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), ` role. If you find out later that the application requires cluster roles, the multi-cluster application can be upgraded to update the roles.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "application-configuration-options"
|
||||
}, `Application Configuration Options`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For each Helm chart, there are a list of desired answers that must be entered in order to successfully deploy the chart. When entering answers, you must format them using the syntax rules found in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set"
|
||||
}, `Using Helm: The format and limitations of –set`), `, as Rancher passes them as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `--set`), ` flags to Helm.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Example",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `When entering an answer that includes two values separated by a comma (i.e. `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `abc, bcd`), `), it is required to wrap the values with double quotes (i.e., `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `"abc, bcd"`), `).`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "using-a-questionsyml-file"
|
||||
}, `Using a questions.yml file`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If the Helm chart that you are deploying contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `questions.yml`), ` file, Rancher's UI will translate this file to display an easy to use UI to collect the answers for the questions.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "key-value-pairs-for-native-helm-charts"
|
||||
}, `Key Value Pairs for Native Helm Charts`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For native Helm charts (i.e., charts from the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Helm Stable`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Helm Incubator`), ` catalogs or a custom Helm chart repository, answers are provided as key value pairs in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answers`), ` section. These answers are used to override the default values.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "members"
|
||||
}, `Members`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `By default, multi-cluster applications can only be managed by the user who created it. In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Members`), ` section, other users can be added so that they can also help manage or view the multi-cluster application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Find the user that you want to add by typing in the member's name in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Member`), ` search box.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Access Type`), ` for that member. There are three access types for a multi-cluster project, but due to how the permissions of a multi-cluster application are launched, please read carefully to understand what these access types mean.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Owner`), `: This access type can manage any configuration part of the multi-cluster application including the template version, the `, `[multi-cluster applications specific configuration options]`, `(#Multi-cluster App Configuration Options), the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), `, the members who can interact with the multi-cluster application and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), `. Since a multi-cluster application is created with a different set of permissions from the user, any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `owner`), ` of the multi-cluster application can manage/remove applications in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#targets"
|
||||
}, `target projects`), ` without explicitly having access to these project(s). Only trusted users should be provided with this access type.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Member`), `: This access type can only modify the template version, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), ` and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), `. Since a multi-cluster application is created with a different set of permissions from the user, any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `member`), ` of the multi-cluster application can modify the application without explicitly having access to these project(s). Only trusted users should be provided with this access type.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Read-only`), `: This access type cannot modify any configuration option for the multi-cluster application. Users can only view these applications.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
parentName: "li",
|
||||
"type": "caution"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `Please ensure only trusted users are given `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Owner`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Member`), ` access as they will automatically be able to manage applications created for this multi-cluster application in target projects they might not have direct access to.`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "overriding-application-configuration-options-for-specific-projects"
|
||||
}, `Overriding Application Configuration Options for Specific Projects`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The ability to use the same configuration to deploy the same application across multiple clusters/projects is one of the main benefits of multi-cluster applications. There might be a specific project that requires a slightly different configuration option, but you want to manage that application with all the other matching applications. Instead of creating a brand new application, you can override specific `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), ` for specific projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answer Overrides`), ` section, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Add Override`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `For each override, you can select the following:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Scope`), `: Select which target projects you want to override the answer in the configuration option.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Question`), `: Select which question you want to override.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answer`), `: Enter the answer that you want to be used instead.`))))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "upgrading-multi-cluster-app-roles-and-projects"
|
||||
}, `Upgrading Multi-Cluster App Roles and Projects`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Changing Roles on an existing Multi-Cluster app`), `
|
||||
The creator and any users added with the access-type "owner" to a multi-cluster app, can upgrade its Roles. When adding a new Role, we check if the user has that exact role in all current target projects. These checks allow the same relaxations for global admins, cluster owners and project-owners as described in the installation section for the field `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `Roles`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Adding/Removing target projects`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `The creator and any users added with access-type "owner" to a multi-cluster app, can add or remove its target projects. When adding a new project, we check if the caller of this request has all Roles defined on multi-cluster app, in the new projects they want to add. The roles checks are again relaxed for global admins, cluster-owners and project-owners.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `We do not do these membership checks when removing target projects. This is because the caller's permissions could have with respect to the target project, or the project could have been deleted and hence the caller wants to remove it from targets list.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-application-management"
|
||||
}, `Multi-Cluster Application Management`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `One of the benefits of using a multi-cluster application as opposed to multiple individual applications of the same type, is the ease of management. Multi-cluster applications can be cloned, upgraded or rolled back.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Prerequisite:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `legacy`), ` feature flag needs to be enabled.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Multi-cluster Apps`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Choose the multi-cluster application you want to take one of these actions on and click the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `⋮`), `. Select one of the following options:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Clone`), `: Creates another multi-cluster application with the same configuration. By using this option, you can easily duplicate a multi-cluster application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Upgrade`), `: Upgrade your multi-cluster application to change some part of the configuration. When performing an upgrade for multi-cluster application, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#upgrades"
|
||||
}, `upgrade strategy`), ` can be modified if you have the correct `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#members"
|
||||
}, `access type`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Rollback`), `: Rollback your application to a specific version. If after an upgrade, there are issues for your multi-cluster application for one or more of your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#targets"
|
||||
}, `targets`), `, Rancher has stored up to 10 versions of the multi-cluster application. Rolling back a multi-cluster application reverts the application for `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `all`), ` target clusters and projects, not just the targets(s) affected by the upgrade issue.`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "deleting-a-multi-cluster-application"
|
||||
}, `Deleting a Multi-Cluster Application`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Prerequisite:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `legacy`), ` feature flag needs to be enabled.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Multi-cluster Apps`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Choose the multi-cluster application you want to delete and click the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `⋮ > Delete`), `. When deleting the multi-cluster application, all applications and namespaces are deleted in all of the target projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
parentName: "li",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The applications in the target projects, that are created for a multi-cluster application, cannot be deleted individually. The applications can only be deleted when the multi-cluster application is deleted.`)))));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1711641527,
|
||||
"formattedLastUpdatedAt": "Mar 28, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "RKE Templates and Infrastructure"
|
||||
},
|
||||
@@ -400,8 +400,6 @@ function MDXContent(_param) {
|
||||
parentName: "ul"
|
||||
}, `Define almost any kind of infrastructure-as-code, including servers, databases, load balancers, monitoring, firewall settings, and SSL certificates`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Leverage catalog apps and multi-cluster apps`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Codify infrastructure across many platforms, including Rancher and major cloud providers`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Commit infrastructure-as-code to version control`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/integrations-in-rancher/harvester/overview.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1706551642,
|
||||
"formattedLastUpdatedAt": "Jan 29, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Overview"
|
||||
},
|
||||
@@ -385,7 +385,7 @@ function MDXContent(_param) {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `If the Harvester feature flag is enabled, Harvester clusters will be filtered out from any pages or apps (such as Fleet and the multi-cluster app) that list Kubernetes clusters.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
}, `If the Harvester feature flag is enabled, Harvester clusters will be filtered out from any pages or apps (such as Continuous Delivery with Fleet) that list Kubernetes clusters.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
@@ -1,852 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[49558],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 76114:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Multi-cluster Apps'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"id": "version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"title": "Multi-cluster Apps",
|
||||
"description": "Typically, most applications are deployed on a single Kubernetes cluster, but there will be times you might want to deploy multiple copies of the same application across different clusters and/or projects. In Rancher, a multi-cluster application, is an application deployed using a Helm chart across multiple clusters. With the ability to deploy the same application across multiple clusters, it avoids the repetition of the same action on each cluster, which could introduce user error during application configuration. With multi-cluster applications, you can customize to have the same configuration across all projects/clusters as well as have the ability to change the configuration based on your target project. Since multi-cluster application is considered a single application, it's easy to manage and maintain this application.",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1703291432,
|
||||
"formattedLastUpdatedAt": "Dec 23, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Multi-cluster Apps"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
},
|
||||
"next": {
|
||||
"title": "Backups and Disaster Recovery",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Prerequisites',
|
||||
id: 'prerequisites',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Permissions',
|
||||
id: 'permissions',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Enable Legacy Features',
|
||||
id: 'enable-legacy-features',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Launching a Multi-Cluster App',
|
||||
id: 'launching-a-multi-cluster-app',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-cluster App Configuration Options',
|
||||
id: 'multi-cluster-app-configuration-options',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Targets',
|
||||
id: 'targets',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Upgrades',
|
||||
id: 'upgrades',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Roles',
|
||||
id: 'roles',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Application Configuration Options',
|
||||
id: 'application-configuration-options',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Using a questions.yml file',
|
||||
id: 'using-a-questionsyml-file',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Key Value Pairs for Native Helm Charts',
|
||||
id: 'key-value-pairs-for-native-helm-charts',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Members',
|
||||
id: 'members',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Overriding Application Configuration Options for Specific Projects',
|
||||
id: 'overriding-application-configuration-options-for-specific-projects',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Upgrading Multi-Cluster App Roles and Projects',
|
||||
id: 'upgrading-multi-cluster-app-roles-and-projects',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-Cluster Application Management',
|
||||
id: 'multi-cluster-application-management',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Deleting a Multi-Cluster Application',
|
||||
id: 'deleting-a-multi-cluster-application',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Typically, most applications are deployed on a single Kubernetes cluster, but there will be times you might want to deploy multiple copies of the same application across different clusters and/or projects. In Rancher, a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `multi-cluster application`), `, is an application deployed using a Helm chart across multiple clusters. With the ability to deploy the same application across multiple clusters, it avoids the repetition of the same action on each cluster, which could introduce user error during application configuration. With multi-cluster applications, you can customize to have the same configuration across all projects/clusters as well as have the ability to change the configuration based on your target project. Since multi-cluster application is considered a single application, it's easy to manage and maintain this application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Any Helm charts from a global catalog can be used to deploy and manage multi-cluster applications.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `After creating a multi-cluster application, you can program a global DNS entry to make it easier to access the application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "prerequisites"
|
||||
}, `Prerequisites`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "permissions"
|
||||
}, `Permissions`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To create a multi-cluster app in Rancher, you must have at least one of the following permissions:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project-member role`), ` in the target cluster(s), which gives you the ability to create, read, update, and delete the workloads`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner role`), ` for the clusters(s) that include the target project(s)`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "enable-legacy-features"
|
||||
}, `Enable Legacy Features`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Because multi-cluster apps were deprecated and replaced with Fleet in Rancher v2.5, you will need to enable multi-cluster apps with a feature flag.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `☰ > Global Settings`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Feature Flags`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Go to the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `legacy`), ` feature flag and click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Activate`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "launching-a-multi-cluster-app"
|
||||
}, `Launching a Multi-Cluster App`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `☰ > Multi-cluster Apps`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Launch`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Find the application that you want to launch.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `(Optional) Review the detailed descriptions, which are derived from the Helm chart's `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `README`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Under `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Configuration Options`), ` enter a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Name`), ` for the multi-cluster application. By default, this name is also used to create a Kubernetes namespace in each `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#targets"
|
||||
}, `target project`), ` for the multi-cluster application. The namespace is named as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `<MULTI-CLUSTER_APPLICATION_NAME>-<PROJECT_ID>`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Select a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Template Version`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Complete the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#multi-cluster-app-configuration-options"
|
||||
}, `multi-cluster applications specific configuration options`), ` as well as the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application configuration options`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Select the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Members`), ` who can `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#members"
|
||||
}, `interact with the multi-cluster application`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Add any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), ` that would change the configuration for specific project(s) from the default application configuration answers.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Review the files in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Preview`), ` section. When you're satisfied, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Launch`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Result`), `: Your application is deployed to your chosen namespace. You can view the application status from the project's:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-app-configuration-options"
|
||||
}, `Multi-cluster App Configuration Options`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher has divided the configuration option for the multi-cluster application into several sections.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "targets"
|
||||
}, `Targets`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Targets`), ` section, select the projects that you want the application to be deployed in. The list of projects is based on what projects you have access to. For each project that you select, it will be added to the list, which shows the cluster name and project name that were selected. To remove a target project, click on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `-`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "upgrades"
|
||||
}, `Upgrades`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Upgrades`), ` section, select the upgrade strategy to use, when you decide to upgrade your application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Rolling Update (batched):`), ` When selecting this upgrade strategy, the number of applications upgraded at a time is based on the selected `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Batch size`), ` and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Interval`), ` specifies how many seconds to wait before starting the next batch of updates.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Upgrade all apps simultaneously:`), ` When selecting this upgrade strategy, all applications across all projects will be upgraded at the same time.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "roles"
|
||||
}, `Roles`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Roles`), ` section, you define the role of the multi-cluster application. Typically, when a user `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/helm-charts-in-rancher/"
|
||||
}, `launches catalog applications`), `, that specific user's permissions are used for creation of all workloads/resources that is required by the app.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For multi-cluster applications, the application is deployed by a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `system user`), ` and is assigned as the creator of all underlying resources. A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `system user`), ` is used instead of the actual user due to the fact that the actual user could be removed from one of the target projects. If the actual user was removed from one of the projects, then that user would no longer be able to manage the application for the other projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher will let you select from two options for Roles, `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Project`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), `. Rancher will allow creation using any of these roles based on the user's permissions.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Project`), ` - This is the equivalent of a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project member`), `. If you select this role, Rancher will check that in all the target projects, the user has minimally the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project member`), ` role. While the user might not be explicitly granted the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `project member`), ` role, if the user is an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions"
|
||||
}, `administrator`), `, a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner`), `, or a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project owner`), `, then the user is considered to have the appropriate level of permissions.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), ` - This is the equivalent of a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner`), `. If you select this role, Rancher will check that in all the target projects, the user has minimally the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `cluster owner`), ` role. While the user might not be explicitly granted the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `cluster owner`), ` role, if the user is an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions"
|
||||
}, `administrator`), `, then the user is considered to have the appropriate level of permissions.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `When launching the application, Rancher will confirm if you have these permissions in the target projects before launching the application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `There are some applications like `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Grafana`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Datadog`), ` that require access to specific cluster-scoped resources. These applications will require the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), ` role. If you find out later that the application requires cluster roles, the multi-cluster application can be upgraded to update the roles.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "application-configuration-options"
|
||||
}, `Application Configuration Options`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For each Helm chart, there are a list of desired answers that must be entered in order to successfully deploy the chart. When entering answers, you must format them using the syntax rules found in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set"
|
||||
}, `Using Helm: The format and limitations of –set`), `, as Rancher passes them as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `--set`), ` flags to Helm.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Example",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `When entering an answer that includes two values separated by a comma (i.e. `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `abc, bcd`), `), it is required to wrap the values with double quotes (i.e., `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `"abc, bcd"`), `).`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "using-a-questionsyml-file"
|
||||
}, `Using a questions.yml file`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If the Helm chart that you are deploying contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `questions.yml`), ` file, Rancher's UI will translate this file to display an easy to use UI to collect the answers for the questions.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "key-value-pairs-for-native-helm-charts"
|
||||
}, `Key Value Pairs for Native Helm Charts`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For native Helm charts (i.e., charts from the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Helm Stable`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Helm Incubator`), ` catalogs or a custom Helm chart repository, answers are provided as key value pairs in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answers`), ` section. These answers are used to override the default values.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "members"
|
||||
}, `Members`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `By default, multi-cluster applications can only be managed by the user who created it. In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Members`), ` section, other users can be added so that they can also help manage or view the multi-cluster application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Find the user that you want to add by typing in the member's name in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Member`), ` search box.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Access Type`), ` for that member. There are three access types for a multi-cluster project, but due to how the permissions of a multi-cluster application are launched, please read carefully to understand what these access types mean.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Owner`), `: This access type can manage any configuration part of the multi-cluster application including the template version, the `, `[multi-cluster applications specific configuration options]`, `(#Multi-cluster App Configuration Options), the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), `, the members who can interact with the multi-cluster application and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), `. Since a multi-cluster application is created with a different set of permissions from the user, any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `owner`), ` of the multi-cluster application can manage/remove applications in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#targets"
|
||||
}, `target projects`), ` without explicitly having access to these project(s). Only trusted users should be provided with this access type.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Member`), `: This access type can only modify the template version, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), ` and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), `. Since a multi-cluster application is created with a different set of permissions from the user, any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `member`), ` of the multi-cluster application can modify the application without explicitly having access to these project(s). Only trusted users should be provided with this access type.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Read-only`), `: This access type cannot modify any configuration option for the multi-cluster application. Users can only view these applications.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
parentName: "li",
|
||||
"type": "caution"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `Please ensure only trusted users are given `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Owner`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Member`), ` access as they will automatically be able to manage applications created for this multi-cluster application in target projects they might not have direct access to.`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "overriding-application-configuration-options-for-specific-projects"
|
||||
}, `Overriding Application Configuration Options for Specific Projects`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The ability to use the same configuration to deploy the same application across multiple clusters/projects is one of the main benefits of multi-cluster applications. There might be a specific project that requires a slightly different configuration option, but you want to manage that application with all the other matching applications. Instead of creating a brand new application, you can override specific `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), ` for specific projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answer Overrides`), ` section, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Add Override`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `For each override, you can select the following:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Scope`), `: Select which target projects you want to override the answer in the configuration option.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Question`), `: Select which question you want to override.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answer`), `: Enter the answer that you want to be used instead.`))))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "upgrading-multi-cluster-app-roles-and-projects"
|
||||
}, `Upgrading Multi-Cluster App Roles and Projects`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Changing Roles on an existing Multi-Cluster app`), `
|
||||
The creator and any users added with the access-type "owner" to a multi-cluster app, can upgrade its Roles. When adding a new Role, we check if the user has that exact role in all current target projects. These checks allow the same relaxations for global admins, cluster owners and project-owners as described in the installation section for the field `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `Roles`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Adding/Removing target projects`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `The creator and any users added with access-type "owner" to a multi-cluster app, can add or remove its target projects. When adding a new project, we check if the caller of this request has all Roles defined on multi-cluster app, in the new projects they want to add. The roles checks are again relaxed for global admins, cluster-owners and project-owners.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `We do not do these membership checks when removing target projects. This is because the caller's permissions could have with respect to the target project, or the project could have been deleted and hence the caller wants to remove it from targets list.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-application-management"
|
||||
}, `Multi-Cluster Application Management`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `One of the benefits of using a multi-cluster application as opposed to multiple individual applications of the same type, is the ease of management. Multi-cluster applications can be cloned, upgraded or rolled back.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Prerequisite:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `legacy`), ` feature flag needs to be enabled.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Multi-cluster Apps`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Choose the multi-cluster application you want to take one of these actions on and click the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `⋮`), `. Select one of the following options:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Clone`), `: Creates another multi-cluster application with the same configuration. By using this option, you can easily duplicate a multi-cluster application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Upgrade`), `: Upgrade your multi-cluster application to change some part of the configuration. When performing an upgrade for multi-cluster application, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#upgrades"
|
||||
}, `upgrade strategy`), ` can be modified if you have the correct `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#members"
|
||||
}, `access type`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Rollback`), `: Rollback your application to a specific version. If after an upgrade, there are issues for your multi-cluster application for one or more of your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#targets"
|
||||
}, `targets`), `, Rancher has stored up to 10 versions of the multi-cluster application. Rolling back a multi-cluster application reverts the application for `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `all`), ` target clusters and projects, not just the targets(s) affected by the upgrade issue.`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "deleting-a-multi-cluster-application"
|
||||
}, `Deleting a Multi-Cluster Application`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Prerequisite:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `legacy`), ` feature flag needs to be enabled.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Multi-cluster Apps`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Choose the multi-cluster application you want to delete and click the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `⋮ > Delete`), `. When deleting the multi-cluster application, all applications and namespaces are deleted in all of the target projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
parentName: "li",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The applications in the target projects, that are created for a multi-cluster application, cannot be deleted individually. The applications can only be deleted when the multi-cluster application is deleted.`)))));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -335,8 +335,8 @@ const metadata = {
|
||||
"permalink": "/how-to-guides/new-user-guides/helm-charts-in-rancher/"
|
||||
},
|
||||
"next": {
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/"
|
||||
"title": "Backups and Disaster Recovery",
|
||||
"permalink": "/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/getting-started/installation-and-upgrade/installation-references/feature-flags.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1703291432,
|
||||
"formattedLastUpdatedAt": "Dec 23, 2023",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Feature Flags"
|
||||
},
|
||||
@@ -382,8 +382,8 @@ function MDXContent(_param) {
|
||||
parentName: "li"
|
||||
}, `fleet`), `: The Rancher provisioning framework in v2.6 and later requires Fleet. The flag will be automatically enabled when you upgrade, even if you disabled this flag in an earlier version of Rancher. See `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet - GitOps at Scale`), ` for more information.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/"
|
||||
}, `Continuous Delivery with Fleet`), ` for more information.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
@@ -335,8 +335,8 @@ const metadata = {
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/helm-charts-in-rancher/"
|
||||
},
|
||||
"next": {
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/"
|
||||
"title": "Backups and Disaster Recovery",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
@@ -343,8 +343,8 @@ const metadata = {
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Multi-cluster Apps",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
"title": "Creating Apps",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps"
|
||||
},
|
||||
"next": {
|
||||
"title": "Backup Restore Usage Guide",
|
||||
@@ -1,523 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[49168],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 17338:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Continuous Delivery with Fleet'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"id": "version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"description": "Continuous Delivery with Fleet is GitOps at scale. Fleet is designed to manage up to a million clusters. It's also lightweight enough that it works great for a single cluster too, but it really shines when you get to a large scale. By large scale we mean either a lot of clusters, a lot of deployments, or a lot of teams in a single organization.",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1701897451,
|
||||
"formattedLastUpdatedAt": "Dec 6, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Continuous Delivery with Fleet"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/"
|
||||
},
|
||||
"next": {
|
||||
"title": "Multi-cluster Apps",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Architecture',
|
||||
id: 'architecture',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Accessing Fleet in the Rancher UI',
|
||||
id: 'accessing-fleet-in-the-rancher-ui',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Windows Support',
|
||||
id: 'windows-support',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'GitHub Repository',
|
||||
id: 'github-repository',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Using Fleet Behind a Proxy',
|
||||
id: 'using-fleet-behind-a-proxy',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Helm Chart Dependencies',
|
||||
id: 'helm-chart-dependencies',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Troubleshooting',
|
||||
id: 'troubleshooting',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Documentation',
|
||||
id: 'documentation',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Continuous Delivery with Fleet is GitOps at scale. Fleet is designed to manage up to a million clusters. It's also lightweight enough that it works great for a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/installation#default-install"
|
||||
}, `single cluster`), ` too, but it really shines when you get to a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/installation#configuration-for-multi-cluster"
|
||||
}, `large scale.`), ` By large scale we mean either a lot of clusters, a lot of deployments, or a lot of teams in a single organization.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet is a separate project from Rancher, and can be installed on any Kubernetes cluster with Helm.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "architecture"
|
||||
}, `Architecture`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For information about how Fleet works, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/architecture"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "accessing-fleet-in-the-rancher-ui"
|
||||
}, `Accessing Fleet in the Rancher UI`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet comes preinstalled in Rancher and is managed by the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Continous Delivery`), ` option in the Rancher UI. For additional information on Continuous Delivery and other Fleet troubleshooting tips, refer `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/troubleshooting"
|
||||
}, `here`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Users can leverage continuous delivery to deploy their applications to the Kubernetes clusters in the git repository without any manual operation by following `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `gitops`), ` practice.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Follow the steps below to access Continuous Delivery in the Rancher UI:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Continuous Delivery`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select your namespace at the top of the menu, noting the following:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `By default,`, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `fleet-default`), ` is selected which includes all downstream clusters that are registered through Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `You may switch to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `fleet-local`), `, which only contains the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `local`), ` cluster, or you may create your own workspace to which you may assign and move clusters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `You can then manage clusters by clicking on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Clusters`), ` on the left navigation bar.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Click on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Gitrepos`), ` on the left navigation bar to deploy the gitrepo into your clusters in the current workspace.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/gitrepo-add"
|
||||
}, `git repository`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/gitrepo-targets"
|
||||
}, `target clusters/cluster group`), `. You can also create the cluster group in the UI by clicking on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster Groups`), ` from the left navigation bar.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Once the gitrepo is deployed, you can monitor the application through the Rancher UI.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "windows-support"
|
||||
}, `Windows Support`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For details on support for clusters with Windows nodes, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/windows-support"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "github-repository"
|
||||
}, `GitHub Repository`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Fleet Helm charts are available `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://github.com/rancher/fleet/releases/latest"
|
||||
}, `here.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "using-fleet-behind-a-proxy"
|
||||
}, `Using Fleet Behind a Proxy`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For details on using Fleet behind a proxy, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/use-fleet-behind-a-proxy"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "helm-chart-dependencies"
|
||||
}, `Helm Chart Dependencies`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In order for Helm charts with dependencies to deploy successfully, you must run a manual command (as listed below), as it is up to the user to fulfill the dependency list. If you do not do this and proceed to clone your repository and run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm install`), `, your installation will fail because the dependencies will be missing.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Helm chart in the git repository must include its dependencies in the charts subdirectory. You must either manually run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm dependencies update $chart`), ` or run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm dependencies build $chart`), ` locally, then commit the complete charts directory to your git repository. Note that you will update your commands with the applicable parameters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "troubleshooting"
|
||||
}, `Troubleshooting`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("hr", null), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Known Issue:`), ` clientSecretName and helmSecretName secrets for Fleet gitrepos are not included in the backup nor restore created by the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher#1-install-the-rancher-backup-operator"
|
||||
}, `backup-restore-operator`), `. We will update the community once a permanent solution is in place.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Temporary Workaround:`), ` `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br", null), `
|
||||
By default, user-defined secrets are not backed up in Fleet. It is necessary to recreate secrets if performing a disaster recovery restore or migration of Rancher into a fresh cluster. To modify resourceSet to include extra resources you want to backup, refer to docs `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://github.com/rancher/backup-restore-operator#user-flow"
|
||||
}, `here`), `.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("hr", null), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "documentation"
|
||||
}, `Documentation`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Fleet documentation is at `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/"
|
||||
}, `https://fleet.rancher.io/.`)));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1712589921,
|
||||
"formattedLastUpdatedAt": "Apr 8, 2024",
|
||||
"lastUpdatedAt": 1712627098,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Users and Groups"
|
||||
},
|
||||
@@ -386,7 +386,7 @@ function MDXContent(_param) {
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When you configure an external authentication provider, users from that provider will be able to log in to your Rancher server. When a user logs in, the authentication provider will supply your Rancher server with a list of groups to which the user belongs.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Access to clusters, projects, multi-cluster apps, and global DNS providers and entries can be controlled by adding either individual users or groups to these resources. When you add a group to a resource, all users who are members of that group in the authentication provider, will be able to access the resource with the permissions that you've specified for the group. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When you configure an external authentication provider, users from that provider will be able to log in to your Rancher server. When a user logs in, the authentication provider will supply your Rancher server with a list of groups to which the user belongs.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Access to clusters, projects, and global DNS providers and entries can be controlled by adding either individual users or groups to these resources. When you add a group to a resource, all users who are members of that group in the authentication provider, will be able to access the resource with the permissions that you've specified for the group. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/"
|
||||
}, `Role Based Access Control`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -325,8 +325,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/authentication-config.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1709828317,
|
||||
"formattedLastUpdatedAt": "Mar 7, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Configuring Authentication",
|
||||
"weight": 10
|
||||
@@ -507,7 +507,7 @@ function MDXContent(_param) {
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/create-local-users"
|
||||
}, `local authentication`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In most cases, you should use an external authentication service over local authentication, as external authentication allows user management from a central location. However, you may want a few local authentication users for managing Rancher under rare circumstances, such as if your external authentication provider is unavailable or undergoing maintenance.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "users-and-groups"
|
||||
}, `Users and Groups`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When authenticating with an external provider, groups are provided from the external provider based on the user. These users and groups are given specific roles to resources like clusters, projects, multi-cluster apps, and global DNS providers and entries. When you give access to a group, all users who are a member of that group in the authentication provider will be able to access the resource with the permissions that you've specified. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
}, `Users and Groups`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When authenticating with an external provider, groups are provided from the external provider based on the user. These users and groups are given specific roles to resources like clusters, projects, and global DNS providers and entries. When you give access to a group, all users who are a member of that group in the authentication provider will be able to access the resource with the permissions that you've specified. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/"
|
||||
}, `Role Based Access Control`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
@@ -315,7 +315,7 @@ const metadata = {
|
||||
"unversionedId": "how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
"id": "how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
"title": "Continuous Delivery",
|
||||
"description": "Fleet comes preinstalled in Rancher can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the continuous-delivery feature flag.",
|
||||
"description": "Continuous Delivery with Fleet comes preinstalled in Rancher and can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the continuous-delivery feature flag.",
|
||||
"source": "@site/docs/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md",
|
||||
"sourceDirName": "how-to-guides/advanced-user-guides/enable-experimental-features",
|
||||
"slug": "/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1703280782,
|
||||
"formattedLastUpdatedAt": "Dec 22, 2023",
|
||||
"lastUpdatedAt": 1712679064,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Continuous Delivery"
|
||||
},
|
||||
@@ -357,8 +357,8 @@ function MDXContent(_param) {
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet`), ` comes preinstalled in Rancher can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
"href": "/integrations-in-rancher/fleet/"
|
||||
}, `Continuous Delivery with Fleet`), ` comes preinstalled in Rancher and can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `continuous-delivery`), ` feature flag.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To enable or disable this feature, refer to the instructions on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
@@ -1,523 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[71416],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 91723:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Continuous Delivery with Fleet'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"id": "how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"description": "Continuous Delivery with Fleet is GitOps at scale. Fleet is designed to manage up to a million clusters. It's also lightweight enough that it works great for a single cluster too, but it really shines when you get to a large scale. By large scale we mean either a lot of clusters, a lot of deployments, or a lot of teams in a single organization.",
|
||||
"source": "@site/docs/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1701897451,
|
||||
"formattedLastUpdatedAt": "Dec 6, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Continuous Delivery with Fleet"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/"
|
||||
},
|
||||
"next": {
|
||||
"title": "Multi-cluster Apps",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Architecture',
|
||||
id: 'architecture',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Accessing Fleet in the Rancher UI',
|
||||
id: 'accessing-fleet-in-the-rancher-ui',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Windows Support',
|
||||
id: 'windows-support',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'GitHub Repository',
|
||||
id: 'github-repository',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Using Fleet Behind a Proxy',
|
||||
id: 'using-fleet-behind-a-proxy',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Helm Chart Dependencies',
|
||||
id: 'helm-chart-dependencies',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Troubleshooting',
|
||||
id: 'troubleshooting',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Documentation',
|
||||
id: 'documentation',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Continuous Delivery with Fleet is GitOps at scale. Fleet is designed to manage up to a million clusters. It's also lightweight enough that it works great for a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/installation#default-install"
|
||||
}, `single cluster`), ` too, but it really shines when you get to a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/installation#configuration-for-multi-cluster"
|
||||
}, `large scale.`), ` By large scale we mean either a lot of clusters, a lot of deployments, or a lot of teams in a single organization.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet is a separate project from Rancher, and can be installed on any Kubernetes cluster with Helm.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "architecture"
|
||||
}, `Architecture`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For information about how Fleet works, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/integrations-in-rancher/fleet/architecture"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "accessing-fleet-in-the-rancher-ui"
|
||||
}, `Accessing Fleet in the Rancher UI`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet comes preinstalled in Rancher and is managed by the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Continous Delivery`), ` option in the Rancher UI. For additional information on Continuous Delivery and other Fleet troubleshooting tips, refer `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/troubleshooting"
|
||||
}, `here`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Users can leverage continuous delivery to deploy their applications to the Kubernetes clusters in the git repository without any manual operation by following `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `gitops`), ` practice.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Follow the steps below to access Continuous Delivery in the Rancher UI:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Continuous Delivery`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select your namespace at the top of the menu, noting the following:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `By default,`, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `fleet-default`), ` is selected which includes all downstream clusters that are registered through Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `You may switch to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `fleet-local`), `, which only contains the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `local`), ` cluster, or you may create your own workspace to which you may assign and move clusters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `You can then manage clusters by clicking on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Clusters`), ` on the left navigation bar.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Click on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Gitrepos`), ` on the left navigation bar to deploy the gitrepo into your clusters in the current workspace.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/gitrepo-add"
|
||||
}, `git repository`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/gitrepo-targets"
|
||||
}, `target clusters/cluster group`), `. You can also create the cluster group in the UI by clicking on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster Groups`), ` from the left navigation bar.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Once the gitrepo is deployed, you can monitor the application through the Rancher UI.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "windows-support"
|
||||
}, `Windows Support`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For details on support for clusters with Windows nodes, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/integrations-in-rancher/fleet/windows-support"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "github-repository"
|
||||
}, `GitHub Repository`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Fleet Helm charts are available `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://github.com/rancher/fleet/releases/latest"
|
||||
}, `here.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "using-fleet-behind-a-proxy"
|
||||
}, `Using Fleet Behind a Proxy`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For details on using Fleet behind a proxy, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/integrations-in-rancher/fleet/use-fleet-behind-a-proxy"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "helm-chart-dependencies"
|
||||
}, `Helm Chart Dependencies`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In order for Helm charts with dependencies to deploy successfully, you must run a manual command (as listed below), as it is up to the user to fulfill the dependency list. If you do not do this and proceed to clone your repository and run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm install`), `, your installation will fail because the dependencies will be missing.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Helm chart in the git repository must include its dependencies in the charts subdirectory. You must either manually run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm dependencies update $chart`), ` or run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm dependencies build $chart`), ` locally, then commit the complete charts directory to your git repository. Note that you will update your commands with the applicable parameters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "troubleshooting"
|
||||
}, `Troubleshooting`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("hr", null), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Known Issue:`), ` clientSecretName and helmSecretName secrets for Fleet gitrepos are not included in the backup nor restore created by the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher#1-install-the-rancher-backup-operator"
|
||||
}, `backup-restore-operator`), `. We will update the community once a permanent solution is in place.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Temporary Workaround:`), ` `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br", null), `
|
||||
By default, user-defined secrets are not backed up in Fleet. It is necessary to recreate secrets if performing a disaster recovery restore or migration of Rancher into a fresh cluster. To modify resourceSet to include extra resources you want to backup, refer to docs `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://github.com/rancher/backup-restore-operator#user-flow"
|
||||
}, `here`), `.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("hr", null), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "documentation"
|
||||
}, `Documentation`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Fleet documentation is at `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/"
|
||||
}, `https://fleet.rancher.io/.`)));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -315,7 +315,7 @@ const metadata = {
|
||||
"unversionedId": "how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
"id": "version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
"title": "Continuous Delivery",
|
||||
"description": "Fleet comes preinstalled in Rancher can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the continuous-delivery feature flag.",
|
||||
"description": "Continuous Delivery with Fleet comes preinstalled in Rancher and can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the continuous-delivery feature flag.",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md",
|
||||
"sourceDirName": "how-to-guides/advanced-user-guides/enable-experimental-features",
|
||||
"slug": "/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1703291432,
|
||||
"formattedLastUpdatedAt": "Dec 23, 2023",
|
||||
"lastUpdatedAt": 1712679064,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Continuous Delivery"
|
||||
},
|
||||
@@ -357,8 +357,8 @@ function MDXContent(_param) {
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet`), ` comes preinstalled in Rancher can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/"
|
||||
}, `Continuous Delivery with Fleet`), ` comes preinstalled in Rancher and can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `continuous-delivery`), ` feature flag.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To enable or disable this feature, refer to the instructions on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1712589921,
|
||||
"formattedLastUpdatedAt": "Apr 8, 2024",
|
||||
"lastUpdatedAt": 1712627098,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Users and Groups"
|
||||
},
|
||||
@@ -386,7 +386,7 @@ function MDXContent(_param) {
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When you configure an external authentication provider, users from that provider will be able to log in to your Rancher server. When a user logs in, the authentication provider will supply your Rancher server with a list of groups to which the user belongs.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Access to clusters, projects, multi-cluster apps, and global DNS providers and entries can be controlled by adding either individual users or groups to these resources. When you add a group to a resource, all users who are members of that group in the authentication provider, will be able to access the resource with the permissions that you've specified for the group. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When you configure an external authentication provider, users from that provider will be able to log in to your Rancher server. When a user logs in, the authentication provider will supply your Rancher server with a list of groups to which the user belongs.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Access to clusters, projects, and global DNS providers and entries can be controlled by adding either individual users or groups to these resources. When you add a group to a resource, all users who are members of that group in the authentication provider, will be able to access the resource with the permissions that you've specified for the group. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/"
|
||||
}, `Role Based Access Control`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/reference-guides/rancher-security/security-advisories-and-cves.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1707500737,
|
||||
"formattedLastUpdatedAt": "Feb 9, 2024",
|
||||
"lastUpdatedAt": 1712628216,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Security Advisories and CVEs"
|
||||
},
|
||||
@@ -952,8 +952,8 @@ function MDXContent(_param) {
|
||||
"align": null
|
||||
}, `This vulnerability only affects customers using `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "td",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet`), ` for continuous delivery with authenticated Git and/or Helm repositories. An issue was discovered in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
"href": "/v2.7/integrations-in-rancher/fleet-gitops-at-scale/"
|
||||
}, `Continuous Delivery with Fleet`), ` for continuous delivery with authenticated Git and/or Helm repositories. An issue was discovered in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "td"
|
||||
}, `go-getter`), ` library in versions prior to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "td",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/reference-guides/rancher-security/security-advisories-and-cves.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1707500737,
|
||||
"formattedLastUpdatedAt": "Feb 9, 2024",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Security Advisories and CVEs"
|
||||
},
|
||||
@@ -952,8 +952,8 @@ function MDXContent(_param) {
|
||||
"align": null
|
||||
}, `This vulnerability only affects customers using `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "td",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet`), ` for continuous delivery with authenticated Git and/or Helm repositories. An issue was discovered in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/"
|
||||
}, `Continuous Delivery with Fleet`), ` for continuous delivery with authenticated Git and/or Helm repositories. An issue was discovered in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "td"
|
||||
}, `go-getter`), ` library in versions prior to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "td",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/getting-started/installation-and-upgrade/installation-references/feature-flags.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1705011762,
|
||||
"formattedLastUpdatedAt": "Jan 11, 2024",
|
||||
"lastUpdatedAt": 1712628216,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Feature Flags"
|
||||
},
|
||||
@@ -382,8 +382,8 @@ function MDXContent(_param) {
|
||||
parentName: "li"
|
||||
}, `fleet`), `: The Rancher provisioning framework in v2.6 and later requires Fleet. The flag will be automatically enabled when you upgrade, even if you disabled this flag in an earlier version of Rancher. See `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet - GitOps at Scale`), ` for more information.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
"href": "/v2.7/integrations-in-rancher/fleet-gitops-at-scale/"
|
||||
}, `Continuous Delivery with Fleet`), ` for more information.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/integrations-in-rancher/harvester/overview.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1706551642,
|
||||
"formattedLastUpdatedAt": "Jan 29, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Overview"
|
||||
},
|
||||
@@ -385,7 +385,7 @@ function MDXContent(_param) {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `If the Harvester feature flag is enabled, Harvester clusters will be filtered out from any pages or apps (such as Fleet and the multi-cluster app) that list Kubernetes clusters.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
}, `If the Harvester feature flag is enabled, Harvester clusters will be filtered out from any pages or apps (such as Continuous Delivery with Fleet) that list Kubernetes clusters.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
@@ -1,5 +1,5 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[92],{
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[71416],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
@@ -1,386 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[22532],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 15989:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Deploying Applications across Clusters'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters",
|
||||
"id": "how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters",
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"description": "Rancher offers several ways to deploy applications across clusters, depending on version.",
|
||||
"source": "@site/docs/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1706551642,
|
||||
"formattedLastUpdatedAt": "Jan 29, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Deploying Applications across Clusters"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Creating Apps",
|
||||
"permalink": "/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps"
|
||||
},
|
||||
"next": {
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Fleet',
|
||||
id: 'fleet',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-cluster Apps',
|
||||
id: 'multi-cluster-apps',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher offers several ways to deploy applications across clusters, depending on version.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "fleet"
|
||||
}, `Fleet`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher v2.5 and later uses Fleet to deploy applications across clusters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Continuous Delivery with Fleet is GitOps at scale. For more information, refer to the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet section`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-apps"
|
||||
}, `Multi-cluster Apps`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In Rancher before v2.5, the multi-cluster apps feature was used to deploy applications across clusters. The multi-cluster apps feature is deprecated, but still available as a legacy feature.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `See the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
}, `multi-cluster app documentation`), ` for more details.`));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -343,8 +343,8 @@ const metadata = {
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Multi-cluster Apps",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
"title": "Creating Apps",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps"
|
||||
},
|
||||
"next": {
|
||||
"title": "Backup Restore Usage Guide",
|
||||
@@ -1,386 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[6673],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 78022:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Deploying Applications across Clusters'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters",
|
||||
"id": "version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters",
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"description": "Rancher offers several ways to deploy applications across clusters, depending on version.",
|
||||
"source": "@site/versioned_docs/version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1706551642,
|
||||
"formattedLastUpdatedAt": "Jan 29, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Deploying Applications across Clusters"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Creating Apps",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps"
|
||||
},
|
||||
"next": {
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Fleet',
|
||||
id: 'fleet',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-cluster Apps',
|
||||
id: 'multi-cluster-apps',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher offers several ways to deploy applications across clusters, depending on version.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "fleet"
|
||||
}, `Fleet`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher v2.5 and later uses Fleet to deploy applications across clusters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Continuous Delivery with Fleet is GitOps at scale. For more information, refer to the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet section`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-apps"
|
||||
}, `Multi-cluster Apps`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In Rancher before v2.5, the multi-cluster apps feature was used to deploy applications across clusters. The multi-cluster apps feature is deprecated, but still available as a legacy feature.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `See the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
}, `multi-cluster app documentation`), ` for more details.`));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -1,386 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[60792],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 82389:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Deploying Applications across Clusters'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters",
|
||||
"id": "version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters",
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"description": "Rancher offers several ways to deploy applications across clusters, depending on version.",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/deploy-apps-across-clusters.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1706551642,
|
||||
"formattedLastUpdatedAt": "Jan 29, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Deploying Applications across Clusters"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Creating Apps",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps"
|
||||
},
|
||||
"next": {
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Fleet',
|
||||
id: 'fleet',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-cluster Apps',
|
||||
id: 'multi-cluster-apps',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher offers several ways to deploy applications across clusters, depending on version.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "fleet"
|
||||
}, `Fleet`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher v2.5 and later uses Fleet to deploy applications across clusters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Continuous Delivery with Fleet is GitOps at scale. For more information, refer to the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet section`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-apps"
|
||||
}, `Multi-cluster Apps`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In Rancher before v2.5, the multi-cluster apps feature was used to deploy applications across clusters. The multi-cluster apps feature is deprecated, but still available as a legacy feature.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `See the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
}, `multi-cluster app documentation`), ` for more details.`));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1688152309,
|
||||
"formattedLastUpdatedAt": "Jun 30, 2023",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Backing up Rancher"
|
||||
},
|
||||
@@ -426,7 +426,7 @@ function MDXContent(_param) {
|
||||
parentName: "admonition"
|
||||
}, `There is a known issue in Fleet that occurs after performing a restoration using the backup-restore-operator: Secrets used for clientSecretName and helmSecretName are not included in Fleet gitrepos. Refer `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#troubleshooting"
|
||||
"href": "/integrations-in-rancher/fleet/overview#troubleshooting"
|
||||
}, `here`), ` for a workaround.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "2-perform-a-backup"
|
||||
}, `2. Perform a Backup`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To perform a backup, a custom resource of type Backup must be created.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
@@ -335,8 +335,8 @@ const metadata = {
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/helm-charts-in-rancher/"
|
||||
},
|
||||
"next": {
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/"
|
||||
"title": "Backups and Disaster Recovery",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/getting-started/installation-and-upgrade/installation-references/feature-flags.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1703280782,
|
||||
"formattedLastUpdatedAt": "Dec 22, 2023",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Feature Flags"
|
||||
},
|
||||
@@ -382,8 +382,8 @@ function MDXContent(_param) {
|
||||
parentName: "li"
|
||||
}, `fleet`), `: The Rancher provisioning framework in v2.6 and later requires Fleet. The flag will be automatically enabled when you upgrade, even if you disabled this flag in an earlier version of Rancher. See `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet - GitOps at Scale`), ` for more information.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
"href": "/integrations-in-rancher/fleet/"
|
||||
}, `Continuous Delivery with Fleet`), ` for more information.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1696627994,
|
||||
"formattedLastUpdatedAt": "Oct 6, 2023",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Backing up Rancher"
|
||||
},
|
||||
@@ -426,7 +426,7 @@ function MDXContent(_param) {
|
||||
parentName: "admonition"
|
||||
}, `There is a known issue in Fleet that occurs after performing a restoration using the backup-restore-operator: Secrets used for clientSecretName and helmSecretName are not included in Fleet gitrepos. Refer `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#troubleshooting"
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/overview#troubleshooting"
|
||||
}, `here`), ` for a workaround.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "2-perform-a-backup"
|
||||
}, `2. Perform a Backup`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To perform a backup, a custom resource of type Backup must be created.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1712589921,
|
||||
"formattedLastUpdatedAt": "Apr 8, 2024",
|
||||
"lastUpdatedAt": 1712627098,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Users and Groups"
|
||||
},
|
||||
@@ -386,7 +386,7 @@ function MDXContent(_param) {
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/manage-users-and-groups"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When you configure an external authentication provider, users from that provider will be able to log in to your Rancher server. When a user logs in, the authentication provider will supply your Rancher server with a list of groups to which the user belongs.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Access to clusters, projects, multi-cluster apps, and global DNS providers and entries can be controlled by adding either individual users or groups to these resources. When you add a group to a resource, all users who are members of that group in the authentication provider, will be able to access the resource with the permissions that you've specified for the group. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When you configure an external authentication provider, users from that provider will be able to log in to your Rancher server. When a user logs in, the authentication provider will supply your Rancher server with a list of groups to which the user belongs.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Access to clusters, projects, and global DNS providers and entries can be controlled by adding either individual users or groups to these resources. When you add a group to a resource, all users who are members of that group in the authentication provider, will be able to access the resource with the permissions that you've specified for the group. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/"
|
||||
}, `Role Based Access Control`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
@@ -315,7 +315,7 @@ const metadata = {
|
||||
"unversionedId": "how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
"id": "version-2.7/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
"title": "Continuous Delivery",
|
||||
"description": "Fleet comes preinstalled in Rancher can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the continuous-delivery feature flag.",
|
||||
"description": "Continuous Delivery with Fleet comes preinstalled in Rancher and can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the continuous-delivery feature flag.",
|
||||
"source": "@site/versioned_docs/version-2.7/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md",
|
||||
"sourceDirName": "how-to-guides/advanced-user-guides/enable-experimental-features",
|
||||
"slug": "/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1705011762,
|
||||
"formattedLastUpdatedAt": "Jan 11, 2024",
|
||||
"lastUpdatedAt": 1712679064,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Continuous Delivery"
|
||||
},
|
||||
@@ -357,8 +357,8 @@ function MDXContent(_param) {
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/advanced-user-guides/enable-experimental-features/continuous-delivery"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet`), ` comes preinstalled in Rancher can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
"href": "/v2.7/integrations-in-rancher/fleet-gitops-at-scale/"
|
||||
}, `Continuous Delivery with Fleet`), ` comes preinstalled in Rancher and can't be fully disabled. However, the Fleet feature for GitOps continuous delivery may be disabled using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `continuous-delivery`), ` feature flag.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To enable or disable this feature, refer to the instructions on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1703291432,
|
||||
"formattedLastUpdatedAt": "Dec 23, 2023",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Updating the Rancher Certificate"
|
||||
},
|
||||
@@ -716,7 +716,7 @@ kubectl edit -n cattle-system deployment/cattle-cluster-agent
|
||||
"id": "5-force-update-fleet-clusters-to-reconnect-the-fleet-agent-to-rancher"
|
||||
}, `5. Force Update Fleet clusters to reconnect the fleet-agent to Rancher`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Select 'Force Update' for the clusters within the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#accessing-fleet-in-the-rancher-ui"
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/overview#accessing-fleet-in-the-rancher-ui"
|
||||
}, `Continuous Delivery`), ` view of the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h4", {
|
||||
"id": "why-is-this-step-required-1"
|
||||
}, `Why is this step required?`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet agents in Rancher managed clusters store a kubeconfig that is used to connect to Rancher. The kubeconfig contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
@@ -836,7 +836,7 @@ kubectl edit -n cattle-system deployment/cattle-cluster-agent
|
||||
"id": "5-force-update-fleet-clusters-to-reconnect-the-fleet-agent-to-rancher-1"
|
||||
}, `5. Force Update Fleet clusters to reconnect the fleet-agent to Rancher`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Select 'Force Update' for the clusters within the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#accessing-fleet-in-the-rancher-ui"
|
||||
"href": "/v2.8/integrations-in-rancher/fleet/overview#accessing-fleet-in-the-rancher-ui"
|
||||
}, `Continuous Delivery`), ` view of the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h4", {
|
||||
"id": "why-is-this-step-required-2"
|
||||
}, `Why is this step required?`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet agents in Rancher managed clusters store a kubeconfig that is used to connect to Rancher. The kubeconfig contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
@@ -325,8 +325,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/authentication-config.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1709828317,
|
||||
"formattedLastUpdatedAt": "Mar 7, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Configuring Authentication",
|
||||
"weight": 10
|
||||
@@ -507,7 +507,7 @@ function MDXContent(_param) {
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/create-local-users"
|
||||
}, `local authentication`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In most cases, you should use an external authentication service over local authentication, as external authentication allows user management from a central location. However, you may want a few local authentication users for managing Rancher under rare circumstances, such as if your external authentication provider is unavailable or undergoing maintenance.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "users-and-groups"
|
||||
}, `Users and Groups`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When authenticating with an external provider, groups are provided from the external provider based on the user. These users and groups are given specific roles to resources like clusters, projects, multi-cluster apps, and global DNS providers and entries. When you give access to a group, all users who are a member of that group in the authentication provider will be able to access the resource with the permissions that you've specified. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
}, `Users and Groups`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When authenticating with an external provider, groups are provided from the external provider based on the user. These users and groups are given specific roles to resources like clusters, projects, and global DNS providers and entries. When you give access to a group, all users who are a member of that group in the authentication provider will be able to access the resource with the permissions that you've specified. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/"
|
||||
}, `Role Based Access Control`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
@@ -343,8 +343,8 @@ const metadata = {
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Multi-cluster Apps",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
"title": "Creating Apps",
|
||||
"permalink": "/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps"
|
||||
},
|
||||
"next": {
|
||||
"title": "Backup Restore Usage Guide",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/about-rke1-templates/infrastructure.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1711641527,
|
||||
"formattedLastUpdatedAt": "Mar 28, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "RKE Templates and Infrastructure"
|
||||
},
|
||||
@@ -400,8 +400,6 @@ function MDXContent(_param) {
|
||||
parentName: "ul"
|
||||
}, `Define almost any kind of infrastructure-as-code, including servers, databases, load balancers, monitoring, firewall settings, and SSL certificates`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Leverage catalog apps and multi-cluster apps`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Codify infrastructure across many platforms, including Rancher and major cloud providers`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `Commit infrastructure-as-code to version control`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/reference-guides/rancher-security/security-advisories-and-cves.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1708099107,
|
||||
"formattedLastUpdatedAt": "Feb 16, 2024",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Security Advisories and CVEs"
|
||||
},
|
||||
@@ -972,8 +972,8 @@ function MDXContent(_param) {
|
||||
"align": null
|
||||
}, `This vulnerability only affects customers using `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "td",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
}, `Fleet`), ` for continuous delivery with authenticated Git and/or Helm repositories. An issue was discovered in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
"href": "/integrations-in-rancher/fleet/"
|
||||
}, `Continuous Delivery with Fleet`), ` for continuous delivery with authenticated Git and/or Helm repositories. An issue was discovered in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "td"
|
||||
}, `go-getter`), ` library in versions prior to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "td",
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1703280782,
|
||||
"formattedLastUpdatedAt": "Dec 22, 2023",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Updating the Rancher Certificate"
|
||||
},
|
||||
@@ -716,7 +716,7 @@ kubectl edit -n cattle-system deployment/cattle-cluster-agent
|
||||
"id": "5-force-update-fleet-clusters-to-reconnect-the-fleet-agent-to-rancher"
|
||||
}, `5. Force Update Fleet clusters to reconnect the fleet-agent to Rancher`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Select 'Force Update' for the clusters within the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#accessing-fleet-in-the-rancher-ui"
|
||||
"href": "/integrations-in-rancher/fleet/overview#accessing-fleet-in-the-rancher-ui"
|
||||
}, `Continuous Delivery`), ` view of the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h4", {
|
||||
"id": "why-is-this-step-required-1"
|
||||
}, `Why is this step required?`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet agents in Rancher managed clusters store a kubeconfig that is used to connect to Rancher. The kubeconfig contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
@@ -836,7 +836,7 @@ kubectl edit -n cattle-system deployment/cattle-cluster-agent
|
||||
"id": "5-force-update-fleet-clusters-to-reconnect-the-fleet-agent-to-rancher-1"
|
||||
}, `5. Force Update Fleet clusters to reconnect the fleet-agent to Rancher`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Select 'Force Update' for the clusters within the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#accessing-fleet-in-the-rancher-ui"
|
||||
"href": "/integrations-in-rancher/fleet/overview#accessing-fleet-in-the-rancher-ui"
|
||||
}, `Continuous Delivery`), ` view of the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h4", {
|
||||
"id": "why-is-this-step-required-2"
|
||||
}, `Why is this step required?`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet agents in Rancher managed clusters store a kubeconfig that is used to connect to Rancher. The kubeconfig contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
@@ -1,523 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[29197],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 55134:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Continuous Delivery with Fleet'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"id": "version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"description": "Continuous Delivery with Fleet is GitOps at scale. Fleet is designed to manage up to a million clusters. It's also lightweight enough that it works great for a single cluster too, but it really shines when you get to a large scale. By large scale we mean either a lot of clusters, a lot of deployments, or a lot of teams in a single organization.",
|
||||
"source": "@site/versioned_docs/version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1701897451,
|
||||
"formattedLastUpdatedAt": "Dec 6, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Continuous Delivery with Fleet"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Deploying Applications across Clusters",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/"
|
||||
},
|
||||
"next": {
|
||||
"title": "Multi-cluster Apps",
|
||||
"permalink": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Architecture',
|
||||
id: 'architecture',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Accessing Fleet in the Rancher UI',
|
||||
id: 'accessing-fleet-in-the-rancher-ui',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Windows Support',
|
||||
id: 'windows-support',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'GitHub Repository',
|
||||
id: 'github-repository',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Using Fleet Behind a Proxy',
|
||||
id: 'using-fleet-behind-a-proxy',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Helm Chart Dependencies',
|
||||
id: 'helm-chart-dependencies',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Troubleshooting',
|
||||
id: 'troubleshooting',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Documentation',
|
||||
id: 'documentation',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Continuous Delivery with Fleet is GitOps at scale. Fleet is designed to manage up to a million clusters. It's also lightweight enough that it works great for a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/installation#default-install"
|
||||
}, `single cluster`), ` too, but it really shines when you get to a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/installation#configuration-for-multi-cluster"
|
||||
}, `large scale.`), ` By large scale we mean either a lot of clusters, a lot of deployments, or a lot of teams in a single organization.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet is a separate project from Rancher, and can be installed on any Kubernetes cluster with Helm.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "architecture"
|
||||
}, `Architecture`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For information about how Fleet works, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/integrations-in-rancher/fleet-gitops-at-scale/architecture"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "accessing-fleet-in-the-rancher-ui"
|
||||
}, `Accessing Fleet in the Rancher UI`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet comes preinstalled in Rancher and is managed by the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Continous Delivery`), ` option in the Rancher UI. For additional information on Continuous Delivery and other Fleet troubleshooting tips, refer `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/troubleshooting"
|
||||
}, `here`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Users can leverage continuous delivery to deploy their applications to the Kubernetes clusters in the git repository without any manual operation by following `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `gitops`), ` practice.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Follow the steps below to access Continuous Delivery in the Rancher UI:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Continuous Delivery`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select your namespace at the top of the menu, noting the following:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `By default,`, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `fleet-default`), ` is selected which includes all downstream clusters that are registered through Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `You may switch to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `fleet-local`), `, which only contains the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `local`), ` cluster, or you may create your own workspace to which you may assign and move clusters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `You can then manage clusters by clicking on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Clusters`), ` on the left navigation bar.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Click on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Gitrepos`), ` on the left navigation bar to deploy the gitrepo into your clusters in the current workspace.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/gitrepo-add"
|
||||
}, `git repository`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/gitrepo-targets"
|
||||
}, `target clusters/cluster group`), `. You can also create the cluster group in the UI by clicking on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster Groups`), ` from the left navigation bar.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Once the gitrepo is deployed, you can monitor the application through the Rancher UI.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "windows-support"
|
||||
}, `Windows Support`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For details on support for clusters with Windows nodes, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/integrations-in-rancher/fleet-gitops-at-scale/windows-support"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "github-repository"
|
||||
}, `GitHub Repository`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Fleet Helm charts are available `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://github.com/rancher/fleet/releases/latest"
|
||||
}, `here.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "using-fleet-behind-a-proxy"
|
||||
}, `Using Fleet Behind a Proxy`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For details on using Fleet behind a proxy, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/integrations-in-rancher/fleet-gitops-at-scale/use-fleet-behind-a-proxy"
|
||||
}, `this page.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "helm-chart-dependencies"
|
||||
}, `Helm Chart Dependencies`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In order for Helm charts with dependencies to deploy successfully, you must run a manual command (as listed below), as it is up to the user to fulfill the dependency list. If you do not do this and proceed to clone your repository and run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm install`), `, your installation will fail because the dependencies will be missing.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Helm chart in the git repository must include its dependencies in the charts subdirectory. You must either manually run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm dependencies update $chart`), ` or run `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `helm dependencies build $chart`), ` locally, then commit the complete charts directory to your git repository. Note that you will update your commands with the applicable parameters.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "troubleshooting"
|
||||
}, `Troubleshooting`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("hr", null), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Known Issue:`), ` clientSecretName and helmSecretName secrets for Fleet gitrepos are not included in the backup nor restore created by the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher#1-install-the-rancher-backup-operator"
|
||||
}, `backup-restore-operator`), `. We will update the community once a permanent solution is in place.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Temporary Workaround:`), ` `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br", null), `
|
||||
By default, user-defined secrets are not backed up in Fleet. It is necessary to recreate secrets if performing a disaster recovery restore or migration of Rancher into a fresh cluster. To modify resourceSet to include extra resources you want to backup, refer to docs `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://github.com/rancher/backup-restore-operator#user-flow"
|
||||
}, `here`), `.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("hr", null), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "documentation"
|
||||
}, `Documentation`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The Fleet documentation is at `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://fleet.rancher.io/"
|
||||
}, `https://fleet.rancher.io/.`)));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -1,852 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[42989],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ Zo: () => (/* binding */ MDXProvider),
|
||||
/* harmony export */ kt: () => (/* binding */ createElement)
|
||||
/* harmony export */ });
|
||||
/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
|
||||
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
return _extends.apply(this, arguments);
|
||||
}
|
||||
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
function _objectSpread2(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
|
||||
if (i % 2) {
|
||||
ownKeys(Object(source), true).forEach(function (key) {
|
||||
_defineProperty(target, key, source[key]);
|
||||
});
|
||||
} else if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function (key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
|
||||
for (i = 0; i < sourceKeys.length; i++) {
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
function _objectWithoutProperties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
var target = _objectWithoutPropertiesLoose(source, excluded);
|
||||
|
||||
var key, i;
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
|
||||
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
var isFunction = function isFunction(obj) {
|
||||
return typeof obj === 'function';
|
||||
};
|
||||
|
||||
var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
|
||||
var withMDXComponents = function withMDXComponents(Component) {
|
||||
return function (props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
|
||||
components: allComponents
|
||||
}));
|
||||
};
|
||||
};
|
||||
var useMDXComponents = function useMDXComponents(components) {
|
||||
var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
|
||||
var allComponents = contextComponents;
|
||||
|
||||
if (components) {
|
||||
allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
|
||||
}
|
||||
|
||||
return allComponents;
|
||||
};
|
||||
var MDXProvider = function MDXProvider(props) {
|
||||
var allComponents = useMDXComponents(props.components);
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
|
||||
value: allComponents
|
||||
}, props.children);
|
||||
};
|
||||
|
||||
var TYPE_PROP_NAME = 'mdxType';
|
||||
var DEFAULTS = {
|
||||
inlineCode: 'code',
|
||||
wrapper: function wrapper(_ref) {
|
||||
var children = _ref.children;
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
|
||||
}
|
||||
};
|
||||
var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
|
||||
var propComponents = props.components,
|
||||
mdxType = props.mdxType,
|
||||
originalType = props.originalType,
|
||||
parentName = props.parentName,
|
||||
etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
|
||||
|
||||
var components = useMDXComponents(propComponents);
|
||||
var type = mdxType;
|
||||
var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
|
||||
|
||||
if (propComponents) {
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
|
||||
ref: ref
|
||||
}, etc), {}, {
|
||||
components: propComponents
|
||||
}));
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
|
||||
ref: ref
|
||||
}, etc));
|
||||
});
|
||||
MDXCreateElement.displayName = 'MDXCreateElement';
|
||||
function createElement (type, props) {
|
||||
var args = arguments;
|
||||
var mdxType = props && props.mdxType;
|
||||
|
||||
if (typeof type === 'string' || mdxType) {
|
||||
var argsLength = args.length;
|
||||
var createElementArgArray = new Array(argsLength);
|
||||
createElementArgArray[0] = MDXCreateElement;
|
||||
var newProps = {};
|
||||
|
||||
for (var key in props) {
|
||||
if (hasOwnProperty.call(props, key)) {
|
||||
newProps[key] = props[key];
|
||||
}
|
||||
}
|
||||
|
||||
newProps.originalType = type;
|
||||
newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
|
||||
createElementArgArray[1] = newProps;
|
||||
|
||||
for (var i = 2; i < argsLength; i++) {
|
||||
createElementArgArray[i] = args[i];
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
|
||||
}
|
||||
|
||||
return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 62070:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||
/* harmony export */ assets: () => (/* binding */ assets),
|
||||
/* harmony export */ contentTitle: () => (/* binding */ contentTitle),
|
||||
/* harmony export */ "default": () => (/* binding */ MDXContent),
|
||||
/* harmony export */ frontMatter: () => (/* binding */ frontMatter),
|
||||
/* harmony export */ metadata: () => (/* binding */ metadata),
|
||||
/* harmony export */ toc: () => (/* binding */ toc)
|
||||
/* harmony export */ });
|
||||
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
|
||||
/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
|
||||
/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */ function _define_property(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function _object_spread(target) {
|
||||
for(var i = 1; i < arguments.length; i++){
|
||||
var source = arguments[i] != null ? arguments[i] : {};
|
||||
var ownKeys = Object.keys(source);
|
||||
if (typeof Object.getOwnPropertySymbols === "function") {
|
||||
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
||||
}));
|
||||
}
|
||||
ownKeys.forEach(function(key) {
|
||||
_define_property(target, key, source[key]);
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function ownKeys(object, enumerableOnly) {
|
||||
var keys = Object.keys(object);
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var symbols = Object.getOwnPropertySymbols(object);
|
||||
if (enumerableOnly) {
|
||||
symbols = symbols.filter(function(sym) {
|
||||
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
||||
});
|
||||
}
|
||||
keys.push.apply(keys, symbols);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
function _object_spread_props(target, source) {
|
||||
source = source != null ? source : {};
|
||||
if (Object.getOwnPropertyDescriptors) {
|
||||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
||||
} else {
|
||||
ownKeys(Object(source)).forEach(function(key) {
|
||||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
||||
});
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = _object_without_properties_loose(source, excluded);
|
||||
var key, i;
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
||||
for(i = 0; i < sourceSymbolKeys.length; i++){
|
||||
key = sourceSymbolKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
function _object_without_properties_loose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
var target = {};
|
||||
var sourceKeys = Object.keys(source);
|
||||
var key, i;
|
||||
for(i = 0; i < sourceKeys.length; i++){
|
||||
key = sourceKeys[i];
|
||||
if (excluded.indexOf(key) >= 0) continue;
|
||||
target[key] = source[key];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Multi-cluster Apps'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"id": "how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"title": "Multi-cluster Apps",
|
||||
"description": "Typically, most applications are deployed on a single Kubernetes cluster, but there will be times you might want to deploy multiple copies of the same application across different clusters and/or projects. In Rancher, a multi-cluster application, is an application deployed using a Helm chart across multiple clusters. With the ability to deploy the same application across multiple clusters, it avoids the repetition of the same action on each cluster, which could introduce user error during application configuration. With multi-cluster applications, you can customize to have the same configuration across all projects/clusters as well as have the ability to change the configuration based on your target project. Since multi-cluster application is considered a single application, it's easy to manage and maintain this application.",
|
||||
"source": "@site/docs/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/deploy-apps-across-clusters",
|
||||
"slug": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1703280782,
|
||||
"formattedLastUpdatedAt": "Dec 22, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Multi-cluster Apps"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Continuous Delivery with Fleet",
|
||||
"permalink": "/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet"
|
||||
},
|
||||
"next": {
|
||||
"title": "Backups and Disaster Recovery",
|
||||
"permalink": "/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: 'Prerequisites',
|
||||
id: 'prerequisites',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Permissions',
|
||||
id: 'permissions',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Enable Legacy Features',
|
||||
id: 'enable-legacy-features',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Launching a Multi-Cluster App',
|
||||
id: 'launching-a-multi-cluster-app',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-cluster App Configuration Options',
|
||||
id: 'multi-cluster-app-configuration-options',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Targets',
|
||||
id: 'targets',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Upgrades',
|
||||
id: 'upgrades',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Roles',
|
||||
id: 'roles',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Application Configuration Options',
|
||||
id: 'application-configuration-options',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Using a questions.yml file',
|
||||
id: 'using-a-questionsyml-file',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Key Value Pairs for Native Helm Charts',
|
||||
id: 'key-value-pairs-for-native-helm-charts',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Members',
|
||||
id: 'members',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Overriding Application Configuration Options for Specific Projects',
|
||||
id: 'overriding-application-configuration-options-for-specific-projects',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Upgrading Multi-Cluster App Roles and Projects',
|
||||
id: 'upgrading-multi-cluster-app-roles-and-projects',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Multi-Cluster Application Management',
|
||||
id: 'multi-cluster-application-management',
|
||||
level: 2
|
||||
},
|
||||
{
|
||||
value: 'Deleting a Multi-Cluster Application',
|
||||
id: 'deleting-a-multi-cluster-application',
|
||||
level: 2
|
||||
}
|
||||
];
|
||||
const layoutProps = {
|
||||
toc
|
||||
};
|
||||
const MDXLayout = "wrapper";
|
||||
function MDXContent(_param) {
|
||||
var { components } = _param, props = _object_without_properties(_param, [
|
||||
"components"
|
||||
]);
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout, _object_spread_props(_object_spread({}, layoutProps, props), {
|
||||
components: components,
|
||||
mdxType: "MDXLayout"
|
||||
}), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("head", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("link", {
|
||||
rel: "canonical",
|
||||
href: "https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/deploy-apps-across-clusters/multi-cluster-apps"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Typically, most applications are deployed on a single Kubernetes cluster, but there will be times you might want to deploy multiple copies of the same application across different clusters and/or projects. In Rancher, a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `multi-cluster application`), `, is an application deployed using a Helm chart across multiple clusters. With the ability to deploy the same application across multiple clusters, it avoids the repetition of the same action on each cluster, which could introduce user error during application configuration. With multi-cluster applications, you can customize to have the same configuration across all projects/clusters as well as have the ability to change the configuration based on your target project. Since multi-cluster application is considered a single application, it's easy to manage and maintain this application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Any Helm charts from a global catalog can be used to deploy and manage multi-cluster applications.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `After creating a multi-cluster application, you can program a global DNS entry to make it easier to access the application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "prerequisites"
|
||||
}, `Prerequisites`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "permissions"
|
||||
}, `Permissions`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To create a multi-cluster app in Rancher, you must have at least one of the following permissions:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project-member role`), ` in the target cluster(s), which gives you the ability to create, read, update, and delete the workloads`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner role`), ` for the clusters(s) that include the target project(s)`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "enable-legacy-features"
|
||||
}, `Enable Legacy Features`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Because multi-cluster apps were deprecated and replaced with Fleet in Rancher v2.5, you will need to enable multi-cluster apps with a feature flag.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `☰ > Global Settings`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Feature Flags`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Go to the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `legacy`), ` feature flag and click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Activate`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "launching-a-multi-cluster-app"
|
||||
}, `Launching a Multi-Cluster App`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `☰ > Multi-cluster Apps`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Launch`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Find the application that you want to launch.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `(Optional) Review the detailed descriptions, which are derived from the Helm chart's `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `README`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Under `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Configuration Options`), ` enter a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Name`), ` for the multi-cluster application. By default, this name is also used to create a Kubernetes namespace in each `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#targets"
|
||||
}, `target project`), ` for the multi-cluster application. The namespace is named as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `<MULTI-CLUSTER_APPLICATION_NAME>-<PROJECT_ID>`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Select a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Template Version`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Complete the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#multi-cluster-app-configuration-options"
|
||||
}, `multi-cluster applications specific configuration options`), ` as well as the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application configuration options`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Select the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Members`), ` who can `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#members"
|
||||
}, `interact with the multi-cluster application`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Add any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), ` that would change the configuration for specific project(s) from the default application configuration answers.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Review the files in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Preview`), ` section. When you're satisfied, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Launch`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Result`), `: Your application is deployed to your chosen namespace. You can view the application status from the project's:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-app-configuration-options"
|
||||
}, `Multi-cluster App Configuration Options`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher has divided the configuration option for the multi-cluster application into several sections.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "targets"
|
||||
}, `Targets`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Targets`), ` section, select the projects that you want the application to be deployed in. The list of projects is based on what projects you have access to. For each project that you select, it will be added to the list, which shows the cluster name and project name that were selected. To remove a target project, click on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `-`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "upgrades"
|
||||
}, `Upgrades`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Upgrades`), ` section, select the upgrade strategy to use, when you decide to upgrade your application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Rolling Update (batched):`), ` When selecting this upgrade strategy, the number of applications upgraded at a time is based on the selected `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Batch size`), ` and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Interval`), ` specifies how many seconds to wait before starting the next batch of updates.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Upgrade all apps simultaneously:`), ` When selecting this upgrade strategy, all applications across all projects will be upgraded at the same time.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "roles"
|
||||
}, `Roles`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Roles`), ` section, you define the role of the multi-cluster application. Typically, when a user `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/helm-charts-in-rancher/"
|
||||
}, `launches catalog applications`), `, that specific user's permissions are used for creation of all workloads/resources that is required by the app.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For multi-cluster applications, the application is deployed by a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `system user`), ` and is assigned as the creator of all underlying resources. A `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `system user`), ` is used instead of the actual user due to the fact that the actual user could be removed from one of the target projects. If the actual user was removed from one of the projects, then that user would no longer be able to manage the application for the other projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher will let you select from two options for Roles, `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Project`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), `. Rancher will allow creation using any of these roles based on the user's permissions.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Project`), ` - This is the equivalent of a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project member`), `. If you select this role, Rancher will check that in all the target projects, the user has minimally the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project member`), ` role. While the user might not be explicitly granted the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `project member`), ` role, if the user is an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions"
|
||||
}, `administrator`), `, a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner`), `, or a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `project owner`), `, then the user is considered to have the appropriate level of permissions.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), ` - This is the equivalent of a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#cluster-roles"
|
||||
}, `cluster owner`), `. If you select this role, Rancher will check that in all the target projects, the user has minimally the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/cluster-and-project-roles#project-roles"
|
||||
}, `cluster owner`), ` role. While the user might not be explicitly granted the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `cluster owner`), ` role, if the user is an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions"
|
||||
}, `administrator`), `, then the user is considered to have the appropriate level of permissions.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `When launching the application, Rancher will confirm if you have these permissions in the target projects before launching the application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `There are some applications like `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Grafana`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Datadog`), ` that require access to specific cluster-scoped resources. These applications will require the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Cluster`), ` role. If you find out later that the application requires cluster roles, the multi-cluster application can be upgraded to update the roles.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "application-configuration-options"
|
||||
}, `Application Configuration Options`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For each Helm chart, there are a list of desired answers that must be entered in order to successfully deploy the chart. When entering answers, you must format them using the syntax rules found in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://helm.sh/docs/intro/using_helm/#the-format-and-limitations-of---set"
|
||||
}, `Using Helm: The format and limitations of –set`), `, as Rancher passes them as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `--set`), ` flags to Helm.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Example",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `When entering an answer that includes two values separated by a comma (i.e. `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `abc, bcd`), `), it is required to wrap the values with double quotes (i.e., `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `"abc, bcd"`), `).`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "using-a-questionsyml-file"
|
||||
}, `Using a questions.yml file`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If the Helm chart that you are deploying contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `questions.yml`), ` file, Rancher's UI will translate this file to display an easy to use UI to collect the answers for the questions.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "key-value-pairs-for-native-helm-charts"
|
||||
}, `Key Value Pairs for Native Helm Charts`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `For native Helm charts (i.e., charts from the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Helm Stable`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Helm Incubator`), ` catalogs or a custom Helm chart repository, answers are provided as key value pairs in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answers`), ` section. These answers are used to override the default values.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "members"
|
||||
}, `Members`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `By default, multi-cluster applications can only be managed by the user who created it. In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Members`), ` section, other users can be added so that they can also help manage or view the multi-cluster application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Find the user that you want to add by typing in the member's name in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Member`), ` search box.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Select the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Access Type`), ` for that member. There are three access types for a multi-cluster project, but due to how the permissions of a multi-cluster application are launched, please read carefully to understand what these access types mean.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Owner`), `: This access type can manage any configuration part of the multi-cluster application including the template version, the `, `[multi-cluster applications specific configuration options]`, `(#Multi-cluster App Configuration Options), the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), `, the members who can interact with the multi-cluster application and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), `. Since a multi-cluster application is created with a different set of permissions from the user, any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `owner`), ` of the multi-cluster application can manage/remove applications in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#targets"
|
||||
}, `target projects`), ` without explicitly having access to these project(s). Only trusted users should be provided with this access type.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Member`), `: This access type can only modify the template version, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), ` and the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#overriding-application-configuration-options-for-specific-projects"
|
||||
}, `custom application configuration answers`), `. Since a multi-cluster application is created with a different set of permissions from the user, any `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `member`), ` of the multi-cluster application can modify the application without explicitly having access to these project(s). Only trusted users should be provided with this access type.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Read-only`), `: This access type cannot modify any configuration option for the multi-cluster application. Users can only view these applications.`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
parentName: "li",
|
||||
"type": "caution"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `Please ensure only trusted users are given `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Owner`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("em", {
|
||||
parentName: "p"
|
||||
}, `Member`), ` access as they will automatically be able to manage applications created for this multi-cluster application in target projects they might not have direct access to.`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "overriding-application-configuration-options-for-specific-projects"
|
||||
}, `Overriding Application Configuration Options for Specific Projects`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The ability to use the same configuration to deploy the same application across multiple clusters/projects is one of the main benefits of multi-cluster applications. There might be a specific project that requires a slightly different configuration option, but you want to manage that application with all the other matching applications. Instead of creating a brand new application, you can override specific `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#application-configuration-options"
|
||||
}, `application specific configuration options`), ` for specific projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answer Overrides`), ` section, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Add Override`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `For each override, you can select the following:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Scope`), `: Select which target projects you want to override the answer in the configuration option.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Question`), `: Select which question you want to override.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Answer`), `: Enter the answer that you want to be used instead.`))))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "upgrading-multi-cluster-app-roles-and-projects"
|
||||
}, `Upgrading Multi-Cluster App Roles and Projects`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Changing Roles on an existing Multi-Cluster app`), `
|
||||
The creator and any users added with the access-type "owner" to a multi-cluster app, can upgrade its Roles. When adding a new Role, we check if the user has that exact role in all current target projects. These checks allow the same relaxations for global admins, cluster owners and project-owners as described in the installation section for the field `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `Roles`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Adding/Removing target projects`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `The creator and any users added with access-type "owner" to a multi-cluster app, can add or remove its target projects. When adding a new project, we check if the caller of this request has all Roles defined on multi-cluster app, in the new projects they want to add. The roles checks are again relaxed for global admins, cluster-owners and project-owners.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `We do not do these membership checks when removing target projects. This is because the caller's permissions could have with respect to the target project, or the project could have been deleted and hence the caller wants to remove it from targets list.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "multi-cluster-application-management"
|
||||
}, `Multi-Cluster Application Management`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `One of the benefits of using a multi-cluster application as opposed to multiple individual applications of the same type, is the ease of management. Multi-cluster applications can be cloned, upgraded or rolled back.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Prerequisite:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `legacy`), ` feature flag needs to be enabled.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Multi-cluster Apps`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Choose the multi-cluster application you want to take one of these actions on and click the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `⋮`), `. Select one of the following options:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul", {
|
||||
parentName: "li"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Clone`), `: Creates another multi-cluster application with the same configuration. By using this option, you can easily duplicate a multi-cluster application.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Upgrade`), `: Upgrade your multi-cluster application to change some part of the configuration. When performing an upgrade for multi-cluster application, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#upgrades"
|
||||
}, `upgrade strategy`), ` can be modified if you have the correct `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#members"
|
||||
}, `access type`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Rollback`), `: Rollback your application to a specific version. If after an upgrade, there are issues for your multi-cluster application for one or more of your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "#targets"
|
||||
}, `targets`), `, Rancher has stored up to 10 versions of the multi-cluster application. Rolling back a multi-cluster application reverts the application for `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `all`), ` target clusters and projects, not just the targets(s) affected by the upgrade issue.`)))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "deleting-a-multi-cluster-application"
|
||||
}, `Deleting a Multi-Cluster Application`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Prerequisite:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `legacy`), ` feature flag needs to be enabled.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `In the upper left corner, click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `☰ > Multi-cluster Apps`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Choose the multi-cluster application you want to delete and click the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `⋮ > Delete`), `. When deleting the multi-cluster application, all applications and namespaces are deleted in all of the target projects.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
parentName: "li",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The applications in the target projects, that are created for a multi-cluster application, cannot be deleted individually. The applications can only be deleted when the multi-cluster application is deleted.`)))));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -325,8 +325,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/authentication-config.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1709828317,
|
||||
"formattedLastUpdatedAt": "Mar 7, 2024",
|
||||
"lastUpdatedAt": 1712626962,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Configuring Authentication",
|
||||
"weight": 10
|
||||
@@ -507,7 +507,7 @@ function MDXContent(_param) {
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/authentication-config/create-local-users"
|
||||
}, `local authentication`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `In most cases, you should use an external authentication service over local authentication, as external authentication allows user management from a central location. However, you may want a few local authentication users for managing Rancher under rare circumstances, such as if your external authentication provider is unavailable or undergoing maintenance.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2", {
|
||||
"id": "users-and-groups"
|
||||
}, `Users and Groups`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When authenticating with an external provider, groups are provided from the external provider based on the user. These users and groups are given specific roles to resources like clusters, projects, multi-cluster apps, and global DNS providers and entries. When you give access to a group, all users who are a member of that group in the authentication provider will be able to access the resource with the permissions that you've specified. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
}, `Users and Groups`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Rancher relies on users and groups to determine who is allowed to log in to Rancher and which resources they can access. When authenticating with an external provider, groups are provided from the external provider based on the user. These users and groups are given specific roles to resources like clusters, projects, and global DNS providers and entries. When you give access to a group, all users who are a member of that group in the authentication provider will be able to access the resource with the permissions that you've specified. For more information on roles and permissions, see `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/"
|
||||
}, `Role Based Access Control`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/getting-started/installation-and-upgrade/resources/update-rancher-certificate.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1705011762,
|
||||
"formattedLastUpdatedAt": "Jan 11, 2024",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Updating the Rancher Certificate"
|
||||
},
|
||||
@@ -716,7 +716,7 @@ kubectl edit -n cattle-system deployment/cattle-cluster-agent
|
||||
"id": "5-force-update-fleet-clusters-to-reconnect-the-fleet-agent-to-rancher"
|
||||
}, `5. Force Update Fleet clusters to reconnect the fleet-agent to Rancher`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Select 'Force Update' for the clusters within the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#accessing-fleet-in-the-rancher-ui"
|
||||
"href": "../../../integrations-in-rancher/fleet/overview.md#accessing-fleet-in-the-rancher-ui"
|
||||
}, `Continuous Delivery`), ` view of the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h4", {
|
||||
"id": "why-is-this-step-required-1"
|
||||
}, `Why is this step required?`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet agents in Rancher managed clusters store a kubeconfig that is used to connect to Rancher. The kubeconfig contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
@@ -836,7 +836,7 @@ kubectl edit -n cattle-system deployment/cattle-cluster-agent
|
||||
"id": "5-force-update-fleet-clusters-to-reconnect-the-fleet-agent-to-rancher-1"
|
||||
}, `5. Force Update Fleet clusters to reconnect the fleet-agent to Rancher`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Select 'Force Update' for the clusters within the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#accessing-fleet-in-the-rancher-ui"
|
||||
"href": "../../../integrations-in-rancher/fleet/overview.md#accessing-fleet-in-the-rancher-ui"
|
||||
}, `Continuous Delivery`), ` view of the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h4", {
|
||||
"id": "why-is-this-step-required-2"
|
||||
}, `Why is this step required?`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Fleet agents in Rancher managed clusters store a kubeconfig that is used to connect to Rancher. The kubeconfig contains a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
@@ -324,8 +324,8 @@ const metadata = {
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.7/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md",
|
||||
"tags": [],
|
||||
"version": "2.7",
|
||||
"lastUpdatedAt": 1688152309,
|
||||
"formattedLastUpdatedAt": "Jun 30, 2023",
|
||||
"lastUpdatedAt": 1712626960,
|
||||
"formattedLastUpdatedAt": "Apr 9, 2024",
|
||||
"frontMatter": {
|
||||
"title": "Backing up Rancher"
|
||||
},
|
||||
@@ -426,7 +426,7 @@ function MDXContent(_param) {
|
||||
parentName: "admonition"
|
||||
}, `There is a known issue in Fleet that occurs after performing a restoration using the backup-restore-operator: Secrets used for clientSecretName and helmSecretName are not included in Fleet gitrepos. Refer `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.7/how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet#troubleshooting"
|
||||
"href": "../../../integrations-in-rancher/fleet/overview.md#troubleshooting"
|
||||
}, `here`), ` for a workaround.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "2-perform-a-backup"
|
||||
}, `2. Perform a Backup`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To perform a backup, a custom resource of type Backup must be created.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
+4
-4
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user