Kuboard+Harbor+Dockerfile实战项目

一、知识点分析

1.什么是Kuboard?
  Kuboard,是一款免费的 Kubernetes 图形化管理工具,Kuboard 力图帮助用户快速在 Kubernetes 上落地微服务。兼容 Kubernetes 版本 1.13 及以上。Kuboard 每周发布一个 beta 版本,最长每月发布一个正式版本,经过两年的不断迭代和优化,已经具备多集群管理、权限管理、监控套件、日志套件等丰富的功能,并且有 1000+ 的企业将 Kuboard 应用于其生产环境。Kuboard 自 2019年8月发布第一个版本以来,得到了众多用户的认可,目前已经获得了 10000+ GitHub Star。
2.什么事Harbor?
  Harbor 是一个开源注册表,它通过策略和基于角色的访问控制来保护工件,确保扫描映像并消除漏洞,并将映像标记为受信任。Harbor 是 CNCF 毕业项目,提供合规性、性能和互操作性,帮助您跨云原生计算平台(如 Kubernetes 和 Docker)一致、安全地管理工件。
3.什么事Dockerfile?
  Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。对于运维人员:在部署时,可以实现应用的无缝移植,对于开发人员:可以为开发团队提供一个完全一致的开发环境,对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了。
(注:承接上文:Kubernetes1.23.5集群部署

二、流程关系图

Dockerfile
Harbor
Kuboard
Kubernetes
Service
  • Dockerfile:定制image镜像,服务的环境、项目一体式打包,使用镜像启动容器即可访问项目服务。
  • Harbor:image镜像仓库,定制的image镜像最新版本、历史版本存于此处。
  • Kuboard:Kubernetes单点、集群管理面板,代替k8s Dashboard。
  • Kubernetes:容器编排工具,Docker只是容器比较火的一种。
  • Service:应用服务,例如web服务

  利用Dockerfile自定义务镜像上传至私有镜像仓库Harbor中,Kuboard从私有镜像仓库拉取定制的镜像创建工作负载启动docker容器并发布到k8s集群的pod中。整个的过程就是一个简单的服务发版过程。

三、项目实战

1.自定义image镜像

Dockerfile语法:
COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

(注意:<目标路径>容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。)

ADD:ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同,CMD 在docker run 时运行,RUN 是在 docker build。

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

ARG:构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

ARG <参数名>[=<默认值>]

VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

EXPOSE:仅仅只是声明端口。

EXPOSE <端口1> [<端口2>...]

WORKDIR:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。

WORKDIR <工作目录路径>

USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。

USER <用户名>[:<用户组>]

HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令

ONBUILD:用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。

ONBUILD <其它指令>

LABEL:LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

1.1具体步骤(以nginx搭建web服务器为例子):

[root@node-3 dockerFile]# mkdir  earth-service && cd earth-service
[root@node-3 earth-service]# ls
Dockerfile  Github-Earth-master  nginx-1.20.2.tar.gz  nginx.conf
[root@node-3 earth-service]# ls Github-Earth-master/
index.html  lib  note  readme.md  ref  src  webgl-globe

在这里插入图片描述
(注:从左到右一次是dockerfile文件脚本、前端项目目录、Nginx源码包、项目定制的nginx配置文件)
Dockerfile内容:

[root@node-3 earth-service]# vim Dockerfile 
# This my first nginx Dockerfile
# Version 1.0

# Base images 基础镜像
FROM centos:7
#MAINTAINER 维护者信息
MAINTAINER WangXinkun,https://blog.csdn.net/qq_43417559?type=blog

#ENV 设置环境变量
ENV PATH /srv/program/nginx/sbin:$PATH

#RUN 执行以下命令 
RUN yum install net-tools gcc vim pcre-devel openssl-devel make zlib-devel  -y
RUN groupadd nginx
RUN useradd -g nginx -m nginx
RUN mkdir /srv/program
RUN mkdir /srv/soft
#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.20.2.tar.gz /srv/soft/
#WORKDIR 相当于cd
WORKDIR /srv/soft/nginx-1.20.2
RUN ./configure  --prefix=/srv/program/nginx --user=nginx  --group=nginx  --with-stream --with-threads --with-http_ssl_module --with-http_sub_module  --with-http_realip_module --with-http_gzip_static_module  --with-http_stub_status_module
RUN make
RUN make install

RUN rm -rf /srv/program/nginx/conf/nginx.conf
RUN rm -rf /srv/program/nginx/html/index.html
COPY nginx.conf /srv/program/nginx/conf/ 
COPY Github-Earth-master/ /srv/program/nginx/html/
RUN chown -R nginx:nginx /srv/program/nginx

RUN echo 'root:K8s@123' | chpasswd
RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "daemon off;" >> /srv/program/nginx/conf/nginx.conf

#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]

在这里插入图片描述
构建镜像:

#第一次比较慢,因为需要给容器装环境。
[root@node-3 earth-service]#  docker image build .

在这里插入图片描述
在这里插入图片描述
2.上传镜像到harbor
2.1登录Harbor,查看上传镜像的方法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2打标签上传
构建成功最后附带一个镜像id如图
在这里插入图片描述

[root@node-3 earth-service]#  docker image tag 535455674d0a 192.168.200.153:8080/library/earth-service:1.0
[root@node-3 earth-service]# docker images

在这里插入图片描述

[root@node-3 earth-service]#  docker push 192.168.200.153:8080/library/earth-service:1.0

在这里插入图片描述
登录harbor查看
在这里插入图片描述
第一个可以看到是我们自定义上传的镜像,点进去
在这里插入图片描述
我这里在之前就做过几次实验所以有几个迭代版本,从拉去时间就可以区分。点击镜像id还可以看到镜像制作过程命令以及属性信息等:
在这里插入图片描述
在这里插入图片描述

四、Kuboard发布服务

1.登入
在这里插入图片描述
2.创建namespace
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.创建工作负载
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.1配置“容器信息”点击“添加工作容器”
在这里插入图片描述
3.2首次需要创建镜像仓库链接
在这里插入图片描述
在这里插入图片描述
3.3点击复制,去节点上测试(用户密码为harbor的)

[root@node-3 earth-service]# docker login 192.168.200.153:8080/ -u admin -p xxxx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.配置“服务/应用路由”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、访问服务

1.通过容器映射的端口访问(刚才映射的宿主机80端口):http://192.168.200.154/
在这里插入图片描述
(这里给大家讲一下为什么不是153而是154:因为容器被发布到154节点上了,容器绑定宿主机自然也就是154的80端口啦)
在这里插入图片描述
2.通过k8s发布的服务端口访问:
在这里插入图片描述
在这里插入图片描述
服务地址:
节点1:http://192.168.200.153:30107/
节点2:http://192.168.200.154:30107/
节点3:http://192.168.200.155:30107/

在这里插入图片描述
(注:通过k8s发布的服务可以在任意节点访问,这也是k8s的优势)

六、结束语

  感谢大家一直以来的支持与鼓励,项目到此就结束啦,感兴趣的小伙伴可以点一手关注,后期会推出更多精彩内容!


原文连接:https://blog.csdn.net/qq_43417559/article/details/125325886

相关推荐

Linux一些错误总结

【Linux系统编程:基础IO 壹】简单复习C语言文件接口 | 学习系统文件接口 | 认识文件描述符 | Linux下,一切皆文件 | 重定向原理

logrotate command in Linux

FTP服务配置

CentOS7 离线安装 Zabbix5.0

Linux入门与进阶(二)

centos7基础操作

小白的Mac上手指南(干货)

最新京东短信登录+傻妞机器人保姆级部署教程(2022/7/20)

使用systemd,把服务装进 Linux 心脏里~

【Linux】Linux进程概念(学习复习兼顾)

Linux学习(2)——虚拟机和CentOS安装(图文详解超详细)

Linux学习(1) ——Linux基本介绍

Google 为造芯再掀“抢人大战”,英特尔 17 年老将加入

Linux 追踪技术 ftrace的使用(二)

Linux下玩转nginx系列(七)---nginx如何实现限流功能

Linux 是如何启动的

CD 从抓轨到搭建流媒体服务器 —— 以《月临寐乡》为例

shell查询prometheus数据

网络安全——信息隐藏-使用隐写术来防止敏感数据被盗用