Skip to main content

Kubernetes (k8s) 安装与基本应用指南 - Rocky Linux

一、

本指南将介绍在 Rocky Linux 上安装 Kubernetes 集群并部署基本应用的完整流程。

前提条件

  • 至少两台 Rocky Linux 9 服务器(1 个控制平面节点,1 个工作节点)
  • 每台服务器至少 2GB RAM 和 2 个 CPU 核心
  • 所有节点之间的网络连接
  • sudo 或 root 权限

第一部分:安装准备

1. 单机开发环境安装 (Minikube)在所有节点上执行以下操作

1.1设置主机名和 安装前提

hosts
  • 2核以上CPU
  • 2GB以上内存
  • 20GB磁盘空间
  • 已安装Docker或虚拟机驱动

1.2 安装步骤文件

# 安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"控制平面节点
sudo installhostnamectl -oset-hostname root -g root -m 0755 kubectl /usr/local/bin/kubectlk8s-master

# 安装Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64工作节点
sudo installhostnamectl minikube-linux-amd64set-hostname /usr/local/bin/minikubek8s-worker1

# 启动集群编辑 minikube/etc/hosts start文件(在所有节点上)
--driver=dockersudo #vi 验证安装
kubectl get nodes/etc/hosts

2.

添加如下内容(根据实际 生产环境安装IP (kubeadm)

修改):

192.168.1.100 k8s-master
192.168.1.101 k8s-worker1

2.1禁用 所有节点准备工作SELinux 和防火墙

#sudo 关闭swapsetenforce 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
#
安装Docker

加载内核模块

sudo modprobe overlay
sudo apt-getmodprobe updatebr_netfilter

sudocat apt-get install -y docker.io
sudo systemctl enable docker

# 安装kubeadm, kubelet和kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main"<<EOF | sudo tee /etc/apt/sources.list.modules-load.d/kubernetes.listk8s.conf
overlay
br_netfilter
EOF

cat <<EOF | sudo apt-gettee update/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 apt-getsysctl --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

# 启动并启用 containerd
sudo systemctl enable --now containerd

3. 安装 Kubernetes 组件

# 添加 Kubernetes 仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

# 安装 kubelet, kubeadm 和 kubectl
sudo dnf install -y kubelet kubeadm kubectl sudo--disableexcludes=kubernetes

apt-mark# hold启动并启用 kubelet
kubeadmsudo kubectlsystemctl enable --now kubelet

2.2 主节点

第三部分:初始化

 Kubernetes 集群

4. 在控制平面节点上初始化集群

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# 按照提初始化完成后会显加入集群的命令,类似:
# 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

2.3

6. 安装网络插件

(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

2.4

7. 加入工作节点

加入集群

工作节点上运行控制平面初始化完成后会显示加入命令,类似:

时提供的
kubeadm join <master-ip>:6443命令。

第四部分:验证集群

8. 检查节点状态

kubectl get nodes

9. 检查所有 pod 状态

kubectl get pods --token <token> --discovery-token-ca-cert-hash <hash>all-namespaces

二、Kubernetes 第五部分:部署基本应用

1.10. 部署第一个 Nginx 示例应用

1.1
# 创建Deployment

deployment
kubectl create deployment nginx --image=nginx:1.19nginx

1.2# 暴露Service

服务
kubectl expose deployment nginx --port=80 --type=NodePort

# 获取服务信息
kubectl get svc nginx

1.3

11. 访问应用

使用 kubectl get servicessvc #nginx 使用输出的NodePort访 NodePort 端口访,如 Nginx 服务。

常见问题解决

  1. 节点 NotReady 状态

    curl
      http://<node-ip>:<node-port>
    • 检查网络插件是否安装正确
  • 查看

    2.kubelet 使用YAML文件部署

    2.1 创建deployment.yaml

    日志:apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:journalctl -u name: nginx
            image: nginx:1.19
            ports:
            - containerPort: 80
    

    2.2 创建service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
    

    2.3 应用配置

    kubectl applykubelet -f
  • deployment.yaml kubectl apply
  • -f

    Pod service.yaml一直处于

  • Pending

    3.状态

    基本操作命令

      # 
    • 资源状态 kubectl get pods kubectl get deployments kubectl get services # 查看详细信息 是否足够:kubectl describe pod <pod-name>
    • #
    • 看日志 kubectl logs <pod-name> # 进入容器 kubectl exec -it <pod-name> -- /bin/bash # 扩展副本数 kubectl scale deployment nginx-deployment --replicas=5 # 更新镜像 kubectl set image deployment/nginx-deployment nginx=nginx:1.20 # 回滚更新 kubectl rollout undo deployment/nginx-deployment
    • 三、核心概念实践

      1. ConfigMap 使用

      1.1 创建ConfigMap

      节点是否有污点:kubectl createdescribe configmapnode app-config| --from-literal=APP_COLOR=bluegrep --from-literal=APP_MODE=prodTaint
      
  • kubeadm init 失败

    • 重置集群:sudo kubeadm reset
    • 1.2
    • 检查容器运行时是否正常运行
    • 在Pod中使用

    env:
  • - name: APP_COLOR valueFrom: configMapKeyRef: name: app-config key: APP_COLOR

    2. Secret 使用

    2.1 创建Secret

    kubectl create secret generic db-secret --from-literal=DB_USER=root --from-literal=DB_PASSWORD=password
    

    2.2 在Pod中使用

    env:
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-secret
            key: DB_PASSWORD
    

    3. Volume 使用

    volumes:
    - name: data-volume
      emptyDir: {}
    containers:
    - name: nginx
      volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: data-volume
    

    四、生产环境建议后续步骤

    1. 资源限制:为容器设置requests和limits安装 Kubernetes 仪表板
    2. 健康检查配置liveness和readiness探针持久化存储
    3. HPA设置自动扩缩容 Ingress 控制器
    4. 命名空间:使用namespace隔离环境
    5. 网络策略:限制Pod间网络访问
    6. RBAC配置基于角色的访问

    五、常用工具

    1. k9s:终端UI管理工具
      brew install k9s
      
    2. Lens:Kubernetes IDE
    3. Helm:Kubernetes包管理工具
      curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
      
      和日志系统

    通过以上步骤,您已经在 Rocky Linux 上功部署Kubernetes的安装并掌握了一个基本的 Kubernetes 集群并运行了第一个应用方法。接下来可以探索更高级的功能如StatefulSet、DaemonSet、Operator等