本文共 4775 字,大约阅读时间需要 15 分钟。
Kubernetes 是一个容器编排平台,支持多种集群部署方式。本文将介绍基于 kubeadm 的 Kubernetes 集群安装流程。
在部署 Kubernetes 集群之前,需要进行环境规划。
Kubernetes 集群分为两类:一主多从和多主多从。
将采用一主两从集群结构。
角色 | IP地址 | 操作系统 | 配置 | 主机名 |
---|---|---|---|---|
主节点(Master) | 192.168.187.105 | CentOS 7.9 | 2核CPU、4G内存、50G硬盘 | k8s-master |
从节点(Node1) | 192.168.187.106 | CentOS 7.9 | 2核CPU、4G内存、50G硬盘 | k8s-node1 |
从节点(Node2) | 192.168.187.107 | CentOS 7.9 | 2核CPU、4G内存、50G硬盘 | k8s-node2 |
Kubernetes 提供三种主要的安装方式:
本次采用 kubeadm 工具进行安装。
在安装之前,需要对环境进行充分准备。
确保系统版本符合要求:
[root@master ~] cat /etc/redhat-releaseCentOS Linux 7.5.1804 (Core)
检查内核版本:
[root@k8s-master ~] uname -srLinux 3.10.0-1160.el7.x86_64
默认内核版本较低,需升级到 5.4 或更高版本。
所有节点时间需同步,执行以下命令同步时间:
yum install -y ntpdatentpdate time.windows.com
关闭防火墙和 iptables:
# 关闭 firewalld 服务systemctl stop firewalldsystemctl disable firewalld# 关闭 iptablessystemctl stop iptablessystemctl disable iptables
如果是云服务器,需确保私有网络互通并设置安全组规则。
配置主机名解析,建议使用内部 DNS 服务器:
cat > /etc/hosts << EOF127.0.0.1 localhost192.168.187.105 k8s-master192.168.187.106 k8s-node1192.168.187.107 k8s-node2EOF
开始正式安装过程。
安装 elrepo 仓库并升级内核:
# 更新 yum 源并安装内核yum -y updaterpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgyum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpmyum list available --disablerepo=* --enablerepo=elrepo-kernelyum -y --enablerepo=elrepo-kernel install kernel-lt
重新制作内核配置并重启系统:
grub2-mkconfig -o /boot/grub2/grub.cfgreboot
确认内核版本:
[root@k8s-master ~] uname -srLinux 5.4.237-1.el7.elrepo.x86_64
设定主机名,并修改 hostname:
# Centos7.5及以上版本hostnamectl set-hostname k8s-master
或
# Centos7.9及以上版本hostnamectl set-hostname k8s-master
确保网络接口配置正确,并启用必要的防火墙规则:
# 配置网络相关参数sysctl -pmodprobe br_netfiltersysctl net.ipv4.ip_forward=1sysctl net.bridge.bridge-nf-call-iptables=1sysctl net.bridge.bridge-nf-call-ip6tables=1
启用 IPVS 模块并加载:
yum -y install ipset ipvsadmcat > /etc/sysconfig/modules/ipvs.modules << EOFipvsEOFchmod 755 /etc/sysconfig/modules/ipvs.modulesbash /etc/sysconfig/modules/ipvs.functions
安装 Docker 并镜像加速:
# 卸载旧版本 Dockeryum remove docker docker-client docker-common# 初始化插件包yum -y install yum-utils device-mapper-persistent-data lvm2# 添加 Docker 仓库yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装 Dockeryum -y install docker-ce docker-ce-cli containerd.io
启动 Docker 服务并配置镜像加速:
systemctl start dockersystemctl enable dockersudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json << EOF{ "registry-mirrors": ["https://镜像仓库地址"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
安装 kubeadm、kubelet 和 kubectl:
# YAML 格式:badges: []---java: false---frontEndUrl: ''kubernetesVersion: v1.21.10lastUpdate: 2024-03-15pattern: ''nodeCount: 1nodes: - role: control-plane hostname: k8s-master lovelaceVersion: 1.10.3 - role: worker hostname: k8s-node1 lovelaceVersion: 1.10.3 - role: worker hostname: k8s-node2 lovelaceVersion: 1.10.3spec: {}tags: []title: clusterversion: 1.21.10# 命令执行:yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10systemctl enable --now kubelet
根据文档,Docker v20.10 对应 Kubernetes v1.21.10。
使用 kubeadm 初始化 master 节点:
kubeadm init --apiserver-advertise-address=192.168.187.105 \--control-plane-endpoint=k8s-master \--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \--kubernetes-version=v1.21.10 \--service-cidr=10.96.0.0/16 \--pod-network-cidr=192.168.0.0/16
在从节点上执行以下命令加入集群:
kubeadm join k8s-master:6443 --token=*.token* \--discovery-token-ca-cert-hash=sha256:*token_hash*
选择 Calico 网络插件进行部署:
curl https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml -o calico.yamlkubectl apply -f calico.yaml
确保 pod 网络 CIDR 与集群网络 CIDR 一致,修改 calico.yaml 文件中的 CIDR 范围。
检查节点状态:
kubectl get nodes
此时节点状态应为 Ready。
启用 IPVS 模式:
kubectl edit cm kube-proxy -n kube-system
修改配置,设置 mode 为 "ipvs"。
部署 Nginx 网站:
kubectl create deployment nginx --image=nginx:1.14-alpinekubectl expose deployment nginx --port=80 --type=NodePort
查看部署状态:
kubectl get pods,svc
部署 Kubernetes Dashboard:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yamlkubectl apply -f recommended.yaml
设置访问端口:[kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard]修改 ClusterIP 为 NodePort,并添加固定端口。
创建访问令牌并获取:[kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | awk '{print $1}')]
确保所有服务和 pod 状态正常:[kubectl get pods,svc]
如遇到问题,请根据日志和错误提示逐步排查,确保所有组件正常运行。
转载地址:http://veryk.baihongyu.com/