一、安装概述
本指南提供Kubernetes v1.36.0二进制高可用部署方案,支持IPv4/IPv6双栈,涵盖etcd、API Server、Controller Manager
等核心组件手动安装,同时包含Calico/Cilium网络插件、CoreDNS、Metrics Server、MetalLB等完整生态组件部署说明。
二、环境准备
2.1 节点规划
主机名称 | IP地址 | 节点角色 | 预装软件 |
|---|---|---|---|
Master01 | 192.168.1.31 | master节点 | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx |
Master02 | 192.168.1.32 | master节点 | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx |
Master03 | 192.168.1.33 | master节点 | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx |
Node01 | 192.168.1.34 | node节点 | kubelet、kube-proxy、nfs-client、nginx |
Node02 | 192.168.1.35 | node节点 | kubelet、kube-proxy、nfs-client、nginx |
VIP | 192.168.1.36 | 虚拟IP | - |
2.2 软件版本
组件名称 | 版本号 |
|---|---|
cni_plugins_version | v1.9.1 |
cri_containerd_cni_version | 2.3.0 |
crictl_version | v1.36.0 |
cri_dockerd_version | 0.4.3 |
etcd_version | v3.6.11 |
cfssl_version | 1.6.5 |
kubernetes_server_version | 1.36.0 |
docker_version | 29.4.3 |
runc_version | 1.5.0 |
kernel_version | 6.16.4 |
helm_version | 4.1.4 |
nginx_version | 1.30.0 |
2.3 网段规划
IPv4
物理主机:192.168.1.0/24
service:10.96.0.0/16
pod:172.16.0.0/16
IPv6
物理主机:fc00::/8
service:fd00:1111::/112
pod:fd00:2222::/112
三、基础系统配置
3.1 设置主机名
在各个节点分别执行以下命令设置主机名:
# Master01节点
hostnamectl set-hostname k8s-master01
# Master02节点
hostnamectl set-hostname k8s-master02
# Master03节点
hostnamectl set-hostname k8s-master03
# Node01节点
hostnamectl set-hostname k8s-node01
# Node02节点
hostnamectl set-hostname k8s-node02
3.2 配置YUM源
# 备份原YUM源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 配置阿里云YUM源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 配置epel源
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 清理并更新YUM缓存
yum clean all && yum makecache fast
3.3 系统参数优化
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 关闭SELinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 关闭swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 配置内核参数
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
四、组件安装
4.1 下载安装包
在Master01节点执行以下命令下载所有安装包:
# 创建安装包目录
mkdir -p /opt/k8s/packages && cd /opt/k8s/packages
# 下载etcd安装包
wget https://github.com/etcd-io/etcd/releases/download/v3.6.11/etcd-v3.6.11-linux-amd64.tar.gz
# 下载Kubernetes组件包
wget https://github.com/cby-chen/Kubernetes/releases/download/v1.36.0/kubernetes-v1.36.0.tar
# 下载CNI插件
wget https://github.com/containernetworking/plugins/releases/download/v1.9.1/cni-plugins-linux-amd64-v1.9.1.tgz
4.2 安装etcd集群
4.2.1 分发etcd二进制文件
# 解压etcd安装包
tar -zxvf etcd-v3.6.11-linux-amd64.tar.gz
# 分发到所有master节点
for node in k8s-master01 k8s-master02 k8s-master03; do
scp etcd-v3.6.11-linux-amd64/etcd* root@$node:/usr/local/bin/
done
4.2.2 配置etcd服务
# 创建etcd配置目录
mkdir -p /etc/etcd /var/lib/etcd
# 生成etcd证书(使用cfssl工具)
cat > ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
# 生成etcd证书和密钥(具体命令略)
4.2.3 启动etcd服务
# 创建etcd服务文件
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \\
--name=k8s-master01 \\
--initial-advertise-peer-urls=https://192.168.1.31:2380 \\
--listen-peer-urls=https://192.168.1.31:2380 \\
--listen-client-urls=https://192.168.1.31:2379,https://127.0.0.1:2379 \\
--advertise-client-urls=https://192.168.1.31:2379 \\
--initial-cluster-token=etcd-cluster-0 \\
--initial-cluster=k8s-master01=https://192.168.1.31:2380,k8s-master02=https://192.168.1.32:2380,k8s-master03=https://192.168.1.33:2380 \\
--initial-cluster-state=new \\
--data-dir=/var/lib/etcd \\
--cert-file=/etc/etcd/etcd.pem \\
--key-file=/etc/etcd/etcd-key.pem \\
--peer-cert-file=/etc/etcd/etcd.pem \\
--peer-key-file=/etc/etcd/etcd-key.pem \\
--trusted-ca-file=/etc/etcd/ca.pem \\
--peer-trusted-ca-file=/etc/etcd/ca.pem
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
# 启动etcd服务
systemctl daemon-reload && systemctl start etcd && systemctl enable etcd
4.3 安装Kubernetes Master组件
4.3.1 安装kube-apiserver
# 解压Kubernetes安装包
tar -zxvf kubernetes-v1.36.0.tar
# 分发kube-apiserver二进制文件
for node in k8s-master01 k8s-master02 k8s-master03; do
scp kubernetes/server/bin/kube-apiserver root@$node:/usr/local/bin/
done
# 创建kube-apiserver配置文件和服务文件(具体配置略)
# 启动kube-apiserver服务
systemctl daemon-reload && systemctl start kube-apiserver && systemctl enable kube-apiserver
4.3.2 安装kube-controller-manager
# 分发kube-controller-manager二进制文件
for node in k8s-master01 k8s-master02 k8s-master03; do
scp kubernetes/server/bin/kube-controller-manager root@$node:/usr/local/bin/
done
# 创建kube-controller-manager配置文件和服务文件(具体配置略)
# 启动kube-controller-manager服务
systemctl daemon-reload && systemctl start kube-controller-manager && systemctl enable kube-controller-manager
4.3.3 安装kube-scheduler
# 分发kube-scheduler二进制文件
for node in k8s-master01 k8s-master02 k8s-master03; do
scp kubernetes/server/bin/kube-scheduler root@$node:/usr/local/bin/
done
# 创建kube-scheduler配置文件和服务文件(具体配置略)
# 启动kube-scheduler服务
systemctl daemon-reload && systemctl start kube-scheduler && systemctl enable kube-scheduler
4.4 安装Kubernetes Node组件
4.4.1 安装kubelet
# 分发kubelet二进制文件到所有节点
for node in k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02; do
scp kubernetes/server/bin/kubelet root@$node:/usr/local/bin/
done
# 创建kubelet配置文件和服务文件(具体配置略)
# 启动kubelet服务
systemctl daemon-reload && systemctl start kubelet && systemctl enable kubelet
4.4.2 安装kube-proxy
# 分发kube-proxy二进制文件到所有节点
for node in k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02; do
scp kubernetes/server/bin/kube-proxy root@$node:/usr/local/bin/
done
# 创建kube-proxy配置文件和服务文件(具体配置略)
# 启动kube-proxy服务
systemctl daemon-reload && systemctl start kube-proxy && systemctl enable kube-proxy
四、网络组件安装
4.1 安装Calico网络插件
# 下载Calico配置文件
curl -O https://docs.projectcalico.org/manifests/calico.yaml
# 修改Calico配置(如Pod CIDR等)
sed -i 's/192.168.0.0\/16/172.16.0.0\/16/' calico.yaml
# 应用Calico配置
kubectl apply -f calico.yaml
4.2 安装CoreDNS
# 下载CoreDNS配置文件
curl -O https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns/coredns/coredns.yaml.base
# 修改CoreDNS配置(略)
# 应用CoreDNS配置
kubectl apply -f coredns.yaml.base
五、集群验证
5.1 查看节点状态
kubectl get nodes
预期所有节点状态为Ready。
5.2 查看组件状态
kubectl get componentstatuses
预期所有组件状态为Healthy。
5.3 测试Pod创建
# 创建测试Pod
kubectl run nginx --image=nginx:latest
# 查看Pod状态
kubectl get pods
预期Pod状态为Running。