Pods

在上一篇也说明了,pods是kubernetes的最小部署单元,并且所有在pods中的container共享namespaces

那么为什么需要pods这样的概念?

因为在实际中,我们有一种需求,某些进程需要部署在一台机器上,通过IPC或者本地文件来通信,比如因为他们之间数据传输比较大

那么现在我们用容器技术,我们的container就表示一个虚拟的机器,如果我们把多个进程都放在一个container里面可以吗?

肯定可以,但是问题在于,你使用容器的目的就是要平台来帮你管理和监控容器,那么容器就应该是最小的failover单元,如果你在容器里面加上很多process,那么这些process的管理和监控谁来做,又回到了原来的问题,所以一个container比较好的用法是只有一个process

这里如果每个容器一个process,那么容器的namespaces是隔离的,通信会比较麻烦,而且按容器调度也无法保证local

所以自然需要pods这样的higher-level概念,来便于容器的编排,把多个容器变成一个single unit

Pods内部因为共享namesapces,就和一台机器上一样,用IPC就可以简单的通信;那么Pods之间如何通信,Pods之间也可以通过ip直接通信,无论这些Pods被部署在什么地方,但他们都像一个local area network (LAN)一样,可以随意访问对方。

那么我们应该怎么使用pods?怎么把container分配到不同的pods中?

我的理解,没有充分的理由,那就应该一个pod对应于一个container;只有有充分的理由要把多个container绑定在一起的时候,才把他们放到一个pod中

创建Pod

首先创建yaml文件,里面包含这个pod的metadata和spec信息,其中的containerPort只是说明性的

docker和kubernetes中所有组件的配置都是类似这种yaml格式,

如果不清楚具体的格式,可以用explain来查看各个字段的解释

kubectl explain pods

kubectl explain pod.spec

根据Yaml创建Pods,

kubectl create -f kubia-manual.yaml

查看运行Pods的完整定义,


kubectl get po kubia-manual -o yaml

kubectl get po kubia-manual -o json

查看所有Pods,

kubectl get pods

当Pods和Container跑起来后,怎么查看他们的log?

对于docker容器,日志会被输出到标准输出,然后docker runtime会把这些日志重定向到文件,你需要登录到Pod所在的机器,用命令查看

docker logs <container id>

这样很麻烦,Kubernetes提供更简单的方法,

kubectl logs kubia-manual

看某个container

kubectl logs kubia-manual -c kubia

之前看到,可以创建service去把Pods的服务提供出去,但在之前想debug或测试,有没有其他更简单的访问方式


kubectl port-forward kubia-manual 8888:8080

Kubernetes allows you to configure port forwarding to the pod.
This is done through the kubectl port-forward command. The command will forward your machine’s local port 8888 to port 8080 of your kubiamanualpod

Pods标签

labels,干啥用的?

当Pods很多的时候,我们需要去组织和管理pods,组织和管理的标准方法,是分类
lables类似tags,被打上标签的Pods,就被分到各种类别中

如下图,我们可以按照app,rel两个维度的lables来组织各种服务

相关的命令如下,

label可以在创建pods的时候带上,

你可以查看所有pods的label,

或某些特定的label,

当然你可以动态的改label,新增或覆盖修改

kubectl label po kubia-manual creation_method=manual

kubectl label po kubia-manual-v2 env=debug --overwrite

当然有了label,你可以通过label来筛选所有的Pods,

有label的不光是Pods,其实我们也可以给work node加上labels,这样就可以做到按label来schedule Pods,

比如有些Pods需要GPU,那么就需要把他调度到有GPU的work node上,

具体做法,

先给worknode加上label,

kubectl label node gke-kubia-85f6-node-0rrx gpu=true

然后在创建Pod的Yaml指定nodeselector,

Pods Annotation

大段的注释,不具备功能性,说明性文字,最大到256kb

$ kubectl annotate pod kubia-manual mycompany.com/someannotation="foo bar"

pod "kubia-manual" annotated

$ kubectl describe pod kubia-manual

...

Annotations: mycompany.com/someannotation=foo bar

Namespaces

这个和label容易混淆,Namespaces是用户把集群划分的,是non-overlapping的分类;而label是可以overlapping的

比如把系统分成几个部分,以给多个用户使用,或是把系统分成产品,开发,QA环境

可见命名空间是一种管理和组织的方式,把一个整体的资源,划分成多块,用于不同的用途或用户,但并不会去真正隔离

Although namespaces allow you to isolate objects into distinct groups,
which allows you to operate only on those belonging to the specified namespace, they don’t provide any kind of isolation of running objects

可以列存所有Namespaces,正常情况下,都是默认在default命名空间

你可以看某个ns下的pods,

创建ns

$ kubectl create namespace custom-namespace

namespace "custom-namespace" created

在ns下创建资源

$ kubectl create -f kubia-manual.yaml -n custom-namespace

pod "kubia-manual" created

删除Pods

$ kubectl delete po kubia-gpu

pod "kubia-gpu" deleted

$ kubectl delete po -l creation_method=manual

pod "kubia-manual" deleted

pod "kubia-manual-v2" deleted

kubernetes in action - Pods的更多相关文章

  1. Kubernetes工作流之Pods一

    This page provides an overview of Pod, the smallest deployable object in the Kubernetes object model ...

  2. kubernetes in action - Overview

    传统的应用都是“monoliths”,意思就是大应用,即所有逻辑和模块都耦合在一起的 这样明显很挺多问题的,比如只能scale up,升级必须整体升级,扩容 所以我们就想把大应用,broken dow ...

  3. Kubernetes工作流之Pods二

    Init Containers This feature has exited beta in 1.6. Init Containers can be specified in the PodSpec ...

  4. kubernetes in action - Services

    问题,如何将Pod所提供的功能提供给别人用?微服务,是服务,所以关键要把服务提供出去 直接把pod的静态ip提供给用户用,这个会有很多问题,比如failover,扩容,负载均衡等 所以需要servic ...

  5. kubernetes in action - Replication Controller

    理解这个问题,就是pods在Kubernetes中怎么进行failover 在Kubernetes的work node上有kubelet,会负责监控该work node上的pods,如果有contai ...

  6. 读书笔记 | Kubernetes in Action

    1 Kubernetes介绍 Kubernetes(以下简称K8s) 是一个部署和管理容器化应用的软件系统.它将底层基础设施抽象,简化了应用的开发.部署,以及对开发和运维团队的管理. K8s由一个主节 ...

  7. kubernetes in action - Volumes

    Volume解决Kubernetes的存储的问题 对于Pod使用的存储,抽象为volume,volume伴随着Pod的创建而创建,消失而同时消失,不能单独的创建 这样的好处,是存储的塑胶不会因为某个c ...

  8. 三小时学会Kubernetes:容器编排详细指南

    三小时学会Kubernetes:容器编排详细指南 如果谁都可以在三个小时内学会Kubernetes,银行为何要为这么简单的东西付一大笔钱? 如果你心存疑虑,我建议你不妨跟着我试一试!在完成本文的学习后 ...

  9. Kubernetes基础:Service

    本文的试验环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 Service 介绍 我们通过Pod.Deplo ...

随机推荐

  1. WebService - 基础概念

    一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...

  2. C++设计模式——适配器模式

    生活中的适配器 买笔记本电脑,买手机时,都有一个电源适配器,电源适配器又叫外置电源,是小型便携式电子设备及电子电器的供电电压变换设备,常见于手机,笔记本电脑上.它的作用是将家里的220V高电压转换成这 ...

  3. .Net Core---- 通过EPPlus批量导出

    前台代码: 前台代码是在.net core bootstrap集成框架上的(这是效果浏览地址:http://core.jucheap.com[效果地址来自:http://blog.csdn.net/a ...

  4. 【原创】数据库基础之Mysql(1)常用命令

    1 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 比如 create user 'test_user'@'%' identi ...

  5. iOS 新建xib文件时,最外层view的约束问题

    今天用在利用xib实例化view 时, 生成的view的自动布局总是用问题.具体来说,宽和高都不能和父view正确变化.仔细检查,发现下图: 注意这里右上角的Autoresizing部分,并没有设置正 ...

  6. js中循环对比(for循环,foreach,for in,for of ,map)

    对空位的处理 for循环(不会忽略空位,标记undefined) var arr =[1,2,undefined,3,null,,7] for (let i=0;i<arr.length;i++ ...

  7. 树上背包O(n*m^2)|| 多叉树转二叉树 || o(n*m)???

    #. 选课 描述 提交 自定义测试 问题描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有 ...

  8. HDU 5977 Garden of Eden

    题解: 路径统计比较容易想到点分治和dp dp的话是f[i][j]表示以i为根,取了i,颜色数状态为j的方案数 但是转移这里如果暴力转移就是$(2^k)^2$了 于是用FWT优化集合或 另外http: ...

  9. leetcode刷题第二天<两数相加>

    题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  10. In the beginning, Coders create the repos and blogs

    ---恢复内容开始--- 这是一个新的博客 print(‘hello new world’) 这个博客叫做 brain in a jar, 不知道以后会不会改名. 只是因为偶然想到了普特南的缸中之脑理 ...