本帖最后由 山东_朱文鑫 于 2022-10-20 21:27 编辑
大家好,我是大白,最可怕的敌人,就是没有坚强的信念。优质的帖子也在尽力中提供,也希望各位道友多多支持,让我引劫渡劫成功哈哈哈。
大白队口号就是:砸锅卖铁我最行,拼死拼活就要赢!!!!!!!!!!!!
今天不分享配置方案案例,今天分享的是容器技术知识以及案例分享,在如今越来越火的“Docker”技术,很多人在听见过或者听说过别人谈论这个技术,但是还是有些小伙伴并不清楚这到底是个什么东西,为什么应用的越来越多,今天我就应各位小伙伴的私信结合案例分享一下容器技术。
容器的背景:
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。
2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。
不开则已,一开惊人。越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。
在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。
什么是容器:
容器技术是英文单词Linux Container的汉译。Linux Container两个单词,第一个Linux表明了容器技术一般是应用在Linux操作系统上面;Container意思有:容器,集装箱,货柜的意思,为了方便理解,这里采用集装箱的汉译介绍容器的概念。
Docker技术的三大核心概念:
镜像(Image):Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container):用镜像搭建好的系统就是容器
仓库(Repository):负责对Docker镜像进行管理的
镜像(Image):Docker镜像里包含了已打包的应用程序及其所依赖的环境。它包含应用程序可用的文件系统和其他元数据,如镜像运行时的可执行文件路径。
容器(Container):Docker容器通常是一个Linux容器,它基于Docker镜像被创建。一个运行中的容器是一个运行在Docker主机上的进程,但它和主机,以及所有运行在主机上的其他进程都是隔离的。这个进程也是资源受限的,意味着它只能访问和使用分配给它的资源(CPU、内存等)。仓库(Repository):Docker镜像仓库用于存放Docker镜像,以及促进不同人和不同电脑之间共享这些镜像。当编译镜像时,要么可以在编译它的电脑上运行,要么可以先上传镜像到一个镜像仓库,然后下载到另外一台电脑上并运行它。某些仓库是公开的,允许所有人从中拉取镜像,同时也有一些是私有的,仅部分人和机器可接入。
Docker的技术优势:
1:更高效的利用系统资源 2:更快速的启动时间 3:一致的运行环境 4:更轻松的迁移 5:更轻松的维护和扩展
Docker的使用流程:
但是如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。就在这个时候,K8S出现了。
K8S定义:
K8S,就是基于容器的集群管理平台,它的全称,是kubernetes,K8S是2014年6月由Google公司正式公布出来并宣布开源的。
K8S组件:
一个K8S系统,通常称为一个K8S集群(Cluster)。这个集群主要包括两个部分:
一个Master节点(主节点) 一群Node节点(计算节点)
K8S之Masrer:
Master节点包括API Server、Scheduler、Controller manager、etcd。
API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。
Scheduler负责对集群内部的资源进行调度,相当于“调度室”。
Controller manager负责管理控制器,相当于“大总管”。
K8S之Node:
Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。
Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个 server的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。
Docker,不用说了,创建容器的。
Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
Kube-proxy,主要负责为Pod对象提供代理。
Fluentd,主要负责日志收集、存储与查询。
K8S创建一个Pod的流程:
1)、用户提交创建Pod的请求,可以通过API Server的REST API,也可用Kubectl命令行工具。
2)、API Server处理用户请求,存储Pod数据到etcd。
3)、Schedule通过和API Server的watch机制,查看到新的Pod,尝试为Pod绑定Node。
4)、过滤主机:调度器用一组规则过滤掉不符合要求的主机,比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机。
5)、主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。
6)、选择主机:选择打分最高的主机,进行binding操作,结果存储到etcd中。
7)、Kubelet根据调度结果执行Pod创建操作: 绑定成功后,会启动container,Scheduler会调用API在数据库etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有Pod信息。运行在每个工作节点上的Kubelet也会定期与etcd同步bound pod信息,一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动Pod内的容器。
案例分享:
客户当前平台网络:
上传镜像:
把压缩包上传到华为镜像仓库,在镜像仓库,上传镜像文件;
创建rbac的yaml文件:
配置rbac文件,登录master后台进行修改,先创建一个ad-cdlr-rbac.yaml文件
touch ad-cdlr-rbac.yaml
Vim ad-cdlr-rbac.yaml
执行此文件:kubectl apply -f ad-ctlr-rbac.yaml
创建screct的yaml文件:
创建Screct用于记录敏感数据
Touch ad-cdlr-rbac.yaml
Vim ad-cdlr-rbac.yaml
执行此文件:kubectl apply -f ad-cdlr-rbac.yaml
Username:AD的管理员账号
Password:AD的管理员密码
以上的字段都是要通过base64码放进去
通过deployment部署开始上传的镜像
Touch ad-ctlr-deployment.yaml
Vim ad-ctlr-deployment.yaml
执行此文件:kubectl apply -f ad-ctlr-deployment.yaml
修改image的路径,该路径是开始上传镜像的目录,在deployment的yaml文件中
修改default-ingress-ip:配置默认的ingress ip对应AD虚拟服务
容器常见报错:
执行以上步骤后,在华为k8s上有生成的一个容器,查看容器的状态是已运行还是未就绪,已就绪是正常,未就绪需要查看报错日志,查看报错日志的内容
容器没有问题后,查看AD是否可以和该容器之间做配置下发,在master上查看对应日志
先创建一个ad-ctlr-calico.yaml
Touch ad-ctlr-calico.yaml
Vim ad-ctlr-calico.yaml
Ipv4Address:字段是和容器之间通信的地址,修改完成后在master上传一个calicoctl的一个文件,然后给执行权限,之后执行 ./calicoctl apply -f ad-ctlr-calico.yaml
先创建一个ad-ctlr-bgppeer.yaml
Touch ad-ctlr-bgppeer.yaml
Vim ad-ctlr-bgppeer.yaml
执行./calicoctl apply -f ad-ctlr-bgppeer.yaml
在资源管理-网络管理添加service即可,关联刚开始的工作负载:
创建配置项,可以在界面配置,也可以在后台创建一个文件:
创建文件Touch ad-ctlr--testtomcat
Vim ad-ctlr--testtomcat
kubectl apply -f ad-ctlr--testservice.yaml
配置完成后,在界面可以看到新建的配置项配置项
完成后在AD上可以看到自动下发的虚拟服务配:
以上就是本次的容器技术Docker&K8s知识以及案例分享,感谢大佬们的参阅,此贴先到这里后续会带上更加实用的帖子,感谢大家!
励志分享超清壁纸语句~~:
衡量一个人是高贵还是低贱,要看他具有什么样的品质,而不是看他拥有多少,财富。——比彻
好的今天就到这里,老样子,感谢各位大神的参阅,孩子为了挣豆子不容易,孩子家里穷没豆子吃饭了!!! |