疫情快半年了,不少公司的招聘也已经Freeze了,但是不管招聘如何,技术的发展和对技术的升级渴望是一直存在。今天就讲讲DevOps里比较热门的k8s话题。坊间传说,搞懂k8s,可以赢取“白富美”。
想要了解k8S,我们先搞清楚Docker
回到2010年,几个搞IT的年轻人,在硅谷成立了一家名叫“dotCloud”的公司。这家公司主要提供基于PaaS的云计算技术服务。
具体来说,是和LXC有关的容器技术。后来,dotCloud公司把自己的容器技术并命名为——Docker。
Docker技术诞生之后,并没有引起行业的关注。而dotCloud公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。
也许出于市场考虑,2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。Docker在行业变得非常火爆,也有更多的大厂给予强力支持。Docker火了后,把公司改成了Docker,也就是这个小海豚。
为啥Docker这么火爆,就是因为它很“轻”,提高了硬件效率。记得我之前做Network Engineer的时候,还当时需要了解Virtual Machine也就是虚拟机,玩游戏的小朋友可能有所听过 VMWare
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。
大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
想要搞懂Docker,其实看它的两句口号就行。
第一句,是“Build, Ship and Run”。
第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”
Docker把容器变得标准化了。要理解Docker,你需要明白三个最主要的概念:容器、镜像、仓库。
- 容器是运行在虚拟机上的进程。
- 镜像是一种存储形式,可以理解为数据或应用的副本。
- 仓库是用来存储镜像的。
Docker能够普遍使用起来,很大程度上个得益于Docker的仓库里汇集了很多已经标准化的镜像,大大提升了部署效率。
Docker大规模使用后,就发现了一些现实存在的问题:编排、管理和调度各方面,发现都不是很容易,于是迫于管理需求,需要更高级更灵活的管理,
就在这个时候,K8S出现了。
K8S,就是基于容器的集群管理平台,它的全称,是kubernetes
Kubernetes (简称k8s)近两年大火,如果你是一名云计算从业者,或者运维人员,还不了解kubernetes 的话那你已经OUT了。
Kubernetes是用于自动部署、扩展和容器化应用程序的开源系统。
当我们使用的容器服务多了,面临的访问量增大以后,我们就需要一种工具把这些容器统一的管理起来,需要实现对这些容器的自动部署、扩展和管理。也就是俗称的容器编排。
上图是Kubernetes的架构图。
从大的模块看,图中包含Master组件(APIs, scheduler, etc),Node节点和cloud端。
Master中,包含负责提供API服务的组件kube-apiserver;作为后台数据库的etcd,监听组件kube-scheduler;运行控制器的组件kube-controller-manager。
Node节点中包括运行在各个节点的客户端的kubelet,运行在各个节点的网络代理组件kube-proxy,支持运行容器底层环境的软件Container Runtime。
Cloud端作为集群外部的附加能力,通过与cloud-controller-manager组件对接,扩展k8s集群云上动态扩展的特性。
如何上手使用 kubernetes
Kubernetes的安装
Kubernetes有很多种安装方法,这里就不一一介绍了。推荐三种主要的安装方法,感兴趣的朋友可以通过关键词搜索相关教程,按步骤尝试安装。如果遇到问题,可以在匠人的社群提问。
常见的三种安装方法:
- Kuberspray
- Kubeadm
- 手动安装
Kubernetes有哪些优势
为什么我们要用Kubernetes?因为它更省钱,更快,更省力。
Kubernetes和Docker都是开源的,这意味着你不需要支付高昂的授权费用;容器服务从启动到关停,比传统的服务器、虚拟机都要快捷很多;管理方面,Kubernetes提供一整套架构,管理方便,节省了运维的人力。
容器技术是未来发展的必然趋势。如果你从事开发、运维、云计算相关工作,一定要多多关注容器技术的发展。
K8S的架构,略微有一点复杂,我们简单来看一下。
一个K8S系统,通常称为一个K8S集群(Cluster)。
这个集群主要包括两个部分:
一个Master节点(主节点)
一群Node节点(计算节点)
一看就明白:Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。
Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod.
Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
Kube-proxy,主要负责为Pod对象提供代理。
Fluentd,主要负责日志收集、存储与查询。
Pod 是一组紧密关联的容器集合,它们共享 PID、IPC、Network 和 UTS namespace,是 Kubernetes 调度的基本单位。Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。
几个与Kubernetes相关的产品/概念
在Kubernetes的生产实践中,有这几个产品/概念建议你去了解:
Openshift:OpenShift是由Red Hat开发的容器化软件解决方案。他们的主要产品是OpenShift容器平台,这是由Kubernetes管理的平台即服务(PaaS)。
Amazon EKS:Amazon Elastic Kubernetes Service (Amazon EKS) ,这是一项完全托管的 Kubernetes 服务。EKS拥有原生的kubernetes体验,并与AWS其他的云服务无缝的结合,为用户提供极佳的云端容器体验。下期直播我们会着重介绍这个产品。
微服务:由于容器技术的发展,微服务的理念也越来越被人们接受。按照微服务的理念,如果使用容器作为基础设施,能够实现快速部署,快速迭代。很多时候大家会将微服务和容器技术一起谈论,甚至有些公司直接将自己的新建的微服务应用部署在容器平台上。
而采用容器之后,很可能只需要一台服务器,创建十几个容器,用不同的容器,来分别运行不同网元的服务程序。
这些容器,随时可以创建,也可以随时销毁。还能够在不停机的情况下,随意变大,随意变小,随意变强,随意变弱,在性能和功耗之间动态平衡。
简直完美!
5G时代,核心网采用微服务架构,也是和容器完美搭配——单体式架构(Monolithic)变成微服务架构(Microservices),相当于一个全能型变成N个专能型。每个专能型,分配给一个隔离的容器,赋予了最大程度的灵活。
文 A家小哥
资料来源
1. 光环云
2. 小枣君
有想了解DevOps到底干嘛的,可以观看我们的Youtube和B站
有想了解谷歌云GCP的,可以观看我们的Youtube和B站
有想了解澳洲IT职场薪水的,可以观看我们的Youtube和B站
想加入社群讨论,可以扫描二维码加入社群