mirror of
https://github.com/rancher/rancher-docs.git
synced 2026-09-26 13:08:11 +00:00
deploy: 79ac876275
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
@@ -335,8 +335,8 @@ const metadata = {
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/configure-in-tree-vsphere"
|
||||
},
|
||||
"next": {
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree"
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
@@ -0,0 +1,640 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[40590],{
|
||||
|
||||
/***/ 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 16679:
|
||||
/***/ ((__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: 'Migrating Amazon In-tree to Out-of-tree'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"id": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"title": "Migrating Amazon In-tree to Out-of-tree",
|
||||
"description": "Kubernetes is moving away from maintaining cloud providers in-tree. In Kubernetes 1.27 and later, the in-tree cloud providers have been removed.",
|
||||
"source": "@site/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1701892185,
|
||||
"formattedLastUpdatedAt": "Dec 6, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Migrating Amazon In-tree to Out-of-tree"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon"
|
||||
},
|
||||
"next": {
|
||||
"title": "Setting up the Azure Cloud Provider",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/azure"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [];
|
||||
const makeShortcode = (name)=>function MDXDefaultShortcode(props) {
|
||||
console.warn("Component " + name + " was not imported, exported, or provided by MDXProvider as global scope");
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("div", props);
|
||||
};
|
||||
const Tabs = makeShortcode("Tabs");
|
||||
const TabItem = makeShortcode("TabItem");
|
||||
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/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Kubernetes is moving away from maintaining cloud providers in-tree. In Kubernetes 1.27 and later, the in-tree cloud providers have been removed.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `You can migrate from an in-tree to an out-of-tree AWS cloud provider on Kubernetes 1.26 and earlier. All existing clusters must migrate prior to upgrading to v1.27 in order to stay functional.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To migrate from the in-tree cloud provider to the out-of-tree AWS cloud provider, you must stop the existing cluster's kube controller manager and install the AWS cloud controller manager. There are many ways to do this. Refer to the official AWS documentation on the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://cloud-provider-aws.sigs.k8s.io/getting_started/"
|
||||
}, `external cloud controller manager`), ` for details.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If it's acceptable to have some downtime, you can `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon#using-the-out-of-tree-aws-cloud-provider-for-rke"
|
||||
}, `switch to an external cloud provider`), `, which removes in-tree components and then deploy charts to install the AWS cloud controller manager.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If your setup can't tolerate any control plane downtime, you must enable leader migration. This facilitates a smooth transition from the controllers in the kube controller manager to their counterparts in the cloud controller manager. Refer to the official AWS documentation on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://cloud-provider-aws.sigs.k8s.io/getting_started/"
|
||||
}, `Using leader migration`), ` for more details.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Important:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The Kubernetes `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/#before-you-begin"
|
||||
}, `cloud controller migration documentation`), ` states that it's possible to migrate with the same Kubernetes version, but assumes that the migration is part of a Kubernetes upgrade. Refer to the Kubernetes documentation on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/"
|
||||
}, `migrating to use the cloud controller manager`), ` to see if you need to customize your setup before migrating. Confirm your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/#default-configuration"
|
||||
}, `migration configuration values`), `. If your cloud provider provides an implementation of the Node IPAM controller, you also need to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/#node-ipam-controller-migration"
|
||||
}, `migrate the IPAM controller`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(Tabs, {
|
||||
mdxType: "Tabs"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(TabItem, {
|
||||
value: "RKE2",
|
||||
mdxType: "TabItem"
|
||||
}, /*#__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"
|
||||
}, `Update the cluster config to enable leader migration:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineSelectorConfig:
|
||||
- config:
|
||||
kube-controller-manager-arg:
|
||||
- enable-leader-migration
|
||||
machineLabelSelector:
|
||||
matchExpressions:
|
||||
- key: rke.cattle.io/control-plane-role
|
||||
operator: In
|
||||
values:
|
||||
- 'true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Note that the cloud provider is still `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws`), ` at this step:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineGlobalConfig:
|
||||
cloud-provider-name: aws
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 2
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Cordon control plane nodes so that AWS cloud controller pods run on nodes only after upgrading to the external cloud provider:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 3
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `To install the AWS cloud controller manager with leader migration enabled, follow Steps 1-3 for `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon#using-out-of-tree-aws-cloud-provider-for-rke2"
|
||||
}, `deploying the cloud controller manager chart`), `
|
||||
From Kubernetes 1.22 onwards, the kube-controller-manager will utilize a default configuration which will satisfy the controller-to-manager migration.
|
||||
Update container args of the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `aws-cloud-controller-manager`), ` under `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `spec.rkeConfig.additionalManifest`), ` to enable leader migration:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `- '--enable-leader-migration=true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 4
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Install the chart and confirm that the Daemonset `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `aws-cloud-controller-manager`), ` successfully deployed:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 5
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Update the provisioning cluster to change the cloud provider and remove leader migration args from the kube controller.
|
||||
If upgrading the Kubernetes version, set the Kubernetes version as well in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `spec.kubernetesVersion`), ` section of the cluster YAML file`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Important",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `Only remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `cloud-provider-name: aws`), ` if not relying on the rke2 supervisor to correctly set the providerID.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `enable-leader-migration`), ` if you don't want it enabled in your cluster:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineGlobalConfig:
|
||||
cloud-provider-name: external
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `enable-leader-migration`), ` from:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineSelectorConfig:
|
||||
- config:
|
||||
kube-controller-manager-arg:
|
||||
- enable-leader-migration
|
||||
machineLabelSelector:
|
||||
matchExpressions:
|
||||
- key: rke.cattle.io/control-plane-role
|
||||
operator: In
|
||||
values:
|
||||
- 'true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"type": "tip"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `You can also disable leader migration after the upgrade, as leader migration is no longer required due to only one cloud-controller-manager and can be removed.
|
||||
Upgrade the chart and remove the following section from the container arguments:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", {
|
||||
parentName: "admonition"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `- --enable-leader-migration=true
|
||||
`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Verify the cloud controller manager update was successfully rolled out with the following command:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 6
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `The cloud provider is responsible for setting the ProviderID of the node. Check if all nodes are initialized with the ProviderID:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl describe nodes | grep "ProviderID"
|
||||
`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(TabItem, {
|
||||
value: "RKE",
|
||||
mdxType: "TabItem"
|
||||
}, /*#__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"
|
||||
}, `Update the cluster config to enable leader migration in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `cluster.yml`), `:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `services:
|
||||
kube-controller:
|
||||
extra_args:
|
||||
enable-leader-migration: "true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Note that the cloud provider is still `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws`), ` at this step:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `cloud_provider:
|
||||
name: aws
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 2
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Cordon the control plane nodes, so that AWS cloud controller pods run on nodes only after upgrading to the external cloud provider:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 3
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `To install the AWS cloud controller manager, you must enable leader migration and follow the same steps as when installing AWS on a new cluster. To enable leader migration, add the following to the container arguments in step 7 while following the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon#helm-chart-installation-from-ui-for-rke"
|
||||
}, `steps to install the chart`), `:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `- '--enable-leader-migration=true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 4
|
||||
}, /*#__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"
|
||||
}, `Confirm that the chart is installed but that the new pods aren't running yet due to cordoned controlplane nodes. After updating the cluster in the next step, RKE will upgrade and uncordon each node, and schedule `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws-controller-manager`), ` pods.`)), /*#__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"
|
||||
}, `Update `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `cluster.yml`), ` to change the cloud provider and remove the leader migration arguments from the kube-controller.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Selecting `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `External Amazon (out-of-tree)`), ` sets `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `--cloud-provider=external`), ` and lets you enable `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `useInstanceMetadataHostname`), `. You must enable `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `useInstanceMetadataHostname`), ` for node-driver clusters and for custom clusters if not you don't provide a custom node name via `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `--node-name`), `. Enabling `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `useInstanceMetadataHostname`), ` will query ec2 metadata service and set `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `/hostname`), ` as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `hostname-override`), ` for `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kubelet`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kube-proxy`), `:`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `rancher_kubernetes_engine_config:
|
||||
cloud_provider:
|
||||
name: external-aws
|
||||
useInstanceMetadataHostname: true/false
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, ` Remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `enable-leader-migration`), ` if you don't want it enabled in your cluster:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `services:
|
||||
kube-controller:
|
||||
extra_args:
|
||||
enable-leader-migration: "true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"type": "tip"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `You can also disable leader migration after you finish the migration. Upgrade the chart and remove the following section from the container arguments:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", {
|
||||
parentName: "admonition"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `- --enable-leader-migration=true
|
||||
`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 6
|
||||
}, /*#__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"
|
||||
}, `If you're upgrading the cluster's Kubernetes version, set the Kubernetes version as well.`)), /*#__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"
|
||||
}, `Update the cluster. The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws-cloud-controller-manager`), ` pods should now be running.`))))));
|
||||
}
|
||||
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
@@ -1,5 +1,5 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[52856],{
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[69847],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
@@ -212,7 +212,7 @@ function createElement (type, props) {
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 51938:
|
||||
/***/ 85218:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
@@ -308,26 +308,26 @@ function _object_without_properties_loose(source, excluded) {
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Migrating vSphere In-tree Volumes to Out-of-tree'
|
||||
title: 'Migrating vSphere In-tree to Out-of-tree'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"id": "version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree",
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"id": "version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree",
|
||||
"description": "Kubernetes is moving away from maintaining cloud providers in-tree. vSphere has an out-of-tree cloud provider that can be used by installing the vSphere cloud provider and cloud storage plugins.",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree.md",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree.md",
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1696627994,
|
||||
"formattedLastUpdatedAt": "Oct 6, 2023",
|
||||
"lastUpdatedAt": 1701892185,
|
||||
"formattedLastUpdatedAt": "Dec 6, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree"
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
@@ -448,7 +448,7 @@ chmod +x taints.sh
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `vSphere CPI`), `..`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
}, `vSphere CPI`), `.`), /*#__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"
|
||||
@@ -477,7 +477,7 @@ chmod +x taints.sh
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `vSphere CSI`), `..`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
}, `vSphere CSI`), `.`), /*#__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"
|
||||
@@ -331,8 +331,8 @@ const metadata = {
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree"
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere"
|
||||
},
|
||||
"next": {
|
||||
"title": "Launching Kubernetes with Rancher",
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,597 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[71706],{
|
||||
|
||||
/***/ 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 72619:
|
||||
/***/ ((__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: 'Setting up the Amazon Cloud Provider',
|
||||
weight: 1
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"id": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"description": "When using the Amazon cloud provider, you can leverage the following capabilities:",
|
||||
"source": "@site/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1700234359,
|
||||
"formattedLastUpdatedAt": "Nov 17, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"weight": 1
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Setting up Cloud Providers",
|
||||
"permalink": "/pages-for-subheaders/set-up-cloud-providers"
|
||||
},
|
||||
"next": {
|
||||
"title": "Setting up the Azure Cloud Provider",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/azure"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: '1. Create an IAM Role and attach to the instances',
|
||||
id: '1-create-an-iam-role-and-attach-to-the-instances',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: '2. Configure the ClusterID',
|
||||
id: '2-configure-the-clusterid',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Using Amazon Elastic Container Registry (ECR)',
|
||||
id: 'using-amazon-elastic-container-registry-ecr',
|
||||
level: 3
|
||||
}
|
||||
];
|
||||
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/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `When using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `Amazon`), ` cloud provider, you can leverage the following capabilities:`), /*#__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)("strong", {
|
||||
parentName: "li"
|
||||
}, `Load Balancers:`), ` Launches an AWS Elastic Load Balancer (ELB) when choosing `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `Layer-4 Load Balancer`), ` in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Port Mapping`), ` or when launching a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `Service`), ` with `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `type: LoadBalancer`), `.`), /*#__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"
|
||||
}, `Persistent Volumes`), `: Allows you to use AWS Elastic Block Stores (EBS) for persistent volumes.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `See `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.github.io/cloud-provider-aws/"
|
||||
}, `cloud-provider-aws README`), ` for all information regarding the Amazon cloud provider.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To set up the Amazon cloud provider,`), /*#__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)("a", {
|
||||
parentName: "li",
|
||||
"href": "#1-create-an-iam-role-and-attach-to-the-instances"
|
||||
}, `Create an IAM role and attach to the instances`)), /*#__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)("a", {
|
||||
parentName: "li",
|
||||
"href": "#2-configure-the-clusterid"
|
||||
}, `Configure the ClusterID`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Important:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `Starting with Kubernetes 1.23, you have to deactivate the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `CSIMigrationAWS`), ` feature gate in order to use the in-tree AWS cloud provider. You can do this by setting `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `feature-gates=CSIMigrationAWS=false`), ` as an additional argument for the cluster's Kubelet, Controller Manager, API Server and Scheduler in the advanced cluster configuration.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "1-create-an-iam-role-and-attach-to-the-instances"
|
||||
}, `1. Create an IAM Role and attach to the instances`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `All nodes added to the cluster must be able to interact with EC2 so that they can create and remove resources. You can enable this interaction by using an IAM role attached to the instance. See `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#create-iam-role"
|
||||
}, `Amazon documentation: Creating an IAM Role`), ` how to create an IAM role. There are two example policies:`), /*#__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"
|
||||
}, `The first policy is for the nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `controlplane`), ` role. These nodes have to be able to create/remove EC2 resources. The following IAM policy is an example, please remove any unneeded permissions for your use case.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `The second policy is for the nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `etcd`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `worker`), ` role. These nodes only have to be able to retrieve information from EC2.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `While creating an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster"
|
||||
}, `Amazon EC2 cluster`), `, you must fill in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `IAM Instance Profile Name`), ` (not ARN) of the created IAM role when creating the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Node Template`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `While creating a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/pages-for-subheaders/use-existing-nodes"
|
||||
}, `Custom cluster`), `, you must manually attach the IAM role to the instance(s).`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `IAM Policy for nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `controlplane`), ` role:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-json"
|
||||
}, `{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"autoscaling:DescribeAutoScalingGroups",
|
||||
"autoscaling:DescribeLaunchConfigurations",
|
||||
"autoscaling:DescribeTags",
|
||||
"ec2:DescribeInstances",
|
||||
"ec2:DescribeRegions",
|
||||
"ec2:DescribeRouteTables",
|
||||
"ec2:DescribeSecurityGroups",
|
||||
"ec2:DescribeSubnets",
|
||||
"ec2:DescribeVolumes",
|
||||
"ec2:CreateSecurityGroup",
|
||||
"ec2:CreateTags",
|
||||
"ec2:CreateVolume",
|
||||
"ec2:ModifyInstanceAttribute",
|
||||
"ec2:ModifyVolume",
|
||||
"ec2:AttachVolume",
|
||||
"ec2:AuthorizeSecurityGroupIngress",
|
||||
"ec2:CreateRoute",
|
||||
"ec2:DeleteRoute",
|
||||
"ec2:DeleteSecurityGroup",
|
||||
"ec2:DeleteVolume",
|
||||
"ec2:DetachVolume",
|
||||
"ec2:RevokeSecurityGroupIngress",
|
||||
"ec2:DescribeVpcs",
|
||||
"elasticloadbalancing:AddTags",
|
||||
"elasticloadbalancing:AttachLoadBalancerToSubnets",
|
||||
"elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
|
||||
"elasticloadbalancing:CreateLoadBalancer",
|
||||
"elasticloadbalancing:CreateLoadBalancerPolicy",
|
||||
"elasticloadbalancing:CreateLoadBalancerListeners",
|
||||
"elasticloadbalancing:ConfigureHealthCheck",
|
||||
"elasticloadbalancing:DeleteLoadBalancer",
|
||||
"elasticloadbalancing:DeleteLoadBalancerListeners",
|
||||
"elasticloadbalancing:DescribeLoadBalancers",
|
||||
"elasticloadbalancing:DescribeLoadBalancerAttributes",
|
||||
"elasticloadbalancing:DetachLoadBalancerFromSubnets",
|
||||
"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
|
||||
"elasticloadbalancing:ModifyLoadBalancerAttributes",
|
||||
"elasticloadbalancing:RegisterInstancesWithLoadBalancer",
|
||||
"elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer",
|
||||
"elasticloadbalancing:AddTags",
|
||||
"elasticloadbalancing:CreateListener",
|
||||
"elasticloadbalancing:CreateTargetGroup",
|
||||
"elasticloadbalancing:DeleteListener",
|
||||
"elasticloadbalancing:DeleteTargetGroup",
|
||||
"elasticloadbalancing:DescribeListeners",
|
||||
"elasticloadbalancing:DescribeLoadBalancerPolicies",
|
||||
"elasticloadbalancing:DescribeTargetGroups",
|
||||
"elasticloadbalancing:DescribeTargetHealth",
|
||||
"elasticloadbalancing:ModifyListener",
|
||||
"elasticloadbalancing:ModifyTargetGroup",
|
||||
"elasticloadbalancing:RegisterTargets",
|
||||
"elasticloadbalancing:SetLoadBalancerPoliciesOfListener",
|
||||
"iam:CreateServiceLinkedRole",
|
||||
"kms:DescribeKey"
|
||||
],
|
||||
"Resource": [
|
||||
"*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `IAM policy for nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `etcd`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `worker`), ` role:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-json"
|
||||
}, `{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"ec2:DescribeInstances",
|
||||
"ec2:DescribeRegions",
|
||||
"ecr:GetAuthorizationToken",
|
||||
"ecr:BatchCheckLayerAvailability",
|
||||
"ecr:GetDownloadUrlForLayer",
|
||||
"ecr:GetRepositoryPolicy",
|
||||
"ecr:DescribeRepositories",
|
||||
"ecr:ListImages",
|
||||
"ecr:BatchGetImage"
|
||||
],
|
||||
"Resource": "*"
|
||||
}
|
||||
]
|
||||
}
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "2-configure-the-clusterid"
|
||||
}, `2. Configure the ClusterID`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The following resources need to tagged with a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `ClusterID`), `:`), /*#__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)("strong", {
|
||||
parentName: "li"
|
||||
}, `Nodes`), `: All hosts added in Rancher.`), /*#__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"
|
||||
}, `Subnet`), `: The subnet used for your cluster.`), /*#__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"
|
||||
}, `Security Group`), `: The security group used for your cluster.`)), /*#__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"
|
||||
}, `Do not tag multiple security groups. Tagging multiple groups generates an error when creating an Elastic Load Balancer (ELB).`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `When you create an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/how-to-guides/new-user-guides/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster"
|
||||
}, `Amazon EC2 Cluster`), `, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `ClusterID`), ` is automatically configured for the created nodes. Other resources still need to be manually tagged.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Use the following tag:`), /*#__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"
|
||||
}, `Key`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kubernetes.io/cluster/<cluster-id>`), ` `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Value`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `owned`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Setting the value of the tag to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `owned`), ` tells the cluster that all resources with this tag are owned and managed by this cluster. `), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If you share resources between clusters, you can change the tag to:`), /*#__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"
|
||||
}, `Key`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kubernetes.io/cluster/<cluster-id>`), ` `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Value`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `shared`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The string value, `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `<cluster-id>`), `, is the Kubernetes cluster's ID. `), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "using-amazon-elastic-container-registry-ecr"
|
||||
}, `Using Amazon Elastic Container Registry (ECR)`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The kubelet component has the ability to automatically obtain ECR credentials, when the IAM profile mentioned in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#1-create-an-iam-role-and-attach-to-the-instances"
|
||||
}, `Create an IAM Role and attach to the instances`), ` is attached to the instance(s). When using a Kubernetes version older than v1.15.0, the Amazon cloud provider needs be configured in the cluster. Starting with Kubernetes version v1.15.0, the kubelet can obtain ECR credentials without having the Amazon cloud provider configured in the cluster.`));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -1,597 +0,0 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[40046],{
|
||||
|
||||
/***/ 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 89501:
|
||||
/***/ ((__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: 'Setting up the Amazon Cloud Provider',
|
||||
weight: 1
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"id": "version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"description": "When using the Amazon cloud provider, you can leverage the following capabilities:",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1700235034,
|
||||
"formattedLastUpdatedAt": "Nov 17, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"weight": 1
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Setting up Cloud Providers",
|
||||
"permalink": "/v2.8/pages-for-subheaders/set-up-cloud-providers"
|
||||
},
|
||||
"next": {
|
||||
"title": "Setting up the Azure Cloud Provider",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/azure"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [
|
||||
{
|
||||
value: '1. Create an IAM Role and attach to the instances',
|
||||
id: '1-create-an-iam-role-and-attach-to-the-instances',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: '2. Configure the ClusterID',
|
||||
id: '2-configure-the-clusterid',
|
||||
level: 3
|
||||
},
|
||||
{
|
||||
value: 'Using Amazon Elastic Container Registry (ECR)',
|
||||
id: 'using-amazon-elastic-container-registry-ecr',
|
||||
level: 3
|
||||
}
|
||||
];
|
||||
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/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `When using the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `Amazon`), ` cloud provider, you can leverage the following capabilities:`), /*#__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)("strong", {
|
||||
parentName: "li"
|
||||
}, `Load Balancers:`), ` Launches an AWS Elastic Load Balancer (ELB) when choosing `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `Layer-4 Load Balancer`), ` in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `Port Mapping`), ` or when launching a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `Service`), ` with `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `type: LoadBalancer`), `.`), /*#__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"
|
||||
}, `Persistent Volumes`), `: Allows you to use AWS Elastic Block Stores (EBS) for persistent volumes.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `See `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.github.io/cloud-provider-aws/"
|
||||
}, `cloud-provider-aws README`), ` for all information regarding the Amazon cloud provider.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To set up the Amazon cloud provider,`), /*#__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)("a", {
|
||||
parentName: "li",
|
||||
"href": "#1-create-an-iam-role-and-attach-to-the-instances"
|
||||
}, `Create an IAM role and attach to the instances`)), /*#__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)("a", {
|
||||
parentName: "li",
|
||||
"href": "#2-configure-the-clusterid"
|
||||
}, `Configure the ClusterID`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Important:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `Starting with Kubernetes 1.23, you have to deactivate the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `CSIMigrationAWS`), ` feature gate in order to use the in-tree AWS cloud provider. You can do this by setting `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `feature-gates=CSIMigrationAWS=false`), ` as an additional argument for the cluster's Kubelet, Controller Manager, API Server and Scheduler in the advanced cluster configuration.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "1-create-an-iam-role-and-attach-to-the-instances"
|
||||
}, `1. Create an IAM Role and attach to the instances`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `All nodes added to the cluster must be able to interact with EC2 so that they can create and remove resources. You can enable this interaction by using an IAM role attached to the instance. See `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#create-iam-role"
|
||||
}, `Amazon documentation: Creating an IAM Role`), ` how to create an IAM role. There are two example policies:`), /*#__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"
|
||||
}, `The first policy is for the nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `controlplane`), ` role. These nodes have to be able to create/remove EC2 resources. The following IAM policy is an example, please remove any unneeded permissions for your use case.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ul"
|
||||
}, `The second policy is for the nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `etcd`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `worker`), ` role. These nodes only have to be able to retrieve information from EC2.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `While creating an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster"
|
||||
}, `Amazon EC2 cluster`), `, you must fill in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `IAM Instance Profile Name`), ` (not ARN) of the created IAM role when creating the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Node Template`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `While creating a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/pages-for-subheaders/use-existing-nodes"
|
||||
}, `Custom cluster`), `, you must manually attach the IAM role to the instance(s).`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `IAM Policy for nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `controlplane`), ` role:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-json"
|
||||
}, `{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"autoscaling:DescribeAutoScalingGroups",
|
||||
"autoscaling:DescribeLaunchConfigurations",
|
||||
"autoscaling:DescribeTags",
|
||||
"ec2:DescribeInstances",
|
||||
"ec2:DescribeRegions",
|
||||
"ec2:DescribeRouteTables",
|
||||
"ec2:DescribeSecurityGroups",
|
||||
"ec2:DescribeSubnets",
|
||||
"ec2:DescribeVolumes",
|
||||
"ec2:CreateSecurityGroup",
|
||||
"ec2:CreateTags",
|
||||
"ec2:CreateVolume",
|
||||
"ec2:ModifyInstanceAttribute",
|
||||
"ec2:ModifyVolume",
|
||||
"ec2:AttachVolume",
|
||||
"ec2:AuthorizeSecurityGroupIngress",
|
||||
"ec2:CreateRoute",
|
||||
"ec2:DeleteRoute",
|
||||
"ec2:DeleteSecurityGroup",
|
||||
"ec2:DeleteVolume",
|
||||
"ec2:DetachVolume",
|
||||
"ec2:RevokeSecurityGroupIngress",
|
||||
"ec2:DescribeVpcs",
|
||||
"elasticloadbalancing:AddTags",
|
||||
"elasticloadbalancing:AttachLoadBalancerToSubnets",
|
||||
"elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
|
||||
"elasticloadbalancing:CreateLoadBalancer",
|
||||
"elasticloadbalancing:CreateLoadBalancerPolicy",
|
||||
"elasticloadbalancing:CreateLoadBalancerListeners",
|
||||
"elasticloadbalancing:ConfigureHealthCheck",
|
||||
"elasticloadbalancing:DeleteLoadBalancer",
|
||||
"elasticloadbalancing:DeleteLoadBalancerListeners",
|
||||
"elasticloadbalancing:DescribeLoadBalancers",
|
||||
"elasticloadbalancing:DescribeLoadBalancerAttributes",
|
||||
"elasticloadbalancing:DetachLoadBalancerFromSubnets",
|
||||
"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
|
||||
"elasticloadbalancing:ModifyLoadBalancerAttributes",
|
||||
"elasticloadbalancing:RegisterInstancesWithLoadBalancer",
|
||||
"elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer",
|
||||
"elasticloadbalancing:AddTags",
|
||||
"elasticloadbalancing:CreateListener",
|
||||
"elasticloadbalancing:CreateTargetGroup",
|
||||
"elasticloadbalancing:DeleteListener",
|
||||
"elasticloadbalancing:DeleteTargetGroup",
|
||||
"elasticloadbalancing:DescribeListeners",
|
||||
"elasticloadbalancing:DescribeLoadBalancerPolicies",
|
||||
"elasticloadbalancing:DescribeTargetGroups",
|
||||
"elasticloadbalancing:DescribeTargetHealth",
|
||||
"elasticloadbalancing:ModifyListener",
|
||||
"elasticloadbalancing:ModifyTargetGroup",
|
||||
"elasticloadbalancing:RegisterTargets",
|
||||
"elasticloadbalancing:SetLoadBalancerPoliciesOfListener",
|
||||
"iam:CreateServiceLinkedRole",
|
||||
"kms:DescribeKey"
|
||||
],
|
||||
"Resource": [
|
||||
"*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `IAM policy for nodes with the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `etcd`), ` or `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `worker`), ` role:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-json"
|
||||
}, `{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"ec2:DescribeInstances",
|
||||
"ec2:DescribeRegions",
|
||||
"ecr:GetAuthorizationToken",
|
||||
"ecr:BatchCheckLayerAvailability",
|
||||
"ecr:GetDownloadUrlForLayer",
|
||||
"ecr:GetRepositoryPolicy",
|
||||
"ecr:DescribeRepositories",
|
||||
"ecr:ListImages",
|
||||
"ecr:BatchGetImage"
|
||||
],
|
||||
"Resource": "*"
|
||||
}
|
||||
]
|
||||
}
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "2-configure-the-clusterid"
|
||||
}, `2. Configure the ClusterID`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The following resources need to tagged with a `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `ClusterID`), `:`), /*#__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)("strong", {
|
||||
parentName: "li"
|
||||
}, `Nodes`), `: All hosts added in Rancher.`), /*#__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"
|
||||
}, `Subnet`), `: The subnet used for your cluster.`), /*#__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"
|
||||
}, `Security Group`), `: The security group used for your cluster.`)), /*#__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"
|
||||
}, `Do not tag multiple security groups. Tagging multiple groups generates an error when creating an Elastic Load Balancer (ELB).`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `When you create an `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster"
|
||||
}, `Amazon EC2 Cluster`), `, the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `ClusterID`), ` is automatically configured for the created nodes. Other resources still need to be manually tagged.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Use the following tag:`), /*#__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"
|
||||
}, `Key`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kubernetes.io/cluster/<cluster-id>`), ` `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Value`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `owned`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Setting the value of the tag to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `owned`), ` tells the cluster that all resources with this tag are owned and managed by this cluster. `), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If you share resources between clusters, you can change the tag to:`), /*#__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"
|
||||
}, `Key`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kubernetes.io/cluster/<cluster-id>`), ` `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `Value`), ` = `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `shared`), `.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The string value, `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `<cluster-id>`), `, is the Kubernetes cluster's ID. `), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3", {
|
||||
"id": "using-amazon-elastic-container-registry-ecr"
|
||||
}, `Using Amazon Elastic Container Registry (ECR)`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `The kubelet component has the ability to automatically obtain ECR credentials, when the IAM profile mentioned in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "#1-create-an-iam-role-and-attach-to-the-instances"
|
||||
}, `Create an IAM Role and attach to the instances`), ` is attached to the instance(s). When using a Kubernetes version older than v1.15.0, the Amazon cloud provider needs be configured in the cluster. Starting with Kubernetes version v1.15.0, the kubelet can obtain ECR credentials without having the Amazon cloud provider configured in the cluster.`));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -331,8 +331,8 @@ const metadata = {
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree"
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere"
|
||||
},
|
||||
"next": {
|
||||
"title": "Launching Kubernetes with Rancher",
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -331,8 +331,8 @@ const metadata = {
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon"
|
||||
"title": "Migrating Amazon In-tree to Out-of-tree",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon"
|
||||
},
|
||||
"next": {
|
||||
"title": "Setting up the Google Compute Engine Cloud Provider",
|
||||
@@ -0,0 +1,640 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[54676],{
|
||||
|
||||
/***/ 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 29165:
|
||||
/***/ ((__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: 'Migrating Amazon In-tree to Out-of-tree'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"id": "version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"title": "Migrating Amazon In-tree to Out-of-tree",
|
||||
"description": "Kubernetes is moving away from maintaining cloud providers in-tree. In Kubernetes 1.27 and later, the in-tree cloud providers have been removed.",
|
||||
"source": "@site/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/versioned_docs/version-2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon.md",
|
||||
"tags": [],
|
||||
"version": "2.8",
|
||||
"lastUpdatedAt": 1701892185,
|
||||
"formattedLastUpdatedAt": "Dec 6, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Migrating Amazon In-tree to Out-of-tree"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon"
|
||||
},
|
||||
"next": {
|
||||
"title": "Setting up the Azure Cloud Provider",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/azure"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
const toc = [];
|
||||
const makeShortcode = (name)=>function MDXDefaultShortcode(props) {
|
||||
console.warn("Component " + name + " was not imported, exported, or provided by MDXProvider as global scope");
|
||||
return /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("div", props);
|
||||
};
|
||||
const Tabs = makeShortcode("Tabs");
|
||||
const TabItem = makeShortcode("TabItem");
|
||||
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/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon"
|
||||
})), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Kubernetes is moving away from maintaining cloud providers in-tree. In Kubernetes 1.27 and later, the in-tree cloud providers have been removed.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `You can migrate from an in-tree to an out-of-tree AWS cloud provider on Kubernetes 1.26 and earlier. All existing clusters must migrate prior to upgrading to v1.27 in order to stay functional.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `To migrate from the in-tree cloud provider to the out-of-tree AWS cloud provider, you must stop the existing cluster's kube controller manager and install the AWS cloud controller manager. There are many ways to do this. Refer to the official AWS documentation on the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://cloud-provider-aws.sigs.k8s.io/getting_started/"
|
||||
}, `external cloud controller manager`), ` for details.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If it's acceptable to have some downtime, you can `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon#using-the-out-of-tree-aws-cloud-provider-for-rke"
|
||||
}, `switch to an external cloud provider`), `, which removes in-tree components and then deploy charts to install the AWS cloud controller manager.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `If your setup can't tolerate any control plane downtime, you must enable leader migration. This facilitates a smooth transition from the controllers in the kube controller manager to their counterparts in the cloud controller manager. Refer to the official AWS documentation on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://cloud-provider-aws.sigs.k8s.io/getting_started/"
|
||||
}, `Using leader migration`), ` for more details.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Important:",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `The Kubernetes `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/#before-you-begin"
|
||||
}, `cloud controller migration documentation`), ` states that it's possible to migrate with the same Kubernetes version, but assumes that the migration is part of a Kubernetes upgrade. Refer to the Kubernetes documentation on `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/"
|
||||
}, `migrating to use the cloud controller manager`), ` to see if you need to customize your setup before migrating. Confirm your `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/#default-configuration"
|
||||
}, `migration configuration values`), `. If your cloud provider provides an implementation of the Node IPAM controller, you also need to `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "p",
|
||||
"href": "https://kubernetes.io/docs/tasks/administer-cluster/controller-manager-leader-migration/#node-ipam-controller-migration"
|
||||
}, `migrate the IPAM controller`), `.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(Tabs, {
|
||||
mdxType: "Tabs"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(TabItem, {
|
||||
value: "RKE2",
|
||||
mdxType: "TabItem"
|
||||
}, /*#__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"
|
||||
}, `Update the cluster config to enable leader migration:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineSelectorConfig:
|
||||
- config:
|
||||
kube-controller-manager-arg:
|
||||
- enable-leader-migration
|
||||
machineLabelSelector:
|
||||
matchExpressions:
|
||||
- key: rke.cattle.io/control-plane-role
|
||||
operator: In
|
||||
values:
|
||||
- 'true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Note that the cloud provider is still `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws`), ` at this step:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineGlobalConfig:
|
||||
cloud-provider-name: aws
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 2
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Cordon control plane nodes so that AWS cloud controller pods run on nodes only after upgrading to the external cloud provider:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 3
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `To install the AWS cloud controller manager with leader migration enabled, follow Steps 1-3 for `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon#using-out-of-tree-aws-cloud-provider-for-rke2"
|
||||
}, `deploying the cloud controller manager chart`), `
|
||||
From Kubernetes 1.22 onwards, the kube-controller-manager will utilize a default configuration which will satisfy the controller-to-manager migration.
|
||||
Update container args of the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `aws-cloud-controller-manager`), ` under `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `spec.rkeConfig.additionalManifest`), ` to enable leader migration:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `- '--enable-leader-migration=true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 4
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Install the chart and confirm that the Daemonset `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `aws-cloud-controller-manager`), ` successfully deployed:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 5
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Update the provisioning cluster to change the cloud provider and remove leader migration args from the kube controller.
|
||||
If upgrading the Kubernetes version, set the Kubernetes version as well in the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `spec.kubernetesVersion`), ` section of the cluster YAML file`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"title": "Important",
|
||||
"type": "note"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `Only remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `cloud-provider-name: aws`), ` if not relying on the rke2 supervisor to correctly set the providerID.`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `enable-leader-migration`), ` if you don't want it enabled in your cluster:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineGlobalConfig:
|
||||
cloud-provider-name: external
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `enable-leader-migration`), ` from:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `spec:
|
||||
rkeConfig:
|
||||
machineSelectorConfig:
|
||||
- config:
|
||||
kube-controller-manager-arg:
|
||||
- enable-leader-migration
|
||||
machineLabelSelector:
|
||||
matchExpressions:
|
||||
- key: rke.cattle.io/control-plane-role
|
||||
operator: In
|
||||
values:
|
||||
- 'true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"type": "tip"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `You can also disable leader migration after the upgrade, as leader migration is no longer required due to only one cloud-controller-manager and can be removed.
|
||||
Upgrade the chart and remove the following section from the container arguments:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", {
|
||||
parentName: "admonition"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `- --enable-leader-migration=true
|
||||
`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Verify the cloud controller manager update was successfully rolled out with the following command:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 6
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `The cloud provider is responsible for setting the ProviderID of the node. Check if all nodes are initialized with the ProviderID:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl describe nodes | grep "ProviderID"
|
||||
`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(TabItem, {
|
||||
value: "RKE",
|
||||
mdxType: "TabItem"
|
||||
}, /*#__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"
|
||||
}, `Update the cluster config to enable leader migration in `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "li"
|
||||
}, `cluster.yml`), `:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `services:
|
||||
kube-controller:
|
||||
extra_args:
|
||||
enable-leader-migration: "true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, `Note that the cloud provider is still `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws`), ` at this step:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `cloud_provider:
|
||||
name: aws
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 2
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `Cordon the control plane nodes, so that AWS cloud controller pods run on nodes only after upgrading to the external cloud provider:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-shell"
|
||||
}, `kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 3
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
parentName: "ol"
|
||||
}, `To install the AWS cloud controller manager, you must enable leader migration and follow the same steps as when installing AWS on a new cluster. To enable leader migration, add the following to the container arguments in step 7 while following the `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a", {
|
||||
parentName: "li",
|
||||
"href": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon#helm-chart-installation-from-ui-for-rke"
|
||||
}, `steps to install the chart`), `:`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `- '--enable-leader-migration=true'
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 4
|
||||
}, /*#__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"
|
||||
}, `Confirm that the chart is installed but that the new pods aren't running yet due to cordoned controlplane nodes. After updating the cluster in the next step, RKE will upgrade and uncordon each node, and schedule `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws-controller-manager`), ` pods.`)), /*#__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"
|
||||
}, `Update `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `cluster.yml`), ` to change the cloud provider and remove the leader migration arguments from the kube-controller.`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "li"
|
||||
}, `Selecting `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "p"
|
||||
}, `External Amazon (out-of-tree)`), ` sets `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `--cloud-provider=external`), ` and lets you enable `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `useInstanceMetadataHostname`), `. You must enable `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `useInstanceMetadataHostname`), ` for node-driver clusters and for custom clusters if not you don't provide a custom node name via `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `--node-name`), `. Enabling `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `useInstanceMetadataHostname`), ` will query ec2 metadata service and set `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `/hostname`), ` as `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `hostname-override`), ` for `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kubelet`), ` and `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `kube-proxy`), `:`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `rancher_kubernetes_engine_config:
|
||||
cloud_provider:
|
||||
name: external-aws
|
||||
useInstanceMetadataHostname: true/false
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", null, ` Remove `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `enable-leader-migration`), ` if you don't want it enabled in your cluster:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", null, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `services:
|
||||
kube-controller:
|
||||
extra_args:
|
||||
enable-leader-migration: "true"
|
||||
`)), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("admonition", {
|
||||
"type": "tip"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p", {
|
||||
parentName: "admonition"
|
||||
}, `You can also disable leader migration after you finish the migration. Upgrade the chart and remove the following section from the container arguments:`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre", {
|
||||
parentName: "admonition"
|
||||
}, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code", {
|
||||
parentName: "pre",
|
||||
"className": "language-yaml"
|
||||
}, `- --enable-leader-migration=true
|
||||
`))), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol", {
|
||||
"start": 6
|
||||
}, /*#__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"
|
||||
}, `If you're upgrading the cluster's Kubernetes version, set the Kubernetes version as well.`)), /*#__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"
|
||||
}, `Update the cluster. The `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("inlineCode", {
|
||||
parentName: "p"
|
||||
}, `aws-cloud-controller-manager`), ` pods should now be running.`))))));
|
||||
}
|
||||
MDXContent.isMDXComponent = true;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
@@ -1,5 +1,5 @@
|
||||
"use strict";
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[85828],{
|
||||
(self["webpackChunkrancher_docs"] = self["webpackChunkrancher_docs"] || []).push([[63458],{
|
||||
|
||||
/***/ 3905:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
@@ -212,7 +212,7 @@ function createElement (type, props) {
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 50230:
|
||||
/***/ 2476:
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
@@ -308,26 +308,26 @@ function _object_without_properties_loose(source, excluded) {
|
||||
|
||||
|
||||
const frontMatter = {
|
||||
title: 'Migrating vSphere In-tree Volumes to Out-of-tree'
|
||||
title: 'Migrating vSphere In-tree to Out-of-tree'
|
||||
};
|
||||
const contentTitle = undefined;
|
||||
const metadata = {
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"id": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree",
|
||||
"unversionedId": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"id": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree",
|
||||
"description": "Kubernetes is moving away from maintaining cloud providers in-tree. vSphere has an out-of-tree cloud provider that can be used by installing the vSphere cloud provider and cloud storage plugins.",
|
||||
"source": "@site/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree.md",
|
||||
"source": "@site/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere.md",
|
||||
"sourceDirName": "how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree",
|
||||
"slug": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere",
|
||||
"draft": false,
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree.md",
|
||||
"editUrl": "https://github.com/rancher/rancher-docs/edit/main/docs/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere.md",
|
||||
"tags": [],
|
||||
"version": "current",
|
||||
"lastUpdatedAt": 1691795289,
|
||||
"formattedLastUpdatedAt": "Aug 11, 2023",
|
||||
"lastUpdatedAt": 1701892185,
|
||||
"formattedLastUpdatedAt": "Dec 6, 2023",
|
||||
"frontMatter": {
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree"
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree"
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
@@ -448,7 +448,7 @@ chmod +x taints.sh
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `vSphere CPI`), `..`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
}, `vSphere CPI`), `.`), /*#__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"
|
||||
@@ -477,7 +477,7 @@ chmod +x taints.sh
|
||||
parentName: "ol"
|
||||
}, `Click `, /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong", {
|
||||
parentName: "li"
|
||||
}, `vSphere CSI`), `..`), /*#__PURE__*/ (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li", {
|
||||
}, `vSphere CSI`), `.`), /*#__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"
|
||||
@@ -335,8 +335,8 @@ const metadata = {
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/configure-in-tree-vsphere"
|
||||
},
|
||||
"next": {
|
||||
"title": "Migrating vSphere In-tree Volumes to Out-of-tree",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-from-in-tree-to-out-of-tree"
|
||||
"title": "Migrating vSphere In-tree to Out-of-tree",
|
||||
"permalink": "/v2.8/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-vsphere"
|
||||
}
|
||||
};
|
||||
const assets = {};
|
||||
@@ -331,8 +331,8 @@ const metadata = {
|
||||
},
|
||||
"sidebar": "tutorialSidebar",
|
||||
"previous": {
|
||||
"title": "Setting up the Amazon Cloud Provider",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/amazon"
|
||||
"title": "Migrating Amazon In-tree to Out-of-tree",
|
||||
"permalink": "/how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/migrate-to-out-of-tree-amazon"
|
||||
},
|
||||
"next": {
|
||||
"title": "Setting up the Google Compute Engine Cloud Provider",
|
||||
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
+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
+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
+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
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
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
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
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
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