一、Pod 的概念
kubernetes并不直接管理容器,它的最小管理单元是Pod。Pod是一个或多个容器的组合,这些容器贡献存储,网络,命名空间以及运行规范。在Pod中所有容器被统一安排和调度,在共享上下文中运行(共享上下文是一种基于线程的内存位置)。Podshi他们的逻辑主机,包含多个容器,是一组共享命名空间,IP地址和端口容器的集合。
Pod 可以简单的理解为一组、一个或多个容器,每个 Pod 还包含一个 Pause 容器,Pause 容器是 Pod 的父容器,主要负责僵尸进程的回收管理。同时,通过 Pause 容器可以使同一个 Pod里面的不同容器共享存储、网络、PID、IPC 等,容器之间可以使用 Localhost:Port 的方式相互访问,可以使用 volume 实现数据共享。根据 Docker 的构造,Pod 可以被创建为一组具有共享命名空卷、IP 地址和端口的容器。
Pod 有两个必须知道的特点:
网络: 每一个 Pod 都会被指派一个唯一的 Ip 地址,在 Pod 中的每一个容器共享网络命名空间,包括 Ip 地址和网络端口。在同一个 Pod 中的容器可以同 locahost 进行互相通信。当Pod中的容器需要与 Pod 外的实体进行通信时,则需要通过端口等共享的网络资源。
存储: Pod 能够被指定共享存储卷的集合,在 od 中所有的容器能够访问共享存储卷,允许这些容器共享数据。存储卷也允许在一个 pod 持久化数据,以防止其中的容器需要被重启。
(1)kubectl 创建pod
[root@k8s-master ~]# ku run nginx --image=nginx:1.7.9 --labels="app=nginx"
pod/nginx created
(2)查看pod
[root@k8s-master ~]# ku get pods -n default
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5m52s
(3)显示pod更多详细信息
[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 7m14s 10.244.85.195 k8s-node01 <none> <none>
(4)查看pod日志
[root@k8s-master ~]# curl 10.244.85.195
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>........
[root@k8s-master ~]# ku logs nginx
10.244.235.192 - - [21/Aug/2024:01:35:54 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0"
(5)显示资源的详细描述信息
[root@k8s-master ~]# ku describe pod nginx
(6)在pod容器执行命令
[root@k8s-master ~]# ku exec nginx -c nginx -- date
Wed Aug 21 01:45:50 UTC 2024
备注:
-c :指定Pod中容器的名字
(7)登录到pod容器中
[root@k8s-master ~]# ku exec -it nginx -c nginx -- bash
root@nginx:/# exit
exit
(8)在线编辑运行资源对象
[root@k8s-master ~]# ku edit pod nginx
(9)将pod端口映射到宿主机
[root@k8s-master ~]# ku port-forward --address 0.0.0.0 pod/nginx 8080:80
Forwarding from 0.0.0.0:8080 -> 80
备注:
curl 192.168.10.101:8080
在前台运行,Ctrl+c停止