虚拟化容器,大数据,DBA,中间件,监控。

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

11 11月
作者:admin|分类:容器虚拟化

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两个业务容器
浏览405 评论0
返回
目录
返回
首页
k8s常用资源之rc资源(四) kubernetes架构详解及部署配置(一)