rancher ha 集群搭建步骤:系统配置、docker 安装、k8s 安装、rancher ha 安装等。
1 搭建网络空间
1.1 创建 vpc
10.0.0.0/16(B 类 CIDR 块, 包含 65536 个私有 IP 地址的网络)
1.2 创建子网
10.0.0.0/24(256 个地址 https://blog.csdn.net/vistas_…)
1.3 创建 Internet 网关
附加到 VPC,子网路由指向该网关使子网成为公共子网可以与 Intenet 连接
Rancher server 端部署图
图 1 Rancher server 端部署图
表 1 服务器环境信息
节点名称 | 内网 IP | 公网 IP |OS | 安装软件
AWS-NLB| – |xxx.com| – | –
ec2-s1 |10.0.0.1|x.x.x.x|Ub18.04|etcd, docker, k8s, Kubectl,rke,helm
ec2-s2 |10.0.0.2|x.x.x.x|Ub18.04|etcd, docker, k8s
ec2-s3 |10.0.0.3|x.x.x.x|Ub18.04|etcd, docker, k8s
2 创建实例
2.1 准备
创建三个 EC2 实例 (aws t2.large – 2 cpu 8 ram)
可以先建一个配好软件,create image 复制到另外两个(http://jafty.com/blog/how-to-…)
2.2 安装软件
2.2.1 docker-ce(每台机器)
并安装最新 stable 版 docker-ce:18.09.6
# 删除旧版本 docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新 apt
sudo apt-get update
# 安装工具包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 添加 Docker 官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加 stable apt 源
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 安装 Docker CE
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 将当前用户加入 "docker" 用户组,加入到该用户组的账号在随后安装过程会用到。用于节点访问的 SSH 用户必须是节点上 docker 组的成员:sudo usermod -aG docker $USER
2.3 NODE-SERVER 之间建立 ssh 信任
我们目前有三台服务器用作 local 集群,首先要确保我们主机能够通过 ssh 访问到另外两台主机并执行相关操作。比如执行 docker 命令
# 根据需求配置相关信息生成 rsa 公钥密钥
ssh-keygen
# 复制当前主机上的公钥到包括自己的三台服务器上面,实现免密码登录
ssh-copy-id -i ~/.ssh/id_rsa.pub user@x.x.x.x
3 在一台电脑上准备安装工具
这里使用 ec2-s1 节点管理整个集群
3.1 安装 kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
3.2 RKE
# 下载目前最新版
wget https://www.cnrancher.com/download/rke/v0.2.7-rke_linux-amd64
# 设置执行权限
chmod +x v0.2.7-rke_linux-amd64
# 将其移动到 /usr/locak/bin/kubectl
sudo cp v0.2.7-rke_linux-amd64 /usr/local/bin/rke
# 验证安装 rke --version
# rke version v0.2.7
3.3 HELM
k8s 包管理工具
sudo snap install helm --classic
4 四层负载均衡服务器
到 rancher ha(Amazon NLB https://www.cnrancher.com/doc…)
4.1 创建目标组
从技术上讲,只需要端口 443 来访问 Rancher,但是通常我们建议把让 80 端口也监听,它将自动重定向到端口 443。节点上的 NGINX 控制器将确保端口 80 被重定向到端口 443。
登录 Amazon AWS Console, 确定 EC2 实例 (Linux 节点) 创建的区域。
目标组配置位于 EC2 服务的负载平衡部分,选择服务并选择 EC2,找到负载平衡部分并打开目标组:
4.1.1 目标组(TCP443 端口)
单击“创建目标组”以创建有关 TCP 端口 443 的第一个目标组。根据下表配置第一个目标组,配置截图显示在表格下方。
设置选项 | 设置值
Target Group Name | rancher-tcp-443
Protocol | TCP
Port | 443
Target type | instance
VPC | 选择您的 VPC
Protocol | HTTP
(Health Check)
Path /healthz
(Health Check)
Port (Advanced health check) override,80
Healthy threshold (Advanced health) 3
Unhealthy threshold (Advanced) 3
Timeout (Advanced) 6 seconds
Interval (Advanced) 10 second
Success codes 200-399
4.1.2 目标组(TCP80 端口)
单击“创建目标组”以创建有关 TCP 端口 80 的第二个目标组。
根据下表配置第二个目标组,配置截图显示在表格下方。
设置选项 设置值
Target Group Name rancher-tcp-80
Protocol TCP
Port 80
Target type instance
VPC 选择您的 VPC
Protocol HTTP
(Health Check)
Path /healthz
(Health Check)
Port (Advanced health check) traffic port
Healthy threshold (Advanced health) 3
Unhealthy threshold (Advanced) 3
Timeout (Advanced) 6 seconds
Interval (Advanced) 10 second
Success codes 200-399
4.2 注册目标
接下来,将 Linux 节点添加到两个目标组。选择名为 rancher-tcp-443 的目标组,单击选项卡 Targets 并选择 Edit。
选择要添加的实例(Linux 节点),然后单击“添加到注册”。
添加实例后,单击屏幕右下角的“保存”。重复这些步骤,注册 rancher-TCP-80。
4.3 创建 NLB
1、浏览器访问 Amazon EC2 Console;
2、从导航窗格中,选择 LOAD BALANCING> Load Balancers;
3、点击 Create Load Balancer;
4、选择 Network Load Balancer 并点击 Create;
5、配置负载均衡配置:
• Name: rancher
• Scheme: internet-facing
• 监听: 在下面添加负载均衡器协议和负载均衡器端口。○ TCP: 443
• 可用区域
○ 选择您的 VPC 和可用区
6、配置路由表.
• 从“目标组”下拉列表中,选择“现有目标组”• 从“名称”下拉列表中选择 rancher-tcp-443。• 打开高级运行状况检查设置,并将 Interval 配置为 10 seconds;
7、注册目标.
因为之前注册了目标,所以只需单击下一步: 查看;
8、验证. 查看负载均衡器详细信息,确认无误后单击创建。
9、AWS 创建 NLB 后,单击“关闭”。
4.4 添加 TCP80 端口到 NLB 监听
1. 选择新创建的 NLB 并选择 Listeners 选项;
2. 点击 Add listener;3. Protocol 和 Port 分别选择 TCP:80;4. 点击 Add action 并选择 Forward to…;5. 通过 Forward to 的下拉列表, 选择 rancher-tcp-80;6. 单击屏幕右上角的“保存”。
5 部署 K8S
5.1 创建 rancher-cluster.yml 文件
使用下面的示例创建 rancher-cluster.yml 文件,使用创建的 3 个节点的 IP 地址或域名替换列表中的 IP 地址。
注意: 如果节点有公网地址 和 内网地址地址,建议手动设置 internal_address: 以便 Kubernetes 将内网地址用于集群内部通信。如果需要开启自动配置安全组或防火墙,某些服务 (如 AWS EC2) 需要设置 internal_address:。
这里需要注意,这个文件没有明确配置 rsa 文件名,默认会使用 $HOME/.ssh/id_rsa 建立连接。内容如下
nodes:
- address: ec2-34-252-87-159.eu-west-1.compute.amazonaws.com
internal_address: 10.0.0.46
user: ubuntu
role: [controlplane,worker,etcd]
- address: ec2-52-19-95-163.eu-west-1.compute.amazonaws.com
internal_address: ec2-34-252-87-159.eu-west-1.compute.amazonaws.com
user: ubuntu
role: [controlplane,worker,etcd]
- address: ec2-34-245-114-127.eu-west-1.compute.amazonaws.com
internal_address: 10.0.0.16
user: ubuntu
role: [controlplane,worker,etcd]
services:
etcd:
snapshot: true
creation: 6h
retention: 24h
5.2 运行 RKE 构建 kubernetes 集群
rke up --config ./rancher-cluster.yml
# 验证:返回类似下面的消息则说明执行成功
# Finished building Kubernetes cluster successfully.
执行成功会在当前目录生成一个文件 kube_config_rancher-cluster.yml,将该文件复制到 .kube/kube_config_rancher-cluster.yml。
或者
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
5.3 测试集群
kubectl get nodes
# 返回下面信息说明集群创建成功
NAME STATUS ROLES AGE VERSION
168.168.168.6 Ready controlplane,etcd,worker 13m v1.13.5
168.168.168.7 Ready controlplane,etcd,worker 13m v1.13.5
168.168.168.8 Ready controlplane,etcd,worker 13m v1.13.5
5.4 保存好相关配置文件
当排除故障、升级群集时需要用到以下文件,请将其副本保存在一个安全的位置。
rancher-cluster.yml:RKE 集群配置文件。
kube_config_rancher-cluster.yml:群集的 Kubeconfig 文件,此文件包含完全访问群集的凭据。
rancher-cluster.rkestate:Kubernetes 群集状态文件,此文件包含完全访问群集的凭据。
5.6 初始化 Helm
一开始,我们安装了 Helm(客户端),Helm 是 Kubernetes 首选的包管理工具。为了能够使用 Helm,需要在群集上安装服务器端组件 tiller。
Helm installs the tiller service on your cluster to manage charts. Since RKE enables RBAC by default we will need to use kubectl to create a serviceaccount and clusterrolebinding so tiller has permission to deploy to the cluster.
Kubernetes APIServer 开启了 RBAC 访问控制,所以需要创建 tiller 使用的 service account: tiller 并分配合适的角色给它。
• Create the ServiceAccount in the kube-system namespace.
• Create the ClusterRoleBinding to give the tiller account access to the cluster.
• Finally use helm to install the tiller service
# 在 kube-system 命名空间下创建一个 serviceaccount , 并将角色绑定给 tiller
kubectl -n kube-system create serviceaccount tiller
# 创建 ClusterRoleBinding 以授予 tiller 帐户对集群的访问权限:kubectl create clusterrolebinding tiller \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:tiller
# 然后,heml 就可以在集群上安装 tiller 了
helm init --service-account tiller
# 输出:$HELM_HOME has been configured at /home/ubuntu/.helm.
测试 tiller 安装是否成功
kubectl -n kube-system rollout status deploy/tiller-deploy
# 输出 deployment "tiller-deploy" successfully rolled out
helm version
# Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
# Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fb
6 安装 Rancher
Rancher relies on cert-manager version v0.5.2 from the official Kubernetes Helm chart repository to issue certificates from Rancher’s own generated CA or to request Let’s Encrypt certificates.
Install cert-manager from Kubernetes Helm chart repository.
helm install stable/cert-manager \
--name cert-manager \
--namespace kube-system
Wait for cert-manager to be rolled out:
kubectl -n kube-system rollout status deploy/cert-manager
Waiting for deployment “cert-manager” rollout to finish: 0 of 1 updated replicas are available…
deployment “cert-manager” successfully rolled out
Rancher Generated Certificates
NOTE:You need to have cert-manager installed before proceeding.
The default is for Rancher to generate a CA and uses cert-manager to issue the certificate for access to the Rancher server interface. Because rancher is the default option for ingress.tls.source, we are not specifying ingress.tls.source when running the helm install command.
• Set the hostname to the DNS name you pointed at your load balancer.
helm install rancher-latest/rancher \
--name rancher \
--namespace cattle-system \
--set hostname=rancher.my.org
Wait for Rancher to be rolled out:
kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment “rancher” rollout to finish: 0 of 3 updated replicas are available…
deployment “rancher” successfully rolled out