k8s常用资源之pod资源(三)
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两个业务容器
 
 目录 返回
首页