kubeadm安装k8s - 实践

Kubernetes 学习笔记

本次使用的服务器是腾讯云上面的Ubuntu Server 24.04 LTS 64位

通过Kubeadm安装k8s(V1.33.4)

本次的安装基于官网指导安装集群。统一都通过apt-get的方式全装,并且所有有疑问的都是通过Ai辅助去理解

安装容器运行时——containerd

官文安装文档指南:https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#containerd

  • 启用IPv4数据包转发

    # 设置所需的 sysctl 参数,参数在重新启动后保持不变
    cat <
    • 本身的话,linux本身是禁止这个选项的。这里可以理解为怕自己的服务器被当做一台路由器去使用(所以开启了这个选项的话,一台linux服务器是可以直接用来当作一个路由器的,只要在对应的路由表里面添加对应的路由即可)
  • cgroupfs 驱动 

    • 我一直很好奇这是个什么东西,刚好在一个项目中,通过华为云的k8s在他们的web console上去配置过,会发现在启用一个一个负载的时候(其实也就是自己配置的manifest.yml文件)。我们可以选择命名空间,并且可以设置这个负载的cpu&mem;尤其是命名空间,经常听。所以去了解了下,并且在k8s的文档里面也有选择systemd,这个就很熟悉了,当我们在linux中通过systemd去配置一个守护进程中,我们需要去编写xxx.service,里面可以去配置命名空间&限制这个进程的cpu&mem,所以这也是我们经常说到的容器用命名空间去隔离
  • 安装containerd:https://github.com/containerd/containerd/blob/main/docs/getting-started.md

    • 本身containerd就是Docker的高级运行时,所以该文档通过apt-get去安装的时候,该文档最终会跳转到docker的文档去。最终需要我们去配置doker的apt镜像仓库源,这里有个很大的问题,我们的环境是在国内,GG。
    • 幸好可以通过腾讯云的apt镜像源去安装,腾讯云官网文档:https://cloud.tencent.com/document/product/213/46000,Untuntu的具体命令如下,也有其他OS的安装示例
    sudo apt-get update
    sudo apt-get install ca-certificates curl -y
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/ \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install containerd.io
    • 设置 sandbox_image、SystemGroup(相信这里劝退了很多人,纠结痛苦!!!)

      • 真的应该好好看文档!!! 好好学英文啊!!!,这里太痛苦了!Let‘Go
      # 其实在k8s的官方文档已经写的很明白了,让我们自己准备/etc/containerd/config.toml文件
      # 这里就会跳到containerd的官网,写的很明白,让我门自己把默认的参数写到config.toml文件里,[文档地址](https://github.com/containerd/containerd/blob/main/docs/getting-started.md)
      # 里面有这样一句话, containerd config default > /etc/containerd/config.toml直接覆盖了
      # 我们直接通过k8s的文档地址去修改就好了sandbox_image和SystemGroup即可
      文档地址:https://v1-33.docs.kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#containerd
      - sudo containerd config default | sudo tee /etc/containerd/config.toml
      SystemdCgroup = true
      sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"
      - systemctl start containerd

关闭swap分区

• 如果 kubelet 未被正确配置使用交换分区,则你必须禁用交换分区。 例如,sudo swapoff -a 将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如 /etc/fstabsystemd.swap 等配置文件中禁用交换分区,具体取决于你的系统如何配置。

ps: kubelet是默认关闭要去关闭swap分区的

开启服务器的端口

https://v1-33.docs.kubernetes.io/zh-cn/docs/reference/networking/ports-and-protocols/

安装kubeadm

官方文档指南:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

前置条件

需要安装kubeadm、kubelet、kubectl(可选),apt源是k8s的,所以需要去配置,幸好k8s的apt源在国内都是可以使用的,以下的命令都是在官网copy过来的

todo: 改成腾讯云的apt镜像源

sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

新建 /etc/apt/sources.list.d/kubernetes.list,内容为

deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.tencent.com/kubernetes_new/core:/stable:/v1.33/deb/ /

deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.tencent.com/kubernetes_new/addons:/cri-o:/stable:/v1.28/deb/ /

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl(本身kubelet&kubeadm是有版本依赖的,所以需要去锁定冻结,这也是apt-mark的意思)

执行 kubeadm init

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.33.4
 --pod-network-cidr=10.244.0.0/16
--image-repository
# 通过kubeadm init安装的时候会通过pod的方式去控制面板,如apiserver、etcd、shchedul灯控制面板插件
# 而在国内无法直接去kubernetes的镜像仓库下载镜像,所以需要更改成为国内的开源镜像仓库 registry.aliyuncs.com/google_containers
--pod-network-cidr
# pod的网络地址块, 10.244.0.0/16 这个cidr是flannel默认的

授权给kubectl

kuberadm init后会告知如何给kubectl授权, 把命令复制就好了

添加节点

  • 需要主要、该节点的端口需要按照k8s官网说的互相方通相关端口
  • 如上步骤去安装kubeadm、kubelet
  • 在控制平面的控制面板上通过’ kubeadm token create --print-join-command ’ 生成添加节点命令后在节点服务器执行

安装网络插件

  • 其实在这里会发现,当我没有安装网络插件的时候,k8s的 core-dns一直是没有创建,需要等我们安装好网络插件之后,才会启动

  • 这里是通过flanne的网络插件去安装的,直接通过官网flannel的去安装

    - Congratulations!!!! 出错啦!
    	因为flannel.yml的的镜像是放在github上的,而国内的网络无法拉下来,吐血了吧!
    	解决方法,本地我有魔法,所以我把镜像通过docker pull到本地,在通过docker images save 打包到本地,
    	再上传到控制面板的节点机器上,在通过一下命令
    	'sudo ctr -n=k8s.io images import ./flannel-cni-plugin.tar'导入到containerd
    	这样就可以了,这样就直接在本地起去构建容器了!
    - 呵呵,你以为可以了么?????天真!!!!你再去启动的时候,发现又报错了!!!!没错,想死了没!yes sir!! shit!!
      通过'kubectl describe pod/your pod name -n flannel的命名空间' 发现报错如下
      'Failed to check br_netfilter: stat /proc/sys/net/bridge/bridge-nf-call-iptables: no such file or directory'
      哎,无语了,不过这个错还好,在master 和 节点的机器执行如下命令就好了
      ```
      modprobe br_netfilter
    	echo 1 | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
    	echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
      ```

完事~祝大家顺利的通过kubeadm 安装k8s!

posted @ 2025-11-13 09:15  yangykaifa  阅读(31)  评论(0)    收藏  举报