一、标签管理
1.标签在k8s中极其重要,大多数资源的相互关联就需要使用标签;也就是说,资源的相互关联大多数时候,是使用标签进行关联的;
2.其他作用,在k8s集群中,node节点的一些操作比如污点及污点容忍等,都需要使用到标签;
查看标签
root@k8s1 pod\]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS my-pod-hpm 1/1 Running 0 40m \
pod-env 1/1 Running 0 22m \ pod-hnw 1/1 Running 0 64m \ volumes-nfs01 1/1 Running 0 3h2m \ volumes-nfs02 1/1 Running 0 3h2m \
创建标签-声明式
创建资源清单
root@k8s1 pod\]# vi pod-labels.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: m-nginx
#给资源添加标签
labels:
name: "oslee"
age: "18"
spec:
containers:
- name: c-nginx
image: nginx:1.20.1-alpine
root@k8s1 pod\]# kubectl apply -f pod-labels.yaml pod/m-nginx created # 查看标签 \[root@k8s1 pod\]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 34m age=18,name=oslee
创建标签-响应式
root@k8s1 pod\]# kubectl label pod m-nginx addr=beijing pod/m-nginx labeled \[root@k8s1 pod\]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 36m addr=beijing,age=18,name=oslee
删除标签
root@k8s1 pod\]# kubectl label pod m-nginx addr- pod/m-nginx unlabeled \[root@k8s1 pod\]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 37m age=18,name=oslee
修改标签
root@k8s1 pod\]# kubectl label pod m-nginx age=19 --overwrite pod/m-nginx labeled \[root@k8s1 pod\]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 82s age=19,name=oslee
通过标签删除pod
通过标签删除pod
root@k8s1 pod\]# kubectl delete pod -l age=19 pod "m-nginx" deleted # 删除全部标签 \[root@k8s1 pod\]# kubectl delete pods --all
二、pod的镜像拉取策略
IfNotPresent
只有当镜像在本地不存在时才会拉取。(先对本地进行排查,本地有该镜像直接使用,本地没有该镜像则选择在仓库中拉取)
Always
总是从仓库拉取镜像,无论本地是否存在镜像(即使本地中存在我们所指定的相关镜像,该策略也会先从仓库中拉取进行应用)
Never
Kubelet 不会尝试获取镜像。如果镜像已经以某种方式存在本地, kubelet 会尝试启动容器;否则,会启动失败。(如果本地不存在,并不会在仓库中拉取,直接报错)
root@k8s1 pod\]# vi pod-ipp.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: labels-pod
labels:
name: "oslee"
age: "19"
spec:
containers:
- image: nginx:1.20.1-alpine
name: nginx
# 设置镜像拉取策略
imagePullPolicy: IfNotPresent
root@k8s1 pod\]# kubectl apply -f pod-ipp.yaml pod/labels-pod created
三、pod中容器的重启策略
当pod中容器退出时,是否需要重新创建容器?
1,Always(默认值):当容器退出时(不论什么原因),自动拉起新的容器;
2,Never:当容器退出时(不论什么原因),都不会重新创建拉起新的容器;
3,OnFailure:当容器"意外退出"时,才会拉起新的容器;
root@k8s1 pod\]# vi pod-rp.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: labels-pod
labels:
name: oslee
spec:
#设置容器重启策略
restartPolicy: Always
containers:
- image: nginx:1.20.1-alpine
name: nginx
root@k8s1 pod\]# kubectl apply -f pod-rp.yaml pod/labels-pod configured
四、pod的优雅终止
在pod的删除时,系统会自动延迟30s,为了给pod处理未处理完的请求;
vi pod-nginx.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: m-nginx
labels:
name: oslee
spec:
#pod优雅终止字段,定义延时kill信号的时间,给pod处理未完成的请求时间;
#缓期多少秒时间执行;若不设置,默认是30s;
terminationGracePeriodSeconds: 3
containers:
- name: c-nginx
image: nginx:1.20.1-alpine
#定义容器的生命周期(容器启动做什么动作,容器停止前做什么动作)
lifecycle:
#容器启动前做什么
postStart:
exec:
command:
- "sh"
- "-c"
- "echo \"postStart at $(date +%F_%T)\" >> /poststart.log "
#容器停止前做什么
preStop:
exec:
command:
- "sh"
- "-c"
- "echo \"prestop at $(date +%F_%T)\" >> /prestop.log"
root@k8s1 pod\]# kubectl apply -f pod-nginx.yaml pod/m-nginx created \[root@k8s1 pod\]# kubectl exec m-nginx -it -- sh / # cat poststart.log postStart at 2024-04-06_09:34:43
五、pod中容器的资源限制
root@k8s1 pod\]# vi pod-resources.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: pod-res
spec:
nodeName: k8s2
containers:
- name: c1
image: nginx:1.20.1-alpine
#设置资源限制
resources:
#最大资源的使用限制;最多就能用这么多的资源;
limits:
#2核心;
cpu: 2000m
#限制内存
memory: 40M
#期望资源限制;需要宿主机预留的资源,我可以不用,但是你必须要有;
requests:
#1核心
cpu: 1000m
#限制内存
memory: 20M
root@k8s1 pod\]# kubectl apply -f pod-resources.yaml pod/pod-res created # 查看资源限制,资源清单指定部署在节点k8s2上 \[root@k8s2 \~\]# docker stats \| grep c1

六、pod的容器类型

01-基础架构容器【pause】:运行pod中的容器时,提供容器的网络名称空间
02-初始化容器【initContainers】:
- 完成一些业务容器运行前的操作,如执行命令,如果初始化容器没有创建成功,将一直重启,业务容器也就无法创建出来;
- 它可以延后业务容器的启动时间;
基础架构容器pause
查看基础架构容器
root@k8s2 data\]# docker container ps \| grep pause

初始化容器initContainers
root@k8s1 pod\]# vi pod-init-c.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: pod-init-c
spec:
#声明初始化容器
initContainers:
- name: init-c1
image: alpine
#在初始化容器中执行命令
command:
- "sleep"
- "10"
- name: init-c2
image: alpine
command:
- "sleep"
- "5"
#业务容器
containers:
- name: c1
image: alpine
#给容器一个标准输入,也就是守护进程
stdin: true
创建资源
root@k8s1 pod\]# kubectl apply -f pod-init-c.yaml pod/pod-init-c created # 查看描述 \[root@k8s1 pod\]# kubectl describe pod/pod-init-c

七、pod中容器的守护进程
创建资源清单,拉取alpine最小linux系统
root@k8s1 pod\]# vi pod-alpine.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: m-alpine
spec:
containers:
- name: c1
image: alpine:3.19.1
root@k8s1 pod\]# kubectl apply -f pod-alpine.yaml pod/m-alpine created \[root@k8s1 pod\]# kubectl get pod
查看pod资源,发现,启动后会结束,因为没有守护进程

守护进程,加入标准输入stdin
root@k8s1 pod\]# vi pod-alpine.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: m-alpine
spec:
containers:
- name: c1
image: alpine:3.19.1
stdin: true
root@k8s1 pod\]# kubectl delete -f pod-alpine.yaml pod "m-alpine" deleted \[root@k8s1 pod\]# kubectl apply -f pod-alpine.yaml pod/m-alpine created \[root@k8s1 pod\]# kubectl get pod NAME READY STATUS RESTARTS AGE m-alpine 1/1 Running 0 48s
守护进程,命令方式
· command
bash
apiVersion: v1
kind: Pod
metadata:
name: m-alpine
spec:
containers:
- name: c1
image: alpine:3.19.1
#在容器当中执行命令
command:
- "tail"
- "-f"
- "/etc/hosts"
· args
bash
apiVersion: v1
kind: Pod
metadata:
name: m-alpine
spec:
containers:
- name: c1
image: alpine:3.19.1
args:
- "tail"
- "-f"
- "/etc/hosts"
· command与args结合
args可以当做command的参数进行命令执行;
跟docker中的守护进程命令一样;command就类似于ENTRYPOINT;args就类似于CMD;
bash
apiVersion: v1
kind: Pod
metadata:
name: m-alpine
spec:
containers:
- name: c1
image: alpine
command:
- "tail"
- "-f"
args:
- "/etc/hosts"
八、pod排障之日志查询
pod资源清单
root@k8s1 pod\]# vi pod-log-nginx.yaml
bash
apiVersion: v1
kind: Pod
metadata:
name: m-log-nginx
spec:
terminationGracePeriodSeconds: 1
containers:
- name: c1
image: nginx:1.20.1-alpine
root@k8s1 pod\]# kubectl apply -f pod-log-nginx.yaml # 模拟循环访问pod \[root@k8s1 pod\]# kubectl get pod -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES m-log-nginx 1/1 Running 0 1s 10.100.1.21 k8s2 \
\
bash
while true ;
do
curl 10.100.1.21 ;
sleep 0.5
done
查看pod日志
root@k8s1 pod\]# kubectl logs pod/m-log-nginx -f # 如果pod中容器发生重启,如何查看重启前的容器的log日志信息? \[root@k8s1 pod\]# kubectl logs -p pod/m-log-nginx -f # 模拟容器重启 \[root@k8s2 \~\]# docker kill a0706cc1dd9a
九、进入pod容器exec与cp命令
#进入pod中容器
kubectl exec pod名称 -it -- sh
#拷贝容器中数据到宿主机(默认pod中第一个容器)kubectl cp pod名称:/root/123.txt ./
#拷贝宿主机数据到容器
kubectl cp ./222.log pod名称:/mnt/
#指定容器拷贝
kubectl cp -c 容器名 pod名称:/root/123.txt ./
#pod外部执行命令root@k8s1 pod\]# kubectl exec m-log-nginx -it -- ifconfig