范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

云原生稳定性和可扩展性更强的k8s高可用方案讲解与实战操作

  一、概述
  在前面我的文章里或者网上其它资料讲高可用方案,基本上大多数使用Keepalived VIP的方案,但是这种方案并不是最佳的,还有更优的高可用方案,下面将详细介绍。如果小伙伴对k8s master Keepalived VIP的方案不了解的,可以参考我这篇文章:「云原生」Kubernetes(k8s)最完整版环境部署(V1.24.1)
  二、架构
  三、开始部署1)节点信息
  hostname
  IP
  角色
  local-168-182-110
  192.168.182.110
  master
  local-168-182-111
  192.168.182.110
  node
  local-168-182-112
  192.168.182.110
  node
  local-168-182-113
  192.168.182.113
  master
  local-168-182-130
  192.168.182.130
  master 2)前期准备(所有节点)1、配置hosts192.168.182.110 local-168-182-110 192.168.182.111 local-168-182-111 192.168.182.112 local-168-182-112 192.168.182.113 local-168-182-113 192.168.182.130 local-168-182-130 2、配置互信# 直接一直回车就行 ssh-keygen  ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-110 ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-111 ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-112 ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-113 ssh-copy-id -i ~/.ssh/id_rsa.pub root@local-168-182-130 3、时间同步yum install chrony -y systemctl start chronyd systemctl enable chronyd systemctl status chronyd chronyc sources 4、关闭防火墙systemctl stop firewalld systemctl disable firewalld 5、禁用SELinux# 临时关闭 setenforce 0 # 永久禁用 sed -i "s/^SELINUX=enforcing$/SELINUX=disabled/" /etc/selinux/config 6、关闭swap# 临时关闭;关闭swap主要是为了性能考虑 swapoff -a # 可以通过这个命令查看swap是否关闭了 free # 永久关闭         sed -ri "s/.*swap.*/#&/" /etc/fstab 7、设置bridge-nf-call-iptablescat </etc/docker/daemon.json< /etc/yum.repos.d/kubernetes.repo << EOF [k8s] name=k8s enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ EOF 5)开始安装kubeadm,kubelet和kubectl(所有节点)# 查找所有的版本,这里选择1.23.x版本 yum --showduplicates list kubelet  # disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库 yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 --disableexcludes=kubernetes  # 设置为开机自启并现在立刻启动服务 --now:立刻启动服务 systemctl enable --now kubelet  # 查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢 systemctl status kubelet  # 查看版本 kubectl version yum info kubeadm 6)使用 kubeadm 初始化集群(第一个master节点)
  最好提前把镜像下载好,这样安装快 docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.6 docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.23.6 docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.23.6 docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.23.6 docker pull registry.aliyuncs.com/google_containers/pause:3.6 docker pull registry.aliyuncs.com/google_containers/etcd:3.5.1-0 docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6
  集群初始化 kubeadm init    --apiserver-advertise-address=192.168.182.110    --image-repository registry.aliyuncs.com/google_containers    --kubernetes-version v1.23.6    --control-plane-endpoint=192.168.182.110    --service-cidr=10.1.0.0/16    --pod-network-cidr=10.244.0.0/16    --v=5 # –image-repository string:    这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers # –kubernetes-version string:  指定kubenets版本号,默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(v1.22.1)来跳过网络请求。 # –apiserver-advertise-address  指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更换。 # –pod-network-cidr             指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对  –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。 # --control-plane-endpoint     cluster-endpoint 是映射到该 IP 的自定义 DNS 名称,这里配置hosts映射:127.0.0.1   cluster-endpoint。 这将允许你将 --control-plane-endpoint=cluster-endpoint 传递给 kubeadm init,并将相同的 DNS 名称传递给 kubeadm join。 稍后你可以修改 cluster-endpoint 以指向高可用性方案中的负载均衡器的地址。
  mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
  查看节点信息 kubectl get nodes
  发现节点是NotReady状态,查看日志是因为没有装CNI网络插件,接下来就开始安装Calico 网络插件,当然也可以选择其它网络插件。 7)安装Calico网络插件wget https://docs.projectcalico.org/manifests/calico.yaml kubectl apply -f calico.yaml  # 查看 kubectl get all -n kube-system|grep calico  # 等calico pod都正常了,再查看节点状态 kubectl get pods -A kubectl get nodes
  8)配置IPVS(所有节点)1、加载ip_vs相关内核模块modprobe -- ip_vs modprobe -- ip_vs_sh modprobe -- ip_vs_rr modprobe -- ip_vs_wrr
  所有节点验证开启了ipvs: lsmod |grep ip_vs 2、安装ipvsadm工具yum install ipset ipvsadm -y 3、编辑kube-proxy配置文件,mode修改成ipvskubectl edit  configmap -n kube-system  kube-proxy 4、重启kube-proxy# 先查看 kubectl get pod -n kube-system | grep kube-proxy # 再delete让它自拉起 kubectl get pod -n kube-system | grep kube-proxy |awk "{system("kubectl delete pod "$1" -n kube-system")}" # 再查看 kubectl get pod -n kube-system | grep kube-proxy 9)master节点加入集群
  【问题】
  One or more conditions for hosting a new control plane instance is not satisfied. unable to add a new control plane instance to a cluster that doesn"t have a stable controlPlaneEndpoint address
  【解决】添加如下配置: # controlPlaneEndpoint: 192.192.168.110 kubectl edit cm kubeadm-config -n kube-system
  开始执行下面的命令将master节点加入集群 # 在第一个master节点上执行以下获取执行命令 # 证如果过期了,可以使用下面命令生成新证书上传,这里会打印出certificate key,后面会用到 CERT_KEY=`kubeadm init phase upload-certs --upload-certs|tail -1`  # 其中 --ttl=0 表示生成的 token 永不失效. 如果不带 --ttl 参数, 那么默认有效时间为24小时. 在24小时内, 可以无数量限制添加 worker. echo `kubeadm token create --print-join-command --ttl=0` " --control-plane --certificate-key $CERT_KEY --v=5"  # 拿到上面打印的命令在需要添加的节点上执行  # --control-plane 标志通知 kubeadm join 创建一个新的控制平面。加入master必须加这个标记 # --certificate-key ... 将导致从集群中的 kubeadm-certs Secret 下载控制平面证书并使用给定的密钥进行解密。这里的值就是上面这个命令(kubeadm init phase upload-certs --upload-certs)打印出的key。  mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
  等网络插件自动安装完后,再查看节点状态 kubectl get nodes
  10)修改master节点指向自己apiserver1、修改配置cd /etc/kubernetes # 修改/etc/kubernetes/admin.conf,/etc/kubernetes/kubelet.conf文件中的server ip改成127.0.0.1 vi /etc/kubernetes/admin.conf vi /etc/kubernetes/kubelet.conf  # 覆盖配置 cp /etc/kubernetes/admin.conf ~/.kube/config 2、删除旧的证书,生成新证书cd /etc/kubernetes/pki  # 先备份 mv apiserver.key apiserver.key.bak mv apiserver.crt apiserver.crt.bak  # 使用如下命令生成,分别在三个master节点上执行 kubeadm init phase certs apiserver --apiserver-advertise-address 192.168.182.110 --apiserver-cert-extra-sans "127.0.0.1,10.1.0.1"  kubeadm init phase certs apiserver --apiserver-advertise-address 192.168.182.113 --apiserver-cert-extra-sans "127.0.0.1,10.1.0.1"  kubeadm init phase certs apiserver --apiserver-advertise-address 192.168.182.130 --apiserver-cert-extra-sans "127.0.0.1,10.1.0.1" #  --apiserver-cert-extra-sans "127.0.0.1":设置了这个,之后加入节点验证证书阶段就不会报错了。 3、修改apiserverkubectl -n kube-system edit cm kubeadm-config -o yaml
  4、修改kube-prxoy配置kubectl edit cm kube-proxy -oyaml -n kube-system
  重启 kubectl delete pod -n kube-system `kubectl get pods  -n kube-system|grep kube-proxy|awk "{print $1}"` 5、重启docker和kubeletsystemctl restart docker kubelet 11)node节点上安装nginx
  这里使用nginx四层代理 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache yum install epel-release yum -y install nginx yum -y install nginx-all-modules.noarch
  配置nginx,在nginx.conf添加如下配置: stream {                          #实现四层代理功能     upstream kube_apiserver {            #定义集群,kube_apiserver是集群名称,可自行定义         least_conn;# 默认调度策略是轮询,在轮询中,如果服务器down掉了,会自动剔除该服务器。         server local-168-182-110:6443 max_fails=3 fail_timeout=30s;   #集群组是三台服务器k8s apiserver组成         server local-168-182-113:6443 max_fails=3 fail_timeout=30s;         server local-168-182-130:6443 max_fails=3 fail_timeout=30s;     }     server {                            #定义一个服务         listen 127.0.0.1:6443;             #需要监听的端口         proxy_pass kube_apiserver;       #调用集群         proxy_connect_timeout 10s;					# 连接超时时间         proxy_timeout 300s;							# 端口保持时间     } } 12)node节点加入集群 # 在第一个master节点上执行以下获取执行命令 # 证如果过期了,可以使用下面命令生成新证书上传,这里会打印出certificate key,后面会用到 CERT_KEY=`kubeadm init phase upload-certs --upload-certs|tail -1`  # 其中 --ttl=0 表示生成的 token 永不失效. 如果不带 --ttl 参数, 那么默认有效时间为24小时. 在24小时内, 可以无数量限制添加 worker. echo `kubeadm token create --print-join-command --ttl=0` " --certificate-key $CERT_KEY --v=5" # 示例如下: kubeadm join 127.0.0.1:6443 --token esczfh.6ckynzi6wfj8jhnk --discovery-token-ca-cert-hash sha256:bc8fb85184ed235b88afdba38f0a17976d353abb10d0739d25df452745d1eed8  --certificate-key a126867ad4d91721f157660df77cdea7862ebda8371280c3025c4cc45c23b85f --v=5
  修改 /etc/kubernetes/kubelet.conf  配置
  重启 systemctl restart kubelet
  等网络插件自动安装完后,再查看节点状态 kubectl get nodes kubectl get pods -A
  13)卸载kubeadm reset rm -rf /etc/kubernetes/* rm -fr ~/.kube rm -fr /var/lib/etcd 四、高可用故障模式测试1)master节点故障模拟(一个master故障)# 关机192.168.182.110 showdown -h now # 在其它master节点上查看节点状态 kubectl get nodes
  【结论】如上图可知,挂一个master节点不影响集群。 2)master节点故障模拟(两个master故障)# 关机192.168.182.113 showdown -h now # 在其它master节点上查看节点状态 kubectl get nodes
  【结论】如上图可知,挂两个master节点,整个集群不可用,还是之前说的,三个master节点只允许挂一个master节点,这里就不细说了,可以参考我之前的文章:【云原生】K8S master节点更换IP以及master高可用故障模拟测试
  无VIP稳定性更强的k8s高可用方案讲解就先到这里了,也是我们目前生成环境中使用的方案,小伙伴有任何疑问,欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章,请小伙伴耐心等待~

约翰逊空砍准三双吴前18910失误浙江力克北京送对手4连败北京时间1月18日20时,202223赛季CBA常规赛第28轮,浙江队对战北京队。历经一番角逐,浙江队9488力克北京队夺取3连胜且送对手4连败。数据统计浙江队吴前18分3篮板9助拒逆转!恩比德419,伦纳德20中10,哈登尴尬,哈里斯天神下凡北京时间1月18日,NBA常规赛76人客场挑战快船,乔治复出,赛前76人27胜16负排名东部第3,而快船23胜22负位居西部第6,登帝和卡椒的对决值得期待。首发方面,76人是哈登梅马尚367,胡明轩138广东10899双杀辽篮,付豪空砍15分1月18日晚7点35分的焦点战,广东男篮vs辽宁男篮。广东队方面,赵睿在对阵同曦队的时候伤病轮休,曾茂洲进入大名单,易建联这边没有意外,大名单在列,杜锋在开赛前给辽宁队放了个烟雾弹辽宁99108惜败广东,八连胜被终结,通过打分看谁为输球背锅郭艾伦,70分,打得急躁,不冷静,渴望胜利,有时想力挽狂澜,但效果不好!出场34分钟,贡献14分6板6助,2次抢断!付豪,75分,打出半决赛的水准,攻防两端做得出色!出场21分钟,大瓜!已婚国脚疑似婚外恋被曝光!曾是李铁爱将,顶替归化首发过北京时间1月18日,几天前在球场上大喊吴兴涵骗钱骗感情的某女子晒出图片,疑似她与吴兴涵两人曾一起浪漫的度过了不短的时光。而今年30岁的吴兴涵,早已结婚,孩子已经不小。世预赛期间,吴大难临头各自飞,曝陈戌源请黑枪甩锅杜兆才,名记怒批被架空一说最近,虽然到了年终岁末,但是对于中国足球来说,被曝光的内幕消息一个接一个。刚刚在苏州召开的足协执委会的会议,正式开始之前,国管部部长陈永亮被带走调查。对于调查部门来说,在这一次重要商竣程止步澳网次轮但未来可期!来了解下这个不一样的星二代仅仅用三个比赛日两场大满贯单打赛事,商竣程就让自己成了社交平台上的热门。即便在今天下午的男单次轮中,他输给了赛会16号种子,美国名将蒂亚弗,也不影响越来越多人把目光投向这位年纪不大亚足联官宣国足U23和关岛同一档,中超5队将解散大家好,我是詹妹,我们一起来关注中国足球。目前中国足球可以说因为李铁案的牵连受到很大的波动,所以说整个中国足球的发展都非常缓慢,并且国足内部的情况非常糟糕,出现了打假球赌球等等事宜西部排名榜掘金榜首,抢MVP遭质疑快船不敌76人,勇士却成赢家20222023赛季NBA常规赛正在如火如荼的进行中,1月18日比赛结束后,西部最新排名榜如下掘金轻取开拓者,独居榜首,战力榜力压凯尔特人,领衔全联盟,当家球星约基奇以61。8的概美媒重排2019年选秀火箭波特第10普尔杀入前5锡安让出状元作为近些年公认的选秀大年,2019年新秀虽然才在联盟中打了3个赛季,但已经涌现出大量天赋异禀的球星,甚至部分新星已经被视作联盟的未来,那么3年时间过去,这些新秀的排名是否有所改变?特林布尔39分上海久事男篮战胜浙江东阳光上海久事男篮VS浙江东阳光958517日20点,CBA常规赛第二十八轮,上海久事男篮对阵浙江东阳光。依靠特林布尔的出色发挥,最终上海久事男篮9585战胜浙江东阳光。1月19日(周四
又一批明星基金经理心水股来了!点蓝字关注,不迷路随着2022年财报陆续披露,又有明星基金经理的持仓揭晓。去年四季度,高毅资产冯柳继续增持了消费股恒顺醋业,瑞银华泰柏瑞基金经理沈雪峰管理的华泰柏瑞品质成长万家基金张红甫苹果打算复活HomePod,这是打算进军智能音箱嘛苹果复活HomePod,这和ChatGPT有关系?一只智能音箱倒下了,千万个智能助手就站了起来。两年后,苹果复活了HomePod。这种作法使人费解。毕竟苹果早在两年前就宣布了停产和懂财经银行分类银行银行是依法成立的经营货币信贷业务的金融机构,是商品货币经济发展到一定阶段的产物。它的产生大体上分为三个阶段第一阶段出现了货币兑换业和兑换商。第二阶段增加了货币保管和收付业务即由华为杨友桂运营商从能源消费者走向能源消费者生产者使能者今天,巴塞罗那,阳光明媚,微风和煦,以使能运营商赢在碳中和时代为主题的华为数字能源高峰论坛在西地中海旁的W酒店隆重举办。来自全球的行业客户合作伙伴和意见领袖齐聚一堂,分享全球能源行如何使用文本智能纠错工具改善写作质量提高写作效率随着人工智能技术的不断发展,文本智能纠错工具在写作领域中发挥着越来越重要的作用。在过去,我们需要花费大量的时间和精力来查找语法错误和拼写错误,但现在,我们可以利用文本智能纠错工具来德勤中国消费者对电动汽车的需求呈现刚性本报记者张硕北京报道近期德勤发布全球汽车消费者调研2023报告,报告显示,中国消费者对纯电动汽车的兴趣持续增长,电动车的吸引力主要集中在消费者渴望得到更好的驾驶体验以及燃料成本的大上千家银行在用!合合信息启信慧眼对公信贷方案助力实体经济发展图说商业大数据技术产品来源采访对象供图(下同)当金融扶持实体经济的政策与日益收紧的风险管控要求相碰撞时,银行从业人员难免陷入想贷不敢贷的两难境地。近期,合合信息旗下启信宝企业端产品银行助贷居间中介获客方式的发展变化历程随着互联网技术的不断发展,助贷机构已经成为金融行业的重要组成部分。为了获得更多的客户,助贷机构采用了许多传统的获客方法。本文将介绍几种主要的获客方法,并结合一些实际案例和数据进行分因承兑汇票贸易背景审查不严,严重违反审慎经营规则,齐商银行淄川支行被罚30万元近日,淄博银保监分局发布的行政处罚信息公开表(淄银保监罚决字202311号)显示,齐商银行股份有限公司淄川支行存在承兑汇票贸易背景审查不严,严重违反审慎经营规则的违法违规事实,淄博涉贷款业务违法违规,湖北三家银行被罚365万来源中新经纬24日,湖北银保监局网站发布三条行政处罚信息,中国邮政储蓄银行股份有限公司鄂州市分行湖北大冶农村商业银行股份有限公司湖北当阳农村商业银行股份有限公司因违法违规分别被罚3财政部截至2023年1月末全国地方政府债务余额357018亿元央视网消息据财政部,2023年1月,全国发行新增债券6258亿元,其中一般债券1346亿元专项债券4912亿元。全国发行再融资债券177亿元,其中一般债券103亿元专项债券74亿元