KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(一)

①. 什么是k8s对象


①. k8s里面操作的资源实体,就是k8s的对象,可以使用yaml来声明对象。然后让k8s根据yaml的声明创建出这个对象(kubectl create/run /expose…)


②. 操作Kubernetes对象—无论是创建、修改,或者删除—需要使用Kubernetes API。比如,当使用kubectl命令行接口时,CLI 会执行必要的Kubernetes API调用


③. Kubernetes对象指的是Kubernetes系统的持久化实体,所有这些对象合起来,代表了你集群的实际情况。常规的应用里,我们把应用程序的数据存储在数据库中,Kubernetes将其数据以Kubernetes对象的形式通过api server存储在etcd中。(集群中所有的资源都是etc中,k8s只依赖一个储存就是etcd)。具体来说,这些数据(Kubernetes对象)描述了:


集群中运行了哪些容器化应用程序(以及在哪个节点上运行)


集群中对应用程序可用的资源(网络,存储等)


应用程序相关的策略定义,例如,重启策略、升级策略、容错策略


其他Kubernetes管理应用程序时所需要的信息


scheduler先计算应该去哪个节点部署


④. 对象的spec和status,每一个Kubernetes对象都包含了两个重要的字段:


spec必须由您来提供,描述了您对该对象所期望的目标状态


status只能由Kubernetes系统来修改,描述了该对象在Kubernetes系统中的实际状态


Kubernetes通过对应的 控制器,不断地使实际状态趋向于您期望的目标状态


# kubectl create deployment my-nginx --image=nginx
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2022-01-03T09:18:20Z"
  generation: 1
  labels:
    app: my-nginx
  managedFields:
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    manager: kubectl-create
    operation: Update
    time: "2022-01-03T09:18:20Z"
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    manager: kube-controller-manager
    operation: Update
    time: "2022-01-03T09:18:39Z"
  name: my-nginx
  namespace: default
  resourceVersion: "99511"
  uid: 270afb1b-f4df-4b10-b708-53313027a805
spec: # 期望状态
  progressDeadlineSeconds: 600
  replicas: 1 # 副本数量
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: my-nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-nginx
    spec:
      containers:
      - image: nginx # 使用这个镜像创建容器
        imagePullPolicy: Always
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status: # 当前状态
  availableReplicas: 1 # 当前集群可用的
  conditions:
  - lastTransitionTime: "2022-01-03T09:18:39Z"
    lastUpdateTime: "2022-01-03T09:18:39Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2022-01-03T09:18:20Z"
    lastUpdateTime: "2022-01-03T09:18:39Z"
    message: ReplicaSet "my-nginx-6b74b79f57" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 1
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1
#  最终一致
# etcd保存的创建资源期望的状态和最终这个资源的状态要是一致的;spec和status要最终一致
# 1. kubectl create deployment my-nginx --image=nginx
# 2. pi-server保存etcd,controller-manager最终解析数据,知道集群要my-nginx一份,保存到etcd
# 3. kubelet就做一件事情,spec状态和最终状态一致
while(true){ if(my-nginx.replicas != spec.replicas) { kubelet.startPod(); } }


上一篇:Centos7常用命令[日期时间]


下一篇:KUBERNETES04_下载策略、私有仓库下载、env、command、生命周期容器钩子、资源限制(二)