kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
    image.png

    Kubernetes 组件

    image.png

    kind :
    kubernetes 内置一组控制器,运行在 kube-controller-manager 内。
    Deployment 控制器和 Job 控制器(任务控制器)是 Kubernetes 内置控制器,

    期望状态(Desired state)。Spec 通过创建对象,本质上是在告知 kubernetes 系统,所需要的集群工作负载看起来是什么样子的。
    Spec 对象规约
    Status 状态

    1. apiVersion: apps/v1 # 创建该对象所使用的 kubernetes API 的版本
    2. kind: Deployment # 想要创建的对象类别
    3. metadata: # 帮助唯一性表示对象的一些数据,包括 name , UID 和 namespace
    4. name: nginx-deployment
    5. spec:
    6. selector:
    7. matchLabels:
    8. app: nginx
    9. replicas: 2 # tells deployment to run 2 pods matching the template
    10. template:
    11. metadata:
    12. labels:
    13. app: nginx
    14. spec:
    15. containers:
    16. - name: nginx
    17. image: nginx:1.14.2
    18. ports:
    19. - containerPort: 80

    Pod是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
    这组容器共享存储、网络、以及怎么样运行这些容器的声明。
    Pod 被设计成支持形成内聚服务单元的多个协作过程(形式为容器),它是相对临时性的,用后即抛的一次性实体。它不是进程,而是容器运行的环境。

    临时容器: 它们缺少对资源或执行的保证,并且用于不会自动重启, 因此不适用于构建应用程序。
    用于故障时,交互式故障排查。
    init 容器:应用容器运行前必须先运行完成的一个或多个初始化容器
    应用容器:用于运行部分工作负载的容器

    Deployments :负责描述 Deployment 中的目标状态,而 deployment 控制器,以受控制速率更改实际状态,使其变为期望状态。
    StatefulSets: 用来管理有状态应用的工作负载 API 对象,用来管理某 Pod 集合的部署和扩缩,并为这些 Pod 提供持久存储和持久标示符。StatefulSet 为它们的每个 Pod 维护一个有粘性的 ID,这些 Pod 是基于相同的规约来创建的,但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久的不变 ID。 稳定性,是这一个特点

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