提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、K8s 集群部署环境准备(所有节点

1.1 环境架构

本次部署采用「1 主 2 从」架构,节点角色、IP、系统版本等信息如下表所示:
以下是格式化后的表格:

IP 地址 主机名 操作系统 Kubelet 版本 节点角色 核心作用
192.168.10.55 master01 CentOS 7.9.2009 v1.28.2 管理节点 集群控制平面(APIServer、etcd 等)
192.168.10.51 node01 CentOS 7.9.2009 v1.28.2 工作节点 运行容器化应用(Pod)
192.168.10.52 node02 CentOS 7.9.2009 v1.28.2 工作节点 运行容器化应用(Pod)

表格采用标准的 Markdown 语法,包含表头和数据行,各列对齐清晰,便于阅读和后续处理。
I

1.2 配置主机名与主机映射

hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
# 配置主机映射
cat >>/etc/hosts <<EOF
192.168.10.55 master01
192.168.10.51 node01
192.168.10.52 node02
EOF

1.3 关闭防火墙和selinux+关闭 Swap 分区

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

关闭 Swap 分区
K8s 要求关闭 Swap 分区,以确保节点内存资源能被准确调度(避免容器使用 Swap 导致性能下降):

# 临时关闭 Swap(当前会话生效)
swapoff -a
# 永久关闭 Swap(注释 Swap 挂载项,重启后生效)
sed -i '/swap/s/^/#/g' /etc/fstab

1.4配置内核参数(网络优化)

K8s 依赖特定内核参数实现网络转发、网桥过滤等功能,需手动配置并加载:

# 创建内核参数配置文件
cat > /etc/sysctl.d/k8s.conf << EOF
# 开启网桥的 IPv6 流量转发
net.bridge.bridge-nf-call-ip6tables = 1
# 开启网桥的 IPv4 流量转发
net.bridge.bridge-nf-call-iptables = 1
# 开启 IPv4 流量转发(支持 Pod 跨节点通信)
net.ipv4.ip_forward = 1
EOF

=================================================================
cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 加载配置(立即生效)
sysctl --system

1.5安装ipset、ipvsadm

K8s 支持 iptables 和 ipvs 两种服务发现模式,ipvs 性能更优(支持更多负载均衡算法、更低延迟),需安装相关工具并加载内核模块:

# 安装依赖工具
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

# 配置 IPVS 内核模块开机加载
cat > /etc/modules-load.d/ipvs.conf << EOF
# 加载 IPVS 核心模块
ip_vs
# IPVS 轮询调度算法
ip_vs_rr
# IPVS 加权轮询调度算法
ip_vs_wrr
# IPVS 源哈希调度算法
ip_vs_sh
# 连接跟踪模块(支持会话保持)
nf_conntrack
# IPv4 连接跟踪模块
nf_conntrack_ipv4
EOF

================================================================
cat > /etc/modules-load.d/ipvs.conf <<EOF
# Load IPVS at boot
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
nf_conntrack_ipv4
EOF
================================================================

# 立即加载模块并设置开机启动
# 1. 确保服务开机自启
systemctl enable systemd-modules-load.service

# 2. 重启服务使当前配置生效
systemctl restart systemd-modules-load.service

# 验证模块加载成功(出现 ip_vs 和 nf_conntrack_ipv4 相关输出即正常)
lsmod | egrep "ip_vs|nf_conntrack_ipv4"

在这里插入图片描述

#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

1.7 安装 Containerd(容器运行时)

1.7.1 安装 Containerd 依赖+添加阿里 Docker 源(加速 Containerd 下载)+Containerd

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

在这里插入图片描述

systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 

docker info | grep "Cgroup Driver"
Cgroup Driver: systemd

二、安装 kubectl、kubelet、kubeadm(三个节点)

kubeadm 是 K8s 集群初始化工具,kubelet 是节点上的核心组件(管理 Pod 生命周期),kubectl 是 K8s 命令行客户端,需在所有节点安装。

2.1 添加阿里 Kubernetes 源(加速组件下载)

K8s 官方源在国内访问较慢,使用阿里源替代:
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


yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11

/开机自启kubelet

systemctl enable kubelet.service

#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

三、部署 Kubernetes 集群

3.1.1 查看初始化所需镜像

K8s 初始化需拉取多个核心镜像(如 APIServer、etcd),先确认镜像列表:

kubeadm config images list

3.1.2

在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录
批量加载当前目录下所有 .tar 后缀的 Docker 镜像包到本地 Docker 镜像库

unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

在这里插入图片描述

3.1.3

//复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件
scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt

初始化kubeadm
在这里插入图片描述

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

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

在这里插入图片描述

//设定kubectl

kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。

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

//如果 kubectl get cs 发现集群不健康,更改以下两个文件

在这里插入图片描述

vim /etc/kubernetes/manifests/kube-scheduler.yaml 
vim /etc/kubernetes/manifests/kube-controller-manager.yaml

# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=192.168.10.19		#修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成192.168.10.19(有两处)
#- --port=0					# 搜索port=0,把这一行注释掉

在这里插入图片描述
systemctl restart kubelet

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

//所有节点部署网络插件flannel

方法一:
//所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
cd /opt
docker load < flannel.tar

//在 master 节点创建 flannel 资源
kubectl apply -f kube-flannel.yml
在这里插入图片描述

在这里插入图片描述

//在 node 节点上执行 kubeadm join 命令加入群集

kubeadm join 192.168.10.19:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
    --discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2



//在master节点查看节点状态

kubectl get nodes
在这里插入图片描述

//测试 pod 资源创建

kubectl create deployment nginx --image=nginx
kubectl get pods -o wide

在这里插入图片描述

暴露端口提供服务

kubectl expose deployment nginx --port=80 --type=NodePort
在这里插入图片描述
在这里插入图片描述
nginx端口映射到30727

//扩展3个副本

kubectl scale deployment nginx --replicas=3

在这里插入图片描述

四、部署 Dashboard

(可视化工具)rancher

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

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

创建service account并绑定默认cluster-admin管理员集群角色

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

在这里插入图片描述

总结

k8s部署流程
1、服务器规划:
几台服务器、资源多少(核数、内存)、安装的软件服务
docker、kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11、flannel
2、系统设置:
关闭firewalld、iptables、swap
加载ip_vs、 修改主机名、调整内核参数
3、部署docker:
docker-ce-20.10.18
配置加速器
重新加载文件,重启docker
4、部署kubeadm,kubelet和kubectl
配置yum源
kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11
5、master主节点配置
1)导入k8s所需镜像
2)修改kubeadm-config.yaml文件
ip、podSubnet、kubernetes版本号
apiVersion:
kubeproxy.config.k8s.io/v1alpha1
配置遵循的 API 版本和类型
kind: KubeProxyConfiguration 告知 Kubernetes 集群,这份配置文件是专用于 kube-proxy 组件的配置
mode: ipvs:流量代理模式设置为 IPVS 模式。基于 Linux IPVS 实现 Service 负载均衡,比默认的 iptables 模式更高效
3)配置kubectl的API server认证及授
4)修改scheduler、controller-manager配置文件的ip,注释端口–port=0
6、部署flannel
导入镜像
加载kube-flannel.yml 文件
获取token,给node节点执行,加入k8s集群。cat kubeadm-init.log

7、部署Dashboard
apply -f 加载 recommended.yaml文件
创建service account并绑定默认cluster-admin管理员集群角色
获取token
火狐浏览器访问

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐