系列文章目錄
1.kubeadm安裝K8s集群之基礎環境配置
2.kubeadm安裝K8s集群之高可用組件keepalived+nginx
3.kubeadm安裝K8s集群之master節點加入
4.kubeadm安裝K8s集群之worker1節點加入
kubeadm安裝K8s集群之高可用組件keepalived+nginx
- 1.安裝kubeadm、kubectl、kubelet
- 2.安裝高可用組件nginx
- 3.安裝高可用組件keepalived
1.安裝kubeadm、kubectl、kubelet
kubeadm:是用于初始化和管理kubernetes集群的工具,簡化集群的創建維護;
kubelet:是每個節點的代理,負責容器的生命周期和節點級別的任務管理;
kubectl:是作為用戶的命令行界面,用來與kubernetes集群進行交換,便于管理和操作集群資源;
- 添加kubernetes yum源;
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1
EOF
- 安裝軟件包,我這里是安裝指定版本1.19.1-0;
yum install -y kubelet-1.19.1-0.x86_64 kubeadm-1.19.1-0.x86_64 kubectl-1.19.1-0.x86_64
- 配置kubelet鏡像倉庫
默認配置的pause鏡像使用 gcr.io 倉庫,國內可能無法訪問,所以這里配置 Kubelet 使用阿里云的 pause 鏡像;
首先獲取 Docker cgroups 驅動程序信息
DOCKER_CGROUPS=$(docker info --format '{{.CgroupDriver}}')
echo $DOCKER_CGROUPS
注意:獲取Docker cgroups驅動程序信息是為了保證docker和kubelet的cgroup-driver保持一致,如果不一致,在初始化集群時會報錯:[kubelet-check] The HTTP call equal to 'curl -sSL http://xxxxxxx:xxx connect: connection refused.
編輯Kubelet配置文件
cat >/etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=${DOCKER_CGROUPS} --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
EOF
加載配置并將kubelet設置為開機自啟;
#加載system系統配置管理文件
systemctl daemon-reload
#設置開機自啟并啟動,啟動肯定是報錯,因為kubelet還沒有在master進行初始化啟動
systemctl enable kubelet && systemctl restart kubelet
2.安裝高可用組件nginx
- 啟用EPEL倉庫后安裝 Nginx
yum install -y epel-release
yum install -y nginx
- 加載nginx stream模塊
因為需要用到nginx的stream模塊,yum安裝的nginx默認是沒有這個模塊的,所以需要手動安裝所有mod;
yum -y install nginx-all-modules.noarch
安裝成功后/usr/lib64/nginx/modules/目錄中會增加以下文件;
ll /usr/lib64/nginx/modules/
- 配置nginx配置文件
首先備份一下默認的nginx.conf文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
修改配置文件中的內容執行命令,將以下內容覆蓋重定向到配置文件中;
提示:以下內容請根據文件中的注釋調整對應的實際情況的內容;
cat >/etc/nginx/nginx.conf <<EOF
#手動將上面安裝的nginx stream模塊加載進來;
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;
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.0.105:6443; # master1 apiserver的ip和端口,請根據實際情況替換該內容;server 192.168.0.106:6443; # master2 apiserver的ip和端口,請根據實際情況替換該內容;}server {listen 16443; # 因nginx與master節點復用,這個監聽端口不能是6443,否則會沖突proxy_pass k8s-apiserver;}
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
EOF
將nginx設置為開機自啟
systemctl enable nginx && systemctl start nginx && systemctl status nginx
3.安裝高可用組件keepalived
通過模擬虛擬路由器的來保證,主服務器出現故障時自動將流量切換到備用服務器,從而保證服務的持續可用,確保服務的連續性和可靠性;
- 安裝 Keepalived
yum install -y keepalived
- 修改配置keepalived配置文件
首先備份默認的配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak
修改配置文件中的內容執行命令,將以下內容覆蓋重定向到配置文件中;
提示:以下內容請根據文件中的注釋調整對應的實際情況的內容;
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_nginx { #配置健康檢查腳本相關內容script "/etc/keepalived/check_nginx.sh" #配置健康檢查腳本路徑interval 2weight -20 #健康檢查腳本返回的狀態碼為1,就權重下降20,實現VIP飄移;}
vrrp_instance VI_1 {state MASTERinterface ens33 #ens33:網絡接口名稱,需要調整為實際對應的名稱,可以執行ifconfig查看對應名字;virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111 #可以理解為設置認證的密碼,這里可根據情況調整;}virtual_ipaddress {192.168.15.253/24 #vip設置一組虛擬IP地址,可根據實際情況的需要調整,}track_script {check_nginx #設置健康檢查}
}
EOF
如圖,啟動好keepalived的服務后可以輸入命令會把vip顯示出來,ip addr show
;
編寫健康檢查腳本check_nginx.sh,這里為了演示隨便寫的個簡單腳本,實際使用環境中不應如此粗糙;
cat > /etc/keepalived/check_nginx.sh << 'EOF'
#!/bin/bash
#這里隨便寫了一個簡單的健康檢查腳本,計算nginx的16443端口的數量,如果數量是0就判定為服務不正常;
#16443是上文nginx配置的監聽端口,如果上面不是設置的16443這里需要調整為對應的;count=$(ss -antp |grep 16443 |egrep -cv "grep|$$")
if [ "$count" -eq 0 ];thenexit 1
elseexit 0
fi
EOF
- 啟動 Keepalived
將keepalived為開機自啟動,并開啟服務
systemctl enable keepalived && systemctl start keepalived