kubenetes部署服务的流程
以部署一个nginx服务来说明kubernetes系统各个组件调用关系:
1. 首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中
2. 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件
3. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上
在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知 apiServer
4. apiServer调用controller-manager去调度Node节点安装nginx服务
5. kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod
pod是kubernetes的最小操作单元,容器必须跑在pod中至此,
6. 一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理这样,外界用户就可以访问集群中的nginx服务了
常用pod资源
pod的6种状态
pending:(资源不足,或者节点存在pod不能容忍的污点)
terminating:(磁盘空间不足,查看根目录资源)
crashloopbackof:(pod反复拉起后退出,一般为系统配置的问题,内存资源不足,系统oom,cgroup oom)
oomkilled:(节点内存不足或启动是有内存限制)
evicted:(磁盘空间不足)
init:(初始化未完成,通常为找不到可以调度的资源)
查看kubectl版本
kubectl version #查看当前kubelet的版本
查看kubectl的帮助手册
kubectl help
查看当前kubectl的api的资源
kubectl api-resources
创建pod
kubectl apply -f pod.yaml
get 查询对应资源的pod
1.kubectl get all -o wide 查看所有pod的详细信息-o wide: 可以查看详细的信息,例如将pod调度到了那个节点2.kubectl get node 查看当前节点的状态kubectl get node -o wide 查看调度节点具体的信息3.kubectl get node --show-labels 查看节点上的标签
kubectl 缩容
kubectl scale rs pc-replicaset --replicas=2 -n dev
kubectl 删除pod
kubectl delete rs pc-replicaset -n dev
给pod打标签
kubectl label pod nginx-pod version=1.0 -n dev 添加pod标签kubectl label pod nginx-pod version=1.0 -n dev -overwrite #覆盖标签kubectl label pod pod_name version- -n dev 删除pod标签
查看pod的详细信息
(describe 当一个pod异常的时候,可以查看对应信息,查看报错)
kubectl describe pod/node pod/node的名称主要关注events的响应
kubectl删除异常的pod
kubectl -n dev get pods | grep "Evicted" | awk '{print $1}' | xargs kubectl delete pod -n dev
将pod的文件导出到主机上
kubectl cp -n 分区名 -c 容器名 pod名:文件绝对路径 文件目标位置
注意!!!
1.文件绝对路径前面不能加 /
2.文件目标位置不能为文件夹,必须为文件路径例:将pod里 /data/test.sql 拷贝到主机当前路径下,并命名为test.sql
kubectl cp -n zeus -c mysql zeus-mysql-back-0:data/test.sql ./test.sql
将主机的文件传到pod中
kubectl cp 主机文件路径 -n 分区 -c 容器 pod名:容器内绝对路径
注意!!!
1.主机文件路径可以为相对路径,也可以为绝对路径。
2.pod内绝对路径前面不能有 /例:将主机当前路径下的test.sql文件拷贝到pod的data目录下,并命名为testnew.sql
kubectl cp ./test.sql -n zeus -c mysql zeus-mysql-back-1:data/testnew.sql
查看pod的日志
kubectl logs -f pod_name -c 容器名称 -n namespace
进入某个pod
kubectl -exec -it pod pod_name /bin/bash 进入pod