相关文章推荐
乖乖的红薯  ·  ValueError: I/O ...·  3 月前    · 
潇洒的雪糕  ·  bilibili游戏中心 - WIKI·  4 月前    · 
千杯不醉的骆驼  ·  Error: Istio ...·  5 月前    · 
魁梧的灭火器  ·  戒之手 - 抖音百科·  9 月前    · 
https://fuckcloudnative.io/posts/sealos/

kubernetes dashboard问题汇总

kubectl proxy --address='0.0.0.0' --disable-filter=true 1>/dev/null 2>&1 &

kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

kubectl create clusterrolebinding gitlab-cluster-admin --clusterrole=cluster-admin --group=system:serviceaccounts --namespace=default

kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous

kubectl 命令技巧大全

https://jimmysong.io/kubernetes-handbook/guide/kubectl-cheatsheet.html

kubectl get pod

kubectl taint nodes --all node-role.kubernetes.io/master-

kubectl delete deployment

kubectl exec -n higress-system -it pod/higress-gateway-769db969dc-kz4qj -- /bin/bash

端口转发问题

kubectl port-forward nginx 80:80 --address='0.0.0.0'

2.k8s健康检查.md

Pod 常见的状态

Pending:挂起,我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件。已经创建了但是没有适合它运行的节点叫做挂起,这其中也包含集群为容器创建网络,或者下载镜像的过程。

Running:Pod内所有的容器都已经被创建,且至少一个容器正在处于运行状态、正在启动状态或者重启状态。

Succeeded:Pod中所以容器都执行成功后退出,并且没有处于重启的容器。

Failed:Pod中所以容器都已退出,但是至少还有一个容器退出时为失败状态。
Unknown:未知状态,所谓pod是什么状态是apiserver和运行在pod节点的kubelet进行通信获取状态信息的,如果节点之上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看Unknown

Pod重启策略

Always: 只要容器失效退出就重新启动容器。

OnFailure: 当容器以非正常退出后重新启动容器。
Never: 无论容器状态如何,都不重新启动容器。

如果pod的restartpolicy没有设置,那么默认值是Always。
Pod常见状态转换场景

Pod的存活性探测与就序性探测

1、Pod 探针机制

在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是一个应用,应用在运行期间,可能因为某也意外情况致使程序挂掉。那么如何监控这些容器状态稳定性,保证服务在运行期间不会发生问题,发生问题后进行重启等机制,就成为了重中之重的事情,考虑到这点 kubernetes 推出了活性探针机制。有了活性探针后能保证程序在运行中如果挂掉能够自动重启,但是还有个经常遇到的问题,比如说,在Kubernetes 中启动Pod,显示明明Pod已经启动成功,且能访问里面的端口,但是却返回错误信息。还有就是在执行滚动更新时候,总会出现一段时间,Pod对外提供网络访问,但是访问却发生404,这两个原因,都是因为Pod已经成功启动,但是 Pod 的的容器中应用程序还在启动中导致,考虑到这点Kubernetes推出了就绪探针机制。

2、Pod 两种探针简介

LivenessProbe(存活探针):

存活探针主要作用是,用指定的方式进入容器检测容器中的应用是否正常运行,如果检测失败,则认为容器不健康,那么 Kubelet 将根据 Pod 中设置的 restartPolicy (重启策略)来判断,Pod 是否要进行重启操作,如果容器配置中没有配置livenessProbe存活探针,Kubelet 将认为存活探针探测一直为成功状态。

ReadinessProbe(就绪探针):

用于判断容器中应用是否启动完成,当探测成功后才使 Pod 对外提供网络访问,设置容器 Ready 状态为 true,如果探测失败,则设置容器的 Ready 状态为 false。对于被 Service 管理的 Pod,Service 与 Pod、EndPoint 的关联关系也将基于 Pod 是否为 Ready 状态进行设置,如果 Pod 运行过程中 Ready 状态变为 false,则系统自动从 Service 关联的 EndPoint 列表中移除,如果 Pod 恢复为 Ready 状态。将再会被加回 Endpoint 列表。通过这种机制就能防止将流量转发到不可用的 Pod 上。

3、Pod 探针的探测方式与结果

目前 LivenessProbe 和 ReadinessProbe 两种探针都支持下面三种探测方法:
ExecAction:在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。
HTTPGetAction:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器 健康。
TCPSocketAction:通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。
探针探测结果有以下值:

Success:表示通过检测。
Failure:表示未通过检测。
Unknown:表示检测没有正常进行。

4、Pod 探针的相关属性

探针(Probe)有许多可选字段,可以用来更加精确的控制Liveness和Readiness两种探针的行为(Probe):
initialDelaySeconds:Pod 启动后首次进行检查的等待时间,单位“秒”。
periodSeconds:检查的间隔时间,默认为 10s,单位“秒”。
timeoutSeconds:探针执行检测请求后,等待响应的超时时间,默认为 1s,单位“秒”。
successThreshold:探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness 探针中必须为 1s,最小值为 1s。
failureThreshold:探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3s,最小值为 1s。

5、两种探针的区别

ReadinessProbe 和 livenessProbe 可以使用相同探测方式,只是对 Pod 的处置方式不同:
readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。
livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。

docker run -d -p 80:80 zyhui98/httpserver:v1.0
docker exec -it ad725c24c61e /bin/bash
docker kill 128dbedb5de1
docker pull image
curl --unix-socket /var/run/docker.sock http:/v1.24/containers/json | jq

nc -v -w 10 172.18.0.2 -z 2370-2380

kubectl get po
kubectl get service
kubectl get deployment
kubectl get pod,svc -A -o wide
kubectl exec -it httpserver -- /bin/bash
kubectl describe pod
kubectl get events
kubectl logs mypod
nslookup httpserver-service.default.svc.cluster.local

工具箱,pod启动问题
kubectl run busybox --image=radial/busyboxplus:curl -n default -i --tty --rm
kubectl -n troubleshooting describe pod stress-6d6cbc8b9d-s4sbh

创建部署和服务
kubectl create deployment httpserver --image=zyhui98/httpserver:v1.0 -o yaml --dry-run=client > httpserver.yaml
kubectl expose deployment httpserver --type=NodePort --port=80 --target-port=80

获取yaml文件编辑,再指定nodePort,默认nodePort随机分配
kubectl get service httpserver -o yaml

kubectl create -f httpserver.yaml
kubectl apply -f httpserver.yaml
kubectl delete -f httpserver.yaml

kubectl port-forward service/higress-console 8081:8080

使用bash进入容器
kubectl exec -it httpserver bash

获取服务的endpoint
kubectl get ep httpserver

通过dns访问service,在集群pod才可以
nslookup httpserver.default.svc.cluster.local

minikube常用命令
minikube start
minikube stop
minikube delete --all
alias kubectl="minikube kubectl --"

minikube访问服务:
1、minikube ip 找到minikube的IP并通过它来访问NodePort类型的 service。
2、kubectl port-forward --address 0.0.0.0 service/? 30081:80 &