本文主要记录Kubernetes的资源管理,包括资源配置,声明式管理。

Kubernetes提供了RESTful风格的API,它将各类组件均抽象为“资源”,并通过属性赋值完成实例化 。API主要由资源类型和控制器两部分组成,资源通常以json、yaml格式并写入集群的对象,控制器则在集群资源存储完成后自动创建并启动。

常用的K8s资源有

  • Pod
  • Deployment
  • Service
  • Ingress

资源分类

依据资源的主要功能作为分类标准,Kubernetes的API对象⼤体可分为

  • ⼯作负载 (Workload)

    • ReplicationController
    • ReplicaSet
    • Deploymen
    • StatefulSet
    • DaemonSet
    • Job
  • 发现和负载均衡 (Discovery&LB)

  • 配置和存储 (Config&Storage

  • 集群 (Cluster)

    • Namespace
    • Node
    • Role
    • ClusterRole
  • 元数据 (Metadata)

它们基本上都是围绕⼀个核⼼⽬的⽽设计:如何更好地运⾏和丰富Pod资源,从⽽为容器化应⽤提供更灵活、更完善的操作与管理组件。

资源配置

标准格式一般包括一级字段

  • kind
  • apiVersion
  • metadata (对象元数据)
  • spec(描述所期望的对象应该具有的状态)
  • status(字段在对象创建后由系统⾃⾏维护)

以一个nginx的pod.yaml为例


apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:1.7.9
      ports:
          - containerPort: 80
  • metadata:
    • name 当前的对象名称
    • labels: 当前对象的标签(键值对)
  • spec
    • containers,它的值是⼀个容器对象列表,⽀持嵌套创建⼀到 多个容器。

声明式对象配置

提供配置清单文件给k8s系统,并委托系统来跟踪活动对象的状态变动。管理操作的命令通过apply

  • 创建
$kubectl apply -f <directory>/
  • 更新
kubectl apply -f <directory>/
  • 删除
kubectl apply -f <directory>/ --prune -l your-label 

建议使用命令式的方法

kubectl delete -f  <filename>

实战声明式部署nginx

定义的deployment文件: nginx_dp.yaml


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

暴露服务,定义service文件nginx_svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: nginx-pod
  ports:
    - name: default
      protocol: TCP
      port: 80
      targetPort: 80

访问nginx,output

参考