https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/
创建当前pod容器前 先创建 依赖的其他 containers 容器
## 创建容器 (需等待初始化操作完成在创建容器)
containers:
- name: mayikt-main-container
image: nginx:1.17.9
ports:
- name: nginx-port
containerPort: 80
## 初始化操作 (睡眠40秒),实际可修改为等待指定服务启动成功
initContainers:
- name: mayikt-mysql
image: busybox:1.30
command: [ "/bin/sh","-c","sleep 40;"]
k8s在主容器的启动之后和停止之前提供了两个钩子函数,进行容器启动后 和 容器停止后的相关操作
执行 linux 命令
spec:
containers:
- name: main-container
image: nginx:1.17.1
lifecycle:
postStart:
exec: # 容器创建之后执行(相关命令)修改nginx 页面
command: ["/bin/sh","-c","echo mayikt > /usr/share/nginx/html/index.html"]
preStop:
exec: # 容器停止之后 执行停止nginx服务
command: [" /usr/sbin/nginx","-s" , "quit" ]
对指定端口发起请求检查
lifecycle:
# 容器创建之后执行
postStart:
tcpSocket:
port: 8080
发起一个http请求
lifecycle:
postStart:
# 容器创建之后执行
httpGet:
path: /init # URI地址
port: 80 # 端口号
host: 192.168.110.1 # 主机地址
scheme: HTTP # 支持的协议,http或https
# http://192.168.110.1/init
相当于容器的心跳检测,发现容器挂掉了可以主动进行重启
spec:
containers:
- name: main-container
image: nginx:1.17.1
livenessProbe: # 存活探针(可用性探针)
exec: # 执行一个pwd
command: ["/bin/pwd" ,"/"]
livenessProbe: ## 存活探针(可用性探针)
tcpSocket: ## 底层会尝试访问容器ip:8080
port: 8080
livenessProbe:
httpGet: #访问指定的scheme://host:port/path
scheme: HTTP # 支持的协议,http或者https
port: 80 # 端口号
path: /mayikt # URI地址 该地址不存在 会报错404
livenessProbe:
httpGet: #访问指定的scheme://host:port/path
scheme: HTTP #支持的协议,http或者https
port: 80 #端口号
path: /mayikt #URI地址 该地址不存在 会报错404
initialDelaySecands: 10 # 容器启动后10s开始探测
failureThreshold: 2 # 探测2次认为是失败
spec:
containers:
- name: nginx
image: nginx:1.17.9
--------------
restartPolicy: Never # 设置重启策略为Never 无论状态如何 不会重启
spec:
containers:
- name: nginx-container
image: nginx:1.17.9
nodeName: node1 #指定该pod运行在node1 节点
containers:
- name: nginx
image: nginx:1.17.9
nodeSelector:
nodev: v2 #指定调度到具有node=v2标签 node节点上
策略
亲和性
operator关系符
容器创建必须在标签v3或v4中,如果没有v3或v4标签的节点,则创建失败
spec:
containers:
- name: nginx
image: nginx:1.17.9
------------------------------------------------------------------------
affinity: # 设置亲和性
nodeAffinity: # 亲和性node 设置
requiredDuringSchedulingIgnoredDuringExecution: # 硬限制
nodeSelectorTerms:
- matchExpressions: # 匹配nodev的值在[v3,v4 ]中的标签 node节点
- key: nodev
operator: In
values: ["v3" , "v4"]
容器创建必须在标签v3或v4中,如果没有v3或v4标签的节点,则随机分配到其他节点中
------------------------------------------------------------------------
affinity: # 亲和性设置
nodeAffinity: # 设置node亲和性
preferredDuringSchedulingIgnoredDuringExecution: # 软限制
- weight: 1
preference:
matchExpressions: # 匹配当前node节点标签是否有 ["v3" , "v4"]
- key: nodev
operator: In
values: ["v3" , "v4"]
容器直接创建在指定 pod 中
------------------------------------------------------------------------
affinity: #亲和性设置
podAffinity: #设置pod亲和性
requiredDuringSchedulingIgnoredDuringExecution: # 硬限制
- labelSelector:
matchExpressions: # 匹配podinfo的值在 [mayikt-pod03]中的标签
- key: podinfo
operator: In
values: ["pod01"]
topologyKey: kubernetes.io/hostname
容器创建除了不会分配到以下指定的 pod,随机分发到其他 pod 中
------------------------------------------------------------------------
affinity: #亲和性设置
podAntiAffinity: #设置pod反亲和性
requiredDuringSchedulingIgnoredDuringExecution: # 硬限制
- labelSelector:
matchExpressions: # 匹配podinfo的值在 [mayikt-pod03]中的标签
- key: podinfo
operator: In
values: ["pod01"]
topologyKey: kubernetes.io/hostname
创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能
# 创建命名空间
kubectl delete ns mayikt-sit
kubectl create ns mayikt-sit
# 查看执行命名空间下pods
kubectl get pods -n mayikt-sit
# 查看指定命名空间下的 pods 详情
kubectl describe pods -n mayikt-sit
# 查看执行命名空间下副本集
kubectl get rs mayikt-rp -n mayikt-sit -o wide
yml
apiVersion: apps/v1
kind: ReplicaSet
# 命名空间
metadata:
name: mayikt-rp
namespace: mayikt-sit
spec:
# 创建副本数量
replicas: 3
# 选择器,选择副本的标签,pod控制器与pod之间建立联系 (对应副本配置的标签)
selector:
matchLabels:
app: nginx-pod
# 副本配置
template:
# 副本中的容器标签
metadata:
labels:
app: nginx-pod
# 副本中的对应容器
spec:
containers:
- name: nginx
image: nginx:1.17.9
命令
# 执行yml文件
kubectl create -f mayikt-pod-controller01.yml
执行命令
会进入yml vi编辑模式, 修改 replicas 副本数量,保存后自动进行扩容缩容
kubectl edit rs mayikt-rp -n mayikt-sit
同扩容缩容操作,编辑副本 image 版本即可
kubectl edit rs mayikt-rp -n mayikt-sit
k8s删除ReplicaSet前,会将ReplicaSet的replicasclear调整为0,等待所有的Pod被删除后,在执行RS对象的删除。
kubectl delete rs mayikt-rp -n mayikt-sit
Deployment 是 ReplicaSet 的二次封装,在原基础功能上增加的 滚动更新 和 版本回退
# 创建命名空间
kubectl delete ns mayikt-sit
kubectl create ns mayikt-sit
# 查看指定命名空间下pods
kubectl get pods -n mayikt-sit
kubectl get pods -n mayikt-sit -w
# 查看指定命名空间下的 pods 详情
kubectl describe pods -n mayikt-sit
# 查看执行命名空间下副本集
kubectl get deploy -n mayikt-sit -o wide
# 查看执行命名空间下副本
kubectl get rs -n mayikt-sit
apiVersion: apps/v1
kind: Deployment
# 命名空间配置
metadata:
name: mayikt-deployment
namespace: mayikt-sit
spec:
# 副本数量
replicas: 3
# 选择器,选择副本的标签,pod控制器与pod之间建立联系 (对应副本配置的标签)
selector:
matchLabels:
app: nginx-pod
# 副本配置
template:
# 副本中的容器标签
metadata:
labels:
app: nginx-pod
# 副本中的对应容器
spec:
containers:
- name: nginx
image: nginx:1.17.9
命令
# 执行yml文件
kubectl create -f mayikt-pod-controller01.yml
直接命令形式更改, 修改 replicas 副本数量,自动进行扩容缩容
kubectl scale deploy mayikt-deployment --replicas=6 -n mayikt-sit
直接命令形式更改, 修改 replicas 副本数量,自动进行扩容缩容
yml 中 spec 配置
spec:
strategy: # 策略
type: Recreate # 重建更新
replicas: 3
yml 中 spec 配置
spec:
strategy: # 策略
type: RollingUpdate # 滚动更新
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
replicas: 3
更新时根据配置策略来决定是 重建更新 还是 滚动更新
kubectl set image deploy mayikt-deployment nginx=nginx:1.17.8 -n mayikt-sit
# 首次执行yml创建时需加上--record 让其支持版本回退
kubectl create -f mayikt-pod-controller04.yml --record
# 查看版本更新状态
kubectl rollout status deploy mayikt-deployment -n mayikt-sit
# 查看历史更新记录
kubectl rollout history deploy mayikt-deployment -n mayikt-sit
# 版本回退 to-revision=1 的1是对应的历史更新记录的版本号
kubectl rollout undo deployment mayikt-deployment --to-revision=1 -n mayikt-sit
# 查看执行命名空间下副本集
kubectl get deploy -n mayikt-sit -o wide