Kubernetes 初学者指南
1. 介绍
什么是 Kubernetes?
Kubernetes(简称 k8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它由 Google 于 2014 年开源,并由云原生计算基金会(CNCF)进行维护。Kubernetes 提供了一个灵活且强大的平台,能够在各种环境中运行容器化应用程序,从本地开发环境到生产级别的云基础设施。
为什么选择 Kubernetes?
- 自动化操作:Kubernetes 可以自动化应用的部署、扩展和管理,减少手动操作的繁琐和错误。
- 高可用性:通过自动重启、复制和负载均衡,确保应用程序的高可用性和稳定性。
- 可扩展性:Kubernetes 支持水平扩展,可以根据应用的负载动态增加或减少容器实例。
- 灵活性:支持多种环境,包括公有云、私有云和混合云,使得应用可以在不同平台上无缝迁移。
- 社区和生态系统:Kubernetes 拥有庞大的社区和丰富的生态系统,提供了大量的插件、工具和资源,帮助开发者更好地使用和扩展 Kubernetes。
Kubernetes 的主要功能
- 容器编排:自动化容器的部署、管理、扩展和网络配置。
- 服务发现和负载均衡:自动发现服务并进行负载均衡,确保流量均匀分布。
- 存储编排:自动挂载和管理存储卷,支持多种存储后端。
- 自动扩展:根据负载自动扩展或缩减容器实例,优化资源使用。
- 自愈能力:自动重新调度和重启失败的容器,确保应用程序的稳定运行。
- 配置管理和密钥管理:使用 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 实现,适用于本地开发和测试。以下是安装步骤:
- 下载并安装 Minikube:https://minikube.sigs.k8s.io/docs/start/
- 启动 Minikube:
minikube start
- 验证安装:
kubectl get nodes
安装 kubectl(Kubernetes 命令行工具)
kubectl 是 Kubernetes 的命令行工具,用于与集群进行交互。以下是安装步骤:
- 下载并安装 kubectl:https://kubernetes.io/docs/tasks/tools/install-kubectl/
- 配置 kubectl 连接到 Minikube:
kubectl config use-context minikube
- 验证安装:
kubectl cluster-info
5. 创建和管理 Pods
使用 kubectl
创建 Pod
以下是创建一个简单 Pod 的示例:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
ports:
- containerPort: 80
使用以下命令创建 Pod:
kubectl apply -f my-pod.yaml
查看 Pod 状态
使用以下命令查看 Pod 的状态:
kubectl get pods
删除 Pod
使用以下命令删除 Pod:
kubectl delete pod my-pod
6. 部署应用
创建 Deployment
以下是创建一个 Deployment 的示例:
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:
kubectl apply -f my-deployment.yaml
更新 Deployment
编辑 Deployment 的配置文件,然后使用以下命令应用更新:
kubectl apply -f my-deployment.yaml
回滚 Deployment
使用以下命令回滚到上一个版本:
kubectl rollout undo deployment/my-deployment
7. 服务发现和负载均衡
创建 Service
以下是创建一个 Service 的示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
使用以下命令创建 Service:
kubectl apply -f my-service.yaml
暴露 Deployment
使用以下命令将 Deployment 暴露为一个 Service:
kubectl expose deployment my-deployment --type=LoadBalancer --name=my-service
负载均衡策略
Kubernetes 提供了多种负载均衡策略,如轮询、最小连接数等。可以通过配置 Service 的 sessionAffinity
属性来实现不同的策略。
8. 配置和存储管理
使用 ConfigMap 和 Secret 管理配置
以下是创建一个 ConfigMap 的示例:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key1: value1
key2: value2
使用以下命令创建 ConfigMap:
kubectl apply -f my-config.yaml
以下是创建一个 Secret 的示例:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU=
使用以下命令创建 Secret:
kubectl apply -f my-secret.yaml
使用 PersistentVolume 和 PersistentVolumeClaim 管理存储
以下是创建一个 PersistentVolume 的示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
使用以下命令创建 PersistentVolume:
kubectl apply -f my-pv.yaml
以下是创建一个 PersistentVolumeClaim 的示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
使用以下命令创建 PersistentVolumeClaim:
kubectl apply -f my-pvc.yaml
9. 监控和日志
查看 Pod 和节点日志
使用以下命令查看 Pod 的日志:
kubectl logs my-pod
使用以下命令查看节点的日志:
kubectl describe node my-node
使用 Prometheus 和 Grafana 进行监控
Prometheus 和 Grafana 是常用的监控解决方案,可以用于监控 Kubernetes 集群的状态和性能。以下是安装和配置步骤:
- 安装 Prometheus:https://prometheus.io/docs/prometheus/latest/installation/
- 安装 Grafana:https://grafana.com/docs/grafana/latest/installation/
- 配置 Prometheus 采集 Kubernetes 指标:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
- 在 Grafana 中添加 Prometheus 数据源:https://grafana.com/docs/grafana/latest/datasources/prometheus/
10. 总结
通过本文的介绍,我们了解了 Kubernetes 的基本概念、架构与原理,以及如何安装和配置 Kubernetes,创建和管理 Pod,部署应用,服务发现和负载均衡,配置和存储管理,以及监控和日志。Kubernetes 提供了强大的功能和灵活的架构,是现代容器化应用的理想选择。
推荐的学习资源: