Kubernetes 集群部署

一、准备环境

  1. 硬件要求:至少 2 台机器(1 主节点,1 工作节点),建议最小硬件配置:2核CPU、2G内存、20G硬盘。
  2. 操作系统:CentOS 7/8,确保所有节点的操作系统版本一致。
  3. 网络配置:确保节点间网络互通,关闭防火墙或开放必要端口。

二、初始化配置

2.1 设置主机名
  • 在主节点上设置主机名:
    hostnamectl set-hostname master
    
  • 在工作节点上设置主机名:
    hostnamectl set-hostname worker1
    
2.2 关闭防火墙

关闭防火墙可以避免阻碍节点之间的网络通信,确保集群的正常运行。

# 关闭防火墙
systemctl stop firewalld

# 禁止防火墙开机自启
systemctl disable firewalld
2.3 关闭 SELinux

关闭 SELinux 可以简化 Kubernetes 集群的配置和维护,避免潜在的权限问题。

# 临时关闭 SELinux
setenforce 0

# 永久关闭 SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config

# 重启系统使更改生效
reboot
2.4 禁用交换分区(swap)

Kubernetes 官方建议在所有集群节点上禁用 swap 分区,以确保容器可以充分利用主机的物理内存,并避免因为交换空间导致的性能问题。

# 临时关闭 Swap
swapoff -a

# 永久关闭 Swap
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 验证 Swap 是否已关闭
free -h
2.5 设置主机解析

在主节点上编辑/etc/hosts文件,添加所有节点的IP和主机名。

sudo vi /etc/hosts
# 例如:
# 192.168.1.100 master
# 192.168.1.101 worker1
# 192.168.1.102 worker2
2.6 配置网络

加载br_netfilter模块并设置内核参数。

# 加载 `br_netfilter` 模块
sudo modprobe br_netfilter

# 将br_netfilter模块写入到k8s.conf配置文件
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# 将桥接的IPv4流量传递到iptables的链
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效
sudo sysctl --system
2.7 时间同步
yum install ntpdate -y
ntpdate time.windows.com

三、安装依赖工具

需要在所有节点上安装以下工具

  • Docker
  • kubeadm
  • kubelet
3.1 安装 Docker(容器运行时)

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

# 下载安装包
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 安装指定版本的docker
yum -y install docker-ce-18.06.1.ce-3.el7

# 启动并启用 Docker
systemctl enable docker && systemctl start docker

# 验证 Docker 是否安装成功
docker --version

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
3.2 添加 Kubernetes 仓库

默认使用的是谷歌的像源配置,国内访问不了,这里换成阿里云的镜像源。

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
3.3 安装 kubeadm、kubelet 和 kubectl

由于版本更新频繁,这里指定版本号部署:

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet

# 验证安装
kubeadm version
kubectl version --client

四、初始化Master节点

在主节点上执行以下命令初始化集群:

kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=<主节点IP> \
  --image-repository=registry.aliyuncs.com/google_containers
  • –pod-network-cidr:指定 Pod 网络的 CIDR,Flannel 插件需要此参数。
  • –apiserver-advertise-address=<主节点IP>:主节点IP为主机的实际内外ip
  • 初始化完成后,会提示kubectl配置的相关的命令,以及 kubeadm join 命令,用于后续将工作节点加入集群。

在这里插入图片描述

4.1 配置 kubectl

在主节点上执行初始化Master节点成功时对应的 kubectl 配置命令。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.2 检查主节点状态
kubectl get nodes
  • 此时主节点状态应为 NotReady,因为尚未安装网络插件。
4.3 部署网络插件

选择并安装网络插件(如 Flannel):

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

等待几分钟后,检查主节点状态:

kubectl get nodes
  • 此时主节点状态应变为 Ready

五、工作节点加入集群

  1. 获取加入命令(在主节点执行)

    kubeadm token create --print-join-command
    
  2. 在每个工作节点上运行初始化时输出的 kubeadm join 命令:

    sudo kubeadm join <主节点IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
    
    • <主节点IP>:主节点的 IP 地址。
    • 和 :初始化主节点时输出的值。
  3. 检查节点状态
    在主节点上运行以下命令,查看节点是否成功加入:

    kubectl get nodes
    
    • 所有节点状态应为 Ready。

六、验证集群

6.1 部署测试应用
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
6.2 查看服务信息
kubectl get svc nginx

输出示例:

NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.96.123.123   <none>        80:30001/TCP   10s
6.3 访问应用

通过工作节点的 IP 和 NodePort 访问应用:

http://<工作节点IP>:30001

七、管理和维护

7.1 升级集群
# 升级 kubeadm
sudo apt-get update
sudo apt-get install -y kubeadm

# 升级主节点
sudo kubeadm upgrade apply v1.28.0  # 替换为目标版本

# 升级 kubelet 和 kubectl
sudo apt-get install -y kubelet kubectl
sudo systemctl restart kubelet
7.2 备份和恢复
  • 备份 etcd 数据:

    kubectl exec -n kube-system etcd-master-node -- etcdctl snapshot save /tmp/etcd-backup.db
    
  • 恢复 etcd 数据:

    kubectl exec -n kube-system etcd-master-node -- etcdctl snapshot restore /tmp/etcd-backup.db
    
7.3 监控和日志
  • 使用 Prometheus 和 Grafana 监控集群。
  • 使用 kubectl logs 查看 Pod 日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值