Rancher 2.4.4-高可用HA部署

事先準備:

Nginx,作為負載均衡使用。nginx需要有stream模塊

# 安裝過程略,配置文件如下
# 按需更換ip
[root@nginx ~]# cat /etc/nginx/nginx.conf
worker_processes auto;
worker_rlimit_nofile 40000;

events {
    worker_connections 8192;
}

stream {
    upstream rancher_servers_http {
        least_conn;
        server 10.0.0.30:80 max_fails=3 fail_timeout=5s;
        server 10.0.0.31:80 max_fails=3 fail_timeout=5s;
        server 10.0.0.32:80 max_fails=3 fail_timeout=5s;
    }
    server {
        listen 80;
        proxy_pass rancher_servers_http;
    }

    upstream rancher_servers_https {
        least_conn;
        server 10.0.0.30:443 max_fails=3 fail_timeout=5s;
        server 10.0.0.31:443 max_fails=3 fail_timeout=5s;
        server 10.0.0.32:443 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     443;
        proxy_pass rancher_servers_https;
    }

}

一、安裝kubernetes

1、初始化環境

1.1、關閉相關服務

# 關閉防火墻
systemctl stop firewalld
systemctl disable firewalld

# 關閉selinux
setenforce 0
grep SELINUX /etc/selinux/config
SELINUX=disabled

# 關閉swap
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1.2、主機名設置

cat > /etc/hosts << EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.30 rancher0
172.16.1.31 rancher1
172.16.1.32 rancher2
EOF

1.3、內核調優

# 文件打開數
echo -e  "root soft nofile 65535\nroot hard nofile 65535\n* soft nofile 65535\n* hard nofile 65535\n"     >> /etc/security/limits.conf
sed -i 's#4096#65535#g' /etc/security/limits.d/20-nproc.conf

# kernel
cat >> /etc/sysctl.conf<<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
vm.swappiness=0
vm.max_map_count=655360
EOF

1.4、創建用戶并分發秘鑰

# 在第一臺機器rancher0執行即可。
groupadd docker
useradd rancher -G docker
echo "123456" | passwd --stdin rancher
#授權
rancher ALL=(ALL)       NOPASSWD: ALL

su - rancher
ssh-keygen

ssh-copy-id rancher@172.16.1.30
ssh-copy-id rancher@172.16.1.31
ssh-copy-id rancher@172.16.1.32

1.5、安裝docker

# 1) 安裝必要的一些系統工具
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2) 添加軟件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3) 更新并安裝 Docker-CE
 yum makecache fast
 yum -y install docker-ce
 
# 4) 修改為國內鏡像源
mkdir /etc/docker
cat >> /etc/docker/daemon.json<<EOF
{
"registry-mirrors": ["https://7kmehv9e.mirror.aliyuncs.com"]
}
EOF

# 5) 開啟Docker服務并加入開機自啟
 systemctl start  docker
 systemctl enable  docker

2、使用rke安裝K8S集群(在第一臺機器(rancher0)執行)

2.1、安裝rke/kubectl/helm

下載rke文件并移動到/usr/sbin

[root@rancher0 ~]# wget https://github.com/rancher/rke/releases/download/v1.1.2/rke_linux-amd64 \
&& chmod +x rke_linux-amd64 \
&& mv rke_linux-amd64 /usr/bin/rke

安裝kubectl

[root@rancher0 ~]# wget https://docs.rancher.cn/download/kubernetes/linux-amd64-v1.18.3-kubectl \
&&  chmod +x linux-amd64-v1.18.3-kubectl \
&&  mv linux-amd64-v1.18.3-kubectl /usr/bin/kubectl

安裝helm

[root@rancher0 ~]# wget https://docs.rancher.cn/download/helm/helm-v3.0.3-linux-amd64.tar.gz \
&&   tar xf helm-v3.0.3-linux-amd64.tar.gz  \
&&   cd linux-amd64 \
&&   mv helm  /usr/sbin/

2.2、創建rke文件

[root@rancher0 opt]# su - rancher
[rancher@rancher0 ~]$ pwd
/home/rancher
[rancher@rancher0 ~]$ vim rancher-cluster.yml
nodes:
  - address: 10.0.0.30
    internal_address: 172.16.1.30
    user: rancher
    role: [controlplane, worker, etcd]
  - address: 10.0.0.31
    internal_address: 172.16.1.31
    user: rancher
    role: [controlplane, worker, etcd]
  - address: 10.0.0.32
    internal_address: 172.16.1.32
    user: rancher
    role: [controlplane, worker, etcd]

services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24h

# 當使用外部 TLS 終止,并且使用 ingress-nginx v0.22或以上版本時,必須。
ingress:
  provider: nginx
  options:
    use-forwarded-headers: "true"

常用RKE節點選項

選項 必填 描述
address 公用 DNS 或 IP 地址
user 可以運行 docker 命令的用戶
role 分配給節點的 Kubernetes 角色列表
internal_address 內部集群流量的專用 DNS 或 IP 地址
ssh_key_path 用于對節點進行身份驗證的 SSH 私鑰的路徑(默認為~/.ssh/id_rsa)

2.3、運行rke文件

[rancher@rancher0 ~]$ rke up --config ./rancher-cluster.yml

完成后,它應該以這樣一行結束: Finished building Kubernetes cluster successfully.

4、測試集群

#安裝kubectl
[root@rancher0 ~]# wget https://docs.rancher.cn/download/kubernetes/linux-amd64-v1.18.3-kubectl
[root@rancher0 ~]# chmod +x linux-amd64-v1.18.3-kubectl 
[root@rancher0 ~]# mv linux-amd64-v1.18.3-kubectl  /usr/sbin/kubectl


[rancher@rancher0 ~]$ mkdir -p /home/rancher/.kube                          
[rancher@rancher0 ~]$ cp kube_config_rancher-cluster.yml  $HOME/.kube/config

[rancher@rancher0 ~]$ kubectl get nodes
NAME        STATUS   ROLES                      AGE   VERSION
10.0.0.30   Ready    controlplane,etcd,worker   58m   v1.17.5
10.0.0.31   Ready    controlplane,etcd,worker   58m   v1.17.5
10.0.0.32   Ready    controlplane,etcd,worker   58m   v1.17.5

5、檢查集群狀態

  • Pod 是Running或Completed狀態。
  • STATUS 為 Running 的 Pod,READY 應該顯示所有容器正在運行 (例如,3/3)。
  • STATUS 為 Completed的 Pod 是一次運行的作業。對于這些 Pod,READY應為0/1。
[rancher@rancher0 ~]$ kubectl get pods --all-namespaces
NAMESPACE       NAME                                      READY   STATUS              RESTARTS   AGE
ingress-nginx   default-http-backend-67cf578fc4-v8jwc     0/1     ContainerCreating   0          58m
ingress-nginx   nginx-ingress-controller-k84wz            1/1     Running             0          58m
ingress-nginx   nginx-ingress-controller-psnkg            1/1     Running             0          58m
ingress-nginx   nginx-ingress-controller-sxlvw            1/1     Running             0          58m
kube-system     canal-b2h58                               2/2     Running             0          58m
kube-system     canal-qdxc2                               2/2     Running             0          58m
kube-system     canal-qtx47                               2/2     Running             0          58m
kube-system     coredns-7c5566588d-2tprw                  1/1     Running             0          58m
kube-system     coredns-7c5566588d-66k9h                  1/1     Running             0          55m
kube-system     coredns-autoscaler-65bfc8d47d-pmbv6       1/1     Running             0          58m
kube-system     metrics-server-6b55c64f86-qhpzg           1/1     Running             0          58m
kube-system     rke-coredns-addon-deploy-job-xkqxf        0/1     Completed           0          58m
kube-system     rke-ingress-controller-deploy-job-dndcq   0/1     Completed           0          58m
kube-system     rke-metrics-addon-deploy-job-kh9vv        0/1     Completed           0          58m
kube-system     rke-network-plugin-deploy-job-4k4wp       0/1     Completed           0          58m

6、保存配置文件

將以下文件的副本保存在安全的位置:

rancher-cluster.yml: RKE 集群配置文件。
kube_config_rancher-cluster.yml: 集群的Kubeconfig 文件,此文件包含用于訪問集群的憑據。
rancher-cluster.rkestate: Kubernetes 集群狀態文件,此文件包含用于完全訪問集群的憑據。

二、安裝rancher

1、安裝heml和kubectl

# kubectl
wget https://docs.rancher.cn/download/kubernetes/linux-amd64-v1.18.3-kubectl
chmod +x linux-amd64-v1.18.3-kubectl 
mv linux-amd64-v1.18.3-kubectl  /usr/share/kubectl

#heml
wget https://docs.rancher.cn/download/helm/helm-v3.0.3-linux-amd64.tar.gz

[rancher@rancher0 ~]$ tar xf helm-v3.0.3-linux-amd64.tar.gz 
[rancher@rancher0 ~]$ cd linux-amd64/
[rancher@rancher0 linux-amd64]$ sudo mv helm  /usr/sbin/

2、添加 Helm Chart 倉庫

[rancher@rancher0 linux-amd64]$ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
"rancher-stable" has been added to your repositories

3、為 Rancher 創建 Namespace

[rancher@rancher0 linux-amd64]$ kubectl create namespace cattle-system
namespace/cattle-system created

4、選擇證書

  • Rancher 生成的自簽名證書:在這種情況下,您需要在集群中安裝cert-manager。Rancher利用cert-manager簽發并維護證書。Rancher將生成自己的CA證書,并使用該CA簽署證書。然后,cert-manager負責管理該證書。
  • Let's Encrypt: Let's Encrypt 選項也需要使用cert-manager。但是,在這種情況下,cert-manager與特殊的 Issuer 結合使用,cert-manager將執行獲取Let'sEncrypt發行的證書所需的所有操作(包括申請和驗證)。此配置使用 HTTP驗證(HTTP-01),因此負載均衡器必須具有可以從公網訪問的公共 DNS 記錄。
  • 使用您自己的證書: 此選項使您可以使用自己的權威 CA 頒發的證書或自簽名 CA 證書。 Rancher將使用該證書來保護 WebSocket和HTTPS流量。在這種情況下,您必須上傳名稱分別為tls.crt和tls.key的PEM 格式的證書以及相關的密鑰。如果使用私有 CA,則還必須上傳該證書。這是由于您的節點可能不信任此私有CA。 Rancher 將獲取該 CA 證書,并從中生成一個校驗和,各種 Rancher組件將使用該校驗和來驗證其與Rancher的連接。

5、安裝 cert-manager

如果使用自己的證書文件 ingress.tls.source=secret或者使用外部 TLS 負載均衡器可以跳過此步驟。

# 安裝 CustomResourceDefinition 資源

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

# **重要:**
# 如果您正在運行 Kubernetes v1.15 或更低版本,
# 則需要在上方的 kubectl apply 命令中添加`--validate=false`標志,
# 否則您將在 cert-manager 的 CustomResourceDefinition 資源中收到與
# x-kubernetes-preserve-unknown-fields 字段有關的驗證錯誤。
# 這是一個良性錯誤,是由于 kubectl 執行資源驗證的方式造成的。

# 為 cert-manager 創建命名空間

kubectl create namespace cert-manager

# 添加 Jetstack Helm 倉庫

helm repo add jetstack https://charts.jetstack.io

# 更新本地 Helm chart 倉庫緩存

helm repo update

# 安裝 cert-manager Helm chart

helm install \
 cert-manager jetstack/cert-manager \
 --namespace cert-manager \
 --version v0.15.0

安裝完 cert-manager 后,您可以通過檢查 cert-manager 命名空間中正在運行的 Pod 來驗證它是否已正確部署:

kubectl get pods --namespace cert-manager

NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m

6、根據選擇的 SSL 選項,通過 Helm 安裝 Rancher

(其他方式可見官網)

  • 方式 A:使用 Rancher 生成的自簽名證書
-- 將hostname設置為您指向負載均衡器的 DNS 名稱。
-- 如果您在安裝 alpha 版本,需要把--devel 選項添加到下面到 Helm 命令中。
-- 要安裝指定版本的 Rancher,請使用--version選項,例如:--version 2.3.6。

域名加入host解析,每臺都要加入包括nginx和本地電腦

echo "172.16.1.29 rancher.com" >> /etc/hosts
helm install rancher rancher-stable/rancher \
 --namespace cattle-system \
 --set hostname=rancher.com

7、驗證 Rancher Server 是否已成功部署

檢查 Rancher Server 是否運行成功:

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

通過運行以下命令來檢查 deployment 的狀態:

kubectl -n cattle-system get deploy rancher
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rancher 3 3 3 3 3m

#DESIRED和AVAILABLE應該顯示相同的個數。

本地電腦host映射后,訪問:https://rancher.com完成登錄
若出現以下錯誤:

1.jpg

解決辦法:
由于我們通過hosts文件來添加映射,所以需要為Agent Pod添加主機別名(/etc/hosts):

kubectl -n cattle-system patch  deployments cattle-cluster-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "rancher.com"
                        ],
                            "ip": "10.0.0.29"
                    }
                ]
            }
        }
    }
}'
kubectl -n cattle-system patch  daemonsets cattle-node-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "rancher.com"
                        ],
                            "ip": "10.0.0.29"
                    }
                ]
            }
        }
    }
}'

詳細說明見官網:https://rancher2.docs.rancher.cn/docs/installation/k8s-install/_index

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容