?本次部署說明
?在上一篇文章中,就已經(jīng)完成了二進(jìn)制k8s集群部署的搭建,但是單機(jī)master并不適用于企業(yè)的實(shí)際運(yùn)用(因?yàn)閱螜C(jī)master中,僅僅只有一臺(tái)master作為節(jié)點(diǎn)服務(wù)器的調(diào)度指揮,一旦宕機(jī)。就意味著整個(gè)集群的癱瘓,所以成熟的k8s的集群一定要考慮到master的高可用。)企業(yè)的運(yùn)用一般至少存在兩臺(tái)master及其以上的部署,本次將根據(jù)前面的部署,再添加一臺(tái)master(三個(gè)master或者更多,也可以根據(jù)本次添加步驟重復(fù)添加)。添加master后,我們會(huì)將借助keepalived+nginx的架構(gòu),來實(shí)現(xiàn)高可用的master【也可以使用haproxy+keepalived或則是keepalived+lvs(不推薦,步驟過于復(fù)雜)】
除此之外,我們還將搭建出k8s的ui管理界面
本次部署的架構(gòu)組件?
?文章來源地址http://www.zghlxwxcb.cn/news/detail-519206.html
架構(gòu)說明:
node節(jié)點(diǎn)的kubelet只能對(duì)接一個(gè)master節(jié)點(diǎn)的apiserver,不可能同時(shí)對(duì)接多個(gè)master節(jié)點(diǎn)的apiserver。簡而言之,node節(jié)只能有一個(gè)master來領(lǐng)導(dǎo)。
kubelet和kube-proxy是通過kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server參數(shù)進(jìn)行對(duì)接 master節(jié)點(diǎn)的。
所以在多master節(jié)點(diǎn)的環(huán)境下,需要有nginx負(fù)載均衡器來進(jìn)行調(diào)度,而且需要進(jìn)行keepalived高可用的構(gòu)建(主從兩個(gè)節(jié)點(diǎn)) ,防止主節(jié)點(diǎn)宕機(jī)導(dǎo)致整個(gè)k8s集群的不可用。
?
?1. 新master節(jié)點(diǎn)的搭建
?
?1.1 對(duì)master02 進(jìn)行初始化配置
#關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
?
#關(guān)閉selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
?
#關(guān)閉swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab?
?
#根據(jù)規(guī)劃設(shè)置主機(jī)名
hostnamectl set-hostname master02
su
#在master添加hosts(添加到整個(gè)k8s集群的主機(jī)上,保證其他主機(jī)均有該映射)
cat >> /etc/hosts << EOF
192.168.73.105 master01
192.168.73.110 master02
192.168.73.106 node01
192.168.73.107 node02
EOF
?
#調(diào)整內(nèi)核參數(shù)
cat > /etc/sysctl.d/k8s.conf << EOF
#開啟網(wǎng)橋模式,可將網(wǎng)橋的流量傳遞給iptables鏈
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#關(guān)閉ipv6協(xié)議
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
?
sysctl --system
?
?
#時(shí)間同步
yum install ntpdate -y
ntpdate ntp.aliyun.com
?
#將時(shí)間同步的操作添加到計(jì)劃性任務(wù),確保所有節(jié)點(diǎn)保證時(shí)間的同步
crontab -e
*/30 * * * * /usr/sbin/ntpdate ?ntp.aliyun.com
crontab -l
?
?1.2? 將master01的配置移植到master02
?##------------ 1、 master01節(jié)點(diǎn),拷貝文件到master02 -------------------------------
?#從 master01 節(jié)點(diǎn)上拷貝證書文件、各master組件的配置文件和服務(wù)管理文件到 master02 節(jié)點(diǎn)
?scp -r /opt/etcd/ root@192.168.73.110:/opt/
?scp -r /opt/kubernetes/ root@192.168.73.110:/opt/
?scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.73.110:/usr/lib/systemd/system/
?scp -r /root/.kube/ ?master02:/root/
??
?##----------- 2、 master02節(jié)點(diǎn),修改配置文件并啟動(dòng)相關(guān)服務(wù)-------------------------
?
?#修改配置文件kube-apiserver中的IP
?vim /opt/kubernetes/cfg/kube-apiserver
?KUBE_APISERVER_OPTS="--logtostderr=true \ ? ? ? ?#輸出日志,false表示標(biāo)準(zhǔn)錯(cuò)誤不輸出到屏幕,而是輸出到日志中。true表示標(biāo)準(zhǔn)錯(cuò)誤會(huì)輸出到屏幕。
?--v=4 \ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#日志級(jí)別
?--etcd-servers=https://192.168.73.105:2379,https://192.168.73.106:2379,https://192.168.73.107:2379 \ ? ? ?#etcd節(jié)點(diǎn)的IP通信地址
?--bind-address=192.168.73.110 \ ? ? ? ? ? ? ?#修改,當(dāng)前綁定的內(nèi)網(wǎng)IP監(jiān)聽的地址
?--secure-port=6443 \ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#基于HPPTS開放端口
?--advertise-address=192.168.73.110 \ ? ? ? ? #修改,內(nèi)網(wǎng)通告地址,讓其他node節(jié)點(diǎn)地址通信
?......
??
?#在 master02 節(jié)點(diǎn)上啟動(dòng)各服務(wù)并設(shè)置開機(jī)自啟
?systemctl enable --now kube-apiserver.service
?systemctl enable --now kube-controller-manager.service
?systemctl enable --now kube-scheduler.service
??
?#將可執(zhí)行文件,創(chuàng)建軟鏈接
?ln -s /opt/kubernetes/bin/* /usr/local/bin/
??
?#查看node節(jié)點(diǎn)狀態(tài)
?kubectl get nodes
?kubectl get nodes -o wide ? ? ? ? ? #-o=wide:輸出額外信息;對(duì)于Pod,將輸出Pod所在的Node名
?#此時(shí)在master02節(jié)點(diǎn)查到的node節(jié)點(diǎn)狀態(tài)僅是從etcd查詢到的信息,而此時(shí)node節(jié)點(diǎn)實(shí)際上并未與master02節(jié)點(diǎn)建立通信連接,因此需要使用一個(gè)VIP把node節(jié)點(diǎn)與master節(jié)點(diǎn)都關(guān)聯(lián)起來
2.負(fù)載均衡的部署
?#配置load balancer集群雙機(jī)熱備負(fù)載均衡(nginx實(shí)現(xiàn)負(fù)載均衡,keepalived實(shí)現(xiàn)雙機(jī)熱備)
??
?#----------------- 1、兩臺(tái)負(fù)載均衡器配置nginx -------------------------------------
??
?#配置nginx的官方在線yum源,配置本地nginx的yum源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOF
??
?yum install nginx -y
??
?#修改nginx配置文件,配置四層反向代理負(fù)載均衡,指定k8s群集2臺(tái)master的節(jié)點(diǎn)ip和6443端口
?vim /etc/nginx/nginx.conf
?events {
? ? ?worker_connections ?1024;
?}
??
?#添加
?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 {
? ? ? ? ?server 192.168.73.105:6443; ? ?#master01
? ? ? ? ?server 192.168.73.110:6443; ? ?#master02
? ? ?}
? ? ?server {
? ? ? ? ?listen 6443;
? ? ? ? ?proxy_pass k8s-apiserver;
? ? ?}
?}
??
?http {
?......
??
??
?#檢查配置文件語法
?nginx -t ??
??
?#啟動(dòng)nginx服務(wù),查看已監(jiān)聽6443端口
?systemctl start nginx
?systemctl enable nginx
??
?ss -lntp|grep nginx?
??
??
?
?#------------------ 2、兩臺(tái)負(fù)載均衡器配置keepalived ------------------------------
??
?#部署keepalived服務(wù)
?yum install keepalived -y
??
?#修改keepalived配置文件
?vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
?
global_defs {
? ?router_id nginx_master
}
?
vrrp_script check_nginx {
? ?script "/etc/nginx/check_nginx.sh" ? #指定檢測(cè)腳本的路徑,并且該腳本充當(dāng)心跳檢測(cè)腳本
}
?
vrrp_instance VI_1 {
? ? state MASTER ? ? ? ?#指定狀態(tài)為master節(jié)點(diǎn),109為BACKUP備用節(jié)點(diǎn)
? ? interface ens33
? ? virtual_router_id 51
? ? priority 100 ? ?#108優(yōu)先級(jí)為100 109為90,優(yōu)先級(jí)決定著主備的位置
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.73.66
? ? }
? ? track_script {
? ? ?check_nginx ? ? ? ?#追蹤腳本的進(jìn)程
? ? }
}
?
#將該文件 發(fā)送給備用調(diào)度器,并且將其中的配置修改為備用調(diào)度器的屬性
cd /etc/keepalived/
scp keepalived.conf ?root@192.168.73.109:`pwd`
??
??
#創(chuàng)建nginx狀態(tài)檢查腳本?
vim /etc/nginx/check_nginx.sh
?
#!/bin/bash
killall -0 nginx &>/dev/null
if [ $? -ne 0 ];then
? systemctl stop keepalived
fi
?
??
?chmod +x /etc/nginx/check_nginx.sh ?#為腳本增加執(zhí)行權(quán)限
?
#將該腳本發(fā)送給備用調(diào)度器
cd /etc/nginx
scp check_nginx.conf ?root@192.168.73.109:`pwd`
?
?
?
??
?#兩臺(tái)主備調(diào)度器啟動(dòng)keepalived服務(wù)(一定要先啟動(dòng)了nginx服務(wù),再啟動(dòng)keepalived服務(wù))
?systemctl start keepalived
?systemctl enable keepalived
?ip addr ? ? ? ? ? ? #查看主節(jié)點(diǎn)的VIP是否生成
??
?
?
?
?
?#---------------- 3、關(guān)閉主節(jié)點(diǎn)的nginx服務(wù),模擬故障,測(cè)試keepalived-----------------------
??
?#關(guān)閉主節(jié)點(diǎn)lb01的Nginx服務(wù),模擬宕機(jī),觀察VIP是否漂移到備節(jié)點(diǎn)
?systemctl stop nginx
?ip addr
?systemctl status keepalived ? #此時(shí)keepalived被腳本殺掉了 ??
??
?#備節(jié)點(diǎn)查看是否生成了VIP
?ip addr ? ?#此時(shí)VIP漂移到備節(jié)點(diǎn)lb02
??
?
?
?#恢復(fù)主節(jié)點(diǎn)
?systemctl start nginx ? ? ? ? #先啟動(dòng)nginx
?systemctl start keepalived ? ?#再啟動(dòng)keepalived
?ip addr
?
?
?3.?k8s的web UI界面的搭建
//在 master01 節(jié)點(diǎn)上操作
#上傳 recommended.yaml 文件到 /opt/k8s 目錄中,部署 CoreDNS?
cd /opt/k8s
vim recommended.yaml
#默認(rèn)Dashboard只能集群內(nèi)部訪問,修改Service為NodePort類型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
? labels:
? ? k8s-app: kubernetes-dashboard
? name: kubernetes-dashboard
? namespace: kubernetes-dashboard
spec:
? ports:
? ? - port: 443
? ? ? targetPort: 8443
? ? ? nodePort: 30001 ? ? #添加
? type: NodePort ? ? ? ? ?#添加
? selector:
? ? k8s-app: kubernetes-dashboard
?
?
#通過recommended.yaml資源配置清單,使用kubectl apply創(chuàng)建資源,-f指定資源配置清單文件
?kubectl apply -f recommended.yaml
?
#創(chuàng)建service account并綁定默認(rèn)cluster-admin管理員集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
?
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
?
?#獲取token值
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
?
#使用輸出的token登錄Dashboard,訪問node節(jié)點(diǎn)
https://192.168.73.106:30001?
?
?
?
?
?
?
?
文章來源:http://www.zghlxwxcb.cn/news/detail-519206.html
?
到了這里,關(guān)于【云原生】二進(jìn)制k8s集群(下)部署高可用master節(jié)點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!