Kubernetes (k8s) 安装与基本应用指南 - Rocky Linux
本指南将介绍在 Rocky Linux 上安装 Kubernetes 集群并部署基本应用的完整流程。
前提条件
- 至少两台 Rocky Linux 9 服务器(1 个控制平面节点,1 个工作节点)
- 每台服务器至少 2GB RAM 和 2 个 CPU 核心
- 所有节点之间的网络连接
- sudo 或 root 权限
第一部分:安装准备
1. 在所有节点上执行以下操作
设置主机名和 hosts 文件
# 控制平面节点
sudo hostnamectl set-hostname k8s-master
# 工作节点
sudo hostnamectl set-hostname k8s-worker1
# 编辑 /etc/hosts 文件(在所有节点上)
sudo vi /etc/hosts
添加如下内容(根据实际 IP 修改):
192.168.1.100 k8s-master
192.168.1.101 k8s-worker1
禁用 SELinux 和防火墙
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo systemctl disable --now firewalld
禁用交换空间
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
加载内核模块
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
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
sudo sysctl --system
第二部分:安装容器运行时和 Kubernetes
2. 安装容器运行时(containerd)
# 安装依赖
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 containerd
sudo dnf install -y containerd.io
# 配置 containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 修改配置文件启用 systemd cgroup 驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
# 启动并启用 containerd
sudo systemctl enable --now containerd
3. 安装 Kubernetes 组件
# 备份原有仓库文件
sudo mv /etc/yum.repos.d/kubernetes.repo /etc/yum.repos.d/kubernetes.repo.bak
# 使用阿里云镜像源
cat <<EOF | sudo tee /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
# 安装 kubelet, kubeadm 和 kubectl
sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 启动并启用 kubelet
sudo systemctl enable --now kubelet
第三部分:初始化 Kubernetes 集群
4. 在控制平面节点上初始化集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.17.58.210 --cri-socket=unix:///var/run/containerd/containerd.sock --image-repository=registry.aliyuncs.com/google_containers
# 初始化完成后会显示加入集群的命令,类似:
# kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>
5. 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
6. 安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
7. 将工作节点加入集群
在工作节点上运行控制平面初始化时提供的 kubeadm join
命令。
第四部分:验证集群
8. 检查节点状态
kubectl get nodes
9. 检查所有 pod 状态
kubectl get pods --all-namespaces
第五部分:部署基本应用
10. 部署 Nginx 示例应用
# 创建 deployment
kubectl create deployment nginx --image=nginx
# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort
# 获取服务信息
kubectl get svc nginx
11. 访问应用
使用 kubectl get svc nginx
输出的 NodePort 端口访问 Nginx 服务。
常见问题解决
-
节点 NotReady 状态:
- 检查网络插件是否安装正确
- 查看 kubelet 日志:
journalctl -u kubelet -f
-
Pod 一直处于 Pending 状态:
- 检查资源是否足够:
kubectl describe pod <pod-name>
- 检查节点是否有污点:
kubectl describe node | grep Taint
- 检查资源是否足够:
-
kubeadm init 失败:
- 重置集群:
sudo kubeadm reset
- 检查容器运行时是否正常运行
- 重置集群:
后续步骤
- 安装 Kubernetes 仪表板
- 配置持久化存储
- 设置 Ingress 控制器
- 配置监控和日志系统
通过以上步骤,您已经在 Rocky Linux 上成功部署了一个基本的 Kubernetes 集群并运行了第一个应用。
No Comments