枣阳做网站,cms系统,山东省乡镇网站建设,重庆网络问政平台华龙网一、标签管理
1.标签在k8s中极其重要#xff0c;大多数资源的相互关联就需要使用标签#xff1b;也就是说#xff0c;资源的相互关联大多数时候#xff0c;是使用标签进行关联的#xff1b; 2.其他作用#xff0c;在k8s集群中#xff0c;node节点的一些操作比如污点及污…一、标签管理
1.标签在k8s中极其重要大多数资源的相互关联就需要使用标签也就是说资源的相互关联大多数时候是使用标签进行关联的 2.其他作用在k8s集群中node节点的一些操作比如污点及污点容忍等都需要使用到标签
查看标签 [rootk8s1 pod]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS my-pod-hpm 1/1 Running 0 40m none pod-env 1/1 Running 0 22m none pod-hnw 1/1 Running 0 64m none volumes-nfs01 1/1 Running 0 3h2m none volumes-nfs02 1/1 Running 0 3h2m none 创建标签-声明式 # 创建资源清单 [rootk8s1 pod]# vi pod-labels.yaml apiVersion: v1
kind: Pod
metadata:name: m-nginx#给资源添加标签labels:name: osleeage: 18
spec:containers:- name: c-nginximage: nginx:1.20.1-alpine [rootk8s1 pod]# kubectl apply -f pod-labels.yaml pod/m-nginx created # 查看标签 [rootk8s1 pod]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 34m age18,nameoslee 创建标签-响应式 [rootk8s1 pod]# kubectl label pod m-nginx addrbeijing pod/m-nginx labeled [rootk8s1 pod]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 36m addrbeijing,age18,nameoslee 删除标签 [rootk8s1 pod]# kubectl label pod m-nginx addr- pod/m-nginx unlabeled [rootk8s1 pod]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 37m age18,nameoslee 修改标签 [rootk8s1 pod]# kubectl label pod m-nginx age19 --overwrite pod/m-nginx labeled [rootk8s1 pod]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS m-nginx 1/1 Running 0 82s age19,nameoslee 通过标签删除pod # 通过标签删除pod [rootk8s1 pod]# kubectl delete pod -l age19 pod m-nginx deleted # 删除全部标签 [rootk8s1 pod]# kubectl delete pods --all 二、pod的镜像拉取策略
IfNotPresent
只有当镜像在本地不存在时才会拉取。先对本地进行排查本地有该镜像直接使用本地没有该镜像则选择在仓库中拉取
Always
总是从仓库拉取镜像无论本地是否存在镜像即使本地中存在我们所指定的相关镜像该策略也会先从仓库中拉取进行应用
Never
Kubelet 不会尝试获取镜像。如果镜像已经以某种方式存在本地 kubelet 会尝试启动容器否则会启动失败。如果本地不存在并不会在仓库中拉取直接报错 [rootk8s1 pod]# vi pod-ipp.yaml apiVersion: v1
kind: Pod
metadata:name: labels-podlabels:name: osleeage: 19
spec:containers:- image: nginx:1.20.1-alpinename: nginx# 设置镜像拉取策略imagePullPolicy: IfNotPresent [rootk8s1 pod]# kubectl apply -f pod-ipp.yaml pod/labels-pod created 三、pod中容器的重启策略 当pod中容器退出时是否需要重新创建容器 1Always默认值当容器退出时不论什么原因自动拉起新的容器 2Never当容器退出时不论什么原因都不会重新创建拉起新的容器 3OnFailure当容器“意外退出”时才会拉起新的容器 [rootk8s1 pod]# vi pod-rp.yaml apiVersion: v1
kind: Pod
metadata:name: labels-podlabels:name: oslee
spec:#设置容器重启策略restartPolicy: Alwayscontainers:- image: nginx:1.20.1-alpinename: nginx [rootk8s1 pod]# kubectl apply -f pod-rp.yaml pod/labels-pod configured 四、pod的优雅终止
在pod的删除时系统会自动延迟30s为了给pod处理未处理完的请求 vi pod-nginx.yaml apiVersion: v1
kind: Pod
metadata:name: m-nginxlabels:name: oslee
spec:#pod优雅终止字段定义延时kill信号的时间给pod处理未完成的请求时间#缓期多少秒时间执行若不设置默认是30sterminationGracePeriodSeconds: 3containers:- name: c-nginximage: 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 [rootk8s1 pod]# kubectl apply -f pod-nginx.yaml pod/m-nginx created [rootk8s1 pod]# kubectl exec m-nginx -it -- sh / # cat poststart.log postStart at 2024-04-06_09:34:43 五、pod中容器的资源限制 [rootk8s1 pod]# vi pod-resources.yaml apiVersion: v1
kind: Pod
metadata:name: pod-res
spec:nodeName: k8s2containers:- name: c1image: nginx:1.20.1-alpine#设置资源限制resources:#最大资源的使用限制最多就能用这么多的资源limits:#2核心;cpu: 2000m#限制内存memory: 40M#期望资源限制需要宿主机预留的资源我可以不用但是你必须要有requests:#1核心cpu: 1000m#限制内存memory: 20M [rootk8s1 pod]# kubectl apply -f pod-resources.yaml pod/pod-res created # 查看资源限制资源清单指定部署在节点k8s2上 [rootk8s2 ~]# docker stats | grep c1 六、pod的容器类型 01-基础架构容器【pause】运行pod中的容器时提供容器的网络名称空间 02-初始化容器【initContainers】 完成一些业务容器运行前的操作如执行命令如果初始化容器没有创建成功将一直重启业务容器也就无法创建出来它可以延后业务容器的启动时间 基础架构容器pause
查看基础架构容器 [rootk8s2 data]# docker container ps | grep pause 初始化容器initContainers [rootk8s1 pod]# vi pod-init-c.yaml apiVersion: v1
kind: Pod
metadata:name: pod-init-c
spec:#声明初始化容器initContainers:- name: init-c1image: alpine#在初始化容器中执行命令command: - sleep- 10- name: init-c2image: alpinecommand:- sleep- 5#业务容器containers:- name: c1image: alpine#给容器一个标准输入也就是守护进程stdin: true # 创建资源 [rootk8s1 pod]# kubectl apply -f pod-init-c.yaml pod/pod-init-c created # 查看描述 [rootk8s1 pod]# kubectl describe pod/pod-init-c 七、pod中容器的守护进程
创建资源清单拉取alpine最小linux系统 [rootk8s1 pod]# vi pod-alpine.yaml apiVersion: v1
kind: Pod
metadata:name: m-alpine
spec:containers:- name: c1image: alpine:3.19.1 [rootk8s1 pod]# kubectl apply -f pod-alpine.yaml pod/m-alpine created [rootk8s1 pod]# kubectl get pod 查看pod资源发现启动后会结束因为没有守护进程 守护进程加入标准输入stdin [rootk8s1 pod]# vi pod-alpine.yaml apiVersion: v1
kind: Pod
metadata:name: m-alpine
spec:containers:- name: c1image: alpine:3.19.1stdin: true [rootk8s1 pod]# kubectl delete -f pod-alpine.yaml pod m-alpine deleted [rootk8s1 pod]# kubectl apply -f pod-alpine.yaml pod/m-alpine created [rootk8s1 pod]# kubectl get pod NAME READY STATUS RESTARTS AGE m-alpine 1/1 Running 0 48s 守护进程命令方式
· command
apiVersion: v1
kind: Pod
metadata:name: m-alpine
spec:containers:- name: c1image: alpine:3.19.1#在容器当中执行命令command:- tail- -f- /etc/hosts
· args
apiVersion: v1
kind: Pod
metadata:name: m-alpine
spec:containers:- name: c1image: alpine:3.19.1args:- tail- -f- /etc/hosts
· command与args结合
args可以当做command的参数进行命令执行
跟docker中的守护进程命令一样command就类似于ENTRYPOINTargs就类似于CMD
apiVersion: v1
kind: Pod
metadata:name: m-alpine
spec:containers:- name: c1image: alpinecommand:- tail- -fargs:- /etc/hosts
八、pod排障之日志查询 # pod资源清单 [rootk8s1 pod]# vi pod-log-nginx.yaml apiVersion: v1
kind: Pod
metadata:name: m-log-nginx
spec:terminationGracePeriodSeconds: 1containers:- name: c1image: nginx:1.20.1-alpine [rootk8s1 pod]# kubectl apply -f pod-log-nginx.yaml # 模拟循环访问pod [rootk8s1 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 none none while true ;
do curl 10.100.1.21 ; sleep 0.5
done # 查看pod日志 [rootk8s1 pod]# kubectl logs pod/m-log-nginx -f # 如果pod中容器发生重启如何查看重启前的容器的log日志信息 [rootk8s1 pod]# kubectl logs -p pod/m-log-nginx -f # 模拟容器重启 [rootk8s2 ~]# 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外部执行命令 [rootk8s1 pod]# kubectl exec m-log-nginx -it -- ifconfig