目录
- 概述
- 创建Pod
- 编写一个简单的Pod
- 添加常用参数
- 为Pod的容器分配资源
- 网络相关
- Pod健康检查
- 启动探针
- 存活探针
- 就绪探针
- 作用整个Pod参数配置
- 创建docker-registry
- 卷挂载
- 结束
概述
k8s中的pod参数详解。官方文档
版本 k8s 1.27.x 、busybox:stable-musl、nginx:stable-alpine3.19-perl
创建Pod
编写一个简单的Pod
apiVersion: v1
kind: Pod
# 元数据
metadata:# pod 名称 唯一name: busybox# 命名空间namespace: test# 标签labels:app: busyboxspec:containers:- name: busyboximage: harbor.easzlab.io.local:8443/library/busybox:stable-muslimagePullPolicy: IfNotPresentcommand:- sleep- "3600"restartPolicy: Always
[root@hadoop01 pod]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 25s
tomcat-demo-7ddd4cf4f5-bpskf 1/1 Running 0 7d20h[root@hadoop01 pod]# kubectl exec -it -n test busybox -- sh
/ #
/ # ls
bin dev etc home proc root sys tmp usr var
/ #
添加常用参数
apiVersion: v1
kind: Pod
# 元数据
metadata:# pod 名称 唯一name: busybox# 命名空间namespace: test# 标签labels:app: busyboxspec:containers:- name: busyboximage: harbor.easzlab.io.local:8443/library/busybox:stable-musl# 可选值: Always|IfNotPresent|NeverimagePullPolicy: IfNotPresent# 环境变量env:- name: appvalue: busybox# 运行终端 守护进程,不会运行完就结束tty: true# 特权模式 对宿主机有 root 权限securityContext:privileged: true# 工作目录workingDir: /test# 命令command: ["/bin/sh"]# 参数args: ["-c", "while true; do echo hello;sleep 10;done"]restartPolicy: Always
[root@hadoop01 pod]# kubectl apply -f arg-busbox-pod.yaml
pod/busybox created
[root@hadoop01 pod]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 7s
tomcat-demo-7ddd4cf4f5-bpskf 1/1 Running 0 7d22h
[root@hadoop01 pod]# kubectl logs -f busybox -n test
hello
hello
hello
hello
hello
hello
hello
为Pod的容器分配资源
apiVersion: v1
kind: Pod
# 元数据
metadata:# pod 名称 唯一name: busybox# 命名空间namespace: test# 标签labels:app: busyboxspec:restartPolicy: Alwayscontainers:- name: busyboximage: harbor.easzlab.io.local:8443/library/busybox:stable-muslimagePullPolicy: IfNotPresentcommand:- sleep- "3600"resources:# 注意MiB 和 Mb 有区别,1MiB=1024k,而1Mb=100k k8s 使用 Mi 大的# cpu的单位 ,1c=1000m# 最小需要requests:memory: "100Mi"cpu: "1000m"# 最大限制limits:memory: "200Mi"cpu: "1000m"
注意:因为安装的不是 docker ,所以 crictl stats 并不详细
如 docker stats 能看出资源限制后的变化。
网络相关
网络默认配置使用的是 k8s 集群的配置。
自定义网络配置如下:
apiVersion: v1
kind: Pod
# 元数据
metadata:# pod 名称 唯一name: nginx# 命名空间namespace: test# 标签labels:app: nginx spec:# 使用宿主机的网络,与宿主机共享局域网hostNetwork: false# 可选值:Default | ClusterFirst | ClusterFirstWithHostNet | NonednsPolicy: "None"dnsConfig:nameservers:- 8.8.8.8# 域名映射hostAliases:- ip: 192.168.1.18hostnames:- "foo.local"- "bar.local"containers:- name: nginximage: harbor.easzlab.io.local:8443/library/nginx:stable-alpine3.19-perlimagePullPolicy: IfNotPresentports:- name: defaultcontainerPort: 80# 如果使用hostnetwork 那这里就不能指定端口,配置了也不会生效hostPort: 8080
Pod健康检查
有一种情况,容器还是正常运行的,但是服务无法使用;这种场景,一般称之为容器死锁,为了能够迟早的发现这种问题,可以通过对容器做健康检查来迟早发现问题。
-
启动探针:启动成功之后才是就绪与存活探针,启动失败,会根据策略重启
-
就绪探针:如初始化 mysql 等,不会重启,会让服务不可用
-
存活探针:通过 http tcp grpc 等方式验证容器是否可用
-
探针示例,后续补充
启动探针
spec:containers:- name: your-containerstartupProbe:httpGet:path: /healthzport: 8080failureThreshold: 30initialDelaySeconds: 120periodSeconds: 10timeoutSeconds: 1successThreshold: 1
存活探针
apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app: myapp
spec:containers:- name: myapp-containerimage: myapp:latestports:- containerPort: 80livenessProbe:httpGet:path: /healthzport: 80initialDelaySeconds: 5periodSeconds: 10
Liveness探针每10秒检查一次http://myapp-pod:8080/healthz,initialDelaySeconds用于指定探针初次执行前的延迟时间。
就绪探针
apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app: myapp
spec:containers:- name: myapp-containerimage: myapp:latestports:- containerPort: 80readinessProbe:httpGet:path: /readyzport: 80initialDelaySeconds: 5periodSeconds: 10
Readiness探针每5秒检查一次http://myapp-pod:8080/readyz,initialDelaySeconds用于指定探针初次执行前的延迟时间。
作用整个Pod参数配置
创建docker-registry
kubectl create secret docker-registry regcred \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址> \
-n test