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