Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
春节期间我们更换了 kubernetes 生产集群,旧集群的 kubernetes 版本是 1.17.0,新集群版本是 1.23.3,新集群上部署了 dapr,最近准备将更多独立部署的服务器部署到 k8s 集群上,比如 redis, memcached, mongodb。

新集群和旧集群一样都是高可用集群,但新集群开始只用了 1 个 control-plane 节点,今天本来的任务是给新集群再增加 2 个 control-plane 节点,实现高可用。

如何加入 control-plane 节点呢? k8s 没有直接提供生成 join 命令的命令,下面的命令只能用于加入 worker 节点。

kubeadm token create --print-join-command

之前我们是在创建集群的时候,在执行 kubeadm init 命令之后就操作加入 control-plane 节点,kubeadm init 会生成加入命令

You can now join any number of the control-plane node running the following command on each as root:kubeadm join k8s-api:6443 --token ****** \--discovery-token-ca-cert-hash ****** \--control-plane --certificate-key ******

上面的命令实际上就是 token create --print-join-command 的输出加上 --control-plane--certificate-key,但之前使用的 certificate-key 已经过期。

开始我们用下面的命令生成 certificate-key 加入集群

kubeadm certs certificate-key

但加入失败,报错信息如下

[download-certs] Downloading the certificates in Secret “kubeadm-certs” in the “kube-system” Namespace
error execution phase control-plane-prepare/download-certs: error downloading certs: error downloading the secret: Secret “kubeadm-certs” was not found in the “kube-system” Namespace. This Secret might have expired. Please, run kubeadm init phase upload-certs --upload-certs on a control plane to generate a new one

于是改用 upload-certs 命令

$ kubeadm init phase upload-certs --upload-certs
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
*****

将 upload-certs 命令生成的 certificate-key 用于 kubeadm join 命令,这个 key 果然可以,但是在加入过程中卡在了下面的地方

[etcd] Announced new etcd member joining to the existing etcd cluster
[etcd] Creating static Pod manifest for “etcd”
[etcd] Waiting for the new etcd member to join the cluster. This can take up to 40s
[kubelet-check] Initial timeout of 40s passed.

本以为新 control-plane 节点加入不了不会影响现有集群的正常运行,但一个残酷的现实突然而至 —— 已有且仅有的那台 control-plane 上 api-server 容器突然无法启动了,syslog 中的其中一条错误信息如下

“Unable to authenticate the request due to an error” err=“Post “https://k8s-api:6443/apis/authentication.k8s.io/v1/tokenreviews”: dial tcp 10.0.9.171:6443: connect: connection refused”

这时虽然 api-server 不能正常工作,但 worker 节点上的 pod 都正常运行,应用暂时没有受影响。

面对这样如履薄冰的场景,我们首先想到的是先恢复旧集群,将负载切换到旧集群,然后从容地处理新集群的问题,但故障如此会开玩笑,旧集群的 api-server 竟然也无法正常启动。

CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS
0f30ff71a13d        0cae8d5cc64c                                "kube-apiserver --ad…"   5 seconds ago       Up 3 seconds  

命运会作弄人,故障也学会了。

面对如履薄冰与故障的作弄,我们做出了一个铤而走险的决定 —— 更新所有证书,之前成功操作过,但当时集群中没有负载。

用下面的命令三下五除二地完成了证书更新

$ cd /etc/kubernetes/pki/
$ mv {apiserver.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,front-proxy-ca.crt,front-proxy-client.crt,front-proxy-client.key,front-proxy-ca.key,apiserver-kubelet-client.key,apiserver.key,apiserver-etcd-client.crt} ~/
$ kubeadm init phase certs all --control-plane-endpoint "k8s-api:6443"
$ cd /etc/kubernetes/
$ mv {admin.conf,controller-manager.conf,kubelet.conf,scheduler.conf} ~/
$ kubeadm init phase kubeconfig all --control-plane-endpoint "k8s-api:6443"

接下来就是重启 control-plane 节点服务器使用更新的证书。

重启的结局却是 —— 满园尽是502

走险失败后立即进入紧急抢险,用当前 control-plane 节点今天凌晨的快照创建镜像,用镜像重置整个系统。

重置后的 control-plane 节点成功启动后,从 control-plane 节点上看集群应该恢复了正常,worker 节点都处于 ready 状态,绝大多数 pod 都处于 running 状态,但是 pod 中的应用却不能正常工作,比如连不上其他服务、ingress 规则失效等。

开始以为要将所有 worker node 退出并重新加入集群才能恢复,但是在第1个 worker node 上操作退出时却卡在下面的地方

$ kubeadm reset
[reset] Unmounting mounted directories in "/var/lib/kubelet"

后来想到重启所有 worker node 试试,越是关键时候越是不能忽略简单方法,都重启后一切恢复了正常。

非常抱歉,今天 19:10~19:50 期间由于 k8s 集群操作引发全站全站故障,由此给您带来很大的麻烦,请您谅解。

【故障公告】k8s 开船记:增加控制舱(control-plane)造成的翻船相关推荐

  1. k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常)

    k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常) 参考文章: (1)k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常) (2)https://ww ...

  2. Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画

    Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画 引子 这段时间一直努力在把早期版本的拇指接龙游戏(Cocos2d-x 2.2.3+CocoStud ...

  3. oracle 新增加控制文件,Oracle增加控制文件副本

    1.文档目标 新建的数据库只有一个控制文件副本,希望增加控制文件副本到不同位置,防止控制文件发生损坏. 2.修改control_files参数 # 如果使用了OMF则可以在修改参数时只指定路径,无需指 ...

  4. 在Android的 设置-显示 中增加控制屏幕旋转方向的选项

    在Android的 设置->显示 中增加控制屏幕旋转方向的选项 参考博文 实现目标 效果局限 代码实现 配置资源文件 界面搭建 功能实现 默认值修改 其他情况 结语 参考博文 Android-x ...

  5. 市内移出版本2.0(1、一页显示15条。2、增加控制标志。3、打印表格时绑定的list的优化。4、保存迁出登记信息时根据业务流水号判断增加还是修改。5、统一管理常量)

    HjdjConstants.java package cn.hnisi.gdrk.utils; /** * * @author yanghanming * @function 存放户籍登记的相关常量 ...

  6. android 11.0 增加控制状态栏和导航栏的接口

    增加控制状态栏和导航栏的接口,代码如下 .../statusbar/NavigationBarController.java | 6 +-.../phone/NavigationBarFragment ...

  7. 橙旗贷11月13日故障公告补偿金已经发放

    各位投资用户 你们好! 11月13日上午,由于网络服务提供商阿里云出现网络故障,导致部分用户无法访问橙旗贷平台,在此橙旗贷对于所有投资人致以诚挚的歉意,给大家造成的不便敬请谅解.我们愿意对此次事件负起 ...

  8. SAP SD基础知识之输出控制(Output Control)

    SAP SD基础知识之输出控制(Output Control) 一,销售的输出类型 Output是用于和商业伙伴及系统交换信息的通信方式.我们可以为不同的销售凭证如报价单,订单,交货单,发票设置out ...

  9. php output详解,PHP输出缓冲控制Output Control系列函数详解,output函数详解

    PHP输出缓冲控制Output Control系列函数详解,output函数详解 概述 以前研究过PHP的输入输出缓冲,不过博客搬家以后,原来文章找不到了,今天看到一篇好文,顺便转载过来. 简介 说到 ...

最新文章

  1. rem是如何实现自适应布局的
  2. 超声检查预测一年后RA病人的MRI侵蚀进展
  3. Python的进程和线程(二)——IO密集型任务
  4. 2.Vivado软件基础操作
  5. 图集分配透明与不透明打包不到一起的错误
  6. Microsoft.AspNet.Identity 自定义使用现有的表—登录实现
  7. Linux文件句柄占用数量查看与设置
  8. Windows Serer2003域升级到Windows Server2008R2域
  9. ES6的Set使用方法
  10. Android 自定义ToggleButton+用SharedPreferences保存用户配置
  11. (转)如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
  12. ajax(form)图片上传(spring)
  13. 一个能和企鹅一样飞的创意
  14. RuntimeError: generator raised StopIteration
  15. postgresql-timescaldb_extention
  16. int 类型 转 long的坑
  17. Python Qt5 入门教程
  18. Django创建数据库(Django数据库字段类型)
  19. 计算机网络根据其规模大小和延伸范围,网络管理员考试计算机网络的分类
  20. PyQt5 图片进行缩放

热门文章

  1. Floyd-Warshall[弗洛依德]算法
  2. 电脑查看服务器ip地址
  3. 中国的计算机网络技术学校,计算机系网络营销学校,计算机网络技术有哪些专科学校...
  4. 神奇!一篇不足700字的论文,竟然能发表在Science上
  5. 广西大学计算机专业分流,《广西大学中加国际学院学生专业分流管理办法》的翻译项目报告.pdf...
  6. 50个有创意的单页网站设计
  7. SQL查询重复数据,只显示一条sql语句
  8. 仙人掌之歌——权力的游戏(3)
  9. python使用protobuf
  10. python用animation绘制动画