目录
一、Kuberbetes基本知识要点
Kubernetes概述
Kubernetes 是一个全新的基于容器技术的分布式系统支撑平台。是 Google 开源的容器集群管理系统(谷歌内部 :Borg )。在 Docker 技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。并且具有完备的集群管理能力,多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。
Kubernetes组件
Master node:主节点kubectl :管理资源,对资源进行增删改查,一般安装在master node ,非常重要的命令,操作资源apiserver:提供了k8s资源操作的唯一入口,所有操作都要和apiserver交互,将操作资源的结果成功或失败信息放入到etcd数据库中,scheduler:调度器,通过与apiserver交互,将pod调度到最优的节点controller-manager:集群内部管理中心Etcd:存储了key:value数据信息,网络资源的信息calico:网络插件,跨主机跨节点通信。dockerwork node:工作节点kubelet:报告自身信息到apiserver,apiserver会把信息更新到etcd,启动pod,删除pod等kube-proxy:提供网络代理,负载均衡calicocoredns:提供dns服务
二、k8s核心资源Pod介绍
Pod概念
Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
Pod是需要调度到k8s集群的工作节点来运行的,具体调度到哪个节点,是根据scheduler调度器实现的。
Pod如何管理多个容器
Pod中可以同时运行多个容器。同一个Pod中的容器会自动的分配到同一个 node 上。同一个Pod中的容器共享资源、网络环境,它们总是被同时调度,在一个Pod中同时运行多个容器是一种比较高级的用法,只有当你的容器需要紧密配合协作的时候才考虑用这种模式。例如,你有一个容器作为web服务器运行,需要用到共享的volume,有另一个“sidecar”容器来从远端获取资源更新这些文件。
如何创建一个Pod资源
创建pod流程:
master节点:kubectl -> kube-api -> kubelet -> CRI容器环境初始化
第一步:
客户端提交创建Pod的请求,可以通过调用API Server的Rest API接口,也可以通过kubectl命令行工具。如kubectl apply -f filename.yaml(资源清单文件)
第二步:
apiserver接收到pod创建请求后,会将yaml中的属性信息(metadata)写入etcd。
第三步:
apiserver触发watch机制准备创建pod,信息转发给调度器scheduler,调度器使用调度算法选择node,调度器将node信息给apiserver,
apiserver将绑定的node信息写入etcd
调度器用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉。
第四步:
apiserver又通过watch机制,调用kubelet,指定pod信息,调用Docker API创建并启动pod内的容器。
第五步:
创建完成之后反馈给kubelet, kubelet又将pod的状态信息给apiserver,
apiserver又将pod的状态信息写入etcd。
资源清单YAML文件书写技巧
[root@hd1.com ~]# vim pod-tomcat.yaml
apiVersion: v1 #api版本
kind: Pod #创建的资源
metadata:
name: tomcat-test #Pod的名字
namespace: default #Pod所在的名称空间
labels:
app: tomcat #Pod具有的标签
spec:
containers:
- name: tomcat-java #Pod里容器的名字
ports:
- containerPort: 8080 #容器暴露的端口
image: tomcat-8.5-jre8:v1 #容器使用的镜像
imagePullPolicy: IfNotPresent #镜像拉取策略
常用pod命令
帮助信息
kubectl expain 资源名称[.字段名]
创建pod
kubectl create -f ymal文件
查看pod
kubectl get pod [-n 名称空间]
kubectl get pod -o wide
更新pod
kubectl apply -f yaml文件删除pod
kubectl delete pod pod名称进入pod中的容器
kubectl exec -it pod名称 shell查看pod中容器日志
kubectl logs pod名称 -c 容器名