为了解决多应用联合运行的问题,同时还要不破坏容器的隔离,就要再对多个容器进行打包。Pod就是对容器的打包,里面的容器可以看成是一个整体,总是能一起调度、一起运行,绝不会出现分离的情况,而Pod属于Kubernetes,可以在不触碰下层容器的情况下任意定制和修改,Kubernetes让Pod去编排容器,然后将Pod作为应用调度部署的最小单位

概括起来,Pod是Kubernetes的调度单位,代表一个或一组容器,所有的Kubernetes功能都必须通过Pod来实现

使用YAML描述Pod

因为Pod是API对象,所以必然也有apiVersion、kind、metadata、spec这四个基本组成部分,对Pod来说apiVersion、kind固定为v1和Pod,而一般来说,metadata里应该有name和labels这两个字段。使用Docker创建容器时,可以不给容器起名字,但在Kubernetes里,Pod必须要有一个名字,这也是Kubernetes里所有资源对象的一个约定

apiVersion: v1da
kind: Pod
metadata:
name: busy-pod
labels:
owner: test
env: demo
region: north
tier: back

metadata写上name和labels即可,而spec需要管理,维护Pod,其中有许多关键信息,containers是其中最重要的信息

containers是一个数组,其中的每一个元素是一个container对象,也就是容器,同时必须要有一个name表示名字,然后还要有一个image字段来说明它使用的镜像,name和image是必须要指定的

如下编写一段spec

spec:
containers:
-image: busybox:latest
name: busy
imagePullPolicy: IfNotPresent
env:
- name: os
value: "ubuntu"
- name: debug
value: "on"
command:
- /bin/echo
args:
- "$(os),$(debug)"

image指定使用镜像busybox:latest,imagePullPolicy拉取策略是IfNotPresent,然后定义了os和debug两个环境变量,command启动命令是/bin/echo,参数中输出刚才定义的环境变量

使用kubectl操作Pod

一系列操作Pod的kubectl命令

创建、删除和输出

applydelete可以创建和删除Pod,使用-f指定YAML文件,也可以直接使用YAML用name字段定义的名称,Kubernetes的Pod在后台运行,所以看不到输出信息,可以使用logs来展示Pod的标准输出信息

$ minikube kubectl -- apply -f busy-pod.yml
$ minikube kubectl -- delete -f busy-pod.yml
$ minikube kubectl -- delete pod busy-pod # 指定名字删除

使用logs会将Pod的标准输出信息流展示,展示了command中写入的echo命令的输出:

$ minikube kubectl -- logs busy-pod
ubuntu,on

检查状态

使用get pod可以查看Pod列表和运行状态:

$ minikube kubectl -- get pod
NAME READY STATUS RESTARTS AGE
busy-pod 0/1 CrashLoopBackOff 3 (31s ago) 71s
ngx 1/1 Running 3 (43m ago) 47h

这个busy-pod节点运行的状态是CrashLoopBackOff,可以使用describe来检查它的详细状态:

 minikube kubectl -- describe pod busy-pod
Name: busy-pod
Namespace: default
Priority: 0
Node: minikube/192.168.59.100
Start Time: Sun, 24 Jul 2022 21:11:30 +0800
Labels: env=demo
owner=test
region=north
tier=back
Annotations: <none>
Status: Running
IP: 172.17.0.6
IPs:
IP: 172.17.0.6
....
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6m47s default-scheduler Successfully assigned default/busy-pod to minikube
Normal Pulled 5m25s (x5 over 6m46s) kubelet Container image "busybox:latest" already present on machine
Normal Created 5m25s (x5 over 6m46s) kubelet Created container busy
Normal Started 5m25s (x5 over 6m46s) kubelet Started container busy
Warning BackOff 105s (x25 over 6m44s) kubelet Back-off restarting failed container

在末尾的Events部分,显示的是Pod运行过程中的一些关键节点事件,对于这个busy-pod,因为只执行了一条echo命令则退出,而Kubernetes默认重启Pod,所以就会进入一个反复启动停止的状态

交互

cp命令可以将文件拷贝进Pod中,如下将test.txt拷贝进Pod的tmp目录中:

$ echo 'aaa' > test.txt
$ minikube kubectl -- cp test.txt ngx:/tmp

也可以打开一个shell进行命令交互:

$ minikube kubectl -- exec -it ngx -- sh
/ # ls
bin etc mnt run tmp
dev home opt sbin usr
docker-entrypoint.d lib proc srv var
docker-entrypoint.sh media root sys

Kubernetes入门实践(Pods)的更多相关文章

  1. 微服务 + Docker + Kubernetes 入门实践 目录

    微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...

  2. kubernetes入门实践

    k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...

  3. Kubernetes性能测试实践

    本文由  网易云 发布. 概述 随着容器技术的发展,容器服务已经成为行业主流,然而想要在生产环境中成功部署和操作容器,关键还是容器编排技术.市场上有各种各样的容器编排工具,如Docker原生的Swar ...

  4. kubernetes 入门学习

    kubernetes 学习 kubernetes 简介 Kubernetes这个名字源自希腊语,意思是"舵手",也是"管理者","治理者"等 ...

  5. 第一章 Kubernetes入门

    第一章 Kubernetes入门 kubernetes是基于容器技术的分布式架构领先方案,是一个完备的分布式系统支撑平台. kubernetes带来的好处:1)全面拥抱微服务:2)统可以随时随地整体“ ...

  6. Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型

    机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...

  7. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  8. sass、less和stylus的安装使用和入门实践

    刚 开始的时候,说实话,我很反感使用css预处理器这种新玩意的,因为其中涉及到了编程的东西,私以为很复杂,而且考虑到项目不是一天能够完成的,也很少是 一个人完成的,对于这种团队的项目开发,前端实践用c ...

  9. Django入门实践(三)

    Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...

  10. Django入门实践(二)

    Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...

随机推荐

  1. down_interruptible()获取信号量

    信号量(Semaphore)是操作系统中最典型的用于同步和互斥的手段,信号量的值可以是0.1或者n.信号量与操作系统中的经典概念PV操作对应. P(S):①将信号量S的值减1,即S=S-1:②如果S≥ ...

  2. vector的使用方法

    vector是STL容器的可变长度数组.可变长度数组的头文件是<vector>,有以下常见的使用方法: 1.vector<int> v(N,i):建立一个可变长度数组v,内部元 ...

  3. K-th occurrence (后缀自动机上合并权值线段树+树上倍增)

    K-th occurrence (后缀自动机上合并权值线段树+树上倍增)   You are given a string SSS consisting of only lowercase engli ...

  4. STL练习-简单计算器

    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔.没有非 ...

  5. MacOS 使用UnblockNeteaseMusic解锁网易云灰色歌曲(主要是想听杰伦)

    最近想听杰伦的音乐 但是网易云木有版权 于是在github上找到了UnblockNeteaseMusic这个项目 不多废话 直接上教程! 第一步 找到该项目的地址 并使用git克隆到本地: https ...

  6. Markdown基础语法练习

    Markdown语法学习 标题 三级标题 四级标题 字体 hello,world! 两端各两个*****号 hello,world! 两端各一个*****号 hello,world! 两端各三个*** ...

  7. 论 C++、C语言中指针的实用价值(一)

    指针的价值在于哪里?单纯为了迷惑别人?其实并非如此.本系列长期总结一些必须用指针或者用指针很好的场合: 写任何的代码都必须有一定的动机.而不是想怎么写就怎么写 写代码不是纯灵感的行为.也不是纯机械的行 ...

  8. win10 python + selenium 环境搭建

    一.安装python3 1.下载地址: https://www.python.org/downloads/windows/ 直接选择最新版,下拉 file列表中,选择win10版 64位  Windo ...

  9. MySql 入门——日期计算

    MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等 SELECT TIMESTAMPDIFF( ...

  10. 应用和 IPv6

    应用和 IPv6 前言 在数据中心网络IPv6协议改造时,我们通常更关注路由交换的部分.对于应用系统适配IPv6 网络确缺少关注,本文旨在更多的讨论应用和IPv6 的关系,帮助个人.公司和组织能够更改 ...