文章目录
-
- pod常用命令
- 创建pod
- 查看pod
- 删除pod
-
- pod的标签命令
- 查看pod标签
- 设置标签
-
- 查询标签
-
- 删除pod标签
- pod内部镜像操作命令
-
- Pod资源限制
- Pod中多个容器网络共享
工作负载
- 工作负载是在k8s集群中运行的应用程序,无论工作负载是单一服务还是集群构成,在k8s中都可以使用pod来运行它。
pod定义
- pod是k8s集群管理与调度的最小计算单元,表示处于运行状态的一组容器
- pod不是进程,只是容器运行的环境
- 一个pod可以封装任意个容器
- 一个pod内的容器共享部分命令空间,例如:
Net Namespace、IPC Namespace、UTS Namespace
- 用户pod默认会被调度运行在node节点上(不运行在master节点上,但是也有例外)
- pod内的IP不是固定的,集群外不能直接访问pod
pod分类
关系
- workloads分为
静态pod
和控制器管理的pod
- pod通过控制器实现应用的运行、伸缩、升级等操作
- controller在集群中管理pod
- pod与controller之间通过label-selector进行关联,且是唯一的关联方式
静态pod
- 也称为无控制器管理的pod
- 直接由特定节点上的
kubelet
守护进程管理, 不需要API 服务器看到它们 - 尽管大多数 Pod 都是通过控制面(例如,Deployment) 来管理的,对于静态 Pod 而言,
kubelet
直接监控每个 Pod,并在其失效时重启之。
控制器管理的pod
- 控制器可以控制pod的副本数,扩容与裁剪,版本更新与回滚等
镜像拉取策略
由imagePullPolicy参数控制
- Always : 不管本地有没有镜像,都要从仓库中下载镜像
- Never : 从来不从仓库下载镜像, 只用本地镜像,本地没有就算了
- IfNotPresent: 如果本地存在就直接使用, 不存在才从仓库下载
默认的策略是:
- 当镜像标签版本是latest,默认策略就是Always
- 如果指定特定版本默认拉取策略就是IfNotPresent。
pod常用命令
创建pod
- 直接使用命令行创建pod,不推荐,测试自己玩玩就行
kubectl run nginx --image=nginx
pod/nginx created
kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 13s
apiVersion: v1
kind: Pod
metadata:
name: nginx1
spec:
containers:
- name: nginx
image: nginx
kubectl create -f pod.yaml
pod/nginx1 created
kubectl get pod|grep nginx1
nginx1 1/1 Running 0 2m10s
- 使用yaml创建pod时可以使用
creat
或者apply
- apply:使用apply时,如果pod已存在相当于执行更新操作
kubectl apply -f pod.yaml
pod/nginx1 configured
- create:使用create时,如果pod已存在会直接报错
kubectl create -f pod.yaml
Error from server (AlreadyExists): error when creating "pod.yaml": pods "nginx1" already exists
查看pod
- pod是一种计算资源,可以通过
kubectl get pod
来查看
kubectl get pod
NAME READY STATUS RESTARTS AGE
pod 1/1 Running 0 21s
- pod或pods都可以,不指定namespace,默认是名为default的namespace
kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
pod 1/1 Running 0 28s
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod 1/1 Running 0 38s 10.1.0.114 docker-desktop <none> <none>
kubectl describe pod pod-stress [-n namespace pod在非默认空间时需要指定pod所在的namespace]
Name: pod-stress
Namespace: default
Priority: 0
Node: docker-desktop/192.168.65.4
Start Time: Fri, 19 Aug 2022 11:24:15 +0800
Labels: <none>
Annotations: <none>
Status: Running
IP: 10.1.0.109
IPs:
IP: 10.1.0.109
Containers:
c1:
Container ID: docker://b80d5e7b88cc207978da99ef508c0772a60ac693d94c0a59cd12266d6883aa57
Image: polinux/stress
Image ID: docker-pullable://polinux/stress@sha256:b6144f84f9c15dac80deb48d3a646b55c7043ab1d83ea0a697c09097aaad21aa
Port: <none>
Host Port: <none>
Command:
stress
Args:
--vm
1
--vm-bytes
100
--vm-hang
1
State: Running
Started: Fri, 19 Aug 2022 11:24:33 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sqkts (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-sqkts:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 102s default-scheduler Successfully assigned default/pod-stress to k8s-worker1
Normal Pulling 102s kubelet Pulling image "polinux/stress"
Normal Pulled 83s kubelet Successfully pulled image "polinux/stress" in 18.944533343s
Normal Created 83s kubelet Created container c1
Normal Started 82s kubelet Started container c1
删除pod
删除单个pod
kubectl delete pod nginx
pod "nginx" deleted
kubectl delete -f pod.yaml
pod "nginx1" deleted
- 删除某个namespace会直接删除该命名空间下所有的pod
kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
nginx1 1/1 Running 0 16m
nginx2 1/1 Running 0 16m
kubectl delete ns test
namespace "test" deleted
kubectl get pod -n test
No resources found in test namespace.
删除多个pod
- 命令行删除,后面直接跟多个要删除的pod名称
- 使用awk过滤删除
kubectl get pod |awk 'NR >1 {print $1}' |xargs kubectl delete pod
pod "nginx1" deleted
pod "nginx2" deleted
- 删除某个namespace会直接删除该命名空间下所有的pod
pod的标签命令
- 为pod设置标签,便于控制器通过label和pod进行关联
- 可以将标签理解成SQL中的查询条件
查看pod标签
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx1 0/1 ContainerCreating 0 2s <none>
设置标签
通过命令行设置标签
kubectl label pod nginx1 env=test zone=beijing
pod/nginx1 labeled
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx1 1/1 Running 0 72s env=test,zone=beijing
通过yaml文件设置标签
apiVersion: v1
kind: Pod
metadata:
name: nginx2
labels:
env: dev
zone: A
spec:
containers:
- name: nginx
image: nginx
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx1 1/1 Running 0 4m29s env=test,zone=beijing
nginx2 1/1 Running 0 46s env=dev,zone=A
查询标签
通过等值关系查看标签
kubectl get pod -l env=dev
NAME READY STATUS RESTARTS AGE
nginx2 1/1 Running 0 3m10s
通过集合关系查看标签
kubectl get pod -l "env in(dev,test,prod)"
NAME READY STATUS RESTARTS AGE
nginx1 1/1 Running 0 7m31s
nginx2 1/1 Running 0 3m48s
删除pod标签
kubectl label pod nginx1 env- zone-
pod/nginx1 labeled
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx1 1/1 Running 0 8m59s <none>
nginx2 1/1 Running 0 5m16s env=dev,zone=A
pod内部镜像操作命令
不用交互直接操作名
- 命令格式:
kubectl exec pod名 -c 容器名 -- 命令
- 不指定容器名,则默认为pod里的第1个容器
kubectl exec nginx1 -- date
Fri Aug 19 10:52:50 UTC 2022
和容器交互操作
kubectl exec -it nginx1 -c nginx -- /bin/bash
root@nginx1:/
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@nginx1:/
Pod资源限制
apiVersion: v1
kind: Namespace
metadata:
name: namespace1
---
apiVersion: v1
kind: Pod
metadata:
name: pod-stress2
namespace: namespace1
spec:
containers:
- name: c1
image: polinux/stress
imagePullPolicy: IfNotPresent
resources:
limits:
memory: "200Mi"
requests:
memory: "100Mi"
command: ["stress"]
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
Pod中多个容器网络共享
apiVersion: v1
kind: Pod
metadata:
name: pod-share-network
spec:
containers:
- name: c1
image: nginx
- name: c2
image: nginx
imagePullPolicy: IfNotPresent
- 运行yaml文件
···shell
kubectl apply -f share_network.yaml
pod/pod-share-network created
* 查看
```shell
kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-share-network 1/2 CrashLoopBackOff 13 44m
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)