热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

K8s(二)Pod管理

K8s之pod的管理1什么是pod什么是pod?2pod的管理2.1创建Pod应用2.2deployment类型的pod控制器2.2Deployment扩容2.3创建

K8s之pod的管理

  • 1 什么是pod
    • 什么是pod?
  • 2 pod的管理
    • 2.1 创建Pod应用
    • 2.2 deployment类型的pod控制器
    • 2.2 Deployment 扩容
    • 2.3 创建service
      • 2.3.1 expose类型
      • 2.3.2 NodePort类型
    • 2.4 pod镜像的更新、回滚


1 什么是pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。

Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。

除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。

实验环境:

(1)server1:搭建harbor仓库

(2)k8s的部署:

server2:k8s主节点server3、server4:k8s子节点

(3)k8s的各个节点可以使用harbor仓库

server1-4:vim /etc/hosts172.25.12.1 server1 reg.westos.orgmkdir /etc/docker/certs.d/red.westos.org -pserver1:cp /certs/westos.org.crt /etc/docker/certs.d/red.westos.org/ca.crtscp /certs/westos.org.crt server2:/etc/docker/certs.d/red.westos.org/ca.crtscp /certs/westos.org.crt server3:/etc/docker/certs.d/red.westos.org/ca.crt

什么是pod?

Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。

一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace

pod的理解

pod将容器绑定在一起,并将它们作为一个单元进行管理。在pod中,多个容器可以同时进行一些密切相关的进程,但又保持着一定的隔离。容器组内的容器共享一些资源,不是全部资源。

k8s通过配置docker让一个pod中的容器共享相同的linux命名空间,所以一个pod下的所有容器共享相同的主机名和网络接口。这些容器也都在相同的IPC命名空间下运行,能够通过IPC进行通信。同一pod下的容器需要注意不能绑定到相同的端口号,否则会导致端口冲突。每个pod有独立的端口空间,不同pod下的容器永远不会遇到端口冲突。一个pod中的所有容器都具有相同的loopback网络接口,容器可以通过localhost与同一pod的其他容器进行通信。

k8s中所有的pod都在同一个共享网络地址空间中,每个pod都有自己的IP,每个pod都可以通过其他pod的IP地址实现相互访问。无论pod是否在同一个工作节点上都能够相互通信

每个pod获得可路由的IP地址,其他pod都可以在该ip地址下看到该pod
在这里插入图片描述
通过pod管理容器: 将多层应用分散到多个pod中,基于扩缩容考虑分割到多个pod中。

何时在pod中使用多个容器:将多个容器添加到单个pod的主要原因是应用可能由一个主要进程和一个活多个辅助进程组成的

在这里插入图片描述

2 pod的管理

2.1 创建Pod应用

(1)创建并运行一个或多个容器镜像

  • 查看命名空间:kubectl get namespaces

在这里插入图片描述

  • 集群内部任意节点可以访问Pod,但集群外部无法直接访问

[root@server2 ~]# kubectl run nginx1 --image=myapp:v1(镜像)## 创建pod时不指定命名空间默认default
pod/nginx1 created
[root@server2 ~]# kubectl get pod -n default ## 使用-n 指定命名空间
NAME READY STATUS RESTARTS AGE
nginx1 1/1 Running 0 5s
[root@server2 ~]# kubectl get pod ## 列出所有运行的Pod信息
NAME READY STATUS RESTARTS AGE
nginx1 1/1 Running 0 17s
[root@server2 ~]# kubectl get pod -o wide ## 列出Pod以及运行Pod节点信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx1 1/1 Running 0 36s 10.244.1.3 server3 <none> <none>[root&#64;server2 ~]# kubectl run demo --image&#61;busyboxplus -it## 名字 镜像
If you don&#39;t see a command prompt, try pressing enter.
/ # ip addr
1: lo: mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
3: eth0&#64;if7: mtu 1450 qdisc noqueue link/ether d6:42:c6:df:91:2f brd ff:ff:ff:ff:ff:ffinet 10.244.2.3/24 brd 10.244.2.255 scope global eth0valid_lft forever preferred_lft forever
/ # Session ended, resume using &#39;
kubectl attach demo -c demo -i -t&#39; command
when the pod is running
## 如果一个pod中有多个容器&#xff0c;要查看具体的某个容器的的输出&#xff0c;需要在pod名后使用-c containers name指定运行的容器&#xff1b;如果一个pod中只有一个容器则不用指定[root&#64;server2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 0 39s
nginx1 1/1 Running 0 7m
[root&#64;server2 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo 1/1 Running 0 42s 10.244.2.3 server4
nginx1 1/1 Running 0 7m3s 10.244.1.3 server3
[root&#64;server2 ~]# kubectl attach demo -it
Defaulting container name to demo.
Use &#39;
kubectl describe pod/demo -n default&#39; to see all of the containers in this pod.
If you don&#39;
t see a command prompt, try pressing enter.
/ # curl 10.244.1.3
Hello MyApp | Version: v1 | <a href&#61;"hostname.html">Pod Name</a>
/ # Session ended, resume using &#39;kubectl attach demo -c demo -i -t&#39; command when the pod is running

  • 查看指定pod的详细信息&#xff1a;kubectl describe pod demo

在这里插入图片描述

  • 删除pod容器

[root&#64;server2 ~]# kubectl delete pod nginx1
pod "nginx1" deleted
[root&#64;server2 ~]# kubectl get pod ## 名称为demo的pod成功删除
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 0 14m

2.2 deployment类型的pod控制器

Controller可以创建和管理多个Pod&#xff0c;提供副本管理、滚动升级和集群级别的自愈能力。例如&#xff0c;如果一个Node故障&#xff0c;Controller就能自动将该节点上的Pod调度到其他健康的Node上。

&#xff08;1&#xff09;创建一个deployment类型的pod控制器

## 创建一个deployment类型的pod控制器
[root&#64;server2 ~]# kubectl create deployment nginx --image&#61;myapp:v1
deployment.apps/nginx created
[root&#64;server2 ~]# kubectl get pod ## 查看pod控制器或者pod信息
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 0 14m
nginx-67f9d9c97f-jxpzz 1/1 Running 0 16s

&#xff08;2&#xff09;查看rs的信息

  • ReplicaSet的名字总是-

[root&#64;server2 ~]# kubectl get rs ## 列出rs的信息
NAME READY STATUS RESTARTS AGE
pod/nginx-67f9d9c97f 1/1 Running 0 41s
## nginx&#xff1a;名字&#xff0c;67f9d9c97f&#xff1a;控制器&#xff08;replicaset&#xff09;

&#xff08;3&#xff09;Replica Set将保证总是有1个nginx的 pod 存在

  • 删除pod容器&#xff0c;只是删除了pod容器&#xff0c;并没有删除pod控制器&#xff0c;相当于删除pod后&#xff0c;pod控制器在拉起一个新的pod

[root&#64;server2 ~]# kubectl delete pod nginx-67f9d9c97f-jxpzz
pod "nginx-67f9d9c97f-jxpzz" deleted
[root&#64;server2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 0 15m
nginx-67f9d9c97f-g9b5l 1/1 Running 0 4s

  • 删除控制器nginx&#xff1a;kubectl delete deployments.apps nginx&#xff0c;删除控制器后&#xff0c;控制器中的pod也会随之被删除

2.2 Deployment 扩容

&#xff08;1&#xff09;扩容或缩容 DeploymentPod数量

  • scale也可以指定多个前提条件&#xff0c;如&#xff1a;当前副本数量或 --resource-version&#xff0c;进行伸缩比例设置前&#xff0c;系统会先验证前提条件是否成立。设定了副本的数量时&#xff0c;如果删除其中的一个容器&#xff0c;会自动创建pod满足副本的数量
  • 收缩时默认回收最后运行的pod

## 将nginx控制器拉伸为两个副本
[root&#64;server2 ~]# kubectl scale deployment --replicas&#61;2 nginx
deployment.apps/nginx scaled
[root&#64;server2 ~]# kubectl get pod ### 两个pod副本
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 0 17m
nginx-67f9d9c97f-2tzjg 1/1 Running 0 3s
nginx-67f9d9c97f-g9b5l 1/1 Running 0 76s
[root&#64;server2 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo 1/1 Running 0 17m 10.244.2.3 server4 <none> <none>
nginx-67f9d9c97f-2tzjg 1/1 Running 0 20s 10.244.1.5 server3 <none> <none>
nginx-67f9d9c97f-g9b5l 1/1 Running 0 93s 10.244.2.4 server4 <none> <none>
[root&#64;server2 ~]# kubectl scale deployment --replicas&#61;4 nginx
deployment.apps/nginx scaled
[root&#64;server2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 0 17m
nginx-67f9d9c97f-2tzjg 1/1 Running 0 37s
nginx-67f9d9c97f-g9b5l 1/1 Running 0 110s
nginx-67f9d9c97f-h72md 0/1 ContainerCreating 0 3s
nginx-67f9d9c97f-xgr8g 0/1 ContainerCreating 0 3s
[root&#64;server2 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo 1/1 Running 0 17m 10.244.2.3 server4 <none> <none>
nginx-67f9d9c97f-2tzjg 1/1 Running 0 40s 10.244.1.5 server3 <none> <none>
nginx-67f9d9c97f-g9b5l 1/1 Running 0 113s 10.244.2.4 server4 <none> <none>
nginx-67f9d9c97f-h72md 1/1 Running 0 6s 10.244.1.7 server3 <none> <none>
nginx-67f9d9c97f-xgr8g 1/1 Running 0 6s 10.244.1.6 server3 <none> <none>## 收缩时默认回收最后运行的
[root&#64;server2 ~]# kubectl scale deployment --replicas&#61;2 nginx
deployment.apps/nginx scaled
[root&#64;server2 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo 1/1 Running 0 18m 10.244.2.3 server4 <none> <none>
nginx-67f9d9c97f-2tzjg 1/1 Running 0 62s 10.244.1.5 server3 <none> <none>
nginx-67f9d9c97f-g9b5l 1/1 Running 0 2m15s 10.244.2.4 server4 <none> <none>

2.3 创建service

service是一个抽象概念&#xff0c;定义了一个服务的多个pod逻辑合集和访问pod的策略&#xff0c;一般把service称为微服务

2.3.1 expose类型

&#xff08;1&#xff09;expose&#xff1a;集群内部访问

  • ClusterIP: 默认类型&#xff0c;自动分配一个仅集群内部可以访问的虚拟IP

[root&#64;server2 ~]# kubectl expose deployment nginx --port&#61;80
service/nginx exposed
## 此时pod客户端可以通过service的名称访问后端的Pod
[root&#64;server2 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h7m
nginx ClusterIP 10.105.92.115 <none> 80/TCP 18s
[root&#64;server2 ~]# curl 10.105.92.115
Hello MyApp | Version: v1 | <a href&#61;"hostname.html">Pod Name</a>
[root&#64;server2 ~]# curl 10.105.92.115/hostname.html
nginx-67f9d9c97f-g9b5l
[root&#64;server2 ~]# curl 10.105.92.115/hostname.html
nginx-67f9d9c97f-2tzjg
[root&#64;server2 ~]# curl 10.105.92.115/hostname.html
nginx-67f9d9c97f-2tzjg
[root&#64;server2 ~]# curl 10.105.92.115/hostname.html
nginx-67f9d9c97f-g9b5l
[root&#64;server2 ~]# curl 10.105.92.115/hostname.html
nginx-67f9d9c97f-2tzjg

&#xff08;2&#xff09;查看service的信息&#xff1a;kubectl describe svc

  • 查看pod的信息&#xff1a;kubectl get pod -o wide

在这里插入图片描述

2.3.2 NodePort类型

NodePort类型暴露端口&#xff0c;实现外部访问Pod

  • 修改service的类型为NodePort&#xff1a;kubectl edit svc nginx

在这里插入图片描述
在这里插入图片描述

  • 查看 service的信息&#xff1a;kubectl get svc

在这里插入图片描述

  • NodePort: 在ClusterIP基础上为Service在每台机器上绑定一个端口&#xff0c;通过 NodeIP:NodePort来访问该服务

curl 172.25.12.2:30440/hostname.html

在这里插入图片描述

curl 172.25.12.4:30440/hostname.html

在这里插入图片描述

2.4 pod镜像的更新、回滚

&#xff08;1&#xff09;pod镜像的更新

  • 查看pod控制器或者pod信息&#xff1a;kubectl get pod -o wide

在这里插入图片描述

  • 查看pod的详细信息&#xff1a;kubectl describe pod nginx-67f9d9c97f-g9b5l

在这里插入图片描述

  • 更新pod镜像&#xff1a;kubectl set image deployment nginx myapp&#61;myapp:v2 --record

在这里插入图片描述

curl 172.25.12.4:30440

在这里插入图片描述
&#xff08;2&#xff09;pod镜像的回滚

  • 查看历史版本&#xff1a;kubectl rollout history deployment nginx

在这里插入图片描述

  • 回滚版本&#xff1a;kubectl rollout undo deployment nginx --to-revision&#61;3

在这里插入图片描述


推荐阅读
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 检查 Kubernetes 系统命名空间中的 Pod 状态时,发现 Metric Server Pod 虽然处于运行状态,但存在异常:日志显示 'it doesn’t contain any IP SANs'。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • Kubernetes 1.9.0 Alpha.1 发布公告 [Kubernetes 最新动态]
    近日,Kubernetes 社区发布了两个新版本:1.8.0 RC.1 和 1.9.0 Alpha.1。这是 k8s 1.9.0 的首次发布,自 v1.8.0 Alpha.3 以来进行了大量更新,共提交了 279 次。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 本文介绍了如何将Spring属性占位符与Jersey的@Path和@ApplicationPath注解结合使用,以便在资源路径中动态解析属性值。 ... [详细]
author-avatar
蕊儿巧乐-滋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有