2023年6月30日发(作者:)
Kubernetes(4)deployment管理pod⽂章⽬录Kubernetes(4)deployment管理podkubernetes cluster由master和node组成master节点是kubernetes cluster的⼤脑,它同时也是⼀个 Server(/kube-apiserver):是kubernetes cluster的前端接⼝,各种客户端⼯具以及kubernetes其他组件可以通过它管理cluster的各种资源/kube-scheduler:负责决定将pod放在哪个node上运⾏/kube-controller-manager:负责管理cluster各种资源,保证资源处于预期状态/etcd:负责保存集群的配置信息和各种资源的状态信息,当数据发⽣变化的时候,etcd会快速通知kubernetes相关组件⽹络:pod要能够相互通信,kubernetes cluster必须部署pod⽹络,flannel是其中⼀个可选的⽅案node节点⽹络⼏乎所有的kubernetes组建本⾝也运⾏在pod⾥⾯[k8s@server1 ~]$ kubectl get pod --all-namespaces -o wide我们将通过实践深⼊学习kubernetes的各种特性,作为容器编排引擎,最重要也是最基本的功能当然是运⾏容器化应⽤kubernetes通过各种controller来管理pod的⽣命周期,为了满⾜不同的业务场景,kubernetes开发了多种,我们⾸先学习最常⽤的deploymentdeployment管理pod1.1运⾏deployment#
部署两个副本的 nginx-deployment
容器的image为nginx:1.7.9[k8s@server1 ~]$ kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create /nginx-deployment created#
通过kubectl get deployment命令查看nginx-deployment的状态,显⽰输出的两个副本正常运⾏[k8s@server1 ~]$ kubectl get deployment nginx-deployment
NAME READY UP-TO-DATE AVAILABLE AGEnginx-deployment 2/2 2 2 2m31s#
获取更详细的信息[k8s@server1 ~]$ kubectl describe #
重点看这⾥#
这⾥告诉我们创建了⼀个 replicaset(容器副本) nginx-deployment-748ff87d9d# Events是 deployment的⽇志,记录了replicaset的启动过程Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 3m24s deployment-controller Scaled up replica set nginx-deployment-748ff87d9d [k8s@server1 ~]$ kubectl get replicaset[k8s@server1 ~]$ kubectl get replicasetNAME DESIRED CURRENT READY AGEnginx-deployment-748ff87d9d 2 2 2 16m[k8s@server1 ~]$ kubectl describe replicaset nginx-deployment-748ff87d9dName: nginx-deployment-748ff87d9dNamespace: defaultSelector: pod-template-hash=748ff87d9d,run=nginx-deploymentLabels: pod-template-hash=748ff87d9d run=nginx-deploymentAnnotations: /desired-replicas: 2 /max-replicas: 3 /revision: 1#
指明replicaset是由Deployment/nginx-deployment创建的Controlled By: Deployment/nginx-deploymentReplicas: 2 current / 2 desiredPods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 FailedPod Template: Labels: pod-template-hash=748ff87d9d run=nginx-deployment Containers:
nginx-deployment: Image: nginx:1.7.9 Port:
两个副本处于running状态[k8s@server1 ~]$ kubectl get podNAME READY STATUS RESTARTS AGEnginx-deployment-748ff87d9d-25k5w 1/1 Running 0 17mnginx-deployment-748ff87d9d-bxc8r 1/1 Running 0 17m#
获取更详细的信息[k8s@server1 ~]$ kubectl get podsNAME READY STATUS RESTARTS AGEhttpd-app-5bc589d9f7-pns4q 1/1 Running 0 31mhttpd-app-5bc589d9f7-qdq4z 1/1 Running 0 31mnginx-deployment-748ff87d9d-25k5w 1/1 Running 0 17mnginx-deployment-748ff87d9d-bxc8r 1/1 Running 0 17m[k8s@server1 ~]$ kubectl describe pod nginx-deployment-748ff87d9d-25k5wName: nginx-deployment-748ff87d9d-25k5wNamespace: defaultPriority: 0Node: server3/172.25.0.3Start Time: Sat, 24 Aug 2019 14:52:14 +0800Labels: pod-template-hash=748ff87d9d run=nginx-deploymentAnnotations:
Ready True
ContainersReady True
PodScheduled True
Volumes: default-token-zt8dv: Type: Secret (a volume populated by a Secret) SecretName: default-token-zt8dv Optional: falseQoS Class: BestEffortNode-Selectors:
记录了pod的启动过程,如果操作失败(eg:image不存在),也可以在这⾥查到原因Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 20m default-scheduler Successfully assigned default/nginx-deployment-748ff87d9d-25k5w to server3 Normal Pulling 20m kubelet, server3 Pulling image "nginx:1.7.9" Normal Pulled 18m kubelet, server3 Successfully pulled image "nginx:1.7.9" Normal Created 18m kubelet, server3 Created container nginx-deployment Normal Started 18m kubelet, server3 Started container nginx-deployment"""总结⼀下这个过程1.⽤户通过kubectl创建ment创建aset创建pod"""命令vs配置⽂件#
删除之前的资源kubectl delete deployment nginx-deployment[k8s@server1 ~]$ kubectl get podNo resources found in default namespace.[k8s@server1 ~]$ kubectl get pod -o wideNo resources found.1.1.2命令vs配置⽂件Kubernetes⽀持两种创建资源的⽅式:(1)⽤kubectl命令直接创建,⽐如“kubectl run nginx-deployment--image=nginx:1.7.9--replicas=2”,在命令⾏中通过参数指定资源的属性(2)通过配置⽂件和kubectl apply创建。要完成前⾯同样的⼯作,可执⾏命令“kubectl apply -f ”#
注意不要加减空格(如正确的话:vim
打开⽂件
关键字是蓝⾊的)#
最近由于k8s
摒弃了apiVersion:extensions/v1beta1导致现在很多以前可以成功的操作⽽现在⽆法成功[k8s@server1 ~]$ cat
apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: nginx-deployment name: nginx-deploymentspec: replicas: 2 template: metadata: labels: app: web_server spec: containers: - name: nginx image: nginx:1.7.9修改排错apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 2 template: metadata: labels: app: web_server spec: containers: - name: nginx image: nginx:1.7.9[k8s@server1 ~]$ kubectl apply -f or: error validating "": error validating data: ValidationError(): missing required field "selector" in mentSpec; if you choose to ignore these errors, turn validation off with --validate=false[k8s@server1 ~]$ kubectl apply -f --validate=falseThe Deployment "nginx-deployment" is invalid:
* or: Required value* : Invalid value: map[string]string{"app":"web_server"}: `selector` does not match template `labels`[k8s@server1 ~]$ cat
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 2 selector: matchLabels: app: web_server template: metadata: labels: app: web_server spec: containers: - name: nginx image: nginx:1.7.9"""apiVersion是当前配置格式的版本kind是要创建的资源类型,这⾥是Deploymentmetadata是该资源的元数据,name是必需的元数据项spec部分是该Deployment的规格说明replicas指明副本数量,默认为1template定义Pod的模板,这是配置⽂件的重要部分metadata定义Pod的元数据,⾄少要定义⼀个label。label的key和value可以任意指定spec描述Pod的规格,此部分定义Pod中每⼀个容器的属性,name和image是必需的此是⼀个最简单的Deployment配置⽂件,后⾯我们学习Kubernetes各项功能时会逐步丰富这个⽂件"""[k8s@server1 ~]$ kubectl apply -f
ions/nginx-deployment created[k8s@server1 ~]$ kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGEnginx-deployment 2/2 2 2 2m8s[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-5d76d6897d-cwvj5 1/1 Running 0 2m24s 10.244.2.4 server3
要删除资源:执⾏kubectl delete deployment nginx-deployment(命令⾏⽅式 )或者kubectl delete -f 伸缩伸缩是指在线增加或减少Pod的副本数Deployment nginx-deployment初始是两个副本[k8s@server1 ~]$ kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGEnginx-deployment 2/2 2 2 2m8s[k8s@server1 ~]$ kubectl get pod -o wide #查看pods所在的运⾏节点NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-5d76d6897d-cwvj5 1/1 Running 0 2m24s 10.244.2.4 server3
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 5 template: metadata: labels: app: web_server spec: containers: - name: nginx image: nginx:1.7.9再次执⾏kubectl apply[k8s@server1 ~]$ kubectl apply -f
ions/nginx-deployment configured[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-5d76d6897d-ckj64 1/1 Running 0 11s 10.244.2.5 server3
三个新副本被创建并调度到server2和server3上"""出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点。如果希望将k8s-master也当作Node使⽤,可以执⾏如下命令kubectl taint node k8s-master /master-如果要恢复Master Only状态,执⾏如下命令:kubectl taint node k8s-master /master="":NoSchedul"""接下来修改配置⽂件,将副本数减少为3个,重新执⾏kubectl apply#
注意的是:关闭和启动是需要时间的[k8s@server1 ~]$ cat
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 3 template: metadata: labels: app: web_server spec: containers: - name: nginx image: nginx:1.7.9[k8s@server1 ~]$ kubectl apply -f
ions/nginx-deployment configured[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-5d76d6897d-ckj64 1/1 Running 0 2m39s 10.244.2.5 server3
下⾯的过程会漫长⼀些 #⼀定要等待⼀定的时间的[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-5d76d6897d-4mwqw 1/1 Running 0 2m57s 10.244.2.10 server3
再次注意:删除和创建是需要时间的#
⼀执⾏完就⽴马去看
可能结果不会很快展现的#
删除nginx-deployment[k8s@server1 ~]$ kubectl delete deployment nginx-deployment
ions "nginx-deployment" deleted[k8s@server1 ~]$ kubectl get pod -o wideNo resources found.⽤label控制Pod的位置RC与Pod的关联是通过Label来实现的。Label机制是Kubernetes中的⼀个重要设计,通过Label进⾏对象的弱关联,可以灵活地进⾏分类和选择默认配置下,Scheduler会将Pod调度到所有可⽤的Node。不过有些情况我们希望将Pod部署到指定的Node,⽐如将有⼤量磁盘I/O的Pod部署到配置了SSD的Node;或者Pod需要GPU,需要运⾏在配置了GPU的节点上Kubernetes是通过label来实现这个功能的label是key-value对,各种资源都可以设置label,灵活添加各种⾃定义属性⽐如执⾏如下命令标注k8s-node1是配置了SSD的节点⽐如执⾏如下命令标注k8s-node1是配置了SSD的节点[k8s@server1 ~]$ kubectl get nodeNAME STATUS ROLES AGE VERSIONserver1 Ready master 5h32m v1.15.3server2 Ready
然后通过kubectl get node --show-labels查看节点的label[k8s@server1 ~]$ kubectl get node --show-labelsNAME STATUS ROLES AGE VERSION LABELSserver1 Ready master 5h32m v1.15.3 /arch=amd64,/os=linux,/arch=amd64,/hostname=server1,/os=linux,/master=server2 Ready
在Pod模板的spec⾥通过nodeSelector指定将此Pod部署到具有label disktype=ssd的Node上[k8s@server1 ~]$ cat
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 6 selector: matchLabels: app: web_server template: metadata: labels: app: web_server spec: containers: - name: nginx image: nginx:1.7.9 nodeSelector: disktype: ssd#
部署Deployment并查看Pod的运⾏节点[k8s@server1 ~]$ kubectl apply -f
ions/nginx-deployment created[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-56bf7c59b8-4nvdm 1/1 Running 0 8s 10.244.1.12 server2
全部6个副本都运⾏在server2上,符合我们的预期#
要删除 label disktype,执⾏如下命令#
不过此时Pod并不会重新部署[k8s@server1 ~]$ kubectl label node server2 disktype-node/server2 labeled[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-56bf7c59b8-4nvdm 1/1 Running 0 15m 10.244.1.12 server2
除⾮在中删除nodeSelector设置,然后通过kubectl apply重新部署[k8s@server1 ~]$ cat
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 6 selector: matchLabels: app: web_server template: metadata: labels: app: web_server spec: containers: - name: nginx image: nginx:1.7.9#删除是需要⼀定的时间的[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-5b5dfcc76-66gpx 1/1 Running 0 3s 10.244.1.10 server3
ions/nginx-deployment configured[k8s@server1 ~]$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-deployment-5d76d6897d-7xxxh 1/1 Running 0 9s 10.244.1.16 server2
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688056673a72316.html
评论列表(0条)