k8s实战 2 ---- pod 基础

k8s,pod · 浏览次数 : 43

小编点评

本文介绍了Kubernetes(k8s)中Pod的基本概念、创建、查询、删除、刷新、查看详情和在线编辑等操作。Pod是Kubernetes中最小的部署单元,可以包含一个或多个容器。本文通过一个简单的例子,展示了如何创建、查询、删除和刷新Pod资源。 1. **Pod概述**:Pod是Kubernetes中融合了一堆容器实例的大容器,可以包含一个或多个容器。Pod共享同一个IP地址和端口列表,且无法直接调度某个具体的容器。 2. **创建Pod**:通过YAML文件创建Pod,例如: - 使用`kubectl create -f learnPod.yaml`命令创建Pod。 - 使用`kubectl get pods`命令查询Pod资源。 - 使用`kubectl delete pods`命令删除Pod。 - 使用`kubectl apply -f learnPod.yaml`命令刷新Pod资源。 3. **Pod详细信息**:使用`kubectl describe pods`命令查看Pod的详细信息,包括镜像详情、启动状态等。 4. **在线编辑Pod资源**:使用`kubectl edit pods`命令在线编辑Pod资源,保存后视为更新,不保存则视为不更新。 5. **查看Pod日志**:使用`kubectl logs -f`命令查看Pod中容器的日志。 6. **Pod的高级用法**:包括挂载卷、标签使用,以及配合Deployment、Service等高级资源的使用,将在后续文章中详细介绍。 总的来说,Pod是Kubernetes中的基础概念,掌握Pod的创建、查询、删除、刷新、查看详情和在线编辑等操作对于理解和运用Kubernetes至关重要。

正文

如果你对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中的注解非常类似,非常重要,但是并不是一定要用,这里我们先跳过。
只定义资源的名称。
specspec是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

1 [root@iZ2ze3bpa0o5cw6gp42ry2Z learnK8s]# k get pods
2 NAME                              READY   STATUS    RESTARTS   AGE
3 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中去,

 

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

 

除了pod的基本配置外,我们有时还会根据实际业务来配置pod中镜像的拉去策略到模板中

imagePullPolicy
Always:总是从远程仓库中拉取镜像
ifNotPresent:如果本地仓库中有镜像的话,那么就不拉取,如果本地仓库没有才会选择拉取,这也是默认的拉取策略。
Never:不会从远端拉取镜像,(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )如果本地有镜像的话就使用,如果没有镜像,则会报错。
imagePullPolicy 属于容器属性,和镜像名称、镜像tag属于同一层级。
如下:

 

1 .省略..
2 spec:
3   containers:
4     - image: docker.io/library/kuard-amd64:blue
5       name: kuard-c
6       imagePullPolicy: IfNotPresent
7 .省略..

 

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

与k8s实战 2 ---- pod 基础相似的内容:

k8s实战 2 ---- pod 基础

如果你对k8s还不了解,可以看下前文 k8s 实战 1 初识 (https://www.cnblogs.com/jilodream/p/18245222) 什么是pod,pod在英文中是豌豆荚、分离仓、集装箱的意思。在k8s中,pod就是融合一堆容器实例的一个大容器(称之为集合更贴切)。K8s所能部

[转帖]记一次靠谱的 K8S 排错实战过程,硬核!

http://blog.itpub.net/31545813/viewspace-2925035/ 一 背景 收到测试环境集群告警,登陆 K8s 集群进行排查。 二 故障定位 2.1 查看 Pod 查看 kube-system node2 节点 calico pod 异常。 查看详细信息,查看nod

[转帖]记一次靠谱的 K8S 排错实战过程,硬核!

http://blog.itpub.net/31545813/viewspace-2925035/ 一 背景 收到测试环境集群告警,登陆 K8s 集群进行排查。 二 故障定位 2.1 查看 Pod 查看 kube-system node2 节点 calico pod 异常。 查看详细信息,查看nod

微服务实践k8s&dapr开发部署实验(2)状态管理

新建webapi项目 建项目时取消https支持,勾选docker支持, Program.cs中注释下面语句,这样部署后才能访问Swagger // Configure the HTTP request pipeline. //if (app.Environment.IsDevelopment())

基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用

安装负载均衡metalb 安装metalb kubectl create namespace metallb-system 配置metalb #kubectl create secret generic -n metallb-system memberlist --from-literal=secr

Jenkins + SVN/Git + Maven + Docker + 阿里云镜像 + Kubernetes(K8S)

Jenkins 2361.2 + Maven Integration + SVN/GIT + Docker + 阿里云镜像 + Kubernetes(K8S) 本文用于学习,了解原理,和实际应用,有所差别,特别是 Post Steps 步骤中,方式很多,根据实际情况而定。 实际应用中,一般 Pipe

[转帖]k8s 服务注册与发现(三)CoreDNS

CoreDNS 作为一个加入 CNCF(Cloud Native Computing Foundation) 的服务 CoreDNS 的实现可以说的非常的简单。 介绍 整个 CoreDNS 服务都建立在一个使用 Go 编写的 HTTP/2 Web 服务器 Caddy · GitHub 上,CoreD

五分钟k8s实战-使用Ingress

背景 前两章中我们将应用部署到了 k8s 中,同时不同的服务之间也可以通过 service 进行调用,现在还有一个步骤就是将我们的应用暴露到公网,并提供域名的访问。 这一步类似于我们以前配置 Nginx 和绑定域名,提供这个能力的服务在 k8s 中成为 Ingress。 通过这个描述其实也能看出 I

实战 k8s----初识

什么是k8s?k8s是谷歌开源的一套完整的容器管理平台,方便我们直接管理容器应用。谷歌称之为,kubernetes,[kubə’netis] ,(跟我一起读库波尔耐题思,重音在耐的音上),由于字母太多,我们简称为k8s,8代表k-->s之间的8个字母。kubernetes 译为舵手,标识是一个航海舵

k8s 入门到实战--部署应用到 k8s

![k8s 入门到实战 01.png](https://s2.loli.net/2023/09/04/ymUpcXZrxfNsT91.png) # 背景 最近这这段时间更新了一些 k8s 相关的博客和视频,也收到了一些反馈;大概分为这几类: - 公司已经经历过服务化改造了,但还未接触过云原生。 -