部署运维之Docker+Jenkins+K8S

           如今快速发展的时代,互联网项目的开发成本和项目维护的成本也在逐渐的减少,如果是以往那种单体的部署项目,那么在如今的时代就显得很臃肿的开发成本很高,效率低下,维护困难,处理速度极其的慢。一旦在分布式和集群的模式下,这些工作就会显得很重要,运维和部署的维护以及监控就显得很重要。什么样的技术能够解决在分布式环境下,能够将多服务集聚在一起解决同一样的问题,他们之间对外是独立,而对内是相互独立,会进行信息的互通的,这就需要一套完善的运维,部署,监控为一体的解决方案之--K8s+Docker真正的分布式进群+Jenkins的监控环境

为了工作的开展和项目的安全和可实施性很多都是在虚拟机下进行或者直接阿里云部署也行。

什么是Docker

          使用最广泛的开源容器引擎,一种操作系统级的虚拟化技术,依赖于Limux内核特性: Namespace和Cgroups ,一个简单的应用程序打包工具。提供简单的应用程序打包工具开发人员和运维人员职责逻辑分离多环境保持一致性。

Docker基本组成

部署运维之Docker+Jenkins+K8S_第1张图片

Docker Client:客户端

Ddocker Daemon:守护进程

Docker Images:镜像

Docker Container:容器

Docker Registry:镜像仓库

Docker与VM的对比

部署运维之Docker+Jenkins+K8S_第2张图片

部署运维之Docker+Jenkins+K8S_第3张图片

什么时候用?

1:应用程序打包和发。2:应用程序隔离持续集成。3:部署微服务。4:快速搭建测试环境。5:提供PaaS产品(平台即服务)

安装Docker

安装环境Centos7上进行安装,Docker有企业版和社区办,企业版比较丰富。

Docker官网:https://www.docker.com/

Docker支持很多有  Linux (CentOS,Debian,Fedora,Oracle Linux, RHEL,SUSE和Ubuntu)Mac

可以查看 权威的文档:https://docs.docker.com

安装之前进行设置

查看centos的版本

关闭防火墙

部署运维之Docker+Jenkins+K8S_第4张图片

修改selinux为禁用

部署运维之Docker+Jenkins+K8S_第5张图片

查看 getenfore

安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

部署运维之Docker+Jenkins+K8S_第6张图片

添加Docker软件包源

部署运维之Docker+Jenkins+K8S_第7张图片

查看yum添加的位置

安装Docker CE      yum install -y docker-ce

部署运维之Docker+Jenkins+K8S_第8张图片

等待一段时间后。。。

启动Docker服务并设置开机启动

systemctl start docker

systemctl enable docker

运行测试是否成功:

部署运维之Docker+Jenkins+K8S_第9张图片

查看当前的Docker信息

Docker info

部署运维之Docker+Jenkins+K8S_第10张图片

部署运维之Docker+Jenkins+K8S_第11张图片

创建容器:

docker run -it nginx

查看容器的状态表

docker ps

打开新窗口访问容器 钱查看docker的苏足迹的IP

docker inspect nginx的ID

部署运维之Docker+Jenkins+K8S_第12张图片

查看:

curl+IP

部署运维之Docker+Jenkins+K8S_第13张图片

进入该容器中

Docker exec -it  ID/NAME

查看容器内部的文件信息

ls

查看Docker容器

docker ps

镜像管理

什么是镜像

        Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。,从哪里来? Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像, Docker工具默认从这个公共镜像库下载镜像。https://hub. docker. com/explore默认是国外的源,下载会慢,建议配置国内镜像仓库:

  配置如下:

编辑文件添加

vi   /etc/docker/daemon.json

{
  "registry-mirrors": [ "https://registry.docker-cn.com"]
}

重启下Docker

拉去镜像

部署运维之Docker+Jenkins+K8S_第14张图片

指定拉去镜像

镜像与容器联系

      镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/中。 容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。 Docker使用存储驱动管理镜像每层内容及可读写层的容器层。

查看Docker的镜像容器的层次

部署运维之Docker+Jenkins+K8S_第15张图片

部署运维之Docker+Jenkins+K8S_第16张图片

镜像管理常用命令

使用Docker --help  如:

docker image -help

查看镜像的详情

Docker的拉取

Docker的删除

给镜像标记

总结如下:

部署运维之Docker+Jenkins+K8S_第17张图片

容器管理-创建容器常见选项

部署运维之Docker+Jenkins+K8S_第18张图片

创建容器:

docker container run -itd --name bs busybox

部署运维之Docker+Jenkins+K8S_第19张图片

进入容器

docker container attach bs

从新进入提示如上 是退出容器就退出终端  

解决:

然后执行ctrl+p+q

部署运维之Docker+Jenkins+K8S_第20张图片

查看系统容器的挂载情况

部署运维之Docker+Jenkins+K8S_第21张图片

三个文件被修改  重启都是无法生效的

如:

部署运维之Docker+Jenkins+K8S_第22张图片

退出 :ctrl+p+q

在重启:

部署运维之Docker+Jenkins+K8S_第23张图片

暴露容器的端口

docker container run -itd -p 8080:80 --name nginx01 nginx

部署运维之Docker+Jenkins+K8S_第24张图片

访问测试 log日志

部署运维之Docker+Jenkins+K8S_第25张图片

日志存储在 

查看josn的log输出

部署运维之Docker+Jenkins+K8S_第26张图片

重要持续运行重要的项目就需要实施的重启 命令

docker container run -itd -p 8081:80 --name nginx03 --restart=always nginx

如下是docker 容器的命令

部署运维之Docker+Jenkins+K8S_第27张图片

限制容器使用的CPU 

限制物理内存

查看:

容器管理-容器管理常用命令

部署运维之Docker+Jenkins+K8S_第28张图片

部署运维之Docker+Jenkins+K8S_第29张图片

进入容器:

docker容器的提交

管理应用程序数据-数据卷

Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。 volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。 bind mounts:可以存储在宿主机系统的任意位置。 tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统。

如上位置是存储数据集的文件

部署运维之Docker+Jenkins+K8S_第30张图片

创建数据卷和查看详细的信息

部署运维之Docker+Jenkins+K8S_第31张图片

创建器并且使用数据卷  重要的数据持久化在数据卷中

部署运维之Docker+Jenkins+K8S_第32张图片

打开新的会话查看

部署运维之Docker+Jenkins+K8S_第33张图片

删除所有的容器

部署运维之Docker+Jenkins+K8S_第34张图片

ps:但是容器删除 数据卷还在  可以继续引用

如:

访问依然可以  添加页面测试

部署运维之Docker+Jenkins+K8S_第35张图片

测试数据卷之间的共享

部署运维之Docker+Jenkins+K8S_第36张图片

同一个数据卷

没有指定数据卷的名称 则是一个匿名的数据卷  如

部署运维之Docker+Jenkins+K8S_第37张图片

将数据卷挂在到宿主机上

部署运维之Docker+Jenkins+K8S_第38张图片

实战

管理应用程序数据-搭建LNMP网站平台

远程下载:get https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

自定义网络

先删除

自定义

查看

部署运维之Docker+Jenkins+K8S_第39张图片

创建Mysql数据库容器

docker run -itd \ --name lnmp_mysql \ --net lnmp \ -p 3306:3306 \ --mount src=mysql-vol,dst=/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7 --character-set-server=utf8

查看数据卷

部署运维之Docker+Jenkins+K8S_第40张图片

部署运维之Docker+Jenkins+K8S_第41张图片

创建所需数据库

docker exec lnmp_mysql sh \ -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'

部署运维之Docker+Jenkins+K8S_第42张图片

装mysql的客户端

链接mysql测试

部署运维之Docker+Jenkins+K8S_第43张图片

创建PHP环境容器

docker run -itd \ --name lnmp_web \ --net lnmp \ -p 88:80 \ --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm

解压上传的压缩包

查看

访问测试之前 添加开发的端口

部署运维之Docker+Jenkins+K8S_第44张图片

部署运维之Docker+Jenkins+K8S_第45张图片

 

部署运维之Docker+Jenkins+K8S_第46张图片

网络管理-四种网络模式

部署运维之Docker+Jenkins+K8S_第47张图片

bridge 默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。

host 容器不会获得一个独立的network namespace,而是与宿主机共用一个。  

none 获取独立的network namespace,但不为容器进行任何网络配置。

 container 与指定的容器使用同一个network namespace,网卡配置也都是相同的。  自定义 自定义网桥,默认与bridge网络一样。

默认bridge的工作方式:

Dockerfile-常用指令

docker指令

构建网站

构建java网站环境镜像

vi Dockerfile文件

FROM centos:7 MAINTAINER www.aliangedu.com ADD jdk-8u45-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/local/jdk1.8.0_45 ADD apache-tomcat-8.0.46.tar.gz /usr/local COPY server.xml /usr/local/apache-tomcat-8.0.46/conf RUN rm -f /usr/local/*.tar.gz WORKDIR /usr/local/apache-tomcat-8.0.46 EXPOSE 8080 ENTRYPOINT ["./bin/catalina.sh", "run"]

构建

ps:需要将需要的安装包传入根目录下

构建私有镜像仓库Harbor

       Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,Harbor是镜像仓库,那么就应当是存储镜像的,镜像的存储harbor使用的是官方的docker registry服务去完成,harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。

下载对应的二进制安装包进行安装

如:

安装docker

自签证书生成

解压包  harbor

 

名字可以输入其他提示可以不用管

上述命令可以写成自己的地址和信息

查看生产的证书

待更新。。。。。。。。。。。。。。

什么是Kubernetes

    Kubernetes是Google在2014年开源的一个容器集群管理系统, Kubernetes简称K8s。K8S用于容器化应用程序的部署,扩展和管理。K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。Kubernetes目标是让部署容器化应用简单高效。

特点

     1: 自我修复在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

   2:弹性伸缩使用命令、U1或者基于CPU使用情况自动快速扩客和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

  3:自动部署和回深K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影业务。·

  4:服务发现和负载均衡K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称) ,并且负载均衡关联的所有容器,使得用户无需考虑容器P问题。·

  5:机密和配置管理管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序便用。·

  6:存储编排挂载外部存储系统,无论是来自本地存储,公有云(如AWS) ,还是网络存储(如NFS、 GlusterS、 Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。·批处理提供一次性任务,定时任务;满足批量数据处理和分析的场景。

架构

部署运维之Docker+Jenkins+K8S_第48张图片

组件

部署运维之Docker+Jenkins+K8S_第49张图片

部署运维之Docker+Jenkins+K8S_第50张图片

核心部分

a: Pod最小部署单元-组容的集合-个Pod中的容器共享网络命名空间 Pod是短暂的

b:Label :标签,附加到某个资源上,用于关联对象、查询和筛选

c:Namespace:命名空间,将对象逻辑上隔离

d:Controllers ReplicaSet :确保预期的Pod副本数量Deployment:无状态应用部署StatefulSet :有状态应用部署DaemonSet:确保所有Node运行同一个PodJob:一次性任务Cronjob:定时任务更高级层次对象,部署和管理Pod

e:Service防止Pod失联·定义一组Pod的访问策略

集群规划

部署运维之Docker+Jenkins+K8S_第51张图片

部署运维之Docker+Jenkins+K8S_第52张图片

配置准备

关闭防火墙

部署运维之Docker+Jenkins+K8S_第53张图片

修改主机Master名称

 加入:

查看

同理其他的node也一样

wait。。。。。。。。。。。。。。。。。。。。。。。。。

 

你可能感兴趣的:(部署运维之Docker+Jenkins+K8S)