Pod控制器RelicaSet使用。

一:Pod相关控制器列表。

Replicaset:通过对用户期望的pod资源,依照pod资源模板来创建pod
Deployment:建筑在Replicaset之上对pod资源进行操作,支持流动,回滚,作用于无状态应用
Daemonset:在整个系统的每个节点上,指定运行某个pod的一个副本,实现系统集群管理。
statefulset:作用于有状态的应用,每个节点都是有数据的。

二:Replicaset控制器实例:

[root@k8s-master manifests]# kubectl explain rs         查看replicase控制器如何使用
[root@k8s-master deployment]# vim rs-demo.yaml          编辑一个yaml文件
apiVersion: apps/v1       这表示我们创建的控制器属于apps群组v1版本
kind: ReplicaSet          这是我们创建的控制器资源名称。
metadata:
  name: myapp
  namespace: default
spec:
  replicas: 2             期望创建的pod数量
  selector:               表示我们挑选的pod的标签,app=myapp,release=canary
    matchLabels:
      app: myapp
      release: canary
  template:              创建一个模板,当我们期望的pod的资源少了,以这个模块来创建pod
    metadata:
      name: myapp-pod
      labels:            在这里pod的标签必须与上述控制器挑选的标签保持一至,能多个其他。
        app: myapp
        release: canary
        environment: qa  在模板这里我们可以多加一个标签。
    spec:
      containers:
      - name: myapp-container
        image: ikubernetes/myapp:v1
        ports:
        - containerPort: 80

[root@k8s-master deployment]# kubectl create -f rs-demo.yaml 
replicaset.apps/myapp created
[root@k8s-master deployment]# kubectl get rs
NAME                         DESIRED   CURRENT   READY   AGE
myapp                        2         2         2       12s
[root@k8s-master deployment]# kubectl get pods -o wide
myapp-7bn4q                        1/1     Running   0          34s     10.244.1.23   k8s-node1   <none>           <none>
myapp-g2f5b                        1/1     Running   0          34s     10.244.1.24   k8s-node1   <none>           <none>

[root@k8s-master deployment]# kubectl get rs
NAME                         DESIRED   CURRENT   READY   AGE
myapp                        2         2         2       12s

[root@k8s-master deployment]# kubectl get pods -o wide   
NAME                               READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
myapp-7bn4q                        1/1     Running   0          34s     10.244.1.23   k8s-node1   <none>           <none>
myapp-g2f5b                        1/1     Running   0          34s     10.244.1.24   k8s-node1   <none>           <none>
在这里的pod名称与我们yaml文件中写的pod名称有区别。这是因为在清单创建的时候会依据pod控制器名称生成一串字母。
[root@k8s-master deployment]# kubectl describe pods myapp-7bn4q  查看其中一个pod的详细信息。
Name:         myapp-7bn4q 
Namespace:    default
Priority:     0
Node:         k8s-node1/10.5.100.157
Start Time:   Wed, 23 Dec 2020 16:34:17 +0800
Labels:       app=myapp
              environment=qa
              release=canary
Annotations:  <none>
Status:       Running
IP:           10.244.1.23
IPs:
  IP:           10.244.1.23
Controlled By:  ReplicaSet/myapp
Containers:
  myapp-container:
    Container ID:   docker://971694c34965e607d6975d5d0f38f580779ab978101479bc7ef311e46e03fa24
    Image:          ikubernetes/myapp:v1
    Image ID:       docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 23 Dec 2020 16:34:23 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-rgbt5 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-rgbt5:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-rgbt5
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>
[root@k8s-master deployment]# 

#当我们删除我们其中的一个pod时。
[root@k8s-master deployment]# kubectl get pods --show-labels -l app=myapp,release=canary
NAME          READY   STATUS    RESTARTS   AGE   LABELS
myapp-7bn4q   1/1     Running   0          97m   app=myapp,environment=qa,release=canary
myapp-g2f5b   1/1     Running   0          97m   app=myapp,environment=qa,release=canary
[root@k8s-master deployment]# 
[root@k8s-master deployment]# kubectl delete pods myapp-7bn4q   删除其中一个pod
pod "myapp-7bn4q" deleted
[root@k8s-master deployment]# kubectl get pods --show-labels -l app=myapp,release=canary 再次查看pod发现又启动了一个pod,因为我们定义控制器期望是两个pod。
NAME          READY   STATUS    RESTARTS   AGE   LABELS 
myapp-96sfg   1/1     Running   0          8s    app=myapp,environment=qa,release=canary
myapp-g2f5b   1/1     Running   0          98m   app=myapp,environment=qa,release=canary
[root@k8s-master deployment]# 

#因为我们yaml文件设置了控制器挑选2个分别带有releas=canary,app=myapp标签的pod,在这里我们将其他的一个pod也打上这两个标签。看看控制器的反应
[root@k8s-master deployment]# kubectl get pods 
NAME                               READY   STATUS    RESTARTS   AGE
myapp-5d587c4d45-nms7x             1/1     Running   1          8d
myapp-5d587c4d45-r4rcc             1/1     Running   1          8d
myapp-5d587c4d45-tt6lv             1/1     Running   1          8d
myapp-96sfg                        1/1     Running   0          3m51s
myapp-g2f5b                        1/1     Running   0          102m
nginx-deployment-bd4bfb877-xs62q   1/1     Running   1          15d
post                               1/1     Running   0          25h
readiness                          0/1     Running   0          2d
[root@k8s-master deployment]# kubectl label pods post release=canary app=myapp  我们将post这个pod打上标签,后果控制器会删除一个pod,因为我们上述yaml文件中定义的是2个pod
pod/post labeled
[root@k8s-master deployment]# kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
myapp-5d587c4d45-nms7x             1/1     Running   1          8d
myapp-5d587c4d45-r4rcc             1/1     Running   1          8d
myapp-5d587c4d45-tt6lv             1/1     Running   1          8d
myapp-g2f5b                        1/1     Running   0          103m
nginx-deployment-bd4bfb877-xs62q   1/1     Running   1          15d
post                               1/1     Running   0          25h
readiness                          0/1     Running   0          2d
[root@k8s-master deployment]# 
[root@k8s-master deployment]# kubectl edit rs myapp   我们修改控制器的配置清单。我们将容器使用的镜像版本改成myapp/v2,那们已经创建好的pod使用镜像的版本依然是v1,那么我们利用模板再次创建pod时容器的镜像就变为v2了

#实例
[root@k8s-master deployment]# kubectl describe pods myapp-g2f5b      先查看现有的pod使用的镜像版本
Name:         myapp-g2f5b  
Namespace:    default
Priority:     0
Node:         k8s-node1/10.5.100.157
Start Time:   Wed, 23 Dec 2020 16:34:17 +0800
Labels:       app=myapp
              environment=qa
              release=canary
Annotations:  <none>
Status:       Running
IP:           10.244.1.24
IPs:
  IP:           10.244.1.24
Controlled By:  ReplicaSet/myapp
Containers:
  myapp-container:
    Container ID:   docker://11aa211599288f8e8045120377d9a16a7f3c092a6fcd8f831f69700ecc1aa977
    Image:          ikubernetes/myapp:v1

[root@k8s-master deployment]# kubectl delete pods myapp-g2f5b    我们将这个pod删除
pod "myapp-g2f5b" deleted
[root@k8s-master deployment]# kubectl get pods --show-labels     删除之后,控制器又根据模板重启一个pod
myapp-sd4qd                        1/1     Running   0          6s

[root@k8s-master deployment]# kubectl describe pods myapp-sd4qd  查看我们刚才创建的pod,镜像版本发生了变化。
Name:         myapp-sd4qd
Namespace:    default
Priority:     0
Node:         k8s-node1/10.5.100.157
Start Time:   Wed, 23 Dec 2020 18:36:58 +0800
Labels:       app=myapp
              environment=qa
              release=canary
Annotations:  <none>
Status:       Running
IP:           10.244.1.27
IPs:
  IP:           10.244.1.27
Controlled By:  ReplicaSet/myapp
Containers:
  myapp-container:
    Container ID:   docker://b59caa39383b050f3dba6ff985a03dab9784e85ba44a166355aba10b5aa5d5ba
    Image:          ikubernetes/myapp:v2

RelicaSet总结:通过对用户期望的pod资源,依照我们定义的模板来创建pod

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值