1. 深入理解Kubernetes(K8s)核心概念

a. Pods

  • 定义:Pod是Kubernetes中最小的可部署的计算单元,它封装了应用容器的运行环境。一个Pod中可以包含一个或多个紧密相关的容器,这些容器共享相同的网络命名空间、存储卷等。
  • 用途:Pod是Kubernetes进行资源调度和管理的最小单位。它确保了应用容器之间的紧密协作和资源共享。

b. Deployments

  • 定义:Deployment是Kubernetes中用于声明式地更新应用和服务的一种资源对象。它管理Pod和ReplicaSet,确保Pod按照期望的数量运行。
  • 特性:支持版本回滚、滚动更新、扩容缩容等特性,是管理无状态应用的首选方式。

c. Services

  • 定义:Service是Kubernetes中用于抽象Pod集合的访问方式的一种资源对象。它定义了Pod的访问策略,如负载均衡等。
  • 类型:主要包括ClusterIP(集群内部访问)、NodePort(集群外通过节点IP+端口访问)、LoadBalancer(云提供商提供负载均衡器)和ExternalName(将服务映射到外部域名)。

d. Ingress

  • 定义:Ingress是Kubernetes中用于将外部的HTTP(S)流量路由到集群内服务的一种资源对象。它提供了一种更灵活的路由规则定义方式,比Service的NodePort和LoadBalancer更易于管理和扩展。
  • 特点:支持基于域名的路由、TLS/SSL终止、URL重写等高级功能。
2. 学习Kubernetes资源管理方式

a. kubectl 命令行工具

  • 基本命令kubectl getkubectl describekubectl createkubectl applykubectl delete等。
  • 用法示例
  • 查看所有Pods:kubectl get pods
  • 查看Pod的详细信息:kubectl describe pod <pod-name>
  • 应用YAML配置文件创建资源:kubectl apply -f <file-name>.yaml

b. YAML 配置文件

  • 定义:YAML是一种数据序列化格式,Kubernetes资源通常通过YAML文件进行定义和配置。
  • 结构:包括apiVersion、kind、metadata(如name)、spec(规格说明)等字段。
3. 实践:部署一个简单的Web应用

步骤

  1. 编写YAML文件:定义一个Deployment和Service,用于部署一个简单的Web应用(如Nginx)。
  2. 应用YAML文件:使用kubectl apply -f <file-name>.yaml命令部署应用。
  3. 检查部署状态:使用kubectl get podskubectl get services命令查看Pods和Service的状态。
  4. 访问服务:如果使用了NodePort或LoadBalancer类型的Service,可以通过相应的端口或负载均衡器地址访问应用。如果是ClusterIP类型,则需要在集群内部访问。
4. 学习资源限制与配额管理

a. 资源限制

  • CPU和内存请求(Requests):Pod中每个容器可以指定所需的CPU和内存资源量,Kubernetes会尽量满足这些请求。
  • CPU和内存限制(Limits):Pod中每个容器也可以设置CPU和内存的最大使用量,超出限制时,容器可能会被杀死或限制性能。

b. 资源配额(Resource Quotas)

  • 定义:资源配额用于限制命名空间中可以创建的资源数量或资源使用的总量。
  • 用途:防止单个命名空间或用户消耗过多的集群资源,确保资源的合理分配和使用。
5. 总结

今天主要深入学习了Kubernetes的核心概念,包括Pods、Deployments、Services和Ingress,以及如何通过kubectl和YAML文件管理Kubernetes资源。同时,还实践了部署一个简单的Web应用,并学习了资源限制与配额管理的基础知识。这些知识点对于理解和使用Kubernetes至关重要,为后续的学习和实践打下了坚实的基础。