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

第一次接触 k8s 应该如何部署?

  •  
  •   zuotun · 2023-11-24 15:57:36 +08:00 · 3647 次点击
    这是一个创建于 389 天前的主题,其中的信息可能已经有所发展或是发生改变。

    从开始了解 Kubernetes 到现在两三天了, 想个人学习如何部署. 用过 docker 没用过 podman, 有 Linux 基础.

    算上服务器有三台设备, 打算将主从节点物理分离开来.

    看过官方文档没太看懂, 找了一大圈也没找到. 看到一篇写的比较详细的部署生产环境的 教程 但是又太过复杂了, 前前后后安了不少我没听过的东西. 而且这是 2017 年写的, 可能和现在的又有一些变化了, 例如 1.28 Beta 支持 swap.

    30 条回复    2023-12-04 13:09:49 +08:00
    hxpmc
        1
    hxpmc  
       2023-11-24 15:58:47 +08:00
    跟着官网来 就是没有科学上网环境会比较蛋疼
    wu00
        2
    wu00  
       2023-11-24 16:00:48 +08:00
    k3s 、minikube 之类的跟着官方教程走,入门级的,会 docker 就差不多了
    CaptainAmerica
        3
    CaptainAmerica  
       2023-11-24 16:01:50 +08:00
    用 rke
    o562dsRcFqYl375i
        4
    o562dsRcFqYl375i  
       2023-11-24 16:07:22 +08:00   ❤️ 1
    1. 学习用 minikube
    2. 生产用公用云的 k8s
    3. 对于开发、使用上来说,基础重点放在 deployment/service/configmap/secret/hpa 等资源清单的编写,进阶看 k8s client api 等涉及二次开发的东西
    CivAx
        5
    CivAx  
       2023-11-24 16:12:25 +08:00   ❤️ 3
    1) Docker 和 Podman 如果不深究实现逻辑 —— 即一个需要通过 docker.sock 另一个直接与 ctr 通信 —— 的区别,使用体验上没有区别,可以直接平移知识积累过来。

    2) 三台取决于你是想 “用”,还是想 “学”。三台虽然满足最小的 Kubernetes 集群部署,但使用上更适合用 Minikube 或者 K3s 。

    3) 接触到新技术栈的时候,先让东西跑起来、获得能激起学习兴趣的成就感,会比一味看文档试图系统学习会来得更好起步。

    如果 kubeadm 对你来说太过枯燥,你可以先从 Rancher 入手。Rancher 作为商业软件的设计初衷,主打的是易用性和人性化。你可以用 Rancher 或者 RKE 部署方式快速跳过繁琐和需要高度自定义的部署流程,快速进入到 K8s 的使用上。在对 namespace 、pod 、deployment/statefulset/daemonset 、pv 、configmap/secret 、helm chart 这些应用层的东西都熟悉后,再根据你积累下来对这些概念的理解,摸索 kubectl 命令行操作,理解 yaml 的使用途径和文本逻辑。等使用和维护熟悉透彻后,再进步到理解 clusterconfig.yml 的配置文件编写,调用 RKE 对 Kubernetes 部署与安装,以及 debug 安装过程中可能会出现的各类问题。

    目前正规公司商采会有正规的交付团队替你部署,就算不采购也大多会直接使用云服务商的 Kubernetes 服务,仅有少部分场景会需要亲自动手从 0 部署 Kubernets 集群 —— 而且即使有,也可以通过 RKE 等这种软件快速跳过部署阶段,推荐把精力放在学习更有价值的知识上。
    hexiaodai
        6
    hexiaodai  
       2023-11-24 16:20:39 +08:00
    kubekey
    brom111
        7
    brom111  
       2023-11-24 16:24:20 +08:00
    最简单的就是官方文档+ kubeadm 。 但是很多人虽然用到了 1.25 以后的版本但是也还在用 docker 。
    k8s 用不是难点。公有云帮你解决了太多问题了,现在 serverless 都满天飞,压根都不需要担心 node 。
    runinhard
        8
    runinhard  
       2023-11-24 16:25:18 +08:00   ❤️ 1
    k3d
    setsunakute
        9
    setsunakute  
       2023-11-24 16:36:29 +08:00
    kubekey, 按照文档稍微写个简单的配置文件就可以创建起来. 可以选择用国内镜像,安装比较快
    zhaozs1
        10
    zhaozs1  
       2023-11-24 16:44:41 +08:00
    kubeadm 方式安装 k8s 集群-v1.23.17
    知乎搜索一下,按照教程,然后参考官方的教程,搭起来就是下面的效果
    [root@k8s-master01 ~]# kubectl get pod,svc
    NAME READY STATUS RESTARTS AGE
    pod/nginx-f89759699-nqv9b 1/1 Running 0 25h

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 25h
    service/nginx NodePort 10.109.40.187 <none> 80:31965/TCP 25h
    [root@k8s-master01 ~]#
    zuotun
        11
    zuotun  
    OP
       2023-11-24 16:48:44 +08:00
    @hxpmc 服务器环境就没有, 我看着一个项目下了两小时, 并且有时候还连不上 GitHub, k8s.io 更不用说了

    @CivAx 2) 主要是想学, 既然有资源就想去试试集群. 但感觉在 Windows 下有些水土不服, WSL 在这方面使用体验上又不如真正的 Linux, 试过 kind 但没弄明白.
    3) 可能相反, 我更倾向于原生的部署方式. 但入门可能这样确实更快.

    @zhaozs1 谢谢, 我去试试
    mightybruce
        12
    mightybruce  
       2023-11-24 17:47:34 +08:00
    kubernetes 安装的确没那么容易, 多摸索几次就会了。
    不要用 docker, 用 containerd, 再装上 nerdctl 。containerd 的 config.toml 中也要指定 docker.io gcr.io 等一堆国内镜像源
    连不上是正常的,kubeadm 要指定镜像源,
    kubernetes 最后还要安装网络插件,你也需要下载相关 yaml, 然后安装才能打通网络 比如使用 flannel 、calico 、canal
    kind 本地模拟其实也还好, 开发 k8s 相关一些组件的时候比较方便。
    evan1024
        13
    evan1024  
       2023-11-24 17:50:19 +08:00
    学习先用 kubeadmin 不推荐 minikube,然后建议上 rancher/kubesphere 这种管理会更容易
    mightybruce
        14
    mightybruce  
       2023-11-24 17:58:11 +08:00
    上生产是一定不能用 k3d, kind 这些。 初学者可以用 kind,k3d 学习一些概念和操作还是可以的,因为 k3d 、kind 是在容器中创建,和 k8s static pod 在本地创建是有巨大区别的,另外 kubelet 是不能容器化的。
    用公有云 k8s 一样需要了解 kubernetes 等众多知识和操作。
    像证书管理, 文件配置以及证书更新、网络规则、策略管理以及存储 PV 的确是使用 kubeadm 二进制创建的 k8s 才能有更多的理解。
    emmettwoo
        15
    emmettwoo  
       2023-11-24 18:26:42 +08:00   ❤️ 1
    我是参考的官方教程:
    https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

    初次接触可能确实有很多术语搞得一头雾水,反正先按照教程一步一步做,我大概的流程是:
    - 服务器配置(固定 ip, hostname 并改一下 hosts ,然后关掉防火墙,selinux, swap 这些)。
    - 安装运行环境和工具( docker/containerd, CNI, crictl, kubelet, kubeadm, kubectl ,其实就如上面教程)
    - 使用 kubeadm 拉起集群( https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)

    集群如果顺利启动(怎么可能那么顺利,遇到问题再逐一去查找解决吧),就可以用 kubectl 命令行工具访问 kubelet 来和 k8s 集群交互啦,或者像使用 Lens 那些图形化的管理工具。
    然后也看到上面的大佬说的网络问题,我自己是用这两个方案:
    1. kubeadm 拉起集群时会去官方下镜像,可以重定义镜像源地址,比如 aliyun 。
    --image-repository registry.aliyuncs.com/google_containers
    2. 在能连到官方镜像源的机器上先拉取镜像,save 出 tar 包再到你实际服务器上 load 进 Docker/Containerd 。
    kubeadm config images pull --kubernetes-version v1.26.0

    感觉按照官方的教程这些步骤来做可以比较好的学习到 k8s ,如果是单纯想尝鲜或者快速开发,Docker Desktop 现在也可以直接在本地启动一个 kubernetes 的环境 :lol
    kidlj
        16
    kidlj  
       2023-11-24 19:00:20 +08:00
    KIND 最简单 ( https://kind.sigs.k8s.io ),前提:先给 Docker 设置好 proxy ,不然可能很多镜像拉不下来。
    GeekGao
        17
    GeekGao  
       2023-11-24 19:42:37 +08:00
    建议先玩 k3s
    Daath
        18
    Daath  
       2023-11-24 21:24:47 +08:00
    如果有预算的话,可以买个香港的服务器,然后 ssh 上去,先装个 ubuntu 玩一下 microk8s ,然后也可以用 kind ,然后了解一下 configmap ,deployment ,service ,pvc ,ingress 几个资源的相互关系,然后接下来就学一下 helm 就差不多了,最近我买过香港服务器是 ucloud 双 11 促销新用户首机,买个 2C4G30M 就可以了,国内部署 k8s 多多少少遇到网络拉镜像很慢的问题,你想心智负担少,我就建议买个香港玩一玩。
    hunterzhang86
        19
    hunterzhang86  
       2023-11-24 21:26:26 +08:00 via iPhone
    用 k3s 最简单,最好是先腾讯云租个现成装好 k3s 的练练手。
    tudou1514
        20
    tudou1514  
       2023-11-24 22:49:16 +08:00
    所有的学习都走官方网站,初学也建议走 kubeadm 或者二进制,市面上的那些 rancher 、KubeSphere 等工具不建议初学者使用,除非你在网络,存储,linux 各方面都有涉猎,不然这些工具的部署过程对你来说是封闭的,对于学习很不友好
    Turismo
        21
    Turismo  
       2023-11-25 00:23:41 +08:00
    https://www.drxcloud.club/662.html
    前一阵子粗浅的研究了下 供参考 祝好运
    Mithril
        22
    Mithril  
       2023-11-25 01:11:44 +08:00
    最简单的就是用 KubeSphere ,Rancher 这种工具直接搭起来。其中 KubeSphere 是国人开发的,用来搭建环境的 KubeKey 甚至自带翻墙配置。可以让你在完全什么都不懂的情况下直接拉起来一个差不多能跑的东西,甚至还带 dashboard 。
    其次就是 minikube ,k3s ,microk8s 这类的。

    但最终还是要看你要装 k8s 做什么。
    如果是产品使用,自建集群一般不会让你一个完全不懂得来搭 k8s ,自然有运维团队负责。云服务的话基本都用厂商的集群服务,也不会让你开一堆 EC2 从零开始搭一遍。
    如果是学习,那么搭建的过程也是学习的一部分。从 kubeadm init 开始,全都是坑。每爬出一个坑,你对 k8s 的知识掌握就更多一点。也更了解这东西的各个部分是怎么交互运作的,是如何从物理机上抽象出一整套调度系统的。
    反正作为学习的目的来说,更没必要找个工具跳过这一步了。
    vihv
        23
    vihv  
       2023-11-25 11:21:50 +08:00 via Android
    官网文档看的云里雾里的,看这篇文章吧,照着做下来一气呵成,完美安装 https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/

    但是国内的网络确实不好搞,我的服务器是国外的,不存在网络问题。
    lasuar
        24
    lasuar  
       2023-11-25 13:22:30 +08:00
    仍然建议使用 kubeadm 搭建多节点集群(至少 2 个)
    https://github.com/chaseSpace/k8s-tutorial-cn/blob/main/install_by_kubeadm/install.md

    我写的,可参考。
    zuotun
        25
    zuotun  
    OP
       2023-11-29 01:46:06 +08:00
    @mightybruce #12

    @emmettwoo #15

    @tudou1514 #20

    @Turismo #21

    @vihv #23

    @lasuar #24

    谢谢大家. 花了几天时间, 但关于主从节点之间的关系还是不太懂, 比如在主节点上配置例如网络插件之后到底还需不需要在从节点上再来一次.

    写了一篇博客记录了一下, 中途重置若干次, 基本属于回忆录可能有些偏差. https://kazusa.cc/server/kubernetes-cluster-install-notes.html
    zhujq
        26
    zhujq  
       2023-11-30 16:18:30 +08:00
    k3s ,先用起来再说,别先卡在安装上
    johnzr
        27
    johnzr  
       2023-11-30 23:40:52 +08:00
    @zuotun 你博客里的代码框子很好看,用的什么插件呀?
    zuotun
        28
    zuotun  
    OP
       2023-12-03 01:17:00 +08:00
    @johnzr 主题内置的 highlight.js, 其实可以更好的.
    具体需要去看看这里 https://highlightjs.org/
    kknd22
        29
    kknd22  
       2023-12-04 01:27:00 +08:00
    我访问 http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 提示 403 denied by IP ACL = blacklist
    怎么办?
    zuotun
        30
    zuotun  
    OP
       2023-12-04 13:09:49 +08:00
    @kknd22 换个镜像源啊, 还能怎么办. 没有网络问题尽量使用官方源, 有就想办法解决网络问题.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5898 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:20 · PVG 14:20 · LAX 22:20 · JFK 01:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.