Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器

目录

  • 一. pod基本操作
    • 1.创建pod节点
    • 2.删除pod
    • 3.创建指定数量的pod
    • 4.暴露端口
    • 5.Pod扩容
    • 6.pod缩容
    • 7.更新pod镜像
    • 8.版本回滚
  • 二.资源清单
    • 1.生成模板
    • 2.自主式Pod资源清单
    • 3.设定监听端口
    • 4.使用清单锁定IP
    • 5.限制内存和CPU
    • 6.容器退出后不重启
    • 7.锁定pod节点
  • 三.Pod生命周期
    • 1.init初始化容器
    • 2.添加服务
  • 四.探针
    • 1.存活探针
    • 2.就绪探针
    • 3.添加标签将svc和pod联系
  • 五.控制器
    • 1.ReplicaSet–rs控制器
    • 2.deployments控制器
      • 2.1节点数增
      • 2.2 更改标签:
      • 2.3 版本更新
      • 2.4 版本回退
    • 3.DaemonSet控制器
    • 4.Job控制器

一. pod基本操作

首先确保k8s的部署成功!

kubectl get pod -n kube-system

都是running就代表成功/!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第1张图片

1.创建pod节点

运行镜像:myapp:v1,并查看节点信息!

kubectl run nginx --image=myapp:v1
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第2张图片我们可以查看pod信息,可以看到信息中表示创建成功!

kubectl describe pod nginx

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第3张图片

我们还可以查看pod 的附加信息!
可以看到比kubectl get pod 多了IP,NODE,NOMINATED NODE信息!

kubectl get pod -o wide

请添加图片描述

我们还可以在系统的目录下查看到分配的网络信息!

cd /var/run/flannel/
cat subnet.env

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第4张图片

当然在server3,4上都可以看到!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第5张图片
测试:
访问pod生成的ip地址,我们可以看到myapp:v1的信息!

curl 10.244.1.2

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第6张图片

2.删除pod

kubectl delete pod nginx
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第7张图片

3.创建指定数量的pod

创建两个后端的容器,并访问生成的ip地址

kubectl create deployment demo --image=myapp:v1 --replicas=2
kubectl get pod -o wide
curl 10.244.1.3

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第8张图片
查看标签,查看所有结点的信息
可以看到标签app=demo!!

kubectl get pod --show-labels
kubectl get all

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第9张图片
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第10张图片

若是删除pod节点中的任何一个,都会自动生成一个!如下图

kubectl get pod
kubectl delete pod demo-5b4fc8bb88-g8r58
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第11张图片

4.暴露端口

将指定端口80暴露,使得外部可以访问:

kubectl expose deployment demo --port=80 --target-port=80
kubectl get all

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第12张图片

可以看到生成了cluster ip如图的IP
访问这个IP,可以看到已经负载均衡了

curl 10.98.122.128/hostname.html

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第13张图片

可以查看svc节点信息.
后端节点Endpoints:必须能看到生成的IP地址才能访问成功!

kubectl describe svc demo

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第14张图片

但是我们kubectl get pod -o wide可以看到都是运行在server4上的!
我们将其中一个节点删掉,它会自动运行在server3上,如下图:

kubectl get pod -o wide
kubectl delete pod demo-5**********
kubectl get pod -o wide

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第15张图片

当然看svc节点信息,后端节点Endpoints的IP也会发生变化!

kubectl describe svc demo

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第16张图片
只要查看pod信息,节点信息都是running而且都是ready即表示成功!

kubectl get pod

请添加图片描述

5.Pod扩容

kubectl scale deployment demo --replicas=6 
kubectl get pod

我们可以看到现在的pod已经变成了6个节点!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第17张图片
查看svc节点信息,可以看到endpoints的IP地址也变为了6个!

kubectl describe svc demo

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第18张图片

当然生成的6个pod节点也都是可以访问实现负载均衡的!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第19张图片

6.pod缩容

kubectl scale  deployment demo --replicas=2
kubectl get pod
kubectl get pod -o wide

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第20张图片

7.更新pod镜像

我们刚才使用的镜像是myapp:v1,如果我们需要更新镜像为myapp:v2就可以如下操作:

kubectl set image deployment demo myapp=myapp:v2
kubectl get pod

我们可以看到kubectl get pod查看的时候,出现了terminationg状态,表示正在替换中,过一会就好了!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第21张图片

访问更新之后的IP

curl 10.244.1.7

请添加图片描述

更新后以前的rs不会消失,为了回滚更新!

kubectl get all

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第22张图片

我们可以查看版本迭代的历史信息:

kubectl rollout history deployment demo

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第23张图片

8.版本回滚

将版本返回第一个版本!

kubectl rollout undo deployment demo --to-revision=1
kubectl get pod -o wide

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第24张图片
测试:访问一下IP

curl 10.244.27

可以看到版本变回了v1
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第25张图片

我们查看rs信息,可以看到如下图
请添加图片描述

回滚之前是下图所示,说明版本更新和回退会在这两个rs中变化!请添加图片描述

二.资源清单

在我们的日常工作中,可能要重复简历或者对pod节点进行操作,如果一直使用命令行来实现的话是不高效的工作方法。
资源清单就好比shell脚本一样,会按照你的清单执行命令,相比较命令行更加方便,也易于修改。

1.生成模板

书写时候的查找方法,可以之直接通过explain一步一步查找参数内容用法

[root@server2 ~]# kubectl explain pod      ##查看pod所有参数,-required-带有required是必须存在的参数

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第26张图片

直接打开一个已经有的deployment,然后生成相应的yaml文件

[root@server2 ~]# kubectl run demo --image=myapp:v1
[root@server2 ~]# kubectl get pod
[root@server2 ~]# kubectl get pod demo
[root@server2 ~]# kubectl get pod demo -o yaml   ##生成一个yaml文件

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第27张图片

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第28张图片

2.自主式Pod资源清单

编辑清单,文件格式为.yaml
创建名为pod-example的pod,选取镜像为myapp:v1

cd
mkdir pod
cd pod/
vim pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:

  - name: myapp
    image: myapp:v1

请添加图片描述

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第29张图片
执行清单,并查看pod信息!

kubectl apply -f pod.yaml
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第30张图片

在sesrver1:
将busyboxplus镜像上传私有仓库:

docker tag busyboxplus:latest reg.westos.org/library/busyboxplus:latest
docker push reg.westos.org/library/busyboxplus:latest

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第31张图片
将刚才的pod.yaml删除

[root@server2 ~]# kubectl delete -f pod.yml 

请添加图片描述
使用资源清单创建一个pod节点,包含myapp容器和busyboxplus容器为其分配伪终端

cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    
  - name: busybox
    image: busyboxplus:latest
    tty: true
    stdin: true

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第32张图片
应用pod.yaml文件,并查看信息!

kubectl apply -f pod.yaml
kubectl get pod

pod-example中有两个容器处于READY状态。
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第33张图片
进入busybox终端,-c指定容器 -i打开输入端口 -t打开伪终端
终端内访问localhost

kubectl attach pod-example -c busybox -i -t 
ip addr
curl localhost

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第34张图片

退出后可继续进入,pod节点会重启。
ctrl+d退出终端,但是再次查看可以看到还是running状态

kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第35张图片

删除pod.yaml节点

kubectl delete -f pod.yaml

请添加图片描述

默认值,IfNotPresent:本地有则使用本地镜像,不拉取

vim pod.yaml
imagePullPolicy: IfNotPresent

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第36张图片

可以看到详细信息:直接创建,开启容器,没有拉取动作!

kubectl describe pod pod-example

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第37张图片

3.设定监听端口

再次删除,重新修改文件内容:

指定容器所在主机需要监听的端口号,设置了hostPort同一台主机无法启动该容器的相同副本,因为主机的端口号不能相同,只会写到iptables中

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1

    ports:
      - containerPort: 80
        hostPort: 80

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第38张图片

运行清单
可以看到分配到了server3上,访问server3

kubectl apply -f pod.yaml
kubectl get pod -o wide

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第39张图片

在server3上查看端口netstat -antlp没有80!
但是在路由策略里面有80!!

netstat -antlp
iptables -t nat -nL |grep :80

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第40张图片

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第41张图片

4.使用清单锁定IP

将前面的pod删掉修改文件:
kubectl delete pod.yaml
锁定为与主机共用ip:
hostNetwork: true

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  hostNetwork: true #直接锁定为与主机共用ip
  containers:
  - name: myapp
    image: myapp:v1

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第42张图片
查看podip,发现已经变为了server3的IP!!

kubectl apply -f pod.yaml
kubectl get pod -o wide #查看podip

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第43张图片

到server3上查看端口80:
请添加图片描述

5.限制内存和CPU

删除pod节点修改文件:
限制内存和cpu使用量,requests为最低限制,limit为最高限制

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  #hostNetwork: true
  #nodeName: server4
  #imagePullSecrets: 
  containers:
  - name: myapp
    image: myapp:v1
    imagePullPolicy: IfNotPresent 

    resources:
      requests:
        cpu: "100m"
        memory: "50Mi"
      limits:
        cpu: "200m"
        memory: "100Mi"

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第44张图片

kubectl apply -f pod.yaml
kubectl describe pod pod-example

请添加图片描述

我们可以看到限制cpu的信息!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第45张图片

6.容器退出后不重启

前面我们说了,容器推出后,会自动重新!
我们现在加上参数–restart=Never实现退出后不重启

kubectl run -it busybox --image=busyboxplus --restart=Never
ip addr
退出
kubectl get pod

使用后退出,该节点显示已完成,且不会自动重启
状态处于0/1!!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第46张图片

不加参数就会重新启动容器:
删除刚才的容器busybox!重新创建容器,不加参数!

kubectl delete pod busybox
kubectl run -i -t busybox --image=busyboxplus
ip addr

kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第47张图片

重启成功!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第48张图片

删除busybox容器,删除pod节点
查看标签!

kubectl delete pod busbox
kubectl delete -f pod,yaml
kubectl get node --show-labels

请添加图片描述

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第49张图片

7.锁定pod节点

锁定pod节点在server4上!

 #hostNetwork: true 
nodeName: server4 #锁定pod节点

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第50张图片

kubectl apply -f pod.yaml
kubectl get pod -o wide

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第51张图片

可以看到在节点server4上!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第52张图片

若是指定下载的仓库不是公开的就会报错!
我们先删除pod节点,重新修改文件:

image: westos/game2048:latest

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第53张图片

在仓库中将westos设置为不公开!!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第54张图片

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第55张图片

接着执行清单

kubectl apply -f pod.yaml
kubectl describe pod pod-example

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第56张图片

都是报错信息!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第57张图片

删除pod节点

请添加图片描述

三.Pod生命周期

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第58张图片

Pod中可以包含多个容器。
在容器环境初始化完成之后,pod也可以有一个或多个先于容器启动的Init初始化容器。初始化容器之后,容器运行。

先查看一下有无pod节点,有的话删掉!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第59张图片

1.init初始化容器

编写初始化文件
cd pod
vim init.yaml
内容如下:

vim init.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busyboxplus
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busyboxplus
    command: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb
    image: busyboxplus
    command: ['sh', '-c', "until nslookup mydb.default.svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

---
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第60张图片

执行初始化文件,删除svc中的demo
因为初始化需要时间,所以不会很快完成,需要等待!

kubectl get svc
kubectl delete svc demo
kubectl apply -f init.yaml

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第61张图片

只有一个服务,初始化未成功,会不停重启进行初始化。
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第62张图片

2.添加服务

我们在初始化文件中再多添加一个服务

---
apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第63张图片

kubectl get pod -w 可以查看执行的动态过程!
我这里有busbox,删掉它,因为没有用!
1/1表示初始化成功!

kubectl get pod
kubectl get pod -w
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第64张图片
查看容器解析:

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第65张图片

删除初始化:

kubectl delete -f init.yaml

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第66张图片

四.探针

livenessProbe:存活探针,指示容器是否正在运行。如果为运行会杀掉失败进程,受到重启策略影响重新拉起容器进行检测。默认开启。

readinessProbe:就绪探针,指示容器是否准备好服务请求。

startupProbe: 指示容器中的应用是否已经启动。

1.存活探针

将文件前面修改的imgae镜像改回来!

vim pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:   ###添加标签!
    app: myapp
spec:
  containers:
  - name: myapp
    image: myapp:v1  
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        cpu: "100m"
        memory: "50Mi"
      limits:
        cpu: "200m"
        memory: "100Mi"
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 1
      periodSeconds: 3
      timeoutSeconds: 1


Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第67张图片

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第68张图片
运行pod文件,并查看pod状态

kubectl apply -f pod.yaml
kubectl get pod
kubectl describe pod pod-example

请添加图片描述

请添加图片描述
可以看到存活探针的信息:

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第69张图片

2.就绪探针

删除pod节点,修改文件,加入就绪探针

vim pod.yaml

 readinessProbe:
      httpGet:
        path: /test.html
        port: 80
      initialDelaySeconds: 1
      periodSeconds: 3
      timeoutSeconds: 1

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第70张图片
运行pod清单
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第71张图片
访问生成的IP地址:

kubectl get pod -o wide
curl 10.244.1.16

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第72张图片

3.添加标签将svc和pod联系

添加标签,通过标签将svc和pod联系起来,供外网访问。

vim svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysvc
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

请添加图片描述

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第73张图片

执行svc.yaml清单,并查看mysvc的状态

kubectl apply -f svc.yaml
kubectl get svc
kubectl describe svc mysvc

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第74张图片

但是可以看到endpoints还是没有就绪!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第75张图片

因为pod.yaml指定了文件为test.html
容器的nginx中没有test.html
进入容器,添加测试页

kubectl exec pod-example -i -t -- sh

cd /usr/share/nginx/html/
echo www.westos.org > test.html

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第76张图片

添加测试页之后。很快pod-example已READY状态!
查看状态并访问IP

kubectl get pod -w
kubectl get pod -o wide
curl 10.244.1.17/test.html

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第77张图片
此时查看mysvc的详细信息,可以看到endpoints也出现了ip地址!

kubectl describe svc mysvc

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第78张图片

当把nginx下的文件test.html删除掉之后,立马状态小时,且endpoints也不存在IP了!如下图::
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第79张图片

请添加图片描述

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第80张图片

五.控制器

1.ReplicaSet–rs控制器

rs控制器:控制副本,确定任何时间都有指定数量的Pod副本在运行,根据标签匹配。

cd pod
vim rs.yaml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第81张图片

执行清单rs.yaml

kubectl apply -f rs.yaml
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第82张图片

将前面实验的pod-example节点删除掉
查看扩展信息和rs信息

kubectl delete pod pod-example
kubectl get pod -o wide
kubectl get rs

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第83张图片

请添加图片描述
查看节点标签

kubectl get pod --show-labels

请添加图片描述

修改节点标签,–overwrite:覆盖节点标签

kubectl label pod replicaset-example-*** app=myapp --overwrite
kubectl get pod --show-labels

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第84张图片
删除节点不影响原来的rs控制器建立的容器
下图出现6个节点是因为把rs文件的节点数replicas改为6了!

kubectl delete pod replicaset-example-****
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第85张图片

2.deployments控制器

deployments控制器:用来创建pod和ReplicaSet,依靠标签显示,相比较rs可更新容器,可扩容,可暂停和恢复

cd 
cd pod
vim deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v1

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第86张图片

请添加图片描述

将前面的rs.yaml删除,执行deployment.yaml

kubectl delete -f rs.yaml
kubectl apply -f deployment.yaml
kubectl get pod
kubectl get all

请添加图片描述

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第87张图片

可以看到deployment已创建
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第88张图片

2.1节点数增

修改yaml文件,更新容器
节点数增加为6个!

vim deployment.yaml
replicas: 6

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第89张图片
和前面不一样,不需要删除deployment.yaml,再次运行清单deployment.yaml就可以更新!

kubectl apply -f deployment.yaml
kubectl get pod

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第90张图片

查看标签

kubectl get pod --show-labels

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第91张图片

2.2 更改标签:

kubectl label pod nginx-deloyment-****** app=myapp --overwrite

kubectl get pod --show-labels

请添加图片描述

标签已经改变!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第92张图片
删除其中一个节点,也会重新加载出来一个新的!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第93张图片

2.3 版本更新

修改文件deployment.yaml使得版本更新!

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第94张图片

kubectl apply -f deployment.yaml
kubectl get pod -o wide
curl 10.244.2.23

请添加图片描述

2.4 版本回退

版本回滚:v1
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第95张图片
可以看到访问的时候,版本是v1

kubectl apply -f deployment.yaml
kubectl get pod -o wide
curl 10.244.2.26
kubectl get rs

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第96张图片

请添加图片描述

版本切换结构图示:

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第97张图片

3.DaemonSet控制器

vim  daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: nginx
spec:
  selector:
    matchLabels:
      name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第98张图片

执行清单

kubectl apply -f daemonset.yaml
kun=bectl get pod -o wide

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第99张图片
删除节点:

kubectl delete -f daemonset.yaml

请添加图片描述

4.Job控制器

vim job.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第100张图片

在server1上拉取镜像perl.tar,并上传到私有仓库中!

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第101张图片

执行清单job.yaml

kubectl apply -f job.yaml

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第102张图片
我们可以看到pod节点先是运行之后又停止了!

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第103张图片

我们可以查看日志:

kubectl logs pi-sd527

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第104张图片

删除掉节点job.yaml
请添加图片描述

写一个定时清单:

vim cronjob.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-example
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cronjob
            image: busyboxplus
            args:
            - /bin/sh
            - -c
            - date; echo Hello from k8s cluster
          restartPolicy: OnFailure

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第105张图片
执行定时清单,并查看节点和日志::

kubectl apply -f cronjob.yaml
kubectl get pod
kubectl logs cronjob-example-****

Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第106张图片

我们可以看到过60s,就会再次执行,创建一个节点!
Kubernetes-pod管理、资源清单的使用、Pod生命周期、控制器_第107张图片

完成之后,删除cronjob.yaml清单即可!

请添加图片描述

你可能感兴趣的:(自动化运维企业实战,k8s,linux,docker,pod,运维)