ncd-sc系統部署方案-rancher V2.2.6-HA部署[01]

1,準備工作。

1,主機準備。

本次部署所用機器均爲CentOS Linux release 7.6.1810 (Core)

節點名稱 IP 安裝組件
nginx 172.18.17.169 nginx用於四層負載均衡
server1 172.18.17.170 Rancker-server-node
server2 172.18.17.171 Rancker-server-node
server3 172.18.17.172 Rancker-server-node
worker1 172.18.17.180 Rancker-agent-node
worker2 172.18.17.181 Rancker-agent-node
worker3 172.18.17.182 Rancker-agent-node

4,推薦架構示意。

  • Rancher的DNS 應解析到 4層(TCP) 負載均衡上。
  • 負載均衡應將端口 TCP/80 和 TCP/443 轉發到 Kubernetes 集羣中的所有3個節點。
  • Ingress-controller 將 HTTP 重定向到HTTPS並終止端口 TCP/443 上的 SSL/TLS(SSL數字證書在這裏部署)。
  • Ingress-controller 將流量轉發到 pod 的 TCP/80 端口。

2,初始化環境。

初始化部分,三臺node機器都要操作。

1,關閉相關服務

  • 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld

關閉setlinx 

$ sudo setenforce 0
$ grep SELINUX /etc/selinux/config
SELINUX=disabled

關閉swap 

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

2,主機名等設置。

  • 設置永久主機名稱,然後重新登錄
$ sudo hostnamectl set-hostname ncd-sc-nginx              #172.18.17.169
$ sudo hostnamectl set-hostname ncd-sc-rancher-server1    #172.18.17.170
$ sudo hostnamectl set-hostname ncd-sc-rancher-server2    #172.18.17.171
$ sudo hostnamectl set-hostname ncd-sc-rancher-server3    #172.18.17.172
$ sudo hostnamectl set-hostname ncd-sc-rancher-node1      #172.18.17.180
$ sudo hostnamectl set-hostname ncd-sc-rancher-node2      #172.18.17.181
$ sudo hostnamectl set-hostname ncd-sc-rancher-node3      #172.18.17.182
  • 設置的主機名保存在 /etc/hosts 文件中(所有主機都改)
$ vi /etc/hosts

172.18.17.169 ncd-sc-nginx
172.18.17.170 ncd-sc-rancher-server1
172.18.17.171 ncd-sc-rancher-server2
172.18.17.172 ncd-sc-rancher-server3
172.18.17.180 ncd-sc-rancher-node1
172.18.17.181 ncd-sc-rancher-node2
172.18.17.182 ncd-sc-rancher-node3

3,操作系統及kernel調優

  • 文件打開數調優。
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

4,安裝一些基礎軟件。

yum -y install wget ntpdate lrzsz curl yum-utils device-mapper-persistent-data lvm2 bash-completion && ntpdate -u cn.pool.ntp.org

5,創建用戶等

  • 創建用戶並且添加到docker組
groupadd docker
useradd rancher -G docker
echo "123456" | passwd --stdin rancher

這一步非常重要,如果沒有操作,則後邊可能會有報錯等問題。

  • ssh免密登錄

server1服務器上執行下面命令:

su - rancher
ssh-keygen
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected] (三個node,可不需要此步)
ssh-copy-id [email protected] (三個node,可不需要此步)
ssh-copy-id [email protected] (三個node,可不需要此步)

#這中間會詢問是否YES/NO=YES,再輸入rancher用戶的密碼.進行server1連接其他機器

通過授權server1主機對三臺主機的免密碼登陸,爲後邊安裝k8s的步驟做好準備工作。

3,安裝docker。

需要在所有主機上一起安裝docker(以root執行)。

  • 1、RANCHER 官方SH方式安裝:
curl https://releases.rancher.com/install-docker/18.09.sh | sh
  • 2,卸載舊docker版本
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*
  • 3、rancher安裝Kubernetes支持的Dokcer版本:    推薦: 18.09.2 【20190910日版本-rancher V 2.2.8】
  • 4、啓動docker
systemctl enable docker
systemctl start docker
systemctl status docker
  • 5、添加國內加速代理,設置storage-driver
cat > /etc/docker/daemon.json << EOF
{
        "max-concurrent-downloads": 3,
        "max-concurrent-uploads": 5,
        "registry-mirrors": ["https://gbwjji4e.mirror.aliyuncs.com"],
        "insecure-registries":["172.18.17.169:5000"],
        "storage-driver": "overlay2",
        "storage-opts": ["overlay2.override_kernel_check=true"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "100m",
            "max-file": "3"
        }
}
EOF
  • registry-mirrors:表示公網的jia su qi 地址,可設置多個,地址需要添加協議頭(https或者http)
  • insecure-registries:表示內網的私服地址,地址不能添加協議頭(http)
  • storage-driver:表示使用OverlayFS的overlay2存儲驅動。

     

  • 6、重啓docker

systemctl daemon-reload
systemctl restart docker

4,安裝nginx。

在172.18.17.169服務器上安裝nginx,用於rancher-server負載均衡。

安裝nginx:

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

修改配置文件:

vi /etc/nginx/nginx.conf


user  nginx;
worker_processes 4;
worker_rlimit_nofile 40000;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  8192;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    # 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-fontobjectfont/woff2 image/x-icon image/png image/jpeg;

    include /etc/nginx/conf.d/*.conf;
}

cd  /etc/nginx/key (沒有KEY則 mkdir key 創建這個文件夾), 裏面放好rancher.ncd.ltd.crt和rancher.ncd.ltd.key 都是明文

cd /etc/nginx/conf.d

創建rancher.ncd.ltd.conf文件,內容如下:

upstream ups_rancher {
    least_conn;
    server 172.18.17.170:443 max_fails=3 fail_timeout=5s;
	server 172.18.17.171:443 max_fails=3 fail_timeout=5s;
	server 172.18.17.172:443 max_fails=3 fail_timeout=5s;
}

map $http_upgrade $connection_upgrade {
    default Upgrade;
    ''      close;
}

server {
	listen 443 ssl;
    server_name rancher.ncd.ltd;

	ssl_certificate /etc/nginx/key/rancher.ncd.ltd.crt;
    ssl_certificate_key /etc/nginx/key/rancher.ncd.ltd.key;
	
    access_log  /var/log/nginx/rancher.ncd.ltd.access.log  main;
		
    location / {
        proxy_pass       https://ups_rancher;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_connect_timeout   1200;            
        proxy_send_timeout      1200;     
       	proxy_read_timeout      1200;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;#"upgrade";
    }
    
}


server {
    listen 80;
    server_name rancher.ncd.ltd;
    return 301 https://$server_name$request_uri;
}
###nginx.ncd.ltd.conf 內容:

server {
    listen 80;
    server_name nginx.ncd.ltd;

    access_log  /var/log/nginx/nginx.ncd.ltd.access.log  main;
		
    location / {
        proxy_pass       http://nginx-ing.default.172.18.17.170.xip.io/; #rancher ingress地址
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_connect_timeout   1200;            
        proxy_send_timeout      1200;     
       	proxy_read_timeout      1200;
    }
    
}

啓動nginx:

  1. sudo systemctl restart nginx.service

5,Rancher集羣部署

1,安裝必要工具

以下操作只需在172.18.17.170這一臺上操作即可。

  • 安裝rke:
  1. su root
  2. wget https://www.cnrancher.com/download/rke/v0.2.6-rke_linux-amd64
  3. chmod +x v0.2.6-rke_linux-amd64
  4. mv v0.2.6-rke_linux-amd64 /usr/bin/rke
  • 安裝kubectl:
  1. wget https://www.cnrancher.com/download/kubernetes/linux-amd64-v1.15.1-kubectl
  2. chmod +x linux-amd64-v1.15.1-kubectl
  3. mv linux-amd64-v1.15.1-kubectl /usr/bin/kubectl
  • 安裝helm:
  1. wget https://www.cnrancher.com/download/helm/helm-v2.13.1-linux-amd64.tar.gz
  2. tar xf helm-v2.13.1-linux-amd64.tar.gz
  3. mv linux-amd64/helm /usr/bin/helm
  4. mv linux-amd64/tiller /usr/bin/tiller
  5. rm -rf helm-v2.13.1-linux-amd64.tar.gz linux-amd64/

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

2,安裝k8s

操作只需在172.18.17.170這一臺上操作即可。

  • 1、切換到rancher用戶
  1. su - rancher

注意:必須使用普通用戶操作,否則後邊的操作會報下邊的錯:

Please check if the configured user can execute `docker ps` on the node, and if the SSH server version is at least version 6.7 or higher. If youare using RedHat/CentOS, you can't use the user `root`. Please refer to the documentation for more instructions. Error: ssh: rejected: administratively prohibited (open failed)

  • 2、創建rancher集羣配置文件:
cat > rancher-cluster.yml << EOF
nodes:
  - address: 172.18.17.170
    user: rancher
    role: [controlplane,worker,etcd]
  - address: 172.18.17.171
    user: rancher
    role: [controlplane,worker,etcd]
  - address: 172.18.17.172
    user: rancher
    role: [controlplane,worker,etcd]
services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24h
EOF
  1. address:公共域名或IP地址
  2. user:可以運行docker命令的用戶,需要是普通用戶。
  3. role:分配給節點的Kubernetes角色列表
  4. ssh_key_path:用於對節點進行身份驗證的SSH私鑰的路徑(默認爲~/.ssh/id_rsa)
  • 3、啓動集羣
  1. $ rke up --config ./rancher-cluster.yml

如果這一步報錯下邊的內容:

if the SSH server version is at least version 6.7 or higher. If you are using RedHat/CentOS, you can't use the user `root`. Please refer to the documentation for more instructions

則可能是系統的openssh版本太低,只需執行如下命令升級即可:

[rancher@localhost ~]$ ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013 #低於上邊要求的6.7

[rancher@localhost ~]$ exit

[root@localhost ~]$ yum -y update openssh

[root@localhost ~]$ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

然後再切回rancher用戶執行安裝即可!

完成後,它應顯示:Finished building Kubernetes cluster successfully。
並且已經創建了一個文件kube_config_rancher-cluster.yml。這個文件包含kubectl和helm訪問K8S的憑據。

  • 4、配置環境變量:

切換到root用戶

  1. su - root
  2. vi /etc/profile
  3. export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml

保存,並執行:

  1. source /etc/profile

保存kube_config_rancher-cluster.ymlrancher-cluster.yml文件的副本,後期維護和升級Rancher實例時將會用到。

  • 5、通過kubectl測試您的連接,並查看您的所有節點是否處於Ready狀態

先配置一下kubectl的命令補全功能。

  1. $ echo "source <(kubectl completion bash)" >> ~/.bashrc
  2. $ source ~/.bashrc
  3. $ su - rancher
  4. $ echo "source <(kubectl completion bash)" >> ~/.bashrc
  5. $ source ~/.bashrc

然後查看節點狀態。

  1. [root@node1 ~]$ su - rancher
  2. [rancher@node1 ~]$ kubectl get node

由於需要聯網下載docker鏡像文件,所以需要一段時間才能安裝好,10-30分鐘左右。

  • 6、檢查集羣Pod的運行狀況
  1. [rancher@node1 ~]$ kubectl get pods --all-namespaces

保存kube_config_rancher-cluster.yml和rancher-cluster.yml文件的副本,以後將需要這些文件來維護和升級Rancher實例。

3,Helm

Helm有兩個部分:Helm客戶端(helm)和Helm服務端(Tiller)。

使用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

     需要修改成國內鏡像

  1. kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.14.1
  • 3、安裝Helm Server(Tiller)
  1. helm init --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.14.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  • 4、安裝Tiller金絲雀版本
  1. helm init --service-account tiller --canary-image

     升級命令: helm init --service-account tiller --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:v2.14.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts --upgrade

4,helm安裝rancher

使用自簽名證書安裝Rancher server

Rancher server設計默認需要開啓SSL/TLS配置來保證安全,將ssl證書以Kubernetes Secret卷的形式傳遞給rancher server或Ingress Controller。首先創建證書密文,以便Rancher和Ingress Controller可以使用。

1,生成自簽名證書

#腳本
一鍵生成自簽名證書腳本

#執行腳本生成證書

sh create_self-signed-cert.sh --ssl-domain=rancher.ncd.ltd --ssl-trusted-ip=172.18.17.169,172.18.17.170,172.18.17.171,172.18.17.172,172.18.17.180,172.18.17.181,172.18.17.182 --ssl-size=2048 --ssl-date=3650

2,使用kubectl創建tls類型的secrets

#創建命名空間

kubectl create namespace cattle-system

#服務證書和私鑰密文

kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key

#ca證書密文

kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem

獲取證書

kubectl get secret tls-rancher-ingress -n cattle-system -o yaml

###將data中的tls.crt 、tls.key用base解碼至正常格式,添加進證書中

解碼
將data中的tls.crt 、tls.key用base64解碼至正常格式,添加進證書中

添加Chart倉庫地址

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
  • 查看是否添加成功

helm repo list

3,安裝rancher server

#使用helm安裝rancher HA

注:自定義域名和證書申請的域名要保持一致

helm install rancher-stable/rancher \
 --name rancher \
 --namespace cattle-system \
 --set hostname=rancher.ncd.ltd \
 --set ingress.tls.source=secret \
 --set privateCA=true

驗證 Rancher Server 運行情況,查看是否部署成功

helm list

查看 pod

kubectl get deployment -n cattle-system

安裝rancher server出錯,可以用 helm delete --purge rancher 刪除後 重新執行

#查看創建

由於我們通過hosts文件來添加映射,所以需要爲Agent Pod添加主機別名(/etc/hosts)[在172.18.17.170機器上執行以下2個配置內容]:

kubectl -n cattle-system patch  deployments cattle-cluster-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "rancher.ncd.ltd"
                        ],
                            "ip": "172.18.17.169"
                    }
                ]
            }
        }
    }
}'

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

kubectl -n cattle-system patch  daemonsets cattle-node-agent --patch '{
    "spec": {
        "template": {
            "spec": {
                "hostAliases": [
                    {
                        "hostnames":
                        [
                            "rancher.ncd.ltd"
                        ],
                            "ip": "172.18.17.169"
                    }
                ]
            }
        }
    }
}'

5,登錄rancher管理端

  • 1、同樣將剛剛的域名映射關係寫入到Windows主機的hosts文件(內網的做法)。
  1. 172.18.17.169 rancher.ncd.ltd
  • 2、使用域名訪問https://rancher.ncd.ltd

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

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

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

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

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

worker1 172.18.17.180 Rancker-agent-node
worker2 172.18.17.181 Rancker-agent-node
worker3 172.18.17.182 Rancker-agent-node

將這3臺機器在rancher控制面板上創建新的集羣集成進來,以後的部署服務都往worker node上去做. 

 

-----清理k8s-------

#刪除所有容器
sudo docker rm -f $(sudo docker ps -qa)

#刪除/var/etcd目錄
sudo rm -rf /var/etcd

#刪除/var/lib/kubelet/目錄,刪除前先卸載
for m in $(sudo tac /proc/mounts | sudo awk '{print $2}'|sudo grep /var/lib/kubelet);do
 sudo umount $m||true
done
sudo rm -rf /var/lib/kubelet/

#刪除/var/lib/rancher/目錄,刪除前先卸載
for m in $(sudo tac /proc/mounts | sudo awk '{print $2}'|sudo grep /var/lib/rancher);do
 sudo umount $m||true
done
sudo rm -rf /var/lib/rancher/

#刪除/run/kubernetes/ 目錄
sudo rm -rf /run/kubernetes/

#刪除所有的數據卷
sudo docker volume rm $(sudo docker volume ls -q)

#再次顯示所有的容器和數據卷,確保沒有殘留
sudo docker ps -a
sudo docker volume ls

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章