w
wnwk
V1
2023/03/03阅读:33主题:默认主题
K8S杂记
Completed状态表示已经通过cmd或者ENDPOINT调用了应用程序,并以非错误状态退出了。通常会看到Completed>CrashLoopBackoff->Running的周期性变化,这说明容器启动后调用进程不会一直运行而且退出了Kubernetes将其视为进程“完成”
相关命令-备忘
#启动 minikube virtualbox 多节点 方式
minikube start --nodes 2 -p multinode --driver='virtualbox' --image-mirror-country='cn' --kubernetes-version=v1.23.8
# 查询 所有 namespace 下的 pod
kubectl get pod -A
# 查询指定的pod
kubectl get pod podName
# 查看pod 详细信息
kubectl describe pod podName
# 查看日志
kubectl logs podName
# 查看指定资源的yml 文件 和运行状况,运行状况通过status 体现
kubectl edit daemonset kube-proxy --namespace=kube-system
#查看 节点信息
minikube node [add|start|stop|delete|list]
# 查看deploy 和 pod 的联系
kubectl describe deploy deployName // 从输出中可以看到到ReplicaSet的名称。
kubectl get pod -A // 有同一个deploy部署的容器名以 ReplicaSet的名称为前缀
#查看minikube 配置文件
minikube profile list
#激活某个配置文件
minikube profile profileName
#查看deploy 滚动更新的过程
kubectl.exe get deploy deployName --watch
# 删除minikube 的配置信息
minikube.exe delete -p profileName
#查看那些资源在命名空间,同时也可以查看资源的简称
kubectl.exe api-resources -n=true
# 通过文件方式创建cofingmap,指定key值,默认的key是文件名
kubectl.exe create cm configmapName --from-file=key=./deploy.yml
# 基于目录创建configmap
kubectl.exe create cm configmapName --from-file=../busybox/
# 显示pod转存的日志,可以帮助定位pod重启的问题
kubect logs podName -p
# minikube使用本地镜像
minikube image load imageName
# 设置默认的namespace
kubectl create namespace myproject
kubectl config set-context --current --namespace=myproject
# minikube config 文件默认保存在 $HOME/.kube/config
#Resource units are the same for pod resource requests and resource limits. For example, Gi means GiB, and m means millicores. One millicore is the equivalent to 1/1000 of a single CPU core.
k8s 命名空间 ,但是无法隔离pod之间的通信,仅用于限制资源对象名称的作用域
金丝雀发布
deploy文件中设置 maxSurge 为1, maxUnavailable为0 ,为minReadySeconds设置一个合理的时间,执行如下命令 kubectl.exe apply -f .\ .yml && kubectl rollout pause deployment deployName. 在更新一个pod后会暂停。测试通过后,执行 kubectl.exe rollout resume deploy deployName。重新启动更新
minikube ingress插件,如果使用ip 访问,不用使用 host,否则会出现404的错误,如果使用域名访问,需要在host 中配置映射,service 可以配为 clusterip,nodeport ,loadbalance
clusterIp ,nodePort
-
clusterIp 会分配一个集群内的ip地址,只有集群的可以访问呢,集群外不可以访问,登录集群内的机器,通过 clusterip 和yml中指定的端口就可以访问 -
nodeport 是通过node 节点ip 和 yml 中指定的nodeport端口来访问的,一般情况下这个端口的范围是从 30000开始的,外部可以通过nodeport来访问集群的服务
k8s pod服务发现
-
环境变量。如果部署了service,之后部署的pod,kubelet 会把service的环境变量配置到对应的pod 中。局限性就是要先创建service,再创建pod,否则pod中的环境变量不会存在和service相关的信息(除非重启),此外还要求service 和pod再同一个命名空间。 -
DNS,登录pod 后,执行 more /etc/resolv.conf查看域名。一般是通过服务名.命名空间.svc.cluster.lcoal 来查找服务
k8s通过configmap ,secret,downwardAPI这三种方式向pod 注入配置信息,可以简单和docker -env方式做类比
configmap和secret可以通过环境变量 或 存储卷引用的方式把配置信息传递到pod 中。如果 configmap 或 secret的内容更新后,只有存储卷的方式支持动态刷新,环境变量的方式不支持。如果pod 不支持配置文件重新加载的化,为了新的配置生效,需要重启pod。比如nginx 的配置文件更新了,要使用 -s reload重新加载。存储卷的方式,支持覆盖pod中指定的目录,也支持覆盖目录中的指定文件,也支持有选择的从存储卷中加载文件, 对于pod 中加载的存储卷通过符号链接的方式实现了动态更新。可以通过 ls -lA命令来查看。对于覆盖pod目录中特定文件的方式不支持动态更新,通过ls命令可以看到没有符号链接的文件

作者介绍
w
wnwk
V1