济南模板网站设计,上海网站开发哪里有,办公室工作绩效 网站建设,诸城手机网站建设在上一篇文章中#xff0c;就已经完成了二进制k8s集群部署的搭建#xff0c;但是单机master并不适用于企业的实际运用#xff08;因为单机master中#xff0c;仅仅只有一台master作为节点服务器的调度指挥#xff0c;一旦宕机。就意味着整个集群的瘫痪#xff0c;所以成熟…在上一篇文章中就已经完成了二进制k8s集群部署的搭建但是单机master并不适用于企业的实际运用因为单机master中仅仅只有一台master作为节点服务器的调度指挥一旦宕机。就意味着整个集群的瘫痪所以成熟的k8s的集群一定要考虑到master的高可用。企业的运用一般至少存在两台master及其以上的部署本次将根据前面的部署再添加一台master三个master或者更多也可以根据本次添加步骤重复添加。添加master后我们会将借助keepalivednginx的架构来实现高可用的master【也可以使用haproxykeepalived或则是keepalivedlvs不推荐步骤过于复杂
本次部署的架构组件 mater节点mater01192.168.73.100kube-apiserver kube-controller-manager kube-scheduler master02192.168.73.130kube-apiserver kube-controller-manager kube-scheduler node节点node01192.168.73.110kubelet kube-proxy docker 容器引擎node02192.168.73.120kubelet kube-proxy docker 容器引擎 etcd cluster集群etcd节点1192.168.73.100mater01etcdetcd节点2192.168.73.110node01etcdetcd节点3192.168.73.120node02etcd load balance高可用调度器主调度器192.168.73.140nginxkeepalived从调度器192.168.73.150nginxkeepalived 架构说明 node节点的kubelet只能对接一个master节点的apiserver不可能同时对接多个master节点的apiserver。简而言之node节只能有一个master来领导。 kubelet和kube-proxy是通过kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server参数进行对接 master节点的。 所以在多master节点的环境下需要有nginx负载均衡器来进行调度而且需要进行keepalived高可用的构建(主从两个节点) 防止主节点宕机导致整个k8s集群的不可用。 一、新master节点的搭建
1.1 对master02 进行初始化配置
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F iptables -t nat -F iptables -t mangle -F iptables -X#关闭selinux
setenforce 0
sed -i s/enforcing/disabled/ /etc/selinux/config#关闭swap
swapoff -a
sed -ri s/.*swap.*/#/ /etc/fstab #根据规划设置主机名
hostnamectl set-hostname master02
su
#在master添加hosts(添加到整个k8s集群的主机上保证其他主机均有该映射)
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#调整内核参数
cat /etc/sysctl.d/k8s.conf EOF
#开启网桥模式可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv61
net.ipv4.ip_forward1
EOFsysctl --system#时间同步
yum install ntpdate -y
ntpdate ntp.aliyun.com#将时间同步的操作添加到计划性任务确保所有节点保证时间的同步
crontab -e
*/30 * * * * /usr/sbin/ntpdate ntp.aliyun.com
crontab -l 1.2 将master01的配置移植到master02 ##------------ 1、 master01节点拷贝文件到master02 -------------------------------#从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点scp -r etcd/ master02:pwdscp -r kubernetes/ master02:pwdscp /usr/lib/systemd/system/kube-* master02:/usr/lib/systemd/system/scp -r /root/.kube/ master02:/root/ ##----------- 2、 master02节点修改配置文件并启动相关服务-------------------------#修改配置文件kube-apiserver中的IPvim /opt/kubernetes/cfg/kube-apiserverKUBE_APISERVER_OPTS--logtostderrtrue \ #输出日志false表示标准错误不输出到屏幕而是输出到日志中。true表示标准错误会输出到屏幕。--v4 \ #日志级别--etcd-servershttps://192.168.73.105:2379,https://192.168.73.106:2379,https://192.168.73.107:2379 \ #etcd节点的IP通信地址--bind-address192.168.73.110 \ #修改当前绑定的内网IP监听的地址--secure-port6443 \ #基于HPPTS开放端口--advertise-address192.168.73.110 \ #修改内网通告地址让其他node节点地址通信......vim kube-controller-managervim kube-scheduler#在 master02 节点上启动各服务并设置开机自启systemctl enable --now kube-apiserver.servicesystemctl enable --now kube-controller-manager.servicesystemctl enable --now kube-scheduler.service#将可执行文件创建软链接ln -s /opt/kubernetes/bin/* /usr/local/bin/#查看node节点状态kubectl get nodeskubectl get nodes -o wide #-owide输出额外信息对于Pod将输出Pod所在的Node名#此时在master02节点查到的node节点状态仅是从etcd查询到的信息而此时node节点实际上并未与master02节点建立通信连接因此需要使用一个VIP把node节点与master节点都关联起来 二、负载均衡的部署 #配置load balancer集群双机热备负载均衡nginx实现负载均衡keepalived实现双机热备#----------------- 1、两台负载均衡器配置nginx -------------------------------------#配置nginx的官方在线yum源配置本地nginx的yum源
cat /etc/yum.repos.d/nginx.repo EOF
[nginx]
namenginx repo
baseurlhttp://nginx.org/packages/centos/7/$basearch/
gpgcheck0
EOFyum install nginx -y#修改nginx配置文件配置四层反向代理负载均衡指定k8s群集2台master的节点ip和6443端口vim /etc/nginx/nginx.confevents {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; #master01server 192.168.73.110:6443; #master02}server {listen 6443;proxy_pass k8s-apiserver;}}http {......#检查配置文件语法nginx -t #启动nginx服务查看已监听6443端口systemctl start nginxsystemctl enable nginxss -lntp|grep nginx #------------------ 2、两台负载均衡器配置keepalived ------------------------------#部署keepalived服务yum install keepalived -y#修改keepalived配置文件vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id nginx_master
}vrrp_script check_nginx {script /etc/nginx/check_nginx.sh #指定检测脚本的路径并且该脚本充当心跳检测脚本
}vrrp_instance VI_1 {state MASTER #指定状态为master节点109为BACKUP备用节点interface ens33virtual_router_id 51priority 100 #108优先级为100 109为90优先级决定着主备的位置advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.73.66}track_script {check_nginx #追踪脚本的进程}
}#将该文件 发送给备用调度器并且将其中的配置修改为备用调度器的属性
cd /etc/keepalived/
scp keepalived.conf root192.168.73.109:pwd
#创建nginx状态检查脚本
vim /etc/nginx/check_nginx.sh#!/bin/bash
killall -0 nginx /dev/null
if [ $? -ne 0 ];thensystemctl stop keepalived
fichmod x /etc/nginx/check_nginx.sh #为脚本增加执行权限#将该脚本发送给备用调度器
cd /etc/nginx
scp check_nginx.conf root192.168.73.109:pwd#两台主备调度器启动keepalived服务一定要先启动了nginx服务再启动keepalived服务systemctl start keepalivedsystemctl enable keepalivedip addr #查看主节点的VIP是否生成 nginx心跳检测脚本说明 killall -0 可以用来检测程序是否执行 如果服务未执行的情况下 会进行报错 并且 $?的返回码 为非0值 vim /etc/keepalived/keepalived.conf
scp /etc/keepalived/keepalived.conf 192.168.136.150:/etc/keepalived/
systemctl enable --now keepalived.service
systemctl status keepalived.service systemctl restart nginx keepalived.service
ip a #---------------- 3、关闭主节点的nginx服务模拟故障测试keepalived-----------------------#关闭主节点lb01的Nginx服务模拟宕机观察VIP是否漂移到备节点systemctl stop nginxip addrsystemctl status keepalived #此时keepalived被脚本杀掉了 #备节点查看是否生成了VIPip addr #此时VIP漂移到备节点lb02 //修改所有node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP[rootnode01 /opt/kubernetes/cfg]#vim bootstrap.kubeconfig
[rootnode01 /opt/kubernetes/cfg]#vim kubelet.kubeconfig
[rootnode01 /opt/kubernetes/cfg]#vim kube-proxy.kubeconfig//重启node节点kubelet和kube-proxy服务
systemctl restart kubelet.service
systemctl restart kube-proxy.service //在 lb01 上查看 nginx 和 node 、 master 节点的连接状态
netstat -natp | grep nginx 三、k8s的web UI界面的搭建
//在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中部署 CoreDNS
cd /opt/k8s
vim recommended.yaml
#默认Dashboard只能集群内部访问修改Service为NodePort类型暴露到外部
kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443nodePort: 30001 #添加type: NodePort #添加selector:k8s-app: kubernetes-dashboard#通过recommended.yaml资源配置清单使用kubectl apply创建资源-f指定资源配置清单文件kubectl apply -f recommended.yaml#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-systemkubectl create clusterrolebinding dashboard-admin --clusterrolecluster-admin --serviceaccountkube-system:dashboard-admin#获取token值
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk /dashboard-admin/{print $1})#使用输出的token登录Dashboard访问node节点
https://192.168.136.110:30001