k8s 中Pod,Deployment,ReplicaSet,Service关联、关系分析

# 分析

pod
首先,我们先从最小的调度单位pod开始。
我的k8s集群中目前有一个pod,它的name为admin-mysql-1d29997-5db458497c-h6rrs

[[email protected] ~]# kubectl get pod admin-mysql-1d29997-5db458497c-h6rrs
NAME                                   READY   STATUS    RESTARTS   AGE
admin-mysql-1d29997-5db458497c-h6rrs   1/1     Running   0          5d23h

查看一下pod的详细内容:

[[email protected] ~]# kubectl describe pod admin-mysql-1d29997-5db458497c-h6rrs
Name:               admin-mysql-1d29997-5db458497c-h6rrs
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               k8s-node1/192.168.0.247
Start Time:         Fri, 01 Nov 2019 10:57:47 +0800
Labels:             name=mysql
                    pod-template-hash=5db458497c
Annotations:        <none>
Status:             Running
IP:                 10.244.1.72
Controlled By:      ReplicaSet/admin-mysql-1d29997-5db458497c
Containers:
  mysql57-container:
    Container ID:   docker://7e68cae8d4e9840ed908965252ae7aff8281ca81954ab0b5d58e053f5371bb5d
    Image:          mysql57:5.7
    Image ID:       docker://sha256:f6509bac49801f48628167728aba66d64533aaa7d384e03b75a8fe4e6c0f6599
    Port:           3306/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Fri, 01 Nov 2019 10:57:48 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      MYSQL_ROOT_PASSWORD:  welcome1
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-9rfpv (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-9rfpv:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-9rfpv
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>
[[email protected] ~]# 

在这里能看到吗,pod是被一个名字为admin-mysql-1d29997-5db458497c的ReplicaSet管理的,所以我们认为,RS是比Pod高一级别的专门用来管理pod的组件。一个RS会管理一批pod。

Controlled By: ReplicaSet/admin-mysql-1d29997-5db458497c

ReplicateSet(rs)

接下来,我们就看看这个RS的详细情况

[[email protected] ~]# kubectl describe rs admin-mysql-1d29997-5db458497c
Name:           admin-mysql-1d29997-5db458497c
Namespace:      default
Selector:       name=mysql,pod-template-hash=5db458497c
Labels:         name=mysql
                pod-template-hash=5db458497c
Annotations:    deployment.kubernetes.io/desired-replicas: 1
                deployment.kubernetes.io/max-replicas: 2
                deployment.kubernetes.io/revision: 1
Controlled By:  Deployment/admin-mysql-1d29997
Replicas:       1 current / 1 desired
Pods Status:    1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  name=mysql
           pod-template-hash=5db458497c
  Containers:
   mysql57-container:
    Image:      mysql57:5.7
    Port:       3306/TCP
    Host Port:  0/TCP
    Environment:
      MYSQL_ROOT_PASSWORD:  welcome1
    Mounts:                 <none>
  Volumes:                  <none>
Events:                     <none>
[[email protected] ~]# 

抓住关键信息
Controlled By: Deployment/admin-mysql-1d29997

这个RS被名字为admin-mysql-1d29997的Deployment控制,这样看,Deployment是比RS高一级别用于管理RS的组件。

在RS级别上发生的事件,均是对pod的操作,创建pod,删除pod

Deployment
接下来,我们来看看Delpoyment

[[email protected] ~]# kubectl describe deploy admin-mysql-1d29997
Name:                   admin-mysql-1d29997
Namespace:              default
CreationTimestamp:      Fri, 01 Nov 2019 10:57:46 +0800
Labels:                 name=mysql
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               name=mysql
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  name=mysql
  Containers:
   mysql57-container:
    Image:      mysql57:5.7
    Port:       3306/TCP
    Host Port:  0/TCP
    Environment:
      MYSQL_ROOT_PASSWORD:  welcome1
    Mounts:                 <none>
  Volumes:                  <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   admin-mysql-1d29997-5db458497c (1/1 replicas created)
Events:          <none>
[[email protected] ~]# 

可以看出,在deployment级别上,不再受其他组件的控制,而他的状态的转变是作为API被调用而产生的。我们看到,在deployment级别上发生的事件一般是创建服务、滚动升级一个服务,或者是操作RS伸缩Pod集群。

service
最后,到这里也很明白量,service其实是在这一整套基础之上提供给外部的稳定的服务。

原文地址:https://blog.51cto.com/1345992/2448398

时间: 2024-07-31 10:57:02

k8s 中Pod,Deployment,ReplicaSet,Service关联、关系分析的相关文章

k8s中pod文件的定义格式

# yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metadata: #必选,元数据 name: string #必选,Pod名称 namespace: string #必选,Pod所属的命名空间 labels: #自定义标签 - name: string #自定义标签名字 annotations: #自定义注释列表 - name: string spec: #必选,Pod中容器的详细定义 containers

K8S中Pod节点状态ContainerCreating原因排查

创建好一个pod之后,STATUS的状态一直是ContainerCreating,然后查看这个pod的详细信息.报错: 网上查看了解决方法: 可以看到是网络问题. 原因是node之前反复添加过,添加之前需要清除下网络 node上执行: # kubeadm reset # systemctl stop kubelet # systemctl stop docker # rm -rf /var/lib/cni/ /var/lib/kubelet/* /etc/cni/ # ifconfig cni0

PHP中array_map与array_column之间的关系分析

array_map()与array_column()用法如下: array_map();将回调函数作用到给定数组的单元上array_column();快速实现:将二维数组转为一维数组 array_column()函数格式为: array array_column ( array $input , mixed $column_key [, mixed $index_key ] ); 返回input数组中值为column_key的列; 如果指定了可选参数index_key,返回的数组中 对应键 为i

访问k8s内部pod service网络

kafa部署在k8s中,并且使用statefulset 方式部署,应用pod连接kafka 使用  kafka-0.kafka-hs.sy-platform-demo.svc.cluster.local.:9093, 如果k8s 外部开发测试,无法连接,所以需要外部网络与pod service网络打通 #kafka注册到zk中[zk: localhost:2181(CONNECTED) 5] get /brokers/ids/0 {"jmx_port":-1,"timesta

OSGI中的service依赖关系管理

众所周知,对于高动态高可扩展的应用,OSGI是一个非常好的平台.但是,也因此增加了复杂性,开发中对service的依赖变得复杂.这也是service的关系管理成为OSGI中一个非常重要的部分,我们来看看OSGI中service依赖关系管理的方式.篇幅原因,只关注发展历程,不具体介绍每个方式的详细实现细节. 概括的说,目前在OSGI中主要有以下几种service依赖关系管理的方法: 1. Service listener 2. Service binder 3. Dependency Manage

在双向多对一关联关系中如果由两端维护关联的关系会出问题

在双向多对一关联关系中如果由两端维护关联的关系会出问题. 举例: Clazz 为一端,Student为多端.多端的inverse 属性值为"false", 也就是说此时关联关系由两端维护.那么在保存的时候,就会出现一个问题:多端的外键列的所有值总是等于最新保存的一端的主键.

k8s的pod

一.Pod的分类 自主式Pod : 控制器管理的Pod:Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例.每个Pod都有一个特殊的被称为“根容器”的Pause容器. Pod与controllers的关系 • controllers:在集群上管理和运行容器的对象 • 通过label-selector相关联 • Pod通过控制器实现应用的运维,如伸缩,升级等 二.Pod容器分类 • Infrastructure Container:基础容器 • 维护整个Pod网络空

k8s中helm安装部署,升级和回滚(chart,helm,tiller,StorageClass)

一.Helm介绍 helm是基于kubernetes 的包管理器.它之于 kubernetes 就如 yum 之于 centos,pip 之于 python,npm 之于 javascript 那 helm 的引入对于管理集群有哪些帮助呢? 更方便地部署基础设施,如 gitlab,postgres,prometheus,grafana 等 更方便地部署自己的应用,为公司内部的项目配置 Chart,使用 helm 结合 CI,在 k8s 中部署应用一行命令般简单 1.Helm用途 Helm把Kub

k8s的Pod状态和生命周期管理

Pod状态和生命周期管理 一.什么是Pod? 二.Pod中如何管理多个容器? 三.使用Pod 四.Pod的持久性和终止 五.Pause容器 六.init容器 七.Pod的生命周期 (1)Pod phase(Pod的相位) (2)Pod的创建过程 (3)Pod的状态 (4)Pod存活性探测 (5)livenessProbe和readinessProbe使用场景 (6)Pod的重启策略 (7)Pod的生命 (8)livenessProbe解析 一.什么是Pod? Pod是kubernetes中你可以