1. 程式人生 > >rancher 2.2.X HA 部署K8S

rancher 2.2.X HA 部署K8S

介紹

本文主要目的在於記錄rancher ha叢集搭建步驟,內容包括系統配置、docker安裝、k8s安裝、rancher ha安裝等。

伺服器環境資訊:

節點名稱 IP OS 安裝軟體
Master 192.168.100.22 Centos7.6 nginx
Node1 192.168.100.31 Centos7.6 etcd, docker, k8s
Node2 192.168.100.32 Centos7.6 etcd, docker, k8s
Node3 192.168.100.33 Centos7.6 etcd, docker, k8s

環境設定

作業系統檔案限制

vi /etc/security/limits.conf
在檔案末尾新增以下內容:

1
2
3
4
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350

 

關閉防火牆

1
2
systemctl stop firewalld
systemctl disable firewalld

關閉setlinx

SELINUX值設定為disabled:

1
2
vim /etc/selinux/config
SELINUX=disabled

 

關閉swap

註釋或刪除swap交換分割槽:vi /etc/fstab

1
2
3
4
5
6
7
8
9
10
11
#
# /etc/fstab
# Created by anaconda on Fri Jun  2 14:11:50 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=f5b4435a-77bc-48f4-8d22-6fa55e9e04a2 /boot                   xfs     defaults        0 0
/dev/mapper/centos-grid0 /grid0                  xfs     defaults        0 0
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

 

臨時關閉:

1
swapoff -a

 

kernel調優

新增如下內容,vi /etc/sysctl.conf:

1
2
3
4
5
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

 

docker安裝

rke工具目前只支援docker v17.03.2,請務必保持版本一致,否則後續安裝會報錯。

1、安裝repo源:

1
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

解除安裝舊docker版本:

1
2
3
4
5
6
7
8
9
10
11
yum remove -y docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-selinux \
              docker-engine-selinux \
              docker-engine \
              container*

 

2、安裝自定義版本

1
export docker_version=17.03.2

 

3、安裝必要的一些系統工具

1
yum install -y yum-utils device-mapper-persistent-data lvm2 bash-completion

 

4、新增軟體源資訊

1
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

5、安裝docker-ce

1
2
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}')
yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version}

 

6、開機自啟動

1
systemctl enable docker

 

7、新增國內加速代理,設定storage-driver
vi /etc/docker/daemon.json

{
        "max-concurrent-downloads": 3,
        "max-concurrent-uploads": 5,
        "registry-mirrors": ["https://oegbalmw.mirror.aliyuncs.com"],
        "insecure-registries":["192.168.0.253:5000"],
        "storage-driver": "overlay2",
        "storage-opts": ["overlay2.override_kernel_check=true"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "100m",
            "max-file": "3"
        }
}

######

容器在執行時會產生大量日誌檔案,很容易佔滿磁碟空間。通過配置日誌驅動來限制檔案大小與檔案的數量。 >限制單個日誌檔案為100M,最多產生3個日誌檔案
-------------

配置Docker儲存驅動

儲存驅動有很多種,例如:overlay、overlay2、devicemapper等,前兩者是OverlayFS型別的,是一個新一代的聯合檔案系統,類似於AUFS,但速度更快,更加穩定。這裡推薦新版的overlay2。

要求:

overlay2: Linux核心版本4.0或更高版本,或使用核心版本3.10.0-514+的RHEL或CentOS
支援的磁碟檔案系統:ext4(僅限RHEL 7.1),xfs(RHEL7.2及更高版本),需要啟用d_type=true

 

8、重啟docker

1
systemctl restart docker

 

建立使用者

建立使用者並且新增到docker組:

1
useradd rancher -G docker

 

修改hosts(所有節點)

vi /etc/hosts

192.168.100.31 k8s-node1
192.168.100.32 k8s-node2
192.168.100.33 k8s-node3

ssh免密登入(centos7 系統需要手工用rancher使用者去建立authorized_keys,且包含所有節點金鑰再裡面,Ubuntu則不用這樣)

在31-33伺服器上執行下面命令:

1
2
3
4
5
#在所有節點主機上執行
su - rancher
ssh-keygen -t rsa ##一直回車鍵就好
再免密登入機器上執行以下
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]

 

可能root使用者也需要ssh免密登入,命令參考:

1
2
3
4
5
su - root
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]

把非root使用者加入docker使用者組

sudo usermod -aG docker rancher
sudo systemctl restart docker
sudo chmod a+rw /var/run/docker.sock

注:USERNAME填寫自己的使用者名稱 
注:因為CentOS的安全限制,通過RKE安裝K8S叢集時候無法使用root賬戶。所以,建議CentOS使用者使用非root使用者來執行docker

nginx安裝

在192.168.100.22伺服器上安裝nginx使用者rancher-server負載均衡。

安裝nginx:

1
2
3
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx -y
sudo systemctl enable nginx.service #設定開機啟動

 

修改配置檔案:vim /etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
user nginx;
worker_processes 4;
worker_rlimit_nofile 40000;

events {
    worker_connections 8192;
}

http {
    # Gzip Settings
    gzip on;
    gzip_disable "msie6";
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_vary on;
    gzip_static on;
    gzip_proxied any;
    gzip_min_length 0;
    gzip_comp_level 8;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml application/font-woff text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype application/x-font-ttf application/vnd.ms-fontobject font/woff2 image/x-icon image/png image/jpeg;

    server {
        listen         80;
        return 301 https://$host$request_uri;
    }
}

stream {
    upstream rancher_servers {
        least_conn;
        server 192.168.100.31:443 max_fails=3 fail_timeout=5s;
        server 192.168.100.32:443 max_fails=3 fail_timeout=5s;
        server 192.168.100.33:443 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     443;
        proxy_pass rancher_servers;
    }
}

 

啟動nginx:

1
sudo systemctl restart nginx.service

 

Rancher叢集部署

安裝必要工具

在192.168.100.31伺服器上進行下面操作。
安裝rke:

1
2
3
4
su root
wget https://github.com/rancher/rke/releases/download/v0.1.18/rke_linux-amd64
chmod +x rke_linux-amd64
mv rke_linux-amd64 /usr/bin/rke

 

安裝kubectl:

1
2
3
wget https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl
# 需要翻牆下載
chmod +x kubectl_amd64-linux
mv kubectl_amd64-linux /usr/bin/kubectl

 

安裝helm:

1
2
3
4
5
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gz
tar zxvf helm-v2.11.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/helm
mv linux-amd64/tiller /usr/bin/tiller
rm -rf helm-v2.11.0-linux-amd64.tar.gz linux-amd64/

 

其它工具下載地址:https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/download/

 

安裝k8s

1、切換到rancher使用者

1
su - rancher

 

2、建立rancher叢集配置檔案:
vi rancher-cluster.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nodes:
  - address: 192.168.100.31
    user: rancher
    role: [controlplane,worker,etcd]
  - address: 192.168.100.32
    user: rancher
    role: [controlplane,worker,etcd]
  - address: 192.168.100.33
    user: rancher
    role: [controlplane,worker,etcd]

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

 

如果之前操作失敗,重新安裝需要清理資料:

1
2
3
4
5
su - root
rm -rf /var/lib/rancher/etcd/*
rm -rf /etc/kubernetes/*
su - rancher
rke remove --config ./rancher-cluster.yml

 

3、啟動叢集

1
rke up --config ./rancher-cluster.yml

 

這裡有跳坑資料 http://www.eryajf.net/2675.html

完成後,它應顯示:Finished building Kubernetes cluster successfully。

4、配置環境變數:
切換到root使用者su - root

vi /etc/profile

1
export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml

 

儲存,並執行:

1
source /etc/profile

 

5、通過kubectl測試您的連線,並檢視您的所有節點是否處於Ready狀態

1
2
3
4
5
[rancher@bigman-s1 ~]$ kubectl get nodes
NAME             STATUS   ROLES                      AGE   VERSION
192.168.100.31   Ready    controlplane,etcd,worker   3m    v1.11.6
192.168.100.32   Ready    controlplane,etcd,worker   3m    v1.11.6
192.168.100.33   Ready    controlplane,etcd,worker   3m    v1.11.6

 

由於需要聯網下載docker映象檔案,所以需要一段時間才能安裝好,10-30分鐘左右。

6、檢查叢集Pod的執行狀況

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[rancher@bigman-s1 ~]$ kubectl get pods --all-namespaces
NAMESPACE       NAME                                      READY   STATUS      RESTARTS   AGE
ingress-nginx   default-http-backend-797c5bc547-z4gj5     1/1     Running     0          3m
ingress-nginx   nginx-ingress-controller-bvgxm            1/1     Running     0          3m
ingress-nginx   nginx-ingress-controller-rjrss            1/1     Running     0          3m
ingress-nginx   nginx-ingress-controller-z5nmf            1/1     Running     0          3m
kube-system     canal-cwb9g                               3/3     Running     0          4m
kube-system     canal-lnvmt                               3/3     Running     0          4m
kube-system     canal-xfft6                               3/3     Running     0          4m
kube-system     kube-dns-7588d5b5f5-5lql6                 3/3     Running     0          4m
kube-system     kube-dns-autoscaler-5db9bbb766-qlskd      1/1     Running     0          4m
kube-system     metrics-server-97bc649d5-vx7p7            1/1     Running     0          4m
kube-system     rke-ingress-controller-deploy-job-ghz5d   0/1     Completed   0          3m
kube-system     rke-kubedns-addon-deploy-job-snkfq        0/1     Completed   0          4m
kube-system     rke-metrics-addon-deploy-job-kzlwb        0/1     Completed   0          4m
kube-system     rke-network-plugin-deploy-job-4f8ms       0/1     Completed   0          4m

 

儲存kube_config_rancher-cluster.yml和rancher-cluster.yml檔案的副本,您將需要這些檔案來維護和升級Rancher例項。

Helm

使用Helm在叢集上安裝tiller服務以管理charts,由於RKE預設啟用RBAC, 因此我們需要使用kubectl來建立一個serviceaccount,clusterrolebinding才能讓tiller具有部署到叢集的許可權。

1、在kube-system名稱空間中建立ServiceAccount:

1
kubectl -n kube-system create serviceaccount tiller

 

2、建立ClusterRoleBinding以授予tiller帳戶對叢集的訪問許可權:

1
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

 

3、安裝Helm Server(Tiller)

1
helm init --service-account tiller   --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

 

4、安裝Tiller金絲雀版本

1
helm init --service-account tiller --canary-image

 

需要修改成國內映象(可能需要delete再重新init)

1
2
export TILLER_TAG=v2.12.0 ;
kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=hongxiaolu/tiller:$TILLER_TAG

 

helm安裝rancher

新增Chart倉庫地址

使用helm repo add命令新增Rancher chart倉庫地址,訪問Rancher tag和Chart版本
替換為您要使用的Helm倉庫分支(即latest或stable)。

1
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

 

安裝證書管理器

1、只有Rancher自動生成的證書和LetsEncrypt頒發的證書才需要cert-manager。如果是你自己的證書,可使用ingress.tls.source=secret引數指定證書,並跳過此步驟。

1
2
3
helm install stable/cert-manager \
  --name cert-manager \
  --namespace kube-system

 

Rancher自動生成證書
預設情況下,Rancher會自動生成CA根證書並使用cert-manager頒發證書以訪問Rancher server介面。
唯一的要求是將hostname配置為訪問Rancher的域名地址,使用這種SSL證書配置方式需提前安裝證書管理器。

1
2
3
4
helm install rancher-stable/rancher \
  --name rancher \
  --namespace cattle-system \
  --set hostname=hi.rancher.cn

 

hi.rancher.cn就是後面訪問rancher的域名,需要在/etc/hosts檔案中新增關聯(所有主機):

vi /etc/hosts

1
192.168.100.22 hi.rancher.cn

 

由於我們通過hosts檔案來新增對映,所以需要為Agent Pod新增主機別名(/etc/hosts):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
kubectl -n cattle-system patch  deployments cattle-cluster-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "hi.rancher.cn"
                        ],
                            "ip": "192.168.100.22"
                    }
                ]
            }
        }
    }
}'

這一步如果馬上執行,可能會報錯:Error from server (NotFound): deployments.extensions "cattle-cluster-agent" not found,這個deployment是上一步install時建立的,比較慢,耐心等待一下,這個時候也可以先跳過這裡,去到後邊,簡單配置一下,訪問一下rancher的介面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
kubectl -n cattle-system patch  daemonsets cattle-node-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "hi.rancher.cn"
                        ],
                            "ip": "192.168.100.22"
                    }
                ]
            }
        }
    }
}'

登入rancher管理端

1、需要在/etc/hosts檔案中新增關聯(所有主機):
vi /etc/hosts

1
192.168.100.22 hi.rancher.cn

 

2、使用域名登入https://hi.rancher.cn

rancher

輸入:admin/admin,設定使用者密碼。

3、登入之後,此時可以看到已經建立好的k8s叢集

rancher

剛進入,會看到一個問題。

報這個問題的原因就是剛剛建立的cattle-cluster-agent還沒有被建立成功,同樣耐心等待即可。這個時候可以隨便點點看看先。這個過程與自己的網路有關,這時也可以在node1主機上,通過如下命令進行一個監控。

在我這裡,等了十分鐘左右,才開始正式的部署。這個時候,可以返回到上邊,將那兩條命令匯入進去。

操作之後,然後再看rancher,就不會報連線問題了。

到這裡,基本上安裝步驟也就完成了,可以隨便點點看看介面裡邊的各項功能什麼的。

安裝rancher-cli

1、下載rancher-cli工具

1
2
wget https://releases.rancher.com/cli2/v2.0.6/rancher-linux-amd64-v2.0.6.tar.gz
tar zxvf rancher-linux-amd64-v2.0.6.tar.gz

 

2、配置變數

1
2
mv rancher-v2.0.6/rancher /usr/bin/rancher
rm -rf rancher-v2.0.6/

 

3、測試登入

新建使用者獲取tonken:
rancher-key

使用建立好的使用者token登入:

1
rancher login https://hi.rancher.cn/v3  --token token-jpf2f:sjmptntdn6k7rf9mqz7k7c9w77q6pfxmxmr7fvtdjwswbprpjhzvq8

 

其它幫助

docker xfs type問題

在執行docker info 命令時,如果你的檔案系統使用了xfs,那麼Docker會檢測ftype的值,如果ftype=0,那麼會有警告出現。
具體警告如下:

1
2
3
WARNING: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.
Reformat the filesystem with ftype=1 to enable d_type support.
Running without d_type support will not be supported in future releases.

 

這個問題需要解決,否則後續容器會出現異常退出等情況,具體docker為什麼這麼關係ftype值,可以去百度或者查閱官方文件。

由於docker預設是安裝在系統盤的,那麼重新格式化分割槽並掛盤肯定是行不通的,我這邊環境正好還有多餘的盤,所以講docker切換到新的分割槽,並將分割槽引數調成成ftype=1。

1、檢視分割槽資訊

1
2
3
4
5
6
7
8
[root@bigman-s1 ~]# df
檔案系統                     1K-塊     已用       可用 已用% 掛載點
devtmpfs                  32858088        0   32858088    0% /dev
tmpfs                     32871880        8   32871872    1% /dev/shm
tmpfs                     32871880    61024   32810856    1% /run
tmpfs                     32871880        0   32871880    0% /sys/fs/cgroup
/dev/mapper/centos-root  598661528 81105212  517556316   14% /
/dev/mapper/centos-grid0 1227397576 66398088 1160999488    6% /grid0

 

2、重新格式化磁碟(注意備份資料

1
2
3
4
umount /dev/mapper/centos-grid0
mkfs.xfs -n ftype=1 -f /dev/mapper/centos-grid0
mount /dev/mapper/centos-grid0 /grid0
xfs_info  /grid0

 

3、修改docker資料目錄
vi /usr/lib/systemd/system/docker.service

1
ExecStart=/usr/bin/dockerd --graph /grid0/docker

 

4、修改docker storage-driver驅動

1
2
3
4
5
6
7
{
  "registry-mirrors": ["https://39r65dar.mirror.aliyuncs.com"],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ]
}

 

5、重啟docker

1
2
3
4
5
systemctl disable docker
systemctl enable docker
systemctl daemon-reload
systemctl restart docker
docker info

 

docker本地倉庫

1、啟動本地倉庫服務:

1
docker run -d -p 5000:5000 --restart=always --name registry registry:2

 

2、修改配置
vi /etc/docker/daemon.json

1
2
3
4
5
6
7
8
{
  "registry-mirrors": ["https://39r65dar.mirror.aliyuncs.com","http://192.168.100.21:5000"],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ],
    "insecure-registries" : ["192.168.100.21:5000"]
}

 

參考資料:

http://www.eryajf.net/2723.html

http://www.eryajf.net/category/%E6%9C%AF%E4%B8%9A%E4%B8%93%E6%94%BB/%E4%BA%91%E8%AE%A1