V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wtfedc
V2EX  ›  Kubernetes

半吊子如何操作 k8s 升级

  •  
  •   wtfedc · 312 天前 · 3994 次点击
    这是一个创建于 312 天前的主题,其中的信息可能已经有所发展或是发生改变。

    集群在 20 个节点以内,k8s 版本已经落后好多个版本了(八九个),近期证书会过期,看更换证书的流程也挺麻烦的,想着要不一块把 k8s 升级了。鉴于运维不在了,我头有点大。

    之前尝试过上云,感觉太不灵活了,踩了几个坑就停下来了。

    如果升级的话,是用 kubeadm upgrade 一步步升级,还是重新开 20 个机器,装上最新版 k8s ,把服务都重新部署一遍呢。

    我们跑的服务晚上停一阵也没关系。

    请大家给点建议,或者跨 N 多版本升级,容易出现什么坑,提点一下

    第 1 条附言  ·  312 天前
    最后一声得,还得发扬风格,还是只更新证书好了,各位成功把我升级的想法劝退了[抱拳]
    44 条回复    2023-07-14 13:58:23 +08:00
    maichael
        1
    maichael  
       312 天前
    1. 不出问题,没有新需求不要升级
    2. 不要原地升级,新开机器部署新版本测试完全后逐步迁移
    seers
        2
    seers  
       312 天前 via Android
    开三台新的部署一遍跑起来了再把流量导过去,没必要停啊
    wtfedc
        3
    wtfedc  
    OP
       312 天前
    楼上的朋友说的有三分道理,[赞]
    boatrain1111
        4
    boatrain1111  
       312 天前   ❤️ 2
    不要原地升级,尤其是这种落后很多版本的,reddit 就因为升级 k8s 把网站搞宕机了: https://www.reddit.com/r/RedditEng/comments/11xx5o0/you_broke_reddit_the_piday_outage/
    perfectlife
        5
    perfectlife  
       312 天前
    说句实话 建议能不升级就不升级了,升级过程万一出啥幺蛾子,然后就是不同版本 k8s ,api 还不一样,有可能现在用的 api,某个版本废弃了,再然后就是 api server 证书更新 比升级简单多了
    morphyhu
        6
    morphyhu  
       312 天前
    升级的目的是什么?现有的版本满足不了需求?还是为了升级而升级?
    BeautifulSoap
        7
    BeautifulSoap  
       312 天前 via Android   ❤️ 2
    不是专家的话乱升级 k8s 会变得不幸
    chenPiMeiHaoChi
        8
    chenPiMeiHaoChi  
       312 天前
    两三年前我也遇到过和你一样的问题,我当时选了升级。再给我次机会我必选证书延期。
    wtfedc
        9
    wtfedc  
    OP
       312 天前
    @boatrain1111 淦,也太恐怖了
    NGXDLK
        10
    NGXDLK  
       312 天前
    @chenPiMeiHaoChi 哈哈,跑路没
    runinhard
        11
    runinhard  
       312 天前 via iPhone
    如果非要升,重新部署好一点
    McreeWu
        12
    McreeWu  
       312 天前
    同半吊子,能跑就别升级,尤其是你不是运维的情况下,出了问题自己背锅的,从简升级证书即可。
    Marinaaaa
        13
    Marinaaaa  
       312 天前
    能跑就行。

    k8s 跟人 有一个能跑就行
    goodryb
        14
    goodryb  
       312 天前
    非必要不变更、非必要不升级、非必要不重启
    chronos
        15
    chronos  
       312 天前
    别随便升级,这种大环境操作还是先去开几台机器验证一下再做后续处理。K8S 升级影响还是挺大的,API 变化,旧版本某些用 Docker 的还要改一下 CRI runtime 。有条件的话还是开新的集群把服务迁过去再切流量比较好。
    wtfedc
        16
    wtfedc  
    OP
       312 天前   ❤️ 1
    @chronos 目前 CRI 用的还是 docker ,新版本用 containerd ,这确实是个问题
    99999999999
        17
    99999999999  
       312 天前
    跑路留给下一个人,我也是好多不想动了
    Nnq
        18
    Nnq  
       312 天前
    如果节点版本都相同的话,可以从一个简单的节点开始搞
    Trient
        19
    Trient  
       312 天前
    别升!别升!别升!
    没有新需求涉及到 k8s 新版本特性要求什么的就不要去升级!
    换个证书还能麻烦到哪里去,老老实实手动换!
    Evovil
        20
    Evovil  
       312 天前
    建议别升除非你是专业的

    除了楼上说的那些问题
    k8s 的版本滚动很快,
    很多 yaml 的 apiversion 会滚动 删除,或者不兼容

    举个例子
    https://kubernetes.io/blog/2021/07/14/upcoming-changes-in-kubernetes-1-22/
    Evovil
        21
    Evovil  
       312 天前
    api 更新修改删除会涉及很多,CRD ,ingress , 之类的
    c2const
        22
    c2const  
       312 天前
    看到"乱升级 k8s 会变得不幸" :(
    笑出声了 :)
    c2const
        23
    c2const  
       312 天前
    确实别乱升级,风险很大.
    paxnil
        24
    paxnil  
       312 天前   ❤️ 1
    不跨版本,逐次升级,每个版本的 Urgent Upgrade Notes 都要仔细看,必然要处理的有 Docker 换 containerd ,主节点的 label 、taint 从 master 改名成 control-plane 。
    网络插件、Ingress Controller 、各种 Operator 之类的调用 Kubernetes API 的组件都要关注兼容性,落后七八个版本确实不如重建。
    要不要看看我的 Kubernetes 30 年证书生成 Makefile https://github.com/mk8s/mkcerts ( DNS 后缀是 kube.local ,不是默认的。)
    bboysoulcn
        25
    bboysoulcn  
       312 天前
    部署的时候全部使用 gitops 去部署,如果是使用 argocd 的话,那就新加一个集群,然后在新集群中部署所有的应用,然后把本地的 dns 改成新集群的 ip ,然后测试验证,没问题的话就切流量
    Achilless
        26
    Achilless  
       311 天前
    我们现在就是 1.15 版本,几乎没有升级想法,想想就头疼,能跑就行哈哈哈
    BinaryDH
        27
    BinaryDH  
       311 天前
    半吊子?全吊子都不敢随便升级,你真的是心大啊。
    chenPiMeiHaoChi
        28
    chenPiMeiHaoChi  
       311 天前
    @NGXDLK 后来换公司了,不过不是因为这个,哈哈。
    johnnyNg
        29
    johnnyNg  
       311 天前
    自己部署的 k8s 还是公有云的 k8s ,自己部署的建议别升级了,像上面说的一样,每个版本,api path ,参数都可能有变化,公有云的可以咨询之后升级
    E1n
        30
    E1n  
       311 天前
    我们公司最旧的版本还是 1.10 ,18 年部署到现在稳如老狗:)二期自建跟华为 CCE 都是 1.19 版本意思 CRI 还不用 containerd
    mooyo
        31
    mooyo  
       311 天前
    我们实践过几次升级,最稳妥的办法是开个新集群,两个集群互为备份相互升级。
    jigege2019
        32
    jigege2019  
       311 天前 via iPhone
    从 1.16 一路升级到 1.22 没遇到什么问题
    levelworm
        33
    levelworm  
       311 天前
    最靠谱(也比较麻烦)的是新建然后全挪过去。原地升级最怕的是出问题无法回滚。
    ExplodingFKL
        34
    ExplodingFKL  
       311 天前
    不敢升级,甚至为 kubernetes 打补丁让其默认生成 100 年证书

    https://imgur.com/xIu63z4
    raycheung
        35
    raycheung  
       311 天前
    只要还在"又不是不能用的状态,以及必须的强需求",坚决不升级,不然很可能变成跑路之旅[手动狗头]
    raycheung
        36
    raycheung  
       311 天前
    @ExplodingFKL #34 老哥可真狠,直接肝 100 年,6666
    tudou1514
        37
    tudou1514  
       311 天前
    k8s 不能跨版本升级,比如 1.18 直接升级 1.20 。如果要原地升级,kubeadm 升级很简单的。只需要谨慎,一个版本一个版本挨着升级,最好是有当时部署的 init 文件。证书会直接跟随升级,有效期也会重置。跨版本多话,直接新建集群。
    autumnhlf01
        38
    autumnhlf01  
       311 天前
    请教下各位公司一般通过什么方式来安装 k8s ,二进制或者还是其他?
    manning
        39
    manning  
       311 天前
    看阁下的发型,不像是半吊子
    wtfedc
        40
    wtfedc  
    OP
       311 天前
    @manning 阁下好眼力,在下就是 20 岁的高圾工程师
    zedpass
        41
    zedpass  
       310 天前
    @autumnhlf01 云上的直接买云厂商的云容器服务,本地环境的使用 kubesphere 管理,也是用 kubesphere 家的 kubekey 安装的
    autumnhlf01
        42
    autumnhlf01  
       307 天前
    @zedpass 我还以为都是手动自己在服务器上不借助工具搞的呢
    vhwwls
        43
    vhwwls  
       304 天前
    我从 1.15 升级到 1.18 用的是直接替换二进制文件的办法,出一点小问题但还是自己一点点处理好了,你如果不是专业的运维建议还是别搞了。
    smartdoc647
        44
    smartdoc647  
       288 天前
    k8s 升级没那么简单,搞不好饭碗不饱,只跑业务的容器还好,大数据上云的升级代价很高,我们 2000 多台机器的大数据 k8s 集群,升级前后花了几个月
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2868 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:34 · PVG 17:34 · LAX 02:34 · JFK 05:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.