|NO.Z.00133|——————————|CloudNative|——|KuberNetes&资源调度.V03|——|deployment.v01|创建|
一、Deployment:
### --- Deployment概念:
~~~ 用于部署无状态的服务,这个最常用的控制器。
~~~ 一般用于管理维护企业内部无状态的微服务,
~~~ 比如configserver、zuul、springboot。
~~~ 他可以管理多个副本的Pod实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。
二、手动创建一个deployment
### --- 创建一个Deployment:手动创建
~~~ # 手动通过命令的方式创建一个deployment
[root@k8s-master01 ~]# kubectl create deployment nginx --image=nginx:1.15.2
deployment.apps/nginx created
~~~ # 查看创建的deployment
[root@k8s-master01 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 39s
~~~ # 导出deployment的配置文件
[root@k8s-master01 ~]# kubectl get deployment nginx -o yaml > nginx-deploy.yaml //到处这个yaml文件
[root@k8s-master01 ~]# ls
k8s nginx-deploy.yaml README
三、使用配置文件创建一个deployment
### --- 创建deployment的配置文件
~~~ # 通过文件去创建一个deployment
[root@k8s-master01 ~]# vim nginx-deploy.yaml
spec:
progressDeadlineSeconds: 600
replicas: 2 //副本数改为2
revisionHistoryLimit: 10
### --- 创建deployment并查看创建的pod
~~~ # 重新触发容器
[root@k8s-master01 ~]# kubectl replace -f nginx-deploy.yaml //通过文件去管理deployment
deployment.apps/nginx replaced
~~~ # 查看创建的pod
[root@k8s-master01 ~]# kubectl get po //因为我们没有去指定它的namespace,所以在default命名空间下创建的deployment
NAME READY STATUS RESTARTS AGE
nginx-66bbc9fdc5-7lgnx 1/1 Running 0 6m44s
nginx-66bbc9fdc5-l9dkp 1/1 Running 0 67s
### --- 使用edit管理创建的deployment
~~~ # 可以使用edit去管理它
[root@k8s-master01 ~]# kubectl edit deploy nginx // edit退出操作,按住shift键不放,按两下ZZ即可。
spec:
progressDeadlineSeconds: 600
replicas: 1 // 把它的副本改为1,会删除掉一个容器
~~~ # 查看副本数量是否更新为1
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-66bbc9fdc5-7lgnx 1/1 Running 0 8m21s
nginx-66bbc9fdc5-l9dkp 0/1 Terminating 0 2m44s //可以查看到有一个容器在执行Terminating
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-66bbc9fdc5-7lgnx 1/1 Running 0 9m7s //消失说明删除完成
四、deployment参数解析
### --- deployment参数解析
~~~ NAME: Deployment名称;这个deployment也是有namespace隔离的,同一个namespace下不能使用相同的deployment名称的。
~~~ READY:Pod的状态,已经Ready的个数;
~~~ UP-TO-DATE:已经达到期望状态的被更新的副本数
~~~ AVAILABLE:已经可以用的副本数
~~~ AGE:显示应用程序运行的时间
~~~ CONTAINERS:容器名称
~~~ IMAGES:容器的镜像
~~~ SELECTOR:管理的Pod的标签
[root@k8s-master01 ~]# kubectl get deploy -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx 2/2 2 2 10m nginx nginx:1.15.2 app=nginx
五、deployment.yaml文件说明:
### --- 查看创建的deployment配置文件
~~~ deployment配置文件说明
[root@k8s-master01 ~]# cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2020-09-19T02:41:11Z"
generation: 1
labels: //annotations的labels是deployment本身的labels,这个是匹配RS的
app: nginx
name: nginx
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 2 #副本数
revisionHistoryLimit: 10 # 历史记录保留的个数
selector:
matchLabels: //selector的labels,和上面annotations的labels的一定要写成一样的,不然就不能管理你的Pod;这个是匹配RS的这个Pod的,而且这两个参数在新版本的k8s中,一旦创建时不允许改的。
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
### --- pod对应label及参数说明
~~~ # 查看创建的nginx所在的label
[root@k8s-master01 ~]# kubectl get deploy --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
nginx 1/1 1 1 16m app=nginx
~~~ # 以下是pod的spec,是兼容上面podspec的,
spec:
containers:
- image: nginx:1.15.2
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
### --- deployment部署说明
~~~ # 部署完之后它会把这个Pod部署在哪个节点呢?
~~~ 可以看到是master01,并不是我们在这个master01创建了这个deployment,
~~~ 而是把这个pod创建在master01节点上
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-66bbc9fdc5-7lgnx 1/1 Running 0 142m 172.25.244.206 k8s-master01 <none> <none>
~~~ # deployment副本数量设置为2
spec:
progressDeadlineSeconds: 600
replicas: 2
~~~ # 查看pod创连接过
~~~ 可以看到他在master02节点创建了,这个创建是无所谓你是在哪个节点上面的,只要你有这个文件,
~~~ 只要有这个文件,你的kubectl在哪个位置都是可以的,只要和vip的端口地址是通的,
~~~ 他就可以去操作我们的集群,
~~~ 它创建完之后呢?会根据特定的算法最优的去选择部署在哪个节点上面。
[root@k8s-master01 ~]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-66bbc9fdc5-7lgnx 1/1 Running 0 145m 172.25.244.206 k8s-master01 <none> <none>
nginx-66bbc9fdc5-v6687 1/1 Running 0 23s 172.25.92.71 k8s-master02 <none>
[root@k8s-master01 ~]# ls ~/.kube/config
/root/.kube/config
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)