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

云原生稳定性和可扩展性更强的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高可用方案讲解就先到这里了,也是我们目前生成环境中使用的方案,小伙伴有任何疑问,欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章,请小伙伴耐心等待~

查尔斯三世和查理一世二世有关系吗?查理就是查尔斯,查尔斯就是查理,都是英语Charles,这有什么不同吗?首先讲一下英国国王的称号问题,一世二世乃至万世,这是中国皇帝的想法,希望自己的直系后代继承帝位(少数几次是皇国家航天局探月工程四期已立项未来还将建立国际月球科研站基本型据国家航天局的消息,我国探月工程有了新的进展。探月与航天工程中心主任刘继忠在接受总台记者采访时表示探月工程四期任务已获国家批复,目前进展顺利。探月工程四期包括嫦娥六号嫦娥七号和嫦娥中国的可重复使用航天器会是啥样中国设计建造空间站时,关于载人工具,当时据说共有五种方案大型空中平台起飞的中型空天飞机侧挂式火箭动力航天飞机顶托式中型与小型航天飞机,载人飞船。在初筛后,只留下载人与顶托式小型航天92年总决公牛遇上开拓者,乔丹场均3656卫冕,滑翔机什么数据?乔丹在新秀赛季就展现了自己无与伦比的天赋,场均得到28。2分6。3篮板5。9助攻2。4抢断,进入了NBA的最佳二阵,在个人职业生涯第3个赛季,其实乔丹就已经开始成为联盟的门面了。不2010年豪掷4。5亿买下勇士,12年时间过去,勇士老板赚了多少钱?连续两个赛季无缘季后赛之后,勇士在上个赛季强势反弹,不仅重新杀回季后赛,还一口气拿到了总冠军。勇士之所以能够如此快速的完成反弹,除去核心球员伤病恢复之外,也与球队管理层出色的运营能平筐暴扣单挑库里!湖人650万新援抢戏两大球星,快攻真犀利8月30日,湖人新援朗尼沃克在猛龙助教RicoHines的训练营大放异彩。沃克和库里特雷杨等球员一起打比赛,身高1米96的沃克展现了自己的速度和力量。他的进攻非常犀利,抢走了库里和游三孔,知天下解锁历史典故之孔庙篇孔庙,又被称为至圣庙,是我国历代王朝祭祀思想家政治家教育家孔子的庙宇,规模宏大气势雄伟壮丽金碧辉煌,极具东方特色,被誉为天下第一庙。1994年,孔庙孔府孔林一起被列入世界文化遗产名饭店的凉拌豆腐皮为啥好吃,告诉你不外传的秘密,学会你也是大厨生活没有彩排,美食没有美颜。大家好,今天用豆腐皮给大家分享一道美食。豆腐皮,我们生活里面非常常见的一种食材,很多时候我们用来凉拌,涮锅,做成好吃的冒菜,吃起来都是非常好吃的。今天我刺客信条幻景CG预告公布街头小贼蜕变刺客在最近经历一系列泄露与情报公布之后,育碧终于正式公布了刺客信条幻景的预告片。这段预告片展示的是CG画面,并没有任何实机内容。本作将回归系列初心,不再延续近年来RPG风格的设计方向,汉惠帝刘盈汉惠帝名叫刘盈,是汉朝开国皇帝刘邦与吕后之子,西汉王朝的第二位皇帝。他继续推行了黄老哲学,促进了汉代思想文化的发展。不过他生性善良却又懦弱,一生都活在母亲吕太后的淫威之下,没有做出什么都想要的一加AcePro,最后究竟要到了什么?拿到一加AcePro也有段时间了,眼看就要到了分开的日子,是时候好好聊聊了!其实在拿到产品前,通过一加AcePro的邀请函,就已经大致了解了这是一款怎样的产品。简单来说,一加Ace
台北故宫博物院,69。8万件耀眼的藏品,是华夏瑰宝是心头爱注为行文简略和易于区分,本文个别处将北京的故宫博物院简称为北京故宫,台北故宫博物院简称为台北故宫。当我们说到台北故宫博物院,总爱拿它与北京故宫博物院做对比,这两座故宫博物院,都以清奥斯卡红毯影后杨紫琼太耀眼,LadyGaga变样了,甄子丹撞脸吴刚第95届奥斯卡颁奖礼隆重举行,红毯上也是久违的星光熠熠,好多明星都来了,真的好多人啊!红毯上最耀眼的绝对是杨紫琼了,此次的红毯造型一改往日或霸气或时尚的风格,走起了仙女风,不论是精一些旧影新娘戴竹筐出嫁,清兵在衙门口站岗,小孩在华表下玩耍沧海桑田,沧海桑田,沧海桑田。用旧照片来重现一百多年前的历史,肯定要比史料更直观更逼真。一睹这段凝固的历史,然后在后期的渲染下,或许会有一种触景生情的感觉,让人回味无穷,而不是被宫上海安福路小公主首次采访流出,谣言被揭穿,网友滤镜碎了上海安福路小公主大家还记得吗?自从去年一月走红后,各种围绕她的故事层出不穷。最近她终于接受了一次采访,讲述了自己的经历。然而看完整个采访,大家发现她跟网上流传的根本不一样。甚至有网普通化妆品宣传特别功效曦茜公主五级代理团队计酬涉嫌违规爱美之心,人皆有之。衣食住行等基本需求满足后,对生活质量的追求提升,使越来越多的人开始使用化妆品,化妆品行业日渐火爆起来。近日,微商电商调研注意到市面上有个名为CXCX曦茜公主的化肩带掉落露胸罩竟是造型设计,银河护卫队星云凯伦吉兰淡定拍照因饰演银河护卫队中星云一角被大众熟悉的高个美女凯伦吉兰,在她最新电影的首映式上为露肩游戏带来全新意义当大多数女演员在红地毯上露出胸罩时,是不幸意外。但是,当凯伦吉兰(KarenGi46年前,那个捡到10亿钻石上交国家的女孩,后来过得怎么样?在70年代,当时人们的生活并不是很富裕,甚至大多数人都还在过着比较贫穷的生活,但是每个人都勤劳肯干,而且踏实守法。甚至大多数人都怀着奉献社会主义新中国的理想。正是在那样的环境中,民被Lisa的新发型丑哭!人间芭比怎么变这样了头条创作挑战赛Lisa的新发型被好多人吐槽了有人解释说是因为Lisa之前频繁漂发接发导致头发受损严重,现在是把头发受损的部分剪掉了,剪成这样也是为了养发。看她之前漂发的造型,头发状柳岩深v黑蝴蝶礼裙,优雅又高级!柳岩,大家都很熟悉,柳岩因为她长相艳丽,线条流畅,她的眼型柔软,眼角往上挑,有着迷人,厚嘴唇,柳岩性感的样子,我记得柳岩姐之前说过因为别人讲她身材,有很大一段时间不敢穿漂亮的衣服,今日奥斯卡红毯秀大赏,确有人间尤物据每日星报3月13日消息,亨特谢弗(HunterSchafer)在奥斯卡颁奖典礼上大胆的着装,震惊了世界。这位女演员因在欢乐颂中饰演朱尔斯而闻名,生于1999年12月31日,从万众一天5个瓜!获奥斯卡奖,官宣怀孕,被疑抱姜昆大腿,有喜有忧文李培树编辑孙大圣3月13日,一个再寻常不过的周一,娱乐圈一如既往的精彩。一天之内,就爆出了5个瓜。有人拿了奥斯卡影后,有人官宣怀孕。有人被爆私生活混乱,有人斥巨资打生命养护针。个