rancher ha集群搭建步骤:系统配置、docker安装、k8s安装、rancher ha安装等。node
10.0.0.0/16(B类 CIDR 块, 包含 65536 个私有 IP 地址的网络)linux
10.0.0.0/24(256个地址 https://blog.csdn.net/vistas_...)docker
附加到VPC,子网路由指向该网关使子网成为公共子网能够与Intenet链接ubuntu
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安全
建立三个EC2实例 (aws t2.large - 2 cpu 8 ram)
能够先建一个配好软件,create image 复制到另外两个(http://jafty.com/blog/how-to-...)服务器
并安装最新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
咱们目前有三台服务器用做 local 集群,首先要确保咱们主机可以经过 ssh 访问到另外两台主机并执行相关操做。好比执行 docker 命令负载均衡
# 根据需求配置相关信息生成 rsa 公钥密钥 ssh-keygen # 复制当前主机上的公钥到包括本身的三台服务器上面,实现免密码登陆 ssh-copy-id -i ~/.ssh/id_rsa.pub user@x.x.x.x
这里使用ec2-s1节点管理整个集群ssh
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
# 下载目前最新版 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
k8s包管理工具
sudo snap install helm --classic
到rancher ha( Amazon NLB https://www.cnrancher.com/doc...)
从技术上讲,只须要端口443来访问Rancher,可是一般咱们建议把让80端口也监听,它将自动重定向到端口443。节点上的NGINX控制器将确保端口80被重定向到端口443。
登陆Amazon AWS Console,肯定EC2实例(Linux节点)建立的区域。
目标组配置位于EC2服务的负载平衡部分,选择服务并选择EC2,找到负载平衡部分并打开目标组:
单击“ 建立目标组”以建立有关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
单击“ 建立目标组”以建立有关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
接下来,将Linux节点添加到两个目标组。选择名为rancher-tcp-443的目标组,单击选项卡Targets并选择Edit。
选择要添加的实例(Linux节点),而后单击“ 添加到注册”。
添加实例后,单击屏幕右下角的“ 保存 ”。重复这些步骤,注册rancher-TCP-80。
一、浏览器访问Amazon EC2 Console;
二、从导航窗格中,选择LOAD BALANCING> Load Balancers;
三、点击 Create Load Balancer;
四、选择 Network Load Balancer 并点击Create;
五、配置负载均衡配置:
• Name: rancher • Scheme: internet-facing • 监听: 在下面添加负载均衡器协议和负载均衡器端口。 ○ TCP: 443 • 可用区域 ○ 选择您的VPC和可用区
六、配置路由表.
• 从“ 目标组”下拉列表中,选择“ 现有目标组” • 从“ 名称”下拉列表中选择rancher-tcp-443。 • 打开高级运行情况检查设置,并将Interval配置为10 seconds;
七、注册目标.
由于以前注册了目标,因此只需单击下一步:查看;
八、验证. 查看负载均衡器详细信息,确认无误后单击建立。
九、AWS建立NLB后,单击“ 关闭”。
1. 选择新建立的NLB并选择Listeners选项; 2. 点击 Add listener; 3. Protocol和Port分别选择TCP:80; 4. 点击Add action并选择Forward to…; 5. 经过Forward to的下拉列表, 选择rancher-tcp-80; 6. 单击屏幕右上角的“ 保存 ”。
使用下面的示例建立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
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
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
当排除故障、升级群集时须要用到如下文件,请将其副本保存在一个安全的位置。
rancher-cluster.yml:RKE集群配置文件。
kube_config_rancher-cluster.yml:群集的Kubeconfig文件,此文件包含彻底访问群集的凭据。
rancher-cluster.rkestate:Kubernetes群集状态文件,此文件包含彻底访问群集的凭据。
一开始,咱们安装了 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
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/rancherWaiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...deployment "rancher" successfully rolled out