zoukankan      html  css  js  c++  java
  • kubernetes的几个概念

    1.  rc: 副本控制器,确保在任何时候都运行指定数量的pod副本。换句话说,ReplicationController确保一个pod或一组同构的pod始终处于可用状态。

    2. rs:副本集,是rc的升级版常常和deployment一起使用,目的是维护在任何给定时间运行的一组稳定的pods.因此,它通常用于保证指定数量的相同pods的可用性。它跟RC的区别是可以指定selector是一个集合。例如:rc 指定selector中app标签为nginx

    controllers/replication.yaml 
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: nginx
    spec:
      replicas: 3   #副本是3个
      selector:
        app: nginx  #通过标签选择接受管理的pod
      template:     #根据此模板生成pod
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80

    而rs可以指定一个集合:

    controllers/frontend.yaml 
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: frontend
      labels:
        app: guestbook
        tier: frontend
    spec:
      # modify replicas according to your case
      replicas: 3
      selector:   #根据label选择接受管理的pods,这里是一个集合
        matchLabels:
          tier: frontend
      template:
        metadata:
          labels:
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: gcr.io/google_samples/gb-frontend:v3

    3. deployment

       Deployment为pods和rs提供声明性更新,用户可以在deployment文件中描述需要的状态,deployment将以受控制的速度将实际状态更改为所需状态。您可以定义deployment来创建新的rs,或者删除现有的deployment,并用新的deployment来使用旧的deployment的资源。deployment支持rs不支持的以下操作:

    • 回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。

    • 版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。

    • 暂停和启动:对于每一次升级,都能够随时暂停和启动。

    • 多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。

       一个常见的deployment yaml文件如下

    controllers/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

    支持的操作还有rs不支持的

    kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
    
    kubectl rollout status deployment.v1.apps/nginx-deployment
    
    kubectl rollout history deployment.v1.apps/nginx-deployment

    4. service

    将运行在一组pod上的应用程序公开为网络服务的抽象方法。不需要修改应用程序来使用不熟悉的服务发现机制。Kubernetes为pod提供了它们自己的IP地址和一组pod的一个DNS名称,并且可以在它们之间实现负载平衡。这种方法就是使用kube-proxy. service对应的yaml文件如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9376

     5. nodeAffinity 与 podAffinity

    nodeAffinity是指节点亲和性,表示节点必须满足条件能够部署或者尽量部署在满足条件的节点上。podAffinity是pod亲和性,表示pod必须部署在满足这样的节点:这个节点上有满足条件的pod在运行。或者避免部署在这样的节点:这个节点上有满足条件的pod在运行。

  • 相关阅读:
    EntityFramework 实践 Overview
    Retrofit 实践
    elasticsearch入门
    正则如何不匹配该内容
    windows下安装了2个python,如何下载模块到不同的python中
    python中 遇到的读取坑2.7和3.6版本的问题
    如何在idea中加载本地中已有的python
    如何在linux上有2个python的情况下安装gensim
    正则表达式,包含此内容(不管是前面还是后面)
    rdd里的foreach无法对外界产生影响
  • 原文地址:https://www.cnblogs.com/janeysj/p/10995275.html
Copyright © 2011-2022 走看看