当前位置: 首页 > article >正文

使用kubeadm手动安装K8s

本次教程安装主要基于Ubuntu 22.04, 使用AWS EC2服务器来部署。当然,AWS也有自己的AWS K8s服务,不过需要花费小钱钱。虽然也不是说不行,但手动安装下也能熟悉K8s。

1. 安装Docker      

  • 卸载旧版本:

sudo apt-get remove docker docker-engine docker.io containerd runc
  • 设置仓库

        更新 apt 包索引
sudo apt-get update
        安装apt依赖包
sudo apt-get install \

    apt-transport-https \

    ca-certificates \

    curl \

    gnupg-agent \

    software-properties-common \

    gpg
        添加 Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add –
        设置稳定版仓库
sudo add-apt-repository \

   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \

   $(lsb_release -cs) \

   stable"
  • 安装 Docker Engine-Community

        更新 apt 包索引
sudo apt-get update
        安装最新版本的 Docker Engine-Community 和 containerd
sudo apt-get install docker-ce docker-ce-cli containerd.io
        测试 Docker 是否安装成功,输入以下指令,能够打印出版本信息则安装成功:
sudo docker version
        设置Docker镜像加速器和驱动程序
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{  "exec-opts": ["native.cgroupdriver=systemd"],

   "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]

}

EOF

sudo tee /etc/docker/daemon.json <<-'EOF'

{  "exec-opts": ["native.cgroupdriver=systemd"]

}

EOF
        重启服务
sudo systemctl daemon-reload

sudo systemctl restart docker

2. 前置准备

  • 设置安全组

        在AWS上对每个节点设置同一安全组并在入站规则中进行绑定:

  • 设置主机名

         更改每台服务器的主机名

sudo hostnamectl set-hostname "k8s-master"
sudo hostnamectl set-hostname "k8s-node1"
sudo hostnamectl set-hostname "k8s-node2"
  • 关闭Swap分区

sudo sed -ri 's/.*swap.*/#&/' /etc/fstab

        查看分区是否关闭成功,如果没有输出则说明分区关闭成功

swapon -show

        若要临时关闭分区

swapoff -a
  • 添加主机名

        在每个节点上添加hosts(注意换成你自己服务器的IP地址

sudo nano /etc/hosts

        写入以下信息后退出

172.31.34.249 k8s-master

172.31.37.96 k8s-node1

172.31.47.59 k8s-node2
  • 桥接IPv4流量   

        将桥接的IPv4流量传递到iptables的链接,在每个节点添加如下的命令:

sudo nano /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

vm.swappiness = 0
        加载br_netfilter模块
sudo modprobe br_netfilter
        查看是否加载
lsmod | grep br_netfilter

        生效

sudo sysctl –system
  • 同步系统时间

        在每个节点添加时间同步

sudo apt -y install ntpdate

sudo ntpdate time.windows.com
  • 开启ipvs 在每个节点安装ipset和ipvsadm

sudo apt -y install ipset ipvsadm

        在每个节点执行如下脚本

sudo cat > /etc/sysconfig/modules/ipvs.modules <<EOF

        打开写入如下内容

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack

EOF

        如果没有该文件夹手动创建:

sudo mkdir -p /etc/sysconfig/modules

sudo chmod 777 /etc/sysconfig/modules/

sudo cat > /etc/sysconfig/modules/ipvs.modules <<EOF

        在ipvs.modules里写入以下内容:

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack

EOF
  • 授权、运行、检查是否加载:

sudo chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

3. 安装kubeadm、kubelet和kubectl

注意:如果后期想要使用dashboard,请务必确认版本是否兼容,检查地址:

https://github.com/kubernetes/dashboard/releases

  • 下载用于 Kubernetes公共签名密钥-每个节点

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  • 添加 Kubernetes apt 仓库-每个节点

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  • 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本-每个节点

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

        保持每个节点cgroup drvier和kubelet使用的cgroup drver一致

sudo nano /etc/sysconfig/kubelet

        添加以下内容

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

        设置为开机自启动

systemctl enable kubelet

4. 部署k8s的Master节点

        切换到根用户下执行

sudo su -

        # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址

kubeadm init --apiserver-advertise-address=172.31.34.249 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.30.3 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

如果初始遇到Kubeadm初始化报错:[ERROR CRI]: container runtime is not running:

 执行以下命令

rm -rf /etc/containerd/config.toml
systemctl restart containerd

根据提示信息,在Master节点上使用kubectl工具

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

5. 部署K8s的从(slave)节点

在k8s-node1和k8s-node2上分别执行以下命令:

          切换到根用户下执行

sudo su –
  • 添加主节点的token以及token证书

kubeadm join 172.31.34.249:6443 --token 1umscb.zbq9wf4tef99nxkx --discovery-token-ca-cert-hash sha256:e066e73b927432e599ba7b6634e449900bc6b4858e2979a9a4749f35e1dbf30d

 6.  部署CNI网络插件

 根据提示,在Master节点使用kubectl工具查看节点状态:

kubectl get nodes

如果执行后出现couldn't get current server API group list: Get "https://xxxx /api?timeout=32s":  dial tcp xxxxxxx: connect: connection refused 错误
则没有永久关闭交换分区情况下中途退出了

解决方式:重新执行一遍关闭命令即可

sudo swapoff -a

sudo systemctl restart kubelet
  • Master节点部署CNI网络插件

sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 查看部署CNI网络插件进度:

kubectl get pods -n kube-system
  • 再次在Master节点使用kubectl工具查看节点状态:

kubectl get nodes

这里可能会有问题,如果master节点上kube-apiserve监听的6443端口时而正常时而异常

刚部署完正常后面一直出现如下错误

The connection to the server xxxxx:6443 was refused - did you specify the right host or port?

查看CNI插件部署进度也出现CrashLoopBackOff错误的话

 

执行以下命令:

containerd config default | tee /etc/containerd/config.toml

sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml 

service containerd restart

service kubelet restart 

7. 查看集群

查看集群健康状态:

kubectl get cs

kubectl cluster-info

部署成功 !!!(^-^)V


http://www.kler.cn/a/301287.html

相关文章:

  • 一文速学---红黑树
  • 自制C++游戏头文件:C++自己的游戏头文件!!!(后续会更新)
  • 无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 探索美赛:从准备到挑战的详细指南
  • 【jvm】HotSpot中方法区的演进
  • 31DNS设置
  • C++学习笔记----6、内存管理(五)---- 智能指针(4)
  • 使用patch命令移除sts中的一个container
  • 【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+JPEG图片马)
  • 力扣100题——动态规划
  • 【MATLAB】数据和字符串类型转换
  • 路由器出现DNS(Domain Name System)没有被解析的情况,没有被解析的情况,通常是由多种原因导致的。以下是一些可能的原因及相应的解释:
  • TDSQL:腾讯分布式数据库系统的核心要点与优势分析
  • Java之枚举
  • macos 系统文件操作时提示 Operation not permitted 异常解决方法 , 通过恢复模式 开启 /关闭 SIP方法
  • debian12实践-安装docker
  • 日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
  • Redisson实现订单到期关闭
  • 论文阅读_检索增强生成 RAG 综述
  • 架构模式:MVC
  • harbor目录结构和镜像存储机制是什么
  • (详细文档)javaswing学生成绩管理系统(mysql)+详细报告
  • 汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推
  • 【预训练语言模型】BERT原理解析、常见问题
  • java8:obsclient下载文件,restful风格
  • springboot 项目获取 yaml/yml (或 properties)配置文件信息