自助建站帮助网,企业名录2019企业黄页,网络服务类型及其采用的网络协议,网站备案号注销查询↑↑↑↑接上一篇继续部署↑↑↑↑
之前已经完成了单master节点的部署#xff0c;现在需要完成多master节点以及实现k8s集群的高可用
一、完成master02节点的初始化操作 二、在master01节点基础上#xff0c;完成master02节点部署
步骤一#xff1a;准备好master节点所需…↑↑↑↑接上一篇继续部署↑↑↑↑
之前已经完成了单master节点的部署现在需要完成多master节点以及实现k8s集群的高可用
一、完成master02节点的初始化操作 二、在master01节点基础上完成master02节点部署
步骤一准备好master节点所需要的文件
etcd数据库所需要的ssl证书、master01节点的kubernetes安装目录二进制文件、组件与apiserver通信的集群引导文件、启动参数配置文件、kubectl与apiserver通信的集群引导文件、各组件被systemd管理的service文件
##etcd目录只要ssl就可以kubernetes安装目录传输包含二进制文件、证书、启动参数配置文件、集群引导文件
[rootmaster01 opt#ls
etcd k8s kubernetes rh
[rootmaster01 opt#scp -r kubernetes/ etcd/ master02:/opt/ ##service服务文件
[rootmaster01 opt#ls /usr/lib/systemd/system/kube*
/usr/lib/systemd/system/kube-apiserver.service /usr/lib/systemd/system/kube-controller-manager.service /usr/lib/systemd/system/kube-scheduler.service
[rootmaster01 opt#scp /usr/lib/systemd/system/kube* master02:/usr/lib/systemd/system/ [rootmaster01 opt#ls /root/.kube/
cache config
[rootmaster01 opt#scp -r /root/.kube/ master02:/root/
rootmaster02s password:
config 只留下必要的文件 步骤二修改apiserver、controller-manager、scheduler启动参数配置文件中的监听地址以及apiserver的通告地址
---------- master02 节点部署 ----------
//从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
scp -r /opt/etcd/ root192.168.20.10:/opt/
scp -r /opt/kubernetes/ root192.168.20.10:/opt
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root192.168.20.10:/usr/lib/systemd/system///修改配置文件kube-apiserver中的IP
vim /opt/kubernetes/cfg/kube-apiserver
KUBE_APISERVER_OPTS--logtostderrtrue \
--v4 \
--etcd-servershttps://192.168.20.15:2379,https://192.168.20.16:2379,https://192.168.20.17:2379 \
--bind-address192.168.20.10 \ #修改
--secure-port6443 \
--advertise-address192.168.20.10 \ #修改
......//在 master02 节点上启动各服务并设置开机自启
systemctl start kube-apiserver.service
systemctl enable kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl enable kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service//查看node节点状态
ln -s /opt/kubernetes/bin/* /usr/local/bin/kubectl get nodes
kubectl get nodes -o wide #-owide输出额外信息对于Pod将输出Pod所在的Node名
//此时在master02节点查到的node节点状态仅是从etcd查询到的信息而此时node节点实际上并未与master02节点建立通信连接因此需要使用一个VIP把node节点与master节点都关联起来 步骤三依次启动apiserver、controller-manager、scheduler并验证 二、部署nginx做负载均衡器
------------------------------ 负载均衡部署 ------------------------------
//配置load balancer集群双机热备负载均衡nginx实现负载均衡keepalived实现双机热备
##### 在lb01、lb02节点上操作 #####
//配置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.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.20.15:6443;server 192.168.20.10:6443;}server {listen 6443;proxy_pass k8s-apiserver;}
}http {
......//检查配置文件语法
nginx -t //启动nginx服务查看已监听6443端口
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx 注意四层代理需要有stream模块 三、部署keepalived服务做k8s集群负载均衡器高可用
//部署keepalived服务
yum install keepalived -y//修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {# 接收邮件地址notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}# 邮件发送地址notification_email_from Alexandre.Cassenfirewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id NGINX_MASTER #lb01节点的为 NGINX_MASTERlb02节点的为 NGINX_BACKUP
}#添加一个周期性执行的脚本
vrrp_script check_nginx {script /etc/keepalived/nginx.sh #指定检查nginx存活的脚本路径
}vrrp_instance VI_1 {state MASTER #lb01节点的为 MASTERlb02节点的为 BACKUPinterface ens33 #指定网卡名称 ens33virtual_router_id 51 #指定vrid两个节点要一致priority 100 #lb01节点的为 100lb02节点的为 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.20.150/24 #指定 VIP}track_script {check_nginx #指定vrrp_script配置的脚本}
}//方法一创建nginx状态检查脚本
vim /etc/keepalived/nginx.sh
#!/bin/bash
#egrep -cv grep|$$ 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程ID
count$(ps -ef | grep nginx | egrep -cv grep|$$)if [ $count -eq 0 ];thensystemctl stop keepalived
fi//方法二创建nginx状态检查脚本2
cat /etc/keepalived/nginx.sh EOF
#!/bin/bash
killall -0 nginx /dev/null
if [ $? -ne 0 ];thensystemctl stop keepalived
fi
EOFchmod x /etc/keepalived/nginx.sh//启动keepalived服务一定要先启动了nginx服务再启动keepalived服务
systemctl start keepalived
systemctl enable keepalived
ip a #查看VIP是否生成 备节点在主节点的配置文件上修改 验证故障转移 主节点重新启动nginx和keepalived服务 会抢占vip 四、修改修改node节点上的配置引导文件中的server对应的ip为VIP
bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
//修改node节点上的bootstrap.kubeconfig, kubelet.kubeconfig kube-proxy.kubeconfig配置文件为VIP
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig
server: https://192.168.20.100:6443vim kubelet.kubeconfig
server: https://192.168.20.100:6443vim kube-proxy.kubeconfig
server: https://192.168.20.100:6443//重启kubelet和kube-proxy服务
systemctl restart kubelet.service
systemctl restart kube-proxy.service 同步node02也一样需要修改 五、所有的master节点的集群引导配置文件都指向本机apiserver的ip和端口
[rootmaster02 cfg]#ls
kube-apiserver kube-controller-manager kube-controller-manager.kubeconfig kube-scheduler kube-scheduler.kubeconfig token.csv
[rootmaster02 cfg]#vim kube-controller-manager.kubeconfig
[rootmaster02 cfg]#vim kube-scheduler.kubeconfig
[rootmaster02 cfg]#cd ~/.kube/
[rootmaster02 .kube]#ls
cache config
[rootmaster02 .kube]#vim config
[rootmaster02 .kube]#ls /usr/lib/systemd/system/kube-*
/usr/lib/systemd/system/kube-apiserver.service /usr/lib/systemd/system/kube-controller-manager.service /usr/lib/systemd/system/kube-scheduler.service
[rootmaster02 .kube]#systemctl restart kube-apiserver.service
[rootmaster02 .kube]#systemctl restart kube-controller-manager.service
[rootmaster02 .kube]#systemctl restart kube-scheduler.service 到此k8s集群已经部署完毕了
六、安装dashboard
仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群对容器化应用程序进行故障排除并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序以及创建或修改单个Kubernetes资源例如部署作业守护进程等。例如您可以使用部署向导扩展部署启动滚动更新重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。
//在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
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-dashboardkubectl apply -f recommended.yaml#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrolecluster-admin --serviceaccountkube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk /dashboard-admin/{print $1})使用输出的token登录Dashboardhttps://NodeIP:30001 七、总结二进制部署k8s集群
1部署etcd
使用cfssl工具签发证书和私钥文件解压etcd软件包获取二进制文件 etcd etcdctl准备etcd集群配置文件启动etcd进程服务将所有节点加入到etcd集群中
etcd的操作
#查看etcd集群健康状态
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379,https://IP2:2379,https://IP3:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 -wtable endpoint health#查看etcd集群状态信息
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379,https://IP2:2379,https://IP3:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 -wtable endpoint status#查看etcd集群成员列表
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379,https://IP2:2379,https://IP3:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 -wtable member list#向etcd插入键值
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 put KEY VALUE#查看键的值
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 get KEY#删除键
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 del KEY#备份etcd数据库
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 snapshot save 备份文件路径#恢复etcd数据库
ETCDCTL_API3 /opt/etcd/bin/etcdctl --endpointshttps://IP1:2379 --cacertCA证书 --cert客户端证书 --key客户端私钥 snapshot restore 备份文件路径
2部署master组件
使用cfssl工具签发证书和私钥文件下载K8S软件包获取二进制文件 kube-apiserver kube-controller-manager kube-scheduler 准备 kube-apiserver 启动时要调用的 bootstrap-token 认证文件token.csv准备 kube-apiserver kube-controller-manager kube-scheduler 的进程服务启动参数配置文件准备 kube-controller-manager kube-scheduler kubectl 的 kubeconfig 集群引导配置文件用于连接和验证 kube-apiserver依次启动 kube-apiserver kube-controller-manager kube-scheduler 进程服务执行 kubectl get cs 命令查看master组件的健康状态
3部署node组件
获取二进制文件 kubelet kube-proxy准备 kubelet kube-proxy 使用的 kubeconfig集群引导配置文件 bootstrap.kubeconfig(kubelet首次访问apiserver使用认证的文件) kube-proxy.kubeconfig准备 kubelet kube-proxy 的进程服务启动参数配置文件启动 kubelet 进程服务向 apiserver 发起 CSR 请求自动签发证书master 通过 CSR 请求后 kubelet 即可获取到证书加载 ipvs 模块启动 kube-proxy 进程服务安装 cni 网络插件flannel或calico和 CoreDNS执行 kubectl get nodes 命令查看node节点状态
4部署多master高可用
负责master组件相关的二进制文件、证书、私钥、启动参数配置文件、kubeconfig集群引导配置文件和etcd的证书、私钥文件修改 kube-apiserver kube-controller-manager kube-scheduler 启动参数配置文件里的监听地址和通告地址再依次重启服务进程部署 nginx/haproxy 负载均衡器和 keepalived 高可用修改 kubelet kube-proxy kubectl 的kubeconfig集群引导配置文件里的server参数都指向keepalived的VIP地址再重启 kubelet kube-proxy 服务进程修改其它master节点上的 kube-controller-manager kube-scheduler 的kubeconfig集群引导配置文件里的server参数都指向各自本机的apiserver地址再重启服务进程