K8S(二)—— K8S 1.28 集群部署指南(kubeadm 方式)

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

文章目录

  • 前言
  • [一、K8s 集群部署环境准备(所有节点](#一、K8s 集群部署环境准备(所有节点)
    • [1.1 环境架构](#1.1 环境架构)
    • [1.2 配置主机名与主机映射](#1.2 配置主机名与主机映射)
    • [1.3 关闭防火墙和selinux+关闭 Swap 分区](#1.3 关闭防火墙和selinux+关闭 Swap 分区)
    • 1.4配置内核参数(网络优化)
    • 1.5安装ipset、ipvsadm
    • [1.7 安装 Containerd(容器运行时)](#1.7 安装 Containerd(容器运行时))
      • [1.7.1 安装 Containerd 依赖+添加阿里 Docker 源(加速 Containerd 下载)+Containerd](#1.7.1 安装 Containerd 依赖+添加阿里 Docker 源(加速 Containerd 下载)+Containerd)
  • [二、安装 kubectl、kubelet、kubeadm(三个节点)](#二、安装 kubectl、kubelet、kubeadm(三个节点))
    • [2.1 添加阿里 Kubernetes 源(加速组件下载)](#2.1 添加阿里 Kubernetes 源(加速组件下载))
  • [三、部署 Kubernetes 集群](#三、部署 Kubernetes 集群)
  • [四、部署 Dashboard](#四、部署 Dashboard)
    • [创建service account并绑定默认cluster-admin管理员集群角色](#创建service account并绑定默认cluster-admin管理员集群角色)
  • 总结

前言


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

一、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 配置主机名与主机映射

bash 复制代码
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 分区

bash 复制代码
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

关闭 Swap 分区

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

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

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

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

bash 复制代码
# 创建内核参数配置文件
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 性能更优(支持更多负载均衡算法、更低延迟),需安装相关工具并加载内核模块:

bash 复制代码
# 安装依赖工具
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"
bash 复制代码
#加载 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

bash 复制代码
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
bash 复制代码
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
bash 复制代码
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 源(加速组件下载)

bash 复制代码
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

bash 复制代码
systemctl enable kubelet.service

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

三、部署 Kubernetes 集群

3.1.1 查看初始化所需镜像

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

bash 复制代码
kubeadm config images list

3.1.2

在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录

批量加载当前目录下所有 .tar 后缀的 Docker 镜像包到本地 Docker 镜像库

bash 复制代码
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" 的路径进行加载。

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

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

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

bash 复制代码
kubeadm join 192.168.10.19:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
    --discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2

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

kubectl get nodes

//测试 pod 资源创建

bash 复制代码
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管理员集群角色

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
大海绵啤酒肚13 小时前
WordPress部署新玩法:利用NFS存储在Kubernetes中实现数据持久化
adb·容器·kubernetes
ghostwritten13 小时前
云原生流量治理新标准:Kubernetes Gateway API 部署实践指南
云原生·kubernetes·gateway
大都督老师13 小时前
CentOS 7 系统Kubernetes环境搭建与Docker安装配置
docker·kubernetes·centos
原神启动113 小时前
K8S(四)—— K8s资源管理与项目生命周期
云原生·容器·kubernetes
代码AI弗森13 小时前
为什么 Serverless 时代,IP 正在“消失”
tcp/ip·云原生·serverless
特立独行的猫a13 小时前
Docker 管理利器:docker-compose-ui 与 Portainer 详解
运维·ui·docker·容器·portainer
Java 码农13 小时前
GitLab + GitLab Runner + Spring Cloud Alibaba 多环境多分支容器化部署方案(docker)
docker·容器·gitlab
DeepFlow 零侵扰全栈可观测14 小时前
民生银行云原生业务的 eBPF 可观测性建设实践
运维·开发语言·分布式·云原生·金融·php
深圳行云创新14 小时前
小而美的单点工具即将走向终点!
人工智能·云原生
jessezappy15 小时前
记录:老电脑安装 Docker 4.40 不支持 WSL 2 时这样处理
docker·容器·wsl·硬件不支持·i5-3470