RKE部署Kubernetes集群

警告
本文最后更新于 2022-07-01,文中内容可能已过时。

RKE是一款经过CNCF认证的开源Kubernetes发行版,可以在Docker容器内运行。它通过删除大部分主机依赖项,并为部署、升级和回滚提供一个稳定的路径,从而解决了Kubernetes最常见的安装复杂性问题。

1
2
3
4
5
useradd <user_name>
passwd <user_name>
usermod -aG docker <user_name>
su <user_name>
docker info
1
2
ssh-keygen
ssh-copy-id <user_name>@<节点IP>

注意,应使用能够操作docker的用户(非root)做免密。在这个例子中使用rancher用户。

RKE下载地址,此处下载更快

1
wget https://github.com/rancher/rke/releases/download/v1.1.3/rke_linux-amd64

Kubernetes集群组件在Linux系统上以docker容器的形式运行,您可以使用熟悉的Linux发行版,只要它可以满足Docker和Kubernetes的运行需要。

有两种简单的方法可以创建cluster.yml

  • 使用我们的最小rke配置cluster.yml并根据将使用的节点更新它;
  • 使用rke config向导式生成配置;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
./rke_linux-amd64 config

[+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]: 使用~/.ssh/id_rsa
[+] Number of Hosts [1]: 集群主机个数
[+] SSH Address of host (1) [none]: 主机1地址
[+] SSH Port of host (1) [22]: SSH端口
[+] SSH Private Key Path of host (10.180.210.237) [none]: 使用~/.ssh/id_rsa
[+] SSH User of host (10.180.210.237) [ubuntu]: SSH用户名,这里使用rancher
[+] Is host (10.180.210.237) a Control Plane host (y/n)? [y]: 是否运行Control Plane
[+] Is host (10.180.210.237) a Worker host (y/n)? [n]: 是否是worker
[+] Is host (10.180.210.237) an etcd host (y/n)? [n]: 是否运行etcd
[+] Override Hostname of host (10.180.210.237) [none]: 是否重设hostname
[+] Internal IP of host (10.180.210.237) [none]: 主机内部IP
[+] Docker socket path on host (10.180.210.237) [/var/run/docker.sock]: docker sock路径,使用默认
[+] SSH Address of host (2) [none]: 主机2的配置,后续配置相同,不再赘述
......
[+] Network Plugin Type (flannel, calico, weave, canal) [canal]: 网络插件类型
[+] Authentication Strategy [x509]: 认证策略
[+] Authorization Mode (rbac, none) [rbac]: 认证模式
[+] Kubernetes Docker image [rancher/hyperkube:v1.15.5-rancher1]: k8s镜像名
[+] Cluster domain [cluster.local]: 集群域名
[+] Service Cluster IP Range [10.43.0.0/16]: 集群内服务IP的范围
[+] Enable PodSecurityPolicy [n]: pod安全策略
[+] Cluster Network CIDR [10.42.0.0/16]: 集群网络范围
[+] Cluster DNS Service IP [10.43.0.10]: 集群DNS的IP
[+] Add addon manifest URLs or YAML files [no]: 是否增加插件manifest URL或配置文件

https://img.bwcxtech.com/img/20200928172509.png

官方示例 cluster.yml

1
rke config --name cluster.yml

如果需要空的cluster.yml模板,可以使用该--empty参数生成空模板。

1
rke config --empty --name cluster.yml

您可以使用--print参数将生成的配置打印到stdout,而不是创建文件。

1
rke config --print

RKE支持Kubernetes集群HA方式部署,您可以在cluster.yml文件中指定多个controlplane节点。RKE将在这些节点上部署master组件,并且kubelet配置为默认连接127.0.0.1:6443,这是nginx-proxy代理向所有主节点请求的服务的地址。

从v0.2.0版本起可用

默认情况下,Kubernetes 集群需要用到证书,而 RKE 会自动为所有集群组件生成证书。您也可以使用自定义证书。部署集群后,您可以管理这些自动生成的证书,详情请参考管理自动生成的证书

创建cluster.yml完成后,可以使用简单的命令部署集群。此命令假定该cluster.yml文件与运行该命令的目录位于同一目录中。

1
./rke_linux-amd64 up

在创建Kubernetes集群时会有日志语句。

1
2
3
4
5
6
7
./rke_darwin-amd64 up
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [10.0.0.1]
INFO[0000] [network] Deploying port listener containers
INFO[0000] [network] Pulling image [alpine:latest] on host [10.0.0.1]
...
INFO[0101] Finished building Kubernetes cluster successfully

当最后一行显示Finished building Kubernetes cluster successfully表示集群已部署完成。作为Kubernetes创建过程的一部分,已创建并编写了一个kubeconfig文件,该文件kube_config_cluster.yml用于与Kubernetes集群进行交互。 如果您使用了不同的cluster.yml文件名,则kube配置文件将以kube_config_<RKE_FILE_NAME>.yml命名

遇到FATA[0337] Failed to get job complete status for job rke-network-plugin-deploy-job in namespace kube-system错误,重新执行一遍./rke_linux-amd64 up即可

警告

后期的故障排除和集群升级都需要以下文件

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

  • cluster.yml:RKE 集群的配置文件。
  • kube_config_cluster.yml:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。
  • cluster.rkestateKubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。

Kubernetes集群状态由Kubernetes集群中的集群配置文件cluster.yml组件证书组成,由RKE生成,但根据您的RKE版本,集群状态的保存方式不同。

  • 在v0.2.0之前,RKE将Kubernetes集群状态保存为secret。更新状态时,RKE会提取secret更新/更改状态并保存新secret
  • 从v0.2.0开始,RKE在集群配置文件cluster.yml的同一目录中创建一个.rkestate文件。该.rkestate文件包含集群的当前状态,包括RKE配置和证书。需要保留此文件以更新集群或通过RKE对集群执行任何操作。
1
2
3
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
mv ./kubectl /usr/local/bin/kubectl

使用RKE创建Kubernetes集群时,RKE会在本地目录中创建一个包含认证信息的配置文件kube_config_rancher-cluster.yml,以使用kubectlhelm等工具连接到新集群。

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

1
2
mkdir $HOME/.kube/
cp kube_config_cluster.yml $HOME/.kube/config

测试您的连接,看看是否可以返回节点列表。

1
kubectl get nodes

先决条件:确保已安装 bash-autocompletion 并可以正常工作。

1
2
3
4
5
6
7
8
9
# 安装 bash-completion
apt-get install bash-completion
yum install bash-completion

# 将 completion 脚本添加到你的 ~/.bashrc 文件
echo 'source <(kubectl completion bash)' >>~/.bashrc

# 将 completion 脚本添加到 /etc/bash_completion.d 目录
kubectl completion bash >/etc/bash_completion.d/kubectl

相关内容