如果你对k8s还不了解,可以看下前文

k8s 实战 1 ---- 初识       (https://www.cnblogs.com/jilodream/p/18245222)

什么是pod,pod在英文中是豌豆荚、分离仓、集装箱的意思。
在k8s中,pod就是融合一堆容器实例的一个大容器(称之为集合更贴切)。
K8s所能部署的最小单元就是容器,就是pod,一个pod可以包含一个容器,也可以包含多个容器。
k8s以pod为最小单元将调度容器到指定的节点上,而无法直接调度某一个具体的容器。因此如果pod中有多个容器的话,那么他们共享同一个ip地址,共享同一套端口列表。
那么我们该如何创建一个pod呢?目前最推荐的做法就是以yaml文件的形式,声明pod,并提交创建。(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )
举个例子:

 1 apiVersion: v1
2 kind: Pod
3 metadata:
4 name: kuard-p
5 spec:
6 containers:
7 - image: docker.io/library/kuard-amd64:blue
8 name: kuard-c
9 ports:
10 - containerPort: 8080
11 name: http
12 protocol: TCP

apiVersion:指的是调用的k8s api的版本,我们目前使用的是v1版本,这个参数不用太关心。
kind:表示我们要创造的资源的类型,k8s除了pod,还有service deployment configmap等等非常多的资源,我们这里传入pod。
对于其他类型的资源大家不要着急,后面需要对每一种常用资源都掌握,才能算熟练掌握k8s的使用。
metadata:元数据,通常会定义关于描述资源的一些基本信息。如标签,名称等。至于什么是标签,这点和java中的注解非常类似,非常重要,但是并不是一定要用,这里我们先跳过。
只定义资源的名称。
spec :spec是specification的缩写,表示规格,也就是你想定义的资源究竟是什么样子的 ?
本文中,(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )我们定义的spec是需要一系列的容器(虽然只有一个)containers。
containers:表示我们需要定义一些容器,其中的每一个 '- image' 表示我们每一个容器的定义,熟悉yaml定义的同学肯定知道,这是数组的含义。
containers,每一个元素分别需要标明:
image: 容器所需镜像
name :容器的名称
ports:容器的端口列表

ports 中每一个端口又需要依次定义:
containerPort: 容器的端口号,
name: 端口名称
protocol:端口使用的协议

这样一份最简单的pod资源定义就算完成了。前文中有讲过,我们需要使用kubectl客户端来和k8s (api server)交互:
首先将上边的模板保存到一份yaml中,假若我们定义为 learnPod.yaml

(1)要求k8s 按照yaml文件创建资源:

kubectl  create -f xxx.yaml   # xxx.yaml为文件名称

1 [root@iZ2ze3bpa0o5cw6gp42ry2Z learnK8s]# k create -f learnPod.yaml
2 pod/busyb-p created

(2)查询k8s中的pod资源用如下命令:
kubectl get pods

[root@iZ2ze3bpa0o5cw6gp42ry2Z learnK8s]# k get pods
NAME READY STATUS RESTARTS AGE
busyb-p 1/1 Running 0 23m

(3) 删除k8s中的资源使用如下命令:

kubectl delete pods xxx (xxx为资源名称)

1 [root@iZ2ze3bpa0o5cw6gp42ry2Z learnK8s]# k delete pods busyb-p
2 pod "busyb-p" deleted

(4)重新刷新资源模板

如果我们创建完pod资源,发现有些地方需要修改怎么办:

推荐做法是编辑刚才我们使用 yaml文件,然后重新提交

kubectl  apply -f xxx.yaml

k8s就会按照文件对已有资源进行修改,一般我们会升级镜像,开放新端口这样来用。
如果有时有些特性的修改,无法直接编辑,则只能删除资源,重新创建来生效。

(5)查看资源详情

有时我们还需要查看pod的详情,则可以使用

kubectl describe pods xxx (xxx为资源名称)

我们常常使用此命令来查看pod的具体信息,如镜像的详情,启动状态的变化等

(6)在线编辑资源模板

如果有时我们在线上,临时需要处理一些问题来编辑资源也可以使用
kubectl edit pods xxx

edit 之后直接保存,视为更新pod,不保存,视为不更新pod。

(7)查看pod(准确的说是pod中容器)的日志
kubectl logs -f xxx (xxx为资源名称)

1 [root@iZ2ze3bpa0o5cw6gp42ry2Z learnK8s]# k logs -f busyb-p
2 2024/07/04 08:33:45 Starting kuard version: v0.10.0-blue
3 2024/07/04 08:33:45 **********************************************************************
4 2024/07/04 08:33:45 * WARNING: This server may expose sensitive
5 2024/07/04 08:33:45 * and secret information. Be careful.
6 2024/07/04 08:33:45 **********************************************************************
7 2024/07/04 08:33:45 Config:
8 {
9 "address": ":8080",

(8) 有时我们需要进入到容器中,看下容器内的具体信息

kubectl exec -it xxx -- /bin/sh (xxx为资源名称)

进入到pod中去,

[root@iZ2ze3bpa0o5cw6gp42ry2Z learnK8s]# k exec -it busyb-p -- /bin/sh
~ $ ls -l
total 17076
drwxr-xr-x 2 root root 4096 Mar 4 2019 bin
drwxr-xr-x 5 root root 360 Jul 4 08:33 dev
drwxr-xr-x 1 root root 4096 Jul 4 08:33 etc ....

除了pod的基本配置外,我们有时还会根据实际业务来配置pod中镜像的拉去策略到模板中
imagePullPolicy:
Always:总是从远程仓库中拉取镜像
ifNotPresent:如果本地仓库中有镜像的话,那么就不拉取,如果本地仓库没有才会选择拉取,这也是默认的拉取策略。
Never:不会从远端拉取镜像,(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )如果本地有镜像的话就使用,如果没有镜像,则会报错。
imagePullPolicy 属于容器属性,和镜像名称、镜像tag属于同一层级。
如下:

.省略..
spec:
containers:
- image: docker.io/library/kuard-amd64:blue
name: kuard-c
imagePullPolicy: IfNotPresent
.省略..

除去这些基本的操作,pod的使用,还非常的复杂,如挂载卷、标签的使用,配合更高级的资源使用(如 deployment、service),限于篇幅有限,只能在后边的文章中介绍。

k8s实战 ---- pod 基础的更多相关文章

  1. k8s之Pod基础概念

    1. 资源限制 Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象.一个Pod代表着集群中运行的一个进程.kubernetes中其他大多数组件都是围绕着Pod来 ...

  2. k8s实战之从私有仓库拉取镜像 - kubernetes

    1.实战目的 从私有docker仓库拉取镜像,部署pod.上一篇中,我们搭建了私有的镜像仓库,这一篇我们将与k8s结合实战使用私有仓库. 2.登录docker 为了完成本次实战,需要登录docker, ...

  3. k8s创建pod和service的过程

    一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...

  4. k8s之pod与Pod控制器

    k8s中最为重要的基础资源,pod,pod controller,service pod controller类型有多种需要向控制器赋值之后使用: kubectl命令使用 kubectk get no ...

  5. K8S实战-构建Django项目-03-使用共享存储

    上篇博文,发布之后,正好跟着双十一,不知道大家剁手了没~~.好啦,言归正传先声明一下,每周1,3,5更新教程,大家如果想要了解更多的教程可以重温一下之前的教程或者,关注崔格拉斯 公众号,大家想要源码的 ...

  6. CentOS 7 yum安装 k8s 创建Pod一直处于ContainerCreating状态 问题解决

    问题描述 使用CentOS7的 yum 包管理器安装了 Kubernetes 集群,使用 kubectl 创建服务成功后,执行 kubectl get pods,发现AGE虽然在不断增加,但状态始终不 ...

  7. 云原生系列1 pod基础

    POD解决了什么问题? 成组资源调度问题的解决. mesos采用的资源囤积策略容易出现死锁和调度效率低下问题:google采用的乐观调度技术难度非常大: 而k8s使用pod优雅的解决了这个问题. po ...

  8. k8s 中 Pod 的控制器

    k8s 中 Pod 的控制器 前言 Replication Controller ReplicaSet Deployment 更新 Deployment 回滚 deployment StatefulS ...

  9. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  10. K8s的POD连接数据库时报错

    [root@cccc xxxx]# ./showlog.sh dr iff-dr-1128668949-lb90g 2017-09-29 03:21:57,575 INFO [org.wildfly. ...

随机推荐

  1. 01 redis 基础入门

    目录 介绍 特点 redis与memcache比较 适用场景 redis 核心配置说明 Redis 对key的通用操作命令 字符串 Hash类型 课程学习地址: https://www.bilibil ...

  2. 不同模式下删除Oracle数据表的三个实例

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

  3. 使用自定义lua解析管理器调用lua脚本中的table

    [5] 使用自定义lua解析管理器调用table 访问数组类型的table CallLuaEntrance测试脚本中内容: //------------------------------------ ...

  4. Java简单实现MQ架构和思路02

    Java MQ的100个功能清单 有重复的 一个消息队列(MQ)可以有以下功能: 批量发送消息:允许将多个消息打包成一个批次发送,可以减少网络传输开销和提高系统吞吐量. 消息过期时间:消息可以设置一个 ...

  5. 2022最新的Centos6.10安装mysql8.0

    一.系统源替换 1.备份系统源 (1)进入源的默认路径 cd /etc/yum.repos.d (2)查看一下 (3)备份 cp CentOS-Base.repo CentOS-Base-Back.r ...

  6. spring boot 整合mybatis 配置多数据源 数据源切换和多数据源的事务

    因为项目中用到了多数据源 不可避免的会有各种各样的问题列一下最主要的问题: 1 如何配置多数据源???2 spring项目中多数据源无法切换???3 操作了2个或者2个以上数据库的数据无法保证事务的一 ...

  7. Vue cli之单文件组件

    组件有两种:脚本化组件.单文件组件 脚本化组件的缺点: html代码是作为js的字符串进行编写,所以组装和开发的时候不易理解,而且没有高亮效果. 脚本化组件用在小项目中非常合适,但是复杂的大项目中,如 ...

  8. JDBC的简单使用以及介绍

    JDBC(Java DataBase Connectivity) Java 语言连接数据库 再本模块中,java提供里一组用于连接数据库的类和接口 Java 语言开发者,本身没有提供如何具体连接数据库 ...

  9. c#WinFrom自定义图表仪表控件-频谱

    这是为客户定制的一个频谱图表控件,先看下成品效果,gif较大,略等片刻 开发步骤分析: 1.界面有多个间距不等的线分割的区域,每个区域的值范围不同,我们就需要把每个区域定义出来,方便我们操作的时候来计 ...

  10. Azkaban快速入门

    先说一些废话 因为之前自己工作中有用过Azkaban作为自动化任务调度工具,所以想参考自己之前的使用经验,总结一下关于Azkaban的使用,方便大家使用Azkaban快速实现企业级自动化任务 如何选择 ...