K8S安装指南与核心操作命令汇总

在云原生时代,Kubernetes(简称K8S)已成为容器编排的事实标准,无论是企业级应用部署还是个人技术学习,掌握K8S的安装与基础操作都是必备技能。本文将从安装前置准备、具体安装步骤(以主流的kubeadm方式为例),再到日常运维核心命令,一步步带大家上手K8S,全程兼顾实用性与易懂性,新手也能轻松跟随操作。

一、安装前置准备

在开始安装K8S之前,需要先完成环境配置,避免后续出现兼容性问题。以下是单节点(master节点,可兼作worker)和多节点集群的通用前置要求,本次以CentOS 7/8系统为例(Ubuntu系统操作逻辑类似,仅包管理命令不同)。

1. 硬件要求

|--------|------|---------------|----------------------------------------|
| master | 2C4G | 192.168.10.20 | docker、kubeadm、kubelet、kubectl、flannel |
| node1 | 2C2G | 192.168.10.21 | docker、kubeadm、kubelet、kubectl、flannel |
| node2 | 2C2G | 192.168.10.22 | docker、kubeadm、kubelet、kubectl、flannel |

2. 系统环境配置

登录服务器后,先执行以下命令完成系统初始化配置:

  1. 关闭防火墙(生产环境可按需配置安全规则,新手建议先关闭简化操作):

    复制代码
    # 关闭firewalld 
    systemctl stop firewalld 
    systemctl disable firewalld 
    
    # 关闭selinux(避免权限限制) 
    setenforce 0 
    
    # 临时关闭 
    sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config  (重启生效)
  2. 关闭Swap分区(K8S要求禁用Swap,否则会影响容器调度和性能):

    复制代码
    # 临时关闭  
    swapoff -a 
    
    # 永久关闭(注释swap挂载项)
    sed -ri 's/.*swap.*/#&/' /etc/fstab
  3. 配置主机名与hosts解析(各节点需能通过主机名互通):

    复制代码
    vim /etc/hosts
    
    hostnamectl set-hostname master
    hostnamectl set-hostname node1
    hostnamectl set-hostname node2
  4. 配置内核参数(开启IP转发,支持K8S网络插件):

    复制代码
    cat > /etc/sysctl.d/kubernetes.conf << EOF
    net.bridge.bridge-nf-call-ip6tables=1
    net.bridge.bridge-nf-call-iptables=1          
    net.ipv6.conf.all.disable_ipv6=1
    net.ipv4.ip_forward=1
    EOF
    
    
    # 生效参数
    sysctl --system  
  5. 安装Docker(K8S需依赖容器运行时,这里选择主流的Docker或containerd,本次以Docker为例):

    复制代码
    以下所有节点操作
    
    # 所有节点安装docker
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install -y docker-ce docker-ce-cli containerd.io
    
    #配置docker加速器
    mkdir /etc/docker
    cat > /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      }
    }
    EOF
    
    # 重启docker
    systemctl daemon-reload
    systemctl restart docker.service
    systemctl enable docker.service 
    
    docker info | grep "Cgroup Driver"
    Cgroup Driver: systemd

二、K8S安装步骤(kubeadm方式)

kubeadm是K8S官方提供的集群部署工具,简化了安装流程,适合新手快速搭建集群。本次先介绍单节点集群(master节点)安装,后续补充多节点集群的worker节点加入方法。

1. 安装kubeadm、kubelet、kubectl

这三个是K8S的核心组件:kubeadm用于初始化集群,kubelet是节点上的代理组件(管理容器),kubectl是K8S的命令行工具。

复制代码
所有节点安装kubeadm,kubelet和kubectl

#定义源
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


yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11

# 设置为开机自启

systemctl enable kubelet.service

2. 初始化master节点

执行kubeadm init命令初始化集群,核心是拉取K8S核心镜像(apiserver、controller-manager等)并配置集群参数。

复制代码
//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录
unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

//复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件
scp -r /opt/k8s root@node1:/opt
scp -r /opt/k8s root@node2:/opt


//初始化kubeadm
kubeadm init \
--apiserver-advertise-address=192.168.10.19 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.11 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0

此方式初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

kubectl edit cm kube-proxy -n=kube-system

修改mode: ipvs

初始化成功后,会输出以下关键信息(务必保存,用于后续配置kubectl和添加worker节点):

复制代码
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: 

mkdir -p $HOME/.kube 
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
chown $(id -u):$(id -g) $HOME/.kube/config 

Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: 

#以下为进入集群的指令
kubeadm join 192.168.10.20:6443 --token pdh67c.t59nph91cdssqmvv     
--discovery-token-ca-cert-hash sha256:a9c5fa1575e0869f7d6b4b226caa8cf94f4203120daca37bfceb530687a13d8e

3. 安装网络插件(关键步骤)

K8S集群初始化后,需要安装网络插件才能让Pod之间互通。这里选择主流的Flannel插件(轻量、易部署):

复制代码
//安装flannel插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

//在 node 节点上执行 kubeadm join 命令加入群集
kubeadm join 192.168.10.20:6443 --token pdh67c.t59nph91cdssqmvv     --discovery-token-ca-cert-hash sha256:a9c5fa1575e0869f7d6b4b226caa8cf94f4203120daca37bfceb530687a13d8e

若出现"ImagePullBackOff"错误,说明拉取Flannel镜像失败,可手动拉取镜像并重新标签:

复制代码
# 手动拉取阿里云Flannel镜像 
docker pull registry.aliyuncs.com/google_containers/flannel:v0.21.5 

# 给镜像打标签(符合配置文件中的镜像名称要求) 
docker tag registry.aliyuncs.com/google_containers/flannel:v0.21.5 quay.io/flannel/flannel:v0.21.5 

# 重新应用配置文件 
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.21.5/Documentation/kube-flannel.yml

4. 单节点集群允许master节点调度Pod(可选)

默认情况下,master节点会被打上"污点",不允许调度Pod(生产环境为了安全,建议单独部署worker节点)。单节点集群需移除污点,让master节点能运行Pod:

复制代码
# 移除master节点污点 
kubectl taint nodes --all node-role.kubernetes.io/control-plane- kubectl taint nodes --all node-role.kubernetes.io/master- 

# 旧版本K8S使用此命令 # 验证节点状态(STATUS为Ready即正常) 
kubectl get nodes

5. 添加worker节点(多节点集群)

如果需要搭建多节点集群,在worker节点上完成"一、安装前置准备"和"二、1. 安装kubeadm、kubelet、kubectl"后,执行master节点初始化成功时输出的join命令:若join命令的token过期,可在master节点执行以下命令重新生成:

复制代码
# 生成新的join token 
kubeadm token create --print-join-command

在master节点执行以下命令,验证worker节点是否加入成功:

复制代码
# 若worker节点STATUS为Ready,说明加入成功
kubectl get nodes 

三、K8S核心操作命令汇总

安装完成后,通过kubectl命令管理集群。以下是日常运维中最常用的命令,按"集群状态查看""Pod管理""服务管理""命名空间管理"分类整理,方便查询。

1. 集群状态查看

复制代码
# 查看节点状态 
kubectl get nodes 
kubectl get nodes -o wide # 查看节点详细信息(IP、容器运行时等) 

# 查看集群组件状态(控制平面组件) 
kubectl get componentstatuses 
kubectl get cs # 简写 

# 查看命名空间(所有资源都属于某个命名空间,默认有default、kube-system等) 
kubectl get namespaces 
kubectl get ns # 简写 

# 查看指定命名空间下的所有资源 
kubectl get all -n kube-system 
kubectl get all # 查看默认命名空间(default)下的所有资源

2. Pod管理(Pod是K8S的最小部署单元)

复制代码
# 查看Pod状态
kubectl get pods
kubectl get pods -n kube-system  # 查看指定命名空间的Pod
kubectl get pods -o wide  # 查看Pod详细信息(运行节点、IP等)

# 查看Pod日志(调试常用)
kubectl logs <pod-name>  # 查看指定Pod的日志
kubectl logs -f <pod-name>  # 实时跟踪Pod日志
kubectl logs <pod-name> -c <container-name>  # 若Pod有多个容器,指定容器查看日志

# 进入Pod内部(类似docker exec)
kubectl exec -it <pod-name> -- /bin/bash  # 进入Pod的默认容器
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash  # 指定容器

# 创建Pod(通过yaml文件,推荐)
kubectl apply -f <pod-yaml-file>.yaml
# 示例:创建一个nginx Pod的yaml文件(nginx-pod.yaml)
cat > nginx-pod.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80
EOF
# 执行创建命令
kubectl apply -f nginx-pod.yaml

# 删除Pod
kubectl delete pod <pod-name>
kubectl delete -f <pod-yaml-file>.yaml  # 通过yaml文件删除

3. 服务管理(Service用于暴露Pod,实现负载均衡和服务发现)

复制代码
# 查看Service
kubectl get services
kubectl get svc  # 简写

# 创建Service(以暴露nginx Pod为例,创建ClusterIP类型的Service)
# 编写service yaml文件(nginx-svc.yaml)
cat > nginx-svc.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx  # 匹配label为app:nginx的Pod
  ports:
  - port: 80  # Service暴露的端口
    targetPort: 80  # Pod的容器端口
  type: ClusterIP  # 类型:ClusterIP(仅集群内部访问)、NodePort(节点端口暴露)、LoadBalancer(云厂商负载均衡)
EOF
# 执行创建命令
kubectl apply -f nginx-svc.yaml

# 暴露Pod为Service(快速创建,无需编写yaml)
kubectl expose pod <pod-name> --port=80 --target-port=80 --name=<svc-name>

# 删除Service
kubectl delete svc <svc-name>
kubectl delete -f <svc-yaml-file>.yaml

4. 命名空间管理

复制代码
# 创建命名空间
kubectl create namespace <ns-name>
kubectl create ns <ns-name>  # 简写

# 在指定命名空间创建资源(示例:在test-ns命名空间创建nginx Pod)
kubectl apply -f nginx-pod.yaml -n test-ns

# 删除命名空间(会删除命名空间下的所有资源,谨慎操作)
kubectl delete ns <ns-name>

5. 其他常用命令

复制代码
# 查看资源详情(Pod、Service等都可使用)
kubectl describe pod <pod-name>
kubectl describe svc <svc-name>

# 重启Pod(K8S没有直接重启命令,可通过删除Pod实现重启,前提是Pod由Deployment管理)
kubectl delete pod <pod-name>

# 查看K8S集群信息
kubectl cluster-info

# 导出资源yaml文件(方便备份或修改)
kubectl get pod <pod-name> -o yaml > <pod-name>-backup.yaml

四、常见问题排查

  1. kubectl get nodes 显示节点NotReady :大概率是网络插件未部署成功或镜像拉取失败,执行kubectl get pods -n kube-system查看flannel或其他网络插件的Pod状态,若为ErrImagePull/ImagePullBackOff,手动拉取镜像并打标签。

  2. 初始化master节点时提示"container runtime is not running" :Docker或containerd未启动,执行systemctl start docker启动容器运行时。

  3. Pod启动后处于Pending状态 :可能是节点资源不足(CPU/内存),或没有符合条件的节点(如master节点未移除污点),执行kubectl describe pod <pod-name>查看Events字段,根据提示排查。

五、总结

本文通过"前置准备→安装步骤→核心命令"的流程,带大家完成了K8S集群的搭建和基础操作。重点掌握kubeadm初始化集群、Flannel网络插件安装,以及kubectl的核心命令(查看状态、管理Pod和Service),就能应对日常的基础运维需求。后续可以进一步学习Deployment(Pod的编排管理)、StatefulSet(有状态应用部署)等高级特性,深入掌握K8S的强大功能。

如果在安装过程中遇到问题,欢迎在评论区留言交流~

相关推荐
java_logo11 小时前
OpenCode 企业级 Docker 部署完整指南
运维·docker·容器·opencode·opencode本地化部署·opencode部署手册·opencode部署方案
再战300年11 小时前
docker下创建redis集群方案
redis·docker·容器
qq_2290580113 小时前
docker中检测进程的内存使用量
java·docker·容器
java_logo13 小时前
使用 Docker 部署 Clawdbot(官方推荐方式)
docker·容器·clawdbot·clawdbot部署·clawdbot部署手册·clawdbot部署文档·docker clawdbot
玉树临风江流儿14 小时前
docker镜像加速器配置步骤
运维·docker·容器
短剑重铸之日15 小时前
《SpringCloud实用版》生产部署:Docker + Kubernetes + GraalVM 原生镜像 完整方案
后端·spring cloud·docker·kubernetes·graalvm
Hernon16 小时前
微服务架构设计 - 架构取舍决策CAP
微服务·云原生·架构
你才是臭弟弟16 小时前
Amazon S3 和 MinIO (数据湖的选型)
大数据·云原生
Gold Steps.17 小时前
MySQL Operator for Kubernetes自动实现整个生命周期
mysql·云原生·kubernetes
GHL28427109017 小时前
Docker Desktop 启动报错“Virtualization support not detected“
c++·docker·容器