精华内容
下载资源
问答
  • 1.容器定义和初始化 (1)C c;默认构造函数,如果c是一个array,则c中元素按照默认初始化;否则c为空。 解释:默认初始化,如果c是全局变量,int 初始化为0,如果c是局部变量。那么初始化为任意整数值。string ...

           令C表示六个顺序容器类型期中之一(vector,deque,list,forward,string,array),以下详细说明定义和初始化以及赋值.

    1.容器定义和初始化

    (1)C  c;默认构造函数,如果c是一个array,则c中元素按照默认初始化;否则c为空。

    解释:默认初始化,如果c是全局变量,int 初始化为0,如果c是局部变量。那么初始化为任意整数值。string 对象全部初始化为空串子.

    (2)C  c1(c2) ;        c1初始化为c2的类型。c1 和c2必须是同类型的constainer.对于array,c1和c2必须长度相同.注意这是初始化。离开定义是不能这样使用的。例如:下面就是错误的,因为初始化时候才能用圆括号

      vector<int> v_int1 = {1,2,3,4,5,6},v_int2;
       v_int2(v_int1);
       

     

    (3)C c1 = c2;     定义c1,并且把c2的赋给c1.包括定义和赋值两个过程。

    (4)C c1{a,b,c,d,e,f};把c1列表初始化为花括号内的部分。

    (5)C c1 = {a,b,c,d,e,f};把c1列表初始化为花括号内的拷贝。

    (6)C c1(b,e);b和e为两个迭代器类型.

    (7)C seq(n); seq包含n个元素,这些元素进行了值初始化;此构造函数是explict的。(string不适用).

    看下面的c11,d11,l11,f11四个对象。string不适用。

    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  int TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      //test C c(b,e);
      VECTORTYPE v_type{1,2,3,4,5,6},v_type2;
      VECTORTYPE v_type1(v_type.begin() + 1 ,v_type.end() -1);
    
      VECTORTYPE c11(LENGTH);
      DEQUETYPE  d11(LENGTH);
      LISTTYPE   l11(LENGTH);
      FORWARD_LISTTYPE f11(LENGTH);
      print(c11);
      print(d11);
      print(l11);
      print(f11); 
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    

    如果string对象用,如下:

    string s(10);

    编译器报错如下:

    11.cc:30:14: error: invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]
       string s(10);
    

    (8)C seq(n,t),包含n个t值。array不满足,array<int,10>,有本身的固定类型和长度。

    例如:

    string s(10,'a');//定义string对象s为10个a

     

    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  int TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      //test C c(b,e);
      VECTORTYPE v_type{1,2,3,4,5,6},v_type2;
      VECTORTYPE v_type1(v_type.begin() + 1 ,v_type.end() -1);
    
      VECTORTYPE c11(LENGTH,4);
      DEQUETYPE  d11(LENGTH,5);
      LISTTYPE   l11(LENGTH,6);
      FORWARD_LISTTYPE f11(LENGTH,7);
     
      print(c11);
      print(d11);
      print(l11);
      print(f11);
      
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    

    note1:标准库array大小:

    (1)array<int,10> arr_int{1,2,3,4,5,6,7,8,9,0};

     array<int,10>::size_type i;  //right

     array<int>::size_type j;//wrong

    结论:array的大小是array定义的一部分,array不支持普通的容器构造函数。普通构造函数都会确定容器大小,所以及其容易出错。

     

      array<int,10> arr_int1{1,2,3,4,5,6,7,8,9,0};
      array<int,10> arr_int2;
      array<int,10> arr_int3{1024};
      cout << endl;  
      print_array(arr_int1);
      print_array(arr_int2);
      print_array(arr_int3);
    

     三个array对象打印如下,说明局部数组的元素的任意随机整数值。

    1 2 3 4 5 6 7 8 9 0 
    0 121 65535 1 -1240874352 32766 993197120 22013 2 0 
    1024 0 0 0 0 0 0 0 0 0 
    

    (2)

      array<int,10> arr_int1{1,2,3,4,5,6,7,8,9,0};
      array<int,10> arr_int2;
      array<int,10> arr_int3{1024};
      array<int,10> arr_int4(arr_int2),arr_int5=arr_int1;//array可以拷贝,或者=赋值
    

    补充1.创建一个容器为另一个容器的拷贝,那么容器类型元素类型必须匹配。不过,当传递参数是一个迭代器范围时,就不需要容器类型是相同的了。而且,新容器和原容器的元素类型也可以不同,只要能够将要拷贝的元素转换为要初始化的容器的元素类型即可。如下面表1和表2(注意char*可以直接转化成string,反过来必须借助c函数例如c_str(),data成员函数)

              //表1
    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  string TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      list<string>  authors = {"Milton","Shakespeare","Austen"};
      vector<const char*> articles = {"a","an","the"};
      vector<char*> articles_2(authors); //wrong,type is not same
      list<string> list2(authors);    //right
      deque<string> authList(authors); //wrong,type is not same
      vector<string> words(articles);   //wrong,type is not same 
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    11.cc:24:35: error: no matching function for call to ‘std::vector<char*>::vector(std::__cxx11::list<std::__cxx11::basic_string<char> >&)’
       vector<char*> articles_2(authors); //wrong,type is not same
    
    11.cc:26:33: error: no matching function for call to ‘std::deque<std::__cxx11::basic_string<char> >::deque(std::__cxx11::list<std::__cxx11::basic_string<char> >&)’
       deque<string> authList(authors); //wrong,type is not same
    
    11.cc:27:32: error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char> >::vector(std::vector<const char*>&)’
       vector<string> words(articles);   //wrong,type is not same
    
    
    
               //表2是 表1修正后的代码
    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  string TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      list<string>  authors = {"Milton","Shakespeare","Austen"};
      vector<const char*> articles = {"a","an","the"};
      vector<char*> articles_2(authors.begin(),authors.end());  //wrong,string 不能直接转化成char*
      list<string> list2(authors);    
      //采用了迭代器初始化,容器类型和元素类型可以不同了。只要元素类型可以转化就ok
     deque<string> authList(authors.begin(),authors.end());
     // 同上
      vector<string>words(articles.begin(),articles.end()); 
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    11.cc:24:57:   required from here
    /usr/include/c++/7/bits/stl_construct.h:75:7: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘char*’ in initialization
         { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
    

     

     

     

    展开全文
  • 容器定义存储(CDS)—"Portworx

    千次阅读 2016-12-15 01:20:17
    今天我们就来分析一下基于容器的Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。 Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的...

    今天我们就来分析一下基于容器的Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。

    Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的Scale out存储栈,其核心架构是共享的、松耦合的、分布式、基于元数据的块存储层(卷、块设备、全局共享卷和文件访问等)。portworx本身作为容器服务的方式部署,在每个集群节点呈现为PX的容器。

    Portworx架构和原理

    每个PX容器来识别服务器节点的硬件、检测磁盘类型、容量和整体服务能力和类型。系统根据每个节点的能力匹配业务对存储需求,进行调度和IO分发。

    每个PX容器根据授权和集群ID发现其他节点。通过这种方式,每一个PX节点就可以感知整个存储系统的拓扑结构和参与集群的节点(支持数据中心内部和跨数据中心部署)。通过整体拓扑就可以感知整个集群的Region、机架部署情况,当然,也可以感知集群内不同节点的能力。

    容器定义存储(CDS)—春江水暖

    集群节点信息同步采用Gossip协议(类似留言蜚语,节点状态的变化,通过一传十,十传百的方式传递,而不是有某几个节点逐一传递),通过效率比较高的协议确保整个集群状态的一致性,而且不会存在扩展性或性能瓶颈。

    容器定义存储(CDS)—春江水暖

    存储控制面

    存储的供给方式是通过容调度器来实现,存储资源通过编排网络分配给具体的容器实例,PX已经支持与多种容器调度、编排工具集成,如主流的Kubernetes、Swarm、Mesosphere、Spark等,PX通过控制面协议创建合适的存储卷给上层容器实例使用,基于应用容器的IO等SLA要求,PX可以自动分配满足要求的存储卷。在Kubernetes调度器中,存储卷是以Kubernetes POD的方式提供给应用容器。

    卷是以Thin的方式来分配的,可以做到按需灵活伸缩。每个卷的容量是打散在集群节点上的,所以增值特性如,快照、块大小等都可以容器卷的原则来分配。

    容器定义存储(CDS)—春江水暖

    数据面访问

    Portworx提供数据访问路径和位置,一旦把卷配置给正在运行的应用容器后,PX就处在数据路径的位置;并根据上层容器应用对应的储类型(卷、块设备或全局共享卷等)连接到上层容器上。

    容器定义存储(CDS)—春江水暖

    当上层应用容器写入数据时,数据块和对应的元数据会根据算法分布到不同的节点上增强可靠性。这些卷是容器可寻址卷,可以基于容器寻址,所以具备内容寻址存储的优势。

    生命周期管理

    每个PX容器维护着应用容器卷的生命周期管理,这些卷可以被克隆、分级存储、或移动到S3公有云上。PX同时维护着每个卷的IO活动历史记录,并向上提供CLI和PXctl命令接口和GUI界面,方便运营维护和系统管理。

    Portworx应用场景

    Portworx由于在存储容器层针对企业应用做了优化和增强,所以,可以满足主流应用要求,如Hadoop、Spark大数据存储,提供弹性Scale out能力;对内容管理WordPress,可以提供Scale out 文件能力和基于容器的备份;也支持一些如Cassandra、Postgres等非关系数据库;另外,对流计算、视频应用场景也支持PB级的扩展能力。

    Portworx提供了业界第一个存储解决方案专为容器。不像传统存储,Portworx容器定义存储是基于应用需求规模实现弹性伸缩。面向容器化应用的软件定义存储,强调Container Defined Storage,实现从控制面到数据面完整的方案,Portworx提出“容器定义的存储”,相比VM存储提出更细SLA要求、容器粒度的企业存储特性要求,容器应用对存储的新要求需要进一步分析。

    Portworx其在Docker Hub中有OpenStorage开源项目;另外,提供了开发者和企业级两个版本,开发者版本只包含基于容器的Scale out快存储、分布式的文件访问、基于容器粒度的控制和CLI命令行界面;企业版增加了多集群管理、单一文件命名空间、容量预测和管理、GUI管理界面。

    容器定义存储(CDS)—春江水暖

    Portworx可运行于服务器或EC2、容器等基础设施,并且支持分离部署和超融合部署,Portworx的主要亮点简单总结如下:

    • 性能无损: 存储运行性能可以和裸金属部署媲美。

    • 存储持久能力: 对容器应用提供了持久数据存储能力。

    • 容器粒度管理: 实现了基于每个应用容器的存储管理服务。

    • 容器粒度增值特性: 基于容器粒度实现远程复制、快照等数据保护功能

    • 节约硬件资源: 相对于虚拟机,削减了存储70%硬件和资源成本。

    • 资源自动化供给: 能应对容器应用突发需求,如容量供给、自动调度等,基于容器I/O进行优先级排队,基于SLA自动供给。

    Portworx容器定义存储本身很简单,采用基本的分布式方法和商业X86硬件作为融合存储节点,并能实现节点快速伸缩。最主要的就是可以与任何一个Docker调度集成,自动实现存储资源按需供给。

    容器定义存储(CDS)—春江水暖

    Portworx从控制面和数据面完整地为容器提供存储,数据面供给能力更高、更快、更强;控制面可以广泛对接Docker、Kubernetes、Mesos等计算与集群管理系统。如vSAN/vVol/Cinder,这种比较开放的架构,可以通过PWX CDS 控制器构建面向容器控制面生态。


    Portworx认为容器定义存储应具备这些能力(个人观点,可能不是太全面):
    1.容器定义存储应该分控制面和数据面实现,控制面基于 Kubernetes、Swarm、Mesosphere、Spark等 容器调度、编排工具自动实现存储分配,满足应用容器的SLA要求;数据面提供更高、更快、更强的存储供给能力,并可以实现基于应用容器寻址的能力。
    2.应用容器卷的分配、管理应该是以容器为单位, 所有增值特性如,快照、远程复制等都基于容器的原则来实现。
    3.容器定义存储应该是高度自愈、轻量高效、应用容器感知的系统。自愈、高效我觉得传统存储都具备,但是轻量、容器感知还需要加强。Portworx采用容器实现分布式Scale out容器定义存储,可以提供裸金属性能、启动快和资源占用率低等特点。


    展开全文
  • 在上篇中,我们已经介绍了容器如何改变应用部署方式、为什么要通过CDS实现数据中心"轻量化"。那今天我们就来分析一下基于容器的Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。
    

    容器定义存储(CDS)—春江水暖"Portworx"先知

    容器定义存储(CDS)—春江水暖

    在上篇中,我们已经介绍了容器如何改变应用部署方式、为什么要通过CDS实现数据中心"轻量化"。那今天我们就来分析一下基于容器的Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。

    Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的Scale out存储栈,其核心架构是共享的、松耦合的、分布式、基于元数据的块存储层(卷、块设备、全局共享卷和文件访问等)。portworx本身作为容器服务的方式部署,在每个集群节点呈现为PX的容器。

    Portworx架构和原理

    每个PX容器来识别服务器节点的硬件、检测磁盘类型、容量和整体服务能力和类型。系统根据每个节点的能力匹配业务对存储需求,进行调度和IO分发。

    每个PX容器根据授权和集群ID发现其他节点。通过这种方式,每一个PX节点就可以感知整个存储系统的拓扑结构和参与集群的节点(支持数据中心内部和跨数据中心部署)。通过整体拓扑就可以感知整个集群的Region、机架部署情况,当然,也可以感知集群内不同节点的能力。

    容器定义存储(CDS)—春江水暖

    集群节点信息同步采用Gossip协议(类似留言蜚语,节点状态的变化,通过一传十,十传百的方式传递,而不是有某几个节点逐一传递),通过效率比较高的协议确保整个集群状态的一致性,而且不会存在扩展性或性能瓶颈。

    容器定义存储(CDS)—春江水暖

    存储控制面

    存储的供给方式是通过容调度器来实现,存储资源通过编排网络分配给具体的容器实例,PX已经支持与多种容器调度、编排工具集成,如主流的Kubernetes、Swarm、Mesosphere、Spark等,PX通过控制面协议创建合适的存储卷给上层容器实例使用,基于应用容器的IO等SLA要求,PX可以自动分配满足要求的存储卷。在Kubernetes调度器中,存储卷是以Kubernetes POD的方式提供给应用容器。

    卷是以Thin的方式来分配的,可以做到按需灵活伸缩。每个卷的容量是打散在集群节点上的,所以增值特性如,快照、块大小等都可以容器卷的原则来分配。

    容器定义存储(CDS)—春江水暖

    数据面访问

    Portworx提供数据访问路径和位置,一旦把卷配置给正在运行的应用容器后,PX就处在数据路径的位置;并根据上层容器应用对应的储类型(卷、块设备或全局共享卷等)连接到上层容器上。

    容器定义存储(CDS)—春江水暖

    当上层应用容器写入数据时,数据块和对应的元数据会根据算法分布到不同的节点上增强可靠性。这些卷是容器可寻址卷,可以基于容器寻址,所以具备内容寻址存储的优势。

    生命周期管理

    每个PX容器维护着应用容器卷的生命周期管理,这些卷可以被克隆、分级存储、或移动到S3公有云上。PX同时维护着每个卷的IO活动历史记录,并向上提供CLI和PXctl命令接口和GUI界面,方便运营维护和系统管理。

    Portworx应用场景

    Portworx由于在存储容器层针对企业应用做了优化和增强,所以,可以满足主流应用要求,如Hadoop、Spark大数据存储,提供弹性Scale out能力;对内容管理WordPress,可以提供Scale out 文件能力和基于容器的备份;也支持一些如Cassandra、Postgres等非关系数据库;另外,对流计算、视频应用场景也支持PB级的扩展能力。

    Portworx提供了业界第一个存储解决方案专为容器。不像传统存储,Portworx容器定义存储是基于应用需求规模实现弹性伸缩。面向容器化应用的软件定义存储,强调Container Defined Storage,实现从控制面到数据面完整的方案,Portworx提出“容器定义的存储”,相比VM存储提出更细SLA要求、容器粒度的企业存储特性要求,容器应用对存储的新要求需要进一步分析。

    Portworx其在Docker Hub中有OpenStorage开源项目;另外,提供了开发者和企业级两个版本,开发者版本只包含基于容器的Scale out快存储、分布式的文件访问、基于容器粒度的控制和CLI命令行界面;企业版增加了多集群管理、单一文件命名空间、容量预测和管理、GUI管理界面。

    容器定义存储(CDS)—春江水暖

    Portworx可运行于服务器或EC2、容器等基础设施,并且支持分离部署和超融合部署,Portworx的主要亮点简单总结如下:

    • 性能无损: 存储运行性能可以和裸金属部署媲美。

    • 存储持久能力: 对容器应用提供了持久数据存储能力。

    • 容器粒度管理: 实现了基于每个应用容器的存储管理服务。

    • 容器粒度增值特性: 基于容器粒度实现远程复制、快照等数据保护功能

    • 节约硬件资源: 相对于虚拟机,削减了存储70%硬件和资源成本。

    • 资源自动化供给: 能应对容器应用突发需求,如容量供给、自动调度等,基于容器I/O进行优先级排队,基于SLA自动供给。

    Portworx容器定义存储本身很简单,采用基本的分布式方法和商业X86硬件作为融合存储节点,并能实现节点快速伸缩。最主要的就是可以与任何一个Docker调度集成,自动实现存储资源按需供给。

    容器定义存储(CDS)—春江水暖

    Portworx从控制面和数据面完整地为容器提供存储,数据面供给能力更高、更快、更强;控制面可以广泛对接Docker、Kubernetes、Mesos等计算与集群管理系统。如vSAN/vVol/Cinder,这种比较开放的架构,可以通过PWX CDS 控制器构建面向容器控制面生态。


    Portworx认为容器定义存储应具备这些能力(个人观点,可能不是太全面):
    1.容器定义存储应该分控制面和数据面实现,控制面基于 Kubernetes、Swarm、Mesosphere、Spark等 容器调度、编排工具自动实现存储分配,满足应用容器的SLA要求;数据面提供更高、更快、更强的存储供给能力,并可以实现基于应用容器寻址的能力。
    2.应用容器卷的分配、管理应该是以容器为单位, 所有增值特性如,快照、远程复制等都基于容器的原则来实现。
    3.容器定义存储应该是高度自愈、轻量高效、应用容器感知的系统。自愈、高效我觉得传统存储都具备,但是轻量、容器感知还需要加强。Portworx采用容器实现分布式Scale out容器定义存储,可以提供裸金属性能、启动快和资源占用率低等特点。


    文章来自ICT架构师技术交流ICT_Architect公众号,关注获取更多精彩内容。


    温馨提示:

    请搜索“ICT_Architect”“扫一扫”下面二维码关注公众号,获取更多精彩内容。

    展开全文
  • Kubernetes 1.5 实践 给Pod中的容器定义命令和参数defining a Command and Arguments for a Container 给容器定义一个命令和参数。This page shows how to define commands and arguments when you run a container...

    Kubernetes 1.5 实践 给Pod中的容器定义命令和参数

    defining a Command and Arguments for a Container
    给容器定义一个命令和参数。

    This page shows how to define commands and arguments when you run a container in a Kubernetes Pod.
    这篇文章展示当运行kubernetes pod的时候,如何给容器定义命令和参数。

    When you create a Pod, you can define a command and arguments for the containers that run in the Pod. To define a command, include the command field in the configuration file. To define arguments for the command, include the args field in the configuration file. The command and arguments that you define cannot be changed after the Pod is created.
    当创建Pod的时候,我们可以给这个Pod中的容器定义命令和参数。 定义命令,需要在配置文件中加入command标签。为这个命令定义参数,需要加入args标签。当Pod创建好了以后,定义好的命令和参数不可以被变更和修改。

    The command and arguments that you define in the configuration file override the default command and arguments provided by the container image. If you define args, but do not define a command, the default command is used with your new arguments. For more information, see Commands and Capabilities.
    如果在容器的镜像中定义了命令和参数,那么如果在配置文件中再次定义,则镜像中定义的命令和参数会被覆盖。如果只定义了参数,没有定义命令,那么默认的命令会使用新定义的参数。更多的信息,查看Commands和Capabilities.

    In this exercise, you create a Pod that runs one container. The configuration file for the Pod defines a command and two arguments:
    在这个练习中,会创建一个运行了一个容器的Pod。在配置文件中配置的Pod定义了一个命令和两个参数:
    commands.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: command-demo
      labels:
        purpose: demonstrate-command
    spec:
      containers:
      - name: command-demo-container
        image: debian
        command: ["printenv"]
        args: ["HOSTNAME", "KUBERNETES_PORT"]
    Create a Pod based on the YAML configuration file:
    通过yaml配置文件创建Pod:
    
         kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/commands.yaml
    List the running Pods:
    查看运行的Pods:
    
         kubectl get pods
    The output shows that the container that ran in the command-demo Pod has completed.
    输出可以查看到容器已经在command-demo pod中已经完成。
    
    To see the output of the command that ran in the container, view the logs from the Pod:
    查看容器的输出结果,输出Pod的日志:
    
         kubectl logs command-demo
    The output shows the values of the HOSTNAME and KUBERNETES_PORT environment variables:
    输出显示出HOSTNAME和KUBERNETES_PORT两个环境变量的值
    
         command-demo
         tcp://10.3.240.1:443

    Using environment variables to define arguments
    使用环境变量来定义参数
    In the preceding example, you defined the arguments directly by providing strings. As an alternative to providing strings directly, you can define arguments by using environment variables:

    env:
    - name: MESSAGE
    value: “hello world”
    command: [“/bin/echo”]
    args: [“$(MESSAGE)”]

    This means you can define an argument for a Pod using any of the techniques available for defining environment variables, including ConfigMaps and Secrets.

    NOTE: The environment variable appears in parentheses, “$(VAR)”. This is required for the variable to be expanded in the command or args field.
    Running a command in a shell

    In some cases, you need your command to run in a shell. For example, your command might consist of several commands piped together, or it might be a shell script. To run your command in a shell, wrap it like this:

    command: [“/bin/sh”]
    args: [“-c”, “while true; do echo hello; sleep 10;done”]

    展开全文
  • 我们已经使用过三种容器定义的类型:size_type、iterator、const_iterator.所有容器都定义这三种类型,还定义了以下的类型。 - ================================================================================...
  • c++顺序容器定义和初始化

    千次阅读 2015-04-15 18:54:23
    一、顺序容器定义  容器是容纳特定类型对象的集合。这种容器根据位置来存储和访问元素。就是顺序容器 二、容器适配器  根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型 三...
  • 容器技术是最快被数据中心所广泛接受和采用的技术之一,从2013年起,据统计Docker的下载量已经快达到30亿次,容器已经彻底改变了应用部署方式,但是IT基础设施的管理却没有及时跟上。
  • Python中容器定义

    2020-08-11 17:19:28
    1.定义 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个迭代获取,可以用in,not in关键字判断元素是否包含在容器内。通常这类数据结构把所有的元素储存在内存里,但并不是所有的元素都放在内存中...
  • 顺序容器定义

    2011-09-01 22:09:00
    为了定义一个容器对象,必须包含相关的头文件,即以下头文件之一: #include #include #include 所有的容器都是类模板,要定义某种特殊的容器必须在容器名后面加一对尖括号,尖括号里存放元素类型。 vector a;...
  • 1)首先发表一下感概,看了一些顶层容器的实现过程,发现这些东西有着千丝万缕的联系,例如顺序中加载这一些容器适配器,在SGI中,Alloator这个底层的适配器算是最好的供应者。 2)模板定义之vector template > ...
  • 说明:本文转自... STL实践与分析 --顺序容器定义、迭代器 一、顺序容器定义 顺序容器 容器适配器 vector 支持快速
  • 组建/容器定义

    2014-05-28 10:54:31
    组件/容器:组件是在容器内部执行的一段代码。容器则是为存放在内的组件提供有用服务(比如生命周期、安全、事务、分布等等)的器皿。
  • 两种容器定义的方式各有优缺点,由于SpringBoot使用的是注解形式的容器,所以近几年使用比较多的Spring容器定义是注解定义。本文将从这两种容器定义的实现方式、不同之处、优缺点等多方面介绍两种容器。下图为Spring...
  • 有序容器自主定义排序器

    千次阅读 2014-08-07 20:58:52
    2.如果存储的不是直接对象的话比如对象的指针(通常为智能指针),这个时候我们就要定义自己的比较器。而比较器的写法一般有两种。  ->1.类内重载函数调用运算符的方法。  ->2.以函数的方式提供比较器。 对于第...
  •   在主流的前端框架中都会有容器的概念,但是在Semantic-UI中,如果要定义容器需要通过class="ui container",定义容器后,浏览器会根据不同的像素值判断当前网格的显示大小。 实例:定义容器   通过定义容器...
  • 标准定义Eigen容器vector<>方法 在精读 视觉SLAM十四讲的后,看到这样一行设置vector的代码 typedef vector<Sophus::SE3d, Eigen::aligned_allocatorSophus::SE3d> Trajectory 查阅资料后,说是初始化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,835
精华内容 15,134
关键字:

容器定义