Skip to content

Kubernetes 初学者指南

1. 介绍

什么是 Kubernetes?

Kubernetes(简称 k8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它由 Google 于 2014 年开源,并由云原生计算基金会(CNCF)进行维护。Kubernetes 提供了一个灵活且强大的平台,能够在各种环境中运行容器化应用程序,从本地开发环境到生产级别的云基础设施。

为什么选择 Kubernetes?

  1. 自动化操作:Kubernetes 可以自动化应用的部署、扩展和管理,减少手动操作的繁琐和错误。
  2. 高可用性:通过自动重启、复制和负载均衡,确保应用程序的高可用性和稳定性。
  3. 可扩展性:Kubernetes 支持水平扩展,可以根据应用的负载动态增加或减少容器实例。
  4. 灵活性:支持多种环境,包括公有云、私有云和混合云,使得应用可以在不同平台上无缝迁移。
  5. 社区和生态系统:Kubernetes 拥有庞大的社区和丰富的生态系统,提供了大量的插件、工具和资源,帮助开发者更好地使用和扩展 Kubernetes。

Kubernetes 的主要功能

  1. 容器编排:自动化容器的部署、管理、扩展和网络配置。
  2. 服务发现和负载均衡:自动发现服务并进行负载均衡,确保流量均匀分布。
  3. 存储编排:自动挂载和管理存储卷,支持多种存储后端。
  4. 自动扩展:根据负载自动扩展或缩减容器实例,优化资源使用。
  5. 自愈能力:自动重新调度和重启失败的容器,确保应用程序的稳定运行。
  6. 配置管理和密钥管理:使用 ConfigMap 和 Secret 管理应用配置和敏感数据。

2. Kubernetes 的基本概念

Pod

Pod 是 Kubernetes 中最小的部署单元,一个 Pod 可以包含一个或多个容器,这些容器共享网络和存储资源。Pod 通常用于运行单个应用实例。

Node

Node 是 Kubernetes 集群中的一台工作机器,可以是物理服务器或虚拟机。每个 Node 上运行多个 Pod,并由主节点进行管理。

Cluster

Cluster 是由一组 Node 组成的集合,主节点负责管理整个集群的状态和调度任务,确保应用的高可用性和可扩展性。

Namespace

Namespace 是 Kubernetes 中的一种逻辑隔离方式,用于将集群中的资源划分为不同的组,以便进行资源管理和访问控制。

Deployment

Deployment 是一种高级对象,用于定义应用的期望状态,并负责管理 Pod 的创建、更新和删除,确保应用始终处于期望状态。

Service

Service 是 Kubernetes 中的一个抽象层,用于定义一组 Pod 的访问策略,提供负载均衡和服务发现功能,使得应用可以通过固定的 IP 和端口进行访问。

3. Kubernetes 的架构与原理

架构图

主节点(Master Node)

主节点负责管理整个集群的状态和调度任务,主要组件包括 API 服务器、控制器管理器、调度器和 etcd 存储。

工作节点(Worker Node)

工作节点负责运行 Pod,并由主节点进行管理。主要组件包括 kubelet 和 kube-proxy。

etcd 存储

etcd 是一个分布式键值存储,用于保存集群的所有状态数据,包括节点信息、Pod 配置和服务发现数据。

控制器管理器

控制器管理器负责管理集群中的各种控制器,如副本控制器、节点控制器和终端点控制器,确保集群始终处于期望状态。

调度器

调度器负责将新创建的 Pod 分配到合适的工作节点上,确保资源的合理利用和负载均衡。

API 服务器

API 服务器是 Kubernetes 的核心组件,提供了 RESTful API 接口,用于处理集群的所有操作请求,并与 etcd 进行通信。

kubelet 和 kube-proxy

kubelet 是运行在每个工作节点上的代理,负责管理节点上的 Pod,确保它们按照期望状态运行。kube-proxy 负责管理节点上的网络规则,确保服务的负载均衡和网络通信。

4. 安装和设置 Kubernetes

安装 Minikube(本地测试环境)

Minikube 是一个轻量级的 Kubernetes 实现,适用于本地开发和测试。以下是安装步骤:

  1. 下载并安装 Minikube:https://minikube.sigs.k8s.io/docs/start/
  2. 启动 Minikube:minikube start
  3. 验证安装:kubectl get nodes

安装 kubectl(Kubernetes 命令行工具)

kubectl 是 Kubernetes 的命令行工具,用于与集群进行交互。以下是安装步骤:

  1. 下载并安装 kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl/
  2. 配置 kubectl 连接到 Minikube:kubectl config use-context minikube
  3. 验证安装:kubectl cluster-info

5. 创建和管理 Pods

使用 kubectl 创建 Pod

以下是创建一个简单 Pod 的示例:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    ports:
    - containerPort: 80

使用以下命令创建 Pod:

sh
kubectl apply -f my-pod.yaml

查看 Pod 状态

使用以下命令查看 Pod 的状态:

sh
kubectl get pods

删除 Pod

使用以下命令删除 Pod:

sh
kubectl delete pod my-pod

6. 部署应用

创建 Deployment

以下是创建一个 Deployment 的示例:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
        ports:
        - containerPort: 80

使用以下命令创建 Deployment:

sh
kubectl apply -f my-deployment.yaml

更新 Deployment

编辑 Deployment 的配置文件,然后使用以下命令应用更新:

sh
kubectl apply -f my-deployment.yaml

回滚 Deployment

使用以下命令回滚到上一个版本:

sh
kubectl rollout undo deployment/my-deployment

7. 服务发现和负载均衡

创建 Service

以下是创建一个 Service 的示例:

yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

使用以下命令创建 Service:

sh
kubectl apply -f my-service.yaml

暴露 Deployment

使用以下命令将 Deployment 暴露为一个 Service:

sh
kubectl expose deployment my-deployment --type=LoadBalancer --name=my-service

负载均衡策略

Kubernetes 提供了多种负载均衡策略,如轮询、最小连接数等。可以通过配置 Service 的 sessionAffinity 属性来实现不同的策略。

8. 配置和存储管理

使用 ConfigMap 和 Secret 管理配置

以下是创建一个 ConfigMap 的示例:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  key1: value1
  key2: value2

使用以下命令创建 ConfigMap:

sh
kubectl apply -f my-config.yaml

以下是创建一个 Secret 的示例:

yaml
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU=

使用以下命令创建 Secret:

sh
kubectl apply -f my-secret.yaml

使用 PersistentVolume 和 PersistentVolumeClaim 管理存储

以下是创建一个 PersistentVolume 的示例:

yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data

使用以下命令创建 PersistentVolume:

sh
kubectl apply -f my-pv.yaml

以下是创建一个 PersistentVolumeClaim 的示例:

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

使用以下命令创建 PersistentVolumeClaim:

sh
kubectl apply -f my-pvc.yaml

9. 监控和日志

查看 Pod 和节点日志

使用以下命令查看 Pod 的日志:

sh
kubectl logs my-pod

使用以下命令查看节点的日志:

sh
kubectl describe node my-node

使用 Prometheus 和 Grafana 进行监控

Prometheus 和 Grafana 是常用的监控解决方案,可以用于监控 Kubernetes 集群的状态和性能。以下是安装和配置步骤:

  1. 安装 Prometheus:https://prometheus.io/docs/prometheus/latest/installation/
  2. 安装 Grafana:https://grafana.com/docs/grafana/latest/installation/
  3. 配置 Prometheus 采集 Kubernetes 指标:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
  4. 在 Grafana 中添加 Prometheus 数据源:https://grafana.com/docs/grafana/latest/datasources/prometheus/

10. 总结

通过本文的介绍,我们了解了 Kubernetes 的基本概念、架构与原理,以及如何安装和配置 Kubernetes,创建和管理 Pod,部署应用,服务发现和负载均衡,配置和存储管理,以及监控和日志。Kubernetes 提供了强大的功能和灵活的架构,是现代容器化应用的理想选择。

推荐的学习资源:

  1. Kubernetes 官方文档
  2. Kubernetes Up & Running
  3. CNCF Kubernetes 课程

上次更新于: