文章目录
- 一:pod的容器分类:
- 1.1:infrastructure container 基础容器
- 1.2:initContainers:初始化容器
- 1.3:container:业务容器
- 二:镜像拉取策略(image PullPolicy)
- 2.1:查看已创建deployment的拉取政策
- 2.2:编写pod1.yuml去拉取政策
- 2.21:查看详细容器信息
- 2.22:查看分配节点
- 2.21:在任意node节点使用curl查看头部信息
本文主要介绍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