kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.34 版本的客户端能与 v1.33、 v1.34 和 v1.35 版本的控制面通信。 用最新兼容版的 kubectl 有助于避免不可预见的问题。

Kubernetes


☸️ Kubernetes 技术操作指南:从零开始掌握容器编排

作者: Weekend
发布日期: 2025年10月
实验操作系统: Ubuntu 22.04 LTS
标签: Kubernetes、DevOps、云原生、容器编排、微服务


一、Kubernetes 简介

什么是 Kubernetes?

Kubernetes(简称 K8s) 是一个由 Google 开源的 容器编排平台,用于自动化部署、扩缩容和管理容器化应用。
它可以在多台服务器上统一调度和运行容器,让应用运行更加稳定、高效。

简单来说:

Kubernetes = 容器世界的“操作系统” + 集群调度中心。


二、核心功能

功能说明
自动调度根据资源使用情况自动选择合适的节点运行容器
服务发现与负载均衡自动创建访问入口(Service)并实现负载均衡
自动伸缩根据负载自动扩容或缩容 Pod
自愈机制容器崩溃后自动重建
滚动更新与回滚支持无中断更新与版本回退
声明式配置通过 YAML 声明系统状态,K8s 自动达成目标

三、核心概念快速理解

概念作用
Node工作节点(运行容器的机器)
Pod最小部署单元,封装一个或多个容器
Deployment控制 Pod 的副本数和更新策略
Service为 Pod 提供固定访问入口(负载均衡)
Ingress对外暴露 HTTP/HTTPS 服务的入口
ConfigMap / Secret配置与敏感信息管理
Namespace集群内的逻辑隔离空间

四、Kubernetes 环境部署指南

1. 使用 kubeadm 快速部署集群

环境要求:
  • 至少两台 Linux 主机(1 控制节点 + 1 工作节点)

  • 每台机器开启 swapoff

    sudo swapoff -a
    
安装步骤:
# 安装依赖
sudo apt update && sudo apt install -y apt-transport-https curl

# 添加 Kubernetes 仓库
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

# 安装 kubeadm、kubelet、kubectl
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet
# 用 curl 在 Linux 系统中安装 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
初始化主节点:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

初始化完成后,执行以下命令配置 kubectl:

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件(Flannel):
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
加入工作节点:

在工作节点上执行 kubeadm join 命令(主节点初始化时会显示该命令)。


五、集群基本操作

查看集群状态:

kubectl get nodes
kubectl get pods -A
kubectl cluster-info

查看某个 Pod 详细信息:

kubectl describe pod <pod-name> -n <namespace>

删除资源:

kubectl delete pod <pod-name>
kubectl delete deployment <deployment-name>

六、部署一个 Nginx 应用示例

1. 创建 Deployment

# nginx-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

执行部署:

kubectl apply -f nginx-deployment.yml
kubectl get pods

2. 创建 Service 暴露访问端口

# nginx-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080
  type: NodePort

执行:

kubectl apply -f nginx-service.yml
kubectl get svc

访问:

http://<NodeIP>:30080

七、使用 ConfigMap 与 Secret 管理配置

创建 ConfigMap

kubectl create configmap app-config --from-literal=ENV=prod

在 Pod 中引用:

env:
  - name: APP_ENV
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: ENV

八、滚动更新与回滚

更新镜像:

kubectl set image deployment/nginx-deployment nginx=nginx:1.25

回滚版本:

kubectl rollout undo deployment/nginx-deployment

查看历史:

kubectl rollout history deployment/nginx-deployment

九、使用 Namespace 管理多环境

创建命名空间:

kubectl create namespace staging

部署资源时指定:

kubectl apply -f app.yml -n staging

查看资源:

kubectl get all -n staging

十、调试与排错技巧

操作命令
查看日志kubectl logs <pod-name>
进入容器交互kubectl exec -it <pod-name> -- /bin/bash
查看事件kubectl get events --sort-by=.metadata.creationTimestamp
导出 YAML 配置kubectl get pod <name> -o yaml

十一、实用命令速查表

功能命令
查看所有资源kubectl get all -A
清理所有资源kubectl delete all --all -n default
查看 Pod 的 IPkubectl get pod -o wide
扩容 Deploymentkubectl scale deployment nginx-deployment --replicas=5
测试端口转发kubectl port-forward svc/nginx-service 8080:80

十二、进阶:Kubernetes 最佳实践

  1. 使用 Helm 管理复杂应用

    • Helm 类似 “K8s 的 apt/yum”,支持一键部署复杂服务。
  2. 使用 Labels 与 Selectors 进行精细化管理

  3. 结合 Prometheus + Grafana 做监控与告警

  4. 使用 NetworkPolicy 控制容器间访问

  5. 启用资源限制(CPU、内存)防止资源抢占

  6. 启用 RBAC 控制权限安全


十三、总结

Kubernetes 是现代云原生架构的核心。
它将传统手动运维工作彻底自动化,从容器调度、服务发现到自愈机制,实现了真正的 声明式基础设施

学好 Kubernetes,不仅能提升部署效率,更是迈向云原生架构与 DevOps 实践的关键一步。


💡 最后结语:
当你第一次看到所有容器自动调度、自动修复、自动扩缩容时,
你会发现 —— 这就是基础设施的未来。


更多推荐