searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于Pod控制器Deployment创建 Pod

2023-09-20 01:21:49
12
0

一、Deployment创建 Pod的原理

  1. 使用kubectl通过kube-apiserver发送部署请求( 命令如下:kubectl apply-f deployment.yaml)

  2. kube-apiserver将Deployment资源持久化到etcd

  3. Deployment controller监听到创建了一个新的Deployment 资源后,将其从队列中拉出,根据deployment的描述创建一个ReplicaSet资源,并持久化回etcd

  4. 同时,当replicaset controller监听到创建了一个新的replicaset资源,将其从队列中拉出,根据描述创建pod资源

  5. scheduler监测发现新的pod资源,根据调度规则将pod绑定到合适的Node节点,更改pod资源中的nodeName字段后写入 etcd 中

  6. kubelet每隔 20s(可以自定义)向kube-apiserver通过NodeName 获取自身Node上所要运行的pod清单

  7. 通过容器运行时(譬如Docker)启动pod中的容器

 

二、创建Deployment的yaml文件

      特别强调:该yaml文件未指定命名空间,创建的pod默认在default命名空间

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploytest
spec:
  replicas: 1 #指定要运行的 Pod 副本数量为1,可更改
  selector:
    matchLabels:
      app: nginx-deploytest
  template:
    metadata:
      labels:
        app: nginx-deploytest
    spec:
      containers:
      - name: nginxtest
        image: nginx:1.17.1

 

三、具体操作

[root@master ~]# touch nginx-deploytest.yaml
[root@master ~]# vi nginx-deploytest.yaml 
You have new mail in /var/spool/mail/root

[root@master ~]# kubectl apply -f nginx-deploytest.yaml 
deployment.apps/nginx-deploytest created

#查询一下当前namespace下的Pod控制器
[root@master ~]# kubectl get deploy -n default
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploytest   1/1     1            1           23h

#修改资源
[root@master ~]# kubectl edit deployment nginx-deploytest 
将以下字段spec.replicas修改为2,该参数是设定创建的pod的数目
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx-deploytest

# 查看Pod,且以下命令可以查看到pod所在node节点
[root@master ~]# kubectl get pods -owide
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deploytest-585f5788cb-n54qt   1/1     Running   0          29h
nginx-deploytest-585f5788cb-wxwwp   1/1     Running   0          2d22h

#查看当前namespace<default>下的Pods
[root@master ~]# kubectl get pods -n default
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deploytest-585f5788cb-n54qt   1/1     Running   0          30h
nginx-deploytest-585f5788cb-wxwwp   1/1     Running   0          2d22h

#删除pod节点:nginx-deploytest-585f5788cb-wxwwp
[root@master ~]# kubectl delete pod nginx-deploytest-585f5788cb-wxwwp -n default
pod "nginx-deploytest-585f5788cb-wxwwp" deleted
You have new mail in /var/spool/mail/root
# 再次查看pod节点,发现集群重新创建了一个pod
[root@master ~]# kubectl get pods -n default
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deploytest-585f5788cb-2sqws   1/1     Running   0          6s
nginx-deploytest-585f5788cb-n54qt   1/1     Running   0          30h

 

四、总结

      采用pod控制器创建pod,删除pod后,pod控制器仍然会重新创建一个pod。 故而,这也是K8S集群使用pod控制器创建pod的重要原因。

 

0条评论
作者已关闭评论
小北
3文章数
0粉丝数
小北
3 文章 | 0 粉丝
小北
3文章数
0粉丝数
小北
3 文章 | 0 粉丝
原创

基于Pod控制器Deployment创建 Pod

2023-09-20 01:21:49
12
0

一、Deployment创建 Pod的原理

  1. 使用kubectl通过kube-apiserver发送部署请求( 命令如下:kubectl apply-f deployment.yaml)

  2. kube-apiserver将Deployment资源持久化到etcd

  3. Deployment controller监听到创建了一个新的Deployment 资源后,将其从队列中拉出,根据deployment的描述创建一个ReplicaSet资源,并持久化回etcd

  4. 同时,当replicaset controller监听到创建了一个新的replicaset资源,将其从队列中拉出,根据描述创建pod资源

  5. scheduler监测发现新的pod资源,根据调度规则将pod绑定到合适的Node节点,更改pod资源中的nodeName字段后写入 etcd 中

  6. kubelet每隔 20s(可以自定义)向kube-apiserver通过NodeName 获取自身Node上所要运行的pod清单

  7. 通过容器运行时(譬如Docker)启动pod中的容器

 

二、创建Deployment的yaml文件

      特别强调:该yaml文件未指定命名空间,创建的pod默认在default命名空间

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploytest
spec:
  replicas: 1 #指定要运行的 Pod 副本数量为1,可更改
  selector:
    matchLabels:
      app: nginx-deploytest
  template:
    metadata:
      labels:
        app: nginx-deploytest
    spec:
      containers:
      - name: nginxtest
        image: nginx:1.17.1

 

三、具体操作

[root@master ~]# touch nginx-deploytest.yaml
[root@master ~]# vi nginx-deploytest.yaml 
You have new mail in /var/spool/mail/root

[root@master ~]# kubectl apply -f nginx-deploytest.yaml 
deployment.apps/nginx-deploytest created

#查询一下当前namespace下的Pod控制器
[root@master ~]# kubectl get deploy -n default
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploytest   1/1     1            1           23h

#修改资源
[root@master ~]# kubectl edit deployment nginx-deploytest 
将以下字段spec.replicas修改为2,该参数是设定创建的pod的数目
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx-deploytest

# 查看Pod,且以下命令可以查看到pod所在node节点
[root@master ~]# kubectl get pods -owide
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deploytest-585f5788cb-n54qt   1/1     Running   0          29h
nginx-deploytest-585f5788cb-wxwwp   1/1     Running   0          2d22h

#查看当前namespace<default>下的Pods
[root@master ~]# kubectl get pods -n default
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deploytest-585f5788cb-n54qt   1/1     Running   0          30h
nginx-deploytest-585f5788cb-wxwwp   1/1     Running   0          2d22h

#删除pod节点:nginx-deploytest-585f5788cb-wxwwp
[root@master ~]# kubectl delete pod nginx-deploytest-585f5788cb-wxwwp -n default
pod "nginx-deploytest-585f5788cb-wxwwp" deleted
You have new mail in /var/spool/mail/root
# 再次查看pod节点,发现集群重新创建了一个pod
[root@master ~]# kubectl get pods -n default
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deploytest-585f5788cb-2sqws   1/1     Running   0          6s
nginx-deploytest-585f5788cb-n54qt   1/1     Running   0          30h

 

四、总结

      采用pod控制器创建pod,删除pod后,pod控制器仍然会重新创建一个pod。 故而,这也是K8S集群使用pod控制器创建pod的重要原因。

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0