猿创征文 | 云原生领域之容器日常使用工具推荐
一、云原生介绍
1.云原生定义
- 云原生计算基金会(CNCF)对云原生的官方定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格(Service Mesh)、微服务、不可变基础设施和声明式API。
2.容器技术简介
容器技术是云原生生态系统的核心,它通过简化开发人员的操作极大地提升了开发速度和质量。通过使用容器(例如Docker),团队可以指定其系统依赖关系,同时提供统一通用的执行层,该层使基础架构团队能够操作单个基础设施,例如容器编排工具(如Kubernetes)。
3.云原生相关工具导航
- 以下是个人在云原生容器方面日常使用的10个主要工具
docker
Harbor
docker-compose
portainer
kubernetes
helm
kuboard
ansible
jumpserver
WebVirtMgr
二、Docker
1.Docker介绍
①Docker简介
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器)。
②Docker特点
- 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
- 资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。
- 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
- 写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
- 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
- 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器,无需使用模板或手动配置。
- 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
③Docker的三个基本概念
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,可以用来保存容器运行所需要的镜像。常用的有本地私有镜像仓库和远程harbor镜像仓库。
④Docker的架构图
2.Docker的优势
-
更高效的利用系统资源
-
更快速的启动时间
-
一致的运行环境
-
持续支付和部署
-
更轻松的迁移
-
更轻松的维护和拓展
3.Docker的使用效果
①查看宿主机的容器列表
[root@node ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8408fdf0dc10 openproject/community:12 "./docker/prod/entry…" 2 hours ago Up 2 hours 5432/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp compose_proxy_1
0924fcec04ff openproject/community:12 "./docker/prod/entry…" 2 hours ago Up 2 hours 80/tcp, 5432/tcp compose_worker_1
b5103772dd9c openproject/community:12 "./docker/prod/entry…" 2 hours ago Up 2 hours (healthy) 80/tcp, 5432/tcp compose_web_1
②访问容器应用
4.Docker工具的使用心得
1.方便快捷,大量节省了部署应用的时间,方便快捷部署应用服务,以前需要几个小时部署的应用,现在只需几分钟使用Docker快速完成。
2.使用灵活,可以使用Docker快速部署测试环境,也可以运行工具类容器免去安装工具烦恼。
3.节省资源,容器是轻量级的,可以节省大量计算机资源,一台主机以前也许只能安装几个虚拟机,但是可以安装几十个容器。
4.提升效率,当部署一个服务时,有时需要多个应用支持,还有环境的配置,docker可以通过docker-compose快速将部署业务。
5.管理方便,可以通过各种容器管理平台,例如k8s,可以有效管理容器。
三、Harbor镜像仓库
1.Harbor介绍
Harbor 是一个用于存储和分发Docker镜像的企业级Registry服务器。
2.Harbor的优点
- 基于角色的访问控制 -
用户与 Docker 镜像仓库通过"项目"进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制
镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面
用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
- AD/LDAP 支持
Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
- 审计管理
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化 -
已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API -
RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
- 部署简单 -
提供在线和离线两种安装工具,也可以安装到 vSphere 平台(OVA 方式)虚拟设备。
3.Harbor的使用效果
①访问harbor仓库
②查看docker镜像
③上传镜像到harbor的操作
docker tag nginx:latest 192.168.3.250:8090/library/nginx:5.0 # 将本地镜像打上标签
docker push 192.168.3.250:8090/library/nginx:5.0 # 上传镜像到harbor服务器
4.harbor的使用心得
1.部署简单,可以使用华为云等云服务器快速部署harbor仓库。
2.界面美观,harbor界面简洁美观,使用简单易上手。
3.镜像存放,可以作为个人私有docker镜像的存放中心,方便管理。
四、docker-compose工具
1.docker-compose介绍
docker-compose 是用于定义和运行多容器 Docker 应用程序的工具。我们可以通过docker-compose,使用 YAML文件来配置应用程序需要的所有服务。
2.docker-compose写法
[root@docker filemanager]# cat docker-compose.yaml
version: '3.5'
services:
filemanager:
image: smokserwis/filemanager
restart: always
container_name: filemanager
volumes:
- /data/filemanager/files:/var/www/mount
ports:
- 8011:80
networks:
- files
networks:
files:
3.docker-compose的使用
[root@docker filemanager]# docker-compose up -d
Creating network "filemanager_files" with the default driver
Creating filemanager ... done
4.docker-compose的优点
- Compose适用于所有环境:生产,开发,测试以及CI工作流程等工作环境中。
- 定义和运行多个 Docker 容器的应用。
- 安装简单,使用方便,易上手使用。
5.docker-compose的使用心得
1.docker-compose非常适合组合使用多个容器进行开发的场景,同时定义多个容器来组成一个服务,来满足测试开发需求。
2.使用方便,对于学习playbook的人来说,docker-compose易简单上手。
3.提高了效率,不用启动一个复杂的容器时,运行一段超长繁琐的命令,只需一个docker-compose.yaml就能搞定。
五、portainer
1.Portainer介绍
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,
基本能满足中小型单位对容器管理的全部需求。
2.Portainer优点
-
支持容器管理、镜像管理。
-
轻量级,消耗系统资源少。
-
基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。
-
支持权限分配、集群。
-
Portainer 提供了图形化界面,用于方便地管理Docker环境
3.Portainer的使用
①登录Portainer的web界面
②查看容器列表
③查看容器负载情况
4.Portainer的使用心得
1.web界面友好,适合新手小白上手。
2.操作简单,docker命令的操作基本都可以在Portainer的web界面操作,方便快捷。
3.容器负载查看,可以查看每个容器的资源负载情况,图形化显示,这是个人最喜欢使用的功能。
4.容器日志,对于容器故障,在portainer查看日志一目了然。
六、kubernetes
1.k8s介绍
- Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
2.k8s的日常使用
①k8s的一个service应用的yaml写法
[root@master pvc]# cat mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql001
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy: {}
template:
metadata:
labels:
app: mysql
spec:
volumes:
- name: db
persistentVolumeClaim:
claimName: pvc-mysql
containers:
- image: mysql:5.7
name: mysql
ports:
- name: mysql
containerPort: 3306
protocol: TCP
env:
- name: MYSQL_ROOT_PASSWORD
value: root
- name: MYSQL_DATABASE
value: data
resources:
requests:
cpu: 0.1
memory: 128Mi
limits:
cpu: 0.4
memory: 512Mi
---
apiVersion: v1
kind: Service
#元数据
metadata:
creationTimestamp: null
labels:
app: mysql
name: mysql-svc
#描述部分
spec:
ports:
- name: web-port
port: 3306
protocol: TCP
targetPort: 3306
nodePort: 30066
selector:
app: mysql
type: NodePort
②查看pod状态
[root@master pvc]# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-tomcat9 1/1 Running 3 (28m ago) 18d
mysql001-595bc8cb5c-snbkj 1/1 Running 0 65s
nfs-client-provisioner-5bbb6fc745-ncdht 1/1 Running 2 (23m ago) 11h
③查看svc状态
[root@master pvc]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18d
mysql-svc NodePort 10.96.1.254 <none> 3306:30066/TCP 3m16s
3.k8s的优点
- 自动装箱:运行在容器之上,通过调度机制混合关键型应用和非关键型应用的工作负载于同一节点以提升资源利用率。
- 自我修复:当节点挂掉后,会对当前节点重启,如果重启失败,会将当前节点部署到另外一个节点运行,当另一个节点未完全启动,不对外开放节点服务。
- 自动伸缩:HPA(Horizontal Pod Autoscaling) 自动更新工作负载资源(例如 Deployment 或者 StatefulSet), 目的是自动扩缩工作负载以满足需求。
- 负载均衡:节点通过service来访问应用服务,service则通过连接多个pod,达到负载均衡的效果。
- 滚动更新:当kubernates监测到新加的服务没有问题才会停止服务。
- 版本回退:当新增加的功能由问题时,可以回退到之前的版本,按照之前的效果运行。
- 密码配置管理:Kubernetes专门提供了Secret对象为其解耦,即便利了应用的快速开发和交付,又提供了一定程度上的安全保障。
- 存储编排:自动实现存储系统挂载和应用,特别对有状态应用实现数据持久化非常重要,存储系统可以来自本地目录、网络存储、公共存储服务。
- 批处理:使用jobs与cronjobs资源对象,来提供一次性服务,定时任务。
4.k8s的使用心得
1.作为云原生时代的IT人员,k8s是提升自我的重要技术,实现自我价值。
2.k8s的功能强大,生态也很完整,有着大量工具和插件支持,满足生产和测试开发环境需求。
3.通过对k8s集群的学习,可以了解到k8s的强大之处,使得以前部署复杂的生产服务架构,通过k8s部署变得更加简单。
七、helm工具
1.helm介绍
Helm是Kubernetes的包管理器,类似于Python的pip centos的yum,主要用来管理 Charts。
2.helm的基本使用
helm repo add stable https://apphub.aliyuncs.com/stable # 添加仓库源
helm repo list # 列出所有仓库源
helm search repo weave-scope # 搜索chart包
helm install scope stable/weave-scope #部署应用
helm uninstall scope # 卸载应用
3.helm优点
helm包管理器用于简化操作系统中应用程序的安装、升级、恢复和删除过程。这些应用程序以包为单元定义,包含目标软件及其依赖项的元数据。
4.helm使用心得
1.将一个复杂的k8s的应用程序,通过包管理的方式,大大简化了部署流程,方便了维护和使用。
2.各种helm应用仓库中心,为我们更加方便快捷部署应用。
八、Kuboard
1.Kuboard介绍
Kuboard类似于 Kubernetes Dashboard,是一款轻量级产品,也是kubernetes 多集群管理工具。
2.Kuboard优点
- 多种认证方式
- 多集群管理
- 微服务分层展示
- 工作负载的直观展示
- 工作负载编辑
- 存储类型支持
- 丰富的互操作性
- 套件扩展
- 告警配置
- 操作审计
3.Kuboard的使用
①查看命名空间
②查看工作负载
③查看应用的yaml文件
4.Kuboard的使用心得
1.kuboard是一款轻量级k8s集群管理平台,部署简单,占用资源少。
2.界面简洁美观,功能强大,可以对k8s的资源对象有效管理。
3.方便对k8s集群运维,提高了工作效率。
九、Ansible
1.ansible简洁
Ansible是一个IT自动化工具。 它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。
2.ansible的优点
-
Ansible融合了众多老牌运维工具的优点,基本上pubbet和saltsatck能实现的功能,ansible都可以实现。
-
Ansible是一个轻量级的工具,无需在客户端上安装agent,更新时,只需要在操作机上进行一次更新即可。
-
批量任务执行可以写成脚本,而且不用分发到远程就可以执行。
-
Ansible是一致性,高可靠性,安全性设计的轻量级自动化工具。
-
使用python编写,维护更加简单。
3.ansible的使用
①使用ansible查看节点的连通性
[root@k8s-master ~]# ansible all -m ping
192.168.3.203 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.3.202 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
②ansible使用playbook批量部署服务
ansible-playbook yum_repository.yml # 批量部署各节点的yum仓库
4.ansible的使用心得
1.高效的自动化运维工具,可以大大减轻工作量,提高工作效率。
2.易上手的playbook,有着极大的灵活性,满足日常工作需求。
3.轻量级,客户端免安装,使用方便快捷。
十、Jumpserver
1.Jumpserver简介
Jumpserver是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent,支持再次开发 实现了跳板机基本功能,认证、授权、审计 集成了Ansible。
2.Jumpserver特点
1.JumpServer 是全球首款开源的堡垒机,使用 GNU GPL v3.0 开源协议,是符合 4A 规范的运维安全审计系统。
2.JumpServer 使用 Python / Django 为主进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。
3.JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。
3.Jumpserver首页
4.Jumpserver使用体会
1.Jumpserver界面美观,布局合理,日常操作非常快捷。
2.Jumpserver配合ansible使用,可以对各服务器节点进行有效管理。
3.通过web界面下发ansible命令,直观显示执行结果。
十一、WebVirtMgr
1.WebVirtMgr简介
WebVirtMgr是一个基于libvirt的Web界面,用于管理虚拟机。它允许您创建和配置新域,并调整域的资源分配。
2.WebVirtMgr优点
-
WebVirtMgr采用几乎纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的可视化。
-
操作简单,易于使用 、通过libvirt的API接口对kvm进行管理、提供对虚拟机生命周期管理。
-
宿主机管理支持以下功能、CPU利用率、内存利用率、网络资源池管理、存储资源池管理、虚拟机镜像、虚拟机克隆、快照管理、日志管理、虚机迁移、虚拟机管理支持以下功能、CPU利用率、内存利用率、光盘管理、关/开/暂停虚拟机、安装虚拟机、VNC console连接、创建快照。
3.WebVirtMgr的使用
①访问WebVirtMgr
②查看虚拟机实例
③访问KVM虚拟机
④对KVM虚拟机资源监控
4.WebVirtMgr的使用心得
1.为KVM虚拟机提供了一个简洁高效的web界面,对于KVM虚拟机的日常使用变得十分方便。
2.可以通过VNC直接连接KVM虚拟机,进行配置工作。
3.可以有效监控虚拟机资源使用情况。
4.可以作为个人开发测试的一个虚拟化平台,安装多个KVM虚拟机,部署kubernetes集群环境。
5.占用资源少,节省机器资源,提高运行效率。