kubernetes_k8s框架概念梳理

发布时间 2023-12-14 15:21:08作者: 辰令

k8s

k8s分为控制面(Control Plane,master)和数据面(即Node)。
  控制面是K8S的大脑,组件包含:
        etcd数据库,负责注册服务、保存k8s配置和所有的API对象等数据
        scheduler 负责监视pod的调度情况
        controller-manager 负责节点、任务、端点和账户的总体调度
        apiserver 对外提供操作接口,可以通过kubectl调用。
  数据面Node是具体部署app的虚拟机或宿主机,
     最核心的组件就是kubelet,负责启动node并管理container,
  	此外还有kube-proxy做k8s service的网络代理

pod的创建

1.一种是直接创建 Pod。
  使用 kubectl 直接创建 Pod	
     不依赖 kube-controller-manager 组件,并且在创建 Pod 时指定了 nodeName
2.一种是利用 Pod 控制器创建 Pod;  

K8s概念梳理

 如图所示


##关于pod的生命周期

k8s 的pod

pod的本质是容器的增强器[
docker 的最小单元 container
k8s 最小的操作单元-pod,pod是一个或者多个Container的集合
   Static Pod 静态pod 是由 kubelet 管理的只在特定node上存在的pod;静态pod总是由kubelet创建的
       常见的静态pod通常是kubeadm部署的
	        kube-controller-manager 
			kube-scheduler 
			kube-apiserver 这些pod
       创建静态 Pod 有两种方式:配置文件和 HTTP 两种方式
	      由--pod-manifest-path= or --manifest-url=参数指定的目录下定义的所有 pod 都会自动创建
		  静态pod文件	
		  配置文件就是放在特定目录下的标准的 JSON 或 YAML 格式的 pod 定义文件。
		   用kubelet --pod-manifest-path=<the directory>来启动kubelet进程

pod生命周期-lifecycle

Pod的生命周期:
	01.Pod hook:钩子函数
             PostStart:这个钩子在容器创建后立即执行
			     Exec - 用于执行一段特定的命令,不过要注意的是该命令消耗的资源会被计入容器。
                 HTTP - 对容器上的特定的端点执行HTTP请求。
			 PreStop:这个钩子在容器终止之前立即被调用
	02.	probe 探针	 
	    liveness probe(存活探针)
		readiness probe(可读性探针)来影响容器的生存周期。
              initialDelaySeconds	 periodSeconds	  timeoutSeconds
              successThreshold	  failureThreshold			  
eg01.:
spec:
  containers:
  - name: hook-demo1
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]

eg-02
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
		  
容器的生命周期:

pod

自动扩/缩容	 配合HPA(HorizontalPodAutoscaler)组件完成
滚动更新:配合deployment组件实现部署和升级策略

kind

 ###kind delete cluster --name=data
   ###kind get clusters/nodes/kubeconfig
   kind 提供了将 docker 镜像加载到集群每个 node 节点上的操作命令,加载镜像之后,集群的每个节点都会具备该镜像文件
Docker 
 环境隔离 指进程、文件系统、网络等内容的隔离,多维度的隔离让容器内部更像一个独立的空间,其基于操作系统 namespace 实现
 资源隔离 指容器对硬件资源的使用限制,包括cpu、内存、磁盘及网络带宽,该限制基于os的cgroup实现。

k8s

###配置
kubectl config view	
 
Deployment用于管理Pod、ReplicaSet,可实现滚动升级和回滚应用、扩容和缩容:滚动更新(rolling update)和重新创建(recreate)
    ReplicaSet 是Replication Controller升级版确保Pod以指定的副本个数运行。
	deployment 认为所有的pod都是一样的 不用考虑顺序的要求
Service提供一个统一固定入口,负责将前端请求转发给Pod
   服务可以看做是一组提供相同服务的Pod的对外访问接口,服务作用于哪些Pod通过标签选择器来定义
   
   K8s通过一个ServiceName+ClusterIP统一屏蔽服务发现和负载均衡,
      底层技术是在 DNS+Service Registry基础上发展演进出来。
	  K8s的服务发现和负载均衡是在客户端通过Kube-Proxy + iptables转发实现,
	    它对应用无侵入,且不穿透Proxy,没有额外性能损耗。
K8s服务发现机制,可以认为是现代微服务发现机制和传统Linux内核机制的优雅结合

基础概念

 Label是Kubernetes系统中的一个核心概念。
   Label以key/value键值对的形式附加到各种对象上,如Pod、Service、RC、Node等。
   Label定义了这些对象的可识别属性,用来对它们进行管理和选择。Label可以在创建时附加到对象上,也可以在对象创建后通过API进行管理

参考

 https://github.com/karmada-io
 https://karmada.io/zh/docs/ 
https://blog.csdn.net/qq_45808700/article/details/132714651