Rancher2.x HA AWS 部署

rancher ha集羣搭建步驟:系統配置、docker安裝、k8s安裝、rancher ha安裝等。node

1 搭建網絡空間

1.1建立 vpc

10.0.0.0/16(B類 CIDR 塊, 包含 65536 個私有 IP 地址的網絡)linux

1.2建立子網

10.0.0.0/24(256個地址 https://blog.csdn.net/vistas_...docker

1.3建立Internet網關

附加到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安全

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節點管理整個集羣ssh

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

一、瀏覽器訪問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後,單擊「 關閉」。

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/rancherWaiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...deployment "rancher" successfully rolled out

相關文章
相關標籤/搜索