k8s常用资源之pod资源(三)

it2024-02-20  59

k8s常用资源

1.k8s资源常见操作

创建一个资源 kubectl create -f xxx.yaml 查看一个资源 kubectl get pod | rc 查看一个资源的详细过程 kubectl describe pos pod_name 删除一个资源 kubectl delete pod pod_name kubectl delete -f xxx.yaml 编辑一个资源的配置文件 kubectl edit pod pod_name

2.pod资源

2.1.pod简介

pod是kubernetes的基本操作单元,也是应用运行的载体,整个kubernetes系统都是围绕pod展开的,比如如何部署运行pod、如何保证pod的、如何访问pod等,另外pod是一个或多个机关容器的集合,这可以说是一大创新点,提供了一种容器组合的模型。

pod和容器共享一个网络地址,先来先得端口占用。

pod和nginx为什么不用单独的地址,这是因为k8s有很多功能比如自愈、自动负载均衡,单独一个容器肯定无法实现这种功能,然后pod资源就有这个功能,因此用来和容器共享网络的方式来实现k8s的高级功能

一个pod可以与4个容器共享网络

每当运行一个pod,都会有两个容器产生,一个是pod容器一个是自己服务的容器

2.2.pod基本操作

操作命令创建kubectl create -f k8s_pod.yml查询kubectl get pod pod_name kubectl describe pod pod_name删除kubectl delete pod pod_name更新kubectl replace xxx.yml

2.3.运行一个pod

1)准备pod的yml文件

[root@k8s-master k8s]# vim k8s_pod.yml apiVersion: v1 //定义api的版本 kind: Pod //资源类型,这里是pod metadata: //元数据,也就是属性,给pod的属性 name: nginx //pod的名称是nginx labels: //描述 app: web //键值表示时什么类型的 spec: //详细属性 containers: //容器 - name: nginx //容器的名称 image: 192.168.81.240/k8s/nginx:1.15 //容器的镜像地址,这里从harbor下载 ports: //端口 - containerPort: 80 //映射成本机80端口

2)创建一个pod资源

创建一个pod [root@k8s-master k8s]# kubectl create -f k8s_pod.yml pod "nginx" created 查看pod [root@k8s-master k8s]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx 0/1 ContainerCreating 0 15s containercreating状态表示正在创建容器 查看pod的详细启动过程 [root@k8s-master k8s]# kubectl describe pod nginx

3)删除一个pod

[root@k8s-master k8s]# kubectl delete pod nginx pod "nginx" deleted 在创建一个会发现这次调度到了node1上,如果配置一样每个节点都会轮着来创建容器

4)查看容器的ip地址

[root@k8s-master k8s]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx 1/1 Running 0 1h 172.16.46.2 192.168.81.220

5)报错排查

42s 1s 3 {kubelet 192.168.81.230} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)" 这个报错是指在redhat官网pull镜像的时候pull不下来导致 可以将pod这个容器放到harbor中再使用私有仓库的地址去下载 配置 1)修改kubelet配置文件 KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.81.240/k8s/pod-infrastructure:latest" 2)重启kubelet [root@k8s-node2 ~]# systemctl restart kubelet 3)再执行kubectl describe pod nginx来查看pod的启动过程 会发现pod已经起来

2.4.pod和容器的关系

在docker中,容器是最小的处理单元,增删改查的对象是容器,容器是一种虚拟化技术,容器之间是隔离的,隔离是基于Linux namespace实现的,而在kubernetes中,pod包含一个或多个相关的容器,pod可以认为是容器的一种延伸扩展,一个pod是一个隔离体,而pod内部包含的一组容器又是共享的(包括pid、network、ipc、uts),除此之外,pod中的容器可以访问共同的数据卷来实现文件系统的共享。

一个pod单元最多支持4个容器的共享,也就是说在yml中最多一组只能写4个容器,容器启动后就是一个pod容器4个业务容器

每当运行一个容器,k8s都会启动一个pod,pod和容器共享网络、进程,从而实现k8s的高级功能

pod资源至少由两个容器组成:pod资源容器和业务容器

证实运行一个容器就会启动一个pod

[root@k8s-master k8s]# vim k8s_pod.yml apiVersion: v1 kind: Pod metadata: name: nginx1 //将pod的名称进行更换,创建多个pod labels: app: web spec: containers: - name: nginx image: 192.168.81.240/k8s/nginx:1.15 ports: - containerPort: 80 [root@k8s-master k8s]# kubectl create -f k8s_pod.yml [root@k8s-master k8s]# kubectl describe pod nginx1 [root@k8s-master k8s]# kubectl create -f k8s_pod.yml [root@k8s-master k8s]# kubectl describe pod nginx2 [root@k8s-master k8s]# kubectl create -f k8s_pod.yml [root@k8s-master k8s]# kubectl describe pod nginx3 去node1上验证 [root@k8s-node1 ~]# docker ps -a | grep 'pod'

2.5.一个pod资源多个业务容器

[root@k8s-master k8s]# vim k8s_pod2.yml apiVersion: v1 kind: Pod metadata: name: test labels: app: web spec: containers: - name: nginx image: 192.168.81.240/k8s/nginx:1.15 ports: - containerPort: 80 - name: busybox image: 192.168.81.240/k8s/busybox:latest command: ["sleep","1000"] [root@k8s-master k8s]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx2 1/1 Running 0 2d 172.16.77.2 192.168.81.230 test 2/2 Running 0 1m 172.16.46.2 192.168.81.220 [root@k8s-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d7a53e20df02 192.168.81.240/k8s/busybox:latest "sleep 1000" 2 minutes ago Up 2 minutes k8s_busybox.5ce5e697_test_default_6abaed19-c90e-11ea-8389-000c295583b7_edb92cf3 6ded5dbc0a27 192.168.81.240/k8s/nginx:1.15 "nginx -g 'daemon off" 2 minutes ago Up 2 minutes k8s_nginx.773504ef_test_default_6abaed19-c90e-11ea-8389-000c295583b7_a7e87782 4b579810e7a3 192.168.81.240/k8s/pod-infrastructure:latest "/pod" 2 minutes ago Up 2 minutes k8s_POD.ec79030d_test_default_6abaed19-c90e-11ea-8389-000c295583b7_eae7a601 bb58e6e9e16a docker.io/busybox 会看到有一个pod两个业务容器
最新回复(0)