1.基本概念
Kubernetes是一个提供集群服务容器化部署的开放平台,它不局限于任何一种语言,它可以帮助我们实现:
服务监控,负载均衡,故障发现与自我修复,自动扩容和资源调度等等。
Kubernetes集群
服务器的资源(物理机或虚拟机)构成一个Kubernetes集群
Master节点
集群中有一个Master节点,负责整个集群的管理和控制。
在Master上运行的关键进程有:
kube-apiserver(Kubernetes所有资源对象增删改查操作入口)
kube-controller-manager(Kubernetes所有资源对象的自动化控制中心)
kube-scheduler(负责资源调度)
etcd Server(保存资源对象的数据)
Node
除了Master,其他机器被称为Node节点,当某个Node宕机时,其上的工作负载会被Master转移到其他节点上去
在Master上运行的关键进程有:
kubelet(负责Pod对应容器的创建,启停等任务)
kube-proxy(实现Kubernetes Service通信与负载均衡)
Docker-Engine(Docker引擎,负责容器创建和管理)
Pod
Pod是Kubernetes设计的一个新概念,在一个Node节点可以运行多个Pod,每个Pod可以运行多个用户业务容器。
每个Pod都有一个特殊的容器Pause容器,这个Pause容器是属于Kubernetes的,代表整个Pod的状态。
Label
一个Label是key=value的键值对,通过Label给资源对象(Node,Pod,Service...)指定一些环境配置等等
Replication Controller简称RC
定义一个期望的场景,声明某种Pod的副本数,筛选目标Pod的Label Selector,创建Pod的模板等等
Deployment
Replication Controller的升级版,相对RC,Deployment可以随时知道当前Pod的部署进度
Service
定义一个服务的访问入口,通过这个入口访问一组Pod副本组成的集群实例
集群外部访问:指定对外端口NodePort, 访问任意节点+NodePort
Kubernetes的三种IP
Node IP: Kubernetes集群节点的物理网卡的IP,这是一个真实存在的物理网络
Pod IP: Pod IP是每个Pod的IP地址,不同Node上的Pod之间进行通信
Cluster IP: Service的Cluster IP,这是一个虚拟的IP,只能结合Service Port组成一个具体的通信端口
Volumn
Pod里的多个容器共享文件,容器的数据挂载到宿主机。
Volumn的类型有:emptyDir, hostPath, NFS等等,常用hostPath把Pod的数据挂载到宿主机的磁盘
NameSpace(命名空间)
实现不同Service的资源隔离,Kubernetes在启动后会创建一个default的命名空间,用户创建的资源
默认都会在default中
2.kubectl命令
kubectl命令行的语法如下:
$ kubectl [command] [TYPE] [NAME] [flags]
command:操作Kubernetes集群资源对象的命令,如create,describe,get,delete等等
TYPE: 资源对象的类型,区分大小写,能以单树,复数或者简写表示,如Node,Pod,Service等等
NAME: 资源对象名称,不指定则返回所有
flags: kubectl子命令的可选参数
示例
1.获取Pods信息
kubectl get pod podName
2.以yaml格式显示pod信息
kubectl get pod podName -o yaml
3.根据yaml文件一次性创建service和rc
kubectl create -f my-service.yaml -f my-rc.yaml
4.显示node的详细信息
kubectl describe node nodeName
5.登录容器
kubectl exec -ti podName -c containerName /bin/bash
6.跟踪查看容器日志
kubectl logs -f podName -c containerName