不写点什么就感觉自己没学过一样。
回忆一下Kubernetes中对应的学习过程
是什么?
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。
干什么?
在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。 使用Kubernetes可以:
- 自动化容器的部署和复制
- 随时扩展或收缩容器规模
- 将容器组织成组,并且提供容器间的负载均衡
- 很容易地升级应用程序容器的新版本
- 提供容器弹性,如果容器失效就替换它,等等...
怎么用?
使用阶段常用命令(持续更新---)
根据文件创建相应的resource
kubectl create -f 文件名
复制代码
replace更新替换资源
kubectl replace -f 文件名
复制代码
Delete删除资源
kubectl delete -f 文件名
复制代码
查看pod信息(包括IP和node信息)
kubectl get pods -o wide
复制代码
获取service信息
kubectl get svc -o wide
复制代码
查看具体pod详情,在排错时尤为实用
kubectl describe pod POD-NAME -n NAMESPACE
复制代码
查看service详情
kubectl describe svc SERVICE-NAME -n NAMESPACE
复制代码
删除资源的方式不生效,使用强制删除
kubectl delete pods POD-NAME --grace-period=0 --force
复制代码
指定pod在指定的node上启动(场景大概是,系统对外提供的访问地址不能变,要固定住)
使node归属在一个zone上
kubectl label nodes NODE-NAME zone=north
复制代码
然后在启动服务yml中增加nodeSelector
nodeSelector:
zone: north
复制代码
样例
指定启动的项目内存大小(优化JVM)
这里是有个坑的,正式用K8s部署服务器的时候,最开始一切正常但是,等几个微服务都部署上去后,第二天早上发现所有的服务都重启了好几十次,每个服务都启动了双份或者多份,后来请运维人员查,才知道是服务器内存不足导致的,然后就增加了项目启动的内存优化,设置启动内存。后续还出现过一次服务器崩了的情况,是上传大文件把磁盘占满了,然后K8s直接挂掉了。(吸取教训,以后长点心)
内部构造?
我简单说一些基本概念,想深入了解移步 十分钟带你理解Kubernetes核心概念(形象的解释各个组件之间关系的图和更深入理解交互过程) 有几张图能很好看清交互关系
Pod
在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。
Replication Controller
Recplication Controller用来管理pod的副本,保证集群中存在置顶数量的pod副本,集群中副本的数量大于置顶数量,则会杀掉置顶数量之外的多余容器数量,反之则会启动少于置顶数量个数的容器,保证数量不变,replication controller是实现弹性伸缩、动态扩容和滚动升级的核心。
Service
Service是定义一系列Pod以及访问这些Pod的策略的一层抽象。Service通过Label找到Pod组。因为Service是抽象的,所以在图表里通常看不到它们的存在,这也就让这一概念更难以理解。
Label
k8s中的容器api对象都是通过Label进行 ,label的实质是一系列的k/v键值对,label是replication controllerh和service运行的基础,二者通过label进行判别node上运行的pod。
Node
物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件
- kubelet:是主节点代理
- kube-proxy:service使用其将连接路由到Pod
- docker或者rocket:k8s使用的容器技术来创建容器
Scheduler
调度器把未调度的pod通过binding api绑定到节点上。调度器是可插拔的,并且我们期待支持多集群的调度,未来甚至希望可以支持用户自定义的调度器。
下面三个涉及网络部分
kube-proxy
每一个节点也运行一个简单的网络代理和负载均衡
etcd
所有master的持续状态都存在etcd的一个实例中。这可以很好地存储配置数据。因为有watch(观察者)的支持,各部件协调中的改变可以很快被察觉。
flannel
flannel作为coreos提供给k8s的组件,在运行过程中通过与etcd进行通信获取整个集群网段信息并进行子网的二次分配,使得每个minion节点都能拥有一个唯一的子网网段,进而确保在整个k8s集群中运行的docker容器都能获得唯一的ip地址。
推荐一个全盘搜索的软件everything超级轻便好用,妈妈再也不用担心我找不到文件在哪里了(七天有效)
链接:pan.baidu.com/s/1w3GolQSh… 提取码:2080