飞天使-k8s基础组件分析-控制器

这篇具有很好参考价值的文章主要介绍了飞天使-k8s基础组件分析-控制器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

控制器含义解释

空调遥控器知道吧


ReplicationController: ReplicationController确保在任何时候都运行指定数量的pod副本。换句话说,一个ReplicationController确保一个pod或一组同类的pod总是处于可用状态。

ReplicaSet: ReplicaSet的目的是维护在任何给定时间运行的一组稳定的pod副本。因此,它通常用于保证指定数量的相同pod的可用性。

Deployments: 部署针对Pods和ReplicaSets提供了宣告式的更新。

StatefulSets: StatefulSet常用于管理有状态的应用。

DaemonSet: 它是确保所有的节点或一些节点都运行一个Pod的复本。


pod的标签与注释

标签就是名字的意思
kubectl run httpd \
--image=httpd:2.4 \
--replicas=1 \
--labels="ver=2,env=prod"

查看标签 
kubectl get deployment --show-labels
 kubectl label deployments httpd "canary=true"
kubectl get deployment -L canary
移除 
kubectl get deployment -L canary
显示标签 kubectl get pods --show-labels

选择标签为某个值
kubectl get pod --selector="ver=2"

标签是抓取pod的唯一依据


ReplicaController

管理它自己管理的pod数量保持一致

[root@k8s-01 chapter04]# cat web-rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: web
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80



[root@k8s-01 chapter04]# kubectl create -f web-rc.yaml 
replicationcontroller/web created
[root@k8s-01 chapter04]# kubectl get pod
NAME                    READY   STATUS              RESTARTS   AGE
httpd                   1/1     Running             0          22m
httpd-1                 1/1     Running             0          21m
nginx-97499b967-jzxwg   1/1     Running             0          14h
web-5bq9k               0/1     ContainerCreating   0          4s
web-rvbmm               0/1     ContainerCreating   0          4s
web-x6wxd               0/1     ContainerCreating   0          4s
[root@k8s-01 chapter04]# kubectl  get rc
NAME   DESIRED   CURRENT   READY   AGE
web    3         3         0       14s
[root@k8s-01 chapter04]# kubectl get replicationController
NAME   DESIRED   CURRENT   READY   AGE
web    3         3         1       27s

如果删除一个pod ,会自己新增一个pod
kubectl delete pod/web-x6wxd

新增一个标签看看
[root@k8s-01 chapter04]# kubectl get pod --show-labels
NAME                    READY   STATUS    RESTARTS   AGE     LABELS
nginx-97499b967-jzxwg   1/1     Running   0          14h     app=nginx,pod-template-hash=97499b967
web-rftd7               1/1     Running   0          4m16s   app=nginx
web-rvbmm               1/1     Running   0          7m35s   app=nginx
web-x6wxd               1/1     Running   0          7m35s   app=nginx


[root@k8s-01 chapter04]# kubectl label pod web-rftd7 type=special
pod/web-rftd7 labeled
[root@k8s-01 chapter04]# kubectl get pod --show-labels
NAME                    READY   STATUS    RESTARTS   AGE     LABELS
nginx-97499b967-jzxwg   1/1     Running   0          14h     app=nginx,pod-template-hash=97499b967
web-rftd7               1/1     Running   0          5m20s   app=nginx,type=special
web-rvbmm               1/1     Running   0          8m39s   app=nginx
web-x6wxd               1/1     Running   0          8m39s   app=nginx

覆盖过去
kubectl label pod web-rftd7 app=nginx1 --overwrite



添加pod的标签
# kubectl label pod web-z8stj type=special

更改pod的标签
# kubectl label pod web-z8stj app=foo --overwrite

再次列出pod
# kubectl get pods –L app

修改rc的数量为2个
[root@k8s-01 chapter04]# kubectl get rc
NAME   DESIRED   CURRENT   READY   AGE
web    3         3         3       17m
[root@k8s-01 chapter04]# kubectl edit rc web
replicationcontroller/web edited
[root@k8s-01 chapter04]# kubectl get rc
NAME   DESIRED   CURRENT   READY   AGE
web    2         2         2       18m

修改里面的数量为2 个


水平扩缩容
[root@k8s-01 chapter04]# kubectl scale rc web --replicas=6
replicationcontroller/web scaled
[root@k8s-01 chapter04]# kubectl get pod
NAME                    READY   STATUS              RESTARTS   AGE
nginx-97499b967-jzxwg   1/1     Running             0          14h
web-fhg2l               0/1     ContainerCreating   0          4s
web-nsxsh               0/1     ContainerCreating   0          4s
web-pcwkz               0/1     ContainerCreating   0          4s
web-rvbmm               1/1     Running             0          19m
web-vj48d               0/1     ContainerCreating   0          4s
web-x6wxd               1/1     Running             0          19m

kubectl delete rc web ,删除rc


RC (ReplicaController) 通过标签来控制pod的,改变pod的标签,pod会进行变化

ReplicaSet

针对rc而言,选择更加灵活
 kubectl describe rs


[root@k8s-01 chapter04]# cat web-replicaset.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

生产环境用rs多些


Deployments

Deployment为Pods和ReplicaSets提供声明式的更新。
在部署中描述一个期望的状态,部署控制器以某个控制的速率改变实际的状态到期望的状态

控制更新的节奏和速率

[root@k8s-01 chapter04]# cat nginx-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: nginx:1.7.9
        ports:
        - containerPort: 80




创建
# kubectl apply –f nginx-deployment.yaml

查看部署
# kubectl get deployment

查看部署的状态
# kubectl rollout status deployment.v1.apps/nginx-deployment

查看通过部署创建的rs
# kubectl get rs

查看pod自动产生的labels
# kubectl get pods –show-labels

更新nginx:1.7.9为nginx:1.9.1
# kubectl –record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
或者:
# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 –record
或者:
# kubectl edit deployment.v1.apps/nginx-deployment

查看更新的状态
# kubectl rollout status deployment.v1.apps/nginx-deployment

通过以下命令查看部署
# kubectl get deployment

查看部署的rs
# kubectl get rs

查看新的pods
# kubectl get pods

查看部署的详情
# kubectl describe deployments

回滚部署
更新一个不存在的镜像
# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 –record=true

通过以下命令查看更新卡住了
# kubectl rollout status deployment.v1.apps/nginx-deployment

查看部署的rs
# kubectl get rs

查看部署的pods
# kubectl get pods

查看部署的描述信息
# kubectl describe deployment

查看部署的版本
# kubectl rollout history deployment.v1.apps/nginx-deployment

查看每个版本的详情
# kubectl rollout history deployment.v1.apps/nginx-deployment –revision=2

回退到先前的版本
# kubectl rollout undo deployment.v1.apps/nginx-deployment

回退到特定的版本
# kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2

检查回退是否成功
# kubectl get deployment nginx-deployment

部署的扩容
扩容副本数量为10
# kubectl scale deployment.v1.apps/nginx-deployment --replicas=10

如果启用了水平的pod自动扩容可以执行如下:
# kubectl autoscale deployment.v1.apps/nginx-deployment --min=10 --max=15 --cpu-percent=80

扩容的比例和刻度
确保部署的10个复本处于运行
# kubectl get deploy

更新一个不存在的镜像,并查看结果
# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:sometag
# kubectl get rs

更新复本的数量为15个,再次查看结果,然后删除本次部署
#  kubectl scale deployment.v1.apps/nginx-deployment --replicas=15
# kubectl get deployment
# kubectl get rs
# kubectl delete deploy nginx-deployment

暂停和继续部署
创建部署
# kubectl create –f nginx-deployment.yaml

暂停更新
# kubectl rollout pause deployment.v1.apps/nginx-deployment

更新镜像
# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1

查看是否有新的更新开始
# kubectl rollout history deployment.v1.apps/nginx-deployment

恢复部署
# kubectl rollout resume deployment.v1.apps/nginx-deployment

DaemonSet

使用DaemonSet在每个节点上运行一个pod
DaemonSet确保创建尽可能多的pod,并将每个pod部署到自己的节点上。

使用DaemonSet仅在特定的节点上运行Pods
这可以通过在pod模板中指定node-selector属性来完成的,它是DaemonSet定义的一部分


[root@k8s-01 chapter04]# cat ssd-monitor-daemonset.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ssd-monitor
spec:
  selector:
    matchLabels:
      app: ssd-monitor
  template:
    metadata:
      labels:
        app: ssd-monitor
    spec:
      nodeSelector:
        disk: ssd
      containers:
      - name: main
        image: luksa/ssd-monitor




[root@k8s-01 chapter04]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-97499b967-jzxwg   1/1     Running   0          16h   10.244.1.2   k8s-02   <none>           <none>

打标签
kubectl label node k8s-02 disk=ssd

kubectl get ds
kubectl get pods

打完标签后指哪打哪

Job

这种是运行一次,直到完成

在Job完成后,它并不会删除Pod,允许我们可以查看它的日志

在Job中运行多个Pod实例
Job可以配置为创建多个Pod实例,依并行或有序的方式运行它们。

按顺序来运行Job
如果需要一个job运行多次,可以将completions设置为希望job的Pod运行多次。
配置请参考文件:multi-completion-batch-job.yaml

以并行的方式运行job pods.
如果让job并行运行多个pods,可以使用parallelism指定并运行pod的数量。
配置请参考文件:multi-completion-batch-job2.yaml

限制Job pod的完成时间
通过设置activedeadlinesecond属性 




[root@k8s-01 chapter04]# cat multi-completion-batch-job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job
spec:
  completions: 5
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: main
        image: luksa/batch-job
[root@k8s-01 chapter04]# cat multi-completion-batch-job2.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job2
spec:
  completions: 5
  parallelism: 2
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: main
        image: luksa/batch-job



飞天使-k8s基础组件分析-控制器,kubernetes,docker,容器文章来源地址https://www.toymoban.com/news/detail-672923.html

Cronjob

这个是定时计划任务,周期性的

[root@k8s-01 chapter04]# cat batch-job-every-fifteen-minutes.yaml 
apiVersion: batch/v1beta1
# API group的版本是v1beat1,这里不要写错
kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spec:
# 该任务将会在每小时的0,15,30,45分运行
  schedule: "0,15,30,45 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: periodic-batch-job-every-fifteen-minutes
        spec:
          restartPolicy: OnFailure
          containers:
          - name: main
            image: luksa/batch-job
[root@k8s-01 chapter04]# cat cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
              - /bin/sh
              - -c
              - date; echo Hello from the kubernetes cluster
          restartPolicy: OnFailure




使用以下命令获取它的状态
# kubectl get cronjob hello

也可以通过以下命令获取它的状态
# kubectl get jobs --watch

可以通过以下命令查看上次调度的时间
# kubectl get conrjob hello

删除cronjob
# kubectl delete cronjob hello

参考文档
https://edu.csdn.net/course/detail/27762?spm=1003.2449.3001.8295.2

到了这里,关于飞天使-k8s基础组件分析-控制器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 飞天使-k8s基础组件分析-配置和密钥管理

    configmap 详解 configmap 使用案例 secret k8s从私有库拉取镜像案例 参考文档

    2024年02月11日
    浏览(42)
  • 飞天使-k8s基础组件分析-持久化存储

    emptyDir hostpath pv和pvc介绍 nfs作为静态pv案例 nfs作为动态pv案例 使用本地文件夹作为pv 改变默认存储类及回收策略 参考文档

    2024年02月11日
    浏览(40)
  • k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

    基本了解: Deployment是最常用的K8s工作负载控制器(Workload Controllers),实际项目部署调试中必用资源之一,所以必须要熟练掌握deploy资源的使用。 它是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。 其他控制器还有DaemonSet、StatefulSet等,不同控制器针对不同的需

    2024年02月03日
    浏览(53)
  • K8s基础10——数据卷、PV和PVC、StorageClass动态补给、StatefulSet控制器

    为什么需要数据卷? 容器中的文件在磁盘上是临时存放的,这给容器中运行比较重要的应用程序带来一些问题。 当容器升级或者崩溃时,kubelet会重建容器,容器内文件会丢失。 一个Pod中运行多个容器时,需要共享文件。 而K8s 数据卷就可以解决这两个问题。 Volume概念: V

    2024年02月05日
    浏览(98)
  • 18-k8s控制器资源-cronjob控制器

            job控制器是执行完一次任务,就结束;         cronjob控制器,是基于job控制器,定期频率性执行任务;等同于linux系统中的crontab一样; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata:   name: xinjizhiwa spec:   schedule: \\\"* * * * *\\\"   #定义job的模板   jobTemplate

    2024年02月22日
    浏览(66)
  • k8s 控制器

    Kubernetes(K8S)是一种开源的容器编排平台,它可以自动化地管理容器化应用程序的部署、扩展和运行。K8S中的控制器是一种重要的组件,它可以确保应用程序的状态与期望的状态一致。在K8S中,有五种常见的控制器,它们分别是: 1. ReplicaSet控制器 ReplicaSet控制器用于确保P

    2024年02月13日
    浏览(53)
  • K8s控制器

    kubectl create tabtab 下面的所有都可以创建模板文件 --dry-run=client -o yaml 查询资源对象的帮助信息         kubectl explain pod.spec.restartPolicy            #这里对上下层级关系需要清楚 获取Pod模板         kubectl run mypod --image=xxxx --dry-run=client -o yaml 获取Deployment         ku

    2024年02月03日
    浏览(67)
  • 15-k8s控制器资源-deployment/部署控制器

            在学习rc和rs控制器资源时,我们指导,这两个资源都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实现回滚或者迭代升级;         那么

    2024年02月21日
    浏览(68)
  • 14-k8s控制器资源-rs控制器replicasets

            replicaset副本控制器,简称:rs控制器;         用法:与rc控制器“几乎”相同;         能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式         注意:不论是rc还是rs资源,都是通过“标签”惊醒匹配pod的,如果有同样

    2024年02月21日
    浏览(58)
  • k8s---pod控制器

    工作负载,workload用于管理pod的中间层,确保pod资源符合预期的状态。 预期状态: 1、副本数 2、容器重启策略 3、镜像拉取策略 pod出故障的出去等等 1、replicaset:指定pod副本的数量 三个组件:                 1、pod的副本                 2、标签选择器,判断

    2024年01月18日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包