Kubernetes Pod资源管理概述(容器分类、镜像拉取策略)


本文主要介绍Pod,了Kubernetes对象模型中可部署的最小对象。

了解Pod

Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。

一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。

Docker是Kubernetes Pod中最常见的runtime ,Pods也支持其他容器runtimes。

Kubernetes中的Pod使用可分两种主要方式:

  • Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。
  • Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位
  • 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。

每个Pod都是运行应用的单个实例,如果需要水平扩展应用(例如,运行多个实例),则应该使用多个Pods,每个实例一个Pod。在Kubernetes中,这样通常称为Replication。Replication的Pod通常由Controller创建和管理。

一:pod的容器分类:

1.1:infrastructure container 基础容器

  • 维护整个Pod网络空间,启动一个容器时,k8s会自动为我们启动一个基础容器
'//node节点操作'
[root@node1 ~]# cat /opt/kubernetes/cfg/kubelet

KUBELET_OPTS="--logtostderr=true \
--v=4 \
--hostname-override=20.0.0.42 \
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig \
--bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig \
--config=/opt/kubernetes/cfg/kubelet.config \
--cert-dir=/opt/kubernetes/ssl \
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"
  • 每次创建pod时候就会创建,与pod对应的,对于用户是透明的
[root@node1 ~]# docker ps
CONTAINER ID        IMAGE                                                                 COMMAND                  CREATED             STATUS              PORTS               NAMES
e302d48263d6        nginx                                                                 "nginx -g 'daemon of…"   25 hours ago        Up 25 hours                             k8s_nginx_nginx-deployment-d55b94fd-mbgcm_default_e3005fe9-0b94-11eb-a2d8-000c2984c1e3_0
293e6ad1002f        registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0   "/pause"                 25 hours ago        Up 25 hours                             k8s_POD_nginx-deployment-d55b94fd-mbgcm_default_e3005fe9-0b94-11eb-a2d8-000c2984c1e3_0
c6e4bee0b544        siriuszg/kubernetes-dashboard-amd64                                   "/dashboard --insecu…"   3 days ago          Up 3 days                               k8s_kubernetes-dashboard_kubernetes-dashboard-7dffbccd68-lcwbd_kube-system_1d3d860e-0960-11eb-b238-000c29bdbf8a_0

1.2:initContainers:初始化容器

先于业务容器开始执行,可以执行一些操作,具体使用方法如下:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

initContainers标签下的都是初始化容器的配置

1.3:container:业务容器

  • 业务容器就是我们创建的pod资源内的容器服务,业务容器也叫APP容器,并行启动

二:镜像拉取策略(image PullPolicy)

1、ifnotpresent:默认值,镜像在宿主机上不存在时会拉取

2、always:每次创建pod都会重新拉取一次镜像

3、never:pod永远不会主动拉取这个镜像

2.1:查看已创建deployment的拉取政策

'//mater操作'
[root@master ~]# kubectl get deploy/nginx-deployment -o yaml | grep imagePull
        imagePullPolicy: IfNotPresent
        
2种方法:查看镜像拉取
[root@master ~]# kubectl edit deployment/nginx


spec:
      containers:
      - image: nginx:1.15.4
        imagePullPolicy: IfNotPresent    '//可以查看到镜像拉取的策略,可以修改为别的拉取政策'
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {
    
    }
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always

2.2:编写pod1.yuml去拉取政策

[root@master ~]# cd shuai/
[root@master shuai]# ls
my-deployment.yaml  nginx-delpoy.yaml  nginx-service.yaml  shuai.yaml

[root@master shuai]# cat > pod1.yaml <<EOF
> apiVersion: v1
> kind: Pod
> metadata:
>   name: mypod
> spec:
>   containers:
>     - name: nginx
>       image: nginx
>       imagePullPolicy: Always
>       command: [ "echo", "SUCCESS" ]
> EOF

[root@master shuai]# ls
my-deployment.yaml  nginx-service.yaml  shuai.yaml
nginx-delpoy.yaml   pod1.yaml

'//创建pod1.yuml资源'
[root@master shuai]# kubectl create -f pod1.yaml 
pod/mypod created

'//查看pod资源'
[root@master shuai]# kubectl get pods
NAME                              READY   STATUS              RESTARTS   AGE
mypod                             0/1     ContainerCreating   0          16s
nginx-deployment-d55b94fd-f8l85   1/1     Running             0          27h
nginx-deployment-d55b94fd-mbgcm   1/1     Running             0          27h
nginx-deployment-d55b94fd-w9cd6   1/1     Running             0          27h
[root@master shuai]# kubectl get pods
NAME                              READY   STATUS      RESTARTS   AGE
mypod                             0/1     Completed   2          81s
nginx-deployment-d55b94fd-f8l85   1/1     Running     0          27h
nginx-deployment-d55b94fd-mbgcm   1/1     Running     0          27h
nginx-deployment-d55b94fd-w9cd6   1/1     Running     0          27h
#可看到这边是重启状态

'//失败的状态原因是因为命令启动冲突'
删除 command: [ "echo", "SUCCESS" ]

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: nginx
      image: nginx:1.14    '更改一下版本'
      imagePullPolicy: Always
      
'//下面更新资源,更新资源前要先把资源释放掉'
[root@master shuai]# kubectl delete -f pod1.yaml 
pod "mypod" deleted

'//下面在创建资源就行'
[root@master shuai]# kubectl apply -f pod1.yaml 
pod/mypod created
'//查看pod资源,现在在运行状态了'
[root@master shuai]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
mypod                             1/1     Running   0          37s
nginx-deployment-d55b94fd-f8l85   1/1     Running   0          27h
nginx-deployment-d55b94fd-mbgcm   1/1     Running   0          27h
nginx-deployment-d55b94fd-w9cd6   1/1     Running   0          27h

2.21:查看详细容器信息

[root@master shuai]# kubectl describe pod  mypod
Name:               mypod
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               20.0.0.43/20.0.0.43    '资源创建的节点'
Start Time:         Mon, 12 Oct 2020 19:28:12 +0800
Labels:             <none>
Annotations:        kubectl.kubernetes.io/last-applied-configuration:
                      {
    
    "apiVersion":"v1","kind":"Pod","metadata":{
    
    "annotations":{
    
    },"name":"mypod","namespace":"default"},"spec":{
    
    "containers":[{
    
    "image":"nginx:1...
Status:             Running
IP:                 172.17.5.4             '//可以查看IP'
....省略信息...............

2.22:查看分配节点

'mypod节点的IP是172.17.5.4'
[root@master shuai]# kubectl get pods -o wide
NAME                              READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE
mypod                             1/1     Running   0          13m   172.17.5.4    20.0.0.43   <none>
nginx-deployment-d55b94fd-f8l85   1/1     Running   0          28h   172.17.5.3    20.0.0.43   <none>
nginx-deployment-d55b94fd-mbgcm   1/1     Running   0          28h   172.17.93.3   20.0.0.42   <none>
nginx-deployment-d55b94fd-w9cd6   1/1     Running   0          28h   172.17.5.2    20.0.0.43   :<none>

2.21:在任意node节点使用curl查看头部信息

[root@node2 ~]# curl -I 172.17.5.4
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Mon, 12 Oct 2020 11:44:11 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: "5c0692e1-264"
Accept-Ranges: bytes

猜你喜欢

转载自blog.csdn.net/weixin_47151643/article/details/109035232