# 一.安装 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
1
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
1
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
1
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
1
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
1
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
1
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
1
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
1
2
3
4
5
6
7
8

# 8.加入 node 节点

kubeadm join cluster-endpoint:6443 --token hums8f.vyx71prsg74ofce7 \
    --discovery-token-ca-cert-hash sha256:a394d059dd51d68bb007a532a037d0a477131480ae95f75840c461e85e2c6ae3
1
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
1

# 2.设置访问端口

#将type: ClusterIP 改为 type: NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
1
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
1
2
3
4

安全组放行 31113,可以批量放行 30000~39999

# 4.浏览器访问

https://master-ip:31113

https://node1-ip:31113

https://node2-ip:31113
1
2
3
4
5

# 5.创建访问账号

创建访问账号,准备一个 yaml 文件;

 vim dash.yaml
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
kubectl apply -f dash.yaml
1

# 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}}"
1

得到 koken 填到刚才浏览器打开的页面中,然后就成功了

eyJhbGciOiJSUzI1NiIsImtpZCI6IlZvcnVnTnJ3QnV6cGZkdUwyN25zOTVvTUpXX1NJWVp0X1ZpdDc2Z2NmUDQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWhoZjVuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIzZjgwMGE0My1hNmJkLTQ1ZGUtYWRiMy0zZTViZDVkZTMzODUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.BqaOb1TSlFi3X0ccq_LpGspHgNXBCtgtrYZa7gXMwxJhAtfz9beJCuT0vvlMXrlbCPPPNxVeK4_wIfce-2s5AO-L-oKSz-ynE53xDErCwumXPvprVtfgo3nMSXEqZ5eYVTRf5XsJgfDzZAtWYwyvenqQzGtvxYPznz2vuxIbZOcHQ7Pw7rah0LyEeWgPl7Mljnb_2_pxuphapsbYkDsuAOWqYxZSbVj9IBGl28XfKAXAkWT3P5-s-_EKp0ZVesvYKnzbDi8wrF0trwwAPe0nAfCyEEwUv1jFYtwRcs1SGbccfDbGL6xJXFugf4mVCKHZ1vhzi-PiUBRnmkWUw9teMQ
1

# 7.控制台

总体结构:

  1. 头部 header 有 logo,命名空间选择,搜索栏,创建资源按钮等。

  2. 蓝色一栏左侧为面包屑导航,右侧当点击相关资源,会出现编辑删除等按钮。

  3. 页面左侧为菜单栏,点击一级菜单会列出全部二级菜单内容,单击二级菜单,只显示该内容。

  4. 主干 body 为内容展示与操作区。内容包括集群中各类资源,操作基本为资源的增删改查。

菜单介绍:

  • 工作负载:可查看 Deployments,Pods,Controllers 等。
  • 服务:可查看 Ingress 和 Services 等。
  • 配置和存储:可查看 Config Maps 和 Secrets 等。
  • 集群:可查看命名空间,Nodes,持久卷等。

image-20230307092936032

# 三.常用命令

#命令格式 kubectl [command] [type] [name] [flages]

# 1.node

#获取所有节点
kubectl get nodes

#kubelet状态
systemctl status kubelet
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

image-20230308154821341

# 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
1
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
1
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.
1
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
1
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
1
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
1
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
1
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
1
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
1
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 # 容器所使用的镜像

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
1
2
3
4
5
6

# 3.apply 方式

# apply运行第一次创建资源,再次运行尝试按.yaml文件更新
# create创建后再次运行则报错
kubectl apply -f nginxpod.yaml
1
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
1
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
1
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



1
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
1
2
3
4
5
6
7
8

# 3.历史版本

kubectl rollout history deploy/nginx-test
1

# 4.修改配置

#进入编辑
kubectl edit deploy/nginx-test

#在Deployment的matadata项下的annotations中如下行定义change-cause
kubernetes.io/change-cause: "nginx1.14"

#再次查看版本
kubectl rollout history deploy/nginx-test
1
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
1
2
3
4
5

# 6.继续更新

#继续更新
kubectl rollout resume deploy/nginx-test

#查看更新情况
kubectl get pods -w
1
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
1
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?
1
2

修改方式:

mv /etc/kubernetes/kubelet.conf /etc/kubernetes/admin.conf
1

# 2.版本不匹配

错误原因是 k8s 不支持当前 calico 版本,如果你使用的是 1.20 版本的 k8s,可安装 v3.21 版本的 Calico,

curl https://docs.projectcalico.org/archive/v3.21/manifests/calico.yaml -O
1

# 探针模式

在 Kubernetes(K8s)集群中,探针是一种用于监控和管理 Pod 健康状态的机制。通过探针,Kubernetes 能够自动检测容器是否运行正常,并在必要时重启容器,以确保服务的高可用性。 Kubernetes 中三种探针模式:存活探针(LivenessProbe)、就绪探针(ReadinessProbe)和启动探针(StartupProbe)。

# 存活探针(LivenessProbe)

存活探针用于检查容器是否仍在运行。如果探针检测到容器无响应,Kubernetes 会重启该容器。这种机制特别适用于长时间运行的容器,在容器死锁或无法继续工作时,能够自动重启容器,恢复服务。

存活探针可以通过以下三种方式配置:

  1. exec 方式:在容器内执行特定命令,根据命令的退出状态码判断健康状态。
    livenessProbe:
      exec:
        command:
          - cat
          - /tmp/healthy
    
    1
    2
    3
    4
    5
  2. httpGet 方式:发送 HTTP 请求到容器的特定端点,根据 HTTP 状态码判断健康状态。
    livenessProbe:
      httpGet:
        path: /health
        port: 8080
    
    1
    2
    3
    4
  3. tcpSocket 方式:通过尝试连接容器的 TCP 端口来检测健康状态。
    livenessProbe:
      tcpSocket:
        port: 8080
    
    1
    2
    3

# 就绪探针(ReadinessProbe)

就绪探针用于判断容器是否已经准备好接收流量。如果就绪探针失败,Kubernetes 会从 Service 的负载均衡器中移除该 Pod,直到探针成功为止。

就绪探针的配置方式与存活探针类似,也支持 exec、httpGet 和 tcpSocket 三种方式。例如,使用 httpGet 方式配置就绪探针:

readinessProbe:
  httpGet:
    path: /actuator/health
    port: 8081
1
2
3
4

# 启动探针(StartupProbe)

启动探针仅在容器启动阶段执行,探测成功后就不再执行。这对于需要较长启动时间的应用程序特别有用,可以避免在应用程序完全启动之前就进行健康检查。

启动探针的配置示例:

startupProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 10
1
2
3
4
5

# 探针的配置参数

Kubernetes 中的探针都支持一些通用的参数来定义它们的行为,如initialDelaySecondsperiodSecondstimeoutSecondssuccessThresholdfailureThreshold等。

# 总结

Kubernetes 的探针模式为容器化应用提供了强大的健康检查和管理能力。通过合理配置探针,可以确保应用程序在出现故障时能够自动恢复,从而提高服务的稳定性和可靠性。存活探针、就绪探针和启动探针各自针对不同的应用场景,为 Kubernetes 集群中的 Pod 提供了全方位的健康保障。

上次更新: 11/29/2024, 10:12:16 AM