一、背景认知

1.1 核心概念通俗解读

初学者无需死记硬背专业定义,先理解核心作用,后续配置中逐步深化认知:

概念

通俗解释

核心作用

openEuler 24.03 LTS SP3

华为主导的开源Linux发行版,“24.03 LTS SP3”代表2024年3月发布的稳定版(LTS)第3次更新(SP3),适配x86、鲲鹏等架构

作为k8s的运行载体(操作系统),比其他Linux发行版更适配国内硬件,稳定性强,适合企业级和学习级部署

k8s(Kubernetes)

容器编排工具,简单理解为“容器的管家”,可批量管理多个容器(比如部署的网站、服务)

自动实现容器的启动、停止、扩容、故障恢复,避免手动管理多个容器的繁琐操作,是云计算、微服务的核心工具

容器(Container)

独立的“软件沙箱”,把应用程序和它需要的依赖(比如环境变量、配置文件)打包在一起,可在任何Linux系统中运行

解决“开发环境能跑、生产环境跑不了”的问题,k8s就是管理这些“沙箱”的工具

容器运行时(Containerd)

k8s管理容器的“底层工具”,负责容器的创建、运行、销毁,是k8s和容器之间的桥梁

k8s本身不直接操作容器,必须通过容器运行时(本文用Containerd,k8s官方推荐)实现容器管理

1.2 配置前提(必满足,否则后续会报错)

硬件要求(最低配置,初学者推荐用虚拟机测试,比如VMware、VirtualBox):
        

CPU:2核及以上(推荐4核,否则k8s组件启动会卡顿)

内存:4GB及以上(推荐8GB,内存不足会导致k8s节点启动失败)

硬盘:20GB及以上(推荐40GB,需存储系统、k8s组件和容器镜像)

网络:虚拟机需配置静态IP,能访问互联网(用于下载k8s和系统依赖)

系统要求:已安装openEuler 24.03 LTS SP3系统(最小化安装或桌面版均可,初学者推荐桌面版,方便操作)

权限要求:全程使用root用户操作(初学者避免权限不足导致的报错,后续可学习普通用户授权)

1.3 配置目标

完成配置后,你将拥有一个可正常使用的k8s单节点集群(初学者优先掌握单节点,后续可扩展为多节点),能够部署简单的容器应用(比如Nginx),掌握k8s基础管理命令。

二、核心配置(环境准备,重中之重)

这一步是后续k8s安装成功的关键,所有步骤必须严格执行,每一步执行完成后,建议验证是否成功,避免后续排查问题困难。

2.1 系统基础配置(关闭干扰服务,统一环境)

步骤1:关闭防火墙(openEuler默认开启,会阻止k8s组件通信)

bash
# 临时关闭防火墙(立即生效,重启后失效)
systemctl stop firewalld
# 永久关闭防火墙(重启后仍生效,避免后续麻烦)
systemctl disable firewalld
# 验证防火墙状态(确保显示inactive)
systemctl status firewalld

注意:初学者无需担心关闭防火墙的安全问题,测试环境可直接关闭;生产环境需配置防火墙规则,后续拓展建议会说明。

步骤2:关闭SELinux(安全增强组件,会限制k8s权限)

bash
# 临时关闭SELinux(立即生效,重启后失效)
setenforce 0
# 永久关闭SELinux(修改配置文件,重启后生效)
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
# 验证SELinux状态(确保显示Permissive)
getenforce

说明:修改配置文件后,需重启系统才能完全生效,后续步骤完成后统一重启。

步骤3:关闭Swap(交换分区,k8s要求必须关闭,否则会影响性能和稳定性)

bash
# 临时关闭Swap(立即生效,重启后失效)
swapoff -a
# 永久关闭Swap(修改配置文件,重启后生效)
sed -i '/swap/s/^/#/' /etc/fstab
# 验证Swap状态(确保所有Swap分区都显示off)
free -h

补充:free -h命令中,Swap一行显示“0B”或“off”即为成功。

步骤4:设置主机名(方便后续k8s节点识别,自定义即可,比如k8s-master)

bash
# 设置主机名(自定义,建议用k8s-master,单节点无需区分主从)
hostnamectl set-hostname k8s-master
# 验证主机名(确保显示设置的名称)
hostname
# 将主机名映射到本地IP(避免k8s启动时解析失败)
# 先查看本机IP(记下来,比如192.168.1.100)
ip addr
# 编辑hosts文件,添加映射(替换IP为自己的本机IP)
echo "192.168.1.100 k8s-master" >> /etc/hosts
# 验证映射(确保能ping通自己的主机名)
ping k8s-master -c 3

注意:IP地址需替换为自己的虚拟机静态IP,ping通无丢包即为成功。

2.2 网络配置(确保k8s组件通信正常)

步骤1:配置内核参数(开启k8s所需的网络转发功能)

bash
# 创建内核参数配置文件(k8s.conf)
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
# 生效内核参数(立即生效)
sysctl --system
# 验证内核参数(确保3个参数均为1)
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

说明:如果执行sysctl --system后报错,大概率是缺少bridge模块,执行modprobe br_netfilter后再重新执行即可。

步骤2:配置静态IP(已配置的可跳过,未配置的必须执行,否则重启后IP变化会导致k8s失效)

bash
# 查看网卡名称(一般是ens33,根据自己的虚拟机调整)
ip addr
# 编辑网卡配置文件(替换ens33为自己的网卡名称)
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 按i进入编辑模式,修改以下参数(其他参数不变):
BOOTPROTO=static  # 静态IP
ONBOOT=yes        # 开机自动启用网卡
IPADDR=192.168.1.100  # 自定义静态IP(和前面hosts映射的IP一致)
NETMASK=255.255.255.0 # 子网掩码(默认即可)
GATEWAY=192.168.1.1   # 网关(和虚拟机的网关一致)
DNS1=8.8.8.8         # DNS(谷歌DNS,也可填国内的223.5.5.5)
# 编辑完成后,按Esc,输入:wq保存退出
# 重启网络服务,使静态IP生效
systemctl restart NetworkManager
# 验证静态IP(确保IP和设置的一致)
ip addr

2.3 依赖配置(安装k8s所需的基础工具和镜像源)

步骤1:更新系统软件包(确保系统组件最新,避免依赖冲突)

bash
dnf update -y

说明:dnf是openEuler的包管理工具,类似CentOS的yum,执行后会自动更新所有软件包,耗时根据网络速度而定。

步骤2:安装必备工具(后续下载、解压、管理会用到)

bash
dnf install -y wget curl tar conntrack-tools ipset socat

步骤3:配置k8s和Containerd的yum源(openEuler默认源没有k8s组件,需添加国内源,加速下载)

bash
# 配置Containerd的yum源
cat > /etc/yum.repos.d/containerd.repo << EOF
[containerd]
name=containerd Repository
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
enabled=1
gpgcheck=0
EOF

# 配置k8s的yum源(阿里云源,国内下载速度快)
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

步骤4:重启系统(使前面的永久配置生效,比如SELinux、Swap、静态IP)

bash
reboot

注意:重启后需重新登录root用户,继续后续操作。重启后可再次验证防火墙、SELinux、Swap状态,确保均已关闭。

三、基础实操(安装介绍,步骤无省略)

本部分按“安装容器运行时(Containerd)→ 安装k8s组件 → 初始化k8s集群 → 配置网络插件 → 验证集群”的顺序操作,每一步都有详细命令和验证方法,初学者可直接复制命令执行。

3.1 安装容器运行时(Containerd)

k8s官方推荐使用Containerd作为容器运行时,替代传统的Docker(Docker需额外配置,初学者优先用Containerd,更简单)。

步骤1:安装Containerd

bash
dnf install -y containerd.io

步骤2:配置Containerd(关键步骤,否则k8s无法识别)

bash
# 生成Containerd默认配置文件
containerd config default > /etc/containerd/config.toml
# 编辑配置文件,修改2个关键参数
vi /etc/containerd/config.toml
# 按i进入编辑模式,找到以下2处并修改:
1. 找到"SystemdCgroup = false",改为"SystemdCgroup = true"(适配openEuler系统)
2. 找到"sandbox_image = "k8s.gcr.io/pause:3.6"",替换为国内镜像(避免下载失败):
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
# 编辑完成后,按Esc,输入:wq保存退出
# 重启Containerd服务,使配置生效
systemctl restart containerd
# 设置Containerd开机自启(避免重启系统后失效)
systemctl enable containerd
# 验证Containerd状态(确保显示active)
systemctl status containerd

补充:如果找不到配置文件中的参数,可按“/关键词”搜索(比如输入/SystemdCgroup,快速定位)。

3.2 安装k8s核心组件

k8s核心组件包括kubeadm(集群初始化工具)、kubelet(k8s节点代理,负责运行容器)、kubectl(k8s命令行工具,用于管理集群),三者版本必须一致,本文选择稳定版1.28.0(初学者推荐,兼容性好)。

步骤1:安装指定版本的k8s组件

bash
# 安装kubeadm、kubelet、kubectl(版本1.28.0,可根据需求调整,但需保持一致)
dnf install -y kubeadm-1.28.0 kubelet-1.28.0 kubectl-1.28.0
# 设置kubelet开机自启(k8s节点核心服务,必须自启)
systemctl enable kubelet
# 验证组件版本(确保三者版本一致)
kubeadm version
kubelet --version
kubectl version --client

注意:如果安装时提示“无可用软件包”,检查前面的k8s yum源是否配置正确,重新执行yum源配置命令即可。

步骤2:拉取k8s所需镜像(关键步骤,避免初始化时下载镜像失败)

k8s初始化时需要拉取多个镜像,默认从国外仓库下载,速度极慢,甚至失败,因此提前用国内镜像拉取。

bash
# 查看k8s 1.28.0版本需要的镜像列表
kubeadm config images list --kubernetes-version=1.28.0
# 手动拉取国内镜像(阿里云镜像,替换国外镜像)
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=1.28.0
# 验证镜像是否拉取成功(查看所有k8s相关镜像)
crictl images

说明:crictl是Containerd的命令行工具,用于管理容器镜像和容器,安装Containerd后自动自带。如果拉取失败,检查网络是否正常,或更换其他国内镜像源。

3.3 初始化k8s集群(单节点,初学者首选)

步骤1:执行集群初始化命令

bash
# 初始化集群,指定国内镜像源、集群网段(默认即可)、主机名
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=1.28.0 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--hostname-override=k8s-master
# 注意:命令需一次性执行,不要换行错误;如果执行失败,执行kubeadm reset后重新执行

初始化成功后,会出现一段提示信息,务必复制保存(后续添加节点会用到),类似如下内容:

bash
kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

步骤2:配置kubectl命令(让kubectl能正常使用,否则无法管理集群)

bash
# 按初始化成功后的提示,执行以下命令(复制自己的提示命令,不要直接复制此处)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 验证kubectl配置(查看集群信息,无报错即为成功)
kubectl cluster-info

如果执行kubectl cluster-info提示“connection refused”,说明k8s集群未启动,执行systemctl restart kubelet后再尝试。

3.4 安装网络插件(必装,否则k8s节点会处于NotReady状态)

k8s集群需要网络插件实现Pod之间的通信,初学者推荐使用Calico(稳定、简单,适配1.28.0版本),避免使用其他复杂插件。

bash
# 下载Calico网络插件配置文件(国内源,加速下载)
wget https://docs.tigera.io/v3.26/manifests/calico.yaml
# 安装Calico网络插件
kubectl apply -f calico.yaml
# 查看Calico插件运行状态(确保所有Pod都处于Running状态)
kubectl get pods -n kube-system
# 等待2-5分钟,再次查看,直到所有Pod的STATUS为Running

注意:如果Calico Pod启动失败,大概率是网络问题,检查静态IP、内核参数是否配置正确,或重新下载calico.yaml文件。

3.5 验证k8s集群(确认环境配置成功)

bash
# 查看k8s节点状态(确保节点状态为Ready)
kubectl get nodes
# 查看集群组件状态(确保所有组件都处于Running状态)
kubectl get pods -n kube-system
# 查看集群信息(确认集群正常运行)
kubectl cluster-info

当执行kubectl get nodes显示“k8s-master Ready”,且所有Pod都处于Running状态时,说明k8s初始环境配置成功!

四、高阶用法

基础配置完成后,掌握以下高阶用法,可快速上手k8s集群管理,避免只会配置、不会使用的问题。

4.1 核心命令(日常管理必备,记熟这几个即可)

命令

作用

示例

kubectl get nodes

查看k8s所有节点状态

kubectl get nodes -o wide(查看详细信息)

kubectl get pods

查看当前命名空间的Pod状态

kubectl get pods -n kube-system(查看系统Pod)

kubectl describe pod <Pod名称>

查看Pod详细信息(排查Pod启动失败原因)

kubectl describe pod calico-node-xxxx -n kube-system

kubectl logs <Pod名称>

查看Pod日志(排查故障)

kubectl logs kube-apiserver-k8s-master -n kube-system

kubectl apply -f <配置文件>

部署应用(通过配置文件)

kubectl apply -f nginx.yaml(部署Nginx)

kubectl delete pod <Pod名称>

删除Pod

kubectl delete pod nginx-xxxx

4.2 部署第一个应用(Nginx,验证集群可用性)

bash
# 1. 创建Nginx部署配置文件(简单配置,适合初学者)
cat > nginx.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1  # 部署1个Nginx Pod
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.24  # 拉取Nginx镜像(国内源自动适配)
        ports:
        - containerPort: 80  # Nginx默认端口
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort  # 暴露端口,方便外部访问
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080  # 外部访问端口(30000-32767之间)
EOF

# 2. 部署Nginx应用
kubectl apply -f nginx.yaml

# 3. 查看Nginx部署状态(确保Pod处于Running状态)
kubectl get pods
kubectl get deployment
kubectl get service

# 4. 访问Nginx(在虚拟机浏览器或宿主机浏览器访问)
# 访问地址:http://静态IP:30080(比如http://192.168.1.100:30080)
# 能看到Nginx默认页面,即为部署成功

4.3 集群故障排查基础(初学者必学,避免遇到问题无从下手)

问题1:kubectl get nodes显示节点NotReady
        

排查步骤:kubectl get pods -n kube-system(查看Calico等网络插件是否Running)→ 若Calico未Running,执行kubectl describe pod <Calico Pod名称> 查看原因 → 多数是网络或内核参数问题,重新配置内核参数或重启Calico服务。

问题2:初始化集群失败,提示“image pull failed”
        

排查步骤:检查镜像拉取命令是否正确 → 检查网络是否能访问阿里云镜像源 → 重新执行kubeadm config images pull命令。

问题3:kubectl命令提示“connection refused”
        

排查步骤:执行systemctl status kubelet(查看kubelet服务是否Running)→ 若未Running,执行systemctl restart kubelet → 若仍失败,执行kubeadm reset后重新初始化。

五、拓展建议(初学者进阶方向,避坑指南)

5.1 环境优化建议(提升集群稳定性,适合长期使用)

优化Containerd镜像加速:添加国内镜像加速器(比如阿里云加速器),加快后续容器镜像下载速度,具体配置可参考阿里云容器镜像服务文档。

调整kubelet资源限制:根据虚拟机硬件配置,调整kubelet的内存和CPU限制,避免k8s组件占用过多资源,导致系统卡顿。

开启日志轮转:k8s组件和容器会产生大量日志,配置日志轮转,避免日志占满硬盘,可修改/etc/logrotate.d/目录下的配置文件。

5.2 初学者学习路径建议(循序渐进,避免盲目学习)

基础阶段:熟练掌握本文的初始环境配置流程,能独立部署单节点集群,熟练使用4.1中的核心命令。

进阶阶段:学习多节点集群配置(添加从节点),了解k8s核心组件(kube-apiserver、kube-controller-manager等)的作用,学习Pod、Deployment、Service的核心概念。

提升阶段:学习k8s持久化存储(PV、PVC)、配置管理(ConfigMap、Secret)、故障排查进阶、安全配置等内容。

5.3 避坑指南(初学者常见错误,提前规避)

不要跳过核心配置步骤:尤其是关闭SELinux、Swap、防火墙,以及配置内核参数,这些步骤缺一不可,否则会导致后续安装失败。

不要随意修改k8s版本:本文选择的1.28.0版本兼容性好,初学者不要盲目追求最新版本,避免出现依赖冲突。

不要忘记保存集群初始化提示的join命令:后续添加从节点时需要用到,若忘记,可执行kubeadm token create --print-join-command重新生成。

不要用普通用户操作:初学者全程用root用户,避免权限不足导致的各种报错,后续可学习RBAC权限管理,给普通用户授权。

5.4 资源推荐(初学者免费学习资源)

官方文档:k8s官方文档(https://kubernetes.io/zh-cn/docs/home/)、openEuler官方文档(https://docs.openeuler.org/),权威且免费。

视频教程:B站搜索“k8s零基础教程”“openEuler部署k8s”,有大量免费实操教程,适合初学者跟着练习。

社区支持:openEuler社区、k8s中文社区,遇到问题可在社区提问,有很多开发者提供帮助。

结语:本文涵盖了k8s openEuler 24.03 LTS SP3初始环境配置的全流程,步骤详细、可直接执行,适合零基础初学者。建议初学者多练习几遍配置流程,熟悉每一步的作用,为后续k8s学习打下坚实基础。

更多推荐