news 2026/5/28 20:58:44

从零构建高可用Kubernetes集群:二进制部署v1.35.0实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零构建高可用Kubernetes集群:二进制部署v1.35.0实战指南

1. 环境准备与系统配置

在开始部署Kubernetes集群之前,我们需要确保所有节点具备一致的运行环境。这里以CentOS 7为例,其他Linux发行版的命令可能需要相应调整。

1.1 系统基础配置

首先在所有节点执行以下操作:

# 关闭防火墙 systemctl disable --now firewalld # 关闭SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 关闭交换分区 swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab # 设置时间同步 yum install -y chrony systemctl enable --now chronyd

1.2 内核参数优化

Kubernetes对Linux内核参数有特定要求,需要调整以下参数:

cat > /etc/sysctl.d/k8s.conf <<EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 fs.may_detach_mounts = 1 vm.overcommit_memory = 1 fs.file-max = 52706963 net.netfilter.nf_conntrack_max = 2310720 EOF sysctl --system

1.3 安装基础工具

所有节点需要安装必要的工具包:

yum install -y wget vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git

2. 容器运行时安装

Kubernetes支持多种容器运行时,这里我们以containerd为例进行安装。

2.1 安装containerd

# 下载containerd wget https://github.com/containerd/containerd/releases/download/v1.6.8/containerd-1.6.8-linux-amd64.tar.gz tar Cxzvf /usr/local containerd-1.6.8-linux-amd64.tar.gz # 创建systemd服务 cat > /etc/systemd/system/containerd.service <<EOF [Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target [Service] ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/local/bin/containerd Delegate=yes KillMode=process Restart=always LimitNOFILE=infinity [Install] WantedBy=multi-user.target EOF # 启动containerd systemctl daemon-reload systemctl enable --now containerd

2.2 配置CNI插件

wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz mkdir -p /opt/cni/bin tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz

3. Kubernetes组件安装

3.1 下载Kubernetes二进制文件

在master01节点执行:

wget https://dl.k8s.io/v1.25.0/kubernetes-server-linux-amd64.tar.gz tar -xzf kubernetes-server-linux-amd64.tar.gz cd kubernetes/server/bin cp kube-apiserver kube-controller-manager kube-scheduler kubectl kubelet kube-proxy /usr/local/bin/

3.2 分发组件到其他节点

for NODE in k8s-master02 k8s-master03; do scp /usr/local/bin/kube* $NODE:/usr/local/bin/ done for NODE in k8s-node01 k8s-node02; do scp /usr/local/bin/kubelet kube-proxy $NODE:/usr/local/bin/ done

4. 证书生成与配置

4.1 安装cfssl工具

wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64 -O /usr/local/bin/cfssl wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64 -O /usr/local/bin/cfssljson chmod +x /usr/local/bin/cfssl*

4.2 生成CA证书

cat > ca-config.json <<EOF { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "usages": ["signing", "key encipherment", "server auth", "client auth"], "expiry": "87600h" } } } } EOF cat > ca-csr.json <<EOF { "CN": "Kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Beijing", "L": "Beijing", "O": "Kubernetes", "OU": "CA" } ] } EOF cfssl gencert -initca ca-csr.json | cfssljson -bare /etc/kubernetes/pki/ca

5. 高可用架构部署

5.1 使用HAProxy+Keepalived

在所有master节点安装HAProxy和Keepalived:

yum install -y haproxy keepalived

配置HAProxy:

cat > /etc/haproxy/haproxy.cfg <<EOF global log 127.0.0.1 local0 maxconn 2000 daemon defaults log global mode tcp timeout connect 5s timeout client 50s timeout server 50s frontend k8s-api bind *:9443 default_backend k8s-api-servers backend k8s-api-servers balance roundrobin server k8s-master01 192.168.1.31:6443 check server k8s-master02 192.168.1.32:6443 check server k8s-master03 192.168.1.33:6443 check EOF

配置Keepalived(master01节点):

cat > /etc/keepalived/keepalived.conf <<EOF vrrp_script chk_haproxy { script "killall -0 haproxy" interval 2 weight 2 } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 100 virtual_ipaddress { 192.168.1.36 } track_script { chk_haproxy } } EOF

6. 核心组件部署

6.1 etcd集群部署

在所有master节点配置etcd:

cat > /etc/etcd/etcd.config.yml <<EOF name: $(hostname -s)>cat > /etc/kubernetes/apiserver <<EOF KUBE_API_ARGS="--etcd-servers=https://192.168.1.31:2379,https://192.168.1.32:2379,https://192.168.1.33:2379 \\ --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt \\ --etcd-certfile=/etc/kubernetes/pki/etcd/server.crt \\ --etcd-keyfile=/etc/kubernetes/pki/etcd/server.key \\ --client-ca-file=/etc/kubernetes/pki/ca.crt \\ --tls-cert-file=/etc/kubernetes/pki/apiserver.crt \\ --tls-private-key-file=/etc/kubernetes/pki/apiserver.key \\ --service-cluster-ip-range=10.96.0.0/12 \\ --service-node-port-range=30000-32767 \\ --enable-admission-plugins=NodeRestriction \\ --authorization-mode=Node,RBAC" EOF

7. 网络插件安装

7.1 安装Calico网络插件

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

7.2 验证网络状态

kubectl get pods -n kube-system -l k8s-app=calico-node kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers

8. 集群验证与测试

8.1 验证节点状态

kubectl get nodes kubectl get cs

8.2 部署测试应用

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get svc nginx

9. 集群维护与扩展

9.1 添加新节点

  1. 在新节点上完成环境准备
  2. 安装容器运行时
  3. 安装kubelet和kube-proxy
  4. 加入集群

9.2 证书轮换

kubeadm alpha certs renew all

10. 生产环境建议

  1. 启用集群审计日志
  2. 配置合理的资源配额和限制
  3. 设置Pod安全策略
  4. 定期备份etcd数据
  5. 监控集群健康状态

我在实际部署过程中发现,二进制部署虽然步骤繁琐,但能让我们更深入理解Kubernetes各组件的工作原理。特别是在排查问题时,这种部署方式能提供更清晰的排查路径。建议在测试环境充分验证后再应用到生产环境。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 20:58:43

JVM 内存管理 2026:深度解析与调优实战

JVM 内存管理 2026&#xff1a;深度解析与调优实战我是 Alex&#xff0c;一个在 CSDN 写 Java 架构思考的暖男。看到新手博主写技术踩坑记录总会留言&#xff1a;"这个 debug 思路很 solid&#xff0c;下次试试加个 circuit breaker 会更优雅。"我的文章里从不说空话…

作者头像 李华
网站建设 2026/5/23 2:02:16

内网监控软件有哪些?强烈推荐六款内网监控软件,好用码住了

在当今数字化的办公环境下&#xff0c;企业的竞争早已从线下的体力角逐转向了线上的效率与数据博弈。对于老板和管理者来说&#xff0c;局域网内的每一台电脑既是生产力工具&#xff0c;也可能成为效率的“黑洞”或是安全隐患的源头。“明明大家看起来都在忙&#xff0c;为什么…

作者头像 李华
网站建设 2026/5/23 2:02:12

处理机调度算法实战解析:从选择题到系统设计

1. 处理机调度算法入门&#xff1a;从选择题到真实场景 第一次接触处理机调度算法时&#xff0c;很多人都是从选择题开始的。就像原始文章里那些题目&#xff0c;问你FCFS、RR、优先级调度各自的特点&#xff0c;或者计算周转时间、响应时间。但真正用起来会发现&#xff0c;这…

作者头像 李华