• k8s之Pod, ReplicationController介绍


    pod是k8s调度最小单位,一个pod可以包含多个容器,各容器之间共享同一个网络。
    可以通过yml文件创建一个pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

    yml文件中各个属性 

    kind: 指定创建资源的角色/类型
    metadata: 资源的元数据/属性
    metadata下name和labels分别为
    name: 资源的名字,在同一个namespace中必须唯一
    labels: 设定资源的标签
    spec: 指定该资源的内容

    spec:#specification of the resource content 指定该资源的内容  
        restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器  
        nodeSelector:     #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1  
            zone: node1
        containers:  #容器
        - name: nginx  #容器名字
          image: nginx  #镜像名字
          ports:
          - containerPort: 80  #容器对外开放的端口

    启动pod 

    通过Kubectl version可以查看看k8s版本
    根据pod的yml文件启动一个pod

    kubectl create -f pod_nginx.yml

    根据当前的pod_yaml文件创建一个pod,会显示pod “nginx” created 

    我们通过

    kubectl get pods

    可以看到nginx 的pod已经运行 

    也可以通过

    kubectl get pods -o wide

    查看详细信息 

    NAME    READY    STATUS    RESTARTS    AGE      IP             NODE
    nginx    1/1     RUNNING    0           1m    172.17.0.4      minikube

    可以看到容器 运行在minikube这个节点上, 容器的ip为172.17.0.4 

    我们通过minikube ssh 进入virtualbox里, 这样通过docker ps可以查看虚拟机中运行的容器
    我们通过docker network list 查看 虚拟机内部的所有网络
    docker network inspect bridge 查看bridge网络
    可以看到bridge网络里有容器为nginx的容器网络地址为172.17.0.4,正好就是我们通过kubectl get pods -o wide获取的
    除此之外,我们可以通过

    kubectl exec -it nginx  sh

    这种方式直接进入nginx pod 里的容器里了。 

    如果pod中有多个容器,可以选择进入某个容器
    我们可以先查看nginx pod中的容器

    kubectl describe pods nginx

    接下来我们可以通过-c 选项进入指定容器 

    kubectl exec -c 容器id

    我们启动pod后,容器运行在pod中,外界无法访问,需要将pod的端口暴漏出去 

    kubectl  port-forward nginx 8080:80

    这样就将nginx容器内部的80端口映射为本机的8080端口,可以通过127.0.0.1:8080访问nginx服务了。 

    接下来我们删除pod

    kubectl delete -f pod_nginx.yml

    查看运行pod 

    kubectl get pods

    编写yml,实例类型为ReplicationController 

    apiVersion: v1
    kind: ReplicationController 
    metadata:
      name: nginx
    spec:
      replicas: 3
      selector:
        app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80

    selector是选择器,告诉Service之间如何发现pod 

    teplate定义了pod格式
    metadata是pod的元信息
    spec指定pod内容,containers定义了容器
    接下来我们启动ReplicationController

    kubectl create -f rs_nginx.yml

    因为我们定义了副本数量为3,所以启动三个pod 

    kubectl get rc

    查看replicationcontroller,可以看到启动了nginx的controller 

    同时,我们查看下pods

    kubectl get pods

    当我们删除其中一个pod时,controller会重新启动一个pod,保证副本数为三个 

    kubectl delete pods nginx-6r92b

    再次查看kubectl get pods 查看pod列表,发现pod数量仍为三个 

    我们也可以扩充副本数量

    kubectl scale rc nginx --replicas=2

    同样我们可以通过replicaset 设置启动pod 

    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: nginx
      labels:
        tier: frontend
    spec:
      replicas: 3
      selector:
        matchLabels:
          tier: frontend
      template:
        metadata:
          name: nginx
          labels:
            tier: frontend
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80

    按照上述yml,可以通过kubectl启动yml从而根据配置的replicaset信息自动创建pod和容器。

  • 相关阅读:
    [arc067F]Yakiniku Restaurants[矩阵差分]
    [2016北京集训测试赛3]masodik-[凸包]
    [WC2010][BZOJ1758]重建计划-[二分+分数规划+点分治]
    [2016北京集训测试赛7]isn-[树状数组+dp+容斥]
    [BZOJ1565][NOI2009]植物大战僵尸-[网络流-最小割+最大点权闭合子图+拓扑排序]
    [2016北京集训试题7]thr-[树形dp+树链剖分+启发式合并]
    [2016北京集训测试赛1]奇怪的树-[树链剖分]
    [2016北京集训测试赛1]兔子的字符串-[后缀数组+二分]
    模拟 [Sdoi2010]猪国杀
    DP 小奇挖矿2
  • 原文地址:https://www.cnblogs.com/secondtonone1/p/14230014.html
Copyright © 2020-2023  润新知