centos7,k8s部署高可用集群 3个master节点和1个work节点, kubectl、kubeadm、kubelet这些使用1.27版本,container使用版本跟他们兼容,网络插件就用calico
时间: 2025-06-09 18:55:46 浏览: 22
<think>嗯,用户让我介绍一下在CentOS7上使用k8s部署高可用集群,包含3个master节点和1个worker节点,组件版本是1.27,容器运行时兼容,网络插件用Calico。首先,我需要确保自己理解用户的需求。用户可能是一个有一定系统管理经验的人,可能在企业环境中需要搭建一个高可用的Kubernetes集群,用于生产环境或者测试环境。高可用通常意味着master节点有冗余,避免单点故障,所以3个master节点是合理的。worker节点暂时只用一个,可能是资源有限,或者后续再扩展。
接下来,我需要考虑用户的潜在需求。虽然用户明确提到版本要求,但可能还需要考虑稳定性、网络配置、存储等方面的细节。比如,CentOS7的系统配置可能需要关闭SELinux、防火墙设置、swap关闭等,这些是Kubernetes的常见前置条件。另外,容器运行时的选择,虽然用户没有指定,但一般会用containerd或者Docker,需要确认兼容1.27版本的kubelet等组件。
然后,关于高可用集群的部署方式,用户可能不清楚具体的步骤,比如使用kubeadm初始化第一个master节点后,如何加入其他master节点,需要用到负载均衡器(如haproxy+keepalived)或者使用内置的API server负载均衡。这里可能需要详细说明如何配置负载均衡,因为这是高可用的关键。
网络插件选择Calico,需要确认其与Kubernetes 1.27的兼容性,安装步骤是否正确,包括修改CIDR以匹配kubeadm的配置。此外,证书问题也是高可用部署中容易出错的地方,需要确保证书包含所有master节点的IP和域名。
用户可能遇到的常见问题包括节点无法加入集群、网络插件配置错误、证书过期或配置不全。需要提前在步骤中提示这些注意事项,比如修改kubeadm-config.yaml时的控制平面端点,以及生成证书时包含所有必要的SANs。
另外,用户可能希望有一个清晰的步骤列表,每个步骤的命令和配置文件示例,这样他们可以按部就班地操作。同时,版本兼容性很重要,必须确保kubeadm、kubelet、kubectl都是1.27版本,并且容器运行时如containerd或Docker的版本与之兼容。需要检查官方文档确认版本支持情况,避免用户因为版本不匹配而遇到问题。
最后,部署后的验证步骤也很重要,比如检查节点状态、CoreDNS是否运行正常、网络连通性测试等。用户可能需要这些信息来确认集群是否成功搭建。
总结下来,回答需要涵盖系统准备、组件安装、高可用配置、网络插件安装、节点加入和验证等步骤,并在每个步骤中给出具体的命令和配置示例,同时提醒注意事项和常见问题点。确保用户能够顺利执行,避免常见陷阱。</think>以下是在CentOS 7上部署Kubernetes 1.27高可用集群的完整指南,采用3个Master节点+1个Worker节点架构,使用Calico网络插件:
### 一、基础环境准备(所有节点执行)
```bash
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 禁用SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭swap
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 配置内核参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
# 设置时区同步
timedatectl set-timezone Asia/Shanghai
systemctl enable chronyd && systemctl start chronyd
```
### 二、容器运行时安装(所有节点)
推荐使用containerd 1.6+:
```bash
# 安装containerd
yum install -y containerd.io
# 生成配置文件
containerd config default > /etc/containerd/config.toml
# 修改sandbox镜像(解决国内拉取问题)
sed -i 's|registry.k8s.io/pause:3.6|registry.aliyuncs.com/google_containers/pause:3.9|g' /etc/containerd/config.toml
# 启动服务
systemctl enable containerd && systemctl start containerd
```
### 三、Kubernetes组件安装(所有节点)
```bash
# 添加阿里云镜像源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
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.27.4 kubeadm-1.27.4 kubectl-1.27.4 --disableexcludes=kubernetes
# 设置开机启动
systemctl enable kubelet
```
### 四、初始化第一个Master节点
```bash
# 创建kubeadm配置文件
cat > kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.27.4
controlPlaneEndpoint: "LOAD_BALANCER_DNS:6443" # 替换为实际负载均衡地址
networking:
podSubnet: 192.168.0.0/16 # Calico默认CIDR
serviceSubnet: 10.96.0.0/12
apiServer:
certSANs:
- "LOAD_BALANCER_IP" # 负载均衡IP
- "master1_ip" # 各master节点IP
- "master2_ip"
- "master3_ip"
EOF
# 初始化集群
kubeadm init --config=kubeadm-config.yaml --upload-certs
# 配置kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
```
### 五、部署负载均衡器(HAProxy + Keepalived示例)
在3个Master节点上部署:
```bash
# 安装软件
yum install -y haproxy keepalived
# HAProxy配置(/etc/haproxy/haproxy.cfg)
frontend k8s-api
bind *:6443
mode tcp
default_backend k8s-masters
backend k8s-masters
mode tcp
balance roundrobin
server master1 192.168.1.101:6443 check
server master2 192.168.1.102:6443 check
server master3 192.168.1.103:6443 check
# Keepalived配置(/etc/keepalived/keepalived.conf)
vrrp_instance VI_1 {
state MASTER # 其他节点设为BACKUP
interface eth0
virtual_router_id 51
priority 100 # 其他节点设为更低值
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 # 虚拟IP地址
}
}
```
### 六、加入其他Master节点
使用初始化时输出的命令(含--control-plane和--certificate-key参数),例如:
```bash
kubeadm join 192.168.1.100:6443 --token xxxx \
--discovery-token-ca-cert-hash sha256:xxxx \
--control-plane \
--certificate-key xxxx
```
### 七、部署Calico网络
```bash
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
# 修改CALICO_IPV4POOL_CIDR配置
sed -i 's/192.168.0.0\/16/192.168.0.0\/16/' calico.yaml
kubectl apply -f calico.yaml
```
### 八、加入Worker节点
```bash
# 使用初始化时输出的普通节点加入命令
kubeadm join 192.168.1.100:6443 --token xxxx \
--discovery-token-ca-cert-hash sha256:xxxx
```
### 九、验证集群状态
```bash
kubectl get nodes -o wide
kubectl get pods -n kube-system
kubectl cluster-info
```
### 注意事项:
1. 所有节点需要时间同步(NTP服务)
2. 负载均衡器建议使用独立设备,生产环境推荐使用云厂商LB方案
3. 证书有效期为1年,需定期更新
4. 建议预留至少2GB内存/节点,Master节点建议配置不低于2核CPU
5. 生产环境建议使用更复杂的etcd集群配置
### 版本兼容性参考:
| 组件 | 推荐版本 |
|--------------|--------------|
| Kubernetes | 1.27.4 |
| containerd | 1.6.21+ |
| Calico | 3.26.1 |
| HAProxy | 2.4+ |
| Keepalived | 2.1.4+ |
遇到具体问题时可结合`journalctl -u kubelet`和`kubectl describe pod`命令进行排查。
阅读全文