使用Kubeadm在Ubuntu 20.04中部署Kubernetes

文章目录
  • 概述
  • 环境说明
  • 更新系统
  • 设置主机名及添加DNS解析
  • 禁用交换文件
  • 添加内核模块
  • 开启IP转发
  • 将更改应用到内核
  • 设置Docker存储库
  • 安装containerd
  • 将systemd配置为组
  • 启动服务配置
  • 配置Kubernetes阿里云apt源
  • 安装Kubernetes
  • 初始化Kubernetes集群
  • 初始化Kubernetes出错
  • 初始化Kubernetes成功
  • 加入集群
  • 查看集群状态
  • 配置Pod网络
  • 验证Kubernetes
  • 创建测试部署
  • 概述

    了解如何从头开始在 Ubuntu 22.04 中安装最新的 Kubernetes 版本,包括配置主机和使用 kubeadm 进行更新。非常适合实验室环境!在本文中,我将使用 kubeadm 命令在 Ubuntu 22.04 中从头开始安装 Kubernetes。

    环境说明

    我在集群中安装了3个Ubuntu 22.04虚拟机作为Kubernetes主机,均我的VMware虚拟化基础架构中运行。它们配置有8 个CPU和8GB RAM,以及80GB的磁盘空间。每个主机都有一个可连接互联网的网卡。此外,我还创建了一个nnkin用户并将其添加到sudoers文件中,以便在示例环境中进行访问。

    创建用户

    sudo adduser nnkin

    为新用户nnkin设置密码,确保其安全性。

    sudo passwd nnkin

    使用usermod命令将nnkin用户添加到sudo组,这样nnkin用户就可以执行具有管理员权限的命令。

    sudo usermod -aG sudo nnkin

    切换到新创建的nnkin用户,验证其是否具有sudo权限。

    su - nnkin

    三台Ubuntu虚拟机IP地址分别为

    •  kube01 192.168.0.201
    •  kube02 192.168.0.202
    •  kube03 192.168.0.203

    DNS服务器

    • 192.168.0.254

    更新系统

    无论部署任何环境,都建议先更新一下系统。

    sudo apt-get update && sudo apt-get upgrade -y

    设置主机名及添加DNS解析

    • kube01.nnkin.com 192.168.0.201
    • kube02.nnkin.com 192.168.0.202
    • kube03.nnkin.com 192.168.0.203

    在DNS服务器中分别添加3台主机的A记录解析,为了简单方便,你也可以使用sudo vim /etc/hosts分别将DNS条目添加至每台服务器hosts文件中。

    使用命令ping每台主机DNS解析,验证解析正常。

    禁用交换文件

    运行一下命令来关闭交换

    sudo swapoff -a
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

    添加内核模块

    sudo tee /etc/modules-load.d/containerd.conf <<EOF
    overlay
    br_netfilter
    EOF
    
    ##执行上述命令后运行
    sudo modprobe overlay
    sudo modprobe br_netfilter

    开启IP转发

    sudo tee /etc/sysctl.d/kube.conf <<EOT
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOT

    将更改应用到内核

    sudo sysctl --system

    设置Docker存储库

    首先,需要设置 Docker的apt存储库

    sudo apt-get install ca-certificates curl gnupg -y
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    
    # Add the repository to Apt sources:
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update

    安装containerd

    执行以下命令开始安装containerd,可能会由于网络缘故失败,多执行几次即可。

    sudo apt install containerd.io -y

    将systemd配置为组

    containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
    sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

    启动服务配置

    最后,需要将服务设置为自动启动并检查以确保其正在运行

    sudo systemctl restart containerd
    sudo systemctl enable containerd
    sudo systemctl status containerd

    配置Kubernetes阿里云apt源

    Kubernetes需要将某些apt存储库添加到Ubuntu系统中。要配置所需的Kubernetes存储库,将运行以下命令

    sudo bash -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
    EOF'
    sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
    
    ##执行上述命令后运行
    sudo apt update

    安装Kubernetes

    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl -y
    sudo apt-mark hold kubelet kubeadm kubectl -y

    初始化Kubernetes集群

    在master节点上执行以下命令开始初始化Kubernetes集群

    sudo kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

    耐心等待初始化,这里初始化的速度快慢通常取决于服务器的网络速度和镜像下载情况。一般这个过程通常需要3到10分钟 。如果网络速度较慢或者需要下载的镜像较多,时间可能会更长。

    初始化Kubernetes出错

    如初始化过程中出现 Initial timeout of 40s passed ,先分析下原因

    可以通过执行如下命令解决

    sudo sed -i 's/registry.k8s.io\/pause:3.8/registry.aliyuncs.com\/google_containers\/pause:3.9/g' /etc/containerd/config.toml
    
    ##执行上述命令后运行
    sudo kubeadm reset
    
    ##执行上述命令后运行
    sudo systemctl restart containerd
    
    ##执行上述命令后运行
    sudo kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

    初始化Kubernetes成功

    稍等一会儿后应该看到Kubernetes集群已成功初始化。

    该命令的输出将提供将kubeconfig文件复制到 $HOME 目录

    同时在输出中,还看到可以在节点上使用的 join命令加入集群的引导。

    kubeadm join 192.168.0.201:6443 --token c8h43l.0ws1l6zknfe9y1eo \
    	--discovery-token-ca-cert-hash sha256:bfe968783dcc5dd6536a286e66e85c4d537a4a1c3f8216550f05794753cd008c 

    至此集群初始化成功。

    加入集群

    将主节点/etc/kubernetes/目录下的admin.conf文件分别拷贝到从节点/etc/kubernetes目录,然后设置环境变量

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    现需要将kube02和kube03节点加入Kubernetes集群。由于有多个工作节点,因此将在下面的每个节点上使用 kubeadm join命令,需要将token替换为你实际环境中token!另外这段kubeamd join命令的token只有24h,24h就过期,需要执行kubeadm token create --print-join-command重新生成。

    sudo kubeadm join 192.168.0.201:6443 --token c8h43l.0ws1l6zknfe9y1eo \
    	--discovery-token-ca-cert-hash sha256:bfe968783dcc5dd6536a286e66e85c4d537a4a1c3f8216550f05794753cd008c

    kube02

    kube03

    查看集群状态

    kubectl get nodes

    状态显示为 NotReady。还需要安装容器网络。

    配置Pod网络

    为了让Kubernetes节点进行通信,需要设置一个pod overlay网络。如上所述,这就是节点处于NotReady状态的原因。 Calico是Kubernetes的首选网络overlay。要安装Calico进行网络通信,可以在主节点上运行以下命令

    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

    安装 Calico后,可以再次检查集群的状态,我们看到节点现在处于Ready状态。我们现在已经为容器化应用程序做好了准备。

    验证Kubernetes

    可以使用以下命令查看集群上的所有资源

    kubectl get all -A

    创建测试部署

    使用 Nginx 应用程序创建一个测试部署

    kubectl create deploy nginx --image nginx

    0

    1. This post has no comment yet

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    使用DLVM本地部署DeepSeek(补充)
    使用DLVM本地部署DeepSeek(补充)
    Linux 6 张图
    Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    Linux 2 张图
    MySQL 30周年庆 OCP 认证免费
    MySQL 30周年庆 OCP 认证免费
    Linux 5 张图
    在Linux上安装和配置Squid代理服务器
    在Linux上安装和配置Squid代理服务器
    Linux 10 张图
    Wifipumpkin3 安装记录
    Wifipumpkin3 安装记录
    Linux 1 张图
    在Ubuntu系统安装KVM虚拟化
    在Ubuntu系统安装KVM虚拟化
    Linux 14 张图
    © 2025 诺诺博客如有侵权请联系删除 | 网站地图 | 百度统计 | 又拍云CDN加速
    为了获得更好的浏览效果 建议您使用IE8.0及以上版本浏览器登陆本站点 · 服务器托管于腾讯云
    📢 小站正在装修中,如页面异常请包涵!