目录

  1. 1. 前言
  2. 2. 基础
    1. 2.1. k8s 集群
    2. 2.2. Pod
  3. 3. 环境搭建
    1. 3.1. Kind 搭建
    2. 3.2. 配置 kubectl
  4. 4. kubectl 命令行工具
    1. 4.1. 查看和查找资源
  5. 5. 部署应用

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

Kubernetes

2026/2/10 DevOps
  |     |   总文章阅读量:

前言

参考:

https://github.com/bfengj/Cloud-Security/blob/main/Kubernetes/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md

https://cn.kubeblocks.io/docs/preview/user-docs/installation/prepare-a-local-k8s-cluster/

https://zhuanlan.zhihu.com/p/8518707020

https://kubernetes.io/zh-cn/docs/reference/kubectl/quick-reference/


基础

Kubernetes 又称 k8s,是 Google 在 2014 年开源的一个用来管理容器的平台

是一个用于自动化部署、扩展和管理容器化应用程序的开源系统

k8s 主要由以下核心组件组成:

  • etcd 保存了整个集群的状态,k8s 的配置信息存储于此处
  • API Server 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制
  • Controller Manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  • Scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
  • Kubelet 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
  • Container Runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI)
  • Kube-proxy 负责为 Service 提供 Cluster 内部的服务发现和负载均衡

k8s 集群

一个 k8s 集群包含两种类型的资源:

  • 控制面(Control Plane)调度整个集群
  • 节点(Nodes)负责运行应用

Pod

pod 是 k8s 的最小服务单元,pod 内部才是容器,k8s 通过操作 pod 来操作容器。一个 Node 节点可以有多个 Pod


环境搭建

主机是 MacOS

前置工具:Docker、kubectl(命令行工具)

有三种轻量级工具可以本地创建 k8s 集群:

  • Minikube:Minikube 支持在本地机器的虚拟机或容器中运行单节点的 Kubernetes 集群
  • K3d:k3d 是一个轻量级工具,它在 Docker 容器中运行 k3s(一个轻量的 Kubernetes 发行版)
  • Kind:Kind 是 Kubernetes IN Docker 的缩写。它在 Docker 容器中运行 Kubernetes 集群,非常适合在本地进行 Kubernetes 测试

Kind 搭建

那我们选择使用 Kind 进行搭建

brew install kind

通过 Kind 创建 k8s 集群:

kind create cluster --name mykindcluster

该命令将创建一个单节点的 k8s 集群,运行在 Docker 容器中

检查集群是否启动

kubectl get nodes

如果要配置多节点集群,则可以通过配置文件:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  role: control-plane
  role: worker
  role: worker
kind create cluster --name multinode-cluster --config kind-config.yaml

删除集群

kind delete cluster --name mykindcluster

配置 kubectl

为了使 kubectl 能够管理 Kind 集群,需要将 Kind 集群的配置添加到 kubectl 的配置文件中:

kind get kubeconfig > ~/.kube/config

kubectl version 查看 kubectl 是否配置成功


kubectl 命令行工具

先配置一下自动补全

brew install bash-completion
source <(kubectl completion zsh)  # 在 zsh 中设置当前 shell 的自动补全
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # 在你的 zsh shell 中永久地添加自动补全

然后再开始学习使用 kubectl

kubectl 命令的常见格式是:kubectl action resource,这会对指定的资源(如 node 或 deployment)执行指定的操作(如 create、describe 或 delete)

查看和查找资源

# get 命令的基本输出
kubectl get services                          # 列出当前命名空间下的所有 Service
kubectl get pods --all-namespaces             # 列出所有命名空间下的全部的 Pod
kubectl get pods -o wide                      # 列出当前命名空间下的全部 Pod 并显示更详细的信息
kubectl get deployment my-dep                 # 列出某个特定的 Deployment
kubectl get pods                              # 列出当前命名空间下的全部 Pod
kubectl get pod my-pod -o yaml                # 获取一个 Pod 的 YAML

部署应用

创建一个简单的 nginx 部署

kubectl create deployment nginx --image=nginx

这个过程中执行了以下操作:

  • 搜索应用实例可以运行的合适节点(我们只有一个可用的节点)
  • 调度应用在此节点上运行
  • 配置集群在需要时将实例重新调度到新的节点上

在 Kubernetes 内运行的 Pod 运行在一个私有的、隔离的网络上。 默认这些 Pod 可以从同一 Kubernetes 集群内的其他 Pod 和服务看到,但超出这个网络后则看不到。 当我们使用 kubectl 时,我们通过 API 端点交互与应用进行通信。

kubectl proxy 命令可以创建一个代理,将通信转发到集群范围的私有网络

现在我们在主机(终端)和 Kubernetes 集群之间有一个连接。此代理能够从这些终端直接访问 API,可以直接访问 8001 端口查看 API

创建一个服务来暴露 nginx

kubectl expose deployment nginx --type=LoadBalancer --port=80