Day02-Pod资源清单编写,资源的增删改查,镜像的下载策略及常见的Pod相关面试题实战

Day02-Pod资源清单编写,资源的增删改查,镜像的下载策略及常见的Pod相关面试题实战

  • 0、昨日内容回顾:
  • 1、K8S资源清单
  • 2、实战案例
  • 3、K8S的Pod资源运行多个容器案例
  • 4、故障排查案例
  • 5、环境准备
  • 6、故障常用命令
  • 7、面试题
    • Q1: 当一个Pod有多个容器时,如果连接到指定的容器?
    • Q2: 如果查看一个Pod最近20分钟的日志?
    • Q3: 如果查看一个Pod上一个容器的日志,上一个挂掉的容器日志?
    • Q4: 使用kubectl logs无法查看日志是什么原因,如何让其能够查看呢?
    • Q5: 如何实现Pod的容器的文件和宿主机之间相互拷贝?
    • Q6: 镜像下载策略有哪些?请分别说明?
    • Q7: 容器的重启策略有哪些?请分别说?

0、昨日内容回顾:

  • harbor基于https的部署

    • 自建CA证书
    • 基于自建证书创建docker engine的证书
    • 创建harbor客户端证书
    • 修改配置文件并启动服务
  • kubernetes简史

  • kubernetes的架构

    • Control Plane:
      控制K8S集群的组件。

      • Api Server:
        集群的访问入口。
      • etcd:
        存储集群的数据。一般情况下,只有API-SERVER会访问.
      • Control Manager:
        维护集群的状态。
      • Scheduler:
        负责Pod的调度功能。
    • Worker Node:
      实际运行业务的组件。

      • kubelet:
        管理Pod的生命周期,并上报Pod和节点的状态。
      • kube-proxy:
        对K8S集群外部提供访问路由。底层可以基于iptables或者ipvs实现。
  • Kubernetes的常见术语

    • CNI:
      Container Network Interface
      容器网络插件,主要用于跨节点的容器进行通信的组件。
    • CRI:
      Container Runtime Interface
      容器运行接口,主要用于kubelet调用容器的生命周期管理相关即可。
      docker-shim —> cir-dockerd,在K8S 1.24已经弃用!
      若更高版本想要使用docker,需要单独部署docker-shim组件即可。
  • Kubernetes部署方式

    • kubeadm:
      快速构建K8S集群,需要单独安装docker,kubectl,kubeadm,kubelet。
      基于容器快速部署K8S集群。

    • 二进制部署:
      需要去官方下载最新的二进制软件包,编写启动脚本。

  • kubernetes的高可用架构设计

1、K8S资源清单

apiVersion:指的是Api的版本。
kind:资源的类型。
metadata:资源的元数据。比如资源的名称,标签,名称空间,注解等信息。
spec:用户期望资源的运行状态。
staus:资源实际的运行状态,由K8S集群内部维护。

2、实战案例

(1)创建工作目录

[root@k8s231.oldboyedu.com ~]# mkdir -pv /manifests/pods/ && cd /manifests/pods/

(2)编写资源清单

[root@k8s231.oldboyedu.com pods]# cat 01-nginx.yaml 
# 指定API的版本号
apiVersion: v1
# 指定资源的类型
kind: Pod
# 指定元数据
metadata:# 指定名称name: linux85-web
# 用户期望的资源状态
spec:# 定义容器资源containers:# 指定的名称- name: nginx# 指定容器的镜像image: nginx:1.14.2

(3)创建资源清单

[root@k8s231.oldboyedu.com pods]# kubectl create -f 01-nginx.yaml 
pod/linux85-web created

(4)查看资源

[root@k8s231.oldboyedu.com pods]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP           NODE                   NOMINATED NODE   READINESS GATES
linux85-web   1/1     Running   0          12s   10.100.2.5   k8s233.oldboyedu.com   <none>           <none>
[root@k8s231.oldboyedu.com pods]#  curl -I 10.100.2.5 
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 13 Apr 2023 02:33:00 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: "5c0692e1-264"
Accept-Ranges: bytes相关字段说明:NAME代表的是资源的名称。READY   代表资源是否就绪。比如 0/1 ,表示一个Pod内有一个容器,而且这个容器还未运行成功。STATUS    代表容器的运行状态。RESTARTS   代表Pod重启次数,即容器被创建的次数。AGE     代表Pod资源运行的时间。IP            代表Pod的IP地址。NODE代表Pod被调度到哪个节点。其他:	"NOMINATED NODE和"READINESS GATES"暂时先忽略哈。

(5)删除资源

[root@k8s231.oldboyedu.com pods]# kubectl delete -f 01-nginx.yaml 
pod "linux85-web" deleted

3、K8S的Pod资源运行多个容器案例

(1)编写资源清单

[root@k8s231.oldboyedu.com pods]# cat 02-nginx-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:name: linux85-nginx-tomcat
spec:containers:- name: nginximage: nginx:1.23.4-alpine- name: tomcatimage: tomcat:jre8-alpine[root@k8s231.oldboyedu.com pods]# kubectl create -f 02-nginx-tomcat.yaml

(2)查看Pod状态

[root@k8s231.oldboyedu.com pods]# kubectl get pod
[root@k8s231.oldboyedu.com pods]# kubectl describe pod linux85-nginx-tomcat 

(3)删除Pod

[root@k8s231.oldboyedu.com pods]# kubectl delete pod linux85-nginx-tomcat 
pod "linux85-nginx-tomcat" deleted

4、故障排查案例

(1)资源清单

[root@k8s231.oldboyedu.com pods]# cat 03-nginx-alpine.yaml 
apiVersion: v1
kind: Pod
metadata:name: linux85-nginx-alpine
spec:# 使用宿主机网络,相当于"docker run --network host"hostNetwork: truecontainers:- name: nginximage: nginx:1.23.4-alpine- name: linuximage: alpine# 给容器分配一个标准输入,默认值为false# stdin: true# 给容器分配一个启动命令,修改Dockerfile的CMD指令# args: ["tail","-f","/etc/hosts"]# 也可以修改command字段,相当于修改Dockerfile的ENTRYPOINT指令# command: ["sleep","15"]# args也可以和command命令搭配使用,和Dockfile的ENTRYPOINT和CMD效果类似command:- "tail"args:- "-f"- "/etc/hosts"

(3)创建Pod

[root@k8s231.oldboyedu.com pods]# kubectl apply -f 03-nginx-alpine.yaml 
pod/linux85-nginx-alpine created

5、环境准备

(1)下载镜像

docker pull jasonyin2020/oldboyedu-games:v0.4 
docker pull jasonyin2020/oldboyedu-games:v0.1

(2)将镜像打包

docker tag jasonyin2020/oldboyedu-games:v0.1 harbor.oldboyedu.com/oldboyedu-games/jasonyin2020/oldboyedu-games:v0.1
docker tag jasonyin2020/oldboyedu-games:v0.4 harbor.oldboyedu.com/oldboyedu-games/jasonyin2020/oldboyedu-games:v0.4

(3)将镜像推送到harbor仓库

docker push harbor.oldboyedu.com/oldboyedu-games/jasonyin2020/oldboyedu-games:v0.1
docker push harbor.oldboyedu.com/oldboyedu-games/jasonyin2020/oldboyedu-games:v0.4

课堂练习:

将"harbor.oldboyedu.com/oldboyedu-games/jasonyin2020/oldboyedu-games:v0.1"镜像使用Pod部署,并在浏览器中可以访问。

参考案例:

[root@k8s231.oldboyedu.com pods]# cat 04-ketanglianxi.yaml 
apiVersion: v1
kind: Pod
metadata:name: linux85-game-001
spec:hostNetwork: true# 将Pod调度到指定节点,注意,该node名称必须和etcd的数据保持一致nodeName: k8s232.oldboyedu.comcontainers:- name: gameimage: harbor.oldboyedu.com/oldboyedu-games/jasonyin2020/oldboyedu-games:v0.1

6、故障常用命令

(1)将Pod容器的文件拷贝到宿主机

[root@k8s231.oldboyedu.com pods]# kubectl get pods
NAME               READY   STATUS    RESTARTS   AGE
linux85-game-008   1/1     Running   0          4m15s
[root@k8s231.oldboyedu.com pods]# 
[root@k8s231.oldboyedu.com pods]# kubectl cp linux85-game-008:/start.sh /tmp/start.sh

(2)连接到Pod的容器

[root@k8s231.oldboyedu.com pods]# kubectl get pods
NAME               READY   STATUS    RESTARTS   AGE
linux85-game-008   1/1     Running   0          4m15s
[root@k8s231.oldboyedu.com pods]# 
[root@k8s231.oldboyedu.com pods]# kubectl exec -it linux85-game-008 -- sh

(3)查看某个Pod的日志。

[root@k8s231.oldboyedu.com games]# kubectl get pods
NAME               READY   STATUS    RESTARTS   AGE
linux85-game-013   1/1     Running   0          6m15s
linux85-web        1/1     Running   0          119s
[root@k8s231.oldboyedu.com games]# 
[root@k8s231.oldboyedu.com games]# kubectl logs -f linux85-web 

7、面试题

Q1: 当一个Pod有多个容器时,如果连接到指定的容器?

[root@k8s231.oldboyedu.com pods]# kubectl get pods
NAME                   READY   STATUS    RESTARTS   AGE
linux85-nginx-tomcat   2/2     Running   0          63s
[root@k8s231.oldboyedu.com pods]# 
[root@k8s231.oldboyedu.com pods]# kubectl exec -it linux85-nginx-tomcat -- sh  # 默认连接到第一个容器
Defaulted container "nginx" out of: nginx, tomcat
/ # [root@k8s231.oldboyedu.com pods]# kubectl exec -it linux85-nginx-tomcat -c nginx -- sh  # 连接nginx容器
/ # [root@k8s231.oldboyedu.com pods]# kubectl exec -it linux85-nginx-tomcat -c tomcat -- sh  # 连接tomcat容器
/usr/local/tomcat # 
# Dockerfile中有个WORKDIR指定工作目录,Nginx和tomcat的指定工作目录不一样

早期版本中,可能没有提示Pod容器的名称,可以采用以下三种方式查看容器名称。

# cat 02-nginx-tomcat.yaml 
# kubectl describe pod linux85-nginx-tomcat 
# kubectl get pods linux85-nginx-tomcat -o yaml

Q2: 如果查看一个Pod最近20分钟的日志?

[root@k8s231.oldboyedu.com pods]# kubectl logs -c nginx -f --timestamps --since=20m linux85-nginx-tomcat -c:指定要查看的容器名称。-f:实时查看日志。--timestamps :显示时间戳相关信息。--since=20m 查看最近20分钟内的日志。

Q3: 如果查看一个Pod上一个容器的日志,上一个挂掉的容器日志?

[root@k8s231.oldboyedu.com ~]# kubectl logs -c tomcat -f  --timestamps -p  linux85-nginx-tomcat 

Q4: 使用kubectl logs无法查看日志是什么原因,如何让其能够查看呢?

使用"kubectl logs"查看的是容器的标准输出或错误输出日志,如果想要使用该方式查看,需要将日志重定向到/dev/stdout或者/dev/stderr。

Q5: 如何实现Pod的容器的文件和宿主机之间相互拷贝?

  • 将Pod的文件拷贝到宿主机
[root@k8s231.oldboyedu.com pods]# kubectl get pods
NAME               READY   STATUS    RESTARTS   AGE
linux85-game-014   1/1     Running   0          3m10s
[root@k8s231.oldboyedu.com pods]# 
[root@k8s231.oldboyedu.com pods]# kubectl cp linux85-game-014:/start.sh /tmp/1.sh  # 拷贝文件[root@k8s231.oldboyedu.com pods]# kubectl cp linux85-game-014:/etc /tmp/2222  # 拷贝目录[root@k8s231.oldboyedu.com pods]# ll /tmp/
total 16
-rw-r--r--  1 root root 3369 Apr 13 17:01 1.sh
drwxr-xr-x 20 root root 4096 Apr 13 17:02 2222
  • 将宿主机的文件拷贝到Pod的容器中
[root@k8s231.oldboyedu.com pods]# kubectl cp 01-nginx.yaml linux85-game-014:/
[root@k8s231.oldboyedu.com pods]# 
[root@k8s231.oldboyedu.com pods]# kubectl cp /tmp/2222/ linux85-game-014:/
[root@k8s231.oldboyedu.com pods]# 
[root@k8s231.oldboyedu.com pods]# kubectl exec linux85-game-014 -- ls -l /
total 24
-rw-r--r--    1 root     root           301 Apr 13 09:03 01-nginx.yaml
drwxr-xr-x   20 root     root          4096 Apr 13 09:04 2222
...

Q6: 镜像下载策略有哪些?请分别说明?

[root@k8s231.oldboyedu.com pods]# cat 06-nginx-imagePullPolicy.yaml 
apiVersion: v1
kind: Pod
metadata:name: linux85-web-imagepullpolicy-001
spec:nodeName: k8s233.oldboyedu.comcontainers:- name: nginximage: harbor.oldboyedu.com/web/linux85-web:v0.1# 指定镜像的下载策略,有效值为: Always, Never, IfNotPresent#    Always:#       默认值,表示始终拉取最新的镜像。#    IfNotPresent:#       如果本地有镜像,则不去远程仓库拉取镜像,若本地没有,才会去远程仓库拉取镜像。#    Never:#       如果本地有镜像则尝试启动,若本地没有镜像,也不会去远程仓库拉取镜像。#imagePullPolicy: Always# imagePullPolicy: IfNotPresentimagePullPolicy: Never
[root@k8s231.oldboyedu.com pods]#
[root@k8s231 pods]# kubectl explain pods
KIND:     Pod
VERSION:  v1
....[root@k8s233 ~]# docker image inspect --format='{{.RepoDigests}}' harbor.oldboyedu.com/web/linux85-web:v0.1
[harbor.oldboyedu.com/web/linux85-web@sha256:d7f979d75c20dff32975fe0b520165f8d31764de80e26ccc996d763e78ab44fb]
[root@k8s233 ~]# docker image rm harbor.oldboyedu.com/web/linux85-web:v0.1
Untagged: harbor.oldboyedu.com/web/linux85-web:v0.1
Untagged: harbor.oldboyedu.com/web/linux85-web@sha256:d7f979d75c20dff32975fe0b520165f8d31764de80e26ccc996d763e78ab44fb
Deleted: sha256:8ba9ec65395c496a5cf755c7da9aef9afc1b43a83af08c36f15207241f0a315b
...

Q7: 容器的重启策略有哪些?请分别说?

今日作业:
(1)完成的所有练习,并整理思维导图;
(2)单词要会读会写;

扩展作业:
kind:
minikube:
KubeSphere:
rancher:
kuboard:
kubeasz:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】 组件通信方式

VUE中实现通信的⽅式&#xff1a; props&#xff1a;- 若 父传子&#xff1a;属性值是非函数。- 若 子传父&#xff1a;属性值是函数。emitv-modelrefs- $refs&#xff1a;父→子。$parent&#xff1a;子→父。provide/inject&#xff1a;祖孙组件直接通信&#xff0c;在祖先组…

2024年下半年系统架构师案例预测

2024年上半年系统架构师案例考试题目 第一道大题&#xff1a; 1小问&#xff1a;微服务的概念 2小问&#xff1a;质量属性效用树 3小问&#xff1a;质量评估6要素 第二道题&#xff1a;UML&#xff08;时序图和通信图&#xff09; 1.时序图概念&#xff08;消息的类型有什…

【Android】ConstrainLayout约束布局基本操作

文章目录 介绍约束条件添加方式外边距设置删除方式 添加约束条件父级位置对齐方式基线对齐引导线约束屏障约束 约束偏差使用链控制线性组 介绍 约束布局ConstraintLayout是 Android Studio 2.3 起创建布局后的默认布局 主要是为了解决布局多层嵌套问题&#xff0c;以灵活的方式…

抖音/腾讯/百度ocpm深度回传如何操作?广告投放双出价的投放技巧?

要实现抖音、腾讯和百度的OCPM&#xff08;Optimized Cost Per Mille&#xff09;深度回传&#xff0c;可以通过借助第三方平台&#xff0c;例如&#xff08;转化宝&#xff09;实现广告数据精准回传&#xff0c;如此之外&#xff0c;在广告投放过程中还需要注重这些方面。 转化…

ros笔记02--从零体验ros2中的服务通信方式

ros笔记02--从零体验ros2中的服务通信方式 介绍创建步骤注意事项说明 介绍 在ROS 2中&#xff0c;服务指的是远程过程调用&#xff0c;client调用server&#xff0c;server节点收到数据后计算出结果并返回给client. 服务通常期望能快速返回&#xff0c;因此不应当用于处理长时…

深度学习落地实战:大模型生成图片

前言 大家好&#xff0c;我是机长 本专栏将持续收集整理市场上深度学习的相关项目&#xff0c;旨在为准备从事深度学习工作或相关科研活动的伙伴&#xff0c;储备、提升更多的实际开发经验&#xff0c;每个项目实例都可作为实际开发项目写入简历&#xff0c;且都附带完整的代…

代理伺服器分類詳解

代理伺服器的主要分類 代理伺服器可以根據不同的標準進行分類。以下是幾種常見的分類方式&#xff1a; 按協議分類按匿名性分類按使用場景分類 1. 按協議分類 根據支持的協議類型&#xff0c;代理伺服器可以分為以下幾類&#xff1a; HTTP代理&#xff1a;專門用於處理HTT…

TypeScript 教程(十):项目配置、代码质量与前端框架集成

目录 前言回顾类型声明文件与异步编程1. tsconfig.json 高级配置a. 基本配置b. 高级配置选项 2. 使用 Webpack 构建 TypeScript 项目a. 安装依赖b. 配置 Webpack 3. 使用 Babel 编译 TypeScripta. 安装依赖b. 配置 Babelc. 配置 Webpack 使用 Babel 4. 使用 ESLint 和 TSLinta.…

复杂网络的任意子节点的网络最短距离

复杂网络的任意子节点的网络最短距离 题目要求介绍 本文算法测试用的数据集为空手道俱乐部&#xff0c;其中空手道俱乐部的数据集可通过这个链接进行下载•http://vlado.fmf.uni-lj.si/pub/networks/data/Ucinet/UciData.htm#zachary 摘要 本文旨在解决复杂网络中任意子节点…

Godot学习笔记2——GDScript变量与函数

目录 一、代码编写界面 二、变量 三、函数 四、变量的类型 Godot使用的编程语言是GDS&#xff0c;语法上与python有些类似。 一、代码编写界面 在新建的Godot项目中&#xff0c;点击“创建根节点”中的“其他节点”&#xff0c;选择“Node”。 点击场景界面右上角的绿色…

Spark SQL----GROUP BY子句

Spark SQL----GROUP BY子句 一、描述二、语法三、参数四、例子 一、描述 GROUP BY子句用于根据一组指定的分组表达式对行进行分组&#xff0c;并根据一个或多个指定的聚合函数计算行组上的聚合。Spark还支持高级聚合&#xff0c;通过GROUPING SETS、CUBE、ROLLUP子句对同一输入…

文字溢出隐藏及鼠标悬停显示效果

在本文中&#xff0c;我们将学习如何使用 CSS 和 JavaScript 实现一个简单的文字溢出隐藏效果&#xff0c;当鼠标悬停在文本上时显示完整内容。 创建 HTML 页面结构 首先&#xff0c;我们需要创建一个包含文本内容的 HTML 页面。 <!DOCTYPE html> <html lang"e…

前端Vue组件化实践:自定义发送短信验证码弹框组件

在前端开发中&#xff0c;随着业务逻辑的日益复杂和交互需求的不断增长&#xff0c;传统的整体式开发方式逐渐暴露出效率低下、维护困难等问题。为了解决这些问题&#xff0c;组件化开发成为了一种流行的解决方案。通过组件化&#xff0c;我们可以将复杂的系统拆分成多个独立的…

LeetCode 860柠檬水找零(贪心算法)/406根据身高重建队列(贪心算法)

1. 柠檬水找零 思路分析 只需要维护三种金额的数量&#xff0c;5&#xff0c;10和20。 有如下三种情况&#xff1a; 情况一&#xff1a;账单是5&#xff0c;直接收下。情况二&#xff1a;账单是10&#xff0c;消耗一个5&#xff0c;增加一个10情况三&#xff1a;账单是20&am…

使用Java -jar运行就jar包时报异常:org.yaml.snakeyaml.error.YAMLException异常

Java运行就 .jar包时出现的 YAMLException 异常 我在本地环境测试时&#xff0c;使用 java -jar 命令运行 Java 可执行 .jar 包时&#xff0c;遇到了 org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 异常&#xff1b;这…

关于集成网络变压器的RJ45网口

集成网络变压器的RJ45网口是一种将网络变压器与RJ45接口集成在一起的网络连接解决方案。这种集成设计具有多项优势&#xff0c;使其在现代网络设备中得到广泛应用。 优势与特点 1. **空间节省**&#xff1a;集成设计减少了组件数量和连接线缆长度&#xff0c;有助于节省设备内…

掌控视界:WebKit与CSS视口单位的卓越支持

掌控视界&#xff1a;WebKit与CSS视口单位的卓越支持 在响应式网页设计中&#xff0c;CSS视口单位&#xff08;Viewport Units&#xff09;发挥着至关重要的作用。它们允许开发者根据视口&#xff08;Viewport&#xff09;的大小来设置元素的尺寸和位置&#xff0c;从而实现在…

激光打印机原理学习

文章目录 参考资料印刷四分色模式激光打印机的工作原理 参考资料 全网最清晰的打印机工作原理 印刷四分色模式 四分色&#xff08;Quadtone&#xff09;印刷是一种特殊的印刷技术&#xff0c;它使用四种不同的颜色通道来再现彩色图像。这四种标准颜色是&#xff1a;C青色&am…

《管理表格系统》开发心得

浅浅记录一下自己开发两个月的心得&#xff0c;毕竟初入职场 一、写一个自己的脚手架【仅后端】 1.springboot版 2.springcloud版 二、注意写WBS 1要件定义企划构想要求定义要件定义&#xff08;总结功能需求、前端样式需求、非功能性需求、开发环境、部署需求、可行性调查&…

云计算的三种服务模式

云计算的三种主要服务模式分别是基础设施即服务&#xff08;IaaS&#xff09;、平台即服务&#xff08;PaaS&#xff09;和软件即服务&#xff08;SaaS&#xff09;。每种服务模式都提供不同级别的抽象和管理&#xff0c;满足不同的需求和用例。以下是对这三种服务模式的详细介…