本文目录导航:
基于Linux自己初步搭建Kubernetes(k8s)集群基础,具体教程
k8s官方网站:,可自行检查相关文档说明
k8s-master:Ubuntu--192.168.152.100
k8s-node01:Ubuntu--192.168.152.101
k8s-node02:Ubuntu--192.168.152.102
所有已装置docker,未装置可依据官方文档装置:1,制止swap分区
K8s的要求,确保制止掉swap分区,不由止,初始化会报错。
在每个宿主机上口头:
2,确保时区和期间正确
时区设置
3,封锁防火墙和selinux
ubuntu 检查防火墙命令,ufw status可检查形态,ubuntu20.04自动所有封锁,无需设置。
4,主机名和hosts设置(可选)
非必定,然而为了直观繁难治理,倡导设置。
在宿主机区分设置主机名:k8s-master,k8s-node01,k8s-node02
hosts设置
1,更改docker自动驱动为systemd
为防止初始化产生一系列的失误,请审核docker和kubectl驱动能否分歧,否则kubectl没法启动形成报错。
版本不一样,docker有些为cgroupfs,而kubectl自动驱动为systemd,所以要求更改docker驱动。
可检查自己docker驱动命令:
更改docker驱动,编辑 /etc/docker/ (没有就新建一个),参与如下启动项参数即可:
重启docker
要求在每台机器上装置以下的软件包:
2,降级 apt 包索引并装置经常使用 Kubernetes apt 仓库所要求的包
装置软件包以准许apt经过HTTPS经常使用存储库,已装置软件的可以疏忽
3,下载地下签名秘钥、并参与k8s库
国外 :下载 Google Cloud 地下签名秘钥:
国际:可以用阿里源即可:
请留意,在命令中,经常使用的是Ubuntu 16.04 Xenial 版本, 是可用的最新 Kubernetes 存储库。
所以而非20.04 的focal。
4,降级 apt 包索引,装置 kubelet、kubeadm 和 kubectl,并锁定其版本
锁定版本,防止产生不兼容状况,例如,1.7.0 版本的 kubelet 可以齐全兼容 1.8.0 版本的 API 主机,反之则无法以。
只有要在master上操作即可。
1,初始化失误处置(没有报错的可以跳过这条)
失误揭示1:
要素:kubectl没法启动,journalctl -xe检查启动失误信息。
处置打算:k8s倡导systemd驱动,所以更改docker驱动即可,编辑 /etc/docker/ (没有就新建一个),参与如下启动项参数即可:
重启docker和kubectel
失误揭示2:
要素:初始化消费的文件,从新初始化,要求删除即可
失误揭示3:
处置方法:重置性能
2,初始化成功
无报错,最后产生以下,示意初始化成功,依据揭示还要求操作。
依据用户是root或许个别用户操作,由于大多环境不会是root用户,我也是个别用户,所以选用个别用户操作命令:
假设是root用户,口头以下命令:
初始化成功,用最后的揭示命令 kubeadm join.... 在node机器上参与集群即可。
3,主节点pod网络设置
主节点支持网络插件:这里装置Calico网络插件:Calico官方提供三种装置形式,1)低于50个节点,2)高于50个节点,3)etcd>细说kubernetes - 为什么是pod?
k8s作为如今最火的容器编排调度平台,好用我也就不用多说了。
当咱们初识k8s的时刻一个新的概念就到了咱们眼前,那就是pod。
咱们在经常使用了之后也就慢慢的接受了pod这个物品,然而你有没有想过,为什么是pod?k8s为什么会有这样的设计?当天咱们就来细细说说这个pod
首先咱们来回想看看k8s的架构图是什么样子的
从架构图中咱们可以看到,整个k8s的设计架构有以下几个要点:
当然其余组件都十分关键,这个咱们以后再说,咱们当天就来看看主角“pod”
一开局用的时刻我就猎奇为什么k8s要弄出一个pod,由于咱们一开局经常使用的是docker,操作的是docker容器,构建的也是docker镜像,为什么不间接调度docker容器就好了,这样粒度不是愈加粗疏,调度也会愈加繁难吗? 咱们在经常使用k8s之前也经常使用过docker-compose,从另一个角度说,这也是一种容器的治理,看起来也挺好的。 上方咱们就来说说pod
从上方的图你大略可以感遭到pod在k8s中其实是一个什么样的角色。
咱们假设经常使用虚构机,那么上方就会有一系列的服务这些服务或许会有一些依赖,而这样的依赖就如同在主机中运转的一个个进程组,往往其中也有着相关的依赖,而pod中的容器也是一样的情理,其中也会有相似这样的依赖,为了更好的形容和治理这样的依赖,于是就有了pod。
其实这样的理念往往可以类比出很多这样的设计。
必定会有这样的相关吗?我的觉得是,在现代技术服务的开发的环节中,这样的相关是无法防止的。
我上方来举几个例子。
咱们知道 java 的 web 运行往往要求部署在tomcat这样的容器之中,在 springboot 还没有产生以前,要求自己启动一个 tomcat 容器,而后将要求部署的运行打包部署到容器中去。
在以前你或许会想着,将 javaweb 打包一个war,而后编写一个 dockerfile 将 war 包cp到 tomcat 中的 webapp 目录中。
然而这样带来的就是每次降级颁布的时刻,镜像会很大,由于每次构建都会有一个基础的tomcat镜像。
而在k8s经常使用的时刻,会有的设计的是,将tomcat作为一个不变的镜像(它也不应该扭转)而把 war 包作为另外一个容器,而这样个容器同时挂载同一个目录,将 webapp 挂载的目录与 war包挂载的目录相反来到达目标,而后将他们放到同一个 pod 中。
相似的操作还有:外面说的就是前端静态页面和 nginx 的相关。
上方援用官方设计理念中的一句话:“ 比如你运转一个操作系统发行版的软件仓库,一个Nginx容器用来颁布软件,另一个容器专门用来从源仓库做同步,这两个容器的镜像不太或许是一个团队开发的,然而他们一块儿上班能力提供一个微服务;这种状况下,不同的团队各自开发构建自己的容器镜像,在部署的时刻组分解一个微服务对外提供服务。 ”
在经常使用 docker 部署名目标时刻会遇到一个疑问就是日志耐久化的疑问,由于 docker 容器假设被删除的话,其中的文件也会被删除,那么咱们的日志文件同时也会被删除,也就是说咱们必定要将日志耐久化。
最经常出现的形式是,将日志存储的目录挂载到宿主机上,这样容器被删除的时刻日志不会被删除。 而在k8s中经常出现的日志处置架构是怎样样的呢?
经常使用的是 sidecar,这个是什么呢?其实就是一个辅佐性质的容器,同时与主容器放在同一个 pod 中,读取主容器挂载进去的日志目录。
其实后续还可以做更多的操作,比如日志发送es等等。
总之咱们可以看到,在一个pod中的容器相关是十分亲密的,他们可以领有同一个目录,甚至可以领有同一个网络,可以领有相互的服务,这样的相关我听过的名词叫做“超亲密相关”。
就相似一对夫妻之间的相关了。
由于在如今的多说运行中,曾经简直做不到一团体顶天立地了,总是会有各种各样的依赖,依赖一些组件,依赖一些工具,依赖一些网络服务等等,一个进程组有很多的进程相互协助来最终成功性能一样。
这样的相关太过经常出现,于是k8s就将它设计为了pod。
假设你曾经对docker的成功比拟相熟,其实pod的成功并不复杂。(假设对docker成功不相熟可以翻看之前的博客) 其实pod是一个逻辑上的概念,其实pod做的事件很繁难:
其实k8s做的就是初始化一个infra的容器(这是一个很小的容器),应用这个容器去当先占用要求经常使用的 Namespace ,而后在将用户指定的容器加载出去,同时经常使用的就是相反的 Namespace 了。(假设有 InitContainer 会优先按顺序初始化它,图上就不做说明了)
这样共享网络应该是没有疑问了,那么要共享Volume也很繁难。
pod 只有要将 Volume 目录挂载到宿主机,让外部的容器挂载这个目录就可以了。
再来说说pod还有哪些性能,这些性能也是k8s为什么设计pod的要素之一
经过Probe:LivenessProbe或许ReadinessProbe,可以探测运行能否处于肥壮形态,假设不肥壮做出相关的反响。
这就好比k8s可以活期的帮你监控、维持一整个运行的肥壮。
其真实咱们看来,很多时刻服务挂了,要求重启,要求做高可用,那么nginx呢?tomcat呢?也是一样的。
所以pod的肥壮能保障整个服务的所有肥壮经常使用。
咱们可以经过给Pod参与/ingress-bandwidth和/egress-bandwidth这两个annotation来限度Pod的网络带宽。
为什么我提到了这特性能呢?由于在实践的业务开发环节中经常会经常使用一些网络插件,这些网络插件在流量的控制上十分有用,有的时刻咱们会依据网络流量来做一系列的操作,用户的突然增长造成的流量剧增能否要扩容等等...而这样的监控和限度关于pod来说无疑会愈加繁难,而不要求管pod外部的容器的流量。
重启的战略,这个也算是一特性能吧
官方:一个Pod(就像一群鲸鱼,或许一个豌豆夹)。
我觉得 Pod 更证实了一种设计形式“组合”,在有的时刻会,组合的正当,就会繁难很多物品,比如设计了一堆组件,组合在一同;ps画图的时刻方块更圆组合在一同,就可以一同多复制几个组合。
当然咱们在看法到为什么要这样设计 Pod 的同时要求看法到,咱们应该将什么样的容器组合搁置在同一个 Pod 之中才比拟适宜。
遵照必定的“容器设计形式”启动编排,调度的时刻才会愈加随心所欲。
CKA 及CKAD认证阅历分享
大家好,前段期间经过了CNCF CKA、CKAD认证,这里我将分享我的认证阅历,宿愿能对你们有所协助。
**考试目标:**我从事与容器和Kubernetes相关的上班,对这个畛域充溢激情。
我选用参与这个认证一方面是为了坚固我的常识,另一方面是为了取得专业机构的认可。
此外,公司正在放开成为Kubernetes服务提供商,要求至少有三人经过CKA认证。
**考试前预备:**1. **报名相关事项:** - 报名后,他们会审核你的笔记本电脑环境。
- 选用英文版的CKA考试,由于考试是在线启动的(听说台湾有考点,宿愿大陆也能尽快设立)。
- 选用北京时区,并依照揭示选用适宜的期间。
- 考试期间可以修正,但要求在考试前24小时并且在上班日启动。
- CKA考试的及格分数是75分,有两次考试时机,假设第一次性没过,一年内可以再次考试。
- 报名费用为300美元(听说彩色星期五有活动)。
2. **备考资料:** - 官方资料 - 国际有些守业公司提供培训,费用较高,适宜初学者或经济条件准许的人。
- 介绍的学习视频:感谢哔哩哔哩和华为云提供的视频,链接:(华为云的视频内容不错,但录制品质有待提高)。
**考试留意事项:**1. **考试流程:** - 考试前15分钟进入考试界面,确认身份,审核环境等。
- 考题是中文的,但有些翻译不佳,倡导检查英文版。
- 确保有良好的网络环境,可以经常使用公司网络。
- 假设考试终止,尝试新建标签页从新进入。
- 经常使用Chrome阅读器。
- 考试期间弛缓,倡导先做繁难标题,难题记在提供的笔记表格里最后处置。
- 的内容可以间接粘贴。
- 节俭期间的技巧:经常使用kubectl run命令,标签保留内容,命令补全等。
2. **考试关键常识点:** - 创立资源:Pod、Deployment、Daemonset等,留意多容器Pod和Daemonset的tolerations。
- 日志输入:经常使用kubectl logs xxxx | grep xxxx挑选日志。
- 节点调度:经常使用nodeSelector。
- Init容器:在现有文件中参与Init容器。
- Deployment创立和镜像版本降级,经常使用kubectl run、kubectl set image、kubectl rollout undo。
- 泄露服务:经常使用kubectl expose。
- Secret的经常使用。
- 排错:控制节点或上班节点疑问。
- 参与节点:TLS Bootstrap。
- etcd备份。
**考试后留意事项:**1. **结果通知:** - 考试后,不会立刻收到结果。
官方示意36小时内会经过电子邮件通知,我是在34小时后收到邮件的,包含效果和认证证书。
2. **证书有效期:** - 最新的信息是,CKAD的证书有效期改为三年。
- CKAD考试期间为120分钟,19道题;CKA为180分钟,24道题。
- CKAD的证书有效期为2年,而CKA为3年。
- CKAD关键触及资源的创立,而CKA包含创立资源和排错。