最新版kubeadm搭建k8s(已成功搭建)

kubeadm搭建k8s(已成功搭建)

环境配置

主节点 k8s-master:4核8G、40GB硬盘、CentOS7.9(内网IP:10.16.64.67)

从节点 k8s-node1: 4核8G、40GB硬盘、CentOS7.9(内网IP:10.16.64.68)

从节点 k8s-node2: 4核8G、40GB硬盘、CentOS7.9(内网IP:10.16.64.69)

bash 复制代码
# 查看配置
cat /etc/*release

1 初始化配置

关闭selinux、swap

三台机器都需要执行

bash 复制代码
# 关闭 Selinux:防止服务可能无法启动(企业中基本上都会选择关闭)
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

# 关闭 Swap:防止 kubelet 组件无法启动
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 

设置主机名

bash 复制代码
# 主服务器(bash显示主机名)
hostnamectl set-hostname k8s-master
bash

# 从服务器1(bash显示主机名)
hostnamectl set-hostname k8s-node1
bash

# 从服务器2(bash显示主机名)
hostnamectl set-hostname k8s-node2
bash

启动内核参数iptables

bash 复制代码
# 访问网络插件丢包
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效配置
sysctl --system

2 安装docker&配置加速

三台服务器都执行

安装docker

bash 复制代码
# 1 配置阿里云镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 2 yum安装docker
yum -y install docker-ce

配置docker加速

bash 复制代码
# 启动docker
systemctl enable docker && systemctl start docker

#  配置docker镜像加速
# 配置加速器
cat > /etc/docker/daemon.json << EOF
  {
    "registry-mirrors": ["https://8er86g8v.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"]
  }
EOF

# 重启 Docker
systemctl restart docker

安装cri-dockerd(docker与k8s通信的中间程序:翻译官)

因为k8s的容器运行时默认不再使用docker,因此如果要通过docker作为k8s的容器运行时需要安装对应组件,让其作为中间人来让k8s与docker通信。

bash 复制代码
# 安装cri-dockerd(docker与k8s通信的中间程序)
# 下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm

# 安装
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

修改cri-docker镜像地址

bash 复制代码
#  修改cri-docker依赖的镜像地址
# 修改配置
vim /usr/lib/systemd/system/cri-docker.service
# 将 ExecStart 配置改成下述这样:
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

重新加载cri-docker

bash 复制代码
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

3 部署k8s

安装kubeadm&kubelet&kubectl

  • kubeadm:集群的初始化部署和升级
  • kubectl:命令行工具,用于向APIServer发送指令,创建pod、Deployment等。
  • kubelet :是在每个节点上运行的代理,它负责接受主节点上的 API Server下放的指令,它还负责监控 Pod 的状态,并向 API Server 报告状态更新。此外,kubelet 与容器运行时(如 Docker 或 containerd)交互,以启动和管理容器。

用户通过kubectl向API Server发送指令,API Server接受到指令后交给kubelet去执行对应操作,同时kubelet定期上报信息给API Server。

bash 复制代码
### 三台机器上都执行
# 1 添加yum源仓库
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 2 安装kubeadm、kubelet、kubectl
# 安装工具
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0

# 设置开机自启
systemctl enable kubelet

master节点执行kubeadm init初始化集群

bash 复制代码
# apiserver-advertise-address 设置为主机内网ip地址
# --apiserver-advertise-address=10.16.64.67 配置k8s apiserver地址,用于监听、响应其他节点请求
# --service-cidr=10.96.0.0/12 配置k8s Service的IP范围
#  --pod-network-cidr=10.244.0.0/16 配置k8s pod的IP范围
kubeadm init \
  --apiserver-advertise-address=10.16.64.67 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock

出现下述输出,说明安装完成:

按照控制台输出提示,在 Master 节点中执行上述图片中的命令:

bash 复制代码
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加入k8s集群

接下来,将控制台中第二条命令在其他 Worker 节点中执行(并且指定一下socket):

bash 复制代码
# 尾部记得指定 socket,不要直接CV控制台!
# 如果不小心把 kubeadm join 命令清屏了,使用:kubeadm token create --print-join-command 重新生成
kubeadm join 10.16.64.67:6443 --token cxoc4h.fq38t2ftoppoedos --discovery-token-ca-cert-hash sha256:e82ccf4df53c534ab78c2aa19b1c644dc72ceb60a23ad7691c59a31170a21128 --cri-socket=unix:///var/run/cri-dockerd.sock

下面我们可以按照提示在Master节点执行kubectl get nodes 查看集群节点信息。可以看到虽然其他节点加入了k8s集群,但状态是NotReady不正常的,这是因为没有下载网络插件进行通信:

安装Calico网络插件,让node间通信

下面我们可以按照提示在Master节点执行kubectl get nodes 查看集群节点信息。可以看到虽然其他节点加入了k8s集群,但状态是NotReady不正常的,这是因为没有下载网络插件进行通信:

此时需要 Master 节点安装 Calico 网络插件,通过下述命令进行下载 calico.yaml 文件:

bash 复制代码
# 下载 calico.yaml 文件
cd ~
wget https://xuzhibin-bucket.oss-cn-beijing.aliyuncs.com/k8s/calico.yaml

下载完毕后,修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改成上面 pod-network-cidr 的值:10.244.0.0/16(初始化k8s集群时,在master节点上执行的那个kubeadm init命令),如下所示:

bash 复制代码
# 通过calico来完成node间的通信
vim calico.yaml

修改完毕后,Master 应用配置文件:

bash 复制代码
kubectl apply -f calico.yaml

等待3分钟后,查看 Pod 运行状态,发现 pods 全部状态为 Running 成功,这样就说明 k8s 集群部署完毕了!

bash 复制代码
kubectl get pods -A -o wide


参考:https://blog.csdn.net/weixin_46594796/article/details/139649056

相关推荐
TsengOnce30 分钟前
Docker 安装 禅道-21.2版本-外部数据库模式
运维·docker·容器
无为扫地僧1 小时前
三、ubuntu18.04安装docker
ubuntu·docker
jwolf21 小时前
基于K8S的微服务:一、服务发现,负载均衡测试(附calico网络问题解决)
微服务·kubernetes·服务发现
nangonghen2 小时前
在华为云通过operator部署Doris v2.1集群
kubernetes·华为云·doris·operator
谷莠子9052 小时前
hadoop实验之创业有感
hadoop·docker·团队开发
G丶AEOM2 小时前
Docker快速入门
docker
大熊程序猿3 小时前
airflow docker 安装
运维·docker·容器
会飞的土拨鼠呀3 小时前
chart文件结构
运维·云原生·kubernetes
带电的小王4 小时前
Docker在Ubuntu上安装
ubuntu·docker
fanruitian5 小时前
docker 为单个容器设置代理
运维·docker·容器