小阿轩yx-Kubernetes Pod入门

news2024/11/27 4:30:38

小阿轩yx-Kubernetes Pod入门

前言

Kubernetes 中

  • 一个重要的概念就是 Pod(豆荚)
  • 并不直接管理容器,它的最小管理单元叫做 Pod。

Docker 应用中

  • 把一个应用程序封装在一个镜像中,之后启动这个镜像并映射个宿主机端口号,就能访问这个应用。

既然单个容器就可以部署这个应用,为什么 Kubernetes不直接管理容器,而是要设计一个 Pod 呢?

什么是 Pod

  • 是一个或多个容器的结合
  • 容器共享存储、网络和命名空间以及运行规范
  • 所有容器都被统一安排和调度,并运行在共享上下文中
  • 是具体应用的逻辑主机
  • 包含业务相关的多个应用容器
  • 是一个组具有共享命名空间、IP 地址和端口的容器的集合

共享上下文是一种基于线程的内存位置

从使用的角度来看

  • 实际的使用时,单个容器无法单独支撑应用,需要很多微服务才能组成一个系统,并且还会存在A服务依赖B服务,B服务需要和C服务共用某个目录。
  • 使用裸容器时,很难实现对容器内进行健康检査以及横向扩容等操作,而 Pod 可以轻松解决这些问题

从 Kubernetes 的角度来看

  • Docker 只是容器 Runtime(运行时)的一种们还有很多容器 Runtime,比如 Rkt、CRI-0等
  • Kubernetes 作为目前最流行的容器编排工具,需要支持各个 Runtime 并且不依赖于底层Runtime 的实现技术,于是就抽象出了 Pod 这个概念,用于管理多个紧密相连的符合 CRI 标准的容器。

每个 Pod 还包含一个 Pause 容器

Pause 容器

  • 是 Pod 的父容器,主要负责僵尸进程的回收管理。
  • 同时,通过 Pause 容器可以使同一个 Pod里面的不同容器共享存储、网络、PID、IPC 等

Pod 两个必须知道的特点

网络

  • 每一个 Pod 都会被指派一个唯一的 Ip 地址,在 Pod 中的每一个容器共享网络命名空间,包括 Ip 地址和网络端口。
  • 同一个 Pod 中的容器可以同 locahost 进行互相通信。
  • 当 Pod中的容器需要与 Pod 外的实体进行通信时,则需要通过端口等共享的网络资源。

存储

  • Pod 能够被指定共享存储卷的集合,在 Pod 中所有的容器能够访问共享存储卷,允许这些容器共享数据。
  • 存储卷也允许在一个 Pod 持久化数据,以防止其中的容器需要被重启。

结合 pod 大概回顾上一章

查看创建文件时为 pod 分配的地址

[root@k8s-master ~]# cat init-config.yaml
...省略部分内容
networking:
  //为pod分配的地址
  podSubnet: 10.244.0.0/16

查看所有 pod 状态

[root@k8s-master ~]# ku get pod -A
  • 都显示 Running 为正常

将镜像文件通过 Xftp 上传至两个 node 计算节点

(102和103)

两个 node 节点进入镜像文件并导入镜像

[root@k8s-node01 ~]# cd images/
[root@k8s-node01 images]# bash imp_docker_img.sh
[root@k8s-node02 ~]# cd images/
[root@k8s-node02 images]# bash imp_docker_img.sh

Pod 的状态

在 master 主节点用 kubectl 命令创建 pod(101)

[root@k8s-master ~]# kubectl run nginx --image=nginx:1.7.9 --labels="app=nginx'
pod/nginx created

查看所有 pod 状态

[root@k8s-master ~]# ku get pod
NAME    READY   STATUS     RESTARTS   AGE
nginx   1/1     Running    0          22s
  • pod 后什么也不加是默认在 default 下查看状态 

查看详细信息

[root@k8s-master ~]# ku get pod nginx -o wide
NAME  READY STATUS   RESTARTS  AGE  IP             NODE     NOMINATED NODE  READINESS GATES
nginx 1/1   Running  0         54s  10.244.58.195  k8s-node02 <none>        <none>

查看 pod 日志

[root@k8s-master ~]# curl 10.244.58.195
......
<p><em>Thank you for using nginx.</em></p>
......
或
[root@k8s-master ~]# ku logs nginx

显示资源的详细描述信息

[root@k8s-master ~]# ku describe pod nginx
  • kubectl get:常用于查看同一资源类型的一个或多个资源对象,可以使用 -o 参数自定义输出格式
  • kubectl describe:侧重于描述指定资源的各方面的详细信息,不仅会返回节点信息,还会返回在其运行的 Pod 的摘要、节点事件等信息 

在 Pod 的容器中执行命令

[root@k8s-master ~]# ku exec nginx -c nginx -- date
或
[root@k8s-master ~]# ku exec -it nginx -c nginx -- date
  • -c:指定 Pod 中容器的名字

登录到 Pod 中的容器中

[root@k8s-master ~]# ku exec -it nginx -c nginx -- bash
root@nginx:/# exit
exit
  • ku exec -it nginx -c nginx -- bash(如果登录时不指定容器,就登录到 Pod 中的第一个容器中)

在线编辑运行中的资源对象

[root@k8s-master ~]# ku edit pod nginx
Edit cancelled, no changes made.
  • Edit cancelled, no changes made.(没有修改文件)

将 pod 的端口映射到宿主机

[root@k8s-master ~]# ku port-forward --address 0.0.0.0 pod/nginx 8080:80
Forwarding from 0.0.0.0:8080 -> 80

其它主机访问测试

[root@k8s-node02 ~]# curl 192.168.10.101:8080
  • 此命令会在前台运行,此时就可以在其他客户端用该 k8s 主机的 IP 地址和 8080 的端口号进行访问了,Ctrl+c停止,但停止后就没有这个映射了。

谷歌浏览器访问测试

  • 192.168.10.101:8080

在宿主机和 Pod 的容器之间拷贝文件

[root@k8s-master ~]# ku cp nginx:etc/fstab /opt/aaa.txt
[root@k8s-master ~]# ku cp /opt/aaa.txt nginx:etc/bbb.txt

 查看 aaa 文件内容

[root@k8s-master ~]# cat /opt/aaa.txt
# UNCONFIGURED FSTAB FOR BASE SYSTEM

删除 Pod

[root@k8s-master ~]# ku delete pod nginx
pod "nginx" deleted

Pod 状态不仅只有 Running,常见其它状态

Pod 状态字段 Phase(阶段)的不同取值

状态说明
Pending(挂起)Pod 已经被 Kubernetes 系统接收,但是仍有一个或多个容器未被创建,可以通过 kubectl describe 查看处于Pending 状态的原因
Running(运行中)Pod 已经被绑定到一个节点上,并且所有的容器都已经被创建,而且至少有一个是运行的状态、正在启动或者重启,可以通过 kubectl logs 査看 Pod 的日志
Succeeded所有容器执行成功,并终止,并且不会再次重启,可以通过kubectl logs 査看 Pod 的日志
Faild(失败)所有容器都已终止,并且至少一个容器以失败的方式终止也就是说这个容器要么以非零状态退出,要么被系统终止,可以通过 logs 和 describe 査看 Pod 的日志和状态
Unknown(未知)通常是由于通信问题造成的无法获得 Pod 的状态
ImagePullBackOff ErrImagePull镜像拉取失败,一般是由于镜像不存在、网络不通或者需要登录认证引起的,可以使用 describe 命令查看具体的原因
CrashLoopBackOff容器启动失败,可以通过 logs 命令查看具体的原因,一般为启动命令不正确、健康检查不通过等原因
OOMKilled容器内存溢出,一般是容器的内存 Limit 设置的过小,或者程序本身有内存溢出,可以通过 logs 查看程序的启动日志
TerminatingPod 正在被删除,可以通过 describe 查看状态
SysctlForbidenPod 自定义了内核配置,但 kubect1 没有添加内核配置或配置的内核参数不支持,可以通过 describe 查看具体原因
Completed容器内部主进程退出,一般计划任务执行结束会显示该该状态,此时可以通过 logs 查看容器日志
ContainerCreateingPod 正在创建,一般正在下载镜像,或者有配置不当的地方,可以通过 describe 查看具体原因

Pod 探针

  • 生产环境中,进程正常启动并不代表应用能正常处理请求,所以合理的设计应用的健康检查尤其重要。
  • 使用裸机或裸容器部署时,一般很难对应用做很完善的健康检査,而 Pod 提供的探针可以很方便的用来检测容器的应用是否正常。
  • 目前探针有3种检测方式,可以根据不同的场景选择合适的健康检查方式。

Pod 探针的实现方式

实现方式说明
ExecAction在容器内执行一个指定的命令,如果命令返回值为8,则认为容器健康
TCPSocketAction通过 TCP 连接检查容器指定的端口,如果端口开放,则认为容器健康
HTTPGetAction对指定的 URL 进行 Get 请求,如果状态码在 200-400 之间,则认为容
器健康
  • 上述的检查方式可以被周期性的执行

每次检査容器后可能得到的容器状态

状态说明
Success(成功)容器通过检查
Failure(失败)容器检查失败
Unknown(未知)诊断失败,因此不采取任何措施

Pod 探针有三类

  • livenessProbe(存活探针)
  • readinessProbe(就绪探针)
  • startupProbe(启动探针)

livenessProbe(存活探针)

  • 判断容器是否正常运行,如果失败则杀掉容器(不是pod),再根据重启策略决定是否重启容器

readinessProbe(就绪探针)

  • 判断容器是否能够进入ready 状态,探针失败则进入noready 状态,并从service的endpoints中剔除此容器

startupProbe(启动探针)

  • 判断容器内的应用是否启动成功,在success 状态前,其它探针都处于无效状态

指定重启策略

[root@k8s-master ~]# ku run nginx --image=nginx:1.7.9 --labels="app=nginx" --image-pull-policy=Never
pod/nginx created
  • --image-pull-policy:拉取镜像策略
  • policy:计算机里叫策略

查看状态

[root@k8s-master ~]# ku get pod
NAME     READY    STATUS     RESTARTS    AGE
nginx    1/1      Running    0           5s

设置总是拉取

[root@k8s-master ~]# ku run nginx01 --image=nginx:1.7.9 --labels="app=nginx" --image-pull-policy=Always
pod/nginx created
  • Always:总是

查看状态

[root@k8s-master ~]# ku get pod
NAME     READY    STATUS                 RESTARTS    AGE
nginx    1/1      Running                0           5s
nginx01  0/1      ContainerCreating      0           4s
  • ContainerCreating:创建中

查看 nginx01 的状态

[root@k8s-master ~]# ku describe pod nginx01
Events:
Type    Reason    Age     From    Message
----    ------    ---     ----    -------
Normal Scheduled18sSuccessfully assigned default/ngdefault-scheduler .inx01 to k8s-node02
Normal  Pullingy   17s     kubelet    Pulling image "nginx:1.7.9"
  • Pulling image:镜像处于拉取中,由于网络原因需要拉取一段时间,如果选择的镜像仓库没有,那么是拉不了的
  • 用 describr 查,由于本地有这个镜像,但是指定了策略总是拉取,就是这样的状态了

删除 Pod

[root@k8s-master ~]# ku delete pod nginx
pod "nginx" deleted
[root@k8s-master ~]# ku delete pod nginx01
pod "nginx01" deleted
  • 这一步会有延迟,因为上一步 Pulling image 正处于下载镜像状态

创建一个简单的 Pod

编写一个简单的 Pod

[root@k8s-master ~]# vim nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort:80

部署 nginx 的 pod 文件

[root@k8s-master ~]# ku apply -f nginx-pod.yaml
pod/nginx created

查看是否创建成功

[root@k8s-master ~]# ku get pod
NAME     READY   STATUS     RESTARTS    AGE
nginx    1/1     Running    0           12s

删除 pod

[root@k8s-master ~]# ku delete -f nginx-pod.yaml
pod "nginx" deleted

以上就是资源清单

将 yaml 文件上传至主机(master节点)

创建拉取的文件

[root@k8s-master ~]# ku create -f frontend-localredis-pod.yaml
pod/redis-php created

查看是否创建成功

[root@k8s-master ~]# ku get pod
NAME     READY   STATUS     RESTARTS    AGE
redis    2/2     Running    0           12s
  • 此时可以看到 pod 中有两个容器处于 running 状态中

再将一个 yaml 文件上传至主机

 

 创建拉取的文件

[root@k8s-master ~]# ku create -f nginx-php.yaml
pod/nginx-php created

暴露端口

[root@k8s-master ~]# ku expose pod nginx-php --port=8080 --target-port=80 --name=nginx-php
service/nginx-php expose

查看端口映射

[root@k8s-master ~]# ku get svc
NAME          TYPE        CLUSTER-IP        EXTERNAL-IP    PORT(S)    AGE
kubernetes    ClusterIP   10.96.0.1         <none>         443/TCP    3d18h
nginx-php     ClusterIP   10.107.102.194    <none>         8080/TCP   25s

查看 pod 被分配的地址

[root@k8s-master ~]# ku get svc
NAME          READY  STATUS    RESTARTS  AGE  IP     NODE  NOMINATED NODE READINESS GATES
pod/nginx-php 2/2    Running 0 2m35s     172.25.244.199    k8s-master01     <none>   <none>
NAME              TYPE     CLUSTER-IP  EXTERNAL-IP PORT(S)        AGE    SELECTOR
service/nginx-php NodePort 10.99.26.98 <none>      8080:32598/TCP 2m24s  name=nginx-php

暴露端口

[root@k8s-master ~]# ku expose pod nginx-php --port=8080 --target-port=80 --type=NodePort --name=nginx-php01
service/nginx-php01 expose

查看端口映射

[root@k8s-master ~]# ku get svc
NAME          TYPE        CLUSTER-IP        EXTERNAL-IP    PORT(S)            AGE
kubernetes    ClusterIP   10.96.0.1         <none>         443/TCP            3d18h
nginx-php     ClusterIP   10.107.102.194    <none>         8080/TCP           25s
nginx-php01   NodePort    10.105.6.129      <none>         8080:30345/TCP     3s

用浏览器测试访问

  • 192.168.10.101:30345

  • 192.168.10.102:30345

  • 192.168.10.103:30345

删除所有 pod

[root@k8s-master ~]# ku delete pod nginx-php
pod "nginx-php" deleted
[root@k8s-master ~]# ku delete pod redis-php
pod "redis-php" deleted

拷贝 nginx 的 yaml 文件到指定目录下

[root@k8s-master ~]# cp nginx-pod.yaml /etc/kubernetes/manifests/

查看状态

[root@k8s-master ~]# ku get pod
NAME                 READY   STATUS     RESTARTS    AGE
nginx-k8s-master     1/1     Running    0           4s

进入目录

[root@k8s-master ~]# cd /etc/kubernetes/manifests/

删除 nginx 的 yaml 文件

[root@k8s-master ~]# rm -rf nginx-pod.yaml

查看状态

[root@k8s-master ~]# ku get pod
No resources found in default namespace.

小阿轩yx-Kubernetes Pod入门

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

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

相关文章

03、Redis实战:商户查询缓存、缓存更新策略、缓存穿透、缓存雪崩、缓存击穿

2、商户查询缓存 2.1 什么是缓存? 什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器&qu…

2、Unity【基础】Mono中的重要内容

Unity基础 MonoBehavior中的重要内容 文章目录 Mono中的重要内容1、延迟函数1、延迟函数概念2、延迟函数使用3、延迟函数受对象失活销毁影响思考1 利用延时函数实现计时器思考2 延时销毁 2、协同程序1、Unity是否支持多线程2、协同程序概念3、协同程序和线程的区别4、协程的使用…

APP架构设计_1.官方应用架构指南

1.官方应用架构指南 1.1架构的原则 应用架构定义了应用的各个部分之间的界限以及每个部分应承担的职责。谷歌建议按照以下原则设计应用架构。 分离关注点通过数据模型驱动界面单一数据源单向数据流 1.2谷歌推荐的应用架构 每个应用应至少有两个层&#xff1a; 界面层 - 在屏…

近视防控明星:蔡司小乐圆中期临床数据详解

近视防控明星&#xff1a;蔡司小乐圆中期临床数据详解 小乐圆镜片作为近视防控镜片里的明星产品&#xff0c;从22年5月上市以来防控效果就一直备受大家的关注。而最近中期临床试验的结果&#xff0c;给家长孩子吃了一颗定心丸。 本次实验中&#xff0c;240位受试者被随机分成三…

基于springboot框架的电影订票系统_wqc3k

TOC springboot611基于springboot框架的电影订票系统_wqc3k--论文 绪 论 1.1研究背景和意义 随着科学技术的不断发展&#xff0c;计算机现在已经成为了社会的必需品&#xff0c;人们通过网络可以获得海量的信息&#xff0c;这些信息可以和各行各业进行关联&#xff0c;电影…

你应该停止使用的 7 个已弃用的 Python 库

欢迎来到雲闪世界。升级您的 Python 工具包&#xff1a;发现 7 个应停止使用的过时库以及替代它们的功能。最近&#xff0c;我回顾了 Python 的新特性&#xff0c;发现每个版本都引入了创新&#xff0c;使我们的日常开发工作变得更加轻松。 这让我意识到科技是一门永无止境的艺…

8.21 QT

1.思维导图 2. 服务器端 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox> #include <QDebug> #include <QList> #include <QTcpSocket>QT_BEGIN_NAMESPACE names…

免费高画质提取PPT/Word/Excel中的图片工具

下载地址&#xff1a;https://pan.quark.cn/s/134ccc35b8a2 软件简介&#xff1a; 好不容易搞到一个几十上百MB的ppt&#xff0c;想导出里面的图片进行二次加工&#xff0c;却被ppt超低画质的图片另存为功能劝退&#xff0c;明知里面全是高清图片&#xff0c;走时却是两手空空…

【C++从练气到飞升】14---深入浅出继承

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承方式和访问限定符…

重新认识AbstractQueuedSynchronizer

开篇之前&#xff0c;烦请诸位允许我附庸风雅一次。近期因诸事繁杂&#xff0c;心情颇低落&#xff0c;遂于喜马拉雅APP中收听《老子》一文。其中的第八十一章《结天道》一文于我感悟颇深&#xff1a;和大怨&#xff0c;必有余怨&#xff0c;报怨以德&#xff0c;焉可以为善&am…

C++,std::bind 详解

文章目录 1. 概述2. 基本用法2.1 使用占位符2.2 示例 3. 总结 1. 概述 std::bind 是 C11 引入的一个功能&#xff0c;它允许你将函数&#xff08;或成员函数、函数对象&#xff09;与其参数绑定&#xff0c;生成一个新的可调用对象。这个功能在需要将函数及其参数一起传递给其…

DNF攻略:护石符文体系辅助详解,VMOS云手机助攻核心玩法!

在DNF游戏中&#xff0c;护石符文系统是提升角色实力的重要部分。当前版本中&#xff0c;护石符文体系经过了优化&#xff0c;使得获取方式更加便捷。以下是护石符文体系的详细介绍&#xff0c;以及如何使用VMOS云手机来更高效地管理和利用这一系统。 一、护石符文体系简介 护…

HarmonyOS 地图服务:深度解析其丰富功能与精准导航实力

目录 前期准备打造个性化地图&#xff1a;聚焦创建地图功能导入Map Kit相关模块通过MapOptions初始化地图切换地图类型设置地图中心点及层级展示定位按钮展示比例尺指定地图的日间夜间模式 通过MapComponentController对象方法控制地图切换地图类型开启3D建筑图层在指定的持续时…

【安当产品应用案例100集】008-UKEY在工业自动化数据传输中应用

工业自动化中的数据传输是确保生产过程高效、稳定运行的关键环节。工业自动化系统中&#xff0c;一般会有一个远程的客户端&#xff0c;负责将各个传感器、控制器等设备产生的信息传递到服务端&#xff0c;以实现生产过程的自动化控制和监控。它对于提高生产效率、降低生产成本…

SQL Server 2017上服务端设置强制加密启用SSL

在数据库服务端设置&#xff0c;强制所有客户端使用 SSL&#xff0c;设置完后&#xff0c;后续客户端所有连接&#xff0c;都将以密文传送&#xff0c;不论客户端是否指定安全连接&#xff08;即EncryptTrue/False&#xff09; 一、服务端强制加密使用 SSL 1.在数据库服务器上…

C++ 模板进阶知识

目录 一. 非类型模板参数 与类型模板参数确认的区别 何时确认 确认方式 二. 模板的特化 1. 概念 2. 函数模板特化 3. 类模板特化 3.1 全特化 3.2 偏特化 (1). 部分特化 (2). 进一步限制 4. 实际应用 三. 模板分离编译 1. 概念 2. 模板的分离编译 3. 解决方法 四…

【学习笔记】STM32F407探索者HAL库开发(一)STM32F4资源概要

【学习笔记】STM32F407探索者HAL库开发&#xff08;一&#xff09;STM32F4资源概要 1 硬件资源2 STM32命名规则3 STM32数据手册3.1 数据手册各章节内容概要3.2 引脚分布3.3 引脚定义3.4 引脚定义表的具体说明 1 硬件资源 STM32F407ZGT6具体的 内部资源如表 资源数量资源数量内…

鸿蒙Harmony实战开发:Touchscreen驱动器件硬件接口使用实例

功能简介 Touchscreen驱动用于驱动触摸屏使其正常工作&#xff0c;该驱动主要完成如下工作&#xff1a;对触摸屏驱动IC进行上电、配置硬件管脚并初始化其状态、注册中断、配置通信接口&#xff08;I2C或SPI&#xff09;、设定Input相关配置、下载及更新固件等操作。 在HDF&am…

考试:数据库系统(01)

数据库系统 ◆数据&#xff1a;是数据库中存储的基本对象&#xff0c;是描述事物的符号记录。 数据的种类&#xff1a;文本、图形、图像、音频、视频、学生的档案记录、货物的运输 情况等。 ◆数据库DB: 是长期存储在计算机内、有组织的、可共享的大量数据的集合。 ◆数据库…

安恒信息总裁宋端智,辞职了!活捉一枚新鲜出炉的餐饮人!

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…