【5】K8S_Deployment

news/2025/2/19 11:08:31/

目录

1、Deployment作用

2、deployment的冗余能力 

3、deployment的多副本部署

4、deployment的扩缩容

5、deployment的自愈能力

6、滚动更新

7、版本回退


1、Deployment作用

控制Pod,使Pod拥有多副本,自愈,扩缩容等能力

2、deployment的冗余能力 

创建一个deployment的pod用delete删除不了,下面案例两种创建pod的不通 

[root@master ~]# kubectl run nginx --image=nginx
pod/nginx created
[root@master ~]# kubectl create deployment myginx01 --image=nginx
deployment.apps/myginx01 created[root@master ~]# kubectl delete  pod nginx
pod "nginx" deleted[root@master ~]# kubectl delete pod myginx01-5c9d6dbf77-k75d5
pod "myginx01-5c9d6dbf77-k75d5" deleted
[root@master ~]# kubectl get pod 
NAME                        READY   STATUS    RESTARTS   AGE
myginx01-5c9d6dbf77-k8f8x   1/1     Running   0          2m45s

#也可以在开一个窗口看一下效果 

[root@master ~]# watch  -n 1  kubectl get pod 

 只有把delopment删除以后才可以删除pod

[root@master ~]# kubectl delete deploy myginx01
deployment.apps "myginx01" deleted
[root@master ~]# kubectl get pod
No resources found in default namespace.

3、deployment的多副本部署

案例走起:

[root@master ~]# kubectl create deploy mynginx --image=nginx --replicas=3
deployment.apps/mynginx created[root@master ~]# kubectl get pod -owide
NAME                       READY   STATUS    RESTARTS   AGE   IP                NODE     NOMINATED NODE   READINESS GATES
mynginx-5b686ccd46-4w2nm   1/1     Running   0          36s   192.168.196.146   node01   <none>           <none>
mynginx-5b686ccd46-cxtjn   1/1     Running   0          36s   192.168.196.144   node01   <none>           <none>
mynginx-5b686ccd46-j5xpq   1/1     Running   0          36s   192.168.196.145   node01   <none>           <none>
[root@master ~]# kubectl get deploy
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
mynginx   3/3     3            3           92s

也可以在bashboard上部署

 

用yaml部署

先创建一个yaml

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: my-depname: my-dep
spec:replicas: 3selector:matchLabels:app: my-deptemplate:metadata:labels:app: my-depspec:containers:- image: nginxname: nginx
[root@master ~]# kubectl apply -f pod.yaml 
deployment.apps/my-dep created
[root@master ~]# kubectl get deploy
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
my-dep    2/3     3            2           30s
mynginx   5/5     5            5           16m
[root@master ~]# kubectl get deploy
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
my-dep    3/3     3            3           35s
mynginx   5/5     5            5           16m
[root@master ~]# 

4、deployment的扩缩容

kubectl scale --replicas=5 deployment/my-dep

kubectl edit deploy my-dep

 案例走起:

[root@master ~]# kubectl get deploy
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   3/3     3            3           7m17s
[root@master ~]# kubectl scale deploy/my-dep --replicas=5
deployment.apps/my-dep scaled
[root@master ~]# kubectl get deploy
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   5/5     5            5           8m10s
[root@master ~]# kubectl scale deploy/my-dep --replicas=2
deployment.apps/my-dep scaled
[root@master ~]# kubectl get deploy
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/2     2            2           8m42s
[root@master ~]# kubectl edit deploy my-dep
deployment.apps/my-dep edited
[root@master ~]# kubectl get deploy
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/3     3            2           11m

5、deployment的自愈能力

案例走起:

在node01节点上停止一个容器看效果

[root@node01 ~]# docker ps |grep my-dep-5b7868d854-dgrt4
14744aac665a   nginx                                               "/docker-entrypoint.…"   13 minut8s_nginx_my-dep-5b7868d854-dgrt4_default_bc8be424-2226-44f3-8dc5-49b08d1ef3fe_0
96beef3e2dba   registry.aliyuncs.com/google_containers/pause:3.2   "/pause"                 13 minut8s_POD_my-dep-5b7868d854-dgrt4_default_bc8be424-2226-44f3-8dc5-49b08d1ef3fe_0
[root@node01 ~]# docker ps |grep my-dep-5b7868d854-dgrt4
14744aac665a   nginx                                               "/docker-entrypoint.…"   14 minutdgrt4_default_bc8be424-2226-44f3-8dc5-49b08d1ef3fe_0
96beef3e2dba   registry.aliyuncs.com/google_containers/pause:3.2   "/pause"                 14 minutrt4_default_bc8be424-2226-44f3-8dc5-49b08d1ef3fe_0
[root@node01 ~]# docker stop 14744aac665a
14744aac665a
[root@node01 ~]# 

 发现node01节点的容器重启了一次

[root@master ~]# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-5b7868d854-dgrt4   1/1     Running   1          16m
my-dep-5b7868d854-lq6mz   1/1     Running   0          27m
my-dep-5b7868d854-pgp9n   1/1     Running   0          27m

现在我们把node01服务器关机看效果 

[root@master ~]# kubectl get pod -w
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-5b7868d854-dgrt4   1/1     Running   1          20m
my-dep-5b7868d854-lq6mz   1/1     Running   0          31m
my-dep-5b7868d854-pgp9n   1/1     Running   0          31m
my-dep-5b7868d854-dgrt4   1/1     Terminating   1          25m
my-dep-5b7868d854-6qzt6   0/1     Pending       0          0s
my-dep-5b7868d854-6qzt6   0/1     Pending       0          0s
my-dep-5b7868d854-6qzt6   0/1     ContainerCreating   0          0s
my-dep-5b7868d854-6qzt6   0/1     ContainerCreating   0          1s
my-dep-5b7868d854-6qzt6   1/1     Running             0          2s
[root@master ~]# kubectl get pod -owide
NAME                      READY   STATUS        RESTARTS   AGE     IP                NODE     NOMINATED NODE   READINESS GATES
my-dep-5b7868d854-6qzt6   1/1     Running       0          2m18s   192.168.140.81    node02   <none>           <none>
my-dep-5b7868d854-dgrt4   1/1     Terminating   1          27m     192.168.196.154   node01   <none>           <none>
my-dep-5b7868d854-lq6mz   1/1     Running       0          38m     192.168.140.80    node02   <none>           <none>
my-dep-5b7868d854-pgp9n   1/1     Running       0          38m     192.168.140.79    node02   <none>           <none>

6、滚动更新

以yaml的方式查看pod

[root@master ~]# kubectl get deploy my-dep -o yaml
...spec:containers:- image: nginximagePullPolicy: Alwaysname: nginx
...

现在我们要变更镜像的版本

[root@master ~]# kubectl set image deploy/my-dep nginx=nginx:1.16.1  --record
deployment.apps/my-dep image updated

查看效果:

[root@master ~]# kubectl get pod -w
NAME                      READY   STATUS              RESTARTS   AGE
my-dep-5b7868d854-6qzt6   1/1     Running             0          10m
my-dep-5b7868d854-lq6mz   1/1     Running             0          46m
my-dep-5b7868d854-pgp9n   1/1     Running             0          46m
my-dep-6b48cbf4f9-x25jn   0/1     ContainerCreating   0          23s
my-dep-6b48cbf4f9-x25jn   1/1     Running             0          50s
my-dep-5b7868d854-6qzt6   1/1     Terminating         0          10m
my-dep-6b48cbf4f9-gfhnf   0/1     Pending             0          0s
my-dep-6b48cbf4f9-gfhnf   0/1     Pending             0          0s
my-dep-6b48cbf4f9-gfhnf   0/1     ContainerCreating   0          0s
my-dep-5b7868d854-6qzt6   1/1     Terminating         0          10m
my-dep-6b48cbf4f9-gfhnf   0/1     ContainerCreating   0          1s
my-dep-5b7868d854-6qzt6   0/1     Terminating         0          10m
my-dep-6b48cbf4f9-gfhnf   1/1     Running             0          2s
my-dep-5b7868d854-lq6mz   1/1     Terminating         0          46m
my-dep-6b48cbf4f9-ztzzw   0/1     Pending             0          0s
my-dep-6b48cbf4f9-ztzzw   0/1     Pending             0          0s
my-dep-6b48cbf4f9-ztzzw   0/1     ContainerCreating   0          0s
my-dep-5b7868d854-lq6mz   1/1     Terminating         0          46m
my-dep-6b48cbf4f9-ztzzw   0/1     ContainerCreating   0          1s
my-dep-5b7868d854-lq6mz   0/1     Terminating         0          46m
my-dep-5b7868d854-6qzt6   0/1     Terminating         0          10m
my-dep-5b7868d854-6qzt6   0/1     Terminating         0          10m
my-dep-5b7868d854-lq6mz   0/1     Terminating         0          46m
my-dep-5b7868d854-lq6mz   0/1     Terminating         0          46m
my-dep-6b48cbf4f9-ztzzw   1/1     Running             0          17s
my-dep-5b7868d854-pgp9n   1/1     Terminating         0          46m
my-dep-5b7868d854-pgp9n   1/1     Terminating         0          46m
my-dep-5b7868d854-pgp9n   0/1     Terminating         0          46m
my-dep-5b7868d854-pgp9n   0/1     Terminating         0          47m
my-dep-5b7868d854-pgp9n   0/1     Terminating         0          47m
[root@master ~]# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP                NODE     NOMINATED NODE   READINESS GATES
my-dep-6b48cbf4f9-gfhnf   1/1     Running   0          2m41s   192.168.196.158   node01   <none>           <none>
my-dep-6b48cbf4f9-x25jn   1/1     Running   0          3m31s   192.168.196.157   node01   <none>           <none>
my-dep-6b48cbf4f9-ztzzw   1/1     Running   0          2m39s   192.168.196.159   node01   <none>           <none>
[root@master ~]# 
[root@master ~]# kubectl get deploy -o yaml...spec:containers:- image: nginx:1.16.1imagePullPolicy: Alwaysname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: File

7、版本回退

查看历史命令

[root@master ~]# kubectl rollout history deployment/my-dep
deployment.apps/my-dep 
REVISION  CHANGE-CAUSE
1         <none>
2         kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record=true

设置回退到1的时候:

[root@master ~]# kubectl rollout undo deploy/my-dep --to-revision=1
deployment.apps/my-dep rolled back

参考一下镜像版本:

[root@master ~]# kubectl get deploy/my-dep -o yaml |grep image{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"my-dep"},"name":"my-dep","namespace":"default"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"my-dep"}},"template":{"metadata":{"labels":{"app":"my-dep"}},"spec":{"containers":[{"image":"nginx","name":"nginx"}]}}}}f:imagePullPolicy: {}f:image: {}- image: nginximagePullPolicy: Always

Kubernetes-核心概念-其他工作负载

Deployment: 无状态应用部署,比如微服务,提供多副本等功能

StatefulSet:有状态应用部署,比如redis,提供稳定的存储、网络等功能

DaemonSet:守护型应用部署,比如日志收集组件,在每个机器都运行一份

Job/CronJob:定时任务部署,比如垃圾清理组件,可以在指定时间运行


http://www.ppmy.cn/news/11900.html

相关文章

【算法数据结构初阶篇】:位运算

算法中很多情况下需要用到各种位运算的转换&#xff0c;比如>>右移、<<左移、&与等等&#xff0c;下面我们利用这些位运算来进行一个进制转换&#xff0c;将一个int整形&#xff08;32位&#xff09;十进制转二进制&#xff0c;以及其他的一些转换技巧。 一、十…

【SpringCloud10】OpenFeign服务接口调用

1.概述 1.1OpenFeign是什么 官网 Feign是一个声明式WebService客户端&#xff0c;使用Feign能让编写Web Service客户端更加简单。 它的使用方法是定义一个服务接口然后在上面添加注解&#xff0c;Feign也支持可拔插式的编码器和解码器&#xff0c;Spring Cloud对Feign进行了…

用详细实例说明和典型案例实现对分治法进行全面分析 | C++

第一篇 分治法 目录 第一篇 分治法 ●前言 ●一、分治法是什么&#xff1f; 1.简要介绍 2.生活实例 ●二、分治法的典型案例——硬币问题 1.具体问题 2.代码展示&#xff08;C&#xff09; 3.程序代码结果展示 ●总结 前言 简单的来说&#xff0c;算法就是用计算机程序代…

Docker学习笔记

容器本质上是一个线程&#xff0c;相当于从物理机中开辟了一个空间&#xff0c;专门给到某个程序使用 镜像的本质是一个软件源&#xff0c;这个软件源往往还带有它的环境变量、配置信息 docker是一个管理容器的平台工具 当运行容器时&#xff0c;使用的镜像如果在本地中不存…

PostgreSQL数据库FDW——Parquet S3 DefaultParquetReader类

S3RandomAccessFile S3RandomAccessFile类定义在parquet_s3_fdw.hpp&#xff0c;用于访问s3对象存储的类。其成员函数定义在parquet_s3_fdw.cpp文件中&#xff0c;S3RandomAccessFile构造函数用于初始化private成员(offset设置为0&#xff0c;isclosed设置为false)。 class S…

yolov5+车道线检测

目标检测与车道线检测在自动驾驶以及车辆定位中起着重要的辅助作用&#xff0c;是环境感知中不可缺少的一个部分。基于深度学习的车道线检测方法近年来也在不断的提升&#xff0c;比如论文&#xff1a;Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classi…

[ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

包体积优化 · 实战论 · 怎么做包体优化? 做好能晋升吗? 能涨多少钱?

“ 【小木箱成长营】包体积优化系列文章&#xff1a; 包体积优化 方法论 揭开包体积优化神秘面纱 包体积优化 工具论 初识包体积优化 BaguTree 包体积优化录播视频课 ”一、引言 Hello&#xff0c;我是小木箱&#xff0c;欢迎来到小木箱成长营系列教程&#xff0c;今天将分…