kubernets学习笔记——使用kubeadm构建kubernets集群及排错


Kubernets 为绝大部分的操作系统平台都提供了相应的软件包。通过软件包来安装Kubernets 是一种最为简单的安装方式。对于初学者来说,通过这种方式可以快速搭建起 kubernets 的运行环境。本章我以 CentOS7.9 为例,使用 kubeadm 构架 kubernets 集群。

一、准备工作

操作系统hostnameIPCPU内存kubernet version
centos7.9master192.168.111.119/242核2G1.28.12
centos7.9node1192.168.111.120/242核2G1.28.12
centos7.9node2192.168.111.121/242核2G1.28.12
centos7.9node3192.168.111.122/242核2G1.28.12

1、repo源配置:阿里巴巴开源镜像源

# 删除系统包管理器下的所有源配置文件
sudo rm -rf /etc/yum.repos.d/*
# 下载阿里巴巴开源镜像源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 创建 YUM 缓存
sudo yum makecache

2、更新软件包并安装必要的系统工具

# 安装必要工具
sudo  yum install -y bash-completion lrzsz ntpdate ntp wget lsof telnet
sudo  yum install -y update
# 修改主机名
hostnamectl set-hostname master
bash
# 修改hosts文件,将hostname、ip更新至/etc/hosts文件中
echo 192.168.111.119 master >> /etc/hosts
echo 192.168.111.120 node1 >> /etc/hosts
echo 192.168.111.121 node2 >> /etc/hosts

3、同步时间

sudo ntpdate -u ntp.aliyun.com

4、禁用selinux

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo sestatus
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

5、禁用交换分区swap

# 不建议使用 sudo swapoff -a 该命令临时禁用交换分区,而是直接编辑 /etc/fstab 文件,将如下图所示的内容注释掉。
vi /etc/fstab
# 查看修改操作是否生效
sudo grep swap /etc/fstab

在这里插入图片描述

6、关闭防火墙

sudo systemctl disable firewalld --now
sudo systemctl status firewalld

二、安装docker-ce、docker、cri-docker

1、安装docker-ce

# 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 安装指定版本的Docker-CE:
# 查找Docker-CE的版本:
yum list docker-ce.x86_64 --showduplicates | sort -r|grep 19.03
yum list docker-ce.x86_64 --showduplicates | sort -r|grep 3:19.03.15-3.el7
# 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
sudo yum clean all
sudo yum makecache

sudo  yum install -y docker-ce-19.03.15
sudo systemctl enable docker --now

2、开启内核转发,转发 IPv4 并让 iptables 看到桥接流量,执行下述指令

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system
# 通过运行以下指令确认 br_netfilter 和 overlay 模块被加载
lsmod | grep br_netfilter
lsmod | grep overlay
# 通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

3、安装docker

sudo yum install -y  docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 配置 Docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=cgroupfs"],
  "registry-mirrors": ["https://cyzzkyky.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "experimental": true,
  "features": {
    "buildkit": true
  }
}
EOF
sudo systemctl daemon-reload
sudo systemctl enable docker --now
sudo systemctl status docker 

4、安装cri-dockerd

sudo wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14-3.el7.x86_64.rpm

sudo rpm -ivh cri-dockerd-0.3.14-3.el7.x86_64.rpm
sudo rpm -ql cri-dockerd
# sudo vi /etc/containerd/config.toml 
# sudo grep disa /etc/containerd/config.toml 
# disabled_plugins = ["cri"]
sudo systemctl enable cri-docker.service --now 
sudo systemctl status cri-docker.service

三、安装kubernets

1、配置源

sudo cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

2、安装kubelet、kubeadm、kubectl

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

3、使用 kubeadm 创建集群

(1)查找需要的镜像文件

# 查看需要的镜像文件
kubeadm config images list

在这里插入图片描述

(2)下载镜像并改成上图需要的名称

# 下载镜像
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.12
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.12
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.12
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.12
docker pull registry.aliyuncs.com/google_containers/pause:3.9
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.12-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
# 重命名镜像
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.12 registry.k8s.io/kube-apiserver:v1.28.12
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.12 registry.k8s.io/kube-controller-manager:v1.28.12
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.12 registry.k8s.io/kube-scheduler:v1.28.12
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.28.12 registry.k8s.io/kube-proxy:v1.28.12
docker tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9
docker tag registry.aliyuncs.com/google_containers/etcd:3.5.12-0 registry.k8s.io/etcd:3.5.12-0
docker tag registry.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1

(3)初始化,该步骤只需要在 master 服务器上执行即可。

以下内容只需 master 服务器执行即可

# 重置
sudo kubeadm  reset --cri-socket=unix:///var/run/cri-dockerd.sock
# 初始化
sudo  kubeadm init --kubernetes-version=v1.28.10 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.111.119 --image-repository registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock

以上内容只需 master 服务器执行即可
当出现如下内容则表示安装成功。
在这里插入图片描述

(4)重要信息

根据提示依次执行如下命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join 192.168.111.115:6443 --token vhqvk4.fkbpwefn6l2r56wr --discovery-token-ca-cert-hash sha256:116ab3b7ff9f2c5b1658281e0258a9edca724af28f10c4624d219f6c4a4b97ef,该命令是 node 节点加入集群的凭证,需要保存好。

此时执行 kubectl get nodes 命令,会出现 NotReady 状态,这个时候我们就需要安装通信插件。
在这里插入图片描述

四、安装通信插件

1、获取 yaml 文件

sudo wget https://projectcalico.docs.tigera.io/manifests/calico.yaml

2、查看需要用到的镜像文件

grep image calico.yaml

在这里插入图片描述
由于一些原因,该镜像无法正常pull,附载链接,请自行下载。
链接:https://pan.baidu.com/s/1UvKWKUz_K-Kierr3ncskdw?pwd=0o0n
提取码:0o0n

3、解压后加载镜像

tar zxvf release-v3.25.0.tgz
cd release-v3.25.0/images/
docker load -i calico-cni.tar
docker load -i calico-node.tar
docker load -i calico-kube-controllers.tar

4、执行命令 kubectl apply -f calico.yaml

测试 kubectl get nodes,状态即为 Ready 状态。
在这里插入图片描述

5、将 node 节点加入集群。

# 在node节点中执行,即可将 node 节点加入集群
kubeadm join 192.168.111.115:6443 --token vhqvk4.fkbpwefn6l2r56wr --discovery-token-ca-cert-hash sha256:116ab3b7ff9f2c5b1658281e0258a9edca724af28f10c4624d219f6c4a4b97ef

五、排错

1、在 node 节点执行命令 kubectl apply -f calico.yaml 时出现如下错误,此时你执行 kubectl get nodes 命令也会出现类似的错误。

在这里插入图片描述
在这里插入图片描述

原因分析:

  报错信息中提到了连接被拒绝,并指出了连接的主机和端口为localhost:8080。这个错误通常是由于kubectl无法与Kubernetes API服务器建立连接导致的。Kubernetes API服务器是集群的控制平面,负责管理集群的各种操作和资源。当kubectl无法连接到API服务器时,就无法获取节点的信息,从而导致了报错。

说的直白一点就是没有找到你的 kubernets API

解决方法:

  1、将 master 服务器 /etc/kubernetes/admin.conf 文件拷贝到该节点服务器相对应目录下。

scp root@192.168.111.119:/etc/kubernetes/admin.conf /etc/kubernetes/

  2、在用户目录下创建文件夹 .kube ,并将 /etc/kubernetes/admin.conf 文件拷贝到 .kube目录下,并命名为config。

mkdir -p ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config

  3、将.kube/config文件的所有者更改为当前用户。

chown $(id -u):$(id -g) $HOME/.kube/config

问题解决
在这里插入图片描述

写在最后,讲一讲我的排错思路。

首先要确保交换分区已经关闭,
其次查看docker运行状态是否正常,systemctl status docker
再看cri-docker运行状态是否正常,systemctl status cri-docker
再次看kubelet运行状态是否正常,systemctl status kubelet
如果以后都正常,则看容器是否启动。docker ps

本章内容就到这里,大家在安装过程中遇到任何问题,评论区留言,我第一时间为大家解答。

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值