【CKA考试笔记】二、kubernetes介绍及部署

本文详细介绍了为何使用Kubernetes进行容器管理,包括其提高效率、高可用性和简化管理的优势。接着,阐述了Kubernetes的架构,分为master和worker节点,以及核心组件如kubelet、scheduler和controller-manager等。在搭建K8S集群的过程中,详细列出了每一步骤,包括环境准备、组件安装、集群初始化和节点加入。此外,还提到了安装网络组件Calico和metrics-server以实现节点和Pod的负载查看。最后,介绍了如何设置kubectl命令的自动补全功能。

为什么要使用kubernetes?

(1)在使用docker或nerdctl创建容器时,都需要手动使用run命令去创建,那么假如生产环境中需要创建成千上万个容器时,手动创建就会大大影响效率

(2)若某台服务器宕机了,那么里面的容器也停止了,不具备高可用性

(3)若某个容器出现了问题,很难被发现,不便于管理

——所以为了更方便地管理容器,我们使用容器编排工具来对容器进行统一管理,kubernetes就是一种容器编排工具,除此之外还有:
docker swarm
mesos
openshift

有了k8s,就不需要我们一个一个手动创建了,k8s会帮我们去管理容器,k8s通过一个代理——kubelet,通过kubelet去访问一个个runtime(docker、containerd、rkt、cri-o…),从而进行管理容器,原先docker一家独大,但是随着各种容器客户端的发展,都想接入k8s作为runtime,但是若将每一个客户端产品都加进k8s,非常不利于维护,因此k8s制定了一个标准接口(CRI),只要符合这个标准,并提供CRI-shim(垫片,支持CRI标准的runtime),就可以接入k8s作为runtime,并且使用gPRC协议来互相通信

由于docker不支持CRI标准,因此1.24版本之后的k8s不支持docker,若还是想使用docker,则可以在中间增加一个转接头:cri-docker
在这里插入图片描述

kubernetes架构及组件介绍

以VMware的虚拟化架构来举例
在这里插入图片描述
如图,ESXi是专门用来运行虚拟机的,为了统一管理、统一调度这些ESXi及里面的虚拟机,需要安装一台vcenter,来作为一个控制台,通过 vsphere client 或 vsphere web client 连接到vcenter上,来对整个虚拟化架构进行管理

k8s的架构就类似这种虚拟化架构类似
![![在这里插入图片描述](https://img-blog.csdnimg.cn/1e0a64b04eeb493eb879538a7bb9ccf7.png](https://img-blog.csdnimg.cn/008438950c4943aca38af98630c7495e.png

master(控制台)——就相当于vcenter作为一个控制台,也称 control plane node(控制平面节点)
worker(节点)——就相当于ESXi,专门用于运行pod

pod(豆荚)
在docker、nerdctl中,直接管理容器,容器是最小的调度单位,而在k8s中,直接管理的是pod,pod是最小的调度单位,pod与容器的关系就好比豆荚与豆子的关系,pod是豆荚,容器就是豆荚里一粒粒的豆子,而kubernetes就好比豆荚藤
在这里插入图片描述

一个pod里可以有多个容器,但一般我们只会在一个pod里设计一个容器,那既然只有一个容器,为什么还要在外面加个pod这层壳呢,因为在pod里有各种策略、各种网络设置,加强了功能
在这里插入图片描述

kubernetes中的组件
master上运行的组件
kubectl:客户端命令行工具,为整个系统的操作入口,将命令发送给api-server
api-server:REST接口,接收客户端请求,为整个系统的控制入口
scheduler:调度器,节点资源管理,创建pod时,判断并分配到某个worker来创建
controller-manager:整个系统的大管家,执行整个系统中的后台任务,监控节点状况、pod个数、pod和service的关联等
kubelet:运行在master和每个节点上,作为代理,接受master分配过来的任务,周期性获取容器状态,反馈给master上的api-server
kube-proxy:运行在master和每个节点上,作为代理,用于把发送给service的请求转发给后端pod,做相应策略,模式有iptables和ipvs

worker上运行的组件
kubelet:略
kube-proxy:略
calico网络:使得各个节点中的pod能够互相通信,集群安装好一定要安装这个组件,docker都是在单机上配置的,不同主机若想要通信,一是通过端口映射,要不就是安装calico网络来实现,k8s是多主机的环境,pod可能分布在各个不同的机器上,因此各个pod若想互相通信,则需要在k8s环境中安装calico网络

在这里插入图片描述

(docker中我们手动run命令来创建容器,k8s中,客户端连接到master,发出一个创建pod请求,master里的调度器来判定由worker来创建)
——api-server接收用户请求,验证用户身份、权限,当接收到了创建pod请求,就会通过scheduler来调度由哪个节点来创建,当然也可以自己指定,每个节点上都有一个kubelet,kubelet中可以进行一些配置,如使用哪个厂商的runtime(containerd、docker…)、kubelet接收到了创建pod请求后,调用相应的runtime去创建容器,每一次kubelet与api-server的通信,都需要TLS证书认证,controller-manager是整个系统的大管家,会实时监控系统运行状态,当监测到kubelet证书过期了,controller-manager会重新给它颁发证书,当监测到某个pod宕机了,会重新生成一个这样的pod,但是pod的IP地址会改变, 因此用户直接访问这个pod并不方便,所以设置了一个service-svc的服务,它实际上实现了负载均衡的功能,用户访问service-sve,然后由service-sve通过kube-proxy这个组件来转发到后端的pod,转发时kube-proxy通过iptables或者ipvs这两种模式来实现
——可以通过BGP、vxlan、openswitch等技术在各个节点之间建立通道,例如calico工具封装了这些协议,使得各个节点内的pod可以跨节点通信
——用户所有的创建、删除等操作及一些配置信息,都会记录到etcd数据库里去

安装K8S集群环境

前置准备(所有节点上都需要操作)

实验中准备3台centos虚拟机,一台作为master(192.168.26.21),两台作为worker(192.168.26.22、192.168.26.23)

以下为所有节点上都需要操作的步骤:

(1)同步/etc/hosts,使所有节点都能互相解析

#1.编辑/etc/hosts文件
vim /etc/hosts
#2.都同步为如下
192.168.26.21 vms21.rhce.cc vms21
192.168.26.22 vms22.rhce.cc vms22
192.168.26.23 vms23.rhce.cc vms23
#修改好master上的后,可以拷贝到其他节点上
scp /etc/hosts vms22:/etc
scp /etc/hosts vms23:/etc

(2)所有节点关闭selin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴陵FL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值