Kubernetes集羣二進制部署(三)——多master集羣

一、環境

首先需要搭建單master節點部署環境

已完成的相關部署:

Kubernetes集羣二進制部署(一)——Etcd數據庫羣集功能部署、flannel網絡組建

Kubernetes集羣二進制部署(二)——單master集羣

服務器 IP 安裝軟件
Master01 192.168.11.11 kube-apiserver、kube-controller-manager、kube-scheduler、etcd
Master02 192.168.11.12 kube-apiserver、kube-controller-manager、kube-scheduler、etcd
負載均衡lb01 192.168.11.13/VIP:192.168.11.100 nginx、keepalived
負載均衡lb02 192.168.11.14/VIP:192.168.11.100 nginx、keepalived
Node01 192.168.11.16 kubelet、kube-proxy、docker 、flannel 、etcd
Node02 192.168.11.17 kubelet、kube-proxy、docker 、flannel 、etcd

二、軟件包

百度網盤鏈接:https://pan.baidu.com/s/1o8kgiC_9b2hO8FRNaDGC3Q
提取碼:qz5v

三、Master02部署

1、網絡環境準備

#清空防火牆規則、關閉核心防護

[root @master02 ~]# iptables -F    #清空防火牆規則
[root @master02 ~]# setenforce 0   #關閉核心防護

#防止重啓虛擬機IP地址變化

生產環境中是一定要關閉該功能的

[root @master02 ~]# systemctl stop NetworkManager
[root @master02 ~]# systemctl enable NetworkManager

2、部署master02

① 將master01上的kuberetes目錄拷貝至master02上

[root @master01 ~]# scp -r /opt/kubernetes/ [email protected]:/opt

② 將master01上的三個組件啓動腳本拷貝至master02上

[root @master01 ~]# scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service [email protected]:/usr/lib/systemd/system/

③ 修改master02配置文件 kube-apiserver中的IP地址

[root @master02 ~]# cd /opt/kubernetes/cfg
[root @master02 cfg]# vim kube-apiserver

在這裏插入圖片描述

④ 拷貝master01上已有的etcd證書給master02使用

注意:master02一定要有etcd證書(不裝etcd也需要etcd證書,因爲master02也是要與etcd交互的)

[root @master01 ~]# scp -r /opt/etcd/ [email protected]:/opt

⑤ 啓動master02中的三個組件服務

[root @master02 ~]# systemctl start kube-apiserver
[root @master02 ~]# systemctl enable kube-apiserver
[root @master02 ~]# systemctl status kube-apiserver

在這裏插入圖片描述

[root @master02 ~]# systemctl start kube-controller-manager
[root @master02 ~]# systemctl enable kube-controller-manager
[root @master02 ~]# systemctl status kube-controller-manager

在這裏插入圖片描述

[root @master02 ~]# systemctl start kube-scheduler
[root @master02 ~]# systemctl enable kube-scheduler
[root @master02 ~]# systemctl status kube-scheduler

在這裏插入圖片描述

⑥ 增加環境變量

[root @master02 ~]# vim /etc/profile
#末尾添加
export PATH=$path:/opt/kubernetes/bin
[root @master02 ~]# source /etc/profile

⑦ 查看master02是否可以檢測到node節點

[root @master02 ~]# kubectl get node

在這裏插入圖片描述

至此,多master節點就搭建好了

四、負載均衡部署

lb01、lb02同時操作

1、網絡環境準備

#清空防火牆規則、關閉核心防護

[root @lb01 ~]# iptables -F    #清空防火牆規則
[root @lb01 ~]# setenforce 0   #關閉核心防護

#防止重啓虛擬機IP地址變化

生產環境中是一定要關閉該功能的

[root @lb01 ~]# systemctl stop NetworkManager
[root @lb01 ~]# systemctl enable NetworkManager

2、部署nginx

① 配置nginx源環境並安裝nginx

[root@lb01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0

[root@lb01 ~]# yum list
[root@lb01 ~]# yum install nginx -y   #安裝nginx

② 添加四層轉發(添加stream模塊)

#在events模塊和http模塊中間添加一個獨立的stream模塊

[root @lb01 ~]# vim /etc/nginx/nginx.conf
…………省略內容
stream {

     log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
      access_log  /var/log/nginx/k8s-access.log  main;        #指定日誌存放目錄
 
      upstream k8s-apiserver {
      	  #master01的ip地址和端口 
          server 192.168.11.11:6443;	#6443是apiserver的端口號
          #master02的ip地址和端口
          server 192.168.11.12:6443;
      }
      server {
                  listen 6443;
                  proxy_pass k8s-apiserver;
      }
      }
…………省略內容

在這裏插入圖片描述

③ 開啓nginx服務

[root@lb01 ~]# nginx -t 	#檢查配置文件是否有語法錯誤
[root@lb01 ~]# systemctl start nginx		#開啓nginx服務
[root@lb01 ~]# netstat -ntap | grep nginx	#查看nginx狀態及監聽端口6443

在這裏插入圖片描述

3、部署keepalived高可用

1)安裝並配置keepalived

① 安裝keepalived

[root@lb01 ~]# yum install keepalived -y

② 修改配置文件

刪除原有配置文件,重新定義添加

[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   # 接收郵件地址
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   # 郵件發送地址
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER
}
vrrp_script check_nginx {
    script "/etc/nginx/check_nginx.sh"   #監控nginx腳本的路徑,稍後會創建
}
vrrp_instance VI_1 {
    state MASTER	#lb01該節點爲MASTER,lb02設爲BACKUP
    interface ens33
    virtual_router_id 51
    priority 100     #優先級,lb01爲master,優先級100。lb02爲backup,優先級設90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.11.100/24      #VIP地址(虛擬IP)
    }
    track_script {
        check_nginx
    }
}

2)創建nginx監控腳本

[root@lb01 ~]# vim /etc/nginx/check_nginx.sh
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")
if [ "$count" -eq 0 ];then
    systemctl stop keepalived
fi

[root@lb01 ~]# chmod +x /etc/nginx/check_nginx.sh	#添加執行權限

3)開啓服務

[root@lb01 ~]# systemctl start keepalived.service   
[root@lb01 ~]# systemctl status keepalived.service  

#查看漂移地址

[root@lb01 ~]# ip a

可以看到vip地址是在lb01上,也就是高可用羣集中的master上的,而backup節點,lb02上是沒有vip地址的
在這裏插入圖片描述
在這裏插入圖片描述

4)驗證漂移地址

① lb01中使用pkill nginx,再在lb02中使用ip a查看vip地址

#結束lb01上的nginx

[root@lb01 ~]# pkill nginx

#keepalived也關閉了

[root@lb01 ~]# systemctl status keepalived

在這裏插入圖片描述
#查看lb01地址

這時lb01上的漂移地址就沒有了
在這裏插入圖片描述
#查看lb02地址
在這裏插入圖片描述
② 恢復操作(在lb01中先啓動給nginx服務,在啓動keepalived服務)
因爲有nginx監控,如果先啓動keepalived是啓不了的,

[root@lb01 ~]# systemctl start nginx
[root@lb01 ~]# systemctl start keepalived

#再次使用ip a查看lb01地址
在這裏插入圖片描述

漂移地址就回到了lb01上,因爲lb01是主節點,優先級高

5)node節點指向VIP漂移地址

兩個node均需要操作

① 修改兩個node節點配置文件(bootstrap.kubeconfig 、kubelet.kubeconfig、kube-proxy.kubeconfig),server ip統一VIP地址

[root@node01 cfg]# vim /opt/kubernetes/cfg/bootstrap.kubeconfig
[root@node01 cfg]# vim /opt/kubernetes/cfg/kubelet.kubeconfig
[root@node01 cfg]# vim /opt/kubernetes/cfg/kube-proxy.kubeconfig

#server: https://192.168.100.100:6443,統統修改爲vip漂移地址
在這裏插入圖片描述

② 重啓服務

[root@node01 cfg]# systemctl restart kubelet.service 
[root@node01 cfg]# systemctl restart kube-proxy.service

③ 替換完成後自檢

[root@node01 cfg]# grep 100 *

在這裏插入圖片描述

④ 在lb01上查看nginx的k8s日誌

#檢查日誌是否完成了訪問,建立了負載均衡

[root@node01 cfg]# tail /var/log/nginx/k8s-access.log

在這裏插入圖片描述
至此多節點全部創建完成了

五、k8s集羣測試

master01操作

① 測試創建pod

[root@master01 ~]# kubectl run nginx --image=nginx

#查看pod狀態

[root@master01 ~]# kubectl get pods

在這裏插入圖片描述

#該指令可以查看到資源具體信息,IP及所在節點

[root@master01 ~]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE     IP            NODE            NOMINATED NODE
nginx-dbddb74b8-lsbv2   1/1     Running   0          2m58s   172.17.80.2   192.168.11.16   <none>

② 查看日誌問題

#查看pod資源的日誌

[root@master1 ~]# kubectl logs nginx-dbddb74b8-lsbv2

ERROR報錯:

Error from server (Forbidden): Forbidden (user=system:anonymous, verb=get, resource=nodes, subresource=proxy) ( pods/log nginx-dbddb74b8-vj4wk)

原因:出現 error 是由於權限不足,需要提權

解決辦法(添加匿名用戶授予權限):

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

#提權後查看日誌記錄是空的,因爲現在這個容器並沒有被訪問
在這裏插入圖片描述
#訪問測試(創建的資源是在192.168.11.16節點上的,所以在該節點進行訪問)

[root@node01 cfg]# curl 172.17.80.2

在這裏插入圖片描述
#訪問後就會產生日誌記錄(再次回到master01查看日誌)
在這裏插入圖片描述
可以看到沒訪問之前是沒有日誌記錄的,再次查看已經有了剛剛訪問的一條記錄了

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