# 一.安装 k8s
# 1.环境准备
- 购买服务器,租服务器,还是比较便宜的
- 设置 vpc,并且 Ipv4 不要选 192.168 和 172.16 vpc 和交换机(k8s-kwan)
- 登录服务器
- 安装 docker
# 2.基础环境配置
#各个机器设置自己的域名
hostnamectl set-hostname xxxx
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 3.安装 kubeadm
安装 kubelet、kubeadm、kubectl
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 4.kubeadm 引导集群
#下载各个机器需要的镜像
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
#设置权限
chmod +x ./images.sh && ./images.sh
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 5.初始化主节点
#所有机器添加master域名映射,以下需要修改为自己的
echo "172.31.0.4 cluster-endpoint" >> /etc/hosts
#init失败需要kubeadm reset
2
3
4
#主节点初始化,#所有网络范围不重叠
kubeadm init \
--apiserver-advertise-address=172.31.0.4 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
2
3
4
5
6
7
8
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join cluster-endpoint:6443 --token uj9w2q.q8g5goo7upb9czel \
--discovery-token-ca-cert-hash sha256:b504716fe7b7b81c734152b2e2ad7f3622b5db98b08a89c56ab3d297f792ad15 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join cluster-endpoint:6443 --token uj9w2q.q8g5goo7upb9czel \
--discovery-token-ca-cert-hash sha256:b504716fe7b7b81c734152b2e2ad7f3622b5db98b08a89c56ab3d297f792ad15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 6.配置 kube
#创建相关目录并赋权
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#暴露admin.conf
export KUBECONFIG=/etc/kubernetes/admin.conf
2
3
4
5
6
7
# 7.安装网络组件
#下载配置文件
curl https://docs.projectcalico.org/archive/v3.21/manifests/calico.yaml -O
#获取
wget https://docs.projectcalico.org/archive/v3.21/manifests/calico.yaml
#加载资源
kubectl apply -f calico.yaml
2
3
4
5
6
7
8
# 8.加入 node 节点
kubeadm join cluster-endpoint:6443 --token hums8f.vyx71prsg74ofce7 \
--discovery-token-ca-cert-hash sha256:a394d059dd51d68bb007a532a037d0a477131480ae95f75840c461e85e2c6ae3
2
新令牌
kubeadm token create --print-join-command
# 二.部署 dashboard
# 1.下载并应用
recommended.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
# 2.设置访问端口
#将type: ClusterIP 改为 type: NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
2
# 3.查看要访问的端口
kubectl get svc -A | grep kubernetes-dashboard
> kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.96.119.16 <none> 8000/TCP 45m
> kubernetes-dashboard kubernetes-dashboard NodePort 10.96.46.89 <none> 443:31113/TCP 45m
2
3
4
安全组放行 31113,可以批量放行 30000~39999
# 4.浏览器访问
https://master-ip:31113
https://node1-ip:31113
https://node2-ip:31113
2
3
4
5
# 5.创建访问账号
创建访问账号,准备一个 yaml 文件;
vim dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
kubectl apply -f dash.yaml
# 6.获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
得到 koken 填到刚才浏览器打开的页面中,然后就成功了
eyJhbGciOiJSUzI1NiIsImtpZCI6IlZvcnVnTnJ3QnV6cGZkdUwyN25zOTVvTUpXX1NJWVp0X1ZpdDc2Z2NmUDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWhoZjVuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIzZjgwMGE0My1hNmJkLTQ1ZGUtYWRiMy0zZTViZDVkZTMzODUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.BqaOb1TSlFi3X0ccq_LpGspHgNXBCtgtrYZa7gXMwxJhAtfz9beJCuT0vvlMXrlbCPPPNxVeK4_wIfce-2s5AO-L-oKSz-ynE53xDErCwumXPvprVtfgo3nMSXEqZ5eYVTRf5XsJgfDzZAtWYwyvenqQzGtvxYPznz2vuxIbZOcHQ7Pw7rah0LyEeWgPl7Mljnb_2_pxuphapsbYkDsuAOWqYxZSbVj9IBGl28XfKAXAkWT3P5-s-_EKp0ZVesvYKnzbDi8wrF0trwwAPe0nAfCyEEwUv1jFYtwRcs1SGbccfDbGL6xJXFugf4mVCKHZ1vhzi-PiUBRnmkWUw9teMQ
# 7.控制台
总体结构:
头部 header 有 logo,命名空间选择,搜索栏,创建资源按钮等。
蓝色一栏左侧为面包屑导航,右侧当点击相关资源,会出现编辑删除等按钮。
页面左侧为菜单栏,点击一级菜单会列出全部二级菜单内容,单击二级菜单,只显示该内容。
主干 body 为内容展示与操作区。内容包括集群中各类资源,操作基本为资源的增删改查。
菜单介绍:
- 工作负载:可查看 Deployments,Pods,Controllers 等。
- 服务:可查看 Ingress 和 Services 等。
- 配置和存储:可查看 Config Maps 和 Secrets 等。
- 集群:可查看命名空间,Nodes,持久卷等。
# 三.常用命令
#命令格式 kubectl [command] [type] [name] [flages]
# 1.node
#获取所有节点
kubectl get nodes
#kubelet状态
systemctl status kubelet
2
3
4
5
# 2.pod
#查看所有pod
kubectl get pods
#动态查看命令结果
watch -n 1 kubectl get pods
#查看集群部署了哪些应用?
docker ps === kubectl get pods -A
#运行中的应用在docker里面叫容器,在k8s里面叫Pod
kubectl get pods -A
#查看某个pod
kubectl get pod pod_name -o wide
kubectl get pod pod_name -o json
kubectl get pod pod_name -o yaml
#删除pod
kubectl delete pods pod_name -n ns_name
#访问pod
curl pod_ip:pod_port
#查看pods和deploy
kubectl get pods,deploy -o wide
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 3.describe
#查看pod的详细信息,一般用于排查错误
kubectl describe pod pod_name
kubectl describe pod pod_name -n ns_name
#查看container name
kubectl describe pods -n sock-shop container_name
2
3
4
5
6
# 4.namespace
#查看namespace
kubectl get ns
#创建命名空间dev
kubectl create ns dev
#查看指定命名空间下的pod
kubectl get pods -n ns_name
kubectl get pods -n ns_name -o wide
#在namespace下运行一个nginx的pod
kubectl run pod --image=nginx --port=80 --namespace=dev
#删除ns
kubectl delete ns dev
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1 查看所有的ns 命令:kubectl get ns
[root@k8s-master ~]# kubectl get ns
NAME STATUS AGE
default Active 18h
dev Active 101m
kube-node-lease Active 18h
kube-public Active 18h
kube-system Active 18h
yuanzi Active 1h
# 2 查看指定的ns 命令:kubectl get ns ns名称
[root@k8s-master ~]# kubectl get ns yuanzi
NAME STATUS AGE
yuanzi Active 54s
# 3 指定输出格式 命令:kubectl get ns ns名称 -o 格式参数
# kubernetes支持的格式有很多,比较常见的是wide、json、yaml
[root@k8s-master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: "2021-09-09T09:19:07Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:status:
f:phase: {}
manager: kube-apiserver
operation: Update
time: "2021-09-09T09:19:07Z"
name: default
resourceVersion: "151"
selfLink: /api/v1/namespaces/default
uid: 389a16d1-5bdb-416d-8252-680858ce74d9
spec:
finalizers:
- kubernetes
status:
phase: Active
# 4 查看ns详情 命令:kubectl describe ns ns名称
[root@k8s-master ~]# kubectl describe ns default
Name: default
Labels: <none>
Annotations: <none>
Status: Active # Active 命名空间正在使用中 Terminating 正在删除命名空间
# ResourceQuota 针对namespace做的资源限制
# LimitRange针对namespace中的每个组件做的资源限制
No resource quota.
No LimitRange resource.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 5.apply
#根据配置文件,给集群创建资源
kubectl apply -f xxxx.yaml
2
# 6.labels
#查看pod的labels
kubectl get pod -n sock-shop --show-labels
#给pod打标签
kubectl label pod nginx -n dev version=1.0
#删除标签
kubectl label pod nginx -n dev version
#查看
kubectl get pod -n dev --show-labels
#更新
kubectl label pod nginx -n dev version=2.0 --overwrite
#指定label查找
kubectl get pods -l "version!=2.0" -n dev --show-labels
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 7.deployment
#显示删除成功,但查看会新产生一个,关闭pod控制器
#查看控制器
kubectl get deployment -n ns_name
#删除ngnix控制器
kubectl delete deployment nginx -n ns_name
# run默认使用控制器运行pod
# 创建deploymen.apps/nginx控制器,--replicas=3 建立三个pod
# pod有label run=nginx
kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -namespace=dev
#查看创建结果
kubectl get deployment,pods -n dev
#查看deployment详细
kubectl describe deploy nginx -n dev
kubectl delete deploy nginx -n dev
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 8.进入 ontianer
#查看pod下container
kubectl get pods podName -o jsonpath={.spec.containers[*].name} -n namespace
#格式
kubectl exec -it podName -c containerName -n namespace -- shell comand
#创建目录
kubectl exec -it podName -c containerName -n namespace -- mkdir -p /usr/local/spark
#进入pod中容器
kubectl exec -it podName -c containerName -n namespace -- /bin/sh
2
3
4
5
6
7
8
9
10
11
# 9. 编辑 edit
#可以查看各种文件
kubectl get all -n ns
#不同edit对象打开的文件类型不一样,可以注意一下
kubectl edit pod pdName -n ns
kubectl edit daemonset podName -n ns
kubectl edit deploy prometheus-deployment -n monitoring
2
3
4
5
6
7
8
9
# 10.ns 和 node
# 创建一个namespace
[root@master ~]# kubectl create namespace dev
namespace/dev created
# 获取namespace
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 21h
dev Active 21s
kube-node-lease Active 21h
kube-public Active 21h
kube-system Active 21h
# 在此namespace下创建并运行一个nginx的Pod
[root@master ~]# kubectl run pod --image=nginx:latest -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
# 查看新创建的pod
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod 1/1 Running 0 21s
# 删除指定的pod
[root@master ~]# kubectl delete pod pod-864f9875b9-pcw7x
pod "pod" deleted
# 进入pod容器
# kubectl exec -it 容器名称 -n 命名空间 bash
[root@k8s-master ~]# kubectl exec -it pod -n dev bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
root@pod:/# exit
exit
[root@k8s-master ~]#
# 删除指定的namespace
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 11.资源
- 创建/更新资源 使用声明式对象配置
kubectl apply -f XXX.yaml
- 删除资源 使用命令式对象配置
kubectl delete -f XXX.yaml
- 查询资源 使用命令式对象管理
kubectl get(describe)
资源名称
# 四.文件方式
# 1.文件创建
vi nginxpod.yaml
# 创建名为dev的namespace
apiVersion: v1
kind: Namespace
metadata:
name:dev
---
# 创建名为nginxpod,在dev命名空间下的pod
apiVersion: v1
kind: Pod
metadata;
name: nginxpod
namespace: dev
labels:
version: "1.0"
env: "test"
spec:
containers:
# pod中容器的名字
- name: nginx-containers
image: nginx:1.17.1 # 容器所使用的镜像
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 2.创建资源
kubectl create -f nginxpod.yaml
#查看
kubectl get ns dev
kubectl get pods -n dev
#删除资源
kubectl delete -f nginpod.yaml
2
3
4
5
6
# 3.apply 方式
# apply运行第一次创建资源,再次运行尝试按.yaml文件更新
# create创建后再次运行则报错
kubectl apply -f nginxpod.yaml
2
3
# 4.命令式 yaml 配置
vim deploy-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata;
name: nginxpod
namespace: dev
spec: # pod
replicas: 3
selector: # 控制器
matchlabels:
run: nginx
template;
metadata:
labels:
run: nginx
spec:
containers:
# pod中容器的名字
- name: nginx-containers
image: nginx:1.17.1
ports:
- containerPort: 80
protocol: TCP
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建
kubectl create -f deploy-nginx.yaml
# 查看
kubectl get deployment,pods -n dev
2
3
4
# 五.Service
# 1.命令式管理
#deployment nginx创建了pod
#暴露service ,名称svc-nginx1,类型ClusterIP
#service端口号80 访问service时访问端口号为80的pod
kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
#查看(clusterip 分配端口)
kubectl get service -n dev
curl clusterip:port
#删除
kubectl delete svc svc-nginx1 -n dev
ClusterIp #只能在集群内部(部署k8s)访问
NodePort #集群外部可访问 浏览器访问 http://service所在主机ip:service端口号
#发布服务
kubectl expose deploy nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort
#查看服务
kubectl get svc -o wide
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 2.查看部署的 app 版本
#查看服务
kubectl get svc -o wide
#访问服务
curl -I 192.168.10.13:30826
#查看nginx的版本,nginx-test为SELECTOR
kubectl describe deployment nginx-test | grep Image
2
3
4
5
6
7
8
# 3.历史版本
kubectl rollout history deploy/nginx-test
# 4.修改配置
#进入编辑
kubectl edit deploy/nginx-test
#在Deployment的matadata项下的annotations中如下行定义change-cause
kubernetes.io/change-cause: "nginx1.14"
#再次查看版本
kubectl rollout history deploy/nginx-test
2
3
4
5
6
7
8
# 5.更新与暂停
#更新版本并配置暂停
kubectl set image deploy/nginx-test nginx=nginx:1.15 && kubectl rollout pause deploy/nginx-test
#观察更新状态
kubectl rollout status deploy/nginx-test
2
3
4
5
# 6.继续更新
#继续更新
kubectl rollout resume deploy/nginx-test
#查看更新情况
kubectl get pods -w
2
3
4
5
# 3.命令式 yaml 配置
apiVersion: apps/v1
kind: Service
metadata;
name: svc-nginx
namespace: dev
spec:
clusterIP: 10.109.179.231 # 不指定则随机分配
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: ClusterIP
kubectl create -f svc-nginx.yaml
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 六.常见问题
# 1.worker 节点不可用
在运行join
命令并尝试kubectl get node
验证节点已连接后,出现如下错误
W0215 17:58:44.648813 3084402 loader.go:223] Config not found: /etc/kubernetes/admin.conf
The connection to the server localhost:8080 was refused - did you specify the right host or port?
2
修改方式:
mv /etc/kubernetes/kubelet.conf /etc/kubernetes/admin.conf
# 2.版本不匹配
错误原因是 k8s 不支持当前 calico 版本,如果你使用的是 1.20 版本的 k8s,可安装 v3.21 版本的 Calico,
curl https://docs.projectcalico.org/archive/v3.21/manifests/calico.yaml -O
# 探针模式
在 Kubernetes(K8s)集群中,探针是一种用于监控和管理 Pod 健康状态的机制。通过探针,Kubernetes 能够自动检测容器是否运行正常,并在必要时重启容器,以确保服务的高可用性。 Kubernetes 中三种探针模式:存活探针(LivenessProbe)、就绪探针(ReadinessProbe)和启动探针(StartupProbe)。
# 存活探针(LivenessProbe)
存活探针用于检查容器是否仍在运行。如果探针检测到容器无响应,Kubernetes 会重启该容器。这种机制特别适用于长时间运行的容器,在容器死锁或无法继续工作时,能够自动重启容器,恢复服务。
存活探针可以通过以下三种方式配置:
- exec 方式:在容器内执行特定命令,根据命令的退出状态码判断健康状态。
livenessProbe: exec: command: - cat - /tmp/healthy
1
2
3
4
5 - httpGet 方式:发送 HTTP 请求到容器的特定端点,根据 HTTP 状态码判断健康状态。
livenessProbe: httpGet: path: /health port: 8080
1
2
3
4 - tcpSocket 方式:通过尝试连接容器的 TCP 端口来检测健康状态。
livenessProbe: tcpSocket: port: 8080
1
2
3
# 就绪探针(ReadinessProbe)
就绪探针用于判断容器是否已经准备好接收流量。如果就绪探针失败,Kubernetes 会从 Service 的负载均衡器中移除该 Pod,直到探针成功为止。
就绪探针的配置方式与存活探针类似,也支持 exec、httpGet 和 tcpSocket 三种方式。例如,使用 httpGet 方式配置就绪探针:
readinessProbe:
httpGet:
path: /actuator/health
port: 8081
2
3
4
# 启动探针(StartupProbe)
启动探针仅在容器启动阶段执行,探测成功后就不再执行。这对于需要较长启动时间的应用程序特别有用,可以避免在应用程序完全启动之前就进行健康检查。
启动探针的配置示例:
startupProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
2
3
4
5
# 探针的配置参数
Kubernetes 中的探针都支持一些通用的参数来定义它们的行为,如initialDelaySeconds
、periodSeconds
、timeoutSeconds
、successThreshold
和failureThreshold
等。
# 总结
Kubernetes 的探针模式为容器化应用提供了强大的健康检查和管理能力。通过合理配置探针,可以确保应用程序在出现故障时能够自动恢复,从而提高服务的稳定性和可靠性。存活探针、就绪探针和启动探针各自针对不同的应用场景,为 Kubernetes 集群中的 Pod 提供了全方位的健康保障。