自己做视频网站 在优酷推广,建设网站 费用吗,模板做网站优缺点,php做网站需要的技术目录
【kubernetes】k8s高可用集群搭建#xff08;三主三从#xff09;
一、服务器设置
二、环境配置
1、关闭防火墙
2、关闭selinux
3、关闭swap
4、修改主机名#xff08;根据主机角色不同#xff0c;做相应修改#xff09;
5、主机名映射
6、将桥接的IPv4流量…目录
【kubernetes】k8s高可用集群搭建三主三从
一、服务器设置
二、环境配置
1、关闭防火墙
2、关闭selinux
3、关闭swap
4、修改主机名根据主机角色不同做相应修改
5、主机名映射
6、将桥接的IPv4流量传递到iptables的链
7、时间同步
8、master之间进行免密登录设置
三、安装部署
一配置部署keepalived服务
1、安装Keepalived所有master主机
2、k8s-master1/2/3节点配置
3、启动和检查
4、查看启动状态
5、启动完成后在master1查看网络信息
二配置部署haproxy服务
1、所有master主机安装haproxy
2、修改配置文件
3、启动和检查
4、查看启动状态
5、检查端口
三配置部署Docker服务所有主机
四部署kubelet kubeadm kubectl工具
1、使用 YUM 方式安装Kubernetes时推荐使用阿里的yum。
2、安装kubelet kubeadm kubectl
五部署Kubernetes Master
1、创建kubeadm-config.yaml文件
2、查看所需镜像信息
3、下载k8s所需的镜像所有master主机
4、使用kubeadm命令初始化k8s
5、根据初始化的结果操作
6、查看集群状态
1修改kube-controller-manager.yaml文件
2修改kube-scheduler.yaml文件
3查看集群状态
4查看pod信息
5查看节点信息
六安装集群网络
在k8s-master1节点执行
没有变成ready原因是网络插件缺失
上传插件
再次查看节点信息
七添加master节点
1、在k8s-master2和k8s-master3节点创建文件夹
2、在k8s-master1节点执行
3、将其他master节点加入集群
查看节点信息
八加入Kubernetes Node
查看节点信息
查看pod信息
九测试Kubernetes集群
1、所有node主机下载测试镜像
2、在Kubernetes集群中创建一个pod验证是否正常运行。
3、创建完 Deployment 的资源清单之后使用 create 执行资源清单来创建容器。
4、创建Service资源清单
5、访问测试
四、拓展试验
一宕机master1验证服务
二宕机master1/2验证服务
三两台宕机主机恢复验证服务
五、实验总结 【kubernetes】k8s高可用集群搭建三主三从
一、服务器设置
准备6台虚拟机3台master节点3台node节点保证master节点数为3的奇数。
网络所有机器网络互通、可以访问外网
硬件2核CPU、2G内存、硬盘20G IP地址 角色 主机名 需要用到的服务 192.168.100.131 master k8s-master1 keepalived haproxy docker kubectl kubeadm kubelet 192.168.100.132 master k8s-master2 192.168.100.133 master k8s-master3 192.168.100.134 node k8s-node1 docker kubectl kubeadm kubelet 192.168.100.135 node k8s-node2 192.168.100.136 node k8s-node3 192.168.100.154 VIP master.k8s.io 代理master1/2/3 二、环境配置
1、关闭防火墙
[rootlocalhost ~]# systemctl stop firewalld
[rootlocalhost ~]# systemctl disable firewalld
2、关闭selinux
[rootlocalhost ~]# sed -i s/enforcing/disabled/ /etc/selinux/config
[rootlocalhost ~]# setenforce 0
3、关闭swap
[rootlocalhost ~]# swapoff -a
[rootlocalhost ~]# sed -ri s/.*swap.*/#/ /etc/fstab 4、修改主机名根据主机角色不同做相应修改
hostname k8s-node1 建议做永久主机名配置 hostnamectl set-hostname k8s-master1
bash
5、主机名映射
[rootk8s-master1 ~]# cat /etc/hosts EOF192.168.100.131 master1.k8s.io k8s-master1192.168.100.132 master2.k8s.io k8s-master2192.168.100.133 master3.k8s.io k8s-master3192.168.100.134 node1.k8s.io k8s-node1192.168.100.135 node2.k8s.io k8s-node2192.168.100.136 node3.k8s.io k8s-node3192.168.100.154 master.k8s.io k8s-vipEOF 6、将桥接的IPv4流量传递到iptables的链
[rootk8s-master1 ~]# cat EOF /etc/sysctl.confnet.bridge.bridge-nf-call-ip6tables 1net.bridge.bridge-nf-call-iptables 1EOF
[rootk8s-master1 ~]# modprobe br_netfilter
[rootk8s-master1 ~]# sysctl -p 7、时间同步
[rootk8s-master1 ~]# yum install ntpdate -y
[rootk8s-master1 ~]# ntpdate time.windows.com 8、master之间进行免密登录设置
[rootk8s-master1 ~]# ssh-keygen
[rootk8s-master1 ~]# ssh-cpoy-id 192.168.100.131
[rootk8s-master1 ~]# ssh-cpoy-id 192.168.100.132
[rootk8s-master1 ~]# ssh-cpoy-id 192.168.100.133
同理
master2/3操作互相之间免密登录 三、安装部署
一配置部署keepalived服务
1、安装Keepalived所有master主机
[rootk8s-master1 ~]# yum install -y keepalived 2、k8s-master1/2/3节点配置
[rootk8s-master1 ~]#
cat /etc/keepalived/keepalived.conf k8s-master2节点配置
[rootk8s-master2 ~]#
cat /etc/keepalived/keepalived.conf k8s-master3节点配置
[rootk8s-master3 ~]#
cat /etc/keepalived/keepalived.conf 3、启动和检查
所有master节点都要执行
[rootk8s-master1 ~]# systemctl start keepalived
[rootk8s-master1 ~]# systemctl enable keepalived
4、查看启动状态
[rootk8s-master1 ~]# systemctl status keepalived 5、启动完成后在master1查看网络信息
[rootk8s-master1 ~]# ip a s ens33 二配置部署haproxy服务
1、所有master主机安装haproxy
[rootk8s-master1 ~]# yum install -y haproxy 每台master节点中的配置均相同配置中声明了后端代理的每个master节点服务器指定了haproxy的端口为16443因此16443端口为集群的入口。 2、修改配置文件
[rootk8s-master1 ~]# cat /etc/haproxy/haproxy.cfg 3、启动和检查
所有master节点都要执行
[rootk8s-master1 ~]# systemctl start haproxy
[rootk8s-master1 ~]# systemctl enable haproxy
4、查看启动状态
[rootk8s-master1 ~]# systemctl status haproxy 5、检查端口
[rootk8s-master1 ~]# netstat -lntup|grep haproxy 三配置部署Docker服务所有主机 所有主机上分别部署 Docker 环境因为 Kubernetes 对容器的编排需要 Docker 的支持。
[rootk8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[rootk8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 使用 YUM 方式安装 Docker 时推荐使用阿里的 YUM 源。 [rootk8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [rootk8s-master ~]# yum clean all yum makecache fast [rootk8s-master ~]# yum -y install docker-ce [rootk8s-master ~]# systemctl start docker [rootk8s-master ~]# systemctl enable docker 镜像加速器所有主机配置
[rootk8s-master ~]# cat /etc/docker/daemon.json
[rootk8s-master ~]# systemctl daemon-reload
[rootk8s-master ~]# systemctl restart docker 四部署kubelet kubeadm kubectl工具
1、使用 YUM 方式安装Kubernetes时推荐使用阿里的yum。
所有主机配置
[rootk8s-master ~]#
cat /etc/yum.repos.d/kubernetes.repo
[rootk8s-master ~]# ls /etc/yum.repos.d/
backup Centos-7.repo CentOS-Media.repo CentOS-x86_64-kernel.repo docker-ce.repo kubernetes.repo 2、安装kubelet kubeadm kubectl
所有主机配置
[rootk8s-master ~]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
[rootk8s-master ~]# systemctl enable kubelet 五部署Kubernetes Master
在具有vip的master上操作。此处的vip节点为k8s-master1。
1、创建kubeadm-config.yaml文件
[rootk8s-master1 ~]# cat kubeadm-config.yaml 2、查看所需镜像信息
[rootk8s-master1 ~]# kubeadm config images list --config kubeadm-config.yaml 3、下载k8s所需的镜像所有master主机
[rootk8s-master1 ~]# kubeadm config images pull --config kubeadm-config.yaml 4、使用kubeadm命令初始化k8s
[rootk8s-master1 ~]# kubeadm init --config kubeadm-config.yaml 初始化中的错误 执行以下命令后重新执行初始化命令
[rootk8s-master1 ~]# echo 1 /proc/sys/net/ipv4/ip_forward
[rootk8s-master1 ~]# kubeadm init --config kubeadm-config.yaml 5、根据初始化的结果操作
[rootk8s-master1 ~]# mkdir -p $HOME/.kube
[rootk8s-master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[rootk8s-master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config 6、查看集群状态
[rootk8s-master1 manifests]# kubectl get cs 注意出现以上错误情况是因为/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口为0导致的解决方式是注释掉对应的port即可
1修改kube-controller-manager.yaml文件 2修改kube-scheduler.yaml文件 3查看集群状态
[rootk8s-master1 ~]# kubectl get cs 4查看pod信息
[rootk8s-master1 ~]# kubectl get pods -n kube-system 5查看节点信息
[rootk8s-master1 ~]# kubectl get nodes 六安装集群网络
在k8s-master1节点执行
[rootk8s-master1 ~]# docker load flannel_v0.12.0-amd64.tar 没有变成ready原因是网络插件缺失 上传插件
[rootk8s-master1 ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz
[rootk8s-master1 ~]# cp flannel /opt/cni/bin/
[rootk8s-master1 ~]# kubectl delete -f kube-flannel.yml 删除之前的apply操作 再次查看节点信息
[rootk8s-master1 ~]# kubectl apply -f kube-flannel.yml
[rootk8s-master1 ~]# kubectl get nodes 七添加master节点
1、在k8s-master2和k8s-master3节点创建文件夹
[rootk8s-master2 ~]# mkdir -p /etc/kubernetes/pki/etcd
[rootk8s-master3 ~]# mkdir -p /etc/kubernetes/pki/etcd
2、在k8s-master1节点执行
从k8s-master1复制秘钥和相关文件到k8s-master2和k8s-master3 [rootk8s-master1 ~]# scp /etc/kubernetes/admin.conf root192.168.100.132:/etc/kubernetes [rootk8s-master1 ~]# scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root192.168.100.132:/etc/kubernetes/pki [rootk8s-master1 ~]# scp /etc/kubernetes/pki/etcd/ca.* root192.168.100.132:/etc/kubernetes/pki/etcd [rootk8s-master1 ~]# scp /etc/kubernetes/admin.conf root192.168.100.133:/etc/kubernetes [rootk8s-master1 ~]# scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root192.168.100.133:/etc/kubernetes/pki [rootk8s-master1 ~]# scp /etc/kubernetes/pki/etcd/ca.* root192.168.100.133:/etc/kubernetes/pki/etcd 3、将其他master节点加入集群
注意kubeadm init生成的token有效期只有1天生成不过期token
[rootk8s-master1 manifests]# kubeadm token create --ttl 0 --print-join-command
[rootk8s-master1 manifests]# kubeadm token list k8s-master2和k8s-master3都需要加入
[rootk8s-master2 ~]# kubeadm join master.k8s.io:6443 --token pj2haa.zf72tyum7uiyeamx --discovery-token-ca-cert-hash sha256:aaec80f6efa10581c329034bef7e2c2f2f1cb2ef4228f8ddcfcbbb44df55aae3 --control-plane [rootk8s-master2 ~]# mkdir -p $HOME/.kube
[rootk8s-master2 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[rootk8s-master2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config [rootk8s-master2 ~]# docker load flannel_v0.12.0-amd64.tar
[rootk8s-master2 ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz
[rootk8s-master2 ~]# cp flannel /opt/cni/bin/ 查看节点信息
[rootk8s-master1 ~]# kubectl get nodes [rootk8s-master1 manifests]# kubectl get pods --all-namespaces 八加入Kubernetes Node
直接在node节点服务器上执行k8s-master1初始化成功后的消息即可
[rootk8s-node1 ~]# kubeadm join master.k8s.io:6443 --token o3j9wj.58io4u28r6q8o9lj --discovery-token-ca-cert-hash sha256:6ad29ff932b12680844e140938eaeaaca120d6020c273b6b56d69d256fbc44b0 [rootk8s-node1 ~]# docker load flannel_v0.12.0-amd64.tar 查看节点信息
[rootk8s-master1 ~]# kubectl get nodes 查看pod信息
[rootk8s-master1 ~]# kubectl get pods -n kube-system 九测试Kubernetes集群
1、所有node主机下载测试镜像
[rootk8s-node1 ~]# docker pull nginx:1.19.0 2、在Kubernetes集群中创建一个pod验证是否正常运行。
[rootk8s-master1 ~]# mkdir demo
[rootk8s-master1 ~]# cd demo
[rootk8s-master1 demo]# vim nginx-deployment.yaml 3、创建完 Deployment 的资源清单之后使用 create 执行资源清单来创建容器。
通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。
[rootk8s-master1 demo]# kubectl create -f nginx-deployment.yaml
[rootk8s-master1 demo]# kubectl get pods [rootk8s-master1 ~]# kubectl get pods -o wide 4、创建Service资源清单 在创建的 nginx-service 资源清单中定义名称为 nginx-service 的 Service、标签选择器为 app: nginx、type 为 NodePort 指明外部流量可以访问内部容器。在 ports 中定义暴露的端口库号列表对外暴露访问的端口是 80容器内部的端口也是 80。
[rootk8s-master1 demo]# vim nginx-service.yaml [rootk8s-master1 demo]# kubectl create -f nginx-service.yaml
[rootk8s-master1 demo]# kubectl get svc 5、访问测试
通过浏览器访问nginxhttp://master.k8s.io:31350 域名或者VIP地址
[rootk8s-master1 demo]# elinks --dump http://master.k8s.io:31350 浏览器测试192.168.100.154:31350 四、拓展试验
一宕机master1验证服务
挂起k8s-master1节点刷新页面还是能访问nginx说明高可用集群部署成功。 检查会发现VIP已经转移到k8s-master2节点上
[rootk8s-master2 ~]# ip a s ens33 验证操作master
[rootk8s-master2 ]#kubectl get nodes 至此Kubernetes企业级高可用环境完美实现。 二宕机master1/2验证服务
以此类推停掉master2的服务vip跳转至master3服务仍保持 检查会发现VIP已经转移到k8s-master3节点上
[rootk8s-master3 ~]# ip a s ens33 验证操作master
[rootk8s-master3 ]#kubectl get nodes 三两台宕机主机恢复验证服务
Master1 Master2 Master3 访问服务 五、实验总结 1、集群中只要有一个master节点正常运行就可以正常对外提供业务服务。 2、如果需要在master节点使用kubectl相关的命令必须保证至少有2个master节点正常运行才可以使用不然会有 Unable to connect to the server: net/http: TLS handshake timeout 这样的错误。 3、当一台可以查看nodes节点的master宕机之后其余两台随机一台获取vip然后可以观察nodes节点但是当超过两台master宕机之后集群需重建才可以观察nodes节点但服务未停止当两台宕机主机回复之后服务停止node节点不可观察集群停止需重建 4、Node节点故障时pod自动转移当pod所在的Node节点宕机后根据 controller-manager的–pod-eviction-timeout 配置默认是5分钟5分钟后k8s会把pod状态设置为unkown 然后在其它节点启动pod。当故障节点恢复后k8s会删除故障节点上面的unkown pod。如果你想立即强制迁移可以用 kubectl drain nodename 5、为了保证集群的高可用性建议master节点和node节点至少分别部署3台及以上且master节点应该部署基数个实例(3、5、7、9)。