Add i18n and Chinese translation

This commit is contained in:
vickyhella
2022-09-13 22:51:43 +08:00
parent 872809ba37
commit 4d88df32b1
453 changed files with 47673 additions and 0 deletions
@@ -0,0 +1,261 @@
---
title: 7 层 NGINX 负载均衡器上的 TLS 终止(Docker 安装)
weight: 252
---
如果你的开发或测试环境要求在负载均衡器上终止 TLS/SSL,而不是在 Rancher Server 上,请部署 Rancher 并配置负载均衡器。
如果要在基础设施中对 TLS 集中进行终止,请使用 7 层负载均衡器。7 层负载均衡还能让你的负载均衡器基于 HTTP 属性(例如 cookie 等)做出决策,而 4 层负载均衡器则不能。
本文中的安装步骤将引导你使用单个容器部署 Rancher,并提供 7 层 NGINX 负载均衡器的示例配置。
## 操作系统,Docker,硬件和网络要求
请确保你的节点满足常规的[安装要求](../../../../pages-for-subheaders/installation-requirements.md)。
## 安装概要
## 1. 配置 Linux 主机
根据我们的[要求](../../../../pages-for-subheaders/installation-requirements.md)配置一个 Linux 主机来启动 Rancher Server。
## 2. 选择一个 SSL 选项并安装 Rancher
出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL 保护所有 Rancher 网络通信(如登录和与集群交互)的安全。
:::note 你是否需要:
- 完成离线安装。
- 记录所有 Rancher API 的事务。
继续之前,请参见[高级选项](#高级选项)。
:::
选择以下的选项之一:
<details id="option-a">
<summary>选项 A:使用你自己的证书 - 自签名</summary>
如果要使用自签名证书来加密通信,你必须在负载均衡器(后续步骤)和 Rancher 容器上安装证书。运行 Docker 命令部署 Rancher,将 Docker 指向你的证书。
:::note 先决条件:
创建自签名证书。
- 证书文件的格式必须是 PEM。
:::
**使用自签名证书安装 Rancher**:
1. 在运行 Docker 命令部署 Rancher 时,将 Docker 指向你的 CA 证书文件。
```
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /etc/your_certificate_directory/cacerts.pem:/etc/rancher/ssl/cacerts.pem \
rancher/rancher:latest
```
</details>
<details id="option-b">
<summary>选项 B:使用你自己的证书 - 可信 CA 签名的证书</summary>
如果你的集群面向公众,则最好使用由公认 CA 签署的证书。
:::note 先决条件:
- 证书文件的格式必须是 PEM。
:::
**使用授信 CA 签发的证书安装 Rancher**:
如果你使用授信 CA 签发的证书,你无需在 Rancher 容器中安装证书。但是,请确保不要生成和存储默认的 CA 证书(你可以通过将 `--no-cacerts` 参数传递给容器来实现)。
1. 输入以下命令:
```
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest --no-cacerts
```
</details>
## 3. 配置负载均衡器
在 Rancher 容器前使用负载均衡器时,容器无需从端口 80 或端口 443 重定向端口通信。你可以通过传递 `X-Forwarded-Proto: https` 标头禁用此重定向。
负载均衡器或代理必须支持以下内容:
- **WebSocket** 连接
- **SPDY** / **HTTP/2** 协议
- 传递/设置以下标头:
| 标头 | 值 | 描述 |
|--------|-------|-------------|
| `Host` | 用于访问 Rancher 的主机名。 | 识别客户端所请求的服务器。 |
| `X-Forwarded-Proto` | `https` | 识别客户端连接负载均衡器或代理时所用的协议。<br /><br/>**注意**:如果此标头存在,`rancher/rancher` 不会将 HTTP 重定向到 HTTPS。 |
| `X-Forwarded-Port` | 用于访问 Rancher 的端口。 | 识别客户端连接到负载均衡器或代理时所用的端口。 |
| `X-Forwarded-For` | 客户端 IP 地址 | 识别客户端的原始 IP 地址。 |
### 示例 NGINX 配置
此 NGINX 配置已在 NGINX 1.14 上进行了测试。
:::note
此 NGINX 配置只是一个示例,可能不适合你的环境。如需查阅完整文档,请参见 [NGINX 负载均衡 - HTTP 负载均衡](https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/)。
:::
- 将 `rancher-server` 替换为运行 Rancher 容器的节点的 IP 或主机名。
- 将两处的 `FQDN` 均替换为 Rancher 的 DNS 名称。
- 把 `/certs/fullchain.pem` 和 `/certs/privkey.pem` 分别替换为服务器证书和服务器证书密钥的位置。
```
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
http {
upstream rancher {
server rancher-server:80;
}
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name FQDN;
ssl_certificate /certs/fullchain.pem;
ssl_certificate_key /certs/privkey.pem;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://rancher;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 此项允许执行的 shell 窗口保持开启,最长可达15分钟。不使用此参数的话,默认1分钟后自动关闭。
proxy_read_timeout 900s;
proxy_buffering off;
}
}
server {
listen 80;
server_name FQDN;
return 301 https://$server_name$request_uri;
}
}
```
<br/>
## 后续操作
- **推荐**:检查单节点[备份](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-docker-installed-rancher.md)和[恢复](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-docker-installed-rancher.md)。你可能暂时没有需要备份的数据,但是我们建议你在常规使用 Rancher 后创建备份。
- 创建 Kubernetes 集群:[配置 Kubernetes 集群](../../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)。
<br/>
## 常见问题和故障排除
如果你需要对证书进行故障排除,请参见[此章节](../../other-installation-methods/rancher-on-a-single-node-with-docker/certificate-troubleshooting.md)。
## 高级选项
### API 审计
如果你需要记录所有 Rancher API 事务,请将以下标志添加到安装命令中,从而启用 [API 审计](enable-api-audit-log.md)功能。
-e AUDIT_LEVEL=1 \
-e AUDIT_LOG_PATH=/var/log/auditlog/rancher-api-audit.log \
-e AUDIT_LOG_MAXAGE=20 \
-e AUDIT_LOG_MAXBACKUP=20 \
-e AUDIT_LOG_MAXSIZE=100 \
### 离线环境
如果你访问此页面是为了完成[离线安装](../../../../pages-for-subheaders/air-gapped-helm-cli-install.md),则在运行安装命令时,先将你的私有镜像仓库 URL 附加到 Server 标志中。也就是说,在 `rancher/rancher:latest` 前面添加 `<REGISTRY.DOMAIN.COM:PORT>` 和私有镜像仓库 URL。
**示例**:
<REGISTRY.DOMAIN.COM:PORT>/rancher/rancher:latest
### 持久化数据
Rancher 使用 etcd 作为数据存储。如果 Rancher 是使用 Docker 安装的,Rancher 会使用嵌入式 etcd。持久化数据位于容器的 `/var/lib/rancher` 路径中。
你可以将主机卷挂载到该位置,来将数据保留在运行它的主机上:
```
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /opt/rancher:/var/lib/rancher \
--privileged \
rancher/rancher:latest
```
Rancher 2.5 开始需要[特权访问](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)。
这个 7 层 NGINX 配置已经在 NGINX 1.13(Mainline)和 1.14(Stable)版本上进行了测试。
:::note
此 NGINX 配置只是一个示例,可能不适合你的环境。如果需要查阅完整文档,请参见 [NGINX 负载均衡 - TCP 和 UDP 负载均衡器](https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/)。
:::
```
upstream rancher {
server rancher-server:80;
}
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name rancher.yourdomain.com;
ssl_certificate /etc/your_certificate_directory/fullchain.pem;
ssl_certificate_key /etc/your_certificate_directory/privkey.pem;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://rancher;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 此项允许执行的 shell 窗口保持开启,最长可达15分钟。不使用此参数的话,默认1分钟后自动关闭。
proxy_read_timeout 900s;
proxy_buffering off;
}
}
server {
listen 80;
server_name rancher.yourdomain.com;
return 301 https://$server_name$request_uri;
}
```
<br/>
@@ -0,0 +1,559 @@
---
title: 启用 API 审计日志以记录系统事件
weight: 4
---
你可以启用 API 审计日志来记录各个用户发起的系统事件的顺序。通过查看日志,你可以了解发生了什么事件、事件发生的时间,事件发起人,以及事件影响的集群。启用此功能后,所有 Rancher API 的请求和响应都会写入日志中。
API 审计可以在 Rancher 安装或升级期间启用。
## 启用 API 审计日志
你可以将环境变量传递给 Rancher Server 容器,从而启用和配置审计日志。请参见以下文档,在安装时启用该功能:
- [Docker 安装](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志)
- [Kubernetes 安装](../../../../reference-guides/installation-references/helm-chart-options.md#api-审计日志)
## API 审计日志选项
以下参数定义了审计日志的记录规则,其中包括应该记录什么内容以及包括什么数据:
| 参数 | 描述 |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <a id="audit-level"></a>`AUDIT_LEVEL` | `0` - 禁用审计日志(默认)<br /> `1` - 日志事件元数据<br /> `2` - 日志事件元数据和请求体<br /> `3` - 日志事件元数据,请求体和响应体。请求/响应对的每个日志事务都使用同一个的 `auditID`。<br /> 如需了解每个设置记录的日志内容,请参见[审计日志级别](#审核日志级别)。 |
| `AUDIT_LOG_PATH` | Rancher Server API 的日志路径。默认路径:`/var/log/auditlog/rancher-api-audit.log`。你可以将日志目录挂载到主机。<br/><br/>示例:`AUDIT_LOG_PATH=/my/custom/path/`<br/> |
| `AUDIT_LOG_MAXAGE` | 旧审计日志文件可保留的最大天数。默认为 10 天。 |
| `AUDIT_LOG_MAXBACKUP` | 保留的审计日志最大文件个数。默认值为 10。 |
| `AUDIT_LOG_MAXSIZE` | 在审计日志文件被轮换前的最大容量,单位是 MB。默认大小为 100MB。 |
<br/>
### 审核日志级别
下表介绍了每个 [`AUDIT_LEVEL`](#audit-level) 记录的 API 事务:
| `AUDIT_LEVEL` 设置 | 请求元数据 | 请求体 | 响应元数据 | 响应体 |
| --------------------- | ---------------- | ------------ | ----------------- | ------------- |
| `0` | | | | |
| `1` | ✓ | | | |
| `2` | ✓ | ✓ | | |
| `3` | ✓ | ✓ | ✓ | ✓ |
## 查看 API 审计日志
### Docker 安装
与主机系统共享 `AUDIT_LOG_PATH` 目录(默认目录:`/var/log/auditlog`)。日志可以通过标准 CLI 工具进行解析,也可以转发到 Fluentd、Filebeat、Logstash 等日志收集工具。
### Kubernetes 安装
使用 Helm Chart 安装 Rancher 时启动 API 审计日志,会在 Rancher Pod 中创建一个 `rancher-audit-log` Sidecar 容器。该容器会将日志发送到标准输出 (stdout)。你可以像查看其他容器的日志一样查看 API 审计日志。
`rancher-audit-log` 容器位于 `cattle-system` 命名空间中的 `rancher` Pod 中。
#### CLI
```bash
kubectl -n cattle-system logs -f rancher-84d886bdbb-s4s69 rancher-audit-log
```
#### 发送审计日志
你可以为集群启用 Rancher 的内置日志收集和传送功能,将审计日志和其他服务日志发送到支持的 endpoint。详情请参见 [Rancher 工具 - Logging](../../../../pages-for-subheaders/logging.md)。
## 审计日志示例
启用审计日志后,Rancher 会以 JSON 格式记录每个 API 的请求和响应。下文的代码示例展示了如何查看 API 事务。
### 元数据日志级别
如果你将 `AUDIT_LEVEL` 设置为 `1`,Rancher 只会记录每个 API 请求的元数据标头,而不会记录请求体。标头记录了 API 事务的基本信息,包括 ID、发起人、发起时间等。代码示例如下:
```json
{
"auditID": "30022177-9e2e-43d1-b0d0-06ef9d3db183",
"requestURI": "/v3/schemas",
"sourceIPs": ["::1"],
"user": {
"name": "user-f4tt2",
"group": ["system:authenticated"]
},
"verb": "GET",
"stage": "RequestReceived",
"stageTimestamp": "2018-07-20 10:22:43 +0800"
}
```
### 元数据和请求体日志级别
如果你将 `AUDIT_LEVEL` 设置为 `2`,Rancher 会记录每个 API 请求的元数据标头和请求体。
下面的代码示例描述了一个 API 请求,包括它的元数据标头和正文:
```json
{
"auditID": "ef1d249e-bfac-4fd0-a61f-cbdcad53b9bb",
"requestURI": "/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
"sourceIPs": ["::1"],
"user": {
"name": "user-f4tt2",
"group": ["system:authenticated"]
},
"verb": "PUT",
"stage": "RequestReceived",
"stageTimestamp": "2018-07-20 10:28:08 +0800",
"requestBody": {
"hostIPC": false,
"hostNetwork": false,
"hostPID": false,
"paused": false,
"annotations": {},
"baseType": "workload",
"containers": [
{
"allowPrivilegeEscalation": false,
"image": "nginx",
"imagePullPolicy": "Always",
"initContainer": false,
"name": "nginx",
"ports": [
{
"containerPort": 80,
"dnsName": "nginx-nodeport",
"kind": "NodePort",
"name": "80tcp01",
"protocol": "TCP",
"sourcePort": 0,
"type": "/v3/project/schemas/containerPort"
}
],
"privileged": false,
"readOnly": false,
"resources": {
"type": "/v3/project/schemas/resourceRequirements",
"requests": {},
"limits": {}
},
"restartCount": 0,
"runAsNonRoot": false,
"stdin": true,
"stdinOnce": false,
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"tty": true,
"type": "/v3/project/schemas/container",
"environmentFrom": [],
"capAdd": [],
"capDrop": [],
"livenessProbe": null,
"volumeMounts": []
}
],
"created": "2018-07-18T07:34:16Z",
"createdTS": 1531899256000,
"creatorId": null,
"deploymentConfig": {
"maxSurge": 1,
"maxUnavailable": 0,
"minReadySeconds": 0,
"progressDeadlineSeconds": 600,
"revisionHistoryLimit": 10,
"strategy": "RollingUpdate"
},
"deploymentStatus": {
"availableReplicas": 1,
"conditions": [
{
"lastTransitionTime": "2018-07-18T07:34:38Z",
"lastTransitionTimeTS": 1531899278000,
"lastUpdateTime": "2018-07-18T07:34:38Z",
"lastUpdateTimeTS": 1531899278000,
"message": "Deployment has minimum availability.",
"reason": "MinimumReplicasAvailable",
"status": "True",
"type": "Available"
},
{
"lastTransitionTime": "2018-07-18T07:34:16Z",
"lastTransitionTimeTS": 1531899256000,
"lastUpdateTime": "2018-07-18T07:34:38Z",
"lastUpdateTimeTS": 1531899278000,
"message": "ReplicaSet \"nginx-64d85666f9\" has successfully progressed.",
"reason": "NewReplicaSetAvailable",
"status": "True",
"type": "Progressing"
}
],
"observedGeneration": 2,
"readyReplicas": 1,
"replicas": 1,
"type": "/v3/project/schemas/deploymentStatus",
"unavailableReplicas": 0,
"updatedReplicas": 1
},
"dnsPolicy": "ClusterFirst",
"id": "deployment:default:nginx",
"labels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"name": "nginx",
"namespaceId": "default",
"projectId": "c-bcz5t:p-fdr4s",
"publicEndpoints": [
{
"addresses": ["10.64.3.58"],
"allNodes": true,
"ingressId": null,
"nodeId": null,
"podId": null,
"port": 30917,
"protocol": "TCP",
"serviceId": "default:nginx-nodeport",
"type": "publicEndpoint"
}
],
"restartPolicy": "Always",
"scale": 1,
"schedulerName": "default-scheduler",
"selector": {
"matchLabels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"type": "/v3/project/schemas/labelSelector"
},
"state": "active",
"terminationGracePeriodSeconds": 30,
"transitioning": "no",
"transitioningMessage": "",
"type": "deployment",
"uuid": "f998037d-8a5c-11e8-a4cf-0245a7ebb0fd",
"workloadAnnotations": {
"deployment.kubernetes.io/revision": "1",
"field.cattle.io/creatorId": "user-f4tt2"
},
"workloadLabels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"scheduling": {
"node": {}
},
"description": "my description",
"volumes": []
}
}
```
### 元数据、请求体和响应体日志级别
如果你将 `AUDIT_LEVEL` 设置为 `3`,Rancher 会记录:
- 每个 API 请求的元数据标头和请求体。
- 每个 API 响应的元数据标头和响应体。
#### 请求
下面的代码示例描述了一个 API 请求,包括它的元数据标头和正文:
```json
{
"auditID": "a886fd9f-5d6b-4ae3-9a10-5bff8f3d68af",
"requestURI": "/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
"sourceIPs": ["::1"],
"user": {
"name": "user-f4tt2",
"group": ["system:authenticated"]
},
"verb": "PUT",
"stage": "RequestReceived",
"stageTimestamp": "2018-07-20 10:33:06 +0800",
"requestBody": {
"hostIPC": false,
"hostNetwork": false,
"hostPID": false,
"paused": false,
"annotations": {},
"baseType": "workload",
"containers": [
{
"allowPrivilegeEscalation": false,
"image": "nginx",
"imagePullPolicy": "Always",
"initContainer": false,
"name": "nginx",
"ports": [
{
"containerPort": 80,
"dnsName": "nginx-nodeport",
"kind": "NodePort",
"name": "80tcp01",
"protocol": "TCP",
"sourcePort": 0,
"type": "/v3/project/schemas/containerPort"
}
],
"privileged": false,
"readOnly": false,
"resources": {
"type": "/v3/project/schemas/resourceRequirements",
"requests": {},
"limits": {}
},
"restartCount": 0,
"runAsNonRoot": false,
"stdin": true,
"stdinOnce": false,
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"tty": true,
"type": "/v3/project/schemas/container",
"environmentFrom": [],
"capAdd": [],
"capDrop": [],
"livenessProbe": null,
"volumeMounts": []
}
],
"created": "2018-07-18T07:34:16Z",
"createdTS": 1531899256000,
"creatorId": null,
"deploymentConfig": {
"maxSurge": 1,
"maxUnavailable": 0,
"minReadySeconds": 0,
"progressDeadlineSeconds": 600,
"revisionHistoryLimit": 10,
"strategy": "RollingUpdate"
},
"deploymentStatus": {
"availableReplicas": 1,
"conditions": [
{
"lastTransitionTime": "2018-07-18T07:34:38Z",
"lastTransitionTimeTS": 1531899278000,
"lastUpdateTime": "2018-07-18T07:34:38Z",
"lastUpdateTimeTS": 1531899278000,
"message": "Deployment has minimum availability.",
"reason": "MinimumReplicasAvailable",
"status": "True",
"type": "Available"
},
{
"lastTransitionTime": "2018-07-18T07:34:16Z",
"lastTransitionTimeTS": 1531899256000,
"lastUpdateTime": "2018-07-18T07:34:38Z",
"lastUpdateTimeTS": 1531899278000,
"message": "ReplicaSet \"nginx-64d85666f9\" has successfully progressed.",
"reason": "NewReplicaSetAvailable",
"status": "True",
"type": "Progressing"
}
],
"observedGeneration": 2,
"readyReplicas": 1,
"replicas": 1,
"type": "/v3/project/schemas/deploymentStatus",
"unavailableReplicas": 0,
"updatedReplicas": 1
},
"dnsPolicy": "ClusterFirst",
"id": "deployment:default:nginx",
"labels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"name": "nginx",
"namespaceId": "default",
"projectId": "c-bcz5t:p-fdr4s",
"publicEndpoints": [
{
"addresses": ["10.64.3.58"],
"allNodes": true,
"ingressId": null,
"nodeId": null,
"podId": null,
"port": 30917,
"protocol": "TCP",
"serviceId": "default:nginx-nodeport",
"type": "publicEndpoint"
}
],
"restartPolicy": "Always",
"scale": 1,
"schedulerName": "default-scheduler",
"selector": {
"matchLabels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"type": "/v3/project/schemas/labelSelector"
},
"state": "active",
"terminationGracePeriodSeconds": 30,
"transitioning": "no",
"transitioningMessage": "",
"type": "deployment",
"uuid": "f998037d-8a5c-11e8-a4cf-0245a7ebb0fd",
"workloadAnnotations": {
"deployment.kubernetes.io/revision": "1",
"field.cattle.io/creatorId": "user-f4tt2"
},
"workloadLabels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"scheduling": {
"node": {}
},
"description": "my decript",
"volumes": []
}
}
```
#### 响应
下面的代码示例描述了一个 API 响应,包括它的元数据标头和正文:
```json
{
"auditID": "a886fd9f-5d6b-4ae3-9a10-5bff8f3d68af",
"responseStatus": "200",
"stage": "ResponseComplete",
"stageTimestamp": "2018-07-20 10:33:06 +0800",
"responseBody": {
"actionLinks": {
"pause": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx?action=pause",
"resume": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx?action=resume",
"rollback": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx?action=rollback"
},
"annotations": {},
"baseType": "workload",
"containers": [
{
"allowPrivilegeEscalation": false,
"image": "nginx",
"imagePullPolicy": "Always",
"initContainer": false,
"name": "nginx",
"ports": [
{
"containerPort": 80,
"dnsName": "nginx-nodeport",
"kind": "NodePort",
"name": "80tcp01",
"protocol": "TCP",
"sourcePort": 0,
"type": "/v3/project/schemas/containerPort"
}
],
"privileged": false,
"readOnly": false,
"resources": {
"type": "/v3/project/schemas/resourceRequirements"
},
"restartCount": 0,
"runAsNonRoot": false,
"stdin": true,
"stdinOnce": false,
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"tty": true,
"type": "/v3/project/schemas/container"
}
],
"created": "2018-07-18T07:34:16Z",
"createdTS": 1531899256000,
"creatorId": null,
"deploymentConfig": {
"maxSurge": 1,
"maxUnavailable": 0,
"minReadySeconds": 0,
"progressDeadlineSeconds": 600,
"revisionHistoryLimit": 10,
"strategy": "RollingUpdate"
},
"deploymentStatus": {
"availableReplicas": 1,
"conditions": [
{
"lastTransitionTime": "2018-07-18T07:34:38Z",
"lastTransitionTimeTS": 1531899278000,
"lastUpdateTime": "2018-07-18T07:34:38Z",
"lastUpdateTimeTS": 1531899278000,
"message": "Deployment has minimum availability.",
"reason": "MinimumReplicasAvailable",
"status": "True",
"type": "Available"
},
{
"lastTransitionTime": "2018-07-18T07:34:16Z",
"lastTransitionTimeTS": 1531899256000,
"lastUpdateTime": "2018-07-18T07:34:38Z",
"lastUpdateTimeTS": 1531899278000,
"message": "ReplicaSet \"nginx-64d85666f9\" has successfully progressed.",
"reason": "NewReplicaSetAvailable",
"status": "True",
"type": "Progressing"
}
],
"observedGeneration": 2,
"readyReplicas": 1,
"replicas": 1,
"type": "/v3/project/schemas/deploymentStatus",
"unavailableReplicas": 0,
"updatedReplicas": 1
},
"dnsPolicy": "ClusterFirst",
"hostIPC": false,
"hostNetwork": false,
"hostPID": false,
"id": "deployment:default:nginx",
"labels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"links": {
"remove": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
"revisions": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx/revisions",
"self": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
"update": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx",
"yaml": "https://localhost:8443/v3/project/c-bcz5t:p-fdr4s/workloads/deployment:default:nginx/yaml"
},
"name": "nginx",
"namespaceId": "default",
"paused": false,
"projectId": "c-bcz5t:p-fdr4s",
"publicEndpoints": [
{
"addresses": ["10.64.3.58"],
"allNodes": true,
"ingressId": null,
"nodeId": null,
"podId": null,
"port": 30917,
"protocol": "TCP",
"serviceId": "default:nginx-nodeport"
}
],
"restartPolicy": "Always",
"scale": 1,
"schedulerName": "default-scheduler",
"selector": {
"matchLabels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
},
"type": "/v3/project/schemas/labelSelector"
},
"state": "active",
"terminationGracePeriodSeconds": 30,
"transitioning": "no",
"transitioningMessage": "",
"type": "deployment",
"uuid": "f998037d-8a5c-11e8-a4cf-0245a7ebb0fd",
"workloadAnnotations": {
"deployment.kubernetes.io/revision": "1",
"field.cattle.io/creatorId": "user-f4tt2"
},
"workloadLabels": {
"workload.user.cattle.io/workloadselector": "deployment-default-nginx"
}
}
}
```
@@ -0,0 +1,108 @@
---
title: 使用 firewalld 打开端口
weight: 1
---
> 我们建议禁用 firewalld。如果你使用的是 Kubernetes 1.19 或更高版本,则必须关闭 firewalld。
某些 [源自 RHEL](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux#Rebuilds) 的 Linux 发行版(包括 Oracle Linux)的默认防火墙规则可能会阻止与 Helm 的通信。
例如,AWS 中的一个 Oracle Linux 镜像具有 REJECT 规则,这些规则会阻止 Helm 与 Tiller 通信:
```
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
```
你可运行以下命令检查默认防火墙规则:
```
sudo iptables --list
```
下文介绍如何使用 `firewalld`,将[防火墙端口规则](../../installation-requirements/port-requirements.md)应用到高可用 Rancher Server 集群中的节点。
## 先决条件
安装 v7.x 或更高版本的 `firewalld`:
```
yum install firewalld
systemctl start firewalld
systemctl enable firewalld
```
## 应用防火墙端口规则
在 Rancher 高可用安装中,Rancher Server 设置在三个节点上,三个节点均具有 Kubernetes 的所有三个角色(etcd、controlplane 和 worker)。如果你的 Rancher Server 节点同时具有这三个角色,请在每个节点上运行以下命令:
```
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2379/tcp
firewall-cmd --permanent --add-port=2380/tcp
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --permanent --add-port=9099/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10254/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --permanent --add-port=30000-32767/udp
```
如果你的 Rancher Server 节点配置了单独的角色,请根据节点角色运行以下命令:
```
# 在 etcd 节点上运行以下命令:
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2379/tcp
firewall-cmd --permanent --add-port=2380/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --permanent --add-port=9099/tcp
firewall-cmd --permanent --add-port=10250/tcp
# 在 controlplane 节点上运行以下命令:
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --permanent --add-port=9099/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10254/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --permanent --add-port=30000-32767/udp
# 在 worker 节点上运行以下命令:
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --permanent --add-port=9099/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10254/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --permanent --add-port=30000-32767/udp
```
在节点上运行 `firewall-cmd` 命令后,使用以下命令启用防火墙规则:
```
firewall-cmd --reload
```
**结果**:防火墙已更新,因此 Helm 可以与 Rancher Server 节点通信了。
@@ -0,0 +1,40 @@
---
title: 为大型安装进行 etcd 调优
weight: 2
---
当你运行具有 15 个或更多集群的大型 Rancher 安装时,我们建议你扩大 etcd 的默认 keyspace(默认为 2GB)。你最大可以将它设置为 8GB。此外,请确保主机有足够的 RAM 来保存整个数据集。如果需要增加这个值,你还需要同步增加主机的大小。如果你预计在垃圾回收间隔期间 Pod 的变化率很高,你也可以在较小的安装中调整 Keyspace 大小。
Kubernetes 每隔五分钟会自动清理 etcd 数据集。在某些情况下(例如发生部署抖动),在垃圾回收发生并进行清理之前会有大量事件写入 etcd 并删除,从而导致 Keyspace 填满。如果你在 etcd 日志或 Kubernetes API Server 日志中看到 `mvcc: database space exceeded` 错误,你可以在 etcd 服务器上设置 [quota-backend-bytes](https://etcd.io/docs/v3.4.0/op-guide/maintenance/#space-quota) 来增加 Keyspace 的大小。
### 示例:此 RKE cluster.yml 文件的代码片段将 Keyspace 的大小增加到 5GB
```yaml
# RKE cluster.yml
---
services:
etcd:
extra_args:
quota-backend-bytes: 5368709120
```
## 扩展 etcd 磁盘性能
你可以参见 [etcd 文档](https://etcd.io/docs/v3.4.0/tuning/#disk)中的建议,了解如何调整主机上的磁盘优先级。
此外,为了减少 etcd 磁盘上的 IO 争用,你可以为 data 和 wal 目录使用专用设备。etcd 最佳实践不建议配置 Mirror RAID(因为 etcd 在集群中的节点之间复制数据)。你可以使用 striping RAID 配置来增加可用的 IOPS。
要在 RKE 集群中实现此解决方案,你需要在底层主机上为 `/var/lib/etcd/data` 和 `/var/lib/etcd/wal` 目录挂载并格式化磁盘。`etcd` 服务的 `extra_args` 指令中必须包含 `wal_dir` 目录。如果不指定 `wal_dir`,etcd 进程会尝试在权限不足的情况下操作底层的 `wal` 挂载。
```yaml
# RKE cluster.yml
---
services:
etcd:
extra_args:
data-dir: '/var/lib/rancher/etcd/data/'
wal-dir: '/var/lib/rancher/etcd/wal/wal_dir'
extra_binds:
- '/var/lib/etcd/data:/var/lib/rancher/etcd/data'
- '/var/lib/etcd/wal:/var/lib/rancher/etcd/wal'
```
@@ -0,0 +1,14 @@
---
title: 持续交付
weight: 3
---
从 Rancher 2.5 开始,[Fleet](../../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md) 已经预装在 Rancher 中,且从 Rancher 2.6 开始,Fleet 不能再完全禁用。但是,你可以使用 `continuous-delivery` 功能开关来禁用 GitOps 持续交付的 Fleet 功能。
如需启用或禁用此功能,请参见[启用实验功能主页](../../../../pages-for-subheaders/enable-experimental-features.md)中的说明。
| 环境变量键 | 默认值 | 描述 |
---|---|---
| `continuous-delivery` | `true` | 此开关禁用 Fleet 的 GitOps 持续交付功能。 |
如果你在 Rancher 2.5.x 中禁用了 Fleet,然后将 Rancher 升级到 v2.6.x,Fleet 将启用。只有 Fleet 的持续交付功能可以被禁用。当 `continuous-delivery` 被禁用时,`gitjob` deployment 不再部署到 Rancher Server 的本地集群中,且 `continuous-delivery` 不会在 Rancher UI 中显示。
@@ -0,0 +1,33 @@
---
title: UI 管理 Istio 虚拟服务和目标规则
weight: 2
---
此功能可启动一个 UI,用于管理 Istio 的流量,其中包括创建、读取、更新和删除虚拟服务(Virtual Service)和目标规则(Destination Rule)。
> **注意**:启用此功能并不会启用 Istio。集群管理员需要[为集群启用 Istio](../../../../pages-for-subheaders/istio-setup-guide.md) 才能使用该功能。
如需启用或禁用此功能,请参见[启用实验功能主页](../../../../pages-for-subheaders/enable-experimental-features.md)中的说明。
| 环境变量键 | 默认值 | 状态 | 可用于 |
---|---|---|---
| `istio-virtual-service-ui` | `false` | 实验功能 | v2.3.0 |
| `istio-virtual-service-ui` | `true` | GA | v2.3.2 |
## 功能介绍
Istio 流量管理功能的主要优势时允许动态请求路由,这对于金丝雀发布,蓝/绿发布或 A/B 测试都非常有用。
启用此功能后,一个页面会打开,让你通过 Rancher UI 配置 Istio 的某些流量管理功能。如果不使用此功能,你可以通过 `kubectl` 来使用 Istio 管理流量。
此功能会启用两个选项卡,一个用于**虚拟服务**,另一个用于**目标规则**。
- **虚拟服务**:拦截并将流量重定向到你的 Kubernetes Service 上。这样,你可以将部分请求流量定向到不同的服务上。你可以使用这些服务来定义一组路由规则,用于主机寻址。详情请参见 [Istio 官方文档](https://istio.io/docs/reference/config/networking/v1alpha3/virtual-service/)。
- **目标规则**:作为唯一可信来源,表明哪些服务版本可用于接收虚拟服务的流量。你可以使用这些资源来定义策略,这些策略适用于路由发生后用于服务的流量。详情请参见 [Istio 官方文档](https://istio.io/docs/reference/config/networking/v1alpha3/destination-rule)。
如需查看选项卡:
1. 点击 **☰ > 集群管理**。
1. 转到安装了 Istio 的集群,然后单击 **Explore**。
1. 在左侧导航栏中,单击 **Istio**。
1. 你将看到 **Kiali** 和 **Jaeger** 的选项卡。在左侧导航栏中,你可查看和配置**虚拟服务**和**目标规则**。
@@ -0,0 +1,45 @@
---
title: "在 ARM64 上运行 Rancher(实验性)"
weight: 3
---
:::caution
在使用 ARM64 架构的节点上运行 Rancher 目前还处在实验阶段,Rancher 尚未正式支持该功能。因此,我们不建议你在生产环境中使用 ARM64 架构的节点。
:::
如果你的节点使用 ARM64 架构,你可以使用以下选项:
- 在 ARM64 架构的节点上运行 Rancher
- 此选项仅适用于 Docker 安装。请知悉,以下安装命令取代了 [Docker 安装](../../../../../versioned_docs/version-2.0-2.4/pages-for-subheaders/rancher-on-a-single-node-with-docker.md)链接中的示例:
```
# 在最后一行 `rancher/rancher:vX.Y.Z` 中,请务必将 "X.Y.Z" 替换为包含 ARM64 版本的发布版本。例如,如果你的匹配版本是 v2.5.8,请在此行填写 `rancher/rancher:v2.5.8`。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
--privileged \
rancher/rancher:vX.Y.Z
```
:::note
要检查你的发行版本是否与 ARM64 架构兼容,你可以使用以下两种方式找到对应版本的发行说明:
- 访问 [Rancher 发行版本](https://github.com/rancher/rancher/releases)自行查询。
- 根据标签和版本号直接找到你的版本。例如,你使用的版本为 2.5.8,你可以访问 [Rancher 发行版本 - 2.5.8](https://github.com/rancher/rancher/releases/tag/v2.5.8)。
:::
- 创建自定义集群并添加使用 ARM64 架构的节点
- Kubernetes 集群必须为 1.12 或更高版本
- CNI 网络插件必须是 [Flannel](../../../../faq/container-network-interface-providers.md#flannel)
- 导入包含使用 ARM64 架构的节点的集群
- Kubernetes 集群必须为 1.12 或更高版本
如需了解如何配置集群选项,请参见[集群选项](cluster-provisioning/rke-clusters/options/)。
以下是未经测试的功能:
- Monitoring、告警、Notifiers、流水线和 Logging
- 通过应用商店发布应用
@@ -0,0 +1,40 @@
---
title: 使用非默认支持的存储驱动
weight: 1
---
此功能允许你使用不是默认启用的存储提供商和卷插件。
如需启用或禁用此功能,请参见[启用实验功能主页](../../../../pages-for-subheaders/enable-experimental-features.md)中的说明。
| 环境变量键 | 默认值 | 描述 |
---|---|---
| `unsupported-storage-drivers` | `false` | 启用非默认启用的存储提供商和卷插件。 |
### 默认启用的持久卷插件
下表描述了默认启用的存储类型对应的持久卷插件。启用此功能开关时,不在此列表中的任何持久卷插件均被视为实验功能,且不受支持:
| 名称 | 插件 |
--------|----------
| Amazon EBS Disk | `aws-ebs` |
| AzureFile | `azure-file` |
| AzureDisk | `azure-disk` |
| Google Persistent Disk | `gce-pd` |
| Longhorn | `flex-volume-longhorn` |
| VMware vSphere Volume | `vsphere-volume` |
| 本地 | `local` |
| 网络文件系统 | `nfs` |
| hostPath | `host-path` |
### 默认启用的 StorageClass
下表描述了默认启用的 StorageClass 对应的持久卷插件。启用此功能开关时,不在此列表中的任何持久卷插件均被视为实验功能,且不受支持:
| 名称 | 插件 |
--------|--------
| Amazon EBS Disk | `aws-ebs` |
| AzureFile | `azure-file` |
| AzureDisk | `azure-disk` |
| Google Persistent Disk | `gce-pd` |
| Longhorn | `flex-volume-longhorn` |
| VMware vSphere Volume | `vsphere-volume` |
| 本地 | `local` |
@@ -0,0 +1,91 @@
---
title: 在离线环境中渲染 Helm 模板
shortTitle: 离线升级
weight: 1
---
:::note
以下说明假设你已经按照[本页](upgrades.md)的 Kubernetes 升级说明操作(包括先决条件)到步骤 3:升级 Rancher。
:::
### Rancher Helm 模板选项
使用安装 Rancher 时选择的选项来渲染 Rancher 模板。参考下表来替换每个占位符。Rancher 需要配置为使用私有镜像仓库,以便配置所有 Rancher 启动的 Kubernetes 集群或 Rancher 工具。
根据你在安装过程中做出的选择,完成以下步骤之一。
| 占位符 | 描述 |
------------|-------------
| `<VERSION>` | 输出压缩包的版本号。 |
| `<RANCHER.YOURDOMAIN.COM>` | 指向负载均衡器的 DNS 名称。 |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 你的私有镜像仓库的 DNS 名称。 |
| `<CERTMANAGER_VERSION>` | 在 K8s 集群上运行的 cert-manager 版本。 |
### 选项 A:使用默认的自签名证书
```
helm template rancher ./rancher-<VERSION>.tgz --output-dir . \
--no-hooks \ # prevent files for Helm hooks from being generated
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set certmanager.version=<CERTMANAGER_VERSION> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \ # Set a default private registry to be used in Rancher
--set useBundledSystemChart=true # Use the packaged Rancher system charts
```
### 选项 B:使用 Kubernetes 密文从文件中获取证书
```plain
helm template rancher ./rancher-<VERSION>.tgz --output-dir . \
--no-hooks \ # prevent files for Helm hooks from being generated
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set ingress.tls.source=secret \
--set systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \ # Set a default private registry to be used in Rancher
--set useBundledSystemChart=true # Use the packaged Rancher system charts
```
如果你使用的是私有 CA 签名的证书,请在 `--set ingress.tls.source=secret` 后加上 `--set privateCA=true`:
```plain
helm template rancher ./rancher-<VERSION>.tgz --output-dir . \
--no-hooks \ # prevent files for Helm hooks from being generated
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set ingress.tls.source=secret \
--set privateCA=true \
--set systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \ # Set a default private registry to be used in Rancher
--set useBundledSystemChart=true # Use the packaged Rancher system charts
```
### 应用已渲染的模板
将渲染的 manifest 目录复制到可以访问 Rancher Server 集群的系统中,并应用渲染的模板。
使用 `kubectl` 来应用渲染的 manifest。
```plain
kubectl -n cattle-system apply -R -f ./rancher
```
# 验证升级
登录 Rancher 以确认升级成功。
:::tip
升级后出现网络问题
请参见[恢复集群网络](../../../../versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。
:::
# 已知升级问题
你可以在 [GitHub](https://github.com/rancher/rancher/releases) 发布说明以及 [Rancher 论坛](https://forums.rancher.com/c/announcements/12)中找到每个 Rancher 版本的已知问题。
@@ -0,0 +1,138 @@
---
title: 在 Azure Kubernetes Service 上安装 Rancher
shortTitle: AKS
weight: 3
---
本文介绍了如何在微软的 Azure Kubernetes Service (AKS) 上安装 Rancher。
本指南使用命令行工具来配置一个带有 Ingress 的 AKS 集群。如果你更喜欢使用 Azure 门户来配置集群,请参见[官方文档](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough-portal)。
如果你已有一个 AKS Kubernetes 集群,请直接跳到[安装 Ingress](#5-安装-ingress) 的步骤,然后按照[此页](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。
## 先决条件
:::caution
部署到 Microsoft Azure 会产生费用。
:::
- [Microsoft Azure 账号](https://azure.microsoft.com/en-us/free/):用于创建部署 Rancher 和 Kubernetes 的资源。
- [Microsoft Azure 订阅](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal):如果你没有的话,请访问此链接查看如何创建 Microsoft Azure 订阅。
- [Micsoroft Azure 租户](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant):访问此链接并参考教程以创建 Microsoft Azure 租户。
- 你的订阅有足够的配额,至少有 2 个 vCPU。有关 Rancher Server 资源要求的详情,请参见[此节](../../../pages-for-subheaders/installation-requirements.md#rke-和托管-kubernetes)。
- 在 Azure 中用 Helm 安装 Rancher 时,请使用 L7 负载均衡器来避免网络问题。详情请参见 [Azure 负载均衡器限制](https://docs.microsoft.com/en-us/azure/load-balancer/components#limitations)。
## 1. 准备你的工作站
在工作站上安装以下命令行工具:
- **az**,Azure CLI:如需获得帮助,请参见[安装步骤](https://docs.microsoft.com/en-us/cli/azure/)。
- **kubectl**:如需获得帮助,请参见[安装步骤](https://kubernetes.io/docs/tasks/tools/#kubectl)。
- **helm**:如需获取帮助,请参见[安装步骤](https://helm.sh/docs/intro/install/)。
## 2. 创建资源组
安装 CLI 后,你需要用你的 Azure 账户登录:
```
az login
```
创建一个 [资源组](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal) 来保存集群的所有相关资源。使用一个适用于你实际情况的位置:
```
az group create --name rancher-rg --location eastus
```
## 3. 创建 AKS 集群
运行以下命令创建一个 AKS 集群。选择适用于你实际情况的虚拟机大小。如需获得可用的大小和选项,请参见[此处](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes)。在选择 Kubernetes 版本时,请务必先查阅[支持矩阵](https://rancher.com/support-matrix/),以找出已针对你的 Rancher 版本验证的最新 Kubernetes 版本。
:::note
如果 Kubernetes 的版本更新到 v1.22 或更高版本,则 ingress-nginx 的版本也需要[更新](https://kubernetes.github.io/ingress-nginx/#faq-migration-to-apiversion-networkingk8siov1)。
:::
```
az aks create \
--resource-group rancher-rg \
--name rancher-server \
--kubernetes-version <VERSION> \
--node-count 3 \
--node-vm-size Standard_D2_v3
```
集群部署需要一些时间才能完成。
## 4. 获取访问凭证
集群部署完成后,获取访问凭证。
```
az aks get-credentials --resource-group rancher-rg --name rancher-server
```
此命令把集群的凭证合并到现有的 kubeconfig 中,并允许 `kubectl` 与集群交互。
## 5. 安装 Ingress
集群需要一个 Ingress,以从集群外部访问 Rancher。要 Ingress,你需要分配一个公共 IP 地址。请确保你有足够的配额,否则它将无法分配 IP 地址。公共 IP 地址的限制在每个订阅的区域级别生效。
以下命令安装了带有 Kubernetes 负载均衡器服务的 `nginx-ingress-controller`。
```
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install \
ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.service.type=LoadBalancer \
--version 4.0.18 \
--create-namespace
```
## 6. 获取负载均衡器的 IP
运行以下命令获取负载均衡器的 IP 地址:
```
kubectl get service ingress-nginx-controller --namespace=ingress-nginx
```
返回的结果应与以下内容类似:
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
AGE
ingress-nginx-controller LoadBalancer 10.0.116.18 40.31.180.83 80:31229/TCP,443:31050/TCP
67s
```
保存 `EXTERNAL-IP`。
## 7. 设置 DNS
到 Rancher Server 的外部流量需要重定向到你创建的负载均衡器。
创建指向你保存的 `EXTERNAL-IP` 的 DNS。这个 DNS 会用作 Rancher Server 的 URL。
设置 DNS 的有效方法有很多。如需获取帮助,请参见 [Azure DNS 文档中心](https://docs.microsoft.com/en-us/azure/dns/)。
## 8. 安装 Rancher Helm Chart
按照[本页](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。任何 Kubernetes 发行版上安装的 Rancher 的 Helm 说明都是一样的。
安装 Rancher 时,使用上一步获取的 DNS 名称作为 Rancher Server 的 URL。它可以作为 Helm 选项传递进来。例如,如果 DNS 名称是 `rancher.my.org`,你需要使用 `--set hostname=rancher.my.org` 选项来运行 Helm 安装命令。
**_v2.6.7 新功能_**
在此设置之上安装 Rancher 时,你还需要将以下值传递到 Rancher Helm 安装命令,以设置与 Rancher 的 Ingress 资源一起使用的 Ingress Controller 的名称:
```
--set ingress.ingressClassName=nginx
```
请参阅[Helm 安装命令](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#5-根据你选择的证书选项,通过-helm-安装-rancher)了解你的证书选项。
@@ -0,0 +1,176 @@
---
title: 在 Amazon EKS 上安装 Rancher
shortTitle: Amazon EKS
weight: 3
---
本文介绍了在 EKS 上安装 Rancher 的两种方法。
第一种方法是使用 CloudFormation 在 EKS 集群上部署 Rancher Server。该方法的指南是与 Amazon Web Services 合作创建的,旨在展示如何按照最佳实践部署 Rancher。
第二种方法是使用命令行工具安装带有 Ingress 的 EKS 集群。如果你想在 EKS 上使用 Rancher 时使用较少的资源,请使用此方法。
如果你已经有一个 EKS Kubernetes 集群,请直接跳转到[安装 Ingress](#5-安装-ingress)这个步骤。然后按照[此处](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的步骤安装 Rancher Helm Chart。
## 使用 AWS 最佳实践的快速入门
Rancher 和 Amazon Web Services 合作编写了一份快速入门指南,用于按照 AWS 的最佳实践,在 EKS 集群上部署 Rancher。详情请参见[部署指南](https://aws-quickstart.github.io/quickstart-eks-rancher/)。
快速入门指南提供了在 EKS 上部署 Rancher 的三个选项:
- **将 Rancher 部署到新的 VPC 和新的 Amazon EKS 集群中**:该选项构建了一个由 VPC、子网、NAT 网关、安全组、堡垒主机、Amazon EKS 集群和其他基础设施组件组成的全新 AWS 环境。然后将 Rancher 部署到这个新的 EKS 集群中。
- **将 Rancher 部署到现有 VPC 和新的 Amazon EKS 集群中**:此选项在现有 AWS 基础架构中配置 Rancher。
- **将 Rancher 部署到现有的 VPC 和现有的 Amazon EKS 集群中**。此选项在现有 AWS 基础架构中配置 Rancher。
使用默认参数为新的 Virtual Private Cloud(VPC)和新的 Amazon EKS 集群按照此快速入门部署,会在 AWS Cloud 中构建以下 Rancher 环境:
- 跨越三个可用区的高可用架构。\*
- 根据 AWS 最佳实践,配置有公共和私有子网的 VPC,为你提供 AWS 上你自己的虚拟网络。\*
- 在公共子网中:
- 管理网络地址转换(NAT)网关,以允许资源的出站互联网访问。\*
- 自动扩缩组中的 Linux 堡垒主机,允许对公共和私有子网中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例进行入站安全 Shell (SSH) 访问。\*
- 私有子网中:
- 自动扩缩组中的 Kubernetes 节点。\*
- 网络负载均衡器(未显示),用于访问 Rancher 控制台。
- 使用 AWS Systems Manager 自动化进行 Rancher 部署。
- 用于 EKS 集群的 Amazon EKS 服务,它提供了 Kubernetes controlplane。\*
- 用于访问 Rancher 部署的 Amazon Route 53 DNS 记录。
\* 将快速启动部署到现有 Amazon EKS 集群中的 CloudForm 模板会跳过标有星号(\*)的组件,并提示你查看现有 VPC 配置。
## 为 Rancher Server 创建 EKS 集群
在本节中,你将使用命令行工具安装一个带有 Ingress 的 EKS 集群。如果你想在 EKS 上使用 Rancher 时使用较少的资源,请使用此方法。
:::note 先决条件:
- 已有一个 AWS 账户。
- 建议使用 IAM 用户而不是 AWS 根账户。你将需要 IAM 用户的访问密钥 (access key) 和密文秘钥 (secret key) 来配置 AWS 命令行界面。
- IAM 用户需要具备[eksctl 文档](https://eksctl.io/usage/minimum-iam-policies/)中描述的最低 IAM 策略。
:::
### 1. 准备你的工作站
在工作站上安装以下命令行工具:
- **AWS CLI v2**:如需获取帮助,请参见[安装步骤](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
- **eksctl**:如需获取帮助,请参见[安装步骤](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)。
- **kubectl**:如需获得帮助,请参见[安装步骤](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。
- **helm**:如需获取帮助,请参见[安装步骤](https://helm.sh/docs/intro/install/)。
### 2. 配置 AWS CLI
运行以下命令,配置 AWS CLI:
```
aws configure
```
输入以下参数:
| 值 | 描述 |
|-------|-------------|
| AWS Access Key ID | 具有 EKS 权限的 IAM 用户的访问密钥凭证。 |
| AWS Secret Access Key | 具有 EKS 权限的 IAM 用户的密文密钥凭证。 |
| Default region name | 集群节点所在的 [AWS 区域](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html#Concepts.RegionsAndAvailabilityZones.Regions)。 |
| Default output format | 输入 `json`。 |
### 3. 创建 EKS 集群
运行以下命令创建一个 EKS 集群。使用适用于你的用例的 AWS 区域。在选择 Kubernetes 版本时,请务必先查阅[支持矩阵](https://rancher.com/support-matrix/),以找出已针对你的 Rancher 版本验证的最新 Kubernetes 版本。
**注意**:如果 Kubernetes 的版本更新到 v1.22 或更高版本,则 ingress-nginx 的版本也需要[更新](https://kubernetes.github.io/ingress-nginx/#faq-migration-to-apiversion-networkingk8siov1)。
```
eksctl create cluster \
--name rancher-server \
--version <VERSION> \
--region us-west-2 \
--nodegroup-name ranchernodes \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--managed
```
使用 CloudFormation 进行的集群部署可能需要一些时间才能完成。
### 4. 测试集群
运行以下命令测试集群:
```
eksctl get cluster
```
返回的结果应与以下内容类似:
```
eksctl get cluster
2021-03-18 15:09:35 [ℹ] eksctl version 0.40.0
2021-03-18 15:09:35 [ℹ] using region us-west-2
NAME REGION EKSCTL CREATED
rancher-server-cluster us-west-2 True
```
### 5. 安装 Ingress
集群需要一个 Ingress,以从集群外部访问 Rancher。
以下命令安装了一个 `nginx-ingress-controller`和一个 LoadBalancer 服务。因此,NGINX 前面会有一个 ELB(Elastic Load Balancer):
```
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install \
ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.service.type=LoadBalancer \
--version 4.0.18 \
--create-namespace
```
### 6. 获取负载均衡器的 IP
运行以下命令获取负载均衡器的 IP 地址:
```
kubectl get service ingress-nginx-controller --namespace=ingress-nginx
```
返回的结果应与以下内容类似:
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
AGE
ingress-nginx-controller LoadBalancer 10.100.90.18 a904a952c73bf4f668a17c46ac7c56ab-962521486.us-west-2.elb.amazonaws.com 80:31229/TCP,443:31050/TCP
27m
```
保存 `EXTERNAL-IP`。
### 7. 设置 DNS
到 Rancher Server 的外部流量需要重定向到你创建的负载均衡器。
创建指向你保存的外部 IP 地址的 DNS。这个 DNS 会用作 Rancher Server 的 URL。
设置 DNS 的有效方法有很多。如需获得帮助,请参见 AWS 文档中心的[转发流量到 ELB 负载均衡器](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer.html)。
### 8. 安装 Rancher Helm Chart
按照[本页](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。任何 Kubernetes 发行版上安装的 Rancher 的 Helm 说明都是一样的。
安装 Rancher 时,使用上一步获取的 DNS 名称作为 Rancher Server 的 URL。它可以作为 Helm 选项传递进来。例如,如果 DNS 名称是 `rancher.my.org`,你需要使用 `--set hostname=rancher.my.org` 选项来运行 Helm 安装命令。
**_v2.6.7 新功能_**
在此设置之上安装 Rancher 时,你还需要将以下值传递到 Rancher Helm 安装命令,以设置与 Rancher 的 Ingress 资源一起使用的 Ingress Controller 的名称:
```
--set ingress.ingressClassName=nginx
```
请参阅[Helm 安装命令](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#5-根据你选择的证书选项,通过-helm-安装-rancher)了解你的证书选项。
@@ -0,0 +1,198 @@
---
title: 在 GKE 集群上安装 Rancher
shortTitle: GKE
weight: 3
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
在本节中,你将学习如何使用 GKE 安装 Rancher。
如果你已经有一个 GKE Kubernetes 集群,请直接跳转到[安装 Ingress](#7-安装-ingress)这个步骤。然后按照[此处](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的步骤安装 Rancher Helm Chart。
## 先决条件
- 你需要有一个 Google 账号。
- 你需要有一个 Google Cloud Billing 账号。你可使用 Google Cloud Console 来管理你的 Cloud Billing 账号。有关 Cloud Console 的详情,请参见 [ Console 通用指南](https://support.google.com/cloud/answer/3465889?hl=en&ref_topic=3340599)。
- 你需要至少一个在用的 IP 地址和至少 2 个 CPU 的云配额。有关 Rancher Server 的硬件要求,请参见[本节](../../../pages-for-subheaders/installation-requirements.md#rke-和托管-kubernetes)。
## 1. 启用 Kubernetes Engine API
按照以下步骤启用 Kubernetes Engine API:
1. 访问 Google Cloud Console 中的 [Kubernetes Engine 页面](https://console.cloud.google.com/projectselector/kubernetes?_ga=2.169595943.767329331.1617810440-856599067.1617343886)。
1. 创建或选择一个项目。
1. 打开项目,并为项目启用 Kubernetes Engine API。等待 API 和相关服务的启用。这可能需要几分钟时间。
1. 确保为你的云项目启用了计费。有关如何为你的项目启用计费,请参见 [Google Cloud 文档中心](https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)。
## 2. 打开 Cloud Shell
Cloud Shell 是一个 shell 环境,用于管理托管在 Google Cloud 上的资源。Cloud Shell 预装了 `gcloud` 命令行工具和 kubectl 命令行工具中。`gcloud` 工具为 Google Cloud 提供主要的命令行界面,而`kubectl` 则提供针对 Kubernetes 集群的主要命令行界面。
下文描述了如何从 Google Cloud Console 或从本地工作站启动 Cloud Shell。
### Cloud Shell
如需从 [Google Cloud Console](https://console.cloud.google.com) 启动 shell,请在控制台的右上角点击终端按钮。鼠标悬停在按钮上时,它会标记为 **Activate Cloud Shell**。
### 本地 Shell
执行以下步骤以安装 `gcloud` 和 `kubectl`:
1. 按照[这些步骤](https://cloud.google.com/sdk/docs/install)安装 Cloud SDK。The Cloud SDK 包括 `gcloud` 命令行工具。不同操作系统对应的步骤有所不同。
1. 安装 Cloud SDK 后,运行以下命令以安装 `kubectl` 命令行工具:
```
gcloud components install kubectl
```
后面的步骤会配置 `kubectl`,使其用于使用新的 GKE 集群。
1. 如果 Helm 3 未安装的话,[安装 Helm 3](https://helm.sh/docs/intro/install/)。
1. 使用 `HELM_EXPERIMENTAL_OCI` 变量来启用 Helm 的实验功能 [OCI 镜像支持](https://github.com/helm/community/blob/master/hips/hip-0006.md)。把以下行添加到 `~/.bashrc` (或 macOS 中的 `~/.bash_profile`,或者你的 shell 存储环境变量的地方):
```
export HELM_EXPERIMENTAL_OCI=1
```
1. 运行以下命令来加载你更新的 `.bashrc` 文件:
```
source ~/.bashrc
```
如果你运行的是 macOS,使用这个命令:
```
source ~/.bash_profile
```
## 3. 配置 gcloud CLI
选择以下方法之一配置默认的 gcloud 设置:
- 如果你想了解默认值,请使用 gcloud init。
- 如需单独设置你的项目 ID、地区和区域,使用 gcloud config。
<Tabs>
<TabItem value="使用 gcloud init">
1. 运行 gcloud init 并按照指示操作:
```
gcloud init
```
如果你在远程服务器上使用 SSH,使用 --console-only 标志,以防止该命令启动浏览器。
```
gcloud init --console-only
```
2. 按照指示,以授权 gcloud 使用你的 Google Cloud 账户,并选择你创建的新项目。
</TabItem>
<TabItem value="使用 gcloud config">
</TabItem>
</Tabs>
## 4. 确认 gcloud 的配置是否正确
运行:
```
gcloud config list
```
返回的结果应与以下内容类似:
```
[compute]
region = us-west1 # Your chosen region
zone = us-west1-b # Your chosen zone
[core]
account = <Your email>
disable_usage_reporting = True
project = <Your project ID>
Your active configuration is: [default]
```
## 5. 创建一个 GKE 集群
下面的命令创建了一个三节点的集群。
把 `cluster-name` 替换为你新集群的名称。
在选择 Kubernetes 版本时,请务必先查阅[支持矩阵](https://rancher.com/support-matrix/),以找出已针对你的 Rancher 版本验证的最新 Kubernetes 版本。
**注意**:如果 Kubernetes 的版本更新到 v1.22 或更高版本,则 ingress-nginx 的版本也需要[更新](https://kubernetes.github.io/ingress-nginx/#faq-migration-to-apiversion-networkingk8siov1)。
```
gcloud container clusters create cluster-name --num-nodes=3 --cluster-version=<VERSION>
```
## 6. 获取验证凭证
创建集群后,你需要获得认证凭证才能与集群交互:
```
gcloud container clusters get-credentials cluster-name
```
此命令将 `kubectl` 配置成使用你创建的集群。
## 7. 安装 Ingress
集群需要一个 Ingress,以从集群外部访问 Rancher。
以下命令安装带有 LoadBalancer 服务的 `nginx-ingress-controller`:
```
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install \
ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.service.type=LoadBalancer \
--version 4.0.18 \
--create-namespace
```
## 8. 获取负载均衡器的 IP
运行以下命令获取负载均衡器的 IP 地址:
```
kubectl get service ingress-nginx-controller --namespace=ingress-nginx
```
返回的结果应与以下内容类似:
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.3.244.156 35.233.206.34 80:31876/TCP,443:32497/TCP 81s
```
保存 `EXTERNAL-IP`。
## 9. 设置 DNS
到 Rancher Server 的外部流量需要重定向到你创建的负载均衡器。
创建指向你保存的外部 IP 地址的 DNS。这个 DNS 会用作 Rancher Server 的 URL。
设置 DNS 的有效方法有很多。如需获取帮助,请参见 Google Cloud 文档中的[管理 DNS 记录](https://cloud.google.com/dns/docs/records)部分。
## 10. 安装 Rancher Helm Chart
按照[本页](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#安装-rancher-helm-chart)的说明安装 Rancher Helm Chart。任何 Kubernetes 发行版上安装的 Rancher 的 Helm 说明都是一样的。
安装 Rancher 时,使用上一步获取的 DNS 名称作为 Rancher Server 的 URL。它可以作为 Helm 选项传递进来。例如,如果 DNS 名称是 `rancher.my.org`,你需要使用 `--set hostname=rancher.my.org` 选项来运行 Helm 安装命令。
**_v2.6.7 新功能_**
在此设置之上安装 Rancher 时,你还需要将以下值传递到 Rancher Helm 安装命令,以设置与 Rancher 的 Ingress 资源一起使用的 Ingress Controller 的名称:
```
--set ingress.ingressClassName=nginx
```
请参阅[Helm 安装命令](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#5-根据你选择的证书选项,通过-helm-安装-rancher)了解你的证书选项。
@@ -0,0 +1,116 @@
---
title: 回滚
weight: 3
---
## 回滚到 Rancher 2.5.0+
要回滚到 Rancher 2.5.0+,使用 **Rancher 备份**应用并通过备份来恢复 Rancher。
回滚后,Rancher 必须以较低/较早的版本启动。
还原是通过创建 Restore 自定义资源实现的。
:::note 重要提示:
* 请按照此页面上的说明在已备份的同一集群上还原 Rancher。要把 Rancher 迁移到新集群,请参照步骤[迁移 Rancher](../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。
* 在使用相同设置恢复 Rancher 时,Rancher deployment 在恢复开始前被手动缩减,然后 Operator 将在恢复完成后将其缩回。因此,在恢复完成之前,Rancher 和 UI 都将不可用。如果 UI 不可用时,你可使用 `kubectl create -f restore.yaml`YAML 恢复文件来使用初始的集群 kubeconfig。
:::
### 将 Rancher Deployment 规模扩展到 0
1. 在左上角,点击 **☰ > local**。
1. 在左侧主菜单中,点击**工作负载**。
1. 在**工作负载**下,点击 **Deployments**。
1. 点击上方下拉菜单以调整筛选条件。选择 **cattle-system** 作为筛选条件。
1. 找到 `rancher` deployment 的行,并点击**⋮ > 编辑配置**。
1. 将**副本数量**改为 0。
1. 滚动到底部并点击**保存**。
### 创建 Restore 自定义资源
1. 点击 **☰ > 集群管理**。
1. 找到你的本地集群,并点击 **Explore**。
1. 在左侧导航栏中,点击 **Rancher 备份 > 还原**。
:::note
如果 Rancher Backups 应用不可见,你需要到**应用 & 应用市场**的 Charts 页面中安装应用。详情请参见[此处](../../../pages-for-subheaders/helm-charts-in-rancher.md#charts)。
:::
1. 单击**创建**。
1. 使用表单或 YAML 创建 Restore。如需获取使用表单创建 Restore 资源的更多信息,请参见[配置参考](../../../reference-guides/backup-restore-configuration/restore-configuration.md)和[示例](../../../reference-guides/backup-restore-configuration/examples.md)。
1. 如需使用 YAML 编辑器,点击**创建 > 使用 YAML 文件创建**。然后输入 Restore YAML。以下是 Restore 自定义资源示例:
```yaml
apiVersion: resources.cattle.io/v1
kind: Restore
metadata:
name: restore-migration
spec:
backupFilename: backup-b0450532-cee1-4aa1-a881-f5f48a007b1c-2020-09-15T07-27-09Z.tar.gz
encryptionConfigSecretName: encryptionconfig
storageLocation:
s3:
credentialSecretName: s3-creds
credentialSecretNamespace: default
bucketName: rancher-backups
folder: rancher
region: us-west-2
endpoint: s3.us-west-2.amazonaws.com
```
如需获得配置 Restore 的帮助,请参见[配置参考](../../../reference-guides/backup-restore-configuration/restore-configuration.md)和[示例](../../../reference-guides/backup-restore-configuration/examples.md)。
1. 单击**创建**。
**结果**:已创建备份文件并更新到目标存储位置。资源还原顺序如下:
1. 自定义资源定义(CRD)
2. 集群范围资源
3. 命名空间资源
如需查看还原的处理方式,请检查 Operator 的日志。按照如下步骤获取日志:
```yaml
kubectl get pods -n cattle-resources-system
kubectl logs -n cattle-resources-system -f
```
### 回滚到上一个 Rancher 版本
你可以使用 Helm CLI 回滚 Rancher。要回滚到上一个版本:
```yaml
helm rollback rancher -n cattle-system
```
如果你不是想回滚到上一个版本,你也可以指定回滚的版本。查看部署历史记录:
```yaml
helm history rancher -n cattle-system
```
确定目标版本后,执行回滚。此示例回滚到版本 `3`:
```yaml
helm rollback rancher 3 -n cattle-system
```
## 回滚到 Rancher 2.2-2.4
要回滚到 2.5 之前的 Rancher 版本,参考此处的步骤[恢复备份 — Kubernetes 安装](../../../../versioned_docs/version-2.0-2.4/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md)。如果恢复 Rancher Server 的集群的某个快照,Rancher 的版本以及状态均会恢复回到快照时的版本和状态。
有关回滚 Docker 安装的 Rancher,请参见[本页](../other-installation-methods/rancher-on-a-single-node-with-docker/roll-back-docker-installed-rancher.md)。
:::note
托管集群对其状态具有权威性。因此,恢复 Rancher Server 不会恢复快照后对托管集群进行的工作负载部署或更改。
:::
## 回滚到 Rancher 2.0-2.1
我们不再支持回滚到 Rancher 2.0-2.1。回滚到这些版本的说明保留在[此处](../../../../versioned_docs/version-2.0-2.4/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup/roll-back-to-v2.0-v2.1.md),仅用于无法升级到 v2.2 的情况。
@@ -0,0 +1,189 @@
---
title: Rancher Server Kubernetes 集群的问题排查
weight: 276
---
本文介绍如何对安装在 Kubernetes 集群上的 Rancher 进行故障排除。
### 相关命名空间
故障排除主要针对以下 3 个命名空间中的对象:
- `cattle-system`:`rancher` deployment 和 Pod。
- `ingress-nginx`:Ingress Controller Pod 和 services。
- `cert-manager`:`cert-manager` Pod。
### "default backend - 404"
很多操作都有可能导致 Ingress Controller 无法将流量转发到你的 Rancher 实例。但是大多数情况下都是由错误的 SSL 配置导致的。
检查事项:
- [Rancher 是否正在运行](#检查-rancher-是否正在运行)
- [证书的 Common Name(CN)是 "Kubernetes Ingress Controller Fake Certificate"](#证书的-cn-是-kubernetes-ingress-controller-fake-certificate)
### 检查 Rancher 是否正在运行
使用 `kubectl` 检查 `cattle-system` 系统命名空间,并查看 Rancher Pod 的状态是否是 **Running**:
```
kubectl -n cattle-system get pods
NAME READY STATUS RESTARTS AGE
pod/rancher-784d94f59b-vgqzh 1/1 Running 0 10m
```
如果状态不是 `Running`,在 Pod 上运行 `describe`,并检查 **Events**:
```
kubectl -n cattle-system describe pod
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 11m default-scheduler Successfully assigned rancher-784d94f59b-vgqzh to localhost
Normal SuccessfulMountVolume 11m kubelet, localhost MountVolume.SetUp succeeded for volume "rancher-token-dj4mt"
Normal Pulling 11m kubelet, localhost pulling image "rancher/rancher:v2.0.4"
Normal Pulled 11m kubelet, localhost Successfully pulled image "rancher/rancher:v2.0.4"
Normal Created 11m kubelet, localhost Created container
Normal Started 11m kubelet, localhost Started container
```
### 检查 Rancher 日志
使用 `kubectl` 列出 Pod:
```
kubectl -n cattle-system get pods
NAME READY STATUS RESTARTS AGE
pod/rancher-784d94f59b-vgqzh 1/1 Running 0 10m
```
使用 `kubectl` 和 Pod 名称列出该 Pod 的日志:
```
kubectl -n cattle-system logs -f rancher-784d94f59b-vgqzh
```
### 证书的 CN 是 "Kubernetes Ingress Controller Fake Certificate"
使用浏览器检查证书的详细信息。如果显示 CN 是 "Kubernetes Ingress Controller Fake Certificate",则说明读取或颁发 SSL 证书时出现了问题。
:::note
如果你使用的是 Let's Encrypt 证书,证书颁发的过程可能需要几分钟。
:::
### 排查 Cert-Manager 颁发的证书(Rancher 或 Let's Encrypt 生成的)问题
`cert-manager` 有 3 部分:
- `cert-manager` 命名空间中的 `cert-manager` Pod。
- `cattle-system` 命名空间中的 `Issuer` 对象。
- `cattle-system` 命名空间中的 `Certificate` 对象。
往后操作,对每个对象运行 `kubectl describe` 并检查事件。这样,你可以追踪可能丢失的内容。
以下是 Issuer 有问题的示例:
```
kubectl -n cattle-system describe certificate
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning IssuerNotReady 18s (x23 over 19m) cert-manager Issuer rancher not ready
```
```
kubectl -n cattle-system describe issuer
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ErrInitIssuer 19m (x12 over 19m) cert-manager Error initializing issuer: secret "tls-rancher" not found
Warning ErrGetKeyPair 9m (x16 over 19m) cert-manager Error getting keypair for CA issuer: secret "tls-rancher" not found
```
### 排查你自己提供的 SSL 证书问题
你的证书直接应用于 `cattle-system` 命名空间中的 Ingress 对象。
检查 Ingress 对象的状态,并查看它是否准备就绪:
```
kubectl -n cattle-system describe ingress
```
如果 Ingress 对象已就绪,但是 SSL 仍然无法正常工作,你的证书或密文的格式可能不正确。
这种情况下,请检查 nginx-ingress-controller 的日志。nginx-ingress-controller 的 Pod 中有多个容器,因此你需要指定容器的名称:
```
kubectl -n ingress-nginx logs -f nginx-ingress-controller-rfjrq nginx-ingress-controller
...
W0705 23:04:58.240571 7 backend_ssl.go:49] error obtaining PEM from secret cattle-system/tls-rancher-ingress: error retrieving secret cattle-system/tls-rancher-ingress: secret cattle-system/tls-rancher-ingress was not found
```
### 没有匹配的 "Issuer"
你所选的 SSL 配置要求在安装 Rancher 之前先安装 Cert-Manager,否则会出现以下错误:
```
Error: validation failed: unable to recognize "": no matches for kind "Issuer" in version "certmanager.k8s.io/v1alpha1"
```
在这种情况下,先安装 Cert-Manager,然后再重新安装 Rancher。
### Canal Pod 显示 READY 2/3
此问题的最常见原因是端口 8472/UDP 在节点之间未打开。因此,你可以检查你的本地防火墙、网络路由或安全组。
解决网络问题后,`canal` Pod 会超时并重启以建立连接。
### nginx-ingress-controller Pod 显示 RESTARTS
此问题的最常见原因是 `canal` pod 未能建立覆盖网络。参见 [canal Pod 显示 READY `2/3`](#canal-pod-显示-ready-2/3) 进行排查。
### Failed to dial to /var/run/docker.sock: ssh: rejected: administratively prohibited (open failed)
此错误的原因可能是:
* 指定连接的用户无权访问 Docker Socket。如果是这个原因,你通过登录主机并运行 `docker ps` 命令来检查:
```
$ ssh user@server
user@server$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
```
如果需要了解如何进行正确设置,请参见[以非 root 用户身份管理 Docker](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)。
* 你使用的操作系统是 RedHat 或 CentOS:由于 [Bugzilla #1527565](https://bugzilla.redhat.com/show_bug.cgi?id=1527565),你不能使用 `root` 用户连接到节点。因此,你需要添加一个单独的用户并配置其访问 Docker Socket。如果需要了解如何进行正确设置,请参见[以非 root 用户身份管理 Docker](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user)。
* SSH 服务器版本不是 6.7 或更高版本:高版本是 Socket 转发所必须的,用于通过 SSH 连接到 Docker Socket。你可以在你要连接的主机上使用 `sshd -V` 或使用 netcat 进行检查:
```
$ nc xxx.xxx.xxx.xxx 22
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.10
```
### Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: Error configuring SSH: ssh: no key found
`ssh_key_path` 密钥文件无法访问:请确保你已经指定了私钥文件(不是公钥 `.pub`),而且运行 `rke` 命令的用户可以访问该私钥文件。
### Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
`ssh_key_path` 密钥文件不是访问节点的正确文件:请仔细检查,确保你已为节点指定了正确的 `ssh_key_path` 和连接用户。
### Failed to dial ssh using address [xxx.xxx.xxx.xxx:xx]: Error configuring SSH: ssh: cannot decode encrypted private keys
如需使用加密的私钥,请使用 `ssh-agent` 来使用密码来加载密钥。如果在运行 `rke` 命令的环境中找到 `SSH_AUTH_SOCK` 环境变量,它将自动用于连接到节点。
### Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
节点无法通过配置的 `address` 和 `port` 访问。
@@ -0,0 +1,181 @@
---
title: 升级
weight: 2
---
本文介绍如何升级使用 Helm 安装在 Kubernetes 集群上的 Rancher Server。这些步骤也适用于使用 Helm 进行的离线安装。
有关使用 Docker 安装的 Rancher 的升级说明,请参见[本页。](../other-installation-methods/rancher-on-a-single-node-with-docker/upgrade-docker-installed-rancher.md)
如需升级 Kubernetes 集群中的组件,或 [Kubernetes services](https://rancher.com/docs/rke/latest/en/config-options/services/) 或 [附加组件(add-on)](https://rancher.com/docs/rke/latest/en/config-options/add-ons/)的定义,请参见 [RKE 升级文档](https://rancher.com/docs/rke/latest/en/upgrades/)的 Rancher Kubernetes 引擎。
## 先决条件
### 访问 kubeconfig
Helm 的运行位置,应该与你的 kubeconfig 文件,或你运行 kubectl 命令的位置相同。
如果你在安装 Kubernetes 时使用了 RKE,那么 config 将会在你运行 `rke up` 的目录下创建。
kubeconfig 也可以通过 `--kubeconfig` 标签(详情请参见 https://helm.sh/docs/helm/helm/ )来手动指定所需的集群。
### 查看已知问题
如需查看每个 Rancher 版本的已知问题,请参见 [GitHub](https://github.com/rancher/rancher/releases) 中的发行说明,或查看 [Rancher 论坛](https://forums.rancher.com/c/announcements/12)。
不支持 _升级_ 或 _升级到_ [rancher-alpha 仓库](../../../reference-guides/installation-references/helm-chart-options.md#helm-chart-仓库)中的任何 Chart。
### Helm 版本
本安装指南假定你使用的是 Helm 3。
如果你使用 Helm 2,请参见 [Helm 2 迁移到 Helm 3 文档](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/)。如果你不能升级到 Helm 3,[Helm 2 升级页面](../../../../versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/helm2.md)提供了使用 Helm 2 升级的旧升级指南。
### 离线安装:推送镜像到私有镜像仓库
[仅适用于离线安装](../../../pages-for-subheaders/air-gapped-helm-cli-install.md):为新的 Rancher Server 版本收集和推送镜像。使用你需要针对 Rancher 版本升级的镜像,按照步骤[推送镜像到私有镜像仓库](../other-installation-methods/air-gapped-helm-cli-install/publish-images.md)。
### 升级 Rancher Server 并使用隐藏的本地集群
如果你从使用 Helm Chart 选项 `--add-local=false` 启动的 Rancher Server 升级到 Rancher 2.5,你需要在升级时取消该标志。否则,Rancher Server 将无法启动。`restricted-admin` 角色可以继续用来限制对本地集群的访问。详情请参见[本章节](../../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md#在-rancher-中使用隐藏的-local-集群进行升级)。
### 使用 cert-manager 0.8.0 之前的版本升级
[从 2019 年 11 月 1 日开始,Let's Encrypt 已屏蔽早于 0.8.0 的 cert-manager 实例](https://community.letsencrypt.org/t/blocking-old-cert-manager-versions/98753)。因此,请参见[说明](../resources/upgrade-cert-manager.md)把 cert-manager 升级到最新版本。
## 升级概要
按照以下步骤升级 Rancher Server:
### 1. 备份运行 Rancher Server 的 Kubernetes 集群
使用[备份应用](../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher.md)来备份 Rancher。
如果升级过程中出现问题,你将使用备份作为还原点。
### 2. 更新 Helm Chart 仓库
1. 更新本地 Helm 仓库缓存。
```
helm repo update
```
1. 获取你用来安装 Rancher 的仓库名称。
关于仓库及其区别,请参见 [Helm Chart Repositories](../../../reference-guides/installation-references/helm-chart-options.md#helm-chart-仓库)。
- Latest:建议用于试用最新功能
```
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
```
- Stable:建议用于生产环境
```
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
```
- Alpha:即将发布的实验性预览。
```
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
```
注意:不支持升级到 Alpha 版、从 Alpha 版升级或在 Alpha 版之间升级。
```
helm repo list
NAME URL
stable https://charts.helm.sh/stable
rancher-<CHART_REPO> https://releases.rancher.com/server-charts/<CHART_REPO>
```
:::note
如果你想切换到不同的 Helm Chart 仓库,请按照[切换仓库步骤](../resources/choose-a-rancher-version.md#切换到另一个-helm-chart-仓库)进行操作。如果你要切换仓库,请先再次列出仓库,再继续执行步骤 3,以确保添加了正确的仓库。
:::
1. 从 Helm Chart 仓库获取最新的 Chart 来安装 Rancher。
该命令将提取最新的 Chart,并将其作为 `.tgz`文件保存在当前目录中。
```plain
helm fetch rancher-<CHART_REPO>/rancher
```
你可以通过 `--version=` 标记,来指定要升级的目标 Chart 版本。例如:
```plain
helm fetch rancher-<CHART_REPO>/rancher --version=v2.4.11
```
### 3. 升级 Rancher
本节介绍了如何使用 Helm 升级 Rancher 的一般(互联网连接)或离线安装。
:::note 离线说明:
如果你在离线环境中安装 Rancher,请跳过本页的其余部分,按照[本页](air-gapped-upgrades.md)上的说明渲染 Helm 模板。
:::
从当前安装的 Rancher Helm Chart 中获取用 `--set`传递的值。
```
helm get values rancher -n cattle-system
hostname: rancher.my.org
```
:::note
这个命令会列出更多的值。此处展示的只是其中一个值的例子。
:::
如果要将 cert-manager 从 v1.5 或更早的版本升级到最新版本,请参阅 [cert-manager upgrade docs](../resources/upgrade-cert-manager.md#选项-c:升级-1.5-及以下版本的-cert-manager) 了解如何在不卸载或重新安装 Rancher 的情况下升级 cert-manager。否则,请按照以下[ Rancher 升级步骤](#rancher-升级步骤)进行操作。
#### Rancher 升级步骤
保留你的所有设置把 Rancher 升级到最新版本。
将上一步中的所有值用 `--set key=value`追加到命令中。
```
helm upgrade rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
--set hostname=rancher.my.org
```
:::note
以上是一个例子,可能有更多上一步的值需要追加。
:::
另外,你也可以将当前的值导出到一个文件中,并在升级时引用该文件。例如,如果你只需要改变 Rancher 的版本:
```
helm get values rancher -n cattle-system -o yaml > values.yaml
helm upgrade rancher rancher-<CHART_REPO>/rancher \
--namespace cattle-system \
-f values.yaml \
--version=2.4.5
```
### 4. 验证升级
登录 Rancher 以确认升级成功。
:::tip
升级后出现网络问题
请参见[恢复集群网络](../../../../versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。
:::
## 已知升级问题
你可以在 [GitHub](https://github.com/rancher/rancher/releases) 发布说明以及 [Rancher 论坛](https://forums.rancher.com/c/announcements/12)中找到每个 Rancher 版本的已知问题。
@@ -0,0 +1,46 @@
---
title: Dockershim
weight: 300
---
Dockershim 是 Kubelet 和 Docker Daemon 之间的 CRI 兼容层。Kubernetes 1.20 版本宣布了[移除树内 Dockershim](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。有关此移除的更多信息以及时间线,请参见 [Kubernetes Dockershim 弃用相关的常见问题](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed)。
RKE 集群现在支持外部 Dockershim,来让用户继续使用 Docker 作为 CRI 运行时。现在,我们通过使用 [Mirantis 和 Docker ](https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/) 来确保 RKE 集群可以继续使用 Docker,从而实现上游开源社区的外部 Dockershim。
要在 1.24 之前的 RKE 版本中启用外部 Dockershim,请配置以下选项:
```
enable_cri_dockerd: true
```
从 1.24 版本开始,以上默认为 true。
如果你想使用其他容器运行时,Rancher 也提供使用 Containerd 作为默认运行时的,以边缘为中心的 K3s,和以数据中心为中心的 RKE2 Kubernetes 发行版。然后,你就可以通过 Rancher 对导入的 RKE2 和 K3s Kubernetes 集群进行升级和管理。
### 常见问题
<br/>
Q:是否必须升级 Rancher 才能获得 Rancher 对上游外部 Dockershim 替换的支持?
A:对于 RKE,Dockershim `cri_dockerd` 替换的上游支持从 Kubernetes 1.21 开始。你需要使用支持 RKE 1.21 的 Rancher 版本。详情请参见我们的支持矩阵。
<br/>
Q:我目前的 RKE 使用 Kubernetes 1.23。如果上游最终在 1.24 中删除 Dockershim,会发生什么?
A:RKE 中带有 Kubernetes 的 Dockershim 版本将继续工作到 1.23。有关时间线的更多信息,请参见 [Kubernetes Dockershim 弃用相关的常见问题](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed)。从 1.24 开始,RKE 将默认启用 `cri_dockerd` 并在之后的版本中继续启用。
<br/>
Q: 如果我不想再依赖 Dockershim 或 cri_dockerd,我还有什么选择?
A: 你可以为 Kubernetes 使用不需要 Dockershim 支持的运行时,如 Containerd。RKE2 和 K3s 就是其中的两个选项。
<br/>
Q: 如果我目前使用 RKE1,但想切换到 RKE2,我可以怎样进行迁移?
A: 你可以构建一个新集群,然后将工作负载迁移到使用 Containerd 的新 RKE2 集群。Rancher 也在探索就地升级路径的可能性。
<br/>
@@ -0,0 +1,18 @@
---
title: 安装 Docker
weight: 1
---
在使用 Helm 或 Docker 在节点上安装 Rancher Server 前,你需要先安装 Docker。
Docker 有几个安装方法。一种方法是参见 [Docker 官方文档](https://docs.docker.com/install/)以了解如何在 Linux 上安装 Docker。不同 Linux 发行版的安装步骤可能有所不同。
另一种方式是使用 Rancher 的 Docker 安装脚本,该脚本可用于较新的 Docker 版本。
例如,你可执行以下命令,在 Ubuntu 上安装 Docker 20.10:
```
curl https://releases.rancher.com/install-docker/20.10.sh | sh
```
Rancher 提供 Kubernetes 支持的所有上游 Docker 版本的安装脚本。如需了解我们是否提供某个 Docker 版本的安装脚本,请参见包含了 Rancher 所有的 Docker 安装脚本的 [GitHub 仓库](https://github.com/rancher/install-docker)。
@@ -0,0 +1,339 @@
---
title: 端口要求
description: 了解 Rancher 正常运行所需的端口要求,包括 Rancher 节点和下游 Kubernetes 集群节点
weight: 300
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import PortsIaasNodes from '@site/src/components/PortsIaasNodes'
import PortsCustomNodes from '@site/src/components/PortsCustomNodes'
import PortsImportedHosted from '@site/src/components/PortsImportedHosted'
为了确保能正常运行,Rancher 需要在 Rancher 节点和下游 Kubernetes 集群节点上开放一些端口。
# Rancher 节点
下表列出了运行 Rancher Server 的节点之间需要开放的端口。
不同的 Rancher Server 架构有不同的端口要求。
Rancher 可以安装在任何 Kubernetes 集群上。如果你的 Rancher 安装在 K3s、RKE 或 RKE2 Kubernetes 集群上,请参考下面的标签页。对于其他 Kubernetes 发行版,请参见该发行版的文档,了解集群节点的端口要求。
:::note 注意事项:
- Rancher 节点可能要求额外出站访问已配置的外部验证提供程序(如 LDAP)。
- Kubernetes 建议节点端口服务使用 TCP 30000-32767。
- 对于防火墙,可能需要在集群和 Pod CIDR 内启用流量。
- Rancher 节点可能还需要出站访问用于存储集群备份(如 Minio)的外部 S3 上的位置。
:::
### K3s 上 Rancher Server 节点的端口
<details>
<summary>单击展开</summary>
K3s server 需要开放端口 6443 才能供节点访问。
使用 Flannel VXLAN 时,节点需要能够通过 UDP 端口 8472 访问其他节点。节点不应监听任何其他端口。K3s 使用反向隧道,建立节点与 Server 的出站连接,所有 kubelet 流量都通过该隧道进行。但是,如果你不使用 Flannel,而是使用自定义的 CNI,K3s 则不需要打开 8472 端口。
如果要使用 Metrics Server,则需要在每个节点上打开端口 10250。
:::note 重要提示:
节点上的 VXLAN 端口会开放集群网络,让任何人均能访问集群。因此,不要将 VXLAN 端口暴露给外界。请使用禁用 8472 端口的防火墙/安全组来运行节点。
:::
下表描述了入站和出站流量的端口要求:
<figcaption>Rancher Server 节点的入站规则</figcaption>
| 协议 | 端口 | 源 | 描述 |
|-----|-----|----------------|---|
| TCP | 80 | 执行外部 SSL 终止的负载均衡器/代理 | 使用外部 SSL 终止时的 Rancher UI/API |
| TCP | 443 | <ul><li>Server 节点</li><li>Agent 节点</li><li>托管/注册的 Kubernetes</li><li>任何需要使用 Rancher UI 或 API 的源</li></ul> | Rancher Agent,Rancher UI/API,kubectl |
| TCP | 6443 | K3s Server 节点 | Kubernetes API |
| UDP | 8472 | K3s Server 和 Agent 节点 | 仅 Flannel VXLAN 需要 |
| TCP | 10250 | K3s Server 和 Agent 节点 | kubelet |
<figcaption>Rancher 节点的出站规则</figcaption>
| 协议 | 端口 | 目标 | 描述 |
| -------- | ---- | -------------------------------------------------------- | --------------------------------------------- |
| TCP | 22 | 使用 Node Driver 创建的节点的任何节点 IP | 使用 Node Driver SSH 配置节点 |
| TCP | 443 | git.rancher.io | Rancher catalog |
| TCP | 2376 | 使用 Node Driver 创建的节点的任何节点 IP | Docker Machine 使用的 Docker daemon TLS 端口 |
| TCP | 6443 | 托管/导入的 Kubernetes API | Kubernetes API Server |
</details>
### RKE 上 Rancher Server 节点的端口
<details>
<summary>单击展开</summary>
通常情况下,Rancher 安装在三个 RKE 节点上,这些节点都有 etcd、controlplane 和 worker 角色。
下表描述了 Rancher 节点之间流量的端口要求:
<figcaption>Rancher 节点的流量规则</figcaption>
| 协议 | 端口 | 描述 |
|-----|-----|----------------|
| TCP | 443 | Rancher Agents |
| TCP | 2379 | etcd 客户端请求 |
| TCP | 2380 | etcd 对等通信 |
| TCP | 6443 | Kubernetes apiserver |
| TCP | 8443 | NGINX Ingress 的验证 Webhook |
| UDP | 8472 | Canal/Flannel VXLAN 覆盖网络 |
| TCP | 9099 | Canal/Flannel livenessProbe/readinessProbe |
| TCP | 10250 | Metrics Server 与所有节点的通信 |
| TCP | 10254 | Ingress controller livenessProbe/readinessProbe |
下表描述了入站和出站流量的端口要求:
<figcaption>Rancher 节点的入站规则</figcaption>
| 协议 | 端口 | 源 | 描述 |
|-----|-----|----------------|---|
| TCP | 22 | RKE CLI | RKE 通过 SSH 配置节点 |
| TCP | 80 | 负载均衡器/反向代理 | 到 Rancher UI/API 的 HTTP 流量 |
| TCP | 443 | <ul><li>负载均衡器/反向代理</li><li>所有集群节点和其他 API/UI 客户端的 IP</li></ul> | 到 Rancher UI/API 的 HTTPS 流量 |
| TCP | 6443 | Kubernetes API 客户端 | 到 Kubernetes API 的 HTTPS 流量 |
<figcaption>Rancher 节点的出站规则</figcaption>
| 协议 | 端口 | 目标 | 描述 |
|-----|-----|----------------|---|
| TCP | 443 | `35.160.43.145`,`35.167.242.46`,`52.33.59.17` | Rancher catalog(git.rancher.io) |
| TCP | 22 | 使用 Node Driver 创建的任何节点 | Node Driver 通过 SSH 配置节点 |
| TCP | 2376 | 使用 Node Driver 创建的任何节点 | Node Driver 使用的 Docker daemon TLS 端口 |
| TCP | 6443 | 托管/导入的 Kubernetes API | Kubernetes API Server |
| TCP | 提供商依赖 | 托管集群中 Kubernetes API 端点的端口 | Kubernetes API |
</details>
### RKE2 上 Rancher Server 节点的端口
<details>
<summary>单击展开</summary>
RKE2 server 需要开放端口 6443 和 9345 才能供集群中的其他节点访问。
使用 Flannel VXLAN 时,所有节点都需要能够通过 UDP 端口 8472 访问其他节点。
如果要使用 Metrics Server,则需要在每个节点上打开端口 10250。
:::note 重要提示:
节点上的 VXLAN 端口会开放集群网络,让任何人均能访问集群。因此,不要将 VXLAN 端口暴露给外界。请使用禁用 8472 端口的防火墙/安全组来运行节点。
:::
<figcaption>RKE2 Server 节点的入站规则</figcaption>
| 协议 | 端口 | 源 | 描述 |
|-----|-----|----------------|---|
| TCP | 9345 | RKE2 Agent 节点 | Kubernetes API |
| TCP | 6443 | RKE2 Agent 节点 | Kubernetes API |
| UDP | 8472 | RKE2 Server 和 Agent 节点 | 仅 Flannel VXLAN 需要 |
| TCP | 10250 | RKE2 Server 和 Agent 节点 | kubelet |
| TCP | 2379 | RKE2 Server 节点 | etcd 客户端端口 |
| TCP | 2380 | RKE2 Server 节点 | etcd 对等端口 |
| TCP | 30000-32767 | RKE2 Server 和 Agent 节点 | NodePort 端口范围 |
| TCP | 5473 | Calico-node pod 连接到 typha pod | 使用 Calico 部署时需要 |
| HTTP | 8080 | 执行外部 SSL 终止的负载均衡器/代理 | 使用外部 SSL 终止时的 Rancher UI/API |
| HTTPS | 8443 | <ul><li>托管/注册的 Kubernetes</li><li>任何需要使用 Rancher UI 或 API 的源</li></ul> | Rancher Agent,Rancher UI/API,kubectl。如果负载均衡执行 TLS 终止,则不需要。 |
所有出站流量通常都是允许的。
</details>
### Docker 安装的 Rancher Server 的端口
<details>
<summary>单击展开</summary>
下表描述了 Rancher 节点入站和出站流量的端口要求:
<figcaption>Rancher 节点的入站规则</figcaption>
| 协议 | 端口 | 源 | 描述 |
|-----|-----|----------------|---|
| TCP | 80 | 执行外部 SSL 终止的负载均衡器/代理 | 使用外部 SSL 终止时的 Rancher UI/API |
| TCP | 443 | <ul><li>托管/注册的 Kubernetes</li><li>任何需要使用 Rancher UI 或 API 的源</li></ul> | Rancher Agent,Rancher UI/API,kubectl |
<figcaption>Rancher 节点的出站规则</figcaption>
| 协议 | 端口 | 源 | 描述 |
|-----|-----|----------------|---|
| TCP | 22 | 使用 Node Driver 创建的节点的任何节点 IP | 使用 Node Driver SSH 配置节点 |
| TCP | 443 | git.rancher.io | Rancher catalog |
| TCP | 2376 | 使用 Node Driver 创建的节点的任何节点 IP | Docker Machine 使用的 Docker daemon TLS 端口 |
| TCP | 6443 | 托管/导入的 Kubernetes API | Kubernetes API Server |
</details>
# 下游 Kubernetes 集群节点
下游 Kubernetes 集群用于运行你的应用和服务。本节介绍了哪些端口需要在下游集群的节点上打开,以便 Rancher 能够与它们进行通信。
不同的下游集群的启动方式有不同的端口要求。下面的每个标签都列出了不同[集群类型](../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)所需打开的端口。
下图描述了为每个[集群类型](../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)打开的端口。
<figcaption>Rancher 管理面板的端口要求</figcaption>
![基本端口要求](/img/port-communications.svg)
:::tip
如果你对安全性的关注不是太高,而且也愿意多打开几个端口,你可以参考[常用端口](#常用端口)中列出的端口,而不是参考下方的表格。
:::
### Rancher 使用节点池启动 Kubernetes 集群的端口
<details>
<summary>单击展开</summary>
下表描述了节点在[云提供商](../../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)中创建的情况下,[Rancher 启动 Kubernetes](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 的端口要求。
:::note
在 AWS EC2 或 DigitalOcean 等云提供商中创建集群期间,Rancher 会自动打开所需的端口。
:::
<PortsIaasNodes/>
</details>
### Rancher 使用自定义节点启动 Kubernetes 集群的端口
<details>
<summary>单击展开</summary>
下表描述了使用[自定义节点](../../../pages-for-subheaders/use-existing-nodes.md)的情况下,[Rancher 启动 Kubernetes](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md) 的端口要求。
<PortsCustomNodes/>
</details>
### 托管 Kubernetes 集群的端口
<details>
<summary>单击展开</summary>
下表描述了[托管集群](../../../pages-for-subheaders/set-up-clusters-from-hosted-kubernetes-providers.md)的端口要求。
<PortsImportedHosted/>
</details>
### 已注册集群的端口
:::note
在 Rancher 2.5 之前,注册集群被称为导入集群。
:::
<details>
<summary>单击展开</summary>
下表描述了[注册集群](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md)的端口要求。
<PortsImportedHosted/>
</details>
# 其他端口注意事项
### 常用端口
无论集群是什么类型,常用端口通常在你的 Kubernetes 节点上打开。
import CommonPortsTable from '../../../shared-files/_common-ports-table.md';
<CommonPortsTable />
----
### 本地节点流量
上述要求中标记为`本地流量`(例如 `9099 TCP`)的端口会用于 Kubernetes 健康检查 (`livenessProbe` 和 `readinessProbe`)。
这些健康检查是在节点本身执行的。在大多数云环境中,这种本地流量是默认允许的。
但是,在以下情况下可能会阻止此流量:
- 你已在节点上应用了严格的主机防火墙策略。
- 你正在使用有多个接口(多宿主)的节点。
在这些情况下,你必须在你的主机防火墙中主动允许这种流量,如果是公共/私有云托管的主机(例如 AWS 或 OpenStack),你需要在你的安全组配置中主动允许此流量。请记住,如果你在安全组中使用安全组作为源或目标,主动开放端口只适用于节点/实例的私有接口。
### Rancher AWS EC2 安全组
当你使用 [AWS EC2 Node Driver](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/launch-kubernetes-with-rancher/use-new-nodes-in-an-infra-provider/create-an-amazon-ec2-cluster.md) 在 Rancher 中配置集群节点时,你可以让 Rancher 创建一个名为 `rancher-nodes` 的安全组。以下规则会自动添加到该安全组中。
| 类型 | 协议 | 端口范围 | 源/目标 | 规则类型 |
|-----------------|:--------:|:-----------:|------------------------|:---------:|
| SSH | TCP | 22 | 0.0.0.0/0 | 入站 |
| HTTP | TCP | 80 | 0.0.0.0/0 | 入站 |
| 自定义 TCP 规则 | TCP | 443 | 0.0.0.0/0 | 入站 |
| 自定义 TCP 规则 | TCP | 2376 | 0.0.0.0/0 | 入站 |
| 自定义 TCP 规则 | TCP | 2379-2380 | sg-xxx (rancher-nodes) | 入站 |
| 自定义 UDP 规则 | UDP | 4789 | sg-xxx (rancher-nodes) | 入站 |
| 自定义 TCP 规则 | TCP | 6443 | 0.0.0.0/0 | 入站 |
| 自定义 UDP 规则 | UDP | 8472 | sg-xxx (rancher-nodes) | 入站 |
| 自定义 TCP 规则 | TCP | 10250-10252 | sg-xxx (rancher-nodes) | 入站 |
| 自定义 TCP 规则 | TCP | 10256 | sg-xxx (rancher-nodes) | 入站 |
| 自定义 TCP 规则 | TCP | 30000-32767 | 0.0.0.0/0 | 入站 |
| 自定义 UDP 规则 | UDP | 30000-32767 | 0.0.0.0/0 | 入站 |
| 所有流量 | 全部 | 全部 | 0.0.0.0/0 | 出站 |
### 打开 SUSE Linux 端口
SUSE Linux 可能有一个防火墙,默认情况下会阻止所有端口。要打开将主机添加到自定义集群所需的端口:
<Tabs>
<TabItem value="SLES 15 / openSUSE Leap 15">
1. SSH 进入实例。
1. 以文本模式启动 YaST:
```
sudo yast2
```
1. 导航到**安全和用户** > **防火墙** > **区域:公共** > **端口**。要在界面内导航,请参照[指示](https://doc.opensuse.org/documentation/leap/reference/html/book.opensuse.reference/cha-yast-text.html#sec-yast-cli-navigate)。
1. 要打开所需的端口,把它们输入到 **TCP 端口** 和 **UDP 端口** 字段。在这个例子中,端口 9796 和 10250 也被打开,用于监控。由此产生的字段应类似于以下内容:
```yaml
TCP Ports
22, 80, 443, 2376, 2379, 2380, 6443, 9099, 9796, 10250, 10254, 30000-32767
UDP Ports
8472, 30000-32767
```
1. 所有必须端口都输入后,选择**接受**。
</TabItem>
<TabItem value="SLES 12 / openSUSE Leap 42">
1. SSH 进入实例。
1. 编辑 `/etc/sysconfig/SuSEfirewall2` 并打开所需的端口。在这个例子中,端口 9796 和 10250 也被打开,用于监控。
```
FW_SERVICES_EXT_TCP="22 80 443 2376 2379 2380 6443 9099 9796 10250 10254 30000:32767"
FW_SERVICES_EXT_UDP="8472 30000:32767"
FW_ROUTE=yes
```
1. 用新的端口重启防火墙:
```
SuSEfirewall2
```
</TabItem>
</Tabs>
**结果** :该节点已打开添加到自定义集群所需的端口。
@@ -0,0 +1,150 @@
---
title: Docker 安装命令
weight: 1
---
Docker 安装适用于想要测试 Rancher 的用户。
你可以使用 `docker run`命令,把 Rancher Server 组件安装到单个节点上,而不需要运行 Kubernetes 集群。由于只有一个节点和一个 Docker 容器,因此,如果该节点发生故障,由于其他节点上没有可用的 etcd 数据副本,你将丢失 Rancher Server 的所有数据。
你可以使用备份应用,按照[这些步骤](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md),将 Rancher Server 从 Docker 安装迁移到 Kubernetes 安装。
出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL 保护所有 Rancher 网络通信(如登录和与集群交互)的安全。
| 环境变量键 | 环境变量值 | 描述 |
| -------------------------------- | -------------------------------- | ---- |
| `CATTLE_SYSTEM_DEFAULT_REGISTRY` | `<REGISTRY.YOURDOMAIN.COM:PORT>` | 将 Rancher Server 配置成在配置集群时,始终从私有镜像仓库中拉取镜像。 |
| `CATTLE_SYSTEM_CATALOG` | `bundled` | 配置 Rancher Server 使用打包的 Helm System Chart 副本。[system charts](https://github.com/rancher/system-charts) 仓库包含所有 Monitoring,Logging,告警和全局 DNS 等功能所需的应用商店项目。这些 [Helm Chart](https://github.com/rancher/system-charts) 位于 GitHub 中。但是由于你处在离线环境,因此使用 Rancher 内置的 Chart 会比设置 Git mirror 容易得多。 |
:::note 你是否需要:
- 配置自定义 CA 根证书以访问服务。参见[自定义 CA 根证书](../../resources/custom-ca-root-certificates.md)。
- 记录所有 Rancher API 的事务。参见 [API 审计](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志)。
:::
选择以下的选项之一:
### 选项 A:使用 Rancher 默认的自签名证书
<details id="option-a">
<summary>单击展开</summary>
如果你在不考虑身份验证的开发或测试环境中安装 Rancher,可以使用 Rancher 生成的自签名证书安装 Rancher。这种安装方式避免了自己生成证书的麻烦。
登录到你的 Linux 主机,然后运行下面的安装命令。输入命令时,参考下表来替换每个占位符。
| 占位符 | 描述 |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 私有镜像仓库的 URL 和端口。 |
| `<RANCHER_VERSION_TAG>` | 你想要安装的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
特权访问是[必须](#rancher-特权访问)的。
```
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
-e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
--privileged \
<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:<RANCHER_VERSION_TAG>
```
</details>
### 选项 B:使用你自己的证书 - 自签名
<details id="option-b">
<summary>单击展开</summary>
在你团队访问 Rancher Server 的开发或测试环境中,创建一个用于你的安装的自签名证书,以便团队验证他们对实例的连接。
:::note 先决条件:
从能连接到互联网的计算机上,使用 [OpenSSL](https://www.openssl.org/) 或其他方法创建自签名证书。
- 证书文件的格式必须是 PEM。
- 在你的证书文件中,包括链中的所有中间证书。你需要对你的证书进行排序,把你的证书放在最前面,后面跟着中间证书。如需查看示例,请参见[证书故障排除](../rancher-on-a-single-node-with-docker/certificate-troubleshooting.md)。
:::
创建证书后,登录 Linux 主机,然后运行以下安装命令。输入命令时,参考下表来替换每个占位符。使用 `-v` 标志并提供证书的路径,以将证书挂载到容器中。
| 占位符 | 描述 |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `<CERT_DIRECTORY>` | 包含证书文件的目录的路径。 |
| `<FULL_CHAIN.pem>` | 完整证书链的路径。 |
| `<PRIVATE_KEY.pem>` | 证书私钥的路径。 |
| `<CA_CERTS.pem>` | CA 证书的路径。 |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 私有镜像仓库的 URL 和端口。 |
| `<RANCHER_VERSION_TAG>` | 你想要安装的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
特权访问是[必须](#rancher-特权访问)的。
```
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
-v /<CERT_DIRECTORY>/<CA_CERTS.pem>:/etc/rancher/ssl/cacerts.pem \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
-e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
--privileged \
<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:<RANCHER_VERSION_TAG>
```
</details>
### 选项 C:使用你自己的证书 - 可信 CA 签名的证书
<details id="option-c">
<summary>单击展开</summary>
在公开暴露应用的开发或测试环境中,请使用由可信 CA 签名的证书,以避免用户收到证书安全警告。
:::note 先决条件:
证书文件的格式必须是 PEM。
:::
获取证书后,登录 Linux 主机,然后运行以下安装命令。输入命令时,参考下表来替换每个占位符。因为你的证书是由可信的 CA 签名的,因此你不需要安装额外的 CA 证书文件。
| 占位符 | 描述 |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `<CERT_DIRECTORY>` | 包含证书文件的目录的路径。 |
| `<FULL_CHAIN.pem>` | 完整证书链的路径。 |
| `<PRIVATE_KEY.pem>` | 证书私钥的路径。 |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 私有镜像仓库的 URL 和端口。 |
| `<RANCHER_VERSION_TAG>` | 你想要安装的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
:::note
使用 `--no-cacerts` 作为容器的参数,以禁用 Rancher 生成的默认 CA 证书。
:::
特权访问是[必须](#rancher-特权访问)的。
```
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
--no-cacerts \
-v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
-e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
--privileged
<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:<RANCHER_VERSION_TAG>
```
</details>
:::note
如果你不想发送遥测数据,在首次登录时退出[遥测](../../../../faq/telemetry.md)。
:::
@@ -0,0 +1,189 @@
---
title: '1. 设置基础设施和私有镜像仓库'
weight: 100
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
本文介绍如何在离线环境中,为 Rancher Management server 配置底层基础设施。你还将设置 Rancher 节点中必须可用的 Docker 私有仓库。
离线环境是 Rancher Server 离线安装或安装在防火墙后面的环境。
Rancher 安装在 K3s Kubernetes 集群、RKE Kubernetes 集群还是单个 Docker 容器上对应的基础设施设置会有所不同。如需了解各个安装方式的更多信息,请参见[本页](../../../../pages-for-subheaders/installation-and-upgrade.md)。
Rancher 可以安装在任何 Kubernetes 集群上。为了阅读方便,我们在下文中仍提供了 RKE 和 K3s Kubernetes 基础设施教程。
<Tabs>
<TabItem value="K3s">
为了实现高可用安装,我们建议设置以下的基础设施:
- **2 个 Linux 节点**:可以是你的云提供商中的虚拟机。
- **1 个外部数据库**:用于存储集群数据。支持 PostgreSQL, MySQL 和 etcd。
- **1 个负载均衡器**:用于将流量转发到这两个节点中。
- **1 个 DNS 记录**:用于将 URL 映射到负载均衡器。此 DNS 记录将成为 Rancher Server 的 URL,下游集群需要可以访问到这个地址。
- **1 个私有 Docker 镜像仓库**:用于将 Docker 镜像分发到你的主机。
### 1. 配置 Linux 节点
这些主机会断开互联网链接,但需要能与你的私有镜像仓库连接。
请确保你的节点满足[操作系统,容器运行时,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规要求。
如需获取配置 Linux 节点的示例,请参见[在 Amazon EC2 中配置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
### 2. 配置外部数据库
K3s 与其他 Kubernetes 发行版不同,在于其支持使用 etcd 以外的数据库来运行 Kubernetes。该功能让 Kubernetes 运维更加灵活。你可以根据实际情况选择合适的数据库。
对于 K3s 高可用安装,你需要配置以下的其中一个数据库:
* [PostgreSQL](https://www.postgresql.org/)(10.7 和 11.5 已验证)
* [MySQL](https://www.mysql.com/)(5.7 已验证)
* [etcd](https://etcd.io/)(3.3.15 已验证)
在安装 Kubernetes 时,你需要传入 K3s 连接数据库的详细信息。
如需获取配置数据库示例,请参见[在 Amazon RDS 服务中配置 MySQL 数据库](../../../../how-to-guides/new-user-guides/infrastructure-setup/mysql-database-in-amazon-rds.md)的教程。
如需获取配置 K3s 集群数据库的所有可用选项,请参见 [K3s 官方文档](https://rancher.com/docs/k3s/latest/en/installation/datastore/)。
### 3. 配置负载均衡器
你还需要设置一个负载均衡器,来将流量重定向到两个节点上的 Rancher 副本。配置后,当单个节点不可用时,继续保障与 Rancher Management Server 的通信。
在后续步骤中配置 Kubernetes 时,K3s 工具会部署一个 Traefik Ingress Controller。该 Controller 将侦听 worker 节点的 80 端口和 443 端口,以响应发送给特定主机名的流量。
在安装 Rancher 后(也是在后续步骤中),Rancher 系统将创建一个 Ingress 资源。该 Ingress 通知 Traefik Ingress Controller 监听发往 Rancher 主机名的流量。Traefik Ingress Controller 在收到发往 Rancher 主机名的流量时,会将其转发到集群中正在运行的 Rancher Server Pod。
在你的实现中,你可以考虑是否需要使用 4 层或 7 层的负载均衡器:
- **4 层负载均衡器**:两种选择中较为简单的一种,它将 TCP 流量转发到你的节点中。我们建议使用 4 层负载均衡器,将流量从 TCP/80 端口和 TCP/443 端口转发到 Rancher Management 集群节点上。集群上的 Ingress Controller 会将 HTTP 流量重定向到 HTTPS,并在 TCP/443 端口上终止 SSL/TLS。Ingress Controller 会将流量转发到 Rancher deployment 中 Ingress Pod 的 TCP/80 端口。
- **7 层负载均衡器**:相对比较复杂,但功能更全面。例如,与 Rancher 本身进行 TLS 终止相反,7 层负载均衡器能够在负载均衡器处处理 TLS 终止。如果你需要集中在基础设施中进行 TLS 终止,7 层负载均衡可能会很适合你。7 层负载均衡还能让你的负载均衡器基于 HTTP 属性(例如 cookie 等)做出决策,而 4 层负载均衡器则不能。如果你选择在 7 层负载均衡器上终止 SSL/TLS 流量,则在安装 Rancher 时(后续步骤)需要使用 `--set tls=external` 选项。详情请参见 [Rancher Helm Chart 选项](../../../../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。
如需获取配置 NGINX 负载均衡器的示例,请参见[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md)。
如需获取如何配置 Amazon ELB 网络负载均衡器的指南,请参见[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md)。
:::note 重要提示:
安装后,请勿将此负载均衡(例如 `local` 集群 Ingress)用于 Rancher 以外的应用。如果此 Ingress 与其他应用共享,在其他应用的 Ingress 配置重新加载后,可能导致 Rancher 出现 websocket 错误。我们建议把 `local` 集群专用给 Rancher,不要在集群内部署其他应用。
:::
### 4. 配置 DNS 记录
配置完负载均衡器后,你将需要创建 DNS 记录,以将流量发送到该负载均衡器。
根据你的环境,DNS 记录可以是指向负载均衡器 IP 的 A 记录,也可以是指向负载均衡器主机名的 CNAME。无论是哪种情况,请确保该记录是你要 Rancher 进行响应的主机名。
在安装 Rancher 时(后续步骤),你需要指定此主机名。请知悉,此主机名无法修改。请确保你设置的主机名是你想要的。
有关设置 DNS 记录以将域流量转发到 Amazon ELB 负载均衡器的指南,请参见 [AWS 官方文档](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer)。
### 5. 配置私有 Docker 镜像仓库
Rancher 支持使用私有镜像仓库进行离线安装。你必须有自己的私有镜像仓库或使用其他方式将 Docker 镜像分发到主机。
在后续设置 K3s Kubernetes 集群时,你需要创建一个[私有镜像仓库配置文件](https://rancher.com/docs/k3s/latest/en/installation/private-registry/),其中包含此镜像仓库的信息。
如需获得创建私有镜像仓库的帮助,请参见 [Docker 官方文档](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry)。
</TabItem>
<TabItem value="RKE">
如需在高可用 RKE 集群中安装 Rancher Management Server,我们建议配置以下基础设施:
- **3 个 Linux 节点**:可以是你的云提供商(例如 Amazon EC2,GCE 或 vSphere)中的虚拟机。
- **1 个负载均衡器**:用于将前端流量转发到这三个节点中。
- **1 个 DNS 记录**:用于将 URL 映射到负载均衡器。此 DNS 记录将成为 Rancher Server 的 URL,下游集群需要可以访问到这个地址。
- **1 个私有 Docker 镜像仓库**:用于将 Docker 镜像分发到你的主机。
这些节点必须位于同一个区域或数据中心。但是你可以把这些服务器放在不同的可用区。
### 为什么使用三个节点?
在 RKE 集群中,Rancher Server 的数据存储在 etcd 中。而这个 etcd 数据库在这三个节点上运行。
为了选举出大多数 etcd 节点认可的 etcd 集群 leader,etcd 数据库需要奇数个节点。如果 etcd 数据库无法选出 leader,etcd 可能会出现[脑裂(split brain)](https://www.quora.com/What-is-split-brain-in-distributed-systems)的问题,此时你需要使用备份恢复集群。如果三个 etcd 节点之一发生故障,其余两个节点可以选择一个 leader,因为它们是 etcd 节点总数的大多数部分。
### 1. 配置 Linux 节点
这些主机会断开互联网链接,但需要能与你的私有镜像仓库连接。
请确保你的节点满足[操作系统,容器运行时,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规要求。
如需获取配置 Linux 节点的示例,请参见[在 Amazon EC2 中配置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
### 2. 配置负载均衡器
你还需要设置一个负载均衡器,来将流量重定向到两个节点上的 Rancher 副本。配置后,当单个节点不可用时,继续保障与 Rancher Management Server 的通信。
在后续步骤中配置 Kubernetes 时,RKE 工具会部署一个 NGINX Ingress Controller。该 Controller 将侦听 worker 节点的 80 端口和 443 端口,以响应发送给特定主机名的流量。
在安装 Rancher 后(也是在后续步骤中),Rancher 系统将创建一个 Ingress 资源。该 Ingress 通知 NGINX Ingress Controller 监听发往 Rancher 主机名的流量。NGINX Ingress Controller 在收到发往 Rancher 主机名的流量时,会将其转发到集群中正在运行的 Rancher Server Pod。
在你的实现中,你可以考虑是否需要使用 4 层或 7 层的负载均衡器:
- **4 层负载均衡器**:两种选择中较为简单的一种,它将 TCP 流量转发到你的节点中。我们建议使用 4 层负载均衡器,将流量从 TCP/80 端口和 TCP/443 端口转发到 Rancher Management 集群节点上。集群上的 Ingress Controller 会将 HTTP 流量重定向到 HTTPS,并在 TCP/443 端口上终止 SSL/TLS。Ingress Controller 会将流量转发到 Rancher deployment 中 Ingress Pod 的 TCP/80 端口。
- **7 层负载均衡器**:相对比较复杂,但功能更全面。例如,与 Rancher 本身进行 TLS 终止相反,7 层负载均衡器能够在负载均衡器处处理 TLS 终止。如果你需要集中在基础设施中进行 TLS 终止,7 层负载均衡可能会很适合你。7 层负载均衡还能让你的负载均衡器基于 HTTP 属性(例如 cookie 等)做出决策,而 4 层负载均衡器则不能。如果你选择在 7 层负载均衡器上终止 SSL/TLS 流量,则在安装 Rancher 时(后续步骤)需要使用 `--set tls=external` 选项。详情请参见 [Rancher Helm Chart 选项](../../../../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。
如需获取配置 NGINX 负载均衡器的示例,请参见[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md)。
如需获取如何配置 Amazon ELB 网络负载均衡器的指南,请参见[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md)。
:::caution
安装后,请勿将此负载均衡(例如 `local` 集群 Ingress)用于 Rancher 以外的应用。如果此 Ingress 与其他应用共享,在其他应用的 Ingress 配置重新加载后,可能导致 Rancher 出现 websocket 错误。我们建议把 `local` 集群专用给 Rancher,不要在集群内部署其他应用。
:::
### 3. 配置 DNS 记录
配置完负载均衡器后,你将需要创建 DNS 记录,以将流量发送到该负载均衡器。
根据你的环境,DNS 记录可以是指向负载均衡器 IP 的 A 记录,也可以是指向负载均衡器主机名的 CNAME。无论是哪种情况,请确保该记录是你要 Rancher 进行响应的主机名。
在安装 Rancher 时(后续步骤),你需要指定此主机名。请知悉,此主机名无法修改。请确保你设置的主机名是你想要的。
有关设置 DNS 记录以将域流量转发到 Amazon ELB 负载均衡器的指南,请参见 [AWS 官方文档](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer)。
### 4. 配置私有 Docker 镜像仓库
Rancher 支持使用安全的 Docker 私有镜像仓库进行离线安装。你必须有自己的私有镜像仓库或使用其他方式将 Docker 镜像分发到主机。
在后续设置 RKE Kubernetes 集群时,你需要创建一个[私有镜像仓库配置文件](https://rancher.com/docs/rke/latest/en/config-options/private-registries/),其中包含此镜像仓库的信息。
如需获得创建私有镜像仓库的帮助,请参见 [Docker 官方文档](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry)。
</TabItem>
<TabItem value="Docker">
:::note 注意事项:
- Docker 安装适用于想要测试 Rancher 的用户。由于只有一个节点和一个 Docker 容器,因此如果该节点发生故障,你将丢失 Rancher Server 的所有数据。
- Rancher backup operator 可将 Rancher 从单个 Docker 容器迁移到高可用 Kubernetes 集群上。详情请参见[把 Rancher 迁移到新集群](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。
:::
### 1. 配置 Linux 节点
此主机会断开互联网链接,但需要能与你的私有镜像仓库连接。
请确保你的节点满足[操作系统,Docker,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规要求。
如需获取配置 Linux 节点的示例,请参见[在 Amazon EC2 中配置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
### 2. 配置私有 Docker 镜像仓库
Rancher 支持使用 Docker 私有镜像仓库在堡垒服务器中进行离线安装。你必须有自己的私有镜像仓库或使用其他方式将 Docker 镜像分发到主机。
如需获得创建私有镜像仓库的帮助,请参见 [Docker 官方文档](https://docs.docker.com/registry/)。
</TabItem>
</Tabs>
### 后续操作
[收集镜像并发布到你的私有镜像仓库](publish-images.md)
@@ -0,0 +1,386 @@
---
title: '3. 安装 Kubernetes(Docker 安装请跳过)'
weight: 300
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
:::note
如果你使用 Docker 在单个节点上安装 Rancher,请跳过本节。
:::
本文描述了如何根据 [Rancher Server 环境的最佳实践](../../../../reference-guides/rancher-manager-architecture/architecture-recommendations.md#kubernetes-安装环境)来安装 Kubernetes 集群。该集群需要专用于运行 Rancher Server。
Rancher 可以安装在任何 Kubernetes 集群上,包括托管的 Kubernetes。
在 RKE、RKE2 或 K3s 上离线安装 Kubernetes 集群的步骤如下所示:
<Tabs>
<TabItem value="K3s">
在本指南中,我们假设你已经在离线环境中创建了节点,并且在堡垒服务器上有一个安全的 Docker 私有镜像仓库。
### 安装概要
1. [准备镜像目录](#1-准备镜像目录)
2. [创建镜像仓库 YAML](#2-创建镜像仓库-yaml)
3. [安装 K3s](#3-安装-k3s)
4. [保存并开始使用 kubeconfig 文件](#4-保存并开始使用-kubeconfig-文件)
### 1. 准备镜像目录
从 [Releases](https://github.com/k3s-io/k3s/releases) 页面获取要运行的 K3s 版本的镜像 tar 文件。
在每个节点上启动 K3s 之前,将这个 tar 文件放在 `images` 目录中,例如:
```sh
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
```
### 2. 创建镜像仓库 YAML
把 `registries.yaml` 文件创建到 `/etc/rancher/k3s/registries.yaml` 中。此文件为 K3s 提供连接到你的私有镜像仓库的详细信息。
在加入必要信息之前,`registries.yaml` 文件是这样的:
```yaml
---
mirrors:
customreg:
endpoint:
- "https://ip-to-server:5000"
configs:
customreg:
auth:
username: xxxxxx # 镜像仓库的用户名
password: xxxxxx # 镜像仓库的密码
tls:
cert_file: <镜像仓库所用的证书文件路径>
key_file: <镜像仓库所用的密钥文件路径>
ca_file: <镜像仓库所用的 CA 文件路径>
```
请注意,目前,K3s 仅支持安全的镜像仓库(带有自定义 CA 的 SSL)。
有关 K3s 的私有镜像仓库配置文件的详情,请参见 [K3s 官方文档](https://rancher.com/docs/k3s/latest/en/installation/private-registry/)。
### 3. 安装 K3s
Rancher 需要安装在支持的 Kubernetes 版本上。如需了解你使用的 Rancher 版本支持哪些 Kubernetes 版本,请参见[支持维护条款](https://rancher.com/support-maintenance-terms/)。
如需指定 K3s 版本,在运行 K3s 安装脚本时,使用 `INSTALL_K3S_VERSION` 环境变量。
从 [Releases](https://github.com/k3s-io/k3s/releases) 页面获取 K3s 的二进制文件,该文件要匹配用于获取离线镜像的 tar 版本。
访问 [K3s 安装脚本](https://get.k3s.io)以获取 K3s 的安装脚本。
将二进制文件放到每个节点的 `/usr/local/bin` 中。
将安装脚本放在每个节点的任意位置,并将脚本命名为 `install.sh`。
在每个 Server 上安装 K3s:
```
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
```
在每个 Agent 上安装 K3s:
```
INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken ./install.sh
```
请确保你将 `myserver` 替换为 Server 的 IP 或有效 DNS,并将 `mynodetoken` 替换为 Server 节点上的 node-token。
node-token 位于 Server 节点上的 `/var/lib/rancher/k3s/server/node-token`。
:::note
K3s 自动为 kubelets 提供 `--resolv-conf` 标志,该标志可能对在离线环境中配置 DNS 有帮助。
:::
### 4. 保存并开始使用 kubeconfig 文件
在每个 Rancher Server 节点安装 K3s 时,会在每个节点的 `/etc/rancher/k3s/k3s.yaml` 中生成一个 `kubeconfig` 文件。该文件包含访问集群的凭证。请将该文件保存在安全的位置。
如要使用该 `kubeconfig` 文件:
1. 安装 Kubernetes 命令行工具 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)。
2. 复制 `/etc/rancher/k3s/k3s.yaml` 文件并保存到本地主机的 `~/.kube/config` 目录上。
3. 在 kubeconfig 文件中,`server` 的参数为 localhost。你需要将 `server` 配置为负载均衡器的 DNS,并指定端口 6443(通过端口 6443 访问 Kubernetes API Server,通过端口 80 和 443 访问 Rancher Server)。以下是一个 `k3s.yaml` 示例:
```yaml
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: [CERTIFICATE-DATA]
server: [LOAD-BALANCER-DNS]:6443 # 编辑此行
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: [PASSWORD]
username: admin
```
**结果**:你可以开始使用 `kubectl` 来管理你的 K3s 集群。如果你有多个 `kubeconfig` 文件,在使用 `kubectl` 时,你可以传入文件路径来指定要使用的 `kubeconfig` 文件:
```
kubectl --kubeconfig ~/.kube/config/k3s.yaml get pods --all-namespaces
```
有关 `kubeconfig` 文件的详情,请参见 [K3s 官方文档](https://rancher.com/docs/k3s/latest/en/cluster-access/) 或 [ Kubernetes 官方文档](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)中关于使用 `kubeconfig` 文件管理集群访问的部分。
### 升级注意事项
你可以通过以下方式完成离线环境的升级:
1. 从 [Releases](https://github.com/k3s-io/k3s/releases) 页面下载要升级的 K3s 版本的新离线镜像 tar 包。将 tar 文件放在每个节点上的 `/var/lib/rancher/k3s/agent/images/` 目录中。删除旧的 tar 文件。
2. 复制并替换每个节点上 `/usr/local/bin` 中的旧 K3s 二进制文件。复制 [K3s 安装脚本](https://get.k3s.io)(因为脚本可能自上次版本发布以来已更改)。使用相同的环境变量再次运行脚本。
3. 重启 K3s 服务(如果安装程序没有自动重启 K3s 的话)。
</TabItem>
<TabItem value="RKE2">
在本指南中,我们假设你已经在离线环境中创建了节点,并且在堡垒服务器上有一个安全的 Docker 私有镜像仓库。
### 安装概要
1. [创建 RKE2 配置](#1-创建-rke2-配置)
2. [创建镜像仓库 YAML](#2-创建镜像仓库-yaml)
3. [安装 RKE2](#3-安装-rke2)
4. [保存并开始使用 kubeconfig 文件](#4-保存并开始使用-kubeconfig-文件)
### 1. 创建 RKE2 配置
把 config.yaml 文件创建到 `/etc/rancher/rke2/config.yaml` 中。这将包含创建高可用 RKE2 集群所需的所有配置选项。
第一台服务器的最低配置是:
```
token: my-shared-secret
tls-san:
- loadbalancer-dns-domain.com
```
其他服务器的配置文件应该包含相同的令牌,并让 RKE2 知道要连接到现有的第一台服务器:
```
server: https://ip-of-first-server:9345
token: my-shared-secret
tls-san:
- loadbalancer-dns-domain.com
```
有关详细信息,请参阅 [RKE2 文档](https://docs.rke2.io/install/ha/)。
:::note
RKE2 自动为 kubelets 提供 `resolv-conf` 选项,该标志可能对在离线环境中配置 DNS 有帮助。
:::
### 2. 创建镜像仓库 YAML
把 `registries.yaml` 文件创建到 `/etc/rancher/rke2/registries.yaml` 中。此文件为 RKE2 提供连接到你的私有镜像仓库的详细信息。
在加入必要信息之前,`registries.yaml` 文件是这样的:
```
---
mirrors:
customreg:
endpoint:
- "https://ip-to-server:5000"
configs:
customreg:
auth:
username: xxxxxx # 镜像仓库的用户名
password: xxxxxx # 镜像仓库的密码
tls:
cert_file: <镜像仓库所用的证书文件路径>
key_file: <镜像仓库所用的密钥文件路径>
ca_file: <镜像仓库所用的 CA 文件路径>
```
有关 RKE2 的私有镜像仓库配置文件的详情,请参见 [RKE2 官方文档](https://docs.rke2.io/install/containerd_registry_configuration/)。
### 3. 安装 RKE2
Rancher 需要安装在支持的 Kubernetes 版本上。如需了解你使用的 Rancher 版本支持哪些 Kubernetes 版本,请参见[支持维护条款](https://rancher.com/support-maintenance-terms/)。
从 Release 页面下载安装脚本、rke2、rke2-images 和 sha256sum 存档,并将它们上传到每个服务器上的目录中:
```
mkdir /tmp/rke2-artifacts && cd /tmp/rke2-artifacts/
wget https://github.com/rancher/rke2/releases/download/v1.21.5%2Brke2r2/rke2-images.linux-amd64.tar.zst
wget https://github.com/rancher/rke2/releases/download/v1.21.5%2Brke2r2/rke2.linux-amd64.tar.gz
wget https://github.com/rancher/rke2/releases/download/v1.21.5%2Brke2r2/sha256sum-amd64.txt
curl -sfL https://get.rke2.io --output install.sh
```
接下来,使用每个服务器上的目录运行 install.sh,如下例所示:
```
INSTALL_RKE2_ARTIFACT_PATH=/tmp/rke2-artifacts sh install.sh
```
然后在所有服务器上启用并启动该服务:
``
systemctl enable rke2-server.service
systemctl start rke2-server.service
``
有关详细信息,请参阅 [RKE2 文档](https://docs.rke2.io/install/airgap/)。
### 4. 保存并开始使用 kubeconfig 文件
在每个 Rancher Server 节点安装 RKE2 时,会在每个节点的 `/etc/rancher/rke2/rke2.yaml` 中生成一个 `kubeconfig` 文件。该文件包含访问集群的凭证。请将该文件保存在安全的位置。
如要使用该 `kubeconfig` 文件:
1. 安装 [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl)(Kubernetes 命令行工具)。
2. 复制 `/etc/rancher/rke2/rke2.yaml` 文件并保存到本地主机的 `~/.kube/config` 目录上。
3. 在 kubeconfig 文件中,`server` 的参数为 localhost。你需要将 `server` 配置为负载均衡器的 DNS,并指定端口 6443(通过端口 6443 访问 Kubernetes API Server,通过端口 80 和 443 访问 Rancher Server)。以下是一个 `rke2.yaml` 示例:
```
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: [CERTIFICATE-DATA]
server: [LOAD-BALANCER-DNS]:6443 # 编辑此行
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: [PASSWORD]
username: admin
```
**结果**:你可以开始使用 `kubectl` 来管理你的 RKE2 集群。如果你有多个 `kubeconfig` 文件,在使用 `kubectl` 时,你可以传入文件路径来指定要使用的 `kubeconfig` 文件:
```
kubectl --kubeconfig ~/.kube/config/rke2.yaml get pods --all-namespaces
```
有关 `kubeconfig` 文件的详情,请参见 [RKE2 官方文档](https://docs.rke2.io/cluster_access/)或 [ Kubernetes 官方文档](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)中关于使用 `kubeconfig` 文件管理集群访问的部分。
### 升级注意事项
你可以通过以下方式完成离线环境的升级:
1. 从 [Releases](https://github.com/rancher/rke2/releases) 页面下载新的离线工件,并安装升级 RKE2 版本的脚本。
2. 使用相同的环境变量再次运行脚本。
3. 重启 RKE2 服务。
</TabItem>
<TabItem value="RKE">
我们将使用 Rancher Kubernetes Engine (RKE) 创建一个 Kubernetes 集群。在启动 Kubernetes 集群之前,你需要安装 RKE 并创建 RKE 配置文件。
### 1. 安装 RKE
参照 [RKE 官方文档](https://rancher.com/docs/rke/latest/en/installation/)的说明安装 RKE。
### 2. 创建 RKE 配置文件
在可访问你 Linux 主机节点上的 22/TCP 端口和 6443/TCP 端口的系统上,使用以下示例创建一个名为 `rancher-cluster.yml` 的新文件。
该文件是 RKE 配置文件,用于配置你要部署 Rancher 的集群。
参考下方的 _RKE 选项_ 表格,修改代码示例中的参数。使用你创建的三个节点的 IP 地址或 DNS 名称。
:::tip
如需获取可用选项的详情,请参见 RKE [配置选项](https://rancher.com/docs/rke/latest/en/config-options/)。
:::
<figcaption>RKE 选项</figcaption>
| 选项 | 必填 | 描述 |
| ------------------ | -------------------- | --------------------------------------------------------------------------------------- |
| `address` | ✓ | 离线环境中节点的 DNS 或 IP 地址 |
| `user` | ✓ | 可运行 Docker 命令的用户 |
| `role` | ✓ | 分配给节点的 Kubernetes 角色列表 |
| `internal_address` | 可选<sup>1</sup> | 用于集群内部流量的 DNS 或 IP 地址 |
| `ssh_key_path` | | 用来验证节点的 SSH 私钥文件路径(默认值为 `~/.ssh/id_rsa`) |
> <sup>1</sup> 如果你想使用引用安全组或防火墙,某些服务(如 AWS EC2)要求设置 `internal_address`。
```yaml
nodes:
- address: 10.10.3.187 # 离线环境节点 IP
internal_address: 172.31.7.22 # 节点内网 IP
user: rancher
role: ['controlplane', 'etcd', 'worker']
ssh_key_path: /home/user/.ssh/id_rsa
- address: 10.10.3.254 # 离线环境节点 IP
internal_address: 172.31.13.132 # 节点内网 IP
user: rancher
role: ['controlplane', 'etcd', 'worker']
ssh_key_path: /home/user/.ssh/id_rsa
- address: 10.10.3.89 # 离线环境节点 IP
internal_address: 172.31.3.216 # 节点内网 IP
user: rancher
role: ['controlplane', 'etcd', 'worker']
ssh_key_path: /home/user/.ssh/id_rsa
private_registries:
- url: <REGISTRY.YOURDOMAIN.COM:PORT> # 私有镜像仓库 URL
user: rancher
password: '*********'
is_default: true
```
### 3. 运行 RKE
配置 `rancher-cluster.yml`后,启动你的 Kubernetes 集群:
```
rke up --config ./rancher-cluster.yml
```
### 4. 保存你的文件
:::note 重要提示:
维护、排除问题和升级集群需要用到以下文件,请妥善保管这些文件:
:::
将以下文件的副本保存在安全位置:
- `rancher-cluster.yml`:RKE 集群配置文件。
- `kube_config_cluster.yml`:集群的 [Kubeconfig 文件](https://rancher.com/docs/rke/latest/en/kubeconfig/)。该文件包含可完全访问集群的凭证。
- `rancher-cluster.rkestate`:[Kubernetes 集群状态文件](https://rancher.com/docs/rke/latest/en/installation/#kubernetes-cluster-state)。该文件包含集群的当前状态,包括 RKE 配置以及证书<br/>。<br/>_Kubernetes 集群状态文件仅在使用 RKE 0.2.0 或更高版本时创建。_
</TabItem>
</Tabs>
:::note
后两个文件名中的 `rancher-cluster` 部分取决于你命名 RKE 集群配置文件的方式。
:::
### 故障排除
参见[故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)页面。
### 后续操作
[安装 Rancher](install-rancher-ha.md)
@@ -0,0 +1,264 @@
---
title: 4. 安装 Rancher
weight: 400
---
本文介绍如何在高可用 Kubernetes 安装的离线环境部署 Rancher。离线环境可以是 Rancher Server 离线安装、防火墙后面或代理后面。
### Rancher 特权访问
当 Rancher Server 部署在 Docker 容器中时,容器内会安装一个本地 Kubernetes 集群供 Rancher 使用。为 Rancher 的很多功能都是以 deployment 的方式运行的,而在容器内运行容器是需要特权模式的,因此你需要在安装 Rancher 时添加 `--privileged` 选项。
## Docker 说明
如果你想使用 Docker 命令进行离线安装,请跳过本页的剩余部分,并按照[此页](docker-install-commands.md)进行操作。
## Kubernetes 说明
我们建议在 Kubernetes 集群上安装 Rancher。高可用的 Kubernetes 安装的情况下,一个 Kubernetes 集群包含三个运行 Rancher Server 组件的节点。持久层(etcd)也在这三个节点上进行复制,以便在其中一个节点发生故障时提供冗余和数据复制。
### 1. 添加 Helm Chart 仓库
从可以访问互联网的系统中,获取最新的 Helm Chart,然后将 manifest 复制到可访问 Rancher Server 集群的系统中。
1. 如果你还没有安装 `helm`,请在可访问互联网的工作站上进行本地安装。注意:参考 [Helm 版本要求](../../resources/helm-version-requirements.md)选择 Helm 版本来安装 Rancher。
2. 执行 `helm repo add` 命令,以添加包含安装 Rancher 的 Chart 的 Helm Chart 仓库。有关如何选择仓库,以及哪个仓库最适合你的用例,请参见[选择 Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md#helm-chart-仓库)。
- Latest:建议用于试用最新功能
```
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
```
- Stable:建议用于生产环境
```
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
```
- Alpha:即将发布的实验性预览。
```
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
```
注意:不支持升级到 Alpha 版、从 Alpha 版升级或在 Alpha 版之间升级。
3. 获取最新的 Rancher Chart。此操作将获取 Chart 并将其作为 `.tgz` 文件保存在当前目录中。
```plain
helm fetch rancher-<CHART_REPO>/rancher
```
如需下载特定的 Rancher 版本,你可以用 Helm `--version` 参数指定版本,如下:
```plain
helm fetch rancher-stable/rancher --version=v2.4.8
```
### 2. 选择 SSL 配置
Rancher Server 默认设计为安全的,并且需要 SSL/TLS 配置。
如果你在离线的 Kubernetes 集群中安装 Rancher,我们建议使用以下两种证书生成方式。
:::note
如果你想在外部终止 SSL/TLS,请参见[外部负载均衡器的 TLS 终止](../../../../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。
:::
| 配置 | Chart 选项 | 描述 | 是否需要 cert-manager |
| ------------------------------------------ | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| Rancher 生成的自签名证书 | `ingress.tls.source=rancher` | 使用 Rancher 生成的 CA 签发的自签名证书。此项是**默认选项**。在渲染 Helm 模板的时候不需要传递此项。 | 是 |
| 你已有的证书 | `ingress.tls.source=secret` | 通过创建 Kubernetes 密文使用你自己的证书文件。<br />在渲染 Rancher Helm 模板时必须传递此选项。 | 否 |
### 离线安装的 Helm Chart 选项
在配置 Rancher Helm 模板时,Helm Chart 中有几个专为离线安装设计的选项,如下表:
| Chart 选项 | Chart 值 | 描述 |
| ----------------------- | -------------------------------- | ---- |
| `certmanager.version` | `<version>` | 根据运行的 cert-manager 版本配置适当的 Rancher TLS 颁发者。 |
| `systemDefaultRegistry` | `<REGISTRY.YOURDOMAIN.COM:PORT>` | 将 Rancher Server 配置成在配置集群时,始终从私有镜像仓库中拉取镜像。 |
| `useBundledSystemChart` | `true` | 配置 Rancher Server 使用打包的 Helm System Chart 副本。[system charts](https://github.com/rancher/system-charts) 仓库包含所有 Monitoring,Logging,告警和全局 DNS 等功能所需的应用商店项目。这些 [Helm Chart](https://github.com/rancher/system-charts) 位于 GitHub 中。但是由于你处在离线环境,因此使用 Rancher 内置的 Chart 会比设置 Git mirror 容易得多。 |
### 3. 渲染 Rancher Helm 模板
根据你在[2:选择 SSL 配置](#2-选择-ssl-配置)中的选择,完成以下步骤之一:
#### 选项 A:使用 Rancher 默认的自签名证书
默认情况下,Rancher 会生成一个 CA 并使用 cert-manager 颁发证书以访问 Rancher Server 界面。
:::note
由于 cert-manager 的最新改动,你需要升级 cert-manager 版本。如果你需要升级 Rancher 并使用低于 0.11.0 的 cert-manager 版本,请参见 [cert-manager 升级文档](../../resources/upgrade-cert-manager.md)。
:::
##### 1. 添加 cert-manager 仓库
在可以连接互联网的系统中,将 cert-manager 仓库添加到 Helm:
```plain
helm repo add jetstack https://charts.jetstack.io
helm repo update
```
##### 2. 获取 cert-manager Chart
从 [Helm Chart 仓库](https://artifacthub.io/packages/helm/cert-manager/cert-manager)中获取最新可用的 cert-manager Chart:
:::note
v2.6.4 兼容 cert-manager 版本 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。
:::
```plain
helm fetch jetstack/cert-manager --version v1.7.1
```
##### 3. 渲染 cert-manager 模板
使用你想用来安装 Chart 的选项来渲染 cert-manager 模板。记住要设置 `image.repository` 选项,以从你的私有镜像仓库拉取镜像。此操作会创建一个包含 Kubernetes manifest 文件的 `cert-manager` 目录。
```plain
helm template cert-manager ./cert-manager-v1.7.1.tgz --output-dir . \
--namespace cert-manager \
--set image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-controller \
--set webhook.image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-webhook \
--set cainjector.image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-cainjector \
--set startupapicheck.image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-ctl
```
##### 4. 下载 cert-manager CRD
为 cert-manager 下载所需的 CRD 文件:
```plain
curl -L -o cert-manager/cert-manager-crd.yaml https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
```
##### 5. 渲染 Rancher 模板
渲染 Rancher 模板来声明你的选项。参考下表来替换每个占位符。Rancher 需要配置为使用私有镜像仓库,以便配置所有 Rancher 启动的 Kubernetes 集群或 Rancher 工具。
| 占位符 | 描述 |
------------|-------------
| `<VERSION>` | 输出压缩包的版本号。 |
| `<RANCHER.YOURDOMAIN.COM>` | 指向负载均衡器的 DNS 名称。 |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 你的私有镜像仓库的 DNS 名称。 |
| `<CERTMANAGER_VERSION>` | 在 K8s 集群上运行的 cert-manager 版本。 |
```plain
helm template rancher ./rancher-<VERSION>.tgz --output-dir . \
--no-hooks \ # 避免生成 Helm 钩子文件
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set certmanager.version=<CERTMANAGER_VERSION> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
--set useBundledSystemChart=true # 使用打包的 Rancher System Chart
```
**可选**:如需安装特定的 Rancher 版本,设置`rancherImageTag` 的值,例如:`--set rancherImageTag=v2.5.8`
#### 选项 B:使用 Kubernetes 密文从文件中获取证书
##### 1. 创建密文
使用你自己的证书来创建 Kubernetes 密文,以供 Rancher 使用。证书的 common name 需要与以下命令中的 `hostname` 选项匹配,否则 Ingress Controller 将无法为 Rancher 配置站点。
##### 2. 渲染 Rancher 模板
渲染 Rancher 模板来声明你的选项。参考下表来替换每个占位符。Rancher 需要配置为使用私有镜像仓库,以便配置所有 Rancher 启动的 Kubernetes 集群或 Rancher 工具。
| 占位符 | 描述 |
| -------------------------------- | ----------------------------------------------- |
| `<VERSION>` | 输出压缩包的版本号。 |
| `<RANCHER.YOURDOMAIN.COM>` | 指向负载均衡器的 DNS 名称。 |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 你的私有镜像仓库的 DNS 名称。 |
```plain
helm template rancher ./rancher-<VERSION>.tgz --output-dir . \
--no-hooks \ # 避免生成 Helm 钩子文件
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set ingress.tls.source=secret \
--set systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
--set useBundledSystemChart=true # 使用打包的 Rancher System Chart
```
如果你使用的是私有 CA 签名的证书,请在 `--set ingress.tls.source=secret` 后加上 `--set privateCA=true`:
```plain
helm template rancher ./rancher-<VERSION>.tgz --output-dir . \
--no-hooks \ # 避免生成 Helm 钩子文件
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set ingress.tls.source=secret \
--set privateCA=true \
--set systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
--set useBundledSystemChart=true # 使用打包的 Rancher System Chart
```
**可选**:如需安装特定的 Rancher 版本,设置`rancherImageTag` 的值,例如:`--set rancherImageTag=v2.3.6`
然后,参见[添加 TLS 密文](../../resources/add-tls-secrets.md)发布证书文件,以便 Rancher 和 Ingress Controller 可以使用它们。
### 4. 安装 Rancher
将渲染的 manifest 目录复制到可以访问 Rancher Server 集群的系统中,以完成安装。
使用 `kubectl` 来创建命名空间和应用渲染的 manifest。
如果你使用自签名证书(在[选项B. 选择 SSL 配置](#b-选择-ssl-配置)中),安装 cert-manager。
#### 自签名证书安装 - 安装 Cert-manager
<details id="install-cert-manager">
<summary>单击展开</summary>
如果你使用自签名证书,安装 cert-manager:
1. 为 cert-manager 创建命名空间:
```plain
kubectl create namespace cert-manager
```
2. 创建 cert-manager CustomResourceDefinition (CRD)。
```plain
kubectl apply -f cert-manager/cert-manager-crd.yaml
```
:::note
如果你运行的 Kubernetes 版本是 1.15 或更低版本,你需要在以上的 `kubectl apply` 命令中添加 `--validate=false`,否则你将看到 cert-manager CRD 资源中的 `x-kubernetes-preserve-unknown-fields` 字段校验错误提示。这是 kubectl 执行资源校验方式产生的良性错误。
:::
3. 启动 cert-manager.
```plain
kubectl apply -R -f ./cert-manager
```
</details>
#### 使用 kubectl 安装 Rancher
```plain
kubectl create namespace cattle-system
kubectl -n cattle-system apply -R -f ./rancher
```
安装已完成。
:::caution
如果你不想发送遥测数据,在首次登录时退出[遥测](../../../../faq/telemetry.md)。如果在离线安装的环境中让这个功能处于 active 状态,socket 可能无法打开。
:::
## 其他资源
以下资源可能对安装 Rancher 有帮助:
- [Rancher Helm Chart 选项](../../../../reference-guides/installation-references/helm-chart-options.md)
- [添加 TLS 密文](../../resources/add-tls-secrets.md)
- [Rancher Kubernetes 安装的故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)
@@ -0,0 +1,316 @@
---
title: '2. 收集镜像并发布到私有仓库'
weight: 200
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
本文介绍如何配置私有镜像仓库,以便在安装 Rancher 时,Rancher 可以从此私有镜像仓库中拉取所需的镜像。
默认情况下,所有用于[配置 Kubernetes 集群](../../../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md)或启动 Rancher 中的工具(如监控,流水线,告警等)的镜像都是从 Docker Hub 中拉取的。在 Rancher 的离线安装中,你需要一个私有仓库,该仓库位于你的 Rancher Server 中某个可访问的位置。然后,你可加载该存有所有镜像的镜像仓库。
使用 Docker 安装 Rancher,和把 Rancher 安装到 Kubernetes 集群,其对应的推送镜像到私有镜像仓库步骤是一样的。
你使用 Rancher 配置的下游集群是否有运行 Windows 的节点,决定了本文涉及的步骤。我们提供的推送镜像到私有镜像仓库步骤,是基于假设 Rancher 仅配置运行 Linux 节点的下游 Kubernetes 集群的。但是,如果你计划[在下游 Kubernetes 集群中使用 Windows 节点](../../../../pages-for-subheaders/use-windows-clusters.md),我们有单独的文档来介绍如何为需要的镜像提供支持。
:::note 先决条件:
你必须有一个可用的[私有镜像仓库](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry)。
如果镜像仓库有证书,请参见 [K3s 文档中心](https://rancher.com/docs/k3s/latest/en/installation/private-registry/)了解添加私有镜像仓库的详情。证书和镜像仓库配置文件均需要挂载到 Rancher 容器中。
:::
<Tabs>
<TabItem value="仅包含 Linux 的集群">
如果 Rancher Server 用于配置仅有 Linux 节点的集群,请按以下步骤将你的镜像推送到私有镜像仓库。
1. [找到你的 Rancher 版本所需的资源](#1-找到你的-rancher-版本所需的资源)
2. [收集 cert-manager 镜像](#2-收集-cert-manager-镜像)(除非你使用自己的证书,或在负载均衡器上终止 TLS)
3. [把镜像保存到你的工作站](#3-将镜像保存到你的工作站中)
4. [推送镜像到私有镜像仓库](#4-推送镜像到私有镜像仓库)
### 先决条件
这些步骤要求你使用一个 Linux 工作站,该工作站需要可访问互联网和你的私有镜像仓库,且至少有 20GB 的可用磁盘空间。
如果你的主机架构是 ARM64,镜像仓库必须支持 Manifest。这是因为从 2020 年 4 月开始, Amazon Elastic Container Registry 已经不再支持 Manifest。
### 1. 找到你的 Rancher 版本所需的资源
1. 访问 Rancher 的[发布说明](https://github.com/rancher/rancher/releases)页面,找到你需要安装的 Rancher v2.x.x 版本,然后点击 **Assets**。注意不要使用带有 `rc` 或 `Pre-release` 标记的版本,因为这些版本在生产环境中不够稳定。
2. 从你所需版本的 **Assets** 处下载以下文件,这些文件是在离线环境中安装 Rancher 所必须的:
| Release 文件 | 描述 |
| ---------------- | -------------- |
| `rancher-images.txt` | 此文件包含安装 Rancher、配置集群和用户 Rancher 工具所需的镜像。 |
| `rancher-save-images.sh` | 该脚本从 Docker Hub 中拉取在文件 `rancher-images.txt` 中记录的所有镜像,并把这些镜像保存为 `rancher-images.tar.gz`。 |
| `rancher-load-images.sh` | 该脚本从 `rancher-images.tar.gz` 文件中加载镜像,并把镜像推送到你的私有镜像仓库。 |
### 2. 收集 cert-manager 镜像
:::note
如果你使用自己的证书,或要在外部负载均衡器上终止 TLS,请跳过此步骤。
:::
在 Kubernetes 安装中,如果你使用的是 Rancher 默认的自签名 TLS 证书,则必须将 [`cert-manager`](https://artifacthub.io/packages/helm/cert-manager/cert-manager) 镜像添加到 `rancher-images.txt` 文件中。
:::note
v2.6.4 兼容 cert-manager 版本 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。
:::
1. 获取最新的 `cert-manager` Helm Chart,并解析模板以获取镜像的详情信息:
:::note
由于 cert-manager 的最新改动,你需要升级 cert-manager 版本。如果你需要升级 Rancher 并使用低于 0.12.0 的 cert-manager 版本,请参见[升级文档](../../resources/upgrade-cert-manager.md)。
:::
```plain
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm fetch jetstack/cert-manager --version v1.7.1
helm template ./cert-manager-<version>.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt
```
2. 对镜像列表进行排序和唯一化,以去除重复的镜像源:
```plain
sort -u rancher-images.txt -o rancher-images.txt
```
### 3. 将镜像保存到你的工作站中
1. 为 `rancher-save-images.sh` 文件添加可执行权限:
```
chmod +x rancher-save-images.sh
```
1. 使用 `rancher-images.txt` 镜像列表执行 `rancher-save-images.sh` 脚本,以创建包含所有所需镜像的压缩包:
```plain
./rancher-save-images.sh --image-list ./rancher-images.txt
```
**结果**:Docker 开始拉取用于离线安装的镜像。请耐心等待。这个过程需要几分钟。完成时,你的当前目录会输出名为 `rancher-images.tar.gz` 的压缩包。请确认输出文件是否存在。
### 4. 推送镜像到私有镜像仓库
下一步,你将使用脚本将 `rancher-images.tar.gz` 中的镜像移动到你的私有镜像仓库,以方便加载镜像。
使用脚本将 `rancher-images.tar.gz` 中的镜像移动到你的私有镜像仓库,以方便加载镜像。
`rancher-images.txt` 需要位于工作站中运行 `rancher-load-images.sh` 脚本的同一目录中。`rancher-images.tar.gz` 也需要位于同一目录中。
1. 登录到你的私有镜像仓库:
```plain
docker login <REGISTRY.YOURDOMAIN.COM:PORT>
```
1. 为 `rancher-load-images.sh` 添加可执行权限:
```
chmod +x rancher-load-images.sh
```
1. 使用 `rancher-load-images.sh` 脚本来提取,标记和推送 `rancher-images.txt` 及 `rancher-images.tar.gz` 到你的私有镜像仓库:
```plain
./rancher-load-images.sh --image-list ./rancher-images.txt --registry <REGISTRY.YOURDOMAIN.COM:PORT>
```
</TabItem>
<TabItem value="Linux 和 Windows 集群">
如果你的 Rancher Server 将用于配置 Linux 和 Windows 集群,你需要执行不同的步骤,来将 Windows 镜像和 Linux 镜像推送到你的私有镜像仓库。由于 Windows 集群同时包含 Linux 和 Windows 节点,因此推送到私有镜像仓库的 Linux 镜像是 Manifest。
# Windows 步骤
从 Windows Server 工作站中收集和推送 Windows 镜像。
1. <a href="#windows-1">找到你的 Rancher 版本所需的资源</a>
2. <a href="#windows-2">将镜像保存到你的 Windows Server 工作站</a>
3. <a href="#windows-3">准备 Docker daemon</a>
4. <a href="#windows-4">推送镜像到私有镜像仓库</a>
### 先决条件
以下步骤假设你使用 Windows Server 1809 工作站,该工作站能访问网络及你的私有镜像仓库,且至少拥有 50GB 的磁盘空间。
工作站必须安装 Docker 18.02+ 版本以提供 manifest 支持。Manifest 支持是配置 Windows 集群所必须的。
你的镜像仓库必须支持 Manifest。这是因为从 2020 年 4 月开始, Amazon Elastic Container Registry 已经不再支持 Manifest。
<a name="windows-1"></a>
### 1. 找到你的 Rancher 版本所需的资源
1. 访问 Rancher 的[发布说明](https://github.com/rancher/rancher/releases)页面,找到你需要安装的 Rancher v2.x.x 版本。不要下载带有 `rc` 或 `Pre-release` 标记的版本,因为这些版本在生产环境中不够稳定。
2. 从你所需版本的 **Assets** 处下载以下文件:
| Release 文件 | 描述 |
|----------------------------|------------------|
| `rancher-windows-images.txt` | 此文件包含配置 Windows 集群所需的 Windows 镜像。 |
| `rancher-save-images.ps1` | 该脚本从 Docker Hub 中拉取在文件 `rancher-windows-images.txt` 中记录的所有镜像,并把这些镜像保存为 `rancher-windows-images.tar.gz`。 |
| `rancher-load-images.ps1` | 该脚本从 `rancher-windows-images.tar.gz` 文件中加载镜像,并把镜像推送到你的私有镜像仓库。 |
<a name="windows-2"></a>
### 2. 将镜像保存到你的 Windows Server 工作站
1. 在 `powershell` 中,进入上一步下载的文件所在的目录。
1. 运行 `rancher-save-images.ps1` 以创建包含所有所需镜像的压缩包:
```plain
./rancher-save-images.ps1
```
**结果**:Docker 开始拉取用于离线安装的镜像。请耐心等待。这个过程需要几分钟。完成时,你的当前目录会输出名为 `rancher-windows-images.tar.gz` 的压缩包。请确认输出文件是否存在。
<a name="windows-3"></a>
### 3. 准备 Docker daemon
将你的私有镜像仓库地址尾附到 Docker daemon (`C:\\ProgramData\\Docker\\config\\daemon.json`) 的 `allow-nondistributable-artifacts` 配置字段中。Windows 镜像的基础镜像是由 `mcr.microsoft.com` 镜像仓库维护的,而 Docker Hub 中缺少 Microsoft 镜像仓库层,且需要将其拉入私有镜像仓库,因此这一步骤是必须的。
```json
{
...
"allow-nondistributable-artifacts": [
...
"<REGISTRY.YOURDOMAIN.COM:PORT>"
]
...
}
```
<a name="windows-4"></a>
### 4. 推送镜像到私有镜像仓库
使用脚本将 `rancher-windows-images.tar.gz` 中的镜像移动到你的私有镜像仓库,以方便加载镜像。
`rancher-windows-images.txt` 需要位于工作站中运行 `rancher-load-images.ps1` 脚本的同一目录中。`rancher-windows-images.tar.gz` 也需要位于同一目录中。
1. 使用 `powershell` 登录到你的私有镜像仓库:
```plain
docker login <REGISTRY.YOURDOMAIN.COM:PORT>
```
1. 在 `powershell` 中,使用 `rancher-load-images.ps1` 脚本来提取,标记和推送 `rancher-images.tar.gz` 中的镜像到你的私有镜像仓库:
```plain
./rancher-load-images.ps1 --registry <REGISTRY.YOURDOMAIN.COM:PORT>
```
# Linux 步骤
Linux 镜像需要在 Linux 主机上收集和推送,但是你必须先将 Windows 镜像推送到私有镜像仓库,然后再推送 Linux 镜像。由于被推送的 Linux 镜像实际上是支持 Windows 和 Linux 镜像的 manifest,因此涉及的步骤不同于只包含 Linux 节点的集群。
1. <a href="#linux-1">找到你的 Rancher 版本所需的资源</a>
2. <a href="#linux-2">收集所有需要的镜像</a>
3. <a href="#linux-3">将镜像保存到你的 Linux 工作站中</a>
4. <a href="#linux-4">推送镜像到私有镜像仓库</a>
### 先决条件
在将 Linux 镜像推送到私有镜像仓库之前,你必须先把 Windows 镜像推送到私有镜像仓库。如果你已经把 Linux 镜像推送到私有镜像仓库,则需要再次按照说明重新推送,因为它们需要发布支持 Windows 和 Linux 镜像的 manifest。
这些步骤要求你使用一个 Linux 工作站,该工作站需要可访问互联网和你的私有镜像仓库,且至少有 20GB 的可用磁盘空间。
工作站必须安装 Docker 18.02+ 版本以提供 manifest 支持。Manifest 支持是配置 Windows 集群所必须的。
<a name="linux-1"></a>
### 1. 找到你的 Rancher 版本所需的资源
1. 访问 Rancher 的[发布说明](https://github.com/rancher/rancher/releases)页面,找到你需要安装的 Rancher v2.x.x 版本。不要下载带有 `rc` 或 `Pre-release` 标记的版本,因为这些版本在生产环境中不够稳定。点击 **Assets**。
2. 从你所需版本的 **Assets** 处下载以下文件:
| Release 文件 | 描述 |
|----------------------------| -------------------------- |
| `rancher-images.txt` | 此文件包含安装 Rancher、配置集群和用户 Rancher 工具所需的镜像。 |
| `rancher-windows-images.txt` | 此文件包含配置 Windows 集群所需的镜像。 |
| `rancher-save-images.sh` | 该脚本从 Docker Hub 中拉取在文件 `rancher-images.txt` 中记录的所有镜像,并把这些镜像保存为 `rancher-images.tar.gz`。 |
| `rancher-load-images.sh` | 该脚本从 `rancher-images.tar.gz` 文件中加载镜像,并把镜像推送到你的私有镜像仓库。 |
<a name="linux-2"></a>
### 2. 收集所有需要的镜像
**在 Kubernetes 安装中,如果你使用的是 Rancher 默认的自签名 TLS 证书**,则必须将 [`cert-manager`](https://artifacthub.io/packages/helm/cert-manager/cert-manager) 镜像添加到 `rancher-images.txt` 文件中。如果你使用自己的证书,则可跳过此步骤。
1. 获取最新的 `cert-manager` Helm Chart,并解析模板以获取镜像的详情信息:
:::note
由于 cert-manager 的最新改动,你需要升级 cert-manager 版本。如果你需要升级 Rancher 并使用低于 0.12.0 的 cert-manager 版本,请参见[升级文档](../../resources/upgrade-cert-manager.md)。
:::
```plain
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm fetch jetstack/cert-manager --version v0.12.0
helm template ./cert-manager-<version>.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt
```
2. 对镜像列表进行排序和唯一化,以去除重复的镜像源:
```plain
sort -u rancher-images.txt -o rancher-images.txt
```
<a name="linux-3"></a>
### 3. 将镜像保存到你的工作站中
1. 为 `rancher-save-images.sh` 文件添加可执行权限:
```
chmod +x rancher-save-images.sh
```
1. 使用 `rancher-images.txt` 镜像列表执行 `rancher-save-images.sh` 脚本,以创建包含所有所需镜像的压缩包:
```plain
./rancher-save-images.sh --image-list ./rancher-images.txt
```
**结果**:Docker 开始拉取用于离线安装的镜像。请耐心等待。这个过程需要几分钟。完成时,你的当前目录会输出名为 `rancher-images.tar.gz` 的压缩包。请确认输出文件是否存在。
<a name="linux-4"></a>
### 4. 推送镜像到私有镜像仓库
使用 `rancher-load-images.sh script` 脚本将 `rancher-images.tar.gz` 中的镜像移动到你的私有镜像仓库,以方便加载镜像。
镜像列表,即 `rancher-images.txt` 或 `rancher-windows-images.txt` 需要位于工作站中运行 `rancher-load-images.sh` 脚本的同一目录中。`rancher-images.tar.gz` 也需要位于同一目录中。
1. 登录到你的私有镜像仓库:
```plain
docker login <REGISTRY.YOURDOMAIN.COM:PORT>
```
1. 为 `rancher-load-images.sh` 添加可执行权限:
```
chmod +x rancher-load-images.sh
```
1. 使用 `rancher-load-images.sh` 脚本来提取,标记和推送 `rancher-images.tar.gz` 中的镜像到你的私有镜像仓库:
```plain
./rancher-load-images.sh --image-list ./rancher-images.txt \
--windows-image-list ./rancher-windows-images.txt \
--registry <REGISTRY.YOURDOMAIN.COM:PORT>
```
</TabItem>
</Tabs>
### [Kubernetes 安装的后续步骤 - 启动 Kubernetes 集群](install-kubernetes.md)
### [Docker 安装的后续步骤 - 安装 Rancher](install-rancher-ha.md)
@@ -0,0 +1,175 @@
---
title: '2. 安装 Kubernetes'
weight: 200
---
基础设施配置好后,你可以设置一个 RKE 集群来安装 Rancher。
首先,你需要在所有三个 Linux 节点上安装 Docker 并设置 HTTP 代理。因此,你可以在这三个节点上执行以下步骤。
为方便起见,将代理的 IP 地址和端口导出到一个环境变量中,并为你当前的 shell 设置 HTTP_PROXY 变量:
```
export proxy_host="10.0.0.5:8888"
export HTTP_PROXY=http://${proxy_host}
export HTTPS_PROXY=http://${proxy_host}
export NO_PROXY=127.0.0.0/8,10.0.0.0/8,cattle-system.svc,172.16.0.0/12,192.168.0.0/16
```
接下来配置 apt 以在安装包时使用这个代理。如果你使用的不是 Ubuntu,请相应调整步骤。
```
cat <<'EOF' | sudo tee /etc/apt/apt.conf.d/proxy.conf > /dev/null
Acquire::http::Proxy "http://${proxy_host}/";
Acquire::https::Proxy "http://${proxy_host}/";
EOF
```
安装 Docker:
```
curl -sL https://releases.rancher.com/install-docker/19.03.sh | sh
```
然后,确保你的当前用户能够在没有 sudo 的情况下访问 Docker Daemon:
```
sudo usermod -aG docker YOUR_USERNAME
```
配置 Docker Daemon 使用代理来拉取镜像:
```
sudo mkdir -p /etc/systemd/system/docker.service.d
cat <<'EOF' | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null
[Service]
Environment="HTTP_PROXY=http://${proxy_host}"
Environment="HTTPS_PROXY=http://${proxy_host}"
Environment="NO_PROXY=127.0.0.0/8,10.0.0.0/8,cattle-system.svc,172.16.0.0/12,192.168.0.0/16"
EOF
```
要应用配置,请重新启动 Docker Daemon:
```
sudo systemctl daemon-reload
sudo systemctl restart docker
```
#### 离线代理
_v2.6.4 的新功能_
你现在可以在配置的离线集群中配置主机驱动集群,以使用代理进行出站连接。
除了为代理服务器设置默认规则外,你还需要额外添加如下所示的规则,以从代理的 Rancher 环境中配置主机驱动集群。
根据你的设置配置文件路径,例如 `/etc/apt/apt.conf.d/proxy.conf`:
```
acl SSL_ports port 22
acl SSL_ports port 2376
acl Safe_ports port 22 # ssh
acl Safe_ports port 2376 # docker port
```
### 创建 RKE 集群
在能通过 SSH 访问 Linux 节点的主机上,你需要有几个命令行工具,来创建集群并与之交互:
* [RKE CLI binary](https://rancher.com/docs/rke/latest/en/installation/#download-the-rke-binary)
```
sudo curl -fsSL -o /usr/local/bin/rke https://github.com/rancher/rke/releases/download/v1.1.4/rke_linux-amd64
sudo chmod +x /usr/local/bin/rke
```
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
```
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
```
* [helm](https://helm.sh/docs/intro/install/)
```
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod +x get_helm.sh
sudo ./get_helm.sh
```
接下来,创建一个描述 RKE 集群的 YAML 文件。确保节点的 IP 地址和 SSH 用户名是正确的。有关集群 YAML 的详情,请参见 [RKE 官方文档](https://rancher.com/docs/rke/latest/en/example-yamls/)。
```yml
nodes:
- address: 10.0.1.200
user: ubuntu
role: [controlplane,worker,etcd]
- address: 10.0.1.201
user: ubuntu
role: [controlplane,worker,etcd]
- address: 10.0.1.202
user: ubuntu
role: [controlplane,worker,etcd]
services:
etcd:
backup_config:
interval_hours: 12
retention: 6
```
之后,你可以通过运行以下命令来创建 Kubernetes 集群:
```
rke up --config rancher-cluster.yaml
```
RKE 会创建一个名为 `rancher-cluster.rkestate` 的状态文件。如果你需要更新或修改集群配置,或使用备份恢复集群,则需要使用该文件。RKE 还会创建一个 `kube_config_cluster.yaml` 文件,你可以使用该文件在本地使用 kubectl 或 Helm 等工具连接到远端的 Kubernetes 集群。请将这些文件保存在安全的位置,例如版本控制系统中。
如需查看集群,请运行以下命令:
```
export KUBECONFIG=kube_config_cluster.yaml
kubectl cluster-info
kubectl get pods --all-namespaces
```
你也可以验证你的外部负载均衡器是否工作,DNS 条目是否设置正确。如果你向其中之一发送请求,你会收到来自 Ingress Controller 的 HTTP 404 响应:
```
$ curl 10.0.1.100
default backend - 404
$ curl rancher.example.com
default backend - 404
```
### 保存你的文件
:::note 重要提示:
维护、排除问题和升级集群需要用到以下文件,请妥善保管这些文件:
:::
将以下文件的副本保存在安全位置:
- `rancher-cluster.yml`:RKE 集群配置文件。
- `kube_config_cluster.yml`:集群的 [Kubeconfig 文件](https://rancher.com/docs/rke/latest/en/kubeconfig/)。该文件包含可完全访问集群的凭证。
- `rancher-cluster.rkestate`:[Kubernetes 集群状态文件](https://rancher.com/docs/rke/latest/en/installation/#kubernetes-cluster-state)。此文件包含集群的当前状态,包括 RKE 配置和证书。
:::note
后两个文件名中的 `rancher-cluster` 部分取决于你命名 RKE 集群配置文件的方式。
:::
### 故障排除
参见[故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)页面。
### 后续操作
[安装 Rancher](install-rancher.md)
@@ -0,0 +1,101 @@
---
title: 3. 安装 Rancher
weight: 300
---
在前文的操作后,你已经有了一个运行的 RKE 集群,现在可以在其中安装 Rancher 了。出于安全考虑,所有到 Rancher 的流量都必须使用 TLS 加密。在本教程中,你将使用 [cert-manager](https://cert-manager.io/)自动颁发自签名证书。在实际使用情况下,你可使用 Let's Encrypt 或自己的证书。
:::note
这些安装指南假定你使用的是 Helm 3。
:::
### 安装 cert-manager
添加 cert-manager Helm 仓库:
```
helm repo add jetstack https://charts.jetstack.io
```
为 cert-manager 创建命名空间:
```
kubectl create namespace cert-manager
```
安装 cert-manager 的 CustomResourceDefinitions:
:::note
v2.6.4 兼容 cert-manager 版本 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。
:::
```
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
```
使用 Helm 安装 cert-manager。请注意,cert-manager 还需要你配置代理,以防它需要与 Let's Encrypt 或其他外部证书颁发商进行通信:
```
helm upgrade --install cert-manager jetstack/cert-manager \
--namespace cert-manager --version v1.7.1 \
--set http_proxy=http://${proxy_host} \
--set https_proxy=http://${proxy_host} \
--set no_proxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local
```
等待 cert-manager 完成启动:
```
kubectl rollout status deployment -n cert-manager cert-manager
kubectl rollout status deployment -n cert-manager cert-manager-webhook
```
### 安装 Rancher
接下来,你可以安装 Rancher 了。首先,添加 Helm 仓库:
```
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
```
创建命名空间:
```
kubectl create namespace cattle-system
```
然后使用 Helm 安装 Rancher:Rancher 也需要你配置代理,以便它可以与外部应用商店通信,或检索 Kubernetes 版本更新元数据:
```
helm upgrade --install rancher rancher-latest/rancher \
--namespace cattle-system \
--set hostname=rancher.example.com \
--set proxy=http://${proxy_host} \
--set noProxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local
```
等待部署完成:
```
kubectl rollout status deployment -n cattle-system rancher
```
现在,你可以导航到 `https://rancher.example.com` 并开始使用 Rancher。
:::caution
如果你不想发送遥测数据,在首次登录时退出[遥测](../../../../faq/telemetry.md)。如果在离线安装的环境中让这个功能处于 active 状态,socket 可能无法打开。
:::
### 其他资源
以下资源可能对安装 Rancher 有帮助:
- [Rancher Helm Chart 选项](../../../../reference-guides/installation-references/helm-chart-options.md)
- [添加 TLS 密文](../../resources/add-tls-secrets.md)
- [Rancher Kubernetes 安装的故障排除](../../install-upgrade-on-a-kubernetes-cluster/troubleshooting.md)
@@ -0,0 +1,65 @@
---
title: '1. 配置基础设施'
weight: 100
---
在本节中,你将为 Rancher Management Server 配置底层基础设施,并使其通过 HTTP 代理访问互联网。
如需在高可用 RKE 集群中安装 Rancher Management Server,我们建议配置以下基础设施:
- **3 个 Linux 节点**:可以是你的云提供商(例如 Amazon EC2,GCE 或 vSphere)中的虚拟机。
- **1 个负载均衡器**:用于将前端流量转发到这三个节点中。
- **1 个 DNS 记录**:用于将 URL 映射到负载均衡器。此 DNS 记录将成为 Rancher Server 的 URL,下游集群需要可以访问到这个地址。
这些节点必须位于同一个区域或数据中心。但是你可以把这些服务器放在不同的可用区。
### 为什么使用三个节点?
在 RKE 集群中,Rancher Server 的数据存储在 etcd 中。而这个 etcd 数据库在这三个节点上运行。
为了选举出大多数 etcd 节点认可的 etcd 集群 leader,etcd 数据库需要奇数个节点。如果 etcd 数据库无法选出 leader,etcd 可能会出现[脑裂(split brain)](https://www.quora.com/What-is-split-brain-in-distributed-systems)的问题,此时你需要使用备份恢复集群。如果三个 etcd 节点之一发生故障,其余两个节点可以选择一个 leader,因为它们是 etcd 节点总数的大多数部分。
### 1. 配置 Linux 节点
这些主机将通过 HTTP 代理连接到互联网。
请确保你的节点满足[操作系统,容器运行时,硬件和网络](../../../../pages-for-subheaders/installation-requirements.md)的常规要求。
如需获取配置 Linux 节点的示例,请参见[在 Amazon EC2 中配置节点](../../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)的教程。
### 2. 配置负载均衡器
你还需要设置一个负载均衡器,来将流量重定向到两个节点上的 Rancher 副本。配置后,当单个节点不可用时,继续保障与 Rancher Management Server 的通信。
在后续步骤中配置 Kubernetes 时,RKE 工具会部署一个 NGINX Ingress Controller。该 Controller 将侦听 worker 节点的 80 端口和 443 端口,以响应发送给特定主机名的流量。
在安装 Rancher 后(也是在后续步骤中),Rancher 系统将创建一个 Ingress 资源。该 Ingress 通知 NGINX Ingress Controller 监听发往 Rancher 主机名的流量。NGINX Ingress Controller 在收到发往 Rancher 主机名的流量时,会将其转发到集群中正在运行的 Rancher Server Pod。
在你的实现中,你可以考虑是否需要使用 4 层或 7 层的负载均衡器:
- **4 层负载均衡器**:两种选择中较为简单的一种,它将 TCP 流量转发到你的节点中。我们建议使用 4 层负载均衡器,将流量从 TCP/80 端口和 TCP/443 端口转发到 Rancher Management 集群节点上。集群上的 Ingress Controller 会将 HTTP 流量重定向到 HTTPS,并在 TCP/443 端口上终止 SSL/TLS。Ingress Controller 会将流量转发到 Rancher deployment 中 Ingress Pod 的 TCP/80 端口。
- **7 层负载均衡器**:相对比较复杂,但功能更全面。例如,与 Rancher 本身进行 TLS 终止相反,7 层负载均衡器能够在负载均衡器处处理 TLS 终止。如果你需要集中在基础设施中进行 TLS 终止,7 层负载均衡可能会很适合你。7 层负载均衡还能让你的负载均衡器基于 HTTP 属性(例如 cookie 等)做出决策,而 4 层负载均衡器则不能。如果你选择在 7 层负载均衡器上终止 SSL/TLS 流量,则在安装 Rancher 时(后续步骤)需要使用 `--set tls=external` 选项。详情请参见 [Rancher Helm Chart 选项](../../../../reference-guides/installation-references/helm-chart-options.md#外部-tls-终止)。
如需获取配置 NGINX 负载均衡器的示例,请参见[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/nginx-load-balancer.md)。
如需获取如何配置 Amazon ELB 网络负载均衡器的指南,请参见[本页](../../../../how-to-guides/new-user-guides/infrastructure-setup/amazon-elb-load-balancer.md)。
:::note 重要提示:
安装后,请勿将此负载均衡(例如 `local` 集群 Ingress)用于 Rancher 以外的应用。如果此 Ingress 与其他应用共享,在其他应用的 Ingress 配置重新加载后,可能导致 Rancher 出现 websocket 错误。我们建议把 `local` 集群专用给 Rancher,不要在集群内部署其他应用。
:::
### 3. 配置 DNS 记录
配置完负载均衡器后,你将需要创建 DNS 记录,以将流量发送到该负载均衡器。
根据你的环境,DNS 记录可以是指向负载均衡器 IP 的 A 记录,也可以是指向负载均衡器主机名的 CNAME。无论是哪种情况,请确保该记录是你要 Rancher 进行响应的主机名。
在安装 Rancher 时(后续步骤),你需要指定此主机名。请知悉,此主机名无法修改。请确保你设置的主机名是你想要的。
有关设置 DNS 记录以将域流量转发到 Amazon ELB 负载均衡器的指南,请参见 [AWS 官方文档](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-elb-load-balancer)。
### 后续操作
[配置 Kubernetes 集群](install-kubernetes.md)
@@ -0,0 +1,90 @@
---
title: 证书故障排除
weight: 4
---
### 如何确定我的证书格式是否为 PEM?
你可以通过以下特征识别 PEM 格式:
- 文件开始的标头:
```
-----BEGIN CERTIFICATE-----
```
- 表头后跟一长串字符。
- 文件结束的页脚:
```
-----END CERTIFICATE-----
```
PEM 证书示例:
```
----BEGIN CERTIFICATE-----
MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
... more lines
VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
-----END CERTIFICATE-----
```
PEM 证书密钥示例:
```
-----BEGIN RSA PRIVATE KEY-----
MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
... more lines
VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
-----END RSA PRIVATE KEY-----
```
如果你的密钥与以下示例类似,请参见[将 PKCS8 证书密钥转换为 PKCS1](#将-pkcs8-证书密钥转换为-pkcs1)。
```
-----BEGIN PRIVATE KEY-----
MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
... more lines
VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
-----END PRIVATE KEY-----
```
### 将 PKCS8 证书密钥转换为 PKCS1
如果你使用的是 PKCS8 证书密钥文件,Rancher 将打印以下日志:
```
ListenConfigController cli-config [listener] failed with : failed to read private key: asn1: structure error: tags don't match (2 vs {class:0 tag:16 length:13 isCompound:true})
```
为了能正常工作,你需要运行以下命令,将密钥从 PKCS8 转换为 PKCS1:
```
openssl rsa -in key.pem -out convertedkey.pem
```
你可使用 `convertedkey.pem` 作为 Rancher 证书密钥文件。
### 添加中间证书的顺序是什么?
添加证书的顺序如下:
```
-----BEGIN CERTIFICATE-----
%YOUR_CERTIFICATE%
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
%YOUR_INTERMEDIATE_CERTIFICATE%
-----END CERTIFICATE-----
```
### 如何验证我的证书链?
你可使用 `openssl` 二进制文件来验证证书链。如果命令的输出以 `Verify return code: 0 (ok)` 结尾(参见以下示例),你的证书链是有效的。`ca.pem` 文件必须与你添加到 `rancher/rancher` 容器中的文件一致。
如果你使用由可信的 CA 签发的证书,可省略 `-CAfile` 参数。
命令:
```
openssl s_client -CAfile ca.pem -connect rancher.yourdomain.com:443
...
Verify return code: 0 (ok)
```
@@ -0,0 +1,92 @@
---
title: 回滚 Docker 安装的 Rancher
weight: 1015
---
如果 Rancher 升级没有成功完成,你需要回滚到你在 [Docker 升级](upgrade-docker-installed-rancher.md)之前使用的 Rancher 设置。回滚可以恢复:
- 先前版本的 Rancher。
- 升级前创建的数据备份。
## 在你开始前
在回滚到先前 Rancher 版本的过程中,你将输入一系列命令。请按照你环境的实际情况替换占位符。占位符用尖括号和大写字母(如 `<EXAMPLE>`)表示。以下是带有占位符的命令示例:
```
docker pull rancher/rancher:<PRIOR_RANCHER_VERSION>
```
在此命令中,`<PRIOR_RANCHER_VERSION>` 是升级失败之前运行的 Rancher 版本,如 `v2.0.5`。
请交叉参考下方的图片和表格,了解获取此占位符数据的方法。在开始以下步骤之前,请先记下或复制此信息。
<sup>终端 <code>docker ps</code> 命令,显示如何找到 <code>&lt;PRIOR_RANCHER_VERSION&gt;</code> 和 <code>&lt;RANCHER_CONTAINER_NAME&gt;</code></sup>![占位符参考](/img/placeholder-ref-2.png)
| 占位符 | 示例 | 描述 |
| -------------------------- | -------------------------- | ------------------------------------------------------- |
| `<PRIOR_RANCHER_VERSION>` | `v2.0.5` | 升级前使用的 rancher/rancher 镜像。 |
| `<RANCHER_CONTAINER_NAME>` | `festive_mestorf` | 你的 Rancher 容器的名称。 |
| `<RANCHER_VERSION>` | `v2.0.5` | 备份对应的 Rancher 版本。 |
| `<DATE>` | `9-27-18` | 数据容器或备份的创建日期。 |
<br/>
可以通过远程连接登录到 Rancher Server 所在的主机并输入命令 `docker ps` 以查看正在运行的容器,从而获得 `<PRIOR_RANCHER_VERSION>` 和 `<RANCHER_CONTAINER_NAME>` 。你还可以运行 `docker ps -a` 命令查看停止了的容器。在创建备份期间,你随时可以运行这些命令来获得帮助。
## 回滚 Rancher
如果你在升级 Rancher 时遇到问题,你可拉取先前使用的镜像并恢复在升级前所做的备份,从而将 Rancher 回滚到之前的正常工作状态。
:::danger
回滚到先前的 Rancher 版本会破坏你在升级后对 Rancher 做出的所有更改。丢失的数据可能无法恢复。
:::
1. 使用远程终端连接,登录到运行 Rancher Server 的节点。
1. 拉取升级前运行的 Rancher 版本。把 `<PRIOR_RANCHER_VERSION>` 替换为该版本。
例如,如果升级之前运行的是 Rancher v2.0.5,请拉取 v2.0.5。
```
docker pull rancher/rancher:<PRIOR_RANCHER_VERSION>
```
1. 停止当前运行 Rancher Server 的容器。将 `<RANCHER_CONTAINER_NAME>` 替换为你的 Rancher 容器的名称:
```
docker stop <RANCHER_CONTAINER_NAME>
```
你可输入 `docker ps`获取 Rancher 容器的名称。
1. 将你在 [Docker 升级](upgrade-docker-installed-rancher.md)时创建的备份压缩包移动到 Rancher Server。切换到你将其移动到的目录。输入 `dir` 以确认它在该位置。
如果你遵循了我们在 [Docker 升级](upgrade-docker-installed-rancher.md)中推荐的命名方式,它的名称会与 `rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz` 类似。
1. 替换占位符来运行以下命令,将 `rancher-data` 容器中的数据替换为备份压缩包中的数据。不要忘记关闭引号。
```
docker run --volumes-from rancher-data \
-v $PWD:/backup busybox sh -c "rm /var/lib/rancher/* -rf \
&& tar zxvf /backup/rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz"
```
1. 将 `<PRIOR_RANCHER_VERSION>` 占位符指向数据容器,启动一个新的 Rancher Server 容器。
```
docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
--privileged \
rancher/rancher:<PRIOR_RANCHER_VERSION>
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
:::danger
启动回滚后,即使回滚耗时比预期长,也 **_不要_** 停止回滚。如果你停止回滚,可能会导致之后的升级中出现数据库错误。
:::
1. 等待片刻,然后在浏览器中打开 Rancher。确认回滚成功并且你的数据已恢复。
**结果**:Rancher 回滚到升级前的版本和数据状态。
@@ -0,0 +1,397 @@
---
title: 升级 Docker 安装的 Rancher
weight: 1010
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
本文介绍如何升级通过 Docker 安装的 Rancher Server。
:::caution
**生产环境不支持 Docker 安装**。这些说明仅适用于测试和开发。如果你已经在生产环境中部署了 Docker 安装并且需要升级到新的 Rancher 版本,我们建议你在升级前先[迁移到 Helm Chart 安装](../../../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)。
:::
## 先决条件
- 在 Rancher 文档中**检查[已知升级问题](../../install-upgrade-on-a-kubernetes-cluster/upgrades.md#已知升级问题)**,了解升级 Rancher 时最需要注意的问题。你可以在 [GitHub](https://github.com/rancher/rancher/releases) 发布说明以及 [Rancher 论坛](https://forums.rancher.com/c/announcements/12)中找到每个 Rancher 版本的已知问题。不支持升级或升级到 [rancher-alpha 仓库](../../../../reference-guides/installation-references/helm-chart-options.md#helm-chart-仓库)中的任何 Chart。
- **[仅适用于离线安装](../../../../pages-for-subheaders/air-gapped-helm-cli-install.md):为新的 Rancher Server 版本收集和推送镜像**。按照指南为你想要升级的目标 Rancher 版本[推送镜像到私有镜像仓库](../air-gapped-helm-cli-install/publish-images.md)。
## 占位符
在升级过程中,你将输入一系列命令。请按照你环境的实际情况替换占位符。占位符用尖括号和大写字母(如 `<EXAMPLE>`)表示。
以下是带有占位符的命令**示例**:
```
docker stop <RANCHER_CONTAINER_NAME>
```
在此命令中,`<RANCHER_CONTAINER_NAME>` 是你的 Rancher 容器的名称。
## 获取升级命令的数据
要获取替换占位符的数据,请运行:
```
docker ps
```
在开始升级之前记下或复制此信息。
<sup>终端 <code>docker ps</code> 命令,显示如何找到 <code>&lt;RANCHER_CONTAINER_TAG&gt;</code> 和 <code>&lt;RANCHER_CONTAINER_NAME&gt;</code></sup>
![占位符参考](/img/placeholder-ref.png)
| 占位符 | 示例 | 描述 |
| -------------------------- | -------------------------- | --------------------------------------------------------- |
| `<RANCHER_CONTAINER_TAG>` | `v2.1.3` | 首次安装拉取的 rancher/rancher 镜像。 |
| `<RANCHER_CONTAINER_NAME>` | `festive_mestorf` | 你的 Rancher 容器的名称。 |
| `<RANCHER_VERSION>` | `v2.1.3` | 你为其创建备份的 Rancher 版本。 |
| `<DATE>` | `2018-12-19` | 数据容器或备份的创建日期。 |
<br/>
可以通过远程连接登录到 Rancher Server 所在的主机并输入命令 `docker ps` 以查看正在运行的容器,从而获得 `<RANCHER_CONTAINER_TAG>` 和 `<RANCHER_CONTAINER_NAME>`。你还可以运行 `docker ps -a` 命令查看停止了的容器。在创建备份期间,你随时可以运行这些命令来获得帮助。
## 升级
在升级期间,你可以为当前 Rancher 容器创建数据的副本及备份,以确保可以在升级出现问题时可以进行回滚。然后,你可使用现有数据将新版本的 Rancher 部署到新容器中。
### 1. 创建 Rancher Server 容器的数据副本
1. 使用远程终端连接,登录到运行 Rancher Server 的节点。
1. 停止正在运行 Rancher Server 的容器。将 `<RANCHER_CONTAINER_NAME>` 替换为你的 Rancher 容器的名称:
```
docker stop <RANCHER_CONTAINER_NAME>
```
1. <a id="backup"></a>运行以下命令,从刚才停止的 Rancher 容器创建一个数据容器。请替换命令中的占位符:
```
docker create --volumes-from <RANCHER_CONTAINER_NAME> --name rancher-data rancher/rancher:<RANCHER_CONTAINER_TAG>
```
### 2. 创建备份压缩包
1. <a id="tarball"></a>从你刚刚创建的数据容器(<code>rancher-data</code>)中,创建一个备份 tar 包(<code>rancher-data-backup-&lt;RANCHER_VERSION&gt;-&lt;DATE&gt;.tar.gz</code>)。
如果升级期间出现问题,此压缩包可以用作回滚点。替换占位符来运行以下命令。
```
docker run --volumes-from rancher-data -v "$PWD:/backup" --rm busybox tar zcvf /backup/rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz /var/lib/rancher
```
**步骤结果**:你输入此命令时,会运行一系列命令。
1. 输入 `ls` 命令,确认备份压缩包已创建成功。压缩包的名称格式类似 `rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz`。
```
[rancher@ip-10-0-0-50 ~]$ ls
rancher-data-backup-v2.1.3-20181219.tar.gz
```
1. 将备份压缩包移动到 Rancher Server 外的安全位置。
### 3. 拉取新的 Docker 镜像
拉取你需要升级到的 Rancher 版本镜像。
| 占位符 | 描述 |
------------|-------------
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
```
docker pull rancher/rancher:<RANCHER_VERSION_TAG>
```
### 4. 启动新的 Rancher Server 容器
使用 `rancher-data` 容器中的数据启动一个新的 Rancher Server 容器。记住要传入启动原始容器时使用的所有环境变量。
:::danger
启动升级后,即使升级耗时比预期长,也 **_不要_** 停止升级。如果你停止升级,可能会导致之后的升级中出现数据库迁移错误。
:::
如果你使用代理,请参见 [HTTP 代理配置](../../../../reference-guides/single-node-rancher-in-docker/http-proxy-configuration.md)。
如果你配置了自定义 CA 根证书来访问服务,请参见[自定义 CA 根证书](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#自定义-ca-证书)。
如果你要记录所有 Rancher API 的事务,请参见 [API 审计](../../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#api-审计日志)。
如需查看启动新 Rancher Server 容器时使用的命令,从以下的选项中进行选择:
- Docker 升级
- 离线安装的 Docker 升级
<Tabs>
<TabItem value="Docker 升级">
选择你安装 Rancher Server 时用的选项
#### 选项 A:使用 Rancher 默认的自签名证书
<details id="option-a">
<summary>单击展开</summary>
如果你使用 Rancher 生成的自签名证书,则将 `--volumes-from rancher-data` 添加到你启动原始 Rancher Server 容器的命令中。
| 占位符 | 描述 |
------------|-------------
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
```
docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
--privileged \
rancher/rancher:<RANCHER_VERSION_TAG>
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
</details>
#### 选项 B:使用你自己的证书 - 自签名
<details id="option-b">
<summary>单击展开</summary>
如果你选择使用自己的自签名证书,则在启动原始 Rancher Server 容器的命令中添加 `--volumes-from rancher-data`。此外,你需要能够访问你原始安装时使用的证书。
:::note 证书要求提示:
证书文件的格式必须是 PEM。在你的证书文件中,包括链中的所有中间证书。你需要对你的证书进行排序,把你的证书放在最前面,后面跟着中间证书。
:::
| 占位符 | 描述 |
------------|-------------
| `<CERT_DIRECTORY>` | 包含证书文件的目录的路径。 |
| `<FULL_CHAIN.pem>` | 完整证书链的路径。 |
| `<PRIVATE_KEY.pem>` | 证书私钥的路径。 |
| `<CA_CERTS.pem>` | CA 证书的路径。 |
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
```
docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
-v /<CERT_DIRECTORY>/<CA_CERTS.pem>:/etc/rancher/ssl/cacerts.pem \
--privileged \
rancher/rancher:<RANCHER_VERSION_TAG>
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
</details>
#### 选项 C:使用你自己的证书 - 可信 CA 签名的证书
<details id="option-c">
<summary>单击展开</summary>
如果你选择使用可信 CA 签名的证书,则在启动原始 Rancher Server 容器的命令中添加 `--volumes-from rancher-data`。此外,你需要能够访问你原始安装时使用的证书。注意要使用 `--no-cacerts` 作为容器的参数,以禁用 Rancher 生成的默认 CA 证书。
:::note 证书要求提示:
证书文件的格式必须是 PEM。在你的证书文件中,包括可信 CA 提供的所有中间证书。你需要对你的证书进行排序,把你的证书放在最前面,后面跟着中间证书。如需查看示例,请参见[证书故障排除](certificate-troubleshooting.md)。
:::
| 占位符 | 描述 |
------------|-------------
| `<CERT_DIRECTORY>` | 包含证书文件的目录的路径。 |
| `<FULL_CHAIN.pem>` | 完整证书链的路径。 |
| `<PRIVATE_KEY.pem>` | 证书私钥的路径。 |
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
```
docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
--privileged \
rancher/rancher:<RANCHER_VERSION_TAG> \
--no-cacerts
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
</details>
#### 选项 D:Let's Encrypt 证书
<details id="option-d">
<summary>单击展开</summary>
:::caution
Let's Encrypt 对新证书请求有频率限制。因此,请限制创建或销毁容器的频率。详情请参见 [Let's Encrypt 官方文档 - 频率限制](https://letsencrypt.org/docs/rate-limits/)。
:::
如果你选择使用 [Let's Encrypt](https://letsencrypt.org/) 证书,则在启动原始 Rancher Server 容器的命令中添加 `--volumes-from rancher-data`,并且提供最初安装 Rancher 时使用的域名。
:::note 证书要求提示:
- 在 DNS 中创建一条记录,将 Linux 主机 IP 地址绑定到要用于访问 Rancher 的主机名(例如,`rancher.mydomain.com`)。
- 在 Linux 主机上打开 `TCP/80` 端口。Let's Encrypt 的 HTTP-01 质询可以来自任何源 IP 地址,因此端口 `TCP/80` 必须开放开所有 IP 地址。
:::
| 占位符 | 描述 |
------------|-------------
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
| `<YOUR.DNS.NAME>` | 你最初使用的域名 |
```
docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
--privileged \
rancher/rancher:<RANCHER_VERSION_TAG> \
--acme-domain <YOUR.DNS.NAME>
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
</details>
</TabItem>
<TabItem value="Docker 离线升级">
出于安全考虑,使用 Rancher 时请使用 SSL(Secure Sockets Layer)。SSL 保护所有 Rancher 网络通信(如登录和与集群交互)的安全。
启动新的 Rancher Server 容器时,从以下的选项中进行选择:
#### 选项 A:使用 Rancher 默认的自签名证书
<details id="option-a">
<summary>单击展开</summary>
如果你使用 Rancher 生成的自签名证书,则将 `--volumes-from rancher-data` 添加到你启动原始 Rancher Server 容器的命令中。
| 占位符 | 描述 |
------------|-------------
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 私有镜像仓库的 URL 和端口。 |
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
```
docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
-e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
--privileged \
<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:<RANCHER_VERSION_TAG>
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
</details>
#### 选项 B:使用你自己的证书 - 自签名
<details id="option-b">
<summary>单击展开</summary>
如果你选择使用自己的自签名证书,则在启动原始 Rancher Server 容器的命令中添加 `--volumes-from rancher-data`。此外,你需要能够访问你原始安装时使用的证书。
:::note 证书要求提示:
证书文件的格式必须是 PEM。在你的证书文件中,包括链中的所有中间证书。你需要对你的证书进行排序,把你的证书放在最前面,后面跟着中间证书。如需查看示例,请参见[证书故障排除](certificate-troubleshooting.md)。
:::
| 占位符 | 描述 |
------------|-------------
| `<CERT_DIRECTORY>` | 包含证书文件的目录的路径。 |
| `<FULL_CHAIN.pem>` | 完整证书链的路径。 |
| `<PRIVATE_KEY.pem>` | 证书私钥的路径。 |
| `<CA_CERTS.pem>` | CA 证书的路径。 |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 私有镜像仓库的 URL 和端口。 |
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
```
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
-v /<CERT_DIRECTORY>/<CA_CERTS.pem>:/etc/rancher/ssl/cacerts.pem \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
-e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
--privileged \
<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:<RANCHER_VERSION_TAG>
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
</details>
#### 选项 C:使用你自己的证书 - 可信 CA 签名的证书
<details id="option-c">
<summary>单击展开</summary>
如果你选择使用可信 CA 签名的证书,则在启动原始 Rancher Server 容器的命令中添加 `--volumes-from rancher-data`。此外,你需要能够访问你原始安装时使用的证书。
:::note 证书要求提示:
证书文件的格式必须是 PEM。在你的证书文件中,包括可信 CA 提供的所有中间证书。你需要对你的证书进行排序,把你的证书放在最前面,后面跟着中间证书。如需查看示例,请参见[证书故障排除](certificate-troubleshooting.md)。
:::
| 占位符 | 描述 |
------------|-------------
| `<CERT_DIRECTORY>` | 包含证书文件的目录的路径。 |
| `<FULL_CHAIN.pem>` | 完整证书链的路径。 |
| `<PRIVATE_KEY.pem>` | 证书私钥的路径。 |
| `<REGISTRY.YOURDOMAIN.COM:PORT>` | 私有镜像仓库的 URL 和端口。 |
| `<RANCHER_VERSION_TAG>` | 你想要升级到的 [Rancher 版本](../../../../reference-guides/installation-references/helm-chart-options.md)的版本标签。 |
:::note
使用 `--no-cacerts` 作为容器的参数,以禁用 Rancher 生成的默认 CA 证书。
:::
```
docker run -d --volumes-from rancher-data \
--restart=unless-stopped \
-p 80:80 -p 443:443 \
--no-cacerts \
-v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 设置在 Rancher 中使用的默认私有镜像仓库
-e CATTLE_SYSTEM_CATALOG=bundled \ # 使用打包的 Rancher System Chart
--privileged
<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:<RANCHER_VERSION_TAG>
```
特权访问是[必须](../../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md#rancher-特权访问)的。
</details>
</TabItem>
</Tabs>
**结果**:你已升级 Rancher。已升级 Server 中的数据将保存在 `rancher-data` 容器中,用于将来的升级。
### 5. 验证升级
登录到 Rancher。通过检查浏览器左下角的版本号,确认升级是否成功。
:::note 升级后下游集群出现网络问题?
请参见[恢复集群网络](../../../../../versioned_docs/version-2.0-2.4/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster/upgrades/namespace-migration.md)。
:::
### 6. 清理旧的 Rancher Server 容器
移除旧的 Rancher Server 容器。如果你仅停止了旧的 Rancher Server 容器,但没有移除它,该容器还可能在服务器下次重启后重新启动。
## 回滚
如果升级没有成功完成,你可以将 Rancher Server 及其数据回滚到上次的健康状态。详情请参见 [Docker 回滚](roll-back-docker-installed-rancher.md)。
@@ -0,0 +1,46 @@
---
title: 添加 TLS 密文
weight: 2
---
我们使用证书和密钥将 `cattle-system` 命名空间中的 `tls-rancher-ingress` 密文配置好后,Kubernetes 会为 Rancher 创建对象和服务。
将服务器证书和所需的所有中间证书合并到名为 `tls.crt`的文件中。将证书密钥复制到名为 `tls.key` 的文件中。
例如,[acme.sh](https://acme.sh) 在 `fullchain.cer` 文件中提供服务器证书和 CA 链。
请将 `fullchain.cer` 命名为 `tls.crt`,将证书密钥文件命名为 `tls.key`。
使用 `kubectl` 创建 `tls` 类型的密文。
```
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key
```
:::note
如需替换证书,你可以运行 `kubectl -n cattle-system delete secret tls-rancher-ingress` 来删除 `tls-rancher-ingress` 密文,然后运行上方命令来添加新的密文。如果你使用的是私有 CA 签名证书,仅当新证书与当前证书是由同一个 CA 签发的,才可以替换。
:::
# 使用私有 CA 签名证书
如果你使用的是私有 CA,Rancher 需要你提供 CA 证书的副本,用来校验 Rancher Agent 与 Server 的连接。
将 CA 证书拷贝到名为 `cacerts.pem` 的文件中,然后使用 `kubectl` 在 `cattle-system` 命名空间中创建 `tls-ca` 密文。
```
kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem=./cacerts.pem
```
:::note
Rancher 启动时会检索配置的 `tls-ca` 密文。如果 Rancher 在运行中,更新的 CA 会在新的 Rancher Pod 启动后生效。
:::
# 更新私有 CA 证书
按照[步骤](update-rancher-certificate.md)更新 [Rancher 高可用 Kubernetes 安装](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)中的 Ingress,或从默认自签名证书切换到自定义证书。
@@ -0,0 +1,28 @@
---
title: 引导密码
weight: 800
---
Rancher 首次启动时,会为第一个管理员用户随机生成一个密码。当管理员首次登录 Rancher 时,用于获取引导密码(Bootstrap)的命令会在 UI 上显示。管理员需要运行命令并使用引导密码登录。然后 Rancher 会让管理员重置密码。
如果你在安装过程中没有使用变量来设置引导密码,则会随机生成引导密码。如需了解使用变量设置引导密码的详情,请参见下文。
### 在 Helm 安装中指定引导密码
Helm 安装的情况下,你可以使用 `.Values.bootstrapPassword` 在 Helm Chart 值中指定引导密码变量。
密码将存储在 Kubernetes 密文中。安装 Rancher 后,如何使用 kubectl 获取密码的说明将会在 UI 中显示:
```
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{ .data.bootstrapPassword|base64decode}}{{ "\n" }}'
```
### 在 Docker 安装中指定引导密码
如果 Rancher 是使用 Docker 安装的,你可以通过在 Docker 安装命令中传递 `-e CATTLE_BOOTSTRAP_PASSWORD=password` 来指定引导密码。
密码将存储在 Docker 容器日志中。安装 Rancher 后,如何使用 Docker 容器 ID 获取密码的说明将会在 UI 中显示:
```
docker logs container-id 2>&1 | grep "Bootstrap Password:"
```
@@ -0,0 +1,122 @@
---
title: 选择 Rancher 版本
weight: 1
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
本节介绍如何选择 Rancher 版本。
在我们推荐用于生产环境的 Rancher 高可用安装中,Rancher Server 是通过 Kubernetes 集群上的 **Helm Chart** 安装的。请参见 [Helm 版本要求](helm-version-requirements.md)选择 Helm 版本来安装 Rancher。
如果你在开发和测试中使用 Docker 来安装 Rancher,你需要把 Rancher 作为一个 **Docker 镜像**来安装。
<Tabs>
<TabItem value="Helm Charts">
如果 Rancher Server 是[安装在 Kubernetes 集群上](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)的,Rancher Server 的安装,升级和回滚中,都是使用 Kubernetes 集群上的 Helm Chart 来安装 Rancher 的。因此,在准备安装或升级 Rancher 高可用时,必须添加包含用于安装 Rancher 的 Chart 的 Helm Chart 仓库。
请参见 [Helm 版本要求](helm-version-requirements.md)选择 Helm 版本来安装 Rancher。
### Helm Chart 仓库
Rancher 提供几个可选的 Helm Chart 仓库供你选择。最新版或稳定版的 Helm Chart 仓库与用于 Docker 安装中的 Docker 标签对应。因此,`rancher-latest` 仓库包含所有标记为 `rancher/rancher:latest` 的 Rancher 版本 Chart。当 Rancher 版本升级到 `rancher/rancher:stable`,它会被添加到 `rancher-stable` 仓库中。
| 类型 | 添加仓库的命令 | 仓库描述 |
| -------------- | ------------ | ----------------- |
| rancher-latest | `helm repo add rancher-latest https://releases.rancher.com/server-charts/latest` | 添加最新版本的 Rancher 的 Helm Chart 仓库。建议使用此仓库来测试新版本的 Rancher。 |
| rancher-stable | `helm repo add rancher-stable https://releases.rancher.com/server-charts/stable` | 添加较旧的,稳定的版本的 Rancher 的 Helm Chart 仓库。建议在生产环境中使用此仓库。 |
| rancher-alpha | `helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha` | 添加 alpha 版本的 Rancher 的 Helm Chart 仓库,以预览即将发布的版本。不建议在生产环境中使用这些版本。无论是什么仓库,均不支持 _升级_ 或 _升级到_ rancher-alpha 仓库中的任何 Chart。 |
了解何时选择这些仓库,请参见[切换到不同 Helm Chart 仓库](#切换到不同-helm-chart-仓库)。
:::note
`rancher-stable` 仓库中的所有 Chart 都与 `stable` 标记的 Rancher 版本对应。
:::
### Helm Chart 版本
Rancher Helm Chart 版本与 Rancher 版本(即 `appVersion`)对应。添加仓库后,你可以运行以下命令搜索可用版本:<br/>
&nbsp;&nbsp;&nbsp;&nbsp;`helm search repo --versions`
如果你有多个仓库,你可指定仓库名称,即:`helm search repo rancher-stable/rancher --versions` <br/>
详情请访问 https://helm.sh/docs/helm/helm_search_repo/
要获取所选仓库的指定版本,参见如下示例指定 `--version` 参数:<br/>
&nbsp;&nbsp;&nbsp;&nbsp;`helm fetch rancher-stable/rancher --version=2.4.8`
### 切换到不同 Helm Chart 仓库
安装 Rancher 后,如果想修改安装 Rancher 的 Helm Chart 仓库,按照以下步骤操作。
:::note
由于 rancher-alpha 仓库只包含 alpha 版本 Chart,因此不支持从 rancher alpha 仓库切换到 rancher-stable 或 rancher-latest 仓库以进行升级。
:::
- Latest:建议用于试用最新功能
```
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
```
- Stable:建议用于生产环境
```
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
```
- Alpha:即将发布的实验性预览。
```
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
```
注意:不支持升级到 Alpha 版、从 Alpha 版升级或在 Alpha 版之间升级。
1. 列出当前 Helm Chart 仓库。
```plain
helm repo list
NAME URL
stable https://charts.helm.sh/stable
rancher-<CHART_REPO> https://releases.rancher.com/server-charts/<CHART_REPO>
```
2. 删除包含安装 Rancher 时用的 Chart 的 Helm Chart 仓库。是 `rancher-stable` 或 `rancher-latest` 取决于你初始安装时的选择。
```plain
helm repo remove rancher-<CHART_REPO>
```
3. 添加你要用于安装 Rancher 的 Helm Chart 仓库。
```plain
helm repo add rancher-<CHART_REPO> https://releases.rancher.com/server-charts/<CHART_REPO>
```
4. 按照以下步骤,从新的 Helm Chart 仓库[升级 Rancher](../install-upgrade-on-a-kubernetes-cluster/upgrades.md)。
</TabItem>
<TabItem value="Docker 镜像">
在执行 [Docker 安装](../../../pages-for-subheaders/rancher-on-a-single-node-with-docker.md)、升级或回滚时,你可以使用 _tags_ 来安装特定版本的 Rancher。
### Server 标签
Rancher Server 以 Docker 镜像的形式分发并附有标签。你可以在输入命令部署 Rancher 时指定标签。请记住,如果你指定了标签,但是没有指定版本(如 `latest` 或 `stable`),你必须显式拉取该镜像标签的新版本。否则,将使用缓存在主机上的镜像。
| 标签 | 描述 |
| -------------------------- | ------ |
| `rancher/rancher:latest` | 最新的开发版本。这些版本通过了我们的 CI 自动化验证。不推荐在生产环境使用这些版本。 |
| `rancher/rancher:stable` | 最新的稳定版本。推荐将此标签用于生产环境。 |
| `rancher/rancher:<v2.X.X>` | 你可以使用以前版本中的标签来指定要安装的 Rancher 版本。访问 DockerHub 查看可用的版本。 |
:::note
- `master` 和带有 `-rc` 或其他后缀的标签是供 Rancher 测试团队验证用的。这些标签不受官方支持,因此请不要使用这些标签。
- 安装 alpha 版本进行预览:使用我们的[公告页面](https://forums.rancher.com/c/announcements)中列出的 alpha 标签(例如,`v2.2.0-alpha1`)进行安装。不支持升级或升级到 Alpha 版本。
:::
</TabItem>
</Tabs>
@@ -0,0 +1,25 @@
---
title: 自定义 CA 根证书
weight: 1
---
如果你在内部生产环境使用 Rancher,且不打算公开暴露应用,你可以使用使用私有 CA 颁发的证书。
Rancher 可能会访问配置了自定义/内部 CA 根证书(也称为自签名证书)的服务。如果 Rancher 无法验证服务的证书,则会显示错误信息 `x509: certificate signed by unknown authority`。
如需验证证书,你需要把 CA 根证书添加到 Rancher。由于 Rancher 是用 Go 编写的,我们可以使用环境变量 `SSL_CERT_DIR` 指向容器中 CA 根证书所在的目录。启动 Rancher 容器时,可以使用 Docker 卷选项(`-v host-source-directory:container-destination-directory`)来挂载 CA 根证书目录。
Rancher 可以访问的服务示例:
- 应用商店
- 验证提供程序
- 使用 Node Driver 访问托管/云 API
## 使用自定义 CA 证书安装
有关启动挂载了私有 CA 证书的 Rancher 容器的详情,请参见安装文档:
- [Docker 安装的自定义 CA 证书选项](../../../reference-guides/single-node-rancher-in-docker/advanced-options.md#自定义-ca-证书)
- [Kubernetes 安装的其他受信 CA 选项](../../../reference-guides/installation-references/helm-chart-options.md#额外的授信-ca)
@@ -0,0 +1,13 @@
---
title: Helm 版本要求
weight: 3
---
本文介绍 Helm 的要求。Helm 是用于把 Rancher 安装在高可用 Kubernetes 集群上的工具。
> 我们已针对 Helm 3 更新了安装指南。如果你使用 Helm 2 进行安装,请参见 [Helm 2 迁移到 Helm 3 文档](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/)。[本文](../../../../versioned_docs/version-2.0-2.4/pages-for-subheaders/helm2.md)提供了较早的使用 Helm 2 的 Rancher 高可用安装指南的副本。如果你如果无法升级到 Helm 3,可以使用这个说明安装。
- 如需安装或升级 Rancher 2.5,请使用 Helm 3.2.x 或更高版本。
- Kubernetes 1.16 要求 Helm 2.16.0 或更高版本。如果使用的是默认 Kubernetes 版本,请参见[发行说明](https://github.com/rancher/rke/releases)获取所使用的 RKE 版本。
- 请不要使用 Helm 2.15.0,因为这个版本有转换/比较数字的问题。
- 请不要使用 Helm 2.12.0,因为该版本有 `cert-manager` 的兼容问题。
@@ -0,0 +1,15 @@
---
title: 离线安装中设置本地 System Charts
weight: 120
---
[System Charts](https://github.com/rancher/system-charts) 仓库包含 Monitoring、Logging、告警和全局 DNS 等功能所需的所有应用项。
在 Rancher 的离线安装中,你需要配置 Rancher 以使用 System Charts 的本地副本。本节介绍如何通过 CLI 标志使用本地 System Charts。
# 使用本地 System Charts
`system-charts` 的一个本地副本已经打包到 `rancher/rancher` 容器中。为了在离线安装中使用这些功能,你需要使用额外的环境变量 `CATTLE_SYSTEM_CATALOG=bundled` 来运行 Rancher 安装命令,该环境变量告诉 Rancher 使用 Chart 的本地副本,而不是尝试从 GitHub 获取 Chart。
带有 `system-charts` 的 Rancher 安装命令示例包含在 Docker 和 Helm 的[离线安装说明](../../../pages-for-subheaders/air-gapped-helm-cli-install.md)中。
@@ -0,0 +1,264 @@
---
title: 更新 Rancher 证书
weight: 10
---
# 更新私有 CA 证书
本文介绍如何更新 Rancher [高可用 Kubernetes 安装](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md) 中 Ingress 的 SSL 证书,以及如何从默认的自签名证书切换到自定义证书。
步骤概述:
1. 使用新证书和私钥创建或更新 `tls-rancher-ingress` Kubernetes 密文资源。
2. 使用根 CA 证书创建或更新 `tls-ca` Kubernetes 密文资源(仅在使用私有 CA 时需要)。
3. 使用 Helm CLI 更新 Rancher 安装。
4. 重新配置 Rancher Agent 以信任新的 CA 证书。
5. 选择 Fleet 集群的强制更新,来将 fleet-agent 连接到 Rancher。
各个步骤的详细说明如下。
## 1. 创建/更新证书密文资源
首先,将服务器证书和所有中间证书合并到名为 `tls.crt` 的文件,并在名为 `tls.key` 的文件中提供相应的证书密钥。
如果你想切换 Rancher 自签名证书或 Let's Encrypt 证书,请运行以下命令,在 Rancher 高可用集群中创建 `tls-rancher-ingress` 密文资源:
```
$ kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key
```
你也可以运行以下命令,更新现有的证书密文:
```
$ kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key \
--dry-run --save-config -o yaml | kubectl apply -f -
```
## 2. 创建/更新证书 CA 密文资源
如果新证书由私有 CA 签发的,你需要将相应的根 CA 证书复制到名为 `cacerts.pem` 的文件中,并创建或更新 `cattle-system` 命名空间中的 `tls-ca` 密文。如果证书由中间 CA 签名,则 `cacerts.pem` 必须按顺序同时包含中间 CA 证书和根 CA 证书。
创建初始密文:
```
$ kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem
```
要更新现有的 `tls-ca` 密文:
```
$ kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem \
--dry-run --save-config -o yaml | kubectl apply -f -
```
## 3. 重新配置 Rancher 部署
:::note
在继续之前,在 Rancher UI (<b>用户 > API & 密钥 </b>) 中生成一个 API Token,并保存持有者 Token(你在步骤 4 中可能需要)。
:::
只有在最初安装 Rancher 时使用了自签名证书 (`ingress.tls.source=rancher`)或 Let's Encrypt 证书(`ingress.tls.source=letsEncrypt`)时,你才需要执行此步骤。
这一步骤确保 Rancher Pod 和 Ingress 资源能够重新配置,来使用新的服务器和可选的 CA 证书。
要更新 Helm 部署,请使用初始安装时的选项(`--set`)。运行以下命令检查:
```
$ helm get values rancher -n cattle-system
```
获取当前部署的 Rancher Chart 的版本字符串:
```
$ helm ls -A
```
使用初始配置的值升级 Helm 应用实例,并指定 `ingress.tls.source=secret` 以及当前的 Chart 版本来防止应用升级。
如果证书是由私有 CA 签发的,你需要添加 `set privateCA=true` 参数。请确保你已经阅读了使用自定义证书进行初始安装的文档。
```
helm upgrade rancher rancher-stable/rancher \
--namespace cattle-system \
--version <DEPLOYED_CHART_VERSION> \
--set hostname=rancher.my.org \
--set ingress.tls.source=secret \
--set ...
```
升级完成后,访问 `https://<Rancher_SERVER>/v3/settings/cacerts`,验证该值是否与先前写入 `tls-ca` 密文中的 CA 证书匹配。
## 4. 重新配置 Rancher Agent 以信任私有 CA
本节介绍了重新配置 Rancher Agent 以信任私有 CA 的三种方法。如果你的实际情况符合以下任意一个条件,请执行此步骤:
- Rancher 初始配置中使用了 Rancher 自签名证书 (`ingress.tls.source=rancher`) 或 Let's Encrypt 证书 (`ingress.tls.source=letsEncrypt`)。
- 新自定义证书的根 CA 证书已更改。
### 为什么要执行这一步骤?
如果 Rancher 配置了私有 CA 签名的证书时,CA 证书链会下载到 Rancher Agent 容器中。代理会对下载证书的校验和及 `CATTLE_CA_CHECKSUM` 环境变量进行比较。如果私有 CA 证书在 Rancher Server 端更改了,环境变量 `CATTLE_CA_CHECKSUM` 必须相应进行更新。
### 可使用的方法
- 方法 1(最简单的方法):
在轮换证书后将所有集群连接到 Rancher。适用于更新 Rancher 部署(步骤 3)后立即执行的情况。
- 方法 2:适用于集群失去了与 Rancher 的连接,但是你已启动了[授权集群端点(ACE)](https://rancher.com/docs/rancher/v2.6/en/cluster-admin/cluster-access/ace/)的情况。
- 方法 3:方法 1 和方法 2 不可用的情况下可使用。
### 方法 1:Kubectl 命令
对于**集群管理**中的每个集群(除去 `local` Rancher 管理集群),使用 Rancher 管理集群(RKE 或 K3S)的 `Kubeconfig` 文件运行以下命令:
```
kubectl patch clusters.management.cattle.io <REPLACE_WITH_CLUSTERID> -p '{"status":{"agentImage":"dummy"}}' --type merge
```
这个命令能使所有 Agent Kubernetes 资源使用新证书的校验和重新配置。
### 方法 2:手动更新校验和
通过将 `CATTLE_CA_CHECKSUM` 环境变量更新为匹配新 CA 证书校验和的值,来手动为 Agent Kubernetes 资源打上补丁。通过以下操作生成新的校验和:
```
$ curl -k -s -fL <RANCHER_SERVER>/v3/settings/cacerts | jq -r .value > cacert.tmp
$ sha256sum cacert.tmp | awk '{print $1}'
```
为每个下游集群使用 Kubeconfig 更新两个 Agent 部署的环境变量:
```
$ kubectl edit -n cattle-system ds/cattle-node-agent
$ kubectl edit -n cattle-system deployment/cattle-cluster-agent
```
### 方法 3:重新创建 Rancher Agent
你可以在每个下游集群的 controlplane 节点上运行一组命令,来重新创建 Rancher Agent。
首先,生成 Agent 定义(参见[此处](https://gist.github.com/superseb/076f20146e012f1d4e289f5bd1bd4971))。
然后,SSH 连接到下游集群的 controlplane 节点,创建 Kubeconfig 并应用定义(参见[此处](
https://gist.github.com/superseb/b14ed3b5535f621ad3d2aa6a4cd6443b))。
## 5. 选择 Fleet 集群的强制更新,来将 fleet-agent 连接到 Rancher
在 Rancher UI 的[持续交付](../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md#在-rancher-ui-中访问-fleet)中,为集群选择“强制更新”,来允许下游集群中的 fleet-agent 成功连接到 Rancher。
### 为什么要执行这一步骤?
Rancher 管理的集群中的 Fleet agent 存储 kubeconfig,该配置用于连接到 Fleet 系统命名空间的 fleet-agent 密文中的 Rancher 代理 kube-api。kubeconfig 包括一个包含 Rancher CA 的证书授权数据块。更改 Rancher CA 时,需要更新此块来使 fleet-agent 成功连接到 Rancher。
# 将私有 CA 证书更改为通用证书
:::note
你可以执行与上文描述相反的操作,即将私有证书更改为通用或非私有证书。所涉及的步骤概述如下。
:::
## 1. 创建/更新证书密文资源
首先,将服务器证书和所有中间证书合并到名为 `tls.crt` 的文件,并在名为 `tls.key` 的文件中提供相应的证书密钥。
如果你想切换 Rancher 自签名证书或 Let's Encrypt 证书,请运行以下命令,在 Rancher 高可用集群中创建 `tls-rancher-ingress` 密文资源:
```
$ kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key
```
你也可以运行以下命令,更新现有的证书密文:
```
$ kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key \
--dry-run --save-config -o yaml | kubectl apply -f -
```
## 2. 删除 CA 证书密文资源
你需要删除 `cattle-system` 命名空间中的 `tls-ca secret`(不再需要它)。如果需要,你还可以选择保存 `tls-ca secret` 的副本。
要保存现有密文:
```
kubectl -n cattle-system get secret tls-ca -o yaml > tls-ca.yaml
```
要删除现有的 `tls-ca` 密文:
```
kubectl -n cattle-system delete secret tls-ca
```
## 3. 重新配置 Rancher 部署
:::note 重要提示:
在继续之前,先[在 Rancher UI 中生成 API 令牌](../../../reference-guides/user-settings/api-keys.md#创建-api-密钥)(在 <b>User > API & Keys</b> 中)。
:::
只有在最初安装 Rancher 时使用了自签名证书 (`ingress.tls.source=rancher`)或 Let's Encrypt 证书(`ingress.tls.source=letsEncrypt`)时,你才需要执行此步骤。
这一步骤确保 Rancher Pod 和 Ingress 资源能够重新配置,来使用新的服务器和可选的 CA 证书。
要更新 Helm 部署,请使用初始安装时的选项(`--set`)。运行以下命令检查:
```
$ helm get values rancher -n cattle-system
```
获取当前部署的 Rancher Chart 的版本字符串:
```
$ helm ls -A
```
使用初始配置的值升级 Helm 应用程序实例,并指定当前的 Chart 版本以防止应用程序升级。
请确保你已经阅读了使用自定义证书进行初始安装的文档。
```
helm upgrade rancher rancher-stable/rancher \
--namespace cattle-system \
--version <DEPLOYED_CHART_VERSION> \
--set hostname=rancher.my.org \
--set ...
```
升级时,你可以执行以下其中一个操作:
- 从 Helm 升级命令中删除 `--set ingress.tls.source=secret \`,如上所示。
- 删除 `privateCA` 参数或将其设置为 `false` (因为 CA 有效):
```
set privateCA=false
```
## 4. 为非私有/通用证书重新配置 Rancher Agent
下游集群 Agent 上的 `CATTLE_CA_CHECKSUM` 环境变量应该被删除或设置为“”(一个空字符串)。
## 5. 选择 Fleet 集群的强制更新,来将 fleet-agent 连接到 Rancher
在 Rancher UI 的[持续交付](../../../how-to-guides/new-user-guides/deploy-apps-across-clusters/fleet.md#在-rancher-ui-中访问-fleet)中,为集群选择“强制更新”,来允许下游集群中的 fleet-agent 成功连接到 Rancher。
### 为什么要执行这一步骤?
Rancher 管理的集群中的 Fleet agent 存储 kubeconfig,该配置用于连接到 Fleet 系统命名空间的 fleet-agent 密文中的 Rancher 代理 kube-api。kubeconfig 包括一个包含 Rancher CA 的证书授权数据块。更改 Rancher CA 时,需要更新此块来使 fleet-agent 成功连接到 Rancher。
@@ -0,0 +1,283 @@
---
title: 升级 Cert-Manager
weight: 4
---
Rancher 使用 cert-manager 为 Rancher 高可用部署自动生成和续期 TLS 证书。从 2019 秋季开始,cert-manager 发生了以下的三个重要变更。如果你在此时间段前创建了 Rancher 高可用部署,请进行相关操作。
1. [从 2019 年 11 月 1 日开始,Let's Encrypt 已阻止低于 0.8.0 的 cert-manager 实例。](https://community.letsencrypt.org/t/blocking-old-cert-manager-versions/98753)
1. [Cert-manager 正在弃用和替换 certificate.spec.acme.solvers 字段](https://cert-manager.io/docs/installation/upgrading/upgrading-0.7-0.8/)。此更改暂时没有确切的截止日期。
1. [Cert-manager 正在弃用 `v1alpha1` API 和替换它的 API 组](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/)。
为了帮助你应对这些变化,本文将:
1. 提供升级 cert-manager 步骤的文档。
1. 阐述 cert-manager API 的变更,并提供 cert-manager 官方文档的链接,助你实现数据迁移。
:::note 重要提示:
如果你要将 cert-manager 从早于 1.5 的版本升级到最新版本,请按照以下[选项 C](#选项-c:升级-1.5-及以下版本的-cert-manager) 中的步骤进行操作。请注意,你无需重新安装 Rancher 即可执行此升级。
:::
# 升级 Cert-Manager
以下说明中使用的命名空间是由当前安装了 cert-manager 的命名空间决定的。如果它在 kube-system 中,在以下说明步骤中使用。你可以运行 `kubectl get pods --all-namespaces` 来验证,并检查 cert-manager-\* pods 列在哪个命名空间中。不要更改运行 cert-manager 的命名空间,否则可能会出现错误。
要升级 cert-manager,请遵循步骤操作。
### 选项 A:联网升级 cert-manager
<details id="normal">
<summary>单击展开</summary>
1. [备份现有资源](https://cert-manager.io/docs/tutorials/backup/):
```plain
kubectl get -o yaml --all-namespaces \
issuer,clusterissuer,certificates,certificaterequests > cert-manager-backup.yaml
```
:::note 重要提示:
如果你从低于 0.11.0 的版本升级,请将所有备份资源上的 apiVersion 从 `certmanager.k8s.io/v1alpha1` 升级到 `cert-manager.io/v1alpha2`。如果你需要在其他资源上使用 cert-manager 注释,请对其进行更新以反映新的 API 组。详情请参见[附加注释变更](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/#additional-annotation-changes)。
:::
1. [卸载现有部署](https://cert-manager.io/docs/installation/uninstall/kubernetes/#uninstalling-with-helm):
```plain
helm uninstall cert-manager
```
使用你安装的 vX.Y.Z 版本的链接删除 CustomResourceDefinition:
```plain
kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/vX.Y.Z/cert-manager.crds.yaml
```
1. 单独安装 CustomResourceDefinition 资源:
```plain
kubectl apply --validate=false -f https://github.com/cert-manager/cert-manager/releases/download/vX.Y.Z/cert-manager.crds.yaml
```
:::note
如果你运行的 Kubernetes 版本是 1.15 或更低版本,你需要在以上的 `kubectl apply` 命令中添加 `--validate=false`。否则你将看到 cert-manager CRD 资源中的 `x-kubernetes-preserve-unknown-fields` 字段校验错误提示。这是 kubectl 执行资源校验方式产生的良性错误。
:::
1. 根据需要为 cert-manager 创建命名空间:
```plain
kubectl create namespace cert-manager
```
1. 添加 Jetstack Helm 仓库:
```plain
helm repo add jetstack https://charts.jetstack.io
```
1. 更新 Helm Chart 仓库本地缓存:
```plain
helm repo update
```
1. 安装新版本的 cert-manager:
```plain
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v0.12.0
```
1. [恢复备份资源](https://cert-manager.io/docs/tutorials/backup/#restoring-resources):
```plain
kubectl apply -f cert-manager-backup.yaml
```
</details>
### 选项 B:在离线环境中升级 Cert-Manager
<details id="airgap">
<summary>单击展开</summary>
### 先决条件
在执行升级之前,先将所需的容器镜像添加到私有镜像仓库中,并下载/渲染所需的 Kubernetes manifest 文件来准备离线环境。
1. 参见[准备私有镜像仓库](../other-installation-methods/air-gapped-helm-cli-install/publish-images.md)指南,将升级所需的镜像推送到镜像仓库。
1. 在可以连接互联网的系统中,将 cert-manager 仓库添加到 Helm:
```plain
helm repo add jetstack https://charts.jetstack.io
helm repo update
```
1. 从 [Helm Chart 仓库](https://artifacthub.io/packages/helm/cert-manager/cert-manager)中获取最新可用的 cert-manager Chart:
```plain
helm fetch jetstack/cert-manager --version v0.12.0
```
1. 使用安装 Chart 的选项来渲染 cert-manager 模板。记住要设置 `image.repository` 选项,以从你的私有镜像仓库拉取镜像。此操作会创建一个包含 Kubernetes manifest 文件的 `cert-manager` 目录。
Helm 3 命令如下:
```plain
helm template cert-manager ./cert-manager-v0.12.0.tgz --output-dir . \
--namespace cert-manager \
--set image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-controller
--set webhook.image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-webhook
--set cainjector.image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-cainjector
```
Helm 2 命令如下:
```plain
helm template ./cert-manager-v0.12.0.tgz --output-dir . \
--name cert-manager --namespace cert-manager \
--set image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-controller
--set webhook.image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-webhook
--set cainjector.image.repository=<REGISTRY.YOURDOMAIN.COM:PORT>/quay.io/jetstack/cert-manager-cainjector
```
1. 下载新旧版 cert-manager 所需的 CRD 文件:
```plain
curl -L -o cert-manager/cert-manager-crd.yaml https://raw.githubusercontent.com/cert-manager/cert-manager/release-0.12/deploy/manifests/00-crds.yaml
curl -L -o cert-manager/cert-manager-crd-old.yaml https://raw.githubusercontent.com/cert-manager/cert-manager/release-X.Y/deploy/manifests/00-crds.yaml
```
### 安装 cert-manager
1. 备份现有资源:
```plain
kubectl get -o yaml --all-namespaces \
issuer,clusterissuer,certificates,certificaterequests > cert-manager-backup.yaml
```
:::note 重要提示:
如果你从低于 0.11.0 的版本升级,请将所有备份资源上的 apiVersion 从 `certmanager.k8s.io/v1alpha1` 升级到 `cert-manager.io/v1alpha2`。如果你需要在其他资源上使用 cert-manager 注释,请对其进行更新以反映新的 API 组。详情请参见[附加注释变更](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/#additional-annotation-changes)。
:::
1. 删除现有的 cert-manager 安装包:
```plain
kubectl -n cert-manager \
delete deployment,sa,clusterrole,clusterrolebinding \
-l 'app=cert-manager' -l 'chart=cert-manager-v0.5.2'
```
使用你安装的 vX.Y 版本的链接删除 CustomResourceDefinition:
```plain
kubectl delete -f cert-manager/cert-manager-crd-old.yaml
```
1. 单独安装 CustomResourceDefinition 资源:
```plain
kubectl apply -f cert-manager/cert-manager-crd.yaml
```
:::note 重要提示:
如果你运行的 Kubernetes 版本是 1.15 或更低版本,你需要在以上的 `kubectl apply` 命令中添加 `--validate=false`。否则你将看到 cert-manager CRD 资源中的 `x-kubernetes-preserve-unknown-fields` 字段校验错误提示。这是 kubectl 执行资源校验方式产生的良性错误。
:::
1. 为 cert-manager 创建命名空间:
```plain
kubectl create namespace cert-manager
```
1. 安装 cert-manager
```plain
kubectl -n cert-manager apply -R -f ./cert-manager
```
1. [恢复备份资源](https://cert-manager.io/docs/tutorials/backup/#restoring-resources):
```plain
kubectl apply -f cert-manager-backup.yaml
```
</details>
### 选项 C:升级 1.5 及以下版本的 cert-manager
<details id="normal">
<summary>单击展开</summary>
以前,要升级旧版本的 cert-manager,我们建议卸载并重新安装 Rancher。使用以下方法,你可以升级 cert-manager 而无需执行此额外步骤,从而更好地保护你的生产环境:
1. 按照[安装指南](https://cert-manager.io/docs/usage/cmctl/#installation)安装 `cmctl`(cert-manager CLI 工具)。
1. 确保所有以已弃用的 API 版本存储在 etcd 中的 cert-manager 自定义资源都迁移到 v1:
```
cmctl upgrade migrate-api-version
```
有关详细信息,请参阅 [API 版本迁移文档](https://cert-manager.io/docs/usage/cmctl/#migrate-api-version)。另请参阅[将 1.5 升级到 1.6](https://cert-manager.io/docs/installation/upgrading/upgrading-1.5-1.6/) 和[将 1.6 升级到到 1.7](https://cert-manager.io/docs/installation/upgrading/upgrading-1.6-1.7/)。
1. 正常使用 `helm upgrade` 将 cert-manager 升级到 1.7.1。如果需要,你可以直接从版本 1.5 转到 1.7。
1. 按照 Helm 教程[更新发布清单的 API 版本](https://helm.sh/docs/topics/kubernetes_apis/#updating-api-versions-of-a-release-manifest)。Chart 发布名称为 `release_name=rancher`,发布命名空​​间为 `release_namespace=cattle-system`。
1. 在解码后的文件中,搜索 `cert-manager.io/v1beta1` 并将其**替换**为 `cert-manager.io/v1`。
1. 使用 `helm upgrade` 正常升级 Rancher。
</details>
### 验证部署
安装完 cert-manager 后,你可以通过检查 kube-system 命名空间中正在运行的 Pod 来验证它是否已正确部署:
```
kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
```
## Cert-Manager API 变更和数据迁移
---
_v2.6.4 的新功能_
Rancher 现在支持 cert-manager 1.6.2 和 1.7.1。推荐使用 v1.7.x,因为 v 1.6.x 将在 2022 年 3 月 30 日结束生命周期。详情请参见 [cert-manager 文档](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md#4-安装-cert-manager)。有关将 cert-manager 从 1.5 升级到 1.6 的说明,请参见上游的 [cert-manager 文档](https://cert-manager.io/docs/installation/upgrading/upgrading-1.5-1.6/)。有关将 cert-manager 从 1.6 升级到 1.7 的说明,请参见上游的 [cert-manager 文档](https://cert-manager.io/docs/installation/upgrading/upgrading-1.6-1.7/)。
---
Cert-manager 已经弃用 `certificate.spec.acme.solvers` 字段,而且会在未来的版本中放弃对该字段的支持。
根据 cert-manager 文档,v0.8 引入了配置 ACME 证书资源的新格式。具体来说,就是移动了 challenge solver 字段。v0.9 新旧格式均支持。请知悉,之后发布的新 cert-manager 版本会放弃对旧格式的支持。Cert-Manager 文档建议你在更新后,将 ACME 颁发者和证书资源更新到新格式。
如需了解变更细节以及迁移说明,请参见[将 Cert-Manager 从 v0.7 升级到 v0.8](https://cert-manager.io/docs/installation/upgrading/upgrading-0.7-0.8/)。
v0.11 版本标志着删除先前 Cert-Manager 版本中使用的 v1alpha1 API,以及将 API 组从 certmanager.k8s.io 更改到 cert-manager.io。
此外,我们已不再支持 v0.8 版本中已弃用的旧配置格式。换言之,在升级到 v0.11 之前,你必须先为 ACME 发行者使用新的 solver 样式配置格式作为过渡。详情请参见[升级到 v0.8](https://cert-manager.io/docs/installation/upgrading/upgrading-0.7-0.8/)。
如需了解变更细节以及迁移说明,请参见[将 Cert-Manager 从 v0.10 升级到 v0.11](https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/)。
如需获得更多信息,请参见 [Cert-Manager 升级](https://cert-manager.io/docs/installation/upgrading/)。
@@ -0,0 +1,126 @@
---
title: 升级和回滚 Kubernetes
weight: 70
---
升级到最新版本的 Rancher 之后,下游 Kubernetes 集群可以升级为 Rancher 支持的最新的 Kubernetes 版本。
Rancher 使用 RKE(Rancher Kubernetes Engine)来预置和编辑 RKE 集群。有关为 RKE 集群配置升级策略的更多信息,请参阅 [RKE 文档](https://rancher.com/docs/rke/latest/en/)。
## 经过测试的 Kubernetes 版本
Rancher 在发布新版本之前,会对其与 Kubernetes 的最新次要版本进行测试,以确保兼容性。有关各个 Rancher 版本测试了哪些 Kubernetes 版本的详细信息,请参阅[支持维护条款](https://rancher.com/support-maintenance-terms/all-supported-versions/rancher-v2.6.0/)。
## 升级的工作原理
RKE v1.1.0 改变了集群升级的方式。
在 [RKE 文档](https://rancher.com/docs/rke/latest/en/upgrades/how-upgrades-work)中,你将了解编辑或升级 RKE Kubernetes 集群时会发生的情况。
## 升级的最佳实践
在升级集群的 Kubernetes 版本时,我们建议你:
1. 拍一张快照。
1. 启动 Kubernetes 升级。
1. 如果升级失败,请将集群恢复到升级前的 Kubernetes 版本。这可以通过选择**恢复 etcd 和 Kubernetes 版本**选项来实现。在恢复 etcd 快照 之前,这会将你的集群恢复到升级前的 kubernetes 版本。
恢复操作将在不处于健康或 active 状态的集群上运行。
## 升级 Kubernetes 版本
:::note 先决条件:
- 以下选项仅适用于 [Rancher 启动的 RKE Kubernetes 集群](../../pages-for-subheaders/launch-kubernetes-with-rancher.md)和[注册的 K3s Kubernetes 集群](../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/register-existing-clusters.md#注册-k3s-集群的其他功能)。
- 在升级 Kubernetes 之前,先[备份你的集群](../../pages-for-subheaders/backup-restore-and-disaster-recovery.md)。
:::
1. 在左上角,单击 **☰ > 集群管理**。
1. 在**集群**页面中,进入要升级的集群,然后点击 **⋮ > 编辑配置**。
1. 从 **Kubernetes 版本** 下拉列表中,选择要用于集群的 Kubernetes 版本。
1. 单击**保存**。
**结果**:已开始为集群升级 Kubernetes。
## 回滚
你可以将集群恢复到使用先前 Kubernetes 版本的备份。有关详细信息,请参阅:
- [备份集群](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher-launched-kubernetes-clusters.md#快照工作原理)
- [使用备份恢复集群](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/restore-rancher-launched-kubernetes-clusters-from-backup.md#使用快照恢复集群)
## 配置升级策略
从 RKE v1.1.0 开始,我们提供了额外的升级选项,让你更精细地控制升级过程。如果满足[条件和要求](https://rancher.com/docs/rke/latest/en/upgrades/maintaining-availability),你可以使用这些选项,从而在集群升级期间维持应用的可用性。
你可以在 Rancher UI 中配置升级策略,也可以通过编辑 `cluster.yml` 来配置策略。编辑 `cluster.yml` 可以配置更多高级选项。
### 在 Rancher UI 中配置最大不可用的 Worker 节点
你可以在 Rancher UI 中配置不可用 worker 节点的最大数量。在集群升级期间,worker 节点将按此大小批量升级。
默认情况下,不可用 worker 节点的最大数量为所有 worker 节点的 10%。此数字可以配置为百分比或整数。当定义为百分比时,批大小会被四舍五入到最近的节点,最小为一个节点。
要更改 worker 节点的默认数量或百分比:
1. 在左上角,单击 **☰ > 集群管理**。
1. 在**集群**页面中,进入要升级的集群,然后点击 **⋮ > 编辑配置**。
1. 在**升级策略**选项卡中,输入 **Worker 并发**作为固定的数字或百分比。你可以通过将集群中的节点数减去最大不可用节点数来获取该数字。
1. 单击**保存**。
**结果**:集群更新为使用新的升级策略。
### 使用 Rancher UI 在升级期间启用节点清空
默认情况下,RKE 会在升级之前[封锁](https://kubernetes.io/docs/concepts/architecture/nodes/#manual-node-administration)每个节点。默认情况下,[清空](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/)会在升级期间被禁用。如果在集群配置中启用了清空​​,RKE 将在升级之前对节点进行封锁和清空。
要在集群升级期间清空每个节点:
1. 在左上角,单击 **☰ > 集群管理**。
1. 在**集群**页面中,进入要启用节点清空的集群,然后点击 **⋮ > 编辑配置**。
1. 单击 **⋮ > 编辑**。
1. 在**升级策略**选项卡中,转到**清空节点**字段并单击**是**。controlplane 和 worker 节点的清空是单独配置的。
1. 配置如何删除 pod 的选项。有关每个选项的详细信息,请参阅[本节](../../how-to-guides/advanced-user-guides/manage-clusters/nodes-and-node-pools.md#激进和安全的清空选项)。
1. (可选)配置宽限期。宽限期是给每个 pod 进行清理的超时时间,能让 pod 有机会优雅地退出。Pod 可能需要完成任何未完成的请求、回滚事务或将状态保存到某些外部存储。如果该值为负数,将使用 pod 中指定的默认值。
1. (可选)配置超时,这是在清空放弃之前应该继续等待的时间。
1. 单击**保存**。
**结果**:集群更新为使用新的升级策略。
:::note
从 Rancher v2.4.0 开始出现了一个[已知问题](https://github.com/rancher/rancher/issues/25478),即使 etcd 和 controlplane 正在被清空, Rancher UI 不会将它们的状态显示为已清空。
:::
### 在升级期间维护应用的可用性
_从 RKE v1.1.0 起可用_
在 [RKE 文档](https://rancher.com/docs/rke/latest/en/upgrades/maintaining-availability/)中,你将了解在升级集群时防止应用停机的要求。
### 在 cluster.yml 中配置升级策略
你通过编辑 `cluster.yml` 来获得更高级的升级策略配置选项。
有关详细信息,请参阅 RKE 文档中的[配置升级策略](https://rancher.com/docs/rke/latest/en/upgrades/configuring-strategy)。这部分还包括一个用于配置升级策略的示例 `cluster.yml`。
## 故障排除
如果升级后节点没有出现,`rke up` 命令会出错。
如果不可用节点的数量超过配置的最大值,则不会进行升级。
如果升级停止,你可能需要修复不可用节点或将其从集群中删除,然后才能继续升级。
失败的节点可能处于许多不同的状态:
- 关机
- 不可用
- 用户在升级过程中清空了节点,因此节点上没有 kubelet
- 升级本身失败
如果在升级过程中达到最大不可用节点数,Rancher 的下游集群将停留在更新中的状态,并且不会继续升级其他 controlplane 节点。它将继续评估不可用的节点集,以防其中一个节点变得可用。如果无法修复节点,则必须移除节点才能继续升级。
@@ -0,0 +1,89 @@
---
title: 在不升级 Rancher 的情况下升级 Kubernetes
weight: 30
---
RKE 元数据功能允许你在新版本 Kubernetes 发布后立即为集群配置新版本,而无需升级 Rancher。此功能对于使用 Kubernetes 的补丁版本非常有用,例如,在原本支持 Kubernetes v1.14.6 的 Rancher Server 版本中,将 Kubernetes 升级到 v1.14.7。
:::note
Kubernetes API 可以在次要版本之间更改。因此,我们不支持引入 Kubernetes 次要版本,例如在 Rancher 支持 v1.14 的情况下引入 v1.15。在这种情况下,你需要升级 Rancher 以添加对 Kubernetes 次要版本的支持。
:::
Rancher 的 Kubernetes 元数据包含 Rancher 用于配置 [RKE 集群](../../pages-for-subheaders/launch-kubernetes-with-rancher.md)的 Kubernetes 版本信息。Rancher 会定期同步数据并为 **系统镜像**、**服务选项**和**插件模板**创建自定义资源定义 (CRD)。因此,当新的 Kubernetes 版本与 Rancher Server 版本兼容时,Kubernetes 元数据可以使 Rancher 使用新版本来配置集群。元数据概述了 [Rancher Kubernetes Engine](https://rancher.com/docs/rke/latest/en/) (RKE) 用于部署各种 Kubernetes 版本的信息。
下表描述了受周期性数据同步影响的 CRD。
:::note
只有管理员可以编辑元数据 CRD。除非明确需要,否则建议不要更新现有对象。
:::
| 资源 | 描述 | Rancher API URL |
|----------|-------------|-----------------|
| 系统镜像 | 用于通过 RKE 部署 Kubernetes 集群的系统镜像列表。 | `<RANCHER_SERVER_URL>/v3/rkek8ssystemimages` |
| 服务选项 | 传递给 Kubernetes 组件的默认选项,例如 `kube-api`、`scheduler`、`kubelet`、`kube-proxy` 和 `kube-controller-manager` | `<RANCHER_SERVER_URL>/v3/rkek8sserviceoptions` |
| 插件模板 | 用于部署插件组件的 YAML 定义,例如 Canal、Calico、Flannel、Weave、Kube-dns、CoreDNS、`metrics-server`、`nginx-ingress` | `<RANCHER_SERVER_URL>/v3/rkeaddons` |
管理员可以通过配置 RKE 元数据设置来执行以下操作:
- 刷新 Kubernetes 元数据。适用于有新的 Kubernetes 补丁版本发布,而用户希望在不升级 Rancher 的情况下为集群配置最新版本的 Kubernetes 的情景。
- 更改 Rancher 用于同步元数据的 URL。适用于要让 Rancher 从本地同步而不是与 GitHub 同步的情况。这在离线环境下非常有用。
- 防止 Rancher 自动同步元数据。这可以防止在 Rancher 中使用新的/不受支持的 Kubernetes 版本。
### 刷新 Kubernetes 元数据
默认情况下,管理员或具有**管理集群驱动**[全局角色](../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/manage-role-based-access-control-rbac/global-permissions.md)的用户,可以刷新 Kubernetes 元数据。
要强制 Rancher 刷新 Kubernetes 元数据,可以执行手动刷新操作:
1. 在左上角,单击 **☰ > 集群管理**。
1. 在左侧导航菜单中,单击**驱动**。
1. 单击**刷新 Kubernetes 元数据**。
你可以将 `refresh-interval-minutes` 设置为 `0`(见下文),将 Rancher 配置为仅在需要时刷新元数据,并在需要时使用此按钮手动执行元数据刷新。
### 配置元数据同步
:::caution
只有管​​理员可以更改这些设置。
:::
RKE 元数据的配置控制 Rancher 同步元数据的频率以及从何处下载数据。你可以通过 Rancher UI 或通过 Rancher API 端点 `v3/settings/rke-metadata-config` 配置元数据。
元数据的配置方式取决于 Rancher 版本。
要在 Rancher 中编辑元数据配置:
1. 在左上角,单击 **☰ > 全局设置**。
1. 转到 **rke-metadata-config**。单击 **⋮ > 编辑设置**。
1. 你可以选择填写以下参数:
- `refresh-interval-minutes`:Rancher 等待同步元数据的时间。如果要禁用定期刷新,请将 `refresh-interval-minutes` 设置为 0。
- `url`:Rancher 从中获取数据的 HTTP 路径。该路径必须是 JSON 文件的直接路径。例如,Rancher v2.4 的默认 URL 是 `https://releases.rancher.com/kontainer-driver-metadata/release-v2.4/data.json`。
1. 单击**保存**。
如果你没有离线设置,则无需指定 Rancher 获取元数据的 URL,因为默认是从 [Rancher 的元数据 Git 仓库获取](https://github.com/rancher/kontainer-driver-metadata/blob/dev-v2.5/data/data.json)的。
但是,如果你有[离线设置](#离线设置)需求,你需要将 Kubernetes 元数据仓库镜像到 Rancher 可用的位置。然后,你需要更改 URL 来指向 JSON 文件的新位置。
### 离线设置
Rancher Server 会定期刷新 `rke-metadata-config` 来下载新的 Kubernetes 版本元数据。有关 Kubernetes 和 Rancher 版本的兼容性表,请参阅[服务条款](https://rancher.com/support-maintenance-terms/all-supported-versions/rancher-v2.2.8/)。
如果你使用离线设置,则可能无法从 Rancher 的 Git 仓库自动定期刷新 Kubernetes 元数据。在这种情况下,应该禁用定期刷新以防止在日志中显示相关错误。或者,你可以配置元数据,以便 Rancher 与本地的 RKE 元数据副本进行同步。
要将 Rancher 与 RKE 元数据的本地镜像同步,管理员需要配置 `rke-metadata-config` 来指向镜像。详情请参考[配置元数据同步](#配置元数据同步)
在将新的 Kubernetes 版本加载到 Rancher Server 中之后,需要执行其他步骤才能使用它们启动集群。Rancher 需要访问更新的系统镜像。虽然只有管理员可以更改元数据设置,但任何用户都可以下载 Rancher 系统镜像并为镜像准备私有 Docker 镜像仓库。
1. 要把系统镜像下载到私有镜像仓库,请单击 Rancher UI 左下角的 Rancher Server 版本。
1. 下载适用于 Linux 或 Windows 操作系统的镜像。
1. 下载 `rancher-images.txt`。
1. 使用[离线环境安装](other-installation-methods/air-gapped-helm-cli-install/publish-images.md)时使用的步骤准备私有镜像仓库,但不要使用发布页面中的 `rancher-images.txt`,而是使用上一个步骤中获取的文件。
**结果**:Rancher 的离线安装现在可以同步 Kubernetes 元数据。如果你在发布新版本的 Kubernetes 时更新了私有镜像仓库,你可以使用新版本配置集群,而无需升级 Rancher。
@@ -0,0 +1,66 @@
---
title: 概述
weight: 1
---
Rancher 是一个为使用容器的公司打造的容器管理平台。Rancher 使得开发者可以随处运行 Kubernetes(Run Kubernetes Everywhere),满足 IT 需求规范,赋能 DevOps 团队。
# Run Kubernetes Everywhere
Kubernetes 已经成为容器编排标准。现在,大多数云和虚拟化提供商都提供容器编排服务。Rancher 用户可以选择使用 Rancher Kubernetes Engine(RKE)或云 Kubernetes 服务(例如 GKE、AKS 和 EKS)创建 Kubernetes 集群。还可以导入和管理使用任何 Kubernetes 发行版或安装程序创建的现有 Kubernetes 集群。
# 满足 IT 需求规范
Rancher 支持对其控制的所有 Kubernetes 集群进行集中认证、访问控制和监控。例如,你可以:
- 使用你的 Active Directory 凭证访问由云提供商(例如 GKE)托管的 Kubernetes 集群。
- 设置所有用户、组、项目、集群和云服务的权限控制策略和安全策略。
- 一站式查看 Kubernetes 集群的运行状况和容量。
# 赋能 DevOps 团队
Rancher 为 DevOps 工程师提供简单直接的用户界面,以管理其应用负载。用户不需要对 Kubernetes 有非常深入的了解,即可使用 Rancher。Rancher 应用商店包含一套实用的 DevOps 开发工具。Rancher 获得了多种云原生生态系统产品的认证,包括安全工具、监控系统、容器镜像仓库、存储和网络驱动等。
下图讲述了 Rancher 在 IT 管理团队和 DevOps 开发团队之间扮演的角色。DevOps 团队把他们的应用部署在他们选择的公有云或私有云上。IT 管理员负责查看并管理用户、集群、云服务的权限。
![平台](/img/platform.png)
# Rancher API Server 的功能
Rancher API Server 是基于嵌入式 Kubernetes API Server 和 etcd 数据库建立的,它提供了以下功能:
### 授权和基于角色的权限控制(RBAC)
- **用户管理**:Rancher API Server 除了管理本地用户,还[管理用户用来访问外部服务所需的认证信息](../../pages-for-subheaders/about-authentication.md),如登录 Active Directory 和 GitHub 所需的账号密码。
- **授权**:Rancher API Server 可以管理[访问控制策略](../../pages-for-subheaders/manage-role-based-access-control-rbac.md)和[安全策略](../../how-to-guides/advanced-user-guides/authentication-permissions-and-global-configuration/create-pod-security-policies.md)。
### 使用 Kubernetes 的功能
- **配置 Kubernetes 集群**:Rancher API Server 可以在已有节点上[配置 Kubernetes](../../pages-for-subheaders/kubernetes-clusters-in-rancher-setup.md),或进行 [Kubernetes 版本升级](../installation-and-upgrade/upgrade-and-roll-back-kubernetes.md)。
- **管理应用商店**:Rancher 支持使用 [Helm Chart 应用商店](../../pages-for-subheaders/helm-charts-in-rancher.md)实现轻松重复部署应用。
- **管理项目**:项目由集群中多个命名空间和访问控制策略组成,是 Rancher 中的一个概念,Kubernetes 中并没有这个概念。你可以使用项目实现以组为单位,管理多个命名空间,并进行 Kubernetes 相关操作。Rancher UI 提供用于[项目管理](../../pages-for-subheaders/manage-projects.md)和[项目内应用管理](../../pages-for-subheaders/kubernetes-resources-setup.md)的功能。
- **流水线**:[流水线](../../how-to-guides/advanced-user-guides/manage-projects/ci-cd-pipelines.md)可以帮助开发者快速高效地上线新软件。Rancher 支持给每个项目单独设置流水线。
- **Istio**:[Rancher 与 Istio 集成](../../pages-for-subheaders/istio.md),使得管理员或集群所有者可以将 Istio 交给开发者,然后开发者使用 Istio 执行安全策略,排查问题,或为蓝绿部署,金丝雀部署,和 A/B 测试进行流量管理。
### 配置云基础设施
- **同步节点信息**:Rancher API Server 可以同步所有集群中全部[节点](../../how-to-guides/advanced-user-guides/manage-clusters/nodes-and-node-pools.md)的信息。
- **配置云基础设施**:如果你为 Rancher 配置了云提供商,Rancher 可以在云端动态配置[新节点](../../pages-for-subheaders/use-new-nodes-in-an-infra-provider.md)和[持久化存储](../../pages-for-subheaders/create-kubernetes-persistent-storage.md)。
### 查看集群信息
- **日志管理**:Rancher 可以与多种 Kubernetes 集群之外的主流日志管理工具集成。
- **监控**:你可以使用 Rancher,通过业界领先并开源的 Prometheus 来监控集群节点、Kubernetes 组件和软件部署的状态和进程。
- **告警**:为了保证集群和应用的正常运行,提高公司的生产效率,你需要随时了解集群和项目的计划内和非计划事件。
# 使用 Rancher 编辑下游集群
对于已有集群而言,可提供的选项和设置取决于你配置集群的方法。例如,只有[通过 RKE 启动](../../pages-for-subheaders/launch-kubernetes-with-rancher.md)的集群才有可编辑的**集群选项**。
使用 Rancher 创建集群后,集群管理员可以管理集群成员,开启 Pod 安全策略,管理节点池,以及进行[其他操作](../../pages-for-subheaders/cluster-configuration.md)。
下表总结了每一种类型的集群和对应的可编辑的选项和设置:
import ClusterCapabilitiesTable from '../../shared-files/_cluster-capabilities-table.md';
<ClusterCapabilitiesTable />
@@ -0,0 +1,100 @@
---
title: Divio 文档介绍
---
[Divio 文档系统](https://documentation.divio.com/)是一种软件文档范式,它以功能为基础,旨在为用户提供具体、简明而且目的明确的文档。一般来说,Divio 由四个类别组成,分别是教程、操作指南、参考指南和解释。
我们将文档划分为以下章节:
## 开始使用
**开始使用**章节能帮助你快速启动和运行 Rancher。
本章节旨在帮助用户部署 Rancher 和工作负载,并快速有效地安装或升级 Rancher。
请参阅[简介](../../pages-for-subheaders/introduction.md)、[快速入门指南](../../pages-for-subheaders/quick-start-guides.md)以及[安装和升级](../../pages-for-subheaders/installation-and-upgrade.md)部分了解更多信息。
## 操作指南
操作指南描述了用户完成某些任务的实际步骤。在 Rancher 中,我们将操作指南进一步细分为[新用户指南](#新用户指南)和[高级用户指南](#高级用户指南)。
### 新用户指南
新用户指南(也称为教程)描述了某些操作的实际步骤。这些文档是“学习导向”的,也就是说用户通过“操作”来学习。
新用户指南旨在引导初学者或 Rancher 的日常用户通过一系列步骤来学习如何进行某些操作。这些文档旨在帮助用户通过使用易于遵循、有意义且可重复的操作来了解如何完成任务。这些指南将帮助用户完成工作,并能立刻看到效果。
正常来说,普通 Rancher 用户的技术水平高于“初学者”,但是,我们的新用户指南为初学者以及经验丰富的 Rancher 用户提供相同的指导。我们结合使用了高级语言和技术语言来介绍各个主题,并指导用户完成 Rancher 用户需要了解的通用任务。
你可以在[此处](../../how-to-guides/new-user-guides/kubernetes-resources-setup/workloads-and-pods/deploy-workloads.md)找到新用户指南的一个示例。
### 高级用户指南
高级用户指南是“问题导向”的文档,用户可以从中学习如何解决问题。高级用于指南与新用户指南的主要区别在于,高级用户指南面向更有经验或更高级的用户,这些用户对文档有更多的技术需求,而且已经了解 Rancher 及其功能。他们知道自己需要做什么,只是需要额外的指导来完成更复杂的任务。
应该注意的是,新用户指南和高级用户指南都没有提供详细的解释或讨论(这些文档不包括在本部分)。操作指南侧重于引导用户通过可重复、有效的步骤来学习新技能、掌握某些操作或解决某些问题。
你可以在[此处](../../how-to-guides/advanced-user-guides/manage-clusters/create-kubernetes-persistent-storage/manage-persistent-storage/dynamically-provision-new-storage.md)找到高级用户指南的一个示例。
## 参考指南
参考指南是用户可以学习的产品或流程描述。参考指南是“信息导向”的,主要用于描述。
本章节的文档可能包含一些操作步骤,但是描述操作步骤不是本章节的主要目的。
使用参考指南的用户熟悉且了解如何使用 Rancher。当用户需要参考具体使用细节时,用户可以获取更详细的使用描述。
Rancher 参考指南示例:
1. [Rancher Manager 架构](../../pages-for-subheaders/rancher-manager-architecture.md)
2. [集群配置指南](../../pages-for-subheaders/cluster-configuration.md)
## 说明
说明文档主要用于为某个任务或主题背后的“原因”提供理论知识。说明文档是“理解导向”的,用于拓宽用户的知识。在本节中,用户可以找到有关主题的上下文和背景、替代方案和意见等,还可能找到历史原因、相关限制以及流程的工作原理。
说明文档不会像操作指南那样指导用户进行操作,也不会像参考文档那样给出详细的描述。说明文档用于提供简单和复杂主题的实质和背景。
由于我们以前的大多数文档都不是"以讨论为导向"的,因此我们的新文档会增加这一部分内容。目前,我们以[Rancher 中的集成](../../pages-for-subheaders/integrations-in-rancher.md)来讨论我们的集成产品。
### Rancher 中的集成
Rancher 已经积累了多个产品和项目,而且已将它们集成到 Rancher UI 中。为了帮助用户了解这些集成,我们已将此小节添加到**说明**下。
集成示例:[Harvester](../../explanations/integrations-in-rancher/harvester.md) 和 [NeuVector](../../explanations/integrations-in-rancher/neuvector.md)
## 其他文档类别
### 常见问题
[常见问题](../../faq.md)包含了用户常见的 Rancher v2.x 问题。这些问题可能是技术性的或非技术性的。
我们会不断补充和优化这一部分,你可以常来浏览更新的内容。
### 故障排除
[故障排除](../../troubleshooting.md)旨在帮助新老 Rancher 用户解决他们在使用 Rancher 时可能遇到的已知问题。
我们会不断补充和优化这一部分,你可以常来浏览更新的内容。
### 参与 Rancher 社区贡献
为了提高文档的质量,我们一直在更新、检查和改进 Rancher Manager 文档。同时,我们也呼吁社区用户参与贡献。
你可以查阅[参与 Rancher 社区贡献](../../contribute-to-rancher.md)章节,了解 Rancher 使用的仓库,以及学习如何构建仓库、提交 issue 或创建 PR。
我们会经常 review 用户的贡献,并将及时向贡献者提供反馈。
## 重叠类别
你可能会发现,各个文档类别(新用户指南、高级用户指南、参考资料)存在一些重叠。这是因为信息流是流动的,因此通常情况下,某些文档在逻辑上可能属于多个类别。虽然我们的文档有一些重叠,但如果我们记住每个类别的主要功能并努力区分它们,那么文档将更加清晰可用。
## 新结构目标
旧版 Rancher 文档侧重于单个功能和主题,而新的 Divio 范式则优先考虑功能和及其内在联系。
我们旧版的文档结构没有采用 Divio 范式(例如,并非每个文档都可以合理地放入用户指南或参考文献中)。某些文档可能包含多个文档功能的内容。
因此,我们一直在努力把现有的文档转移到基于文档功能的新结构。未来,我们将根据需要创建、重写和重塑我们的文档,使我们的文档更加符合 Divio 结构、目的及其设计概念。
最终,我们的文档将强调单个主题或功能,从而更加有效地帮助我们的用户。
@@ -0,0 +1,7 @@
---
title: Rancher AWS Marketplace 快速入门
description: 使用 Amazon EKS 部署 Rancher Server。
weight: 110
---
你可以在 AWS 中使用 Amazon EKS 部署 Rancher Server。详情请参见我们的 [Amazon Marketplace 列表](https://aws.amazon.com/marketplace/pp/prodview-2yzbnvagmi4as)。
@@ -0,0 +1,95 @@
---
title: Rancher AWS 快速入门指南
description: 阅读此分步 Rancher AWS 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。
weight: 100
---
你可以参考以下步骤,在 AWS 的单节点 K3s Kubernetes 集群中快速部署 Rancher Server,并附加一个单节点下游 Kubernetes 集群。
:::caution
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 先决条件
:::caution
部署到 Amazon AWS 会产生费用。
:::
- [Amazon AWS 账号](https://aws.amazon.com/account/): 用于创建部署 Rancher Server 和 Kubernetes 的资源。
- [Amazon AWS 访问密钥](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html):如果你没有的话,请访问此链接查看相关指南。
- [已创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start):定义附加此策略的账号所具有的权限。
- [Terraform](https://www.terraform.io/downloads.html): 用于在 Amazon AWS 中配置服务器和集群。
### IAM 策略示例
AWS 模块只创建一个 EC2 密钥对、一个 EC2 安全组和一个 EC2 实例。以下是一个简单的策略:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
}
]
}
```
## 开始使用
1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
2. 执行 `cd quickstart/rancher/aws` 命令,进入包含 terraform 文件的 AWS 文件夹。
3. 把 `terraform.tfvars.example` 文件重命名为 `terraform.tfvars`。
4. 编辑 `terraform.tfvars` 文件,并替换以下变量:
- `aws_access_key` - 替换为 Amazon AWS 访问密钥
- `aws_secret_key` - 替换为 Amazon AWS Secret 密钥
- `rancher_server_admin_password` - 替换为创建 Rancher Server 的 admin 账号的密码
5. **可选**:修改 `terraform.tfvars` 中的可选参数。参见 [Quickstart Readme](https://github.com/rancher/quickstart) 以及 [AWS Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/aws) 了解更多信息。
建议包括:
- `aws_region` - Amazon AWS 区域。AWS 的默认区域 (`us-east-1`) 不一定是距离你最近的区域。建议修改为距离你最近的区域。
- `prefix` - 所有创建资源的前缀
- `instance_type` - EC2 使用的实例规格,最小规格为 `t3a.medium` 。如果在预算范围内,可以使用 `t3a.large` 或 `t3a.xlarge`。
- `add_windows_node` - 如果设为 true,一个额外的 Windows worker 节点会添加到工作负载集群中。
6. 执行 `terraform init`。
7. 执行 `terraform apply --auto-approve` 以初始化环境。然后,等待命令行工具返回以下信息:
```
Apply complete! Resources: 16 added, 0 changed, 0 destroyed.
Outputs:
rancher_node_ip = xx.xx.xx.xx
rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
workload_node_ip = yy.yy.yy.yy
```
8. 将以上输出中的 `rancher_server_url` 粘贴到浏览器中。在登录页面中登录(默认用户名为 `admin`,密码为在 `rancher_server_admin_password` 中设置的密码)。
9. 使用 `quickstart/rancher/aws` 中生成的 `id_rsa` 密钥 SSH 到 Rancher Server。
##### 结果
两个 Kubernetes 集群已部署到你的 AWS 账户中,一个运行 Rancher Server,另一个为实验部署做好准备。请注意,虽然这种设置是探索 Rancher 功能的好方法,但在生产环境中,应遵循我们的高可用设置指南。用于虚拟机的 SSH 密钥是自动生成的,存储在模块目录中。
## 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
## 销毁环境
1. 进入 `quickstart/rancher/aws` 文件夹,然后执行 `terraform destroy --auto-approve`。
2. 等待命令行界面显示资源已删除的消息。
@@ -0,0 +1,82 @@
---
title: Rancher Azure 快速入门指南
description: 阅读此分步 Rancher Azure 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。
weight: 115
---
你可以参考以下步骤,在 Azure 的单节点 K3s Kubernetes 集群中快速部署 Rancher Server,并附加一个单节点下游 Kubernetes 集群。
:::caution
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 先决条件
:::caution
部署到 Microsoft Azure 会产生费用。
:::
- [Microsoft Azure 账号](https://azure.microsoft.com/en-us/free/):用于创建部署 Rancher 和 Kubernetes 的资源。
- [Microsoft Azure 订阅](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal):如果你没有的话,请访问此链接查看如何创建 Microsoft Azure 订阅。
- [Micsoroft Azure 租户](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant):访问此链接并参考教程以创建 Microsoft Azure 租户。
- [Microsoft Azure 客户端 ID/密文](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal):访问此链接并参考教程以创建 Microsoft Azure 客户端和密文。
- [Terraform](https://www.terraform.io/downloads.html):用于在 Microsoft Azure 中配置服务器和集群。
## 开始使用
1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
2. 执行 `cd quickstart/rancher/azure` 命令,进入包含 terraform 文件的 Azure 文件夹。
3. 把 `terraform.tfvars.example` 文件重命名为 `terraform.tfvars`。
4. 编辑 `terraform.tfvars` 文件,并替换以下变量:
- `azure_subscription_id` - 替换为 Microsoft Azure 订阅 ID。
- `azure_client_id` - 替换为 Microsoft Azure 客户端 ID。
- `azure_client_secret` - 替换为 Microsoft Azure 客户端密文。
- `azure_tenant_id` - 替换为 Microsoft Azure 租户 ID。
- `rancher_server_admin_password` - 替换为创建 Rancher Server 的 admin 账号的密码
5. **可选**:修改 `terraform.tfvars` 中的可选参数。
参见 [Quickstart Readme](https://github.com/rancher/quickstart) 以及 [Azure Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/azure) 了解更多信息。建议包括:
- `azure_location` - Microsoft Azure 区域。Azure 的默认区域 (`East US`) 不一定是距离你最近的区域。建议修改为距离你最近的区域。
- `prefix` - 所有创建资源的前缀
- `instance_type` - 使用的计算实例大小,最小规格为 `Standard_DS2_v2`。如果在预算范围内,可以使用 `Standard_DS2_v3` 或 `Standard_DS3_v2`。
- `add_windows_node` - 如果设为 true,一个额外的 Windows worker 节点会添加到工作负载集群中。
- `windows_admin_password` - Windows worker 节点管理员的密码
6. 执行 `terraform init`。
7. 执行 `terraform apply --auto-approve` 以初始化环境。然后,等待命令行工具返回以下信息:
```
Apply complete! Resources: 16 added, 0 changed, 0 destroyed.
Outputs:
rancher_node_ip = xx.xx.xx.xx
rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
workload_node_ip = yy.yy.yy.yy
```
8. 将以上输出中的 `rancher_server_url` 粘贴到浏览器中。在登录页面中登录(默认用户名为 `admin`,密码为在 `rancher_server_admin_password` 中设置的密码)。
9. 使用 `quickstart/rancher/azure` 中生成的 `id_rsa` 密钥 SSH 到 Rancher Server。
#### 结果
两个 Kubernetes 集群已部署到你的 Azure 账户中,一个运行 Rancher Server,另一个为实验部署做好准备。请注意,虽然这种设置是探索 Rancher 功能的好方法,但在生产环境中,应遵循我们的高可用设置指南。用于虚拟机的 SSH 密钥是自动生成的,存储在模块目录中。
### 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
## 销毁环境
1. 进入 `quickstart/rancher/azure` 文件夹,然后执行 `terraform destroy --auto-approve`。
2. 等待命令行界面显示资源已删除的消息。
@@ -0,0 +1,74 @@
---
title: Rancher DigitalOcean 快速入门指南
description: 阅读此分步 Rancher DigitalOcean 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。
weight: 120
---
你可以参考以下步骤,在 DigitalOcean 的单节点 K3s Kubernetes 集群中快速部署 Rancher Server,并附加一个单节点下游 Kubernetes 集群。
:::caution
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 先决条件
:::caution
部署到 DigitalOcean 会产生费用。
:::
- [DigitalOcean 账号](https://www.digitalocean.com):用于运行服务器和集群。
- [DigitalOcean 访问密钥](https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean-space-and-api-key):如果你没有的话,请访问此链接创建一个。
- [Terraform](https://www.terraform.io/downloads.html):用于在 DigitalOcean 中配置服务器和集群。
## 开始使用
1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
2. 执行 `cd quickstart/rancher/do` 命令,进入包含 terraform 文件的 DigitalOcean 文件夹。
3. 把 `terraform.tfvars.example` 文件重命名为 `terraform.tfvars`。
4. 编辑 `terraform.tfvars` 文件,并替换以下变量:
- `do_token` - 替换为 DigitalOcean 访问密钥
- `rancher_server_admin_password` - 替换为创建 Rancher Server 的 admin 账号的密码
5. **可选**:修改 `terraform.tfvars` 中的可选参数。
参见 [Quickstart Readme](https://github.com/rancher/quickstart) 以及 [DO Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/do) 了解更多信息。建议包括:
- `do_region` - DigitalOcean 区域。DigitalOcean 的默认区域不一定是距离你最近的区域。建议修改为距离你最近的区域。
- `prefix` - 所有创建资源的前缀
- `droplet_size` - 使用的计算实例规格,最小规格为`s-2vcpu-4gb`。如果在预算范围内,可以使用 `s-4vcpu-8gb`。
6. 执行 `terraform init`。
7. 执行 `terraform apply --auto-approve` 以初始化环境。然后,等待命令行工具返回以下信息:
```
Apply complete! Resources: 15 added, 0 changed, 0 destroyed.
Outputs:
rancher_node_ip = xx.xx.xx.xx
rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
workload_node_ip = yy.yy.yy.yy
```
8. 将以上输出中的 `rancher_server_url` 粘贴到浏览器中。在登录页面中登录(默认用户名为 `admin`,密码为在 `rancher_server_admin_password` 中设置的密码)。
9. 使用 `quickstart/rancher/do` 中生成的 `id_rsa` 密钥 SSH 到 Rancher Server。
#### 结果
两个 Kubernetes 集群已部署到你的 DigitalOcean 账户中,一个运行 Rancher Server,另一个为实验部署做好准备。请注意,虽然这种设置是探索 Rancher 功能的好方法,但在生产环境中,应遵循我们的高可用设置指南。用于虚拟机的 SSH 密钥是自动生成的,存储在模块目录中。
### 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
## 销毁环境
1. 进入 `quickstart/rancher/do` 文件夹,然后执行 `terraform destroy --auto-approve`。
2. 等待命令行界面显示资源已删除的消息。
@@ -0,0 +1,118 @@
---
title: Rancher Equinix Metal 快速入门
weight: 250
---
## 本章节引导你:
- 配置 Equinix Metal server
- 安装 Rancher 2.x
- 创建你的第一个集群
- 部署一个 Nginx 应用
:::caution
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。不建议将 Docker 安装用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 快速入门概述
本指南划分为不同任务,以便于使用。
<br/>
## 先决条件
- [Equinix Metal 账号](https://metal.equinix.com/developers/docs/accounts/users/)
- [Equinix Metal 项目](https://metal.equinix.com/developers/docs/accounts/projects/)
### 1. 配置 Equinix Metal 主机
开始部署 Equinix Metal 主机。你可以使用 Equinix Metal 控制台,API 或 CLI 来配置 Equinix Metal Server。如果你需要了解如何部署每种类型的 deployment,请参见 [Equinix Metal 部署](https://metal.equinix.com/developers/docs/deploy/on-demand/)。以下链接介绍 Equinix Metal Server 的类型以及价格。
- [Equinix Metal Server 类型](https://metal.equinix.com/developers/docs/servers/about/)
- [Equinix Metal 价格](https://metal.equinix.com/developers/docs/servers/server-specs/)
:::note 注意事项:
- 如果使用 CLI 或 API 配置新的 Equinix Metal Server,你需要提供项目 ID、计划、metro 和操作系统。
- 当使用云主机的虚拟机时,你需要允许 80 和 443 端口的入站 TCP 通信。有关端口配置的信息,请参见你的云主机的文档。
- 如需了解所有端口要求,请参见 [Docker 安装](../../../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/node-requirements-for-rancher-managed-clusters.md)。
- 根据我们的[要求](../../../pages-for-subheaders/installation-requirements.md)配置主机。
:::
### 2. 安装 Rancher
要在 Equinix Metal 主机上安装 Rancher,先与它连接,然后使用 shell 进行安装。
1. 使用你惯用的 shell(例如 PuTTy 或远程终端)登录到你的 Equinix Metal 主机。
2. 在 shell 中执行以下命令:
```
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher
```
**结果**:Rancher 已安装。
### 3. 登录
登录到 Rancher 后,你还需要进行一些一次性配置。
1. 打开 Web 浏览器并输入主机的 IP 地址`https://<SERVER_IP>`。
将 `<SERVER_IP>` 替换为你的主机 IP 地址。
2. 出现提示时,为默认 `admin` 账号创建密码。
3. 设置 **Rancher Server URL**。URL 可以是 IP 地址或主机名。需要注意,添加到集群中的每个节点都必须能够连接到此 URL。<br/><br/>如果你在 URL 中使用主机名,则此主机名必须在 DNS 中解析到你需要添加到集群的节点上。
<br/>
### 4. 创建集群
欢迎使用 Rancher!现在,你可以创建你的第一个 Kubernetes 集群了。
在此任务中,你可以使用**自定义**选项。此选项允许你把 _任意_ Linux 主机(云虚拟机、本地虚拟机或裸机)添加到集群中。
1. 点击 **☰ > 集群管理**。
1. 在**集群**页面,点击**创建**。
2. 选择**自定义**。
3. 输入**集群名称**。
4. 跳过**成员角色**和**集群选项**。此部分我们稍后会详细介绍。
5. 点击**下一步**。
6. 在**节点角色**中,选择 _全部_ 角色,即 **etcd**,**Control** 和 **Worker**。
7. **可选**:Rancher 会自动检测用于 Rancher 通信和集群通信的 IP 地址。你可以使用**节点地址**处的`公有地址`和`内网地址`进行覆盖。
8. 跳过**标签**部分的内容。这部分内容暂时不重要。
9. 将屏幕上显示的命令复制到剪贴板。
10. 使用你惯用的 shell(例如 PuTTy 或远程终端)登录到你的 Linux 主机。粘贴剪贴板的命令并运行。
11. 在 Linux 主机上运行完命令后,单击**完成**。
**结果**:
你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。
当集群状态变为 **Active** 后,你可访问集群。
**Active** 状态的集群会分配到两个项目:
- `Default`:包含 `default` 命名空间
- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。
#### 已完成!
恭喜!你已创建第一个集群。
#### 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
@@ -0,0 +1,77 @@
---
title: Rancher GCP 快速入门指南
description: 阅读此分步 Rancher GCP 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。
weight: 130
---
你可以参考以下步骤,在 GCP 的单节点 K3s Kubernetes 集群中快速部署 Rancher Server,并附加一个单节点下游 Kubernetes 集群。
:::caution
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 先决条件
:::caution
部署到 Google GCP 会产生费用。
:::
- [Google GCP Account](https://console.cloud.google.com/):用于创建部署 Rancher 和 Kubernetes 的资源。
- [Google GCP 项目](https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project):如果你没有的话,请访问此链接查看如何创建 GCP 项目。
- [Google GCP ServiceAccount](https://cloud.google.com/iam/docs/creating-managing-service-account-keys):请访问此链接查看如何创建 GCP ServiceAccount 和 Token 文件。
- [Terraform](https://www.terraform.io/downloads.html):用于在 Google GCP 中配置服务器和集群。
## 开始使用
1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
2. 执行 `cd quickstart/rancher/gcp` 命令,进入包含 terraform 文件的 GCP 文件夹。
3. 把 `terraform.tfvars.example` 文件重命名为 `terraform.tfvars`。
4. 编辑 `terraform.tfvars` 文件,并替换以下变量:
- `gcp_account_json` - 替换为 GCP ServiceAccount 文件路径和文件名。
- `rancher_server_admin_password` - 替换为创建 Rancher Server 的 admin 账号的密码
5. **可选**:修改 `terraform.tfvars` 中的可选参数。
参见 [Quickstart Readme](https://github.com/rancher/quickstart) 以及 [GCP Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/gcp) 了解更多信息。
建议包括:
- `gcp_region` - Google GCP 区域。GCP 的默认区域 (`us-east4`) 不一定是距离你最近的区域。建议修改为距离你最近的区域。
- `gcp_zone` - Google GCP 区域。GCP 的默认区域 (`us-east4-a`) 不一定是距离你最近的区域。建议修改为距离你最近的区域。
- `prefix` - 所有创建资源的前缀
- `machine_type` - 使用的计算实例大小,最小规格为 `n1-standard-1`。如果在预算范围内,可以使用 `n1-standard-2` 或 `n1-standard-4`。
6. 执行 `terraform init`。
7. 执行 `terraform apply --auto-approve` 以初始化环境。然后,等待命令行工具返回以下信息:
```
Apply complete! Resources: 16 added, 0 changed, 0 destroyed.
Outputs:
rancher_node_ip = xx.xx.xx.xx
rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
workload_node_ip = yy.yy.yy.yy
```
8. 将以上输出中的 `rancher_server_url` 粘贴到浏览器中。在登录页面中登录(默认用户名为 `admin`,密码为在 `rancher_server_admin_password` 中设置的密码)。
9. 使用 `quickstart/rancher/gcp` 中生成的 `id_rsa` 密钥 SSH 到 Rancher Server。
#### 结果
两个 Kubernetes 集群已部署到你的 GCP 账户中,一个运行 Rancher Server,另一个为实验部署做好准备。请注意,虽然这种设置是探索 Rancher 功能的好方法,但在生产环境中,应遵循我们的高可用设置指南。用于虚拟机的 SSH 密钥是自动生成的,存储在模块目录中。
### 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
## 销毁环境
1. 进入 `quickstart/rancher/gcp` 文件夹,然后执行 `terraform destroy --auto-approve`。
2. 等待命令行界面显示资源已删除的消息。
@@ -0,0 +1,145 @@
---
title: Helm CLI 快速入门
weight: 300
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
本文提供了快速安装 Rancher 的方法。
这些说明假设你有一个 Linux 虚拟机,并能从本地工作站与之通信。Rancher 将安装在 Linux 主机上。你将需要检索该主机的 IP 地址,以便从本地工作站访问 Rancher。Rancher 旨在远程管理 Kubernetes 集群,因此 Rancher 管理的任何 Kubernetes 集群也都需要能够访问该 IP 地址。
我们不建议在本地安装 Rancher,因为它会产生网络问题。如果你在 localhost 上安装 Rancher,Rancher 无法与下游 Kubernetes 集群通信,因此在 localhost 上你无法测试 Rancher 的集群配置和集群管理功能。
你的 Linux 主机可以位于任何地方。例如,它可以是 Amazon EC2 实例、Digital Ocean Droplet 或 Azure 虚拟机。其他 Rancher 文档也经常称它们为“节点”。部署 Linux 主机的一种方法是设置一个 Amazon EC2 实例,如[本教程](../../../how-to-guides/new-user-guides/infrastructure-setup/nodes-in-amazon-ec2.md)中所示。
完整的安装要求在[这里](../../../pages-for-subheaders/installation-requirements.md)。
## 在 Linux 上安装 K3s
在 Linux 主机上运行以下命令来安装 K3s 集群:
```
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="***" sh -s - server --cluster-init
```
Rancher 需要安装在支持的 Kubernetes 版本上。如需指定 K3s 版本,在运行 K3s 安装脚本时,使用 `INSTALL_K3S_VERSION` 环境变量。请参阅[支持维护条款](https://rancher.com/support-maintenance-terms/)。
`--cluster-init` 允许 K3s 使用嵌入式 etcd 作为数据存储,并能够转换为 HA 设置。请参阅[嵌入式数据库的高可用性](https://rancher.com/docs/k3s/latest/en/installation/ha-embedded/)。
保存 Linux 主机的 IP。
## 将 kubeconfig 保存到你的工作站
kubeconfig 文件对于访问 Kubernetes 集群非常重要。从 Linux 主机复制 `/etc/rancher/k3s/k3s.yaml` 中的文件,并将其保存到本地工作站的 `~/.kube/config` 目录中。一种方法是使用 `scp` 工具并在本地计算机上运行此命令:
<Tabs>
<TabItem value="Mac 和 Linux">
```
scp root@<IP_OF_LINUX_MACHINE>:/etc/rancher/k3s/k3s.yaml ~/.kube/config
```
</TabItem>
<TabItem value="Windows">
默认情况下不能识别“scp”命令,所以我们需要先安装一个模块。
在 Windows Powershell 中:
```
Find-Module Posh-SSH
Install-Module Posh-SSH
## 获取远程 kubeconfig 文件
scp root@<IP_OF_LINUX_MACHINE>:/etc/rancher/k3s/k3s.yaml $env:USERPROFILE\.kube\config
```
</TabItem>
</Tabs>
## 在 kubeconfig 中编辑 Rancher Server URL
在 kubeconfig 文件中,你需要将 `server` 字段的值更改为 `<IP_OF_LINUX_NODE>:6443`。你可以通过端口 6443 访问 Kubernetes API Server,通过端口 80 和 443 访问 Rancher Server。你需要进行此编辑,以便你从本地工作站运行 Helm 或 kubectl 命令时,能够与安装了 Rancher 的 Kubernetes 集群进行通信。
<Tabs>
<TabItem value="Mac 和 Linux">
打开 kubeconfig 文件进行编辑的一种方法是使用 Vim:
```
vi ~/.kube/config
```
输入 `i` 以打开 Vim 的插入模式。要保存你的工作,请按 `Esc`。然后输入 `:wq` 并按 `Enter`。
</TabItem>
<TabItem value="Windows">
在 Windows Powershell 中,你可以使用 `notepad.exe` 来编辑 kubeconfig 文件:
```
notepad.exe $env:USERPROFILE\.kube\config
```
编辑完成后,按 `ctrl+s` 或转到 `File > Save` 来保存你的工作。
</TabItem>
</Tabs>
## 使用 Helm 来安装 Rancher
从本地工作站运行以下命令。你需要先安装 [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) 和 [helm](https://helm.sh/docs/intro/install/):
```
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
kubectl create namespace cattle-system
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.7.1
# Windows Powershell
helm install cert-manager jetstack/cert-manager `
--namespace cert-manager `
--create-namespace `
--version v1.7.1
```
安装 Rancher 的最终命令如下。该命令需要一个将流量转发到 Linux 主机的域名。为了简化本教程,你可以使用假域名。`<IP_OF_LINUX_NODE>.sslip.io` 是一个假域名的例子。
要安装特定的 Rancher 版本,请使用 `--version` 标志(例如,`--version 2.6.6`)。否则,默认安装最新的 Rancher。请参阅[选择 Rancher 版本](../../installation-and-upgrade/resources/choose-a-rancher-version.md)。
```
helm install rancher rancher-latest/rancher \
--namespace cattle-system \
--set hostname=<IP_OF_LINUX_NODE>.sslip.io \
--set replicas=1 \
--set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN>
# Windows Powershell
helm install rancher rancher-latest/rancher `
--namespace cattle-system `
--set hostname=<IP_OF_LINUX_NODE>.sslip.io `
--set replicas=1 `
--set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN>
```
现在,如果你在 Web 浏览器中导航到 `<IP_OF_LINUX_NODE>.sslip.io`,你应该会看到 Rancher UI。
为了简化说明,我们使用了一个假域名和自签名证书来进行安装。因此,你可能需要在 Web 浏览器中添加一个安全例外来查看 Rancher UI。请注意,对于生产安装,你需要具有负载均衡器、真实域名和真实证书的高可用性设置。
这些说明还省略了完整的安装要求和其他安装选项。如果你对这些步骤有任何疑问,请参阅完整的 [Helm CLI 安装文档](../../../pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster.md)。
要使用新的 Rancher Server 来启动新的 Kubernetes 集群,你可能需要在 Rancher 中设置云凭证。有关更多信息,请参阅[使用 Rancher 启动 Kubernetes 集群](../../../pages-for-subheaders/launch-kubernetes-with-rancher.md)。
@@ -0,0 +1,76 @@
---
title: Rancher Hetzner Cloud 快速入门指南
description: 阅读此分步 Rancher Hetzner Cloud 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。
weight: 140
---
你可以参考以下步骤,在 Hetzner Cloud 的单节点 K3s Kubernetes 集群中快速部署 Rancher Server,并附加一个单节点下游 Kubernetes 集群。
:::caution
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 先决条件
:::caution
部署到 Hetzner Cloud 会产生费用。
:::
- [Hetzner Cloud 账号](https://www.hetzner.com):用于运行服务器和集群。
- [Hetzner API 访问密钥](https://docs.hetzner.cloud/#getting-started):如果你没有的话,请参考说明创建一个。
- [Terraform](https://www.terraform.io/downloads.html):用于在 Hetzner 中配置服务器和集群。
## 开始使用
1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
2. 执行 `cd quickstart/rancher/hcloud` 命令,进入包含 terraform 文件的 Hetzner 文件夹。
3. 把 `terraform.tfvars.example` 文件重命名为 `terraform.tfvars`。
4. 编辑 `terraform.tfvars` 文件,并替换以下变量:
- `hcloud_token` - 替换为 Hetzner API 访问密钥。
- `rancher_server_admin_password` - 替换为创建 Rancher Server 的 admin 账号的密码
5. **可选**:修改 `terraform.tfvars` 中的可选参数。
参见 [Quickstart Readme](https://github.com/rancher/quickstart) 以及 [Hetzner Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/hcloud) 了解更多信息。
建议包括:
- `prefix` - 所有创建资源的前缀
- `instance_type` - 实例类型,至少需要是 `cx21`。
- `hcloud_location`- Hetzner Cloud 位置。选择最近的位置,而不是使用默认位置(`fsn1`)。
6. 执行 `terraform init`。
7. 执行 `terraform apply --auto-approve` 以初始化环境。然后,等待命令行工具返回以下信息:
```
Apply complete! Resources: 15 added, 0 changed, 0 destroyed.
Outputs:
rancher_node_ip = xx.xx.xx.xx
rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
workload_node_ip = yy.yy.yy.yy
```
8. 将以上输出中的 `rancher_server_url` 粘贴到浏览器中。在登录页面中登录(默认用户名为 `admin`,密码为在 `rancher_server_admin_password` 中设置的密码)。
9. 使用 `quickstart/rancher/hcloud` 中生成的 `id_rsa` 密钥 SSH 到 Rancher Server。
#### 结果
两个 Kubernetes 集群已部署到你的 Hetzner 账户中,一个运行 Rancher Server,另一个为实验部署做好准备。请注意,虽然这种设置是探索 Rancher 功能的好方法,但在生产环境中,应遵循我们的高可用设置指南。用于虚拟机的 SSH 密钥是自动生成的,存储在模块目录中。
### 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
## 销毁环境
1. 进入 `quickstart/rancher/hcloud` 文件夹,然后执行 `terraform destroy --auto-approve`。
2. 等待命令行界面显示资源已删除的消息。
@@ -0,0 +1,76 @@
---
title: Rancher Outscale 快速入门指南
description: 阅读此分步 Rancher Outscale 指南,以快速部署带有单节点下游 Kubernetes 集群的 Rancher Server。
weight: 140
---
你可以参考以下步骤,在 Outscale 的单节点 K3s Kubernetes 集群中快速部署 Rancher Server,并附加一个单节点下游 Kubernetes 集群。
:::note
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 先决条件
:::caution
部署到 Outscale 会产生费用。
:::
- [Outscale 账号](https://en.outscale.com/):用于运行服务器和集群。
- [Outscale 访问密钥](https://docs.outscale.com/en/userguide/About-Access-Keys.html):如果你没有的话,请按照说明创建一个 Outscale 访问密钥。
- [Terraform](https://www.terraform.io/downloads.html):用于在 Outscale 中配置服务器和集群。
## 开始使用
1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
2. 执行 `cd quickstart/rancher/outscale` 命令,进入包含 terraform 文件的 Outscale 文件夹。
3. 把 `terraform.tfvars.example` 文件重命名为 `terraform.tfvars`。
4. 编辑 `terraform.tfvars` 文件,并替换以下变量:
- `access_key_id` - 替换为 Outscale 访问密钥
- `secret_key_id` - 替换为 Outscale 密文密钥
- `rancher_server_admin_password` - 替换为创建 Rancher Server 的 admin 账号的密码
5. **可选**:修改 `terraform.tfvars` 中的可选参数。
参见 [Quickstart Readme](https://github.com/rancher/quickstart) 以及 [Outscale Quickstart Readme](https://github.com/rancher/quickstart/tree/master/rancher/outscale) 了解更多信息。
建议包括:
- `region` - Outscale 区域。Outscale 的默认区域不一定是距离你最近的区域。建议修改为距离你最近的区域(`eu-west-2`)。
- `prefix` - 所有创建资源的前缀
- `instance_type` - 实例类型,至少需要是 `tinav3.c2r4p3`。
6. 执行 `terraform init`。
7. 执行 `terraform apply --auto-approve` 以初始化环境。然后,等待命令行工具返回以下信息:
```
Apply complete! Resources: 21 added, 0 changed, 0 destroyed.
Outputs:
rancher_node_ip = xx.xx.xx.xx
rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io
workload_node_ip = yy.yy.yy.yy
```
8. 将以上输出中的 `rancher_server_url` 粘贴到浏览器中。在登录页面中登录(默认用户名为 `admin`,密码为在 `rancher_server_admin_password` 中设置的密码)。
9. 使用 `quickstart/rancher/outscale` 中生成的 `id_rsa` 密钥 SSH 到 Rancher Server。
#### 结果
两个 Kubernetes 集群已部署到你的 Outscale 账户中,一个运行 Rancher Server,另一个为实验部署做好准备。请注意,虽然这种设置是探索 Rancher 功能的好方法,但在生产环境中,应遵循我们的高可用设置指南。用于虚拟机的 SSH 密钥是自动生成的,存储在模块目录中。
### 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
## 销毁环境
1. 进入 `quickstart/rancher/outscale` 文件夹,然后执行 `terraform destroy --auto-approve`。
2. 等待命令行界面显示资源已删除的消息。
@@ -0,0 +1,51 @@
---
title: Vagrant 快速入门
weight: 200
---
你可以参考以下步骤快速部署 Rancher Server,并附加一个单节点集群。
:::caution
本章节中提供的指南,旨在帮助你快速启动一个用于 Rancher 的沙盒,以评估 Rancher 是否能满足你的使用需求。快速入门指南不适用于生产环境。如果你需要获取生产环境的操作指导,请参见[安装](../../../pages-for-subheaders/installation-and-upgrade.md)。
:::
## 先决条件
- [Vagrant](https://www.vagrantup.com):Vagrant 是必需的,用于根据 Vagrantfile 配置主机。
- [Virtualbox](https://www.virtualbox.org):需要把 Vagrant 配置的虚拟机配置到 VirtualBox。
- 至少 4GB 的可用内存。
### 注意
- Vagrant 需要使用插件来创建 VirtualBox 虚拟机。请执行以下命令进行安装:
`vagrant plugin install vagrant-vboxmanage`
`vagrant plugin install vagrant-vbguest`
## 开始使用
1. 使用命令行工具,执行 `git clone https://github.com/rancher/quickstart` 把 [Rancher Quickstart](https://github.com/rancher/quickstart) 克隆到本地。
2. 执行 `cd quickstart/rancher/vagrant` 命令,进入包含 Vagrantfile 文件的文件夹。
3. **可选**:编辑 `config.yaml` 文件:
- 根据需要更改节点数和内存分配(`node.count`, `node.cpus`, `node.memory`)
- 更改 `admin` 的密码以登录 Rancher。(`admin_password`)
4. 执行 `vagrant up --provider=virtualbox` 以初始化环境。
5. 配置完成后,在浏览器中打开 `https://192.168.56.101`。默认的用户名和密码是 `admin/adminPassword`。
**结果**:Rancher Server 和你的 Kubernetes 集群已安装在 VirtualBox 上。
### 后续操作
使用 Rancher 创建 deployment。详情请参见[创建 Deployment](../../../pages-for-subheaders/deploy-rancher-workloads.md)。
## 销毁环境
1. 进入 `quickstart/rancher/vagrant` 文件夹,然后执行 `vagrant destroy -f`。
2. 等待所有资源已删除的确认消息。
@@ -0,0 +1,139 @@
---
title: 部署带有 NodePort 的工作负载
weight: 200
---
### 先决条件
你已有一个正在运行的集群,且该集群中有至少一个节点。
### 1. 部署工作负载
你可以开始创建你的第一个 Kubernetes [工作负载](https://kubernetes.io/docs/concepts/workloads/)。工作负载是一个对象,其中包含 pod 以及部署应用所需的其他文件和信息。
在本文的工作负载中,你将部署一个 Rancher Hello-World 应用。
1. 点击 **☰ > 集群管理**。
1. 在**集群**页面中,进入需要部署工作负载的集群,然后单击 **Explore**。
1. 点击**工作负载**。
1. 单击**创建**。
1. 为工作负载设置**名称**。
1. 在**容器镜像**字段中,输入 `rancher/hello-world`。注意区分大小写。
1. 点击**添加端口**。
1. 在**服务类型**下拉菜单中,确保选择了 **NodePort**。
![NodePort 下拉菜单(在每个所选节点处)](/img/nodeport-dropdown.png)
1. 在**发布容器端口**字段中,输入端口`80`。
![发布容器端口,端口 80 已输入](/img/container-port-field.png)
1. 单击**创建**。
**结果**:
* 工作负载已部署。此过程可能需要几分钟。
* 当工作负载完成部署后,它的状态会变为 **Active**。你可以从项目的**工作负载**页面查看其状态。
<br/>
### 2. 查看应用
在**工作负载**页面中,点击工作负载下方的链接。如果 deployment 已完成,你的应用会打开。
### 注意事项
如果使用云虚拟机,你可能无法访问运行容器的端口。这种情况下,你可以使用 `Execute Shell` 在本地主机的 SSH 会话中测试 Nginx。如果可用的话,使用工作负载下方的链接中 `:` 后面的端口号。在本例中,端口号为 `31568`。
```html
gettingstarted@rancher:~$ curl http://localhost:31568
<!DOCTYPE html>
<html>
<head>
<title>Rancher</title>
<link rel="icon" href="img/favicon.png">
<style>
body {
background-color: white;
text-align: center;
padding: 50px;
font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
}
button {
background-color: #0075a8;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
}
#logo {
margin-bottom: 40px;
}
</style>
</head>
<body>
<img id="logo" src="img/rancher-logo.svg" alt="Rancher logo" width=400 />
<h1>Hello world!</h1>
<h3>My hostname is hello-world-66b4b9d88b-78bhx</h3>
<div id='Services'>
<h3>k8s services found 2</h3>
<b>INGRESS_D1E1A394F61C108633C4BD37AEDDE757</b> tcp://10.43.203.31:80<br />
<b>KUBERNETES</b> tcp://10.43.0.1:443<br />
</div>
<br />
<div id='rancherLinks' class="row social">
<a class="p-a-xs" href="https://rancher.com/docs"><img src="img/favicon.png" alt="Docs" height="25" width="25"></a>
<a class="p-a-xs" href="https://slack.rancher.io/"><img src="img/icon-slack.svg" alt="slack" height="25" width="25"></a>
<a class="p-a-xs" href="https://github.com/rancher/rancher"><img src="img/icon-github.svg" alt="github" height="25" width="25"></a>
<a class="p-a-xs" href="https://twitter.com/Rancher_Labs"><img src="img/icon-twitter.svg" alt="twitter" height="25" width="25"></a>
<a class="p-a-xs" href="https://www.facebook.com/rancherlabs/"><img src="img/icon-facebook.svg" alt="facebook" height="25" width="25"></a>
<a class="p-a-xs" href="https://www.linkedin.com/groups/6977008/profile"><img src="img/icon-linkedin.svg" height="25" alt="linkedin" width="25"></a>
</div>
<br />
<button class='button' onclick='myFunction()'>Show request details</button>
<div id="reqInfo" style='display:none'>
<h3>Request info</h3>
<b>Host:</b> 172.22.101.111:31411 <br />
<b>Pod:</b> hello-world-66b4b9d88b-78bhx </b><br />
<b>Accept:</b> [*/*]<br />
<b>User-Agent:</b> [curl/7.47.0]<br />
</div>
<br />
<script>
function myFunction() {
var x = document.getElementById("reqInfo");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
</script>
</body>
</html>
gettingstarted@rancher:~$
```
### 已完成!
恭喜!你已成功通过 NodePort 部署工作负载。
#### 后续操作
使用完沙盒后,你需要清理 Rancher Server 和集群。详情请参见:
- [Amazon AWS:销毁环境](../deploy-rancher-manager/aws.md#销毁环境)
- [DigitalOcean:销毁环境](../deploy-rancher-manager/digitalocean.md#销毁环境)
- [Vagrant:销毁环境](../deploy-rancher-manager/vagrant.md#销毁环境)
@@ -0,0 +1,73 @@
---
title: 部署带有 Ingress 的工作负载
weight: 100
---
### 先决条件
你已有一个正在运行的集群,且该集群中有至少一个节点。
### 1. 部署工作负载
你可以开始创建你的第一个 Kubernetes [工作负载](https://kubernetes.io/docs/concepts/workloads/)。工作负载是一个对象,其中包含 pod 以及部署应用所需的其他文件和信息。
在本文的工作负载中,你将部署一个 Rancher Hello-World 应用。
1. 点击 **☰ > 集群管理**。
1. 选择你创建的集群,并点击 **Explore**。
1. 点击**工作负载**。
1. 单击**创建**。
1. 点击 **Deployment**。
1. 为工作负载设置**名称**。
1. 在 **Docker 镜像**字段中,输入 `rancher/hello-world`。注意区分大小写。
1. 点击**添加端口**并在**私有容器端口**字段中输入`80`。通过添加端口,你可以访问集群内外的应用。详情请参见 [Service](../../../pages-for-subheaders/workloads-and-pods.md#services)。
1. 单击**创建**。
**结果**:
* 工作负载已部署。此过程可能需要几分钟。
* 当工作负载完成部署后,它的状态会变为 **Active**。你可以从项目的**工作负载**页面查看其状态。
### 2. 通过 Ingress 暴露应用
现在应用已启动并运行,你需要暴露应用以让其他服务连接到它。
1. 点击 **☰ > 集群管理**。
1. 选择你创建的集群,并点击 **Explore**。
1. 点击**服务发现 > Ingresses**。
1. 点击**创建**。
1. 在选择**命名空间**时,你需要选择在创建 deployment 时使用的命名空间。否则,在步骤8中选择**目标服务**时,你的 deployment 会不可用。
1. 输入**名称**,例如 **hello**。
1. 指定**路径**,例如 `/hello`。
1. 在**目标服务**字段的下拉菜单中,选择你为服务设置的名称。
1. 在**端口**字段中的下拉菜单中,选择 `80`。
1. 点击右下角的**创建**。
**结果**:应用分配到了一个 `sslip.io` 地址并暴露。这可能需要一两分钟。
### 查看应用
在 **Deployments** 页面中,找到你 deployment 的 **endpoint** 列,然后单击一个 endpoint。可用的 endpoint 取决于你添加到 deployment 中的端口配置。如果你看不到随机分配端口的 endpoint,请将你在创建 Ingress 时指定的路径尾附到 IP 地址上。例如,如果你的 endpoint 是 `xxx.xxx.xxx.xxx` 或 `https://xxx.xxx.xxx.xxx`,把它修改为 `xxx.xxx.xxx.xxx/hello` 或 `https://xxx.xxx.xxx.xxx/hello`。
应用将在另一个窗口中打开。
#### 已完成!
恭喜!你已成功通过 Ingress 部署工作负载。
#### 后续操作
使用完沙盒后,你需要清理 Rancher Server 和集群。详情请参见:
- [Amazon AWS:销毁环境](../deploy-rancher-manager/aws.md#销毁环境)
- [DigitalOcean:销毁环境](../deploy-rancher-manager/digitalocean.md#销毁环境)
- [Vagrant:销毁环境](../deploy-rancher-manager/vagrant.md#销毁环境)