K8s理解初识到应用到理解

不写点什么就感觉自己没学过一样。
回忆一下Kubernetes中对应的学习过程

是什么?

k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。

干什么?

在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。 使用Kubernetes可以:

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它,等等...

怎么用?

搭建k8s集群环境步骤

使用阶段常用命令(持续更新---)

根据文件创建相应的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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值