Skip to main content

安装 Kubernetes

本节描述了如何根据我们的 Rancher Server 环境的最佳实践来安装 Kubernetes 集群。该集群应专用于运行 Rancher Server。

对于 v2.4 之前的 Rancher,Rancher 应该安装在 RKE(Rancher Kubernetes Engine)Kubernetes 集群上。RKE 是经过 CNCF 认证的 Kubernetes 发行版,并且全部组件完全在 Docker 容器内运行。

从 Rancher v2.4 开始,Rancher Server 可以安装在 RKE Kubernetes 集群或 K3s Kubernetes 集群上。K3s 也是 Rancher 发布的经过完全认证的 Kubernetes 发行版,但比 RKE 更新。我们建议在 K3s 上安装 Rancher,因为 K3s 易于使用且更轻量,全部组件都打包在了一个二进制文件里。并且这个二进制文件小于 100 MB。注意:如果在 RKE 集群上安装了 Rancher 之后,目前没有办法将这个高可用迁移到 K3s 集群上。

Rancher Server 只能在使用 RKE 或 K3s 安装的 Kubernetes 集群中运行。不支持在托管的 Kubernetes 集群(例如 EKS)上使用 Rancher。

对于无法直接访问 Internet 的系统,请参阅 Rancher 离线安装指南

单节点 Kubernetes 集群安装提示:

在单节点 Kubernetes 集群中,Rancher Server 不具有高可用性,但高可用性这对于在生产环境中运行 Rancher 至关重要。如果要在短期内通过使用单个节点来节省资源,同时保留高可用性迁移路径,则在单节点 Kubernetes 集群上安装 Rancher 可能会很有用。

要创建单节点 RKE 集群,只需在cluster.yml中配置一个节点。这个节点应该具有所有三个角色:etcdcontrolplaneworker

要创建单节点 K3s 集群,只需在一个节点上运行安装命令即可,并不需要像高可用集群一样在两个节点上安装。

配置完单节点的 Kubernetes 集群后,就可以像在其他高可用集群上安装一样,使用 Helm 安装 Rancher。

安装 Kubernetes#

创建 Kubernetes 集群的步骤,根据是使用 RKE 还是使用 K3s 而不同。请选择一种适合您的方式安装 Kubernetes。

安装 K3s 集群#

1、安装 Kubernetes 并配置 K3s Server#

运行启动 K3s Kubernetes API Server 的命令时,您需要传入先前设置的外部数据库参数。

  1. 连接到您准备运行 Rancher Server 的 Linux 节点之一。

  2. 在 Linux 节点上,运行以下命令以启动 K3s Server 并将其连接到外部数据库:

    curl -sfL https://get.k3s.io | sh -s - server \
    --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"

    注意:您也可以通过环境变量$K3S_DATASTORE_ENDPOINT来配置数据库端点。

提示

国内用户,可以使用以下方法加速安装:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server \
--datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
  1. 在您的另外一台 Linux 节点上执行同样的操作。

2、确认 K3s 是否创建成功#

要确认已成功设置 K3s,请在任一 K3s Server 节点上运行以下命令:

sudo k3s kubectl get nodes

然后,您应该看到两个具有master角色的节点:

ubuntu@ip-172-31-60-194:~$ sudo k3s kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-172-31-60-194 Ready master 44m v1.17.2+k3s1
ip-172-31-63-88 Ready master 6m8s v1.17.2+k3s1

然后测试集群容器的运行状况:

sudo k3s kubectl get pods --all-namespaces

结果: 您已经成功设置了 K3s Kubernetes 集群。

3、保存并使用 kubeconfig 文件#

在每个 Rancher Server 节点上安装 K3s 时,会在节点上/etc/rancher/k3s/k3s.yaml位置创建一个kubeconfig文件。该文件包含用于完全访问集群的凭据,您应该将此文件保存在安全的位置。

要使用此kubeconfig文件,

  1. 安装 Kubernetes 命令行工具kubectl
  2. 将文件/etc/rancher/k3s/k3s.yaml复制并保存到本地计算机上的~/.kube/config文件中。
  3. 在这个 kubeconfig 文件中,server参数为 localhost。您需要手动更改这个地址为负载均衡器的 DNS,并且指定端口 6443。(Kubernetes API Server 的端口为 6443,Rancher Server 的端口为 80 和 443。)以下是一个示例k3s.yaml
注意

如果需要在本地通过 kubectl 访问这个 K3s 集群,请确保在您的负载均衡器中配置将6443端口的流量也转发到这两个节点上。

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 集群访问官方 Kubernetes 文档中关于使用kubeconfig文件访问集群的部分。

4、检查集群 Pod 的运行状况#

既然已经设置了kubeconfig文件,就可以使用kubectl从您的本地计算机访问集群了。

检查所有需要的 Pod 和容器是否状况良好:

ubuntu@ip-172-31-60-194:~$ sudo kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-6d684c7b5-bw59k 1/1 Running 0 8d
kube-system local-path-provisioner-58fb86bdfd-fmkvd 1/1 Running 0 8d
kube-system coredns-d798c9dd-ljjnf 1/1 Running 0 8d

结果: 您已确认可以使用kubectl访问集群,并且 K3s 集群正在正确运行。现在,可以在集群上安装 Rancher Server 了。

安装 RKE 集群#

1、安装需要的 CLI 工具#

安装 Kubernetes 命令行工具 kubectl

另外,安装RKE,Rancher Kubernetes Engine,一种 Kubernetes 分发版和命令行工具。

请按照RKE 文档中的说明安装 RKE。

提示

国内用户,可以导航到 https://mirror.rancher.cn 下载所需资源

2、创建 RKE 配置文件#

在本节中,您将创建一个名为rancher-cluster.yml的 Kubernetes 集群配置文件。在后续步骤中,当使用 RKE 命令设置集群时,它将使用此文件在节点上安装 Kubernetes。

使用下面的示例,创建rancher-cluster.yml文件。将nodes列表中的 IP 地址替换为您创建的 3 个节点的 IP 地址或 DNS 名称。

如果您的节点具有公共和内部地址,建议设置internal_address:这样 Kubernetes 会将其用于集群内通信。某些服务(例如 AWS EC2)在使用自引用安全组或防火墙时需要设置internal_address:

RKE 需要通过 SSH 连接到每个节点,并且它将在默认位置~/.ssh/id_rsa中寻找私钥。如果您的默认私钥与节点的私钥不在同一个位置,则还需要为该节点配置ssh_key_path选项。

nodes:
- address: 165.227.114.63
internal_address: 172.16.22.12
user: ubuntu
role: [controlplane, worker, etcd]
- address: 165.227.116.167
internal_address: 172.16.32.37
user: ubuntu
role: [controlplane, worker, etcd]
- address: 165.227.127.226
internal_address: 172.16.42.73
user: ubuntu
role: [controlplane, worker, etcd]
services:
etcd:
snapshot: true
creation: 6h
retention: 24h
# 当使用外部 TLS 终止,并且使用 ingress-nginx v0.22或以上版本时,必须。
ingress:
provider: nginx
options:
use-forwarded-headers: "true"
常用 RKE 节点选项
选项必填描述
address公用 DNS 或 IP 地址
user可以运行 docker 命令的用户
role分配给节点的 Kubernetes 角色列表
internal_address内部集群流量的专用 DNS 或 IP 地址
ssh_key_path用于对节点进行身份验证的 SSH 私钥的路径(默认为~/.ssh/id_rsa

高级配置: RKE 有许多配置选项可用于在您的特定环境中进行自定义安装。

请参阅RKE 文档来了解 RKE 的选项和功能的完整列表。

要为大规模 Rancher 安装 etcd 集群,请参阅etcd 设置指南

3、运行 RKE#

rke up --config ./rancher-cluster.yml

完成后,它应该以这样一行结束: Finished building Kubernetes cluster successfully.

4、测试集群#

本节介绍如何在您的工作区进行设置,以便您可以在本地使用kubectl命令行工具与此集群进行交互。

如果您已经安装了kubectl,您需要将kubeconfig文件放置在kubectl可以访问的位置。kubeconfig文件包含使用kubectl访问集群所必需的凭证。

当您运行 rke up 时,RKE 应该已经创建了一个名为kube_config_rancher-cluster.ymlkubeconfig文件。该文件具有kubectlhelm的凭据。

注意: 如果您使用了与rancher-cluster.yml不同的文件名,则 kubeconfig 文件将命名为kube_config_<FILE_NAME>.yml

您可以将此文件复制到$HOME/.kube/config,或者如果您使用多个 Kubernetes 集群,请将KUBECONFIG环境变量设置为kube_config_rancher-cluster.yml的路径:

export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml

使用kubectl测试您的连通性,并查看您的所有节点是否都处于Ready状态:

kubectl get nodes
NAME STATUS ROLES AGE VERSION
165.227.114.63 Ready controlplane,etcd,worker 11m v1.13.5
165.227.116.167 Ready controlplane,etcd,worker 11m v1.13.5
165.227.127.226 Ready controlplane,etcd,worker 11m v1.13.5

5、检查集群 Pod 的运行状况#

检查所有必需的 Pod 和容器是否状况良好,然后可以继续进行。

  • Pod 是RunningCompleted状态。
  • STATUSRunning 的 Pod,READY 应该显示所有容器正在运行 (例如,3/3)。
  • STATUSCompleted的 Pod 是一次运行的作业。对于这些 Pod,READY应为0/1
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx nginx-ingress-controller-tnsn4 1/1 Running 0 30s
ingress-nginx nginx-ingress-controller-tw2ht 1/1 Running 0 30s
ingress-nginx nginx-ingress-controller-v874b 1/1 Running 0 30s
kube-system canal-jp4hz 3/3 Running 0 30s
kube-system canal-z2hg8 3/3 Running 0 30s
kube-system canal-z6kpw 3/3 Running 0 30s
kube-system kube-dns-7588d5b5f5-sf4vh 3/3 Running 0 30s
kube-system kube-dns-autoscaler-5db9bbb766-jz2k6 1/1 Running 0 30s
kube-system metrics-server-97bc649d5-4rl2q 1/1 Running 0 30s
kube-system rke-ingress-controller-deploy-job-bhzgm 0/1 Completed 0 30s
kube-system rke-kubedns-addon-deploy-job-gl7t4 0/1 Completed 0 30s
kube-system rke-metrics-addon-deploy-job-7ljkc 0/1 Completed 0 30s
kube-system rke-network-plugin-deploy-job-6pbgj 0/1 Completed 0 30s

这确认您已经成功安装了可以运行 Rancher Server 的 Kubernetes 集群。

6、保存文件#

重要

需要用以下文件来进行集群维护,集群升级和故障排查。

将以下文件的副本保存在安全的位置:

  • rancher-cluster.yml: RKE 集群配置文件。
  • kube_config_rancher-cluster.yml: 集群的Kubeconfig 文件,此文件包含用于访问集群的凭据。
  • rancher-cluster.rkestate: Kubernetes 集群状态文件,此文件包含用于完全访问集群的凭据。Kubernetes 集群状态文件仅在使用 RKE v0.2.0 或更高版本时创建。

注意: 后两个文件名的“rancher-cluster”部分取决于您如何命名 RKE 集群的配置文件。

遇到问题或错误?#

请参阅故障排查页面。

下一步:安装 Rancher#

Last updated on by kingsd041