Kubernetes系统组件及运行逻辑回顾与扩展01.md

回顾

kubernetes概念:

容器编排系统:

​ 以应用为中心,

​ 构建其他平台的平台,

​ 声明式API,终态声明

​ 控制器模式,支撑声明式API得以落地

系统组件

​ 控制平面:

​ controller Manager:打包在一起的很多controller,其中有seivces 、 node、等控制器,这些就是API server里的声明式的效果支撑。 # 好比一个个专业模块的运维工程师。

​ API Server,API 声明的有pod,就应该有pod controller,注意pod controller不在controller Manager中,而是在么个节点之上叫kubelet。

​ scheduler,调度的

​ etcd,API Server依赖的组件

​ Cloud Manger,很多时候用不到它,如果部署到云端,就用得到这个组件来调用云服务的API。比如按需创建ECS,把其配置成node,加入到集群,扩展集群。

​ 数据平面:

​ Kubelet,其实就是在每个node上工作的pod调度器,当scheduler调度器决定把某个pod调度到某个node后,那个node就得把那个节点得定义--终态声明读取过来,在当前节点之上,通过调用docker或者containerd或cri创建容器,同时调用cni设定网络环境,调用csi设定存储--这个不是必须得。 # kubelet可以理解为kubernetes集群的代理,每各节点上都有这么一各agent来解决与pod相关的所有具体事务。

​ CRI :

​ containerd

​ Docker

​ docker-shim 已废弃

​ cri-dockerd

​ CRI-O

​ kube proxy

​ 附件

编排运行一个服务端应用--非作业(job)类:

工作负责控制器编排运行pod

​ depolyment,编排无状态应用的

​ statefulSet,有状态应用

​ DaemonSet,系统应用

​ 我们要选择一个控制器来编排pod,而控制器怎么知道哪些pod和自己相关👇,通过label selector 标签选择器。 3个重要的属性: replicas--运行副本数量、 labelselector--标签选择器、 template--pod模板。

deployment好比运维工程师,能够完成应用生命周期里的功能,部署、卸载、更新。

service

pod是动态的,直接访问不显示,前端就需要一个LB,也就是service。

①服务发现,一个depolyment或statefaulSet编排之下的 服务端的数量--pod有哪些,一样是通过label selector 发现的

②负载均衡,服务发现完成后,就可以将这些发现出来的pod定义成一个服务集群LB Cluster。这个LB的实现就是Iptables /ipvs规则。这些规则是怎么实现的,在哪些节点上实现--对应每一个services在集群中的任何一个node上都会生产相应的iptables/ipvs规则,因为这个LB是client端负载均衡。

所以要编排一个服务端应用,一般要做两个操作:

①定义工作负载型控制器资源--来编排运行这些pods。

②定义service资源--来发现这组pods把他定义成服务,并且还能为其作LB。

③然后在每个node上面是如何把service定义成iptable/ipvs规则的,如果这些service删了这些规则也要自动删掉,那就是kubeproxy来实现的。

④每当用户给API SERVER创建一个service,kube proxy是API SERVER的client端,就能读到那个sevice定义或变动,然后将其转成当前node的iptabes/ipvs的规则。

# calico 其实就是daemonset和deployment来自动创建的。

root@k8s-master01:~# kubectl get pods -n calico-system -o wide
NAME                                     READY   STATUS    RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES
calico-apiserver-6c76dfc8c9-dztlw        1/1     Running   0          6d      10.244.32.133    k8s-master01   <none>           <none>
calico-apiserver-6c76dfc8c9-pbdbq        1/1     Running   0          6d      10.244.32.136    k8s-master01   <none>           <none>
calico-kube-controllers-ddc6d7f8-4svwq   1/1     Running   0          6d      10.244.32.134    k8s-master01   <none>           <none>
calico-node-484wh                        1/1     Running   0          6d      192.168.39.31    k8s-master01   <none>           <none>
calico-node-4krc5                        1/1     Running   0          5d23h   192.168.39.32    k8s-master02   <none>           <none>
calico-node-8kpt2                        1/1     Running   0          5d22h   192.168.39.42    k8s-node02     <none>           <none>
calico-node-gbqqz                        1/1     Running   0          5d22h   192.168.39.43    k8s-node03     <none>           <none>
calico-node-tzn4w                        1/1     Running   0          5d22h   192.168.39.41    k8s-node01     <none>           <none>
calico-node-wxbks                        1/1     Running   0          5d23h   192.168.39.33    k8s-master03   <none>           <none>
calico-typha-77d67d9597-9mzns            1/1     Running   0          5d23h   192.168.39.32    k8s-master02   <none>           <none>
calico-typha-77d67d9597-lphtf            1/1     Running   0          5d22h   192.168.39.41    k8s-node01     <none>           <none>
calico-typha-77d67d9597-qc6cn            1/1     Running   0          6d      192.168.39.31    k8s-master01   <none>           <none>
csi-node-driver-bqjqn                    2/2     Running   0          6d      10.244.32.129    k8s-master01   <none>           <none>
csi-node-driver-k9m9v                    2/2     Running   0          5d22h   10.244.58.193    k8s-node02     <none>           <none>
csi-node-driver-kt2qj                    2/2     Running   0          5d23h   10.244.122.128   k8s-master02   <none>           <none>
csi-node-driver-lttb7                    2/2     Running   0          5d22h   10.244.85.193    k8s-node01     <none>           <none>
csi-node-driver-s6vsp                    2/2     Running   0          5d22h   10.244.135.129   k8s-node03     <none>           <none>
csi-node-driver-sz56f                    2/2     Running   0          5d23h   10.244.195.1     k8s-master03   <none>           <none>
goldmane-6885dcb7d-v5sz6                 1/1     Running   0          6d      10.244.32.135    k8s-master01   <none>           <none>
whisker-cb8f7dc8-l4ctr                   2/2     Running   0          6d      10.244.32.132    k8s-master01   <none>           <none>
root@k8s-master01:~#
root@k8s-master01:~# kubectl get daemonset  -n calico-system
NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
calico-node       6         6         6       6            6           kubernetes.io/os=linux   6d
csi-node-driver   6         6         6       6            6           kubernetes.io/os=linux   6d
root@k8s-master01:~# kubectl get deployment  -n calico-system
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
calico-apiserver          2/2     2            2           6d
calico-kube-controllers   1/1     1            1           6d
calico-typha              3/3     3            3           6d
goldmane                  1/1     1            1           6d
whisker                   1/1     1            1           6d
root@k8s-master01:~#
# nginx-demo其实的deployment创建的

root@k8s-master01:~# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
backend-79f8849978-z2q4p      1/1     Running   0          4d4h
nginx-c9fcd5b48-s6lj5         1/1     Running   0          25h
nginx-demo-6dbf7cbd6f-4qztw   1/1     Running   0          4d21h
nginx-demo-6dbf7cbd6f-66d94   1/1     Running   0          4d21h
nginx-demo-6dbf7cbd6f-v8jsv   1/1     Running   0          4d21h
whoami-7fd8895794-6szhw       1/1     Running   0          4d
whoami-7fd8895794-dhk6k       1/1     Running   0          4d
root@k8s-master01:~#
root@k8s-master01:~# kubectl get deployment nginx-demo
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
nginx-demo   3/3     3            3           4d21h
root@k8s-master01:~#
安全性

.kube/config文件相当重要,谁拿到了,谁就可以使用kubectl调用API SERVER

API资源规范

image-20260527091340436


root@k8s-master02:~# kubectl get deployment
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
backend      1/1     1            1           4d21h
nginx        1/1     1            1           42h
nginx-demo   3/3     3            3           5d14h
whoami       2/2     2            2           4d17h
root@k8s-master02:~#
root@k8s-master02:~# kubectl get deployment nginx-demo -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2026-05-21T10:15:52Z"
  generation: 1
  labels:
    app: nginx-demo
  name: nginx-demo
  namespace: default
  resourceVersion: "284262"
  uid: 2c7cd284-04a9-4d57-9fb3-8c9397e817a4
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx-demo
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: nginx-demo
    spec:
      containers:
      - image: nginx:alpine
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 3
  conditions:
  - lastTransitionTime: "2026-05-21T10:27:13Z"
    lastUpdateTime: "2026-05-21T10:27:13Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2026-05-21T10:15:52Z"
    lastUpdateTime: "2026-05-21T10:27:13Z"
    message: ReplicaSet "nginx-demo-6dbf7cbd6f" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 1
  readyReplicas: 3
  replicas: 3
  terminatingReplicas: 0
  updatedReplicas: 3

status是当前状态,spec是规划定义的目标,当两者不一致就会同步,这里有一个自动巡检校准机制。

有些资源是没有spec和status,比如namespace。

K8S是以应用为中心的容器编排平台,

image-20260527091604392

以POD为中心,

volume,提供持久化存储的,如conf文件

DaemonSet StatefulSet提供编排功能的

ingress service提供服务发现、LB的

horizontal vertical 实现弹性扩缩容的,水平、垂直扩缩容

只需声明一个应用要多少资源,剩下的会自动挑选服务器完成部署。

Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2026-05-27 09:23:02

results matching ""

    No results matching ""