rancher ha集群搭建步骤:系统配置、docker安装、k8s安装、rancher ha安装等。
1 搭建网络空间
1.1创建 vpc
10.0.0.0/16(B类 CIDR 块, 包含 65536 个私有 IP 地址的网络)
1.2创建子网
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 四层负载均衡服务器
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