第十章:使用 Kubeadm 部署 K8S安装

牛子 2025-11-07 15:29:04 40 0 0 0

安装标准或规范
在部署Kubernetes集群的机器之前,需遵循以下前提条件:
多台设备上运行的 CentOS7.x-86_x64 操作系统。硬件配置要求为:支持至少 2GB RAM 和 2 个及以上 CPU 核心,并配备至少 30GB 硬盘空间。该系统支持远程接入互联网服务,并提供镜像文件下载功能。若服务器无法联网,则需自行下载镜像文件并配置相关节点。此外还移除 swap 分区以避免潜在的问题。
搭建硬件平台并配置开发环境

角色 IP 主机名
服务名称master IP地址172.16.3.181 主节点K8smaster
工作节点node1 IP地址172.16.3.182 主节点K8snode
工作节点node2 IP地址9000 主节点K8snode

硬件性能需满足高性能计算的要求;软件开发环境需安装必要开发工具;系统资源占用需符合合理限制;建议选择64位操作系统;内存占用需至少4GB;存储空间建议至少80GB;硬件架构应支持多线程处理;建议设置如下:MOD compensation参数设置为0;注:以上配置仅供参考,请根据具体项目需求进行调整
注意:以上配置仅供参考,请根据具体项目需求进行调整

# 关闭防火墙  
[root@localhost ~]# firewall-cmd --state #查看防火墙状态 
[root@localhost ~]# systemctl stop firewalld 
# 停止防火墙的服务     
[root@localhost ~]# systemctl disable firewalld # 禁止开机启动          
# 关闭selinux     
[root@localhost ~]# setenforce 0 # 临时(当前不用重启)     
[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久(重启后生效)          
[root@localhost ~]# sestatus -v # 查看状态(需要重启生效)          
# 关闭swap     
[root@localhost ~]# swapoff -a # 临时     
[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久               
# 根据规划设置主机名     
[root@localhost ~]# hostnamectl set-hostname k8smaster #其它的服务器为 k8snode1,k8snode2         
# 在master添加hosts    
[root@localhost ~]# cat >> /etc/hosts << EOF     172.16.3.181 k8smaster     
172.16.3.182 k8snode1     
172.16.3.183 k8snode2     
EOF          
# 将桥接的IPv4流量传递到iptables的链(三台都执行)     
[root@localhost ~]# cat > /etc/sysctl.d/k8s.conf << EOF     
net.bridge.bridge-nf-call-ip6tables = 1     
net.bridge.bridge-nf-call-iptables = 1     
EOF     
[root@localhost ~]# sysctl --system # 生效         
# 时间同步     
[root@localhost ~]# yum install ntpdate -y     
[root@localhost ~]# ntpdate time.windows.com

所有节点配置 Docker、Kubeadm 和 Kubelet 软件包
Kubernetes的预设容器运行时设置为Docker, 因此建议先安装Docker的安装程序

3.1 配置 Docker 环境

[root@localhost ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo     
[root@localhost ~]# yum -y install docker-ce-19.03.11    
[root@localhost ~]# systemctl enable docker && systemctl start docker     
[root@localhost ~]# docker --version          
[root@localhost ~]# cat > /etc/docker/daemon.json << EOF     {       "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]     }     EOF

3.2 配置丰富资源库

[root@localhost ~]# 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

部署Kubeadm,并配置kubelet和kubectl
因 versions 更新频率较高,在此处明确指定 versions 进行部署

[root@localhost ~]# yum install -y kubelet-1.18.19 kubeadm-1.18.19 kubectl-1.18.19     [root@localhost ~]# systemctl enable kubelet

配置主节点初始化流程以实现Kubernetes Master的部署
该系统将在IP地址172.16.3.181172.16.3.181上运行(Master节点)。

[root@localhost ~]# kubeadm init \       
--apiserver-advertise-address=172.16.3.181 \       
--image-repository registry.aliyuncs.com/google\_containers \       
--kubernetes-version v1.18.19 \       
--service-cidr=10.96.0.0/12 \       
--pod-network-cidr=10.244.0.0/16

说明:
–apiserver-advertise-address=172.16.3.181 #master的ip地址
–image-repository registry.aliyuncs.com/google_containers #指定从什么位置拉取镜像
–kubernetes-version=v1.18.19 #指定k8s版本,根据具体版本进行修改
–service-cidr=10.96.0.0/16 #指定service网络的范围
–pod-network-cidr=10.244.0.0/16 #指定pod网络的范围
因为默认获取镜像位置k8s.gcr.io在国内不可用的缘故,在此将镜像位置指定为阿里云镜像仓库地址。
JABcv7LogXld08eZkaI32bREYuhp.png
请调用kubectl系统以实现资源调度目标

[root@k8smaster ~]# mkdir -p $HOME/.kube     
[root@k8smaster ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config     
[root@k8smaster ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config     
[root@k8smaster ~]# kubectl get nodes     
NAME        STATUS     ROLES    AGE     VERSION     
k8smaster   NotReady   master   5m40s   v1.18.19     [root@k8smaster ~]#

集成 K8S 节点
为集群新增节点,并运行由kubeadm init生成的kubeadm join指令。
为集群新增节点,并运行由kubeadm init生成的kubeadm join指令。

[root@k8snode2 ~]# kubeadm join 172.16.3.181:6443 
--token jvv3up.7oy3647hgiozpoh7 \     
--discovery-token-ca-cert-hash 
sha256:962693618045022ac50317a00397e917dc5881ccb1152d53b586907ccc179724

默认情况下,token的有效时长设定为24小时。一旦超过期限,则该token将失效不再使用。此时需要重新生成并激活新的token。具体操作步骤如下:
1. 首先应确认当前token是否已经超过期限。
2. 如果发现该token已失效,则需按照如下步骤进行处理:1. 退出现有登录状态;
2. 启动新设备安装程序;
3. 输入设备序列号;
4. 进行设备认证测试;
5. 最后将生成新的Token并完成激活流程。

[root@k8snode2 ~]# kubeadm token create --print-join-command

JehC9BIipK7TmF1QGnNSldHuoY8P.png
再次在 Mater 中运行,会在其中发现 node 已经集成进来。
ZWVpY14HxJbUle23tamBXcwCou9y.png
当前状态设置为NotReady,并且必须安装CNI插件
配置CNI网络插件

[root@k8smaster ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml     
#查看 pods 情况     
[root@k8smaster ~]# kubectl get pods -n kube-system      
#查看 nodes 情况     
[root@k8smaster ~]# kubectl get nodes

如果使用kubectl apply -f命令后无法将地址下拉,则可以通过以下步骤解决:首先确保网络连接正常;其次将该文件单独下载至本地存储空间中;最后再利用kubectl apply命令将其应用到目标位置。
jKxFm2aXz1sSNrABQGtU8epZy6vb.png

7. 对kubernetes集群进行详细评估

在 Kubernetes 集群环境中部署一个 pod 实例,并对其实现稳定的服务状态进行检查

# 拉一个 Nginx 下来,便于测试用     
[root@k8smaster ~]# kubectl create deployment nginx --image=nginx     
# 查看状态     
[root@k8smaster ~]# kubectl get pod     
# 对外暴露 80 端口     
[root@k8smaster ~]# kubectl expose deployment nginx --port=80 --type=NodePort     
#      
$ kubectl get pod,svc

请访问以下路径:http://NodeIP:Port
OgzxrCeKmMZHG9NdQyvD1EbAq8hl.png