Skip to main content

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 服务。

常见问题解决

  1. 节点 NotReady 状态

    • 检查网络插件是否安装正确
    • 查看 kubelet 日志:journalctl -u kubelet -f
  2. Pod 一直处于 Pending 状态

    • 检查资源是否足够:kubectl describe pod <pod-name>
    • 检查节点是否有污点:kubectl describe node | grep Taint
  3. kubeadm init 失败

    • 重置集群:sudo kubeadm reset
    • 检查容器运行时是否正常运行

后续步骤

  1. 安装 Kubernetes 仪表板
  2. 配置持久化存储
  3. 设置 Ingress 控制器
  4. 配置监控和日志系统

通过以上步骤,您已经在 Rocky Linux 上成功部署了一个基本的 Kubernetes 集群并运行了第一个应用。